Snapshot of commit d5ec1d5018ed24f1b4f32b1d09df6dbd7e2fc425

from branch master of git://git.jetbrains.org/idea/community.git
diff --git a/java/java-tests/testData/anonymous/AnonymousParameterInAnonymousConstructor.java b/java/java-tests/testData/anonymous/AnonymousParameterInAnonymousConstructor.java
new file mode 100644
index 0000000..f2a2729
--- /dev/null
+++ b/java/java-tests/testData/anonymous/AnonymousParameterInAnonymousConstructor.java
@@ -0,0 +1,27 @@
+/*
+ * 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 AnonymousParameterInAnonymousConstructor {
+  AnonymousParameterInAnonymousConstructor() {
+    new Base(new <caret>Inter() {public void m() {}}){};
+  };
+}
+
+class Base {
+  Base(Inter inter) {}
+}
+interface Inter {
+  void m();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/anonymous/AnonymousParameterInAnonymousConstructor2.java b/java/java-tests/testData/anonymous/AnonymousParameterInAnonymousConstructor2.java
new file mode 100644
index 0000000..588249b
--- /dev/null
+++ b/java/java-tests/testData/anonymous/AnonymousParameterInAnonymousConstructor2.java
@@ -0,0 +1,27 @@
+/*
+ * 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 AnonymousParameterInAnonymousConstructor2 {
+  AnonymousParameterInAnonymousConstructor2() {
+    new <caret>Base(new Inter() {public void m() {}}){};
+  };
+}
+
+class Base {
+  Base(Inter inter) {}
+}
+interface Inter {
+  void m();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/anonymous/InsideAnonymousMethod.java b/java/java-tests/testData/anonymous/InsideAnonymousMethod.java
new file mode 100644
index 0000000..5ebe9ff
--- /dev/null
+++ b/java/java-tests/testData/anonymous/InsideAnonymousMethod.java
@@ -0,0 +1,29 @@
+/*
+ * 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 InsideAnonymousMethod {
+  InsideAnonymousMethod() {
+    new Object(){
+      void my() {
+      Base b = new <caret>Base(){};
+      }
+    };
+  }
+}
+
+class Base {}
+interface Inter {
+  void m();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/anonymous/Simple.java b/java/java-tests/testData/anonymous/Simple.java
new file mode 100644
index 0000000..cbbf87f
--- /dev/null
+++ b/java/java-tests/testData/anonymous/Simple.java
@@ -0,0 +1,31 @@
+/*
+ * 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.
+ */
+import java.lang.Object;
+
+class Simple {
+  Object o1 = new Object(){};
+  Object o2 = new Object(){{new Object(){};}};
+
+  Simple() {
+    new Object(){};
+    new Object(){};
+    new Object(){};
+    new Object(){{new Object(){};}};
+    new <caret>Object(){};
+    new Object(){};
+    new Object(){};
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/anonymous/SimpleInConstructor.java b/java/java-tests/testData/anonymous/SimpleInConstructor.java
new file mode 100644
index 0000000..3d9490a
--- /dev/null
+++ b/java/java-tests/testData/anonymous/SimpleInConstructor.java
@@ -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 SimpleInConstructor {
+  SimpleInConstructor() {
+    new Object(){};
+    new <caret>Base(){};
+  }
+}
+
+class Base {}
+interface Inter {
+  void m();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeEditor/smartPsiElementPointers/AClass.java b/java/java-tests/testData/codeEditor/smartPsiElementPointers/AClass.java
new file mode 100644
index 0000000..777991d
--- /dev/null
+++ b/java/java-tests/testData/codeEditor/smartPsiElementPointers/AClass.java
@@ -0,0 +1,2 @@
+class AClass{
+}
diff --git a/java/java-tests/testData/codeEditor/smartPsiElementPointers/Test.java b/java/java-tests/testData/codeEditor/smartPsiElementPointers/Test.java
new file mode 100644
index 0000000..2645b39
--- /dev/null
+++ b/java/java-tests/testData/codeEditor/smartPsiElementPointers/Test.java
@@ -0,0 +1,3 @@
+class Test {
+  AClass field;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/AddMissingParen.java b/java/java-tests/testData/codeInsight/completeStatement/AddMissingParen.java
new file mode 100644
index 0000000..daaf1b2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/AddMissingParen.java
@@ -0,0 +1,7 @@
+
+class Foo {
+    abstract void a();
+    {
+        a<caret>(;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/AddMissingParen_after.java b/java/java-tests/testData/codeInsight/completeStatement/AddMissingParen_after.java
new file mode 100644
index 0000000..3cf8eb4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/AddMissingParen_after.java
@@ -0,0 +1,8 @@
+
+class Foo {
+    abstract void a();
+    
+    {
+        a();<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/AddMissingSemicolon.java b/java/java-tests/testData/codeInsight/completeStatement/AddMissingSemicolon.java
new file mode 100644
index 0000000..8653358
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/AddMissingSemicolon.java
@@ -0,0 +1,7 @@
+
+class Foo {
+    abstract void a();
+    {
+        a(<caret>)
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/AddMissingSemicolon_after.java b/java/java-tests/testData/codeInsight/completeStatement/AddMissingSemicolon_after.java
new file mode 100644
index 0000000..3cf8eb4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/AddMissingSemicolon_after.java
@@ -0,0 +1,8 @@
+
+class Foo {
+    abstract void a();
+    
+    {
+        a();<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/AfterFor.java b/java/java-tests/testData/codeInsight/completeStatement/AfterFor.java
new file mode 100644
index 0000000..edd3a94
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/AfterFor.java
@@ -0,0 +1,6 @@
+public class Foo {
+    {
+        for(int i = 0; i < 100; i++) {
+        }<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/AfterFor_after.java b/java/java-tests/testData/codeInsight/completeStatement/AfterFor_after.java
new file mode 100644
index 0000000..9d15392
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/AfterFor_after.java
@@ -0,0 +1,7 @@
+public class Foo {
+    {
+        for(int i = 0; i < 100; i++) {
+        }
+        <caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/AtBlockEnd.java b/java/java-tests/testData/codeInsight/completeStatement/AtBlockEnd.java
new file mode 100644
index 0000000..f163594
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/AtBlockEnd.java
@@ -0,0 +1,7 @@
+public class Foo {
+    {
+        for(int i = 0; i < 100; i++) {
+            x = 3;
+   <caret>     }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/AtBlockEnd_after.java b/java/java-tests/testData/codeInsight/completeStatement/AtBlockEnd_after.java
new file mode 100644
index 0000000..d7ff4d0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/AtBlockEnd_after.java
@@ -0,0 +1,8 @@
+public class Foo {
+    {
+        for(int i = 0; i < 100; i++) {
+            x = 3;
+        }
+        <caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/BeforeFor.java b/java/java-tests/testData/codeInsight/completeStatement/BeforeFor.java
new file mode 100644
index 0000000..1b61cf5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/BeforeFor.java
@@ -0,0 +1,6 @@
+public class Foo {
+    {
+        <caret>for (int i = 0; i < 100; i++) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/BeforeFor_after.java b/java/java-tests/testData/codeInsight/completeStatement/BeforeFor_after.java
new file mode 100644
index 0000000..c1accd7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/BeforeFor_after.java
@@ -0,0 +1,7 @@
+public class Foo {
+    {
+        for (int i = 0; i < 100; i++) {
+            <caret>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/BeforeIfRBrace.java b/java/java-tests/testData/codeInsight/completeStatement/BeforeIfRBrace.java
new file mode 100644
index 0000000..b539e69
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/BeforeIfRBrace.java
@@ -0,0 +1,5 @@
+class Test {
+    Test(boolean condition) {
+        if (condition<caret>)
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/BeforeIfRBrace_after.java b/java/java-tests/testData/codeInsight/completeStatement/BeforeIfRBrace_after.java
new file mode 100644
index 0000000..ae33296
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/BeforeIfRBrace_after.java
@@ -0,0 +1,7 @@
+class Test {
+    Test(boolean condition) {
+        if (condition) {
+            <caret>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/BeforeStatement.java b/java/java-tests/testData/codeInsight/completeStatement/BeforeStatement.java
new file mode 100644
index 0000000..a475f8b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/BeforeStatement.java
@@ -0,0 +1,5 @@
+public class Foo {
+    {
+<caret>        x = 3;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/BeforeStatement_after.java b/java/java-tests/testData/codeInsight/completeStatement/BeforeStatement_after.java
new file mode 100644
index 0000000..86c825b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/BeforeStatement_after.java
@@ -0,0 +1,6 @@
+public class Foo {
+    {
+        x = 3;
+        <caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/Block.java b/java/java-tests/testData/codeInsight/completeStatement/Block.java
new file mode 100644
index 0000000..dbc20af
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/Block.java
@@ -0,0 +1,6 @@
+
+class Foo {
+    {
+        if (x) {<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/Block1.java b/java/java-tests/testData/codeInsight/completeStatement/Block1.java
new file mode 100644
index 0000000..17b9443
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/Block1.java
@@ -0,0 +1,6 @@
+public class Foo {
+    {
+        {<caret>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/Block1_after.java b/java/java-tests/testData/codeInsight/completeStatement/Block1_after.java
new file mode 100644
index 0000000..dc8bd2e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/Block1_after.java
@@ -0,0 +1,7 @@
+public class Foo {
+    {
+        {
+            <caret>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/Block_after.java b/java/java-tests/testData/codeInsight/completeStatement/Block_after.java
new file mode 100644
index 0000000..bfaf383
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/Block_after.java
@@ -0,0 +1,8 @@
+
+class Foo {
+    {
+        if (x) {
+            <caret>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/BraceFixeNewLine.java b/java/java-tests/testData/codeInsight/completeStatement/BraceFixeNewLine.java
new file mode 100644
index 0000000..cfc79f4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/BraceFixeNewLine.java
@@ -0,0 +1,9 @@
+public class test {
+    void f() {
+        int k1 = 1;
+        int k2 = 2;
+        int[] array = new int[]{k1, k2<caret>
+
+        System.out.print(k1);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/BraceFixeNewLine_after.java b/java/java-tests/testData/codeInsight/completeStatement/BraceFixeNewLine_after.java
new file mode 100644
index 0000000..7a129a9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/BraceFixeNewLine_after.java
@@ -0,0 +1,9 @@
+public class test {
+    void f() {
+        int k1 = 1;
+        int k2 = 2;
+        int[] array = new int[]{k1, k2};
+
+        System.out.print(k1);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/CdrEndlessLoop.java b/java/java-tests/testData/codeInsight/completeStatement/CdrEndlessLoop.java
new file mode 100644
index 0000000..e221622
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/CdrEndlessLoop.java
@@ -0,0 +1,5 @@
+public class Test {
+    public int foo(int i) {
+        int ii = foo(0<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/CdrEndlessLoop_after.java b/java/java-tests/testData/codeInsight/completeStatement/CdrEndlessLoop_after.java
new file mode 100644
index 0000000..b690a469
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/CdrEndlessLoop_after.java
@@ -0,0 +1,5 @@
+public class Test {
+    public int foo(int i) {
+        int ii = foo(0);<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/CompleteBreak.java b/java/java-tests/testData/codeInsight/completeStatement/CompleteBreak.java
new file mode 100644
index 0000000..5d95b11
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/CompleteBreak.java
@@ -0,0 +1,8 @@
+
+class Foo {
+    {
+        if (x) {
+                    break<caret>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/CompleteBreak_after.java b/java/java-tests/testData/codeInsight/completeStatement/CompleteBreak_after.java
new file mode 100644
index 0000000..78ee45d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/CompleteBreak_after.java
@@ -0,0 +1,8 @@
+
+class Foo {
+    {
+        if (x) {
+            break;<caret>            
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/CompleteCall.java b/java/java-tests/testData/codeInsight/completeStatement/CompleteCall.java
new file mode 100644
index 0000000..b13eca1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/CompleteCall.java
@@ -0,0 +1,6 @@
+
+public class Foo {
+    {
+        foo<caret>(x);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/CompleteCall_after.java b/java/java-tests/testData/codeInsight/completeStatement/CompleteCall_after.java
new file mode 100644
index 0000000..1c714c2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/CompleteCall_after.java
@@ -0,0 +1,7 @@
+
+public class Foo {
+    {
+        foo(x);
+        <caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/CompleteCatch.java b/java/java-tests/testData/codeInsight/completeStatement/CompleteCatch.java
new file mode 100644
index 0000000..6cd9279
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/CompleteCatch.java
@@ -0,0 +1,8 @@
+
+class Foo {
+    {
+        try {
+
+        } catch<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/CompleteCatchBody.java b/java/java-tests/testData/codeInsight/completeStatement/CompleteCatchBody.java
new file mode 100644
index 0000000..adf423f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/CompleteCatchBody.java
@@ -0,0 +1,8 @@
+
+class Foo {
+    {
+        try {
+
+        } catch (a<caret> b)
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/CompleteCatchBody_after.java b/java/java-tests/testData/codeInsight/completeStatement/CompleteCatchBody_after.java
new file mode 100644
index 0000000..15b3344
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/CompleteCatchBody_after.java
@@ -0,0 +1,10 @@
+
+class Foo {
+    {
+        try {
+
+        } catch (a b) {
+            <caret>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/CompleteCatchLParen.java b/java/java-tests/testData/codeInsight/completeStatement/CompleteCatchLParen.java
new file mode 100644
index 0000000..001be05
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/CompleteCatchLParen.java
@@ -0,0 +1,8 @@
+
+class Foo {
+    {
+        try {
+
+        } catch (<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/CompleteCatchLParen_after.java b/java/java-tests/testData/codeInsight/completeStatement/CompleteCatchLParen_after.java
new file mode 100644
index 0000000..7c4d093
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/CompleteCatchLParen_after.java
@@ -0,0 +1,9 @@
+
+class Foo {
+    {
+        try {
+
+        } catch (<caret>) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/CompleteCatchWithExpression.java b/java/java-tests/testData/codeInsight/completeStatement/CompleteCatchWithExpression.java
new file mode 100644
index 0000000..ffd4f3c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/CompleteCatchWithExpression.java
@@ -0,0 +1,8 @@
+
+class Foo {
+    {
+        try {
+
+        } catch (a<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/CompleteCatchWithExpression_after.java b/java/java-tests/testData/codeInsight/completeStatement/CompleteCatchWithExpression_after.java
new file mode 100644
index 0000000..0b43a4e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/CompleteCatchWithExpression_after.java
@@ -0,0 +1,9 @@
+
+class Foo {
+    {
+        try {
+
+        } catch (<caret>a) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/CompleteCatch_after.java b/java/java-tests/testData/codeInsight/completeStatement/CompleteCatch_after.java
new file mode 100644
index 0000000..7c4d093
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/CompleteCatch_after.java
@@ -0,0 +1,9 @@
+
+class Foo {
+    {
+        try {
+
+        } catch (<caret>) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/CompleteElseIf.java b/java/java-tests/testData/codeInsight/completeStatement/CompleteElseIf.java
new file mode 100644
index 0000000..a7e2e11
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/CompleteElseIf.java
@@ -0,0 +1,9 @@
+public class Test {
+    public void foo(int x) {
+        if (x > 0) {
+            System.out.println("true");
+        } else {
+            System.out.println("true");
+        }<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/CompleteElseIf_after.java b/java/java-tests/testData/codeInsight/completeStatement/CompleteElseIf_after.java
new file mode 100644
index 0000000..3a4ec51
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/CompleteElseIf_after.java
@@ -0,0 +1,10 @@
+public class Test {
+    public void foo(int x) {
+        if (x > 0) {
+            System.out.println("true");
+        } else {
+            System.out.println("true");
+        }
+        <caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/CompleteIf.java b/java/java-tests/testData/codeInsight/completeStatement/CompleteIf.java
new file mode 100644
index 0000000..1e44cdc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/CompleteIf.java
@@ -0,0 +1,6 @@
+
+class Foo {
+    {
+        if (a<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/CompleteIfKeyword.java b/java/java-tests/testData/codeInsight/completeStatement/CompleteIfKeyword.java
new file mode 100644
index 0000000..c225798
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/CompleteIfKeyword.java
@@ -0,0 +1,6 @@
+
+class foo {
+    {
+      if<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/CompleteIfKeywordStatementGoesToThen.java b/java/java-tests/testData/codeInsight/completeStatement/CompleteIfKeywordStatementGoesToThen.java
new file mode 100644
index 0000000..18a1110
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/CompleteIfKeywordStatementGoesToThen.java
@@ -0,0 +1,8 @@
+
+class foo {
+    {
+        if <caret>foo();
+    }
+    
+    void foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/CompleteIfKeywordStatementGoesToThen_after.java b/java/java-tests/testData/codeInsight/completeStatement/CompleteIfKeywordStatementGoesToThen_after.java
new file mode 100644
index 0000000..8a554d0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/CompleteIfKeywordStatementGoesToThen_after.java
@@ -0,0 +1,10 @@
+
+class foo {
+    {
+        if (<caret>) {
+            foo();
+        }
+    }
+    
+    void foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/CompleteIfKeyword_after.java b/java/java-tests/testData/codeInsight/completeStatement/CompleteIfKeyword_after.java
new file mode 100644
index 0000000..fb645d2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/CompleteIfKeyword_after.java
@@ -0,0 +1,7 @@
+
+class foo {
+    {
+        if (<caret>) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/CompleteIfNextLineBraceStyle.java b/java/java-tests/testData/codeInsight/completeStatement/CompleteIfNextLineBraceStyle.java
new file mode 100644
index 0000000..14f8ca7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/CompleteIfNextLineBraceStyle.java
@@ -0,0 +1,7 @@
+
+class Foo
+{
+    {
+        if (a<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/CompleteIfNextLineBraceStyle2.java b/java/java-tests/testData/codeInsight/completeStatement/CompleteIfNextLineBraceStyle2.java
new file mode 100644
index 0000000..048bb12
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/CompleteIfNextLineBraceStyle2.java
@@ -0,0 +1,9 @@
+
+class Foo
+{
+    {
+        if (a<caret>)
+        {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/CompleteIfNextLineBraceStyle2_after.java b/java/java-tests/testData/codeInsight/completeStatement/CompleteIfNextLineBraceStyle2_after.java
new file mode 100644
index 0000000..53e37bd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/CompleteIfNextLineBraceStyle2_after.java
@@ -0,0 +1,10 @@
+
+class Foo
+{
+    {
+        if (a)
+        {
+            <caret>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/CompleteIfNextLineBraceStyle_after.java b/java/java-tests/testData/codeInsight/completeStatement/CompleteIfNextLineBraceStyle_after.java
new file mode 100644
index 0000000..53e37bd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/CompleteIfNextLineBraceStyle_after.java
@@ -0,0 +1,10 @@
+
+class Foo
+{
+    {
+        if (a)
+        {
+            <caret>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/CompleteIfStatementGoesToThen.java b/java/java-tests/testData/codeInsight/completeStatement/CompleteIfStatementGoesToThen.java
new file mode 100644
index 0000000..def4f52
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/CompleteIfStatementGoesToThen.java
@@ -0,0 +1,8 @@
+
+class foo {
+    {
+        if (<caret>foo();
+    }
+    
+    void foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/CompleteIfStatementGoesToThen_after.java b/java/java-tests/testData/codeInsight/completeStatement/CompleteIfStatementGoesToThen_after.java
new file mode 100644
index 0000000..8a554d0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/CompleteIfStatementGoesToThen_after.java
@@ -0,0 +1,10 @@
+
+class foo {
+    {
+        if (<caret>) {
+            foo();
+        }
+    }
+    
+    void foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/CompleteIf_after.java b/java/java-tests/testData/codeInsight/completeStatement/CompleteIf_after.java
new file mode 100644
index 0000000..4ea34f8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/CompleteIf_after.java
@@ -0,0 +1,8 @@
+
+class Foo {
+    {
+        if (a) {
+            <caret>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/CompleteMethodCallAtReturn.java b/java/java-tests/testData/codeInsight/completeStatement/CompleteMethodCallAtReturn.java
new file mode 100644
index 0000000..f229012
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/CompleteMethodCallAtReturn.java
@@ -0,0 +1,7 @@
+public class Foo {
+    public String foo() {
+        return String.valueOf(
+                1<caret>
+        )
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/CompleteMethodCallAtReturn_after.java b/java/java-tests/testData/codeInsight/completeStatement/CompleteMethodCallAtReturn_after.java
new file mode 100644
index 0000000..da1db3a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/CompleteMethodCallAtReturn_after.java
@@ -0,0 +1,7 @@
+public class Foo {
+    public String foo() {
+        return String.valueOf(
+                1
+        );<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/CompleteStringLiteral.java b/java/java-tests/testData/codeInsight/completeStatement/CompleteStringLiteral.java
new file mode 100644
index 0000000..80e87d8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/CompleteStringLiteral.java
@@ -0,0 +1,5 @@
+public class Foo {
+    public void foo() {
+        String s = "abc<caret>def";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/CompleteStringLiteral_after.java b/java/java-tests/testData/codeInsight/completeStatement/CompleteStringLiteral_after.java
new file mode 100644
index 0000000..7109341
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/CompleteStringLiteral_after.java
@@ -0,0 +1,6 @@
+public class Foo {
+    public void foo() {
+        String s = "abcdef";
+        <caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/ElseIf.java b/java/java-tests/testData/codeInsight/completeStatement/ElseIf.java
new file mode 100644
index 0000000..4596f76
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/ElseIf.java
@@ -0,0 +1,7 @@
+class Test {
+    {
+        if(x) {
+          x();
+        } else if(<caret>)
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/ElseIf_after.java b/java/java-tests/testData/codeInsight/completeStatement/ElseIf_after.java
new file mode 100644
index 0000000..4b92ec0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/ElseIf_after.java
@@ -0,0 +1,8 @@
+class Test {
+    {
+        if(x) {
+          x();
+        } else if (<caret>) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/EmptyBeforeReturn.java b/java/java-tests/testData/codeInsight/completeStatement/EmptyBeforeReturn.java
new file mode 100644
index 0000000..57f4cb5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/EmptyBeforeReturn.java
@@ -0,0 +1,7 @@
+
+class Foo {
+    public void foo() {
+        <caret>
+        return;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/EmptyBeforeReturn_after.java b/java/java-tests/testData/codeInsight/completeStatement/EmptyBeforeReturn_after.java
new file mode 100644
index 0000000..c63b384
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/EmptyBeforeReturn_after.java
@@ -0,0 +1,8 @@
+
+class Foo {
+    public void foo() {
+        
+        <caret>
+        return;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/EmptyLine.java b/java/java-tests/testData/codeInsight/completeStatement/EmptyLine.java
new file mode 100644
index 0000000..cbfabb6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/EmptyLine.java
@@ -0,0 +1,6 @@
+
+public class Foo {
+    {
+        <caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/EmptyLine_after.java b/java/java-tests/testData/codeInsight/completeStatement/EmptyLine_after.java
new file mode 100644
index 0000000..859f728
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/EmptyLine_after.java
@@ -0,0 +1,7 @@
+
+public class Foo {
+    {
+        
+        <caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/ErrorNavigation.java b/java/java-tests/testData/codeInsight/completeStatement/ErrorNavigation.java
new file mode 100644
index 0000000..62d6f40
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/ErrorNavigation.java
@@ -0,0 +1,8 @@
+
+class foo {
+    {
+        if (a) {
+            do<caret>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/ErrorNavigation_after.java b/java/java-tests/testData/codeInsight/completeStatement/ErrorNavigation_after.java
new file mode 100644
index 0000000..6275434
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/ErrorNavigation_after.java
@@ -0,0 +1,9 @@
+
+class foo {
+    {
+        if (a) {
+            do {
+            } while (<caret>);
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/Field.java b/java/java-tests/testData/codeInsight/completeStatement/Field.java
new file mode 100644
index 0000000..7e6390c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/Field.java
@@ -0,0 +1,3 @@
+public class Test {
+    String s<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/FieldWithInitializer.java b/java/java-tests/testData/codeInsight/completeStatement/FieldWithInitializer.java
new file mode 100644
index 0000000..12d2819
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/FieldWithInitializer.java
@@ -0,0 +1,3 @@
+public class Test {
+    String s =<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/FieldWithInitializer_after.java b/java/java-tests/testData/codeInsight/completeStatement/FieldWithInitializer_after.java
new file mode 100644
index 0000000..eb062b5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/FieldWithInitializer_after.java
@@ -0,0 +1,3 @@
+public class Test {
+    String s = <caret>;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/Field_after.java b/java/java-tests/testData/codeInsight/completeStatement/Field_after.java
new file mode 100644
index 0000000..9d11574
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/Field_after.java
@@ -0,0 +1,3 @@
+public class Test {
+    String s;<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/FollowedByComment.java b/java/java-tests/testData/codeInsight/completeStatement/FollowedByComment.java
new file mode 100644
index 0000000..6a7de20
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/FollowedByComment.java
@@ -0,0 +1,6 @@
+public class Foo {
+   public void foo() {
+       foo(<caret>
+       // some line comment
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/FollowedByComment_after.java b/java/java-tests/testData/codeInsight/completeStatement/FollowedByComment_after.java
new file mode 100644
index 0000000..209898f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/FollowedByComment_after.java
@@ -0,0 +1,6 @@
+public class Foo {
+   public void foo() {
+       foo();<caret>
+       // some line comment
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/For.java b/java/java-tests/testData/codeInsight/completeStatement/For.java
new file mode 100644
index 0000000..f6d6b2d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/For.java
@@ -0,0 +1,7 @@
+
+class Foo {
+    {
+        for (int<caret> i = 0; i < 100; i++) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/ForBlock.java b/java/java-tests/testData/codeInsight/completeStatement/ForBlock.java
new file mode 100644
index 0000000..9644a75
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/ForBlock.java
@@ -0,0 +1,6 @@
+
+class Foo {
+    {
+        for (int<caret> i = 0; i < 100; i++)
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/ForBlock_after.java b/java/java-tests/testData/codeInsight/completeStatement/ForBlock_after.java
new file mode 100644
index 0000000..3761fa2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/ForBlock_after.java
@@ -0,0 +1,8 @@
+
+class Foo {
+    {
+        for (int i = 0; i < 100; i++) {
+            <caret>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/ForEach.java b/java/java-tests/testData/codeInsight/completeStatement/ForEach.java
new file mode 100644
index 0000000..fd6745a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/ForEach.java
@@ -0,0 +1,6 @@
+class Foo {
+    {
+        List list;
+        for (String s:list<caret>)
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/ForEach_after.java b/java/java-tests/testData/codeInsight/completeStatement/ForEach_after.java
new file mode 100644
index 0000000..7c9a7e7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/ForEach_after.java
@@ -0,0 +1,8 @@
+class Foo {
+    {
+        List list;
+        for (String s : list) {
+            <caret>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/ForIncrementExpressionAndBody.java b/java/java-tests/testData/codeInsight/completeStatement/ForIncrementExpressionAndBody.java
new file mode 100644
index 0000000..b2a81c7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/ForIncrementExpressionAndBody.java
@@ -0,0 +1,6 @@
+
+class foo {
+    {
+        for (int i = 0; i < 5; s.toString(<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/ForIncrementExpressionAndBody_after.java b/java/java-tests/testData/codeInsight/completeStatement/ForIncrementExpressionAndBody_after.java
new file mode 100644
index 0000000..7c4d774
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/ForIncrementExpressionAndBody_after.java
@@ -0,0 +1,8 @@
+
+class foo {
+    {
+        for (int i = 0; i < 5; s.toString()) {
+            <caret>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/ForStatementGeneration.java b/java/java-tests/testData/codeInsight/completeStatement/ForStatementGeneration.java
new file mode 100644
index 0000000..08d4b22
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/ForStatementGeneration.java
@@ -0,0 +1,5 @@
+public class Foo {
+    void test(int i) {
+        for<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/ForStatementGeneration_after.java b/java/java-tests/testData/codeInsight/completeStatement/ForStatementGeneration_after.java
new file mode 100644
index 0000000..ecefa69
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/ForStatementGeneration_after.java
@@ -0,0 +1,6 @@
+public class Foo {
+    void test(int i) {
+        for (<caret>) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/ForUpdateGeneration.java b/java/java-tests/testData/codeInsight/completeStatement/ForUpdateGeneration.java
new file mode 100644
index 0000000..973bb6f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/ForUpdateGeneration.java
@@ -0,0 +1,6 @@
+public class Foo {
+    void test(int i) {
+        for (int j = 1; j < 10<caret>) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/ForUpdateGeneration_after.java b/java/java-tests/testData/codeInsight/completeStatement/ForUpdateGeneration_after.java
new file mode 100644
index 0000000..aa32caa
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/ForUpdateGeneration_after.java
@@ -0,0 +1,6 @@
+public class Foo {
+    void test(int i) {
+        for (int j = 1; j < 10; <caret>) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/For_after.java b/java/java-tests/testData/codeInsight/completeStatement/For_after.java
new file mode 100644
index 0000000..3761fa2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/For_after.java
@@ -0,0 +1,8 @@
+
+class Foo {
+    {
+        for (int i = 0; i < 100; i++) {
+            <caret>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/ForceBlock.java b/java/java-tests/testData/codeInsight/completeStatement/ForceBlock.java
new file mode 100644
index 0000000..4387335
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/ForceBlock.java
@@ -0,0 +1,9 @@
+
+public class Foo {
+    {
+        int a;
+        a = 1;
+        if (a == 1<caret>)
+        a = 2;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/ForceBlock_after.java b/java/java-tests/testData/codeInsight/completeStatement/ForceBlock_after.java
new file mode 100644
index 0000000..f9403d3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/ForceBlock_after.java
@@ -0,0 +1,11 @@
+
+public class Foo {
+    {
+        int a;
+        a = 1;
+        if (a == 1) {
+            <caret>
+        }
+        a = 2;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/FromJavadocParameterDescriptionEndToNextParameter.java b/java/java-tests/testData/codeInsight/completeStatement/FromJavadocParameterDescriptionEndToNextParameter.java
new file mode 100644
index 0000000..c0d299a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/FromJavadocParameterDescriptionEndToNextParameter.java
@@ -0,0 +1,9 @@
+class Foo {
+
+   /**
+    * @param argument  first arg description<caret>
+    * @param i
+    */
+    void foo(int argument, int i) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/FromJavadocParameterDescriptionEndToNextParameter_after.java b/java/java-tests/testData/codeInsight/completeStatement/FromJavadocParameterDescriptionEndToNextParameter_after.java
new file mode 100644
index 0000000..bca1e6e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/FromJavadocParameterDescriptionEndToNextParameter_after.java
@@ -0,0 +1,9 @@
+class Foo {
+
+   /**
+    * @param argument  first arg description
+    * @param i         <caret>
+    */
+    void foo(int argument, int i) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/FromJavadocParameterDescriptionMiddleToNextParameter.java b/java/java-tests/testData/codeInsight/completeStatement/FromJavadocParameterDescriptionMiddleToNextParameter.java
new file mode 100644
index 0000000..678f17b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/FromJavadocParameterDescriptionMiddleToNextParameter.java
@@ -0,0 +1,9 @@
+class Foo {
+
+   /**
+    * @param argument  first arg <caret>description
+    * @param i
+    */
+    void foo(int argument, int i) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/FromJavadocParameterDescriptionMiddleToNextParameter_after.java b/java/java-tests/testData/codeInsight/completeStatement/FromJavadocParameterDescriptionMiddleToNextParameter_after.java
new file mode 100644
index 0000000..bca1e6e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/FromJavadocParameterDescriptionMiddleToNextParameter_after.java
@@ -0,0 +1,9 @@
+class Foo {
+
+   /**
+    * @param argument  first arg description
+    * @param i         <caret>
+    */
+    void foo(int argument, int i) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/IDEA22125.java b/java/java-tests/testData/codeInsight/completeStatement/IDEA22125.java
new file mode 100644
index 0000000..07cfd38
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/IDEA22125.java
@@ -0,0 +1,6 @@
+
+public class Junk {
+    public static void main(String[] args) {
+        int i <caret>= 1 // comment
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completeStatement/IDEA22125_after.java b/java/java-tests/testData/codeInsight/completeStatement/IDEA22125_after.java
new file mode 100644
index 0000000..61fca24
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/IDEA22125_after.java
@@ -0,0 +1,6 @@
+
+public class Junk {
+    public static void main(String[] args) {
+        int i = 1; // comment<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completeStatement/IDEA22385.java b/java/java-tests/testData/codeInsight/completeStatement/IDEA22385.java
new file mode 100644
index 0000000..5905122
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/IDEA22385.java
@@ -0,0 +1,6 @@
+import static java.ut<caret>il.*
+
+public class Junk {
+    public static void main(String[] args) {
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completeStatement/IDEA22385_after.java b/java/java-tests/testData/codeInsight/completeStatement/IDEA22385_after.java
new file mode 100644
index 0000000..d0d446b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/IDEA22385_after.java
@@ -0,0 +1,6 @@
+import static java.util.*;<caret>
+
+public class Junk {
+    public static void main(String[] args) {
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completeStatement/IDEA25139.java b/java/java-tests/testData/codeInsight/completeStatement/IDEA25139.java
new file mode 100644
index 0000000..3f1197b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/IDEA25139.java
@@ -0,0 +1,5 @@
+
+class Foo {
+    @Test
+      public void testValueOf(<caret>)
+}
diff --git a/java/java-tests/testData/codeInsight/completeStatement/IDEA25139_after.java b/java/java-tests/testData/codeInsight/completeStatement/IDEA25139_after.java
new file mode 100644
index 0000000..54aedb8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/IDEA25139_after.java
@@ -0,0 +1,8 @@
+
+class Foo {
+    @Test
+    public void testValueOf()
+    {
+        <caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completeStatement/IDEADEV1093.java b/java/java-tests/testData/codeInsight/completeStatement/IDEADEV1093.java
new file mode 100644
index 0000000..df7ef88
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/IDEADEV1093.java
@@ -0,0 +1,6 @@
+class Foo {
+    public static void foo(int x<caret>) {
+    public static void bar(int x, int y) {
+        System.out.println();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/IDEADEV1093_after.java b/java/java-tests/testData/codeInsight/completeStatement/IDEADEV1093_after.java
new file mode 100644
index 0000000..f4dae50
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/IDEADEV1093_after.java
@@ -0,0 +1,8 @@
+class Foo {
+    public static void foo(int x) {
+        <caret>
+    }
+    public static void bar(int x, int y) {
+        System.out.println();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/IDEADEV13019.java b/java/java-tests/testData/codeInsight/completeStatement/IDEADEV13019.java
new file mode 100644
index 0000000..256e613
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/IDEADEV13019.java
@@ -0,0 +1,5 @@
+
+class T
+{
+    public static void main(String[] args)<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/IDEADEV13019_after.java b/java/java-tests/testData/codeInsight/completeStatement/IDEADEV13019_after.java
new file mode 100644
index 0000000..fd8d909
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/IDEADEV13019_after.java
@@ -0,0 +1,8 @@
+
+class T
+{
+    public static void main(String[] args)
+    {
+        <caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/IDEADEV1710.java b/java/java-tests/testData/codeInsight/completeStatement/IDEADEV1710.java
new file mode 100644
index 0000000..3ca6f16
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/IDEADEV1710.java
@@ -0,0 +1,3 @@
+public class Foo {
+    public void foo() throws Exception <caret>
+}
diff --git a/java/java-tests/testData/codeInsight/completeStatement/IDEADEV1710_after.java b/java/java-tests/testData/codeInsight/completeStatement/IDEADEV1710_after.java
new file mode 100644
index 0000000..6cbea9a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/IDEADEV1710_after.java
@@ -0,0 +1,5 @@
+public class Foo {
+    public void foo() throws Exception {
+        <caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completeStatement/IDEADEV20713.java b/java/java-tests/testData/codeInsight/completeStatement/IDEADEV20713.java
new file mode 100644
index 0000000..de38a64
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/IDEADEV20713.java
@@ -0,0 +1,8 @@
+
+class T {
+    void test(Object a) {
+        if (true) <caret>
+        if (a != null)
+            System.out.println("a = " + a.toString());
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/IDEADEV20713_after.java b/java/java-tests/testData/codeInsight/completeStatement/IDEADEV20713_after.java
new file mode 100644
index 0000000..b3699dd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/IDEADEV20713_after.java
@@ -0,0 +1,10 @@
+
+class T {
+    void test(Object a) {
+        if (true) {
+            <caret>
+        }
+        if (a != null)
+            System.out.println("a = " + a.toString());
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/IDEADEV40479.java b/java/java-tests/testData/codeInsight/completeStatement/IDEADEV40479.java
new file mode 100644
index 0000000..dda24cd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/IDEADEV40479.java
@@ -0,0 +1,6 @@
+
+public class Junk {
+    public static void main(String[] args) {
+        int[] arr = new int[]{1,2,3}<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completeStatement/IDEADEV40479_after.java b/java/java-tests/testData/codeInsight/completeStatement/IDEADEV40479_after.java
new file mode 100644
index 0000000..c61c4ca
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/IDEADEV40479_after.java
@@ -0,0 +1,6 @@
+
+public class Junk {
+    public static void main(String[] args) {
+        int[] arr = new int[]{1, 2, 3};<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completeStatement/IDEADEV434.java b/java/java-tests/testData/codeInsight/completeStatement/IDEADEV434.java
new file mode 100644
index 0000000..976b0ae
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/IDEADEV434.java
@@ -0,0 +1,6 @@
+class Foo {
+    {
+        if (true) <caret>
+        System.out.println();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/IDEADEV434_after.java b/java/java-tests/testData/codeInsight/completeStatement/IDEADEV434_after.java
new file mode 100644
index 0000000..519d2df
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/IDEADEV434_after.java
@@ -0,0 +1,8 @@
+class Foo {
+    {
+        if (true) {
+            <caret>
+        }
+        System.out.println();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/If.java b/java/java-tests/testData/codeInsight/completeStatement/If.java
new file mode 100644
index 0000000..5b272e1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/If.java
@@ -0,0 +1,7 @@
+public class Foo {
+    {
+        if<caret> (x)
+        {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/If_after.java b/java/java-tests/testData/codeInsight/completeStatement/If_after.java
new file mode 100644
index 0000000..b601e26
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/If_after.java
@@ -0,0 +1,7 @@
+public class Foo {
+    {
+        if (x) {
+            <caret>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/InComment.java b/java/java-tests/testData/codeInsight/completeStatement/InComment.java
new file mode 100644
index 0000000..f1a576f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/InComment.java
@@ -0,0 +1,6 @@
+
+public class Test {
+    /**<caret>
+    public void foo() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/InComment2.java b/java/java-tests/testData/codeInsight/completeStatement/InComment2.java
new file mode 100644
index 0000000..48246d3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/InComment2.java
@@ -0,0 +1,8 @@
+
+public class Test {
+    /**
+     * abcd<caret>efgh
+     */
+    public void foo() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/InComment2_after.java b/java/java-tests/testData/codeInsight/completeStatement/InComment2_after.java
new file mode 100644
index 0000000..e04aeae
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/InComment2_after.java
@@ -0,0 +1,9 @@
+
+public class Test {
+    /**
+     * abcdefgh
+     * <caret>
+     */
+    public void foo() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/InComment3.java b/java/java-tests/testData/codeInsight/completeStatement/InComment3.java
new file mode 100644
index 0000000..5902e28
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/InComment3.java
@@ -0,0 +1,6 @@
+
+public class Test {
+    public void foo() {
+        // Some <caret> comment
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/InComment3_after.java b/java/java-tests/testData/codeInsight/completeStatement/InComment3_after.java
new file mode 100644
index 0000000..7b662e1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/InComment3_after.java
@@ -0,0 +1,7 @@
+
+public class Test {
+    public void foo() {
+        // Some  comment
+        // <caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/InComment4.java b/java/java-tests/testData/codeInsight/completeStatement/InComment4.java
new file mode 100644
index 0000000..07f8bbe
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/InComment4.java
@@ -0,0 +1,7 @@
+
+public class Test {
+    public void foo() {
+        /*<caret>
+        System.out.println("foo");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/InComment4_after.java b/java/java-tests/testData/codeInsight/completeStatement/InComment4_after.java
new file mode 100644
index 0000000..a9f5247
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/InComment4_after.java
@@ -0,0 +1,9 @@
+
+public class Test {
+    public void foo() {
+        /*
+        <caret>
+         */
+        System.out.println("foo");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/InComment_after.java b/java/java-tests/testData/codeInsight/completeStatement/InComment_after.java
new file mode 100644
index 0000000..307d206
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/InComment_after.java
@@ -0,0 +1,8 @@
+
+public class Test {
+    /**
+     * <caret>
+     */
+    public void foo() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/InPreceedingBlanks.java b/java/java-tests/testData/codeInsight/completeStatement/InPreceedingBlanks.java
new file mode 100644
index 0000000..372c5c9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/InPreceedingBlanks.java
@@ -0,0 +1,6 @@
+public class Test {
+    {
+        x = 2;
+    <caret>    foo();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/InPreceedingBlanks_after.java b/java/java-tests/testData/codeInsight/completeStatement/InPreceedingBlanks_after.java
new file mode 100644
index 0000000..3e4c553
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/InPreceedingBlanks_after.java
@@ -0,0 +1,7 @@
+public class Test {
+    {
+        x = 2;
+        foo();
+        <caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/IncompleteCall.java b/java/java-tests/testData/codeInsight/completeStatement/IncompleteCall.java
new file mode 100644
index 0000000..57b03ac
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/IncompleteCall.java
@@ -0,0 +1,7 @@
+
+public class Foo {
+    {
+        foo<caret>(
+        foo();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/IncompleteCall_after.java b/java/java-tests/testData/codeInsight/completeStatement/IncompleteCall_after.java
new file mode 100644
index 0000000..608de1e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/IncompleteCall_after.java
@@ -0,0 +1,7 @@
+
+public class Foo {
+    {
+        foo();<caret>
+        foo();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/IncompleteElseIf.java b/java/java-tests/testData/codeInsight/completeStatement/IncompleteElseIf.java
new file mode 100644
index 0000000..127d3ed
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/IncompleteElseIf.java
@@ -0,0 +1,8 @@
+class Foo {
+    boolean a;
+    {
+        if (a) {
+        } el<caret>se
+        a = 2;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/IncompleteElseIf_after.java b/java/java-tests/testData/codeInsight/completeStatement/IncompleteElseIf_after.java
new file mode 100644
index 0000000..eb64785
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/IncompleteElseIf_after.java
@@ -0,0 +1,11 @@
+class Foo {
+    boolean a;
+
+    {
+        if (a) {
+        } else {
+            <caret>
+        }
+        a = 2;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/Indentation.java b/java/java-tests/testData/codeInsight/completeStatement/Indentation.java
new file mode 100644
index 0000000..de56ed5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/Indentation.java
@@ -0,0 +1,8 @@
+
+class foo {
+    {
+        if (a) {
+            if(a<caret>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/Indentation_after.java b/java/java-tests/testData/codeInsight/completeStatement/Indentation_after.java
new file mode 100644
index 0000000..511ed3d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/Indentation_after.java
@@ -0,0 +1,10 @@
+
+class foo {
+    {
+        if (a) {
+            if (a) {
+                <caret>
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/InterfaceMethodSemicolon.java b/java/java-tests/testData/codeInsight/completeStatement/InterfaceMethodSemicolon.java
new file mode 100644
index 0000000..987ec95
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/InterfaceMethodSemicolon.java
@@ -0,0 +1,4 @@
+interface InterfaceMethodSemicolon {
+    void foo(String s)<caret>
+    Object bar();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/InterfaceMethodSemicolon_after.java b/java/java-tests/testData/codeInsight/completeStatement/InterfaceMethodSemicolon_after.java
new file mode 100644
index 0000000..ed67b8d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/InterfaceMethodSemicolon_after.java
@@ -0,0 +1,4 @@
+interface InterfaceMethodSemicolon {
+    void foo(String s);<caret>
+    Object bar();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/LastJavadocParameterDescription.java b/java/java-tests/testData/codeInsight/completeStatement/LastJavadocParameterDescription.java
new file mode 100644
index 0000000..361f8ba
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/LastJavadocParameterDescription.java
@@ -0,0 +1,10 @@
+class Foo {
+
+    /**
+     * 
+     * @param i  desc
+     * @param j  desc<caret>
+     */
+    void test(int i, int j) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/LastJavadocParameterDescriptionToReturn.java b/java/java-tests/testData/codeInsight/completeStatement/LastJavadocParameterDescriptionToReturn.java
new file mode 100644
index 0000000..8b86b2a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/LastJavadocParameterDescriptionToReturn.java
@@ -0,0 +1,11 @@
+class Foo {
+
+    /**
+     * 
+     * @param i  desc
+     * @param j  desc<caret>
+     * @return
+     */
+    int test(int i, int j) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/LastJavadocParameterDescriptionToReturn_after.java b/java/java-tests/testData/codeInsight/completeStatement/LastJavadocParameterDescriptionToReturn_after.java
new file mode 100644
index 0000000..1669c99
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/LastJavadocParameterDescriptionToReturn_after.java
@@ -0,0 +1,11 @@
+class Foo {
+
+    /**
+     * 
+     * @param i  desc
+     * @param j  desc
+     * @return<caret>
+     */
+    int test(int i, int j) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/LastJavadocParameterDescription_after.java b/java/java-tests/testData/codeInsight/completeStatement/LastJavadocParameterDescription_after.java
new file mode 100644
index 0000000..fae825d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/LastJavadocParameterDescription_after.java
@@ -0,0 +1,11 @@
+class Foo {
+
+    /**
+     * 
+     * @param i  desc
+     * @param j  desc
+     * <caret>
+     */
+    void test(int i, int j) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/Method.java b/java/java-tests/testData/codeInsight/completeStatement/Method.java
new file mode 100644
index 0000000..c8eadab
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/Method.java
@@ -0,0 +1,3 @@
+public class Test {
+   void foo(<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/Method_after.java b/java/java-tests/testData/codeInsight/completeStatement/Method_after.java
new file mode 100644
index 0000000..d1ce394
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/Method_after.java
@@ -0,0 +1,5 @@
+public class Test {
+    void foo() {
+        <caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/MultilineReturn.java b/java/java-tests/testData/codeInsight/completeStatement/MultilineReturn.java
new file mode 100644
index 0000000..29fb958
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/MultilineReturn.java
@@ -0,0 +1,6 @@
+class Test {
+  Object method() {
+    return
+      null<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/MultilineReturn_after.java b/java/java-tests/testData/codeInsight/completeStatement/MultilineReturn_after.java
new file mode 100644
index 0000000..7dcbe27
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/MultilineReturn_after.java
@@ -0,0 +1,6 @@
+class Test {
+  Object method() {
+      return
+              null;<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/NewInParentheses.java b/java/java-tests/testData/codeInsight/completeStatement/NewInParentheses.java
new file mode 100644
index 0000000..7483ed6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/NewInParentheses.java
@@ -0,0 +1,6 @@
+
+class foo {
+    {
+        Object d = ( ( String ) new String()<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/NewInParentheses_after.java b/java/java-tests/testData/codeInsight/completeStatement/NewInParentheses_after.java
new file mode 100644
index 0000000..0bdd9c0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/NewInParentheses_after.java
@@ -0,0 +1,6 @@
+
+class foo {
+    {
+        Object d = ((String) new String());<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/NoBlockReturn.java b/java/java-tests/testData/codeInsight/completeStatement/NoBlockReturn.java
new file mode 100644
index 0000000..fecc7a7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/NoBlockReturn.java
@@ -0,0 +1,5 @@
+public class Test {
+    public void foo() {
+        if (i) return<caret>;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/NoBlockReturn_after.java b/java/java-tests/testData/codeInsight/completeStatement/NoBlockReturn_after.java
new file mode 100644
index 0000000..05e0c34
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/NoBlockReturn_after.java
@@ -0,0 +1,6 @@
+public class Test {
+    public void foo() {
+        if (i) return;
+        <caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/NoErrors.java b/java/java-tests/testData/codeInsight/completeStatement/NoErrors.java
new file mode 100644
index 0000000..413189a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/NoErrors.java
@@ -0,0 +1,6 @@
+
+public class Test {
+    public void foo() {
+        int x <caret>= 2;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/NoErrors_after.java b/java/java-tests/testData/codeInsight/completeStatement/NoErrors_after.java
new file mode 100644
index 0000000..43dc309
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/NoErrors_after.java
@@ -0,0 +1,7 @@
+
+public class Test {
+    public void foo() {
+        int x = 2;
+        <caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/NoSpaceAfterSemicolon.java b/java/java-tests/testData/codeInsight/completeStatement/NoSpaceAfterSemicolon.java
new file mode 100644
index 0000000..8a0b3e0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/NoSpaceAfterSemicolon.java
@@ -0,0 +1,6 @@
+public class Foo {
+    void test(int i) {
+        for (int j = 1<caret>) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/NoSpaceAfterSemicolon_after.java b/java/java-tests/testData/codeInsight/completeStatement/NoSpaceAfterSemicolon_after.java
new file mode 100644
index 0000000..f49d612
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/NoSpaceAfterSemicolon_after.java
@@ -0,0 +1,6 @@
+public class Foo {
+    void test(int i) {
+        for (int j = 1;<caret>) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/NoUnnecessaryEmptyLineAtCodeBlock.java b/java/java-tests/testData/codeInsight/completeStatement/NoUnnecessaryEmptyLineAtCodeBlock.java
new file mode 100644
index 0000000..912b1e1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/NoUnnecessaryEmptyLineAtCodeBlock.java
@@ -0,0 +1,7 @@
+public class Foo {
+    void test(int i) {
+        if (i > 0<caret>) {
+
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/NoUnnecessaryEmptyLineAtCodeBlock_after.java b/java/java-tests/testData/codeInsight/completeStatement/NoUnnecessaryEmptyLineAtCodeBlock_after.java
new file mode 100644
index 0000000..f96695e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/NoUnnecessaryEmptyLineAtCodeBlock_after.java
@@ -0,0 +1,7 @@
+public class Foo {
+    void test(int i) {
+        if (i > 0) {
+            <caret>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/NonAbstractMethodWithSemicolon.java b/java/java-tests/testData/codeInsight/completeStatement/NonAbstractMethodWithSemicolon.java
new file mode 100644
index 0000000..9d0e938
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/NonAbstractMethodWithSemicolon.java
@@ -0,0 +1,4 @@
+
+public class Foo {
+   void <caret>foo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/NonAbstractMethodWithSemicolon_after.java b/java/java-tests/testData/codeInsight/completeStatement/NonAbstractMethodWithSemicolon_after.java
new file mode 100644
index 0000000..b9845cd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/NonAbstractMethodWithSemicolon_after.java
@@ -0,0 +1,6 @@
+
+public class Foo {
+    void foo() {
+        <caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/Parenthesized.java b/java/java-tests/testData/codeInsight/completeStatement/Parenthesized.java
new file mode 100644
index 0000000..68c3c77
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/Parenthesized.java
@@ -0,0 +1,6 @@
+
+class Foo {
+    {
+        tx2 = (long) (vcx + vw<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/Parenthesized_after.java b/java/java-tests/testData/codeInsight/completeStatement/Parenthesized_after.java
new file mode 100644
index 0000000..cecc090a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/Parenthesized_after.java
@@ -0,0 +1,6 @@
+
+class Foo {
+    {
+        tx2 = (long) (vcx + vw);<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/Return.java b/java/java-tests/testData/codeInsight/completeStatement/Return.java
new file mode 100644
index 0000000..89d1b52
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/Return.java
@@ -0,0 +1,7 @@
+public class Test {
+    public void foo() {
+        if(x) {
+            return;<caret>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/ReturnFromNonVoid.java b/java/java-tests/testData/codeInsight/completeStatement/ReturnFromNonVoid.java
new file mode 100644
index 0000000..d7e2567
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/ReturnFromNonVoid.java
@@ -0,0 +1,6 @@
+
+public class Foo {
+    public int foo() {
+      return<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/ReturnFromNonVoid_after.java b/java/java-tests/testData/codeInsight/completeStatement/ReturnFromNonVoid_after.java
new file mode 100644
index 0000000..cbdb9b8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/ReturnFromNonVoid_after.java
@@ -0,0 +1,6 @@
+
+public class Foo {
+    public int foo() {
+        return<caret>;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/ReturnFromVoid.java b/java/java-tests/testData/codeInsight/completeStatement/ReturnFromVoid.java
new file mode 100644
index 0000000..97a1dfb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/ReturnFromVoid.java
@@ -0,0 +1,7 @@
+
+class Test {
+    void test(Object o) {
+        if (o == null) return<caret>
+        String foo = "foo";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/ReturnFromVoid_after.java b/java/java-tests/testData/codeInsight/completeStatement/ReturnFromVoid_after.java
new file mode 100644
index 0000000..b576059
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/ReturnFromVoid_after.java
@@ -0,0 +1,7 @@
+
+class Test {
+    void test(Object o) {
+        if (o == null) return;<caret>
+        String foo = "foo";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/Return_after.java b/java/java-tests/testData/codeInsight/completeStatement/Return_after.java
new file mode 100644
index 0000000..9c07eb9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/Return_after.java
@@ -0,0 +1,8 @@
+public class Test {
+    public void foo() {
+        if(x) {
+            return;
+        }
+        <caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/SCR11147.java b/java/java-tests/testData/codeInsight/completeStatement/SCR11147.java
new file mode 100644
index 0000000..75020fc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/SCR11147.java
@@ -0,0 +1,9 @@
+
+public class Foo {
+    {
+        int x = 0;
+        if (x == 0) {
+            <caret>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/SCR11147_after.java b/java/java-tests/testData/codeInsight/completeStatement/SCR11147_after.java
new file mode 100644
index 0000000..5c42698
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/SCR11147_after.java
@@ -0,0 +1,10 @@
+
+public class Foo {
+    {
+        int x = 0;
+        if (x == 0) {
+            
+            <caret>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/SCR22904.java b/java/java-tests/testData/codeInsight/completeStatement/SCR22904.java
new file mode 100644
index 0000000..8c4c47f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/SCR22904.java
@@ -0,0 +1,4 @@
+interface Test {
+    void foo(String s)<caret>
+    Object bar();
+}
diff --git a/java/java-tests/testData/codeInsight/completeStatement/SCR22904_after.java b/java/java-tests/testData/codeInsight/completeStatement/SCR22904_after.java
new file mode 100644
index 0000000..a10695c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/SCR22904_after.java
@@ -0,0 +1,4 @@
+interface Test {
+    void foo(String s);<caret>
+    Object bar();
+}
diff --git a/java/java-tests/testData/codeInsight/completeStatement/SCR30227.java b/java/java-tests/testData/codeInsight/completeStatement/SCR30227.java
new file mode 100644
index 0000000..5849054
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/SCR30227.java
@@ -0,0 +1,16 @@
+public abstract class A {
+    abstract void f(boolean b);
+
+    A IMPL = new A() {
+      void f(boolean b) {
+        if (b)
+          f(true);
+        else {
+          f(false);
+          f(false);
+        }        
+        for(int i = 0; i < 5; i++)
+          f(true);
+      }
+    }; <caret>
+}
diff --git a/java/java-tests/testData/codeInsight/completeStatement/SCR30227_after.java b/java/java-tests/testData/codeInsight/completeStatement/SCR30227_after.java
new file mode 100644
index 0000000..af9f9bb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/SCR30227_after.java
@@ -0,0 +1,16 @@
+public abstract class A {
+    abstract void f(boolean b);
+
+    A IMPL = new A() {
+        void f(boolean b) {
+            if (b)
+                f(true);
+            else {
+                f(false);
+                f(false);
+            }
+            for (int i = 0; i < 5; i++)
+                f(true);
+        }
+    };<caret>
+}
diff --git a/java/java-tests/testData/codeInsight/completeStatement/SCR36110.java b/java/java-tests/testData/codeInsight/completeStatement/SCR36110.java
new file mode 100644
index 0000000..b70a7ed
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/SCR36110.java
@@ -0,0 +1,8 @@
+public enum TransactionAttributeType {
+MANDATORY,
+REQUIRED,
+REQUIRESNEW,
+SUPPORTS,
+NOTSUPPORTED,
+NEVE<caret>R
+}
diff --git a/java/java-tests/testData/codeInsight/completeStatement/SCR36110_after.java b/java/java-tests/testData/codeInsight/completeStatement/SCR36110_after.java
new file mode 100644
index 0000000..dadb291
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/SCR36110_after.java
@@ -0,0 +1,8 @@
+public enum TransactionAttributeType {
+MANDATORY,
+REQUIRED,
+REQUIRESNEW,
+SUPPORTS,
+NOTSUPPORTED,
+    NEVER,<caret>
+}
diff --git a/java/java-tests/testData/codeInsight/completeStatement/SCR37331.java b/java/java-tests/testData/codeInsight/completeStatement/SCR37331.java
new file mode 100644
index 0000000..21fad21
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/SCR37331.java
@@ -0,0 +1,6 @@
+
+public class Junk {
+    public static void main(String[] args) {
+        String s = (<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/SCR37331_after.java b/java/java-tests/testData/codeInsight/completeStatement/SCR37331_after.java
new file mode 100644
index 0000000..2381adb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/SCR37331_after.java
@@ -0,0 +1,6 @@
+
+public class Junk {
+    public static void main(String[] args) {
+        String s = (<caret>);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/SpaceAfterSemicolon.java b/java/java-tests/testData/codeInsight/completeStatement/SpaceAfterSemicolon.java
new file mode 100644
index 0000000..8a0b3e0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/SpaceAfterSemicolon.java
@@ -0,0 +1,6 @@
+public class Foo {
+    void test(int i) {
+        for (int j = 1<caret>) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/SpaceAfterSemicolon_after.java b/java/java-tests/testData/codeInsight/completeStatement/SpaceAfterSemicolon_after.java
new file mode 100644
index 0000000..763c252
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/SpaceAfterSemicolon_after.java
@@ -0,0 +1,6 @@
+public class Foo {
+    void test(int i) {
+        for (int j = 1; <caret>) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/StartNewBlock.java b/java/java-tests/testData/codeInsight/completeStatement/StartNewBlock.java
new file mode 100644
index 0000000..77469fb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/StartNewBlock.java
@@ -0,0 +1,6 @@
+
+public class Foo {
+    {
+        if (x) {<caret>foo();
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completeStatement/StartNewBlock_after.java b/java/java-tests/testData/codeInsight/completeStatement/StartNewBlock_after.java
new file mode 100644
index 0000000..a033317
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/StartNewBlock_after.java
@@ -0,0 +1,8 @@
+
+public class Foo {
+    {
+        if (x) {
+            <caret>foo();
+        }
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completeStatement/StringLiteral.java b/java/java-tests/testData/codeInsight/completeStatement/StringLiteral.java
new file mode 100644
index 0000000..5848d3e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/StringLiteral.java
@@ -0,0 +1,6 @@
+
+class foo {
+    {
+        String s = "a<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/StringLiteral_after.java b/java/java-tests/testData/codeInsight/completeStatement/StringLiteral_after.java
new file mode 100644
index 0000000..b76baf5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/StringLiteral_after.java
@@ -0,0 +1,6 @@
+
+class foo {
+    {
+        String s = "a";<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/SwitchKeyword.java b/java/java-tests/testData/codeInsight/completeStatement/SwitchKeyword.java
new file mode 100644
index 0000000..dbfbef3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/SwitchKeyword.java
@@ -0,0 +1,6 @@
+
+class foo {
+    {
+        switch<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/SwitchKeywordWithCondition.java b/java/java-tests/testData/codeInsight/completeStatement/SwitchKeywordWithCondition.java
new file mode 100644
index 0000000..3787360
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/SwitchKeywordWithCondition.java
@@ -0,0 +1,6 @@
+
+class foo {
+    {
+        switch (i<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/SwitchKeywordWithCondition_after.java b/java/java-tests/testData/codeInsight/completeStatement/SwitchKeywordWithCondition_after.java
new file mode 100644
index 0000000..908ab9f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/SwitchKeywordWithCondition_after.java
@@ -0,0 +1,8 @@
+
+class foo {
+    {
+        switch (i) {
+            <caret>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/SwitchKeyword_after.java b/java/java-tests/testData/codeInsight/completeStatement/SwitchKeyword_after.java
new file mode 100644
index 0000000..01d1cd2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/SwitchKeyword_after.java
@@ -0,0 +1,7 @@
+
+class foo {
+    {
+        switch (<caret>) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/Synchronized.java b/java/java-tests/testData/codeInsight/completeStatement/Synchronized.java
new file mode 100644
index 0000000..d3fd2ef
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/Synchronized.java
@@ -0,0 +1,5 @@
+public class Test {
+    public void foo() {
+       synchronized(this<caret>)
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/Synchronized_after.java b/java/java-tests/testData/codeInsight/completeStatement/Synchronized_after.java
new file mode 100644
index 0000000..bcad9ff
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/Synchronized_after.java
@@ -0,0 +1,7 @@
+public class Test {
+    public void foo() {
+        synchronized (this) {
+            <caret>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/Throw.java b/java/java-tests/testData/codeInsight/completeStatement/Throw.java
new file mode 100644
index 0000000..ac0adcf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/Throw.java
@@ -0,0 +1,7 @@
+public class Test {
+    {
+        if(x) {
+            throw <caret>new Exception();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/Throw_after.java b/java/java-tests/testData/codeInsight/completeStatement/Throw_after.java
new file mode 100644
index 0000000..472fc78
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/Throw_after.java
@@ -0,0 +1,8 @@
+public class Test {
+    {
+        if(x) {
+            throw new Exception();
+        }
+        <caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/Try1.java b/java/java-tests/testData/codeInsight/completeStatement/Try1.java
new file mode 100644
index 0000000..1987cf4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/Try1.java
@@ -0,0 +1,8 @@
+public class Foo {
+    {
+        try {<caret>
+        }
+        catch(Exception e) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/Try1_after.java b/java/java-tests/testData/codeInsight/completeStatement/Try1_after.java
new file mode 100644
index 0000000..e384452
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/Try1_after.java
@@ -0,0 +1,9 @@
+public class Foo {
+    {
+        try {
+            <caret>
+        }
+        catch(Exception e) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/TwoStatementsInLine.java b/java/java-tests/testData/codeInsight/completeStatement/TwoStatementsInLine.java
new file mode 100644
index 0000000..0748ba2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/TwoStatementsInLine.java
@@ -0,0 +1,7 @@
+
+class Foo {
+    {
+        x = 3;
+        x <caret>= 2 y = 4;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/TwoStatementsInLine_after.java b/java/java-tests/testData/codeInsight/completeStatement/TwoStatementsInLine_after.java
new file mode 100644
index 0000000..66956f1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/TwoStatementsInLine_after.java
@@ -0,0 +1,7 @@
+
+class Foo {
+    {
+        x = 3;
+        x = 2;<caret> y = 4;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/ValidCodeBlock.java b/java/java-tests/testData/codeInsight/completeStatement/ValidCodeBlock.java
new file mode 100644
index 0000000..7d147ef
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/ValidCodeBlock.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2000-2011 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.
+ */
+public class Foo {
+    void test(int i) {
+        if (i > 1) {
+            i <caret>= 1;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/ValidCodeBlockWithEmptyLineAfterIt.java b/java/java-tests/testData/codeInsight/completeStatement/ValidCodeBlockWithEmptyLineAfterIt.java
new file mode 100644
index 0000000..a697680
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/ValidCodeBlockWithEmptyLineAfterIt.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright 2000-2011 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.
+ */
+public class Foo {
+    void test(int i) {
+        while (i-- > 1) {
+            i <caret>= 1;
+
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/ValidCodeBlockWithEmptyLineAfterIt_after.java b/java/java-tests/testData/codeInsight/completeStatement/ValidCodeBlockWithEmptyLineAfterIt_after.java
new file mode 100644
index 0000000..2dd0b98
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/ValidCodeBlockWithEmptyLineAfterIt_after.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright 2000-2011 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.
+ */
+public class Foo {
+    void test(int i) {
+        while (i-- > 1) {
+            i = 1;
+            <caret>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/ValidCodeBlock_after.java b/java/java-tests/testData/codeInsight/completeStatement/ValidCodeBlock_after.java
new file mode 100644
index 0000000..91b35b59
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completeStatement/ValidCodeBlock_after.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright 2000-2011 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.
+ */
+public class Foo {
+    void test(int i) {
+        if (i > 1) {
+            i = 1;
+            <caret>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/InPlainTextFile.txt b/java/java-tests/testData/codeInsight/completion/className/InPlainTextFile.txt
new file mode 100644
index 0000000..d64e015
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/InPlainTextFile.txt
@@ -0,0 +1 @@
+abc = StrinBui<caret>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/InPlainTextFile_after.txt b/java/java-tests/testData/codeInsight/completion/className/InPlainTextFile_after.txt
new file mode 100644
index 0000000..9a2f681
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/InPlainTextFile_after.txt
@@ -0,0 +1 @@
+abc = java.lang.StringBuilder<caret>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/afterNewThrowable/after1.java b/java/java-tests/testData/codeInsight/completion/className/afterNewThrowable/after1.java
new file mode 100644
index 0000000..0bdece1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/afterNewThrowable/after1.java
@@ -0,0 +1,5 @@
+class A{
+ void foo() {
+  throw new OurException()<caret>
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/afterNewThrowable/after2.java b/java/java-tests/testData/codeInsight/completion/className/afterNewThrowable/after2.java
new file mode 100644
index 0000000..42685a9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/afterNewThrowable/after2.java
@@ -0,0 +1,5 @@
+class A{
+ void foo() {
+  throw new OurNotException.InnerException()<caret>
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/afterNewThrowable/before1.java b/java/java-tests/testData/codeInsight/completion/className/afterNewThrowable/before1.java
new file mode 100644
index 0000000..a1a5879
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/afterNewThrowable/before1.java
@@ -0,0 +1,5 @@
+class A{
+ void foo() {
+  throw new Our<caret>
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/afterNewThrowable/before2.java b/java/java-tests/testData/codeInsight/completion/className/afterNewThrowable/before2.java
new file mode 100644
index 0000000..b2d362b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/afterNewThrowable/before2.java
@@ -0,0 +1,5 @@
+class A{
+ void foo() {
+  throw new Inner<caret>
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/importAfterNew/after1.java b/java/java-tests/testData/codeInsight/completion/className/importAfterNew/after1.java
new file mode 100644
index 0000000..8297825
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/importAfterNew/after1.java
@@ -0,0 +1,7 @@
+import pack.AAClass;
+
+public class Test1 {
+    public void foo() {
+        new AAClass()<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/importAfterNew/after2.java b/java/java-tests/testData/codeInsight/completion/className/importAfterNew/after2.java
new file mode 100644
index 0000000..1c7cb6f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/importAfterNew/after2.java
@@ -0,0 +1,7 @@
+import pack.WithInnerAClass;
+
+public class Test1 {
+    public void foo() {
+        new WithInnerAClass()<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/importAfterNew/before1.java b/java/java-tests/testData/codeInsight/completion/className/importAfterNew/before1.java
new file mode 100644
index 0000000..1643269
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/importAfterNew/before1.java
@@ -0,0 +1,5 @@
+public class Test1 {
+    public void foo() {
+        new AACl<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/importAfterNew/before2.java b/java/java-tests/testData/codeInsight/completion/className/importAfterNew/before2.java
new file mode 100644
index 0000000..0bb94fb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/importAfterNew/before2.java
@@ -0,0 +1,5 @@
+public class Test1 {
+    public void foo() {
+        new WithInnerACl<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/java/BracesAfterNew.java b/java/java-tests/testData/codeInsight/completion/className/java/BracesAfterNew.java
new file mode 100644
index 0000000..74cdd5a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/java/BracesAfterNew.java
@@ -0,0 +1,5 @@
+class FooFooFooFooFoo {
+  {
+    Object[] a = new FFFFF<caret>[];
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/java/BracesAfterNew_after.java b/java/java-tests/testData/codeInsight/completion/className/java/BracesAfterNew_after.java
new file mode 100644
index 0000000..c91f2ba
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/java/BracesAfterNew_after.java
@@ -0,0 +1,5 @@
+class FooFooFooFooFoo {
+  {
+    Object[] a = new FooFooFooFooFoo<caret>[];
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/java/CamelHumpPrefix.java b/java/java-tests/testData/codeInsight/completion/className/java/CamelHumpPrefix.java
new file mode 100644
index 0000000..77dd4cb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/java/CamelHumpPrefix.java
@@ -0,0 +1,8 @@
+class LifeUniverseEverythingEntity {}
+class LifeUniverseEverythingManager {}
+
+class FooFooFooFooFoo {
+  {
+    LUEv<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/java/DoubleStringBuffer.java b/java/java-tests/testData/codeInsight/completion/className/java/DoubleStringBuffer.java
new file mode 100644
index 0000000..d252ff42
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/java/DoubleStringBuffer.java
@@ -0,0 +1,5 @@
+class FooFooFooFooFoo {
+  {
+    StringBuf<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/java/DoubleStringBuffer_after.java b/java/java-tests/testData/codeInsight/completion/className/java/DoubleStringBuffer_after.java
new file mode 100644
index 0000000..701740b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/java/DoubleStringBuffer_after.java
@@ -0,0 +1,5 @@
+class FooFooFooFooFoo {
+  {
+    StringBuffer<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/java/ExcessParensAfterNew.java b/java/java-tests/testData/codeInsight/completion/className/java/ExcessParensAfterNew.java
new file mode 100644
index 0000000..175f033
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/java/ExcessParensAfterNew.java
@@ -0,0 +1,5 @@
+class FooFooFooFooFoo {
+  {
+    new FFFFF<caret>();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/java/ExcessParensAfterNew_after.java b/java/java-tests/testData/codeInsight/completion/className/java/ExcessParensAfterNew_after.java
new file mode 100644
index 0000000..795f161
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/java/ExcessParensAfterNew_after.java
@@ -0,0 +1,5 @@
+class FooFooFooFooFoo {
+  {
+    new FooFooFooFooFoo()<caret>;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/java/ReplaceReferenceExpressionWithTypeElement.java b/java/java-tests/testData/codeInsight/completion/className/java/ReplaceReferenceExpressionWithTypeElement.java
new file mode 100644
index 0000000..5fc12c2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/java/ReplaceReferenceExpressionWithTypeElement.java
@@ -0,0 +1,7 @@
+class FooFooFooFooFoo {
+    {
+        int a = 0;
+        ABCD<caret>
+        foo(new String[]{"a"}, 1);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/java/ReplaceReferenceExpressionWithTypeElement_after.java b/java/java-tests/testData/codeInsight/completion/className/java/ReplaceReferenceExpressionWithTypeElement_after.java
new file mode 100644
index 0000000..d2b3224
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/java/ReplaceReferenceExpressionWithTypeElement_after.java
@@ -0,0 +1,9 @@
+import foo.bar.ABCDEF;
+
+class FooFooFooFooFoo {
+    {
+        int a = 0;
+        ABCDEF<caret>
+        foo(new String[]{"a"}, 1);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/java/ReuseParensAfterNew.java b/java/java-tests/testData/codeInsight/completion/className/java/ReuseParensAfterNew.java
new file mode 100644
index 0000000..4518863
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/java/ReuseParensAfterNew.java
@@ -0,0 +1,7 @@
+class FooFooFooFooFoo {
+  {
+    new FFFFF<caret>(x);
+  }
+
+  FooFooFooFooFoo(int x) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/java/ReuseParensAfterNew_after.java b/java/java-tests/testData/codeInsight/completion/className/java/ReuseParensAfterNew_after.java
new file mode 100644
index 0000000..ae09c0a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/java/ReuseParensAfterNew_after.java
@@ -0,0 +1,7 @@
+class FooFooFooFooFoo {
+  {
+    new FooFooFooFooFoo(<caret>x);
+  }
+
+  FooFooFooFooFoo(int x) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/Annotation-result.java b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/Annotation-result.java
new file mode 100644
index 0000000..ded584e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/Annotation-result.java
@@ -0,0 +1,8 @@
+@interface Column {
+  String name();
+}
+
+@Column(<caret>)
+@interface Annotation {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/Annotation-source.java b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/Annotation-source.java
new file mode 100644
index 0000000..9931649
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/Annotation-source.java
@@ -0,0 +1,8 @@
+@interface Column {
+  String name();
+}
+
+@Colu<caret>
+@interface Annotation {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/ExtraSpace-result.java b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/ExtraSpace-result.java
new file mode 100644
index 0000000..9f8533a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/ExtraSpace-result.java
@@ -0,0 +1,8 @@
+import java.io.FileInputStream;
+
+class Main {
+
+    public static void main(String[] args) {
+        equals(FileInputStream<caret>aaa);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/ExtraSpace-source.java b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/ExtraSpace-source.java
new file mode 100644
index 0000000..460b318
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/ExtraSpace-source.java
@@ -0,0 +1,6 @@
+class Main {
+
+    public static void main(String[] args) {
+        equals(FileInputStrea<caret>aaa);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/InCommentWithPackagePrefix-result.java b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/InCommentWithPackagePrefix-result.java
new file mode 100644
index 0000000..d638244
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/InCommentWithPackagePrefix-result.java
@@ -0,0 +1,6 @@
+class Main {
+
+    public static void main(String[] args) {
+        // java.io.FileInputStream<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/InCommentWithPackagePrefix-source.java b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/InCommentWithPackagePrefix-source.java
new file mode 100644
index 0000000..2ec9f64
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/InCommentWithPackagePrefix-source.java
@@ -0,0 +1,6 @@
+class Main {
+
+    public static void main(String[] args) {
+        // java.FileInputStrea<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/InStaticImport-result.java b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/InStaticImport-result.java
new file mode 100644
index 0000000..7f346c9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/InStaticImport-result.java
@@ -0,0 +1,8 @@
+import static java.io.FileInputStream<caret>
+
+class Main {
+
+    public static void main(String[] args) {
+        equals(FileInputStrea<caret>aaa);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/InStaticImport-source.java b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/InStaticImport-source.java
new file mode 100644
index 0000000..495354a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/InStaticImport-source.java
@@ -0,0 +1,8 @@
+import static FileInpStre<caret>
+
+class Main {
+
+    public static void main(String[] args) {
+        equals(FileInputStrea<caret>aaa);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/implements2-result.java b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/implements2-result.java
new file mode 100644
index 0000000..1a628e4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/implements2-result.java
@@ -0,0 +1,3 @@
+class ZZZZZZ{}
+
+class A implements Foo, ZZZZZZ<caret>{}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/implements2-source.java b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/implements2-source.java
new file mode 100644
index 0000000..ce26da3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/implements2-source.java
@@ -0,0 +1,3 @@
+class ZZZZZZ{}
+
+class A implements Foo, ZZZ<caret>{}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/implements3-result.java b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/implements3-result.java
new file mode 100644
index 0000000..b142aea
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/implements3-result.java
@@ -0,0 +1,3 @@
+class ZZZZZZ{}
+
+class A implements Foo<ZZZZZZ<caret>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/implements3-source.java b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/implements3-source.java
new file mode 100644
index 0000000..eabbf20
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/implements3-source.java
@@ -0,0 +1,3 @@
+class ZZZZZZ{}
+
+class A implements Foo<ZZZ<caret>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/methodCall-result.java b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/methodCall-result.java
new file mode 100644
index 0000000..28bc298
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/methodCall-result.java
@@ -0,0 +1,5 @@
+class MyClass1 {
+  {
+    MyClass1<caret>foo()
+  }  
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/methodCall-source.java b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/methodCall-source.java
new file mode 100644
index 0000000..6bafef87
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/methodCall-source.java
@@ -0,0 +1,5 @@
+class MyClass1 {
+  {
+    MCla<caret>foo()
+  }  
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/methodCall1-result.java b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/methodCall1-result.java
new file mode 100644
index 0000000..6c17d34
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/methodCall1-result.java
@@ -0,0 +1,5 @@
+class MyClass1 {
+  {
+    MyClass1<caret>f.oo()
+  }  
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/methodCall1-source.java b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/methodCall1-source.java
new file mode 100644
index 0000000..4e12ce2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/methodCall1-source.java
@@ -0,0 +1,5 @@
+class MyClass1 {
+  {
+    MCla<caret>f.oo()
+  }  
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test1-result.java b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test1-result.java
new file mode 100644
index 0000000..3900746
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test1-result.java
@@ -0,0 +1,3 @@
+class MyClass1 {
+    MyClass1<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test1-source.java b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test1-source.java
new file mode 100644
index 0000000..2e7593b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test1-source.java
@@ -0,0 +1,3 @@
+class MyClass1 {
+    MyCla<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test10-result.java b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test10-result.java
new file mode 100644
index 0000000..ee551ef
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test10-result.java
@@ -0,0 +1,5 @@
+package aaa;
+@interface MyObjectType {}
+class A {
+  aaa.MyObjectType<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test10-source.java b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test10-source.java
new file mode 100644
index 0000000..79ed602
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test10-source.java
@@ -0,0 +1,5 @@
+package aaa;
+@interface MyObjectType {}
+class A {
+  aaa.MyObj<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test11-result.java b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test11-result.java
new file mode 100644
index 0000000..9911ae3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test11-result.java
@@ -0,0 +1,5 @@
+package aaa;
+@interface MyObjectType {}
+class A {
+  MyObjectType<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test11-source.java b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test11-source.java
new file mode 100644
index 0000000..d57e063
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test11-source.java
@@ -0,0 +1,5 @@
+package aaa;
+@interface MyObjectType {}
+class A {
+  MyObj<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test12-result.java b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test12-result.java
new file mode 100644
index 0000000..799d8e2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test12-result.java
@@ -0,0 +1,7 @@
+package aaa;
+@interface MyObjectType {}
+class A {
+  void aaa() {
+    getClass().getAnnotations(MyObjectType<caret>)
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test12-source.java b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test12-source.java
new file mode 100644
index 0000000..04c90f8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test12-source.java
@@ -0,0 +1,7 @@
+package aaa;
+@interface MyObjectType {}
+class A {
+  void aaa() {
+    getClass().getAnnotations(MyObject<caret>)
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test13-result.java b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test13-result.java
new file mode 100644
index 0000000..912ce24
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test13-result.java
@@ -0,0 +1,9 @@
+package aaa;
+import java.lang.annotation.*;
+
+@Retention(RetentionPolicy.RUNTIME)
+@interface MyObjectType {}
+
+class A {
+  MyObjectType<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test13-source.java b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test13-source.java
new file mode 100644
index 0000000..a6ac202
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test13-source.java
@@ -0,0 +1,9 @@
+package aaa;
+import java.lang.annotation.*;
+
+@Retention(RetentionPolicy.RUNTIME)
+@interface MyObjectType {}
+
+class A {
+  My<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test2-result.java b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test2-result.java
new file mode 100644
index 0000000..9917feb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test2-result.java
@@ -0,0 +1,5 @@
+class Test1 {
+    public void foo(){
+        Test1<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test2-source.java b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test2-source.java
new file mode 100644
index 0000000..1f49be0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test2-source.java
@@ -0,0 +1,5 @@
+class Test1 {
+    public void foo(){
+        Tes<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test3-result.java b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test3-result.java
new file mode 100644
index 0000000..43a6e52
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test3-result.java
@@ -0,0 +1,3 @@
+class ZZZZZZ{}
+
+class A implements ZZZZZZ<caret>{}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test3-source.java b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test3-source.java
new file mode 100644
index 0000000..586d2b4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test3-source.java
@@ -0,0 +1,3 @@
+class ZZZZZZ{}
+
+class A implements ZZZ<caret>{}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test4-result.java b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test4-result.java
new file mode 100644
index 0000000..03349ac
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test4-result.java
@@ -0,0 +1,3 @@
+interface ZZZZZZ{}
+
+class A implements ZZZZZZ<caret>{}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test4-source.java b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test4-source.java
new file mode 100644
index 0000000..b0f9d69
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test4-source.java
@@ -0,0 +1,3 @@
+interface ZZZZZZ{}
+
+class A implements ZZZ<caret>{}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test7-result.java b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test7-result.java
new file mode 100644
index 0000000..c327cb6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test7-result.java
@@ -0,0 +1,5 @@
+class MyObject {}
+@interface MyObjectType {}
+
+@MyObjectType<caret>
+class A {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test7-source.java b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test7-source.java
new file mode 100644
index 0000000..8da28b8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test7-source.java
@@ -0,0 +1,5 @@
+class MyObject {}
+@interface MyObjectType {}
+
+@MyObj<caret>
+class A {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test8-result.java b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test8-result.java
new file mode 100644
index 0000000..32b1bab
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test8-result.java
@@ -0,0 +1,5 @@
+@interface MyObjectType {}
+
+class A {
+  void aaa(@MyObjectType<caret>);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test8-source.java b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test8-source.java
new file mode 100644
index 0000000..52800af
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test8-source.java
@@ -0,0 +1,5 @@
+@interface MyObjectType {}
+
+class A {
+  void aaa(@MyObj<caret>);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test9-result.java b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test9-result.java
new file mode 100644
index 0000000..14466d1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test9-result.java
@@ -0,0 +1,3 @@
+import MyObjectType<caret>
+@interface MyObjectType {}
+class A {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test9-source.java b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test9-source.java
new file mode 100644
index 0000000..9e26d52c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test9-source.java
@@ -0,0 +1,3 @@
+import MyObj<caret>
+@interface MyObjectType {}
+class A {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test9_2-result.java b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test9_2-result.java
new file mode 100644
index 0000000..7420dcb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test9_2-result.java
@@ -0,0 +1,5 @@
+import MyObjectType<caret>
+@interface MyObjectType {
+  int param();
+}
+class A {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test9_2-source.java b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test9_2-source.java
new file mode 100644
index 0000000..b399e8b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test9_2-source.java
@@ -0,0 +1,5 @@
+import MyObj<caret>
+@interface MyObjectType {
+  int param();
+}
+class A {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test9_3-result.java b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test9_3-result.java
new file mode 100644
index 0000000..62842b7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test9_3-result.java
@@ -0,0 +1,8 @@
+@interface MyObjectType {
+  int param();
+}
+class A {
+  void foo() {
+    MyObjectType<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test9_3-source.java b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test9_3-source.java
new file mode 100644
index 0000000..59d95b3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/test9_3-source.java
@@ -0,0 +1,8 @@
+@interface MyObjectType {
+  int param();
+}
+class A {
+  void foo() {
+    MyOb<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/varType-result.java b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/varType-result.java
new file mode 100644
index 0000000..6c17d34
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/varType-result.java
@@ -0,0 +1,5 @@
+class MyClass1 {
+  {
+    MyClass1<caret>f.oo()
+  }  
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/varType-source.java b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/varType-source.java
new file mode 100644
index 0000000..4e12ce2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/className/nameCompletion/java/varType-source.java
@@ -0,0 +1,5 @@
+class MyClass1 {
+  {
+    MCla<caret>f.oo()
+  }  
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/customFileType/1.cs b/java/java-tests/testData/codeInsight/completion/customFileType/1.cs
new file mode 100644
index 0000000..0b4823d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/customFileType/1.cs
@@ -0,0 +1 @@
+cont<caret>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/customFileType/1_after.cs b/java/java-tests/testData/codeInsight/completion/customFileType/1_after.cs
new file mode 100644
index 0000000..394c78d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/customFileType/1_after.cs
@@ -0,0 +1 @@
+continue<caret>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/customFileType/2.cs b/java/java-tests/testData/codeInsight/completion/customFileType/2.cs
new file mode 100644
index 0000000..70aba74
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/customFileType/2.cs
@@ -0,0 +1,3 @@
+if (true) {
+  whi<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/customFileType/2_after.cs b/java/java-tests/testData/codeInsight/completion/customFileType/2_after.cs
new file mode 100644
index 0000000..8416230
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/customFileType/2_after.cs
@@ -0,0 +1,3 @@
+if (true) {
+  while<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/customFileType/Erlang.erl b/java/java-tests/testData/codeInsight/completion/customFileType/Erlang.erl
new file mode 100644
index 0000000..427ce174
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/customFileType/Erlang.erl
@@ -0,0 +1 @@
+ca<caret>
diff --git a/java/java-tests/testData/codeInsight/completion/customFileType/WordCompletion.cs b/java/java-tests/testData/codeInsight/completion/customFileType/WordCompletion.cs
new file mode 100644
index 0000000..c60df17f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/customFileType/WordCompletion.cs
@@ -0,0 +1,2 @@
+whiwhiwhi
+  whi<caret>
diff --git a/java/java-tests/testData/codeInsight/completion/dot/Dot1.java b/java/java-tests/testData/codeInsight/completion/dot/Dot1.java
new file mode 100644
index 0000000..0eefb68
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/dot/Dot1.java
@@ -0,0 +1,11 @@
+class Dot1{
+  class A{
+    int a = 0;
+    int foo(){
+  }
+  }
+  static {
+	
+    int a = new A().<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/dot/Dot10.java b/java/java-tests/testData/codeInsight/completion/dot/Dot10.java
new file mode 100644
index 0000000..d095741
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/dot/Dot10.java
@@ -0,0 +1,18 @@
+/**
+ * Created by IntelliJ IDEA.
+ * User: ik
+ * Date: 23.01.2003
+ * Time: 17:06:57
+ * To change this template use Options | File Templates.
+ */
+public class Dot9 {
+    public static class A{
+        public A(){}
+        public void foo(){}
+    }
+
+    public static void main(String[] args) {
+        long[] arr = new long[0];
+        arr.<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/dot/Dot11.java b/java/java-tests/testData/codeInsight/completion/dot/Dot11.java
new file mode 100644
index 0000000..8722592
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/dot/Dot11.java
@@ -0,0 +1,18 @@
+/**
+ * Created by IntelliJ IDEA.
+ * User: ik
+ * Date: 27.01.2003
+ * Time: 19:35:37
+ * To change this template use Options | File Templates.
+ */
+public class Dot11 extends A {
+    void foo1(){}
+
+    {
+        this.<caret>
+    }
+}
+
+class A{
+    void foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/dot/Dot12.java b/java/java-tests/testData/codeInsight/completion/dot/Dot12.java
new file mode 100644
index 0000000..a834a33
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/dot/Dot12.java
@@ -0,0 +1,20 @@
+/**
+ * Created by IntelliJ IDEA.
+ * User: ik
+ * Date: 27.01.2003
+ * Time: 19:37:12
+ * To change this template use Options | File Templates.
+ */
+
+public class Dot12 extends A {
+    void foo1(){}
+
+    {
+
+        super.<caret>
+    }
+}
+
+class A{
+    void foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/dot/Dot2.java b/java/java-tests/testData/codeInsight/completion/dot/Dot2.java
new file mode 100644
index 0000000..52ea39e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/dot/Dot2.java
@@ -0,0 +1,11 @@
+class Dot2{
+  class A{
+    static int a = 0;
+    static int foo(){
+  }
+  }
+  static {
+	
+    int a = A.<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/dot/Dot3.java b/java/java-tests/testData/codeInsight/completion/dot/Dot3.java
new file mode 100644
index 0000000..08b67b6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/dot/Dot3.java
@@ -0,0 +1,15 @@
+class Dot3{
+  class A{
+    int a = 0;
+    int foo(){
+  }
+  }
+  static {
+    
+    Object a = new A(){
+      static int foo(){
+        int c = super.<caret>
+      }
+    };
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/dot/Dot4.java b/java/java-tests/testData/codeInsight/completion/dot/Dot4.java
new file mode 100644
index 0000000..860ab1b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/dot/Dot4.java
@@ -0,0 +1,10 @@
+class Dot4{
+  class A{
+    static int a = 0;
+    int foo(){
+    }
+  }
+  static {
+    int a = new A().<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/dot/Dot5.java b/java/java-tests/testData/codeInsight/completion/dot/Dot5.java
new file mode 100644
index 0000000..800b55c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/dot/Dot5.java
@@ -0,0 +1,12 @@
+import java.<caret>
+
+class Dot5{
+  class A{
+    static int a = 0;
+    int foo(){
+    }
+  }
+  static {
+    int a = new A().
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/dot/Dot6.java b/java/java-tests/testData/codeInsight/completion/dot/Dot6.java
new file mode 100644
index 0000000..8de1430
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/dot/Dot6.java
@@ -0,0 +1,5 @@
+class Dot6{
+  public static void main(String[] args){
+    int a = args[0].<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/dot/Dot7.java b/java/java-tests/testData/codeInsight/completion/dot/Dot7.java
new file mode 100644
index 0000000..819f424
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/dot/Dot7.java
@@ -0,0 +1,5 @@
+class Dot7{
+  public static void main(String[] args){
+    int a = args.<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/dot/Dot8.java b/java/java-tests/testData/codeInsight/completion/dot/Dot8.java
new file mode 100644
index 0000000..85ef2ee
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/dot/Dot8.java
@@ -0,0 +1,19 @@
+/**
+ * Created by IntelliJ IDEA.
+ * User: ik
+ * Date: 23.01.2003
+ * Time: 15:04:45
+ * To change this template use Options | File Templates.
+ */
+public class Dot8 {
+
+    {
+        new A().<caret>
+    }
+}
+class A{
+    public String toString(){
+
+        return "".;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/dot/Dot9.java b/java/java-tests/testData/codeInsight/completion/dot/Dot9.java
new file mode 100644
index 0000000..1cdf11d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/dot/Dot9.java
@@ -0,0 +1,17 @@
+/**
+ * Created by IntelliJ IDEA.
+ * User: ik
+ * Date: 23.01.2003
+ * Time: 17:06:57
+ * To change this template use Options | File Templates.
+ */
+public class Dot9 {
+    public static class A{
+        public A(){}
+        public void foo(){}
+    }
+
+    public static void main(String[] args) {
+        new A().<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/dot/MultiCatch.java b/java/java-tests/testData/codeInsight/completion/dot/MultiCatch.java
new file mode 100644
index 0000000..eb6983a3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/dot/MultiCatch.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2000-2011 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 {
+  static class E extends Exception { }
+  interface I { void i(); }
+  static class E1 extends E implements I { public void i() { } }
+  static class E2 extends E implements I { public void i() { } }
+
+  void m(boolean f) {
+    try {
+      if (f)
+        throw new E1();
+      else
+        throw new E2();
+    }
+    catch (E1 | E2 e) {
+      e.<caret>
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/javadoc/ClassTagName.java b/java/java-tests/testData/codeInsight/completion/javadoc/ClassTagName.java
new file mode 100644
index 0000000..abc2e7d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/javadoc/ClassTagName.java
@@ -0,0 +1,5 @@
+/**
+ * @<caret>
+ */
+ 
+class C{}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/javadoc/Exception0.java b/java/java-tests/testData/codeInsight/completion/javadoc/Exception0.java
new file mode 100644
index 0000000..2ac46bd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/javadoc/Exception0.java
@@ -0,0 +1,6 @@
+class Test {
+    /**
+     *  @<caret>
+     */
+     public void foo() throws Exception {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/javadoc/Exception1.java b/java/java-tests/testData/codeInsight/completion/javadoc/Exception1.java
new file mode 100644
index 0000000..588cdfb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/javadoc/Exception1.java
@@ -0,0 +1,6 @@
+class Test {
+    /**
+     *  @exception <caret>
+     */
+     public void foo() throws Exception {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/javadoc/Exception2.java b/java/java-tests/testData/codeInsight/completion/javadoc/Exception2.java
new file mode 100644
index 0000000..6e9971b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/javadoc/Exception2.java
@@ -0,0 +1,6 @@
+class Test {
+    /**
+     *  @exception <caret>
+     */
+     public void foo() throws java.io.IOException, IllegalStateException {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/javadoc/FieldReferenceInInnerClassJavadoc.java b/java/java-tests/testData/codeInsight/completion/javadoc/FieldReferenceInInnerClassJavadoc.java
new file mode 100644
index 0000000..07e48ce
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/javadoc/FieldReferenceInInnerClassJavadoc.java
@@ -0,0 +1,10 @@
+public class TestClass {
+
+  public static final int MY_CONSTANT = 0;
+
+  /**
+   * {@link #MY<caret>
+   */
+  public class Inner {}
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/javadoc/FieldReferenceInInnerClassJavadoc_after.java b/java/java-tests/testData/codeInsight/completion/javadoc/FieldReferenceInInnerClassJavadoc_after.java
new file mode 100644
index 0000000..153dc0e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/javadoc/FieldReferenceInInnerClassJavadoc_after.java
@@ -0,0 +1,10 @@
+public class TestClass {
+
+  public static final int MY_CONSTANT = 0;
+
+  /**
+   * {@link #MY_CONSTANT<caret>
+   */
+  public class Inner {}
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/javadoc/FieldTagName.java b/java/java-tests/testData/codeInsight/completion/javadoc/FieldTagName.java
new file mode 100644
index 0000000..fb7675a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/javadoc/FieldTagName.java
@@ -0,0 +1,7 @@
+class C{
+    
+    /**
+     * @<caret>
+     */
+    private int myField;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/javadoc/FinishWithSharp.java b/java/java-tests/testData/codeInsight/completion/javadoc/FinishWithSharp.java
new file mode 100644
index 0000000..6d3a009
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/javadoc/FinishWithSharp.java
@@ -0,0 +1,13 @@
+/**
+ * Some text {@link Fub<caret>
+ */
+ 
+class C{}
+
+
+class Fubar {
+  void foo();
+  void bar();
+}
+
+class Fubar2 {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/javadoc/FinishWithSharp_after.java b/java/java-tests/testData/codeInsight/completion/javadoc/FinishWithSharp_after.java
new file mode 100644
index 0000000..4fdf43e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/javadoc/FinishWithSharp_after.java
@@ -0,0 +1,13 @@
+/**
+ * Some text {@link Fubar#<caret>
+ */
+ 
+class C{}
+
+
+class Fubar {
+  void foo();
+  void bar();
+}
+
+class Fubar2 {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/javadoc/IDEADEV10620-after.java b/java/java-tests/testData/codeInsight/completion/javadoc/IDEADEV10620-after.java
new file mode 100644
index 0000000..5700ef6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/javadoc/IDEADEV10620-after.java
@@ -0,0 +1,7 @@
+/**
+ * @see #foo(Object) <caret>
+ */
+class Test1<T> {
+    public void foo(T bar) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/javadoc/IDEADEV10620.java b/java/java-tests/testData/codeInsight/completion/javadoc/IDEADEV10620.java
new file mode 100644
index 0000000..b85fee8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/javadoc/IDEADEV10620.java
@@ -0,0 +1,7 @@
+/**
+ * @see #fo<caret>
+ */
+class Test1<T> {
+    public void foo(T bar) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/javadoc/InlineReference.java b/java/java-tests/testData/codeInsight/completion/javadoc/InlineReference.java
new file mode 100644
index 0000000..705d068
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/javadoc/InlineReference.java
@@ -0,0 +1,4 @@
+/**
+ * {@link java.<caret>}
+ */
+class A{}
diff --git a/java/java-tests/testData/codeInsight/completion/javadoc/InlineTagName.java b/java/java-tests/testData/codeInsight/completion/javadoc/InlineTagName.java
new file mode 100644
index 0000000..aa5d737
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/javadoc/InlineTagName.java
@@ -0,0 +1,5 @@
+/**
+ * Some text {@<caret>
+ */
+ 
+class C{}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/javadoc/MethodBeforeSharp.java b/java/java-tests/testData/codeInsight/completion/javadoc/MethodBeforeSharp.java
new file mode 100644
index 0000000..f0c1259
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/javadoc/MethodBeforeSharp.java
@@ -0,0 +1,7 @@
+/**
+ * Some text {@link Fubar#fo<caret>#
+ */
+ 
+class Fubar {
+  void foo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/javadoc/MethodBeforeSharp_after.java b/java/java-tests/testData/codeInsight/completion/javadoc/MethodBeforeSharp_after.java
new file mode 100644
index 0000000..a1513a1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/javadoc/MethodBeforeSharp_after.java
@@ -0,0 +1,7 @@
+/**
+ * Some text {@link Fubar#foo()} <caret>#
+ */
+ 
+class Fubar {
+  void foo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/javadoc/MethodTagName0.java b/java/java-tests/testData/codeInsight/completion/javadoc/MethodTagName0.java
new file mode 100644
index 0000000..dba8a79
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/javadoc/MethodTagName0.java
@@ -0,0 +1,7 @@
+class C{
+    
+    /**
+     * @<caret>
+     */
+    private int foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/javadoc/MethodTagName1.java b/java/java-tests/testData/codeInsight/completion/javadoc/MethodTagName1.java
new file mode 100644
index 0000000..fb1cef2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/javadoc/MethodTagName1.java
@@ -0,0 +1,7 @@
+class C{
+    
+    /**
+     * @s<caret>
+     */
+    private int foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/javadoc/ParamValue0.java b/java/java-tests/testData/codeInsight/completion/javadoc/ParamValue0.java
new file mode 100644
index 0000000..db56f59
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/javadoc/ParamValue0.java
@@ -0,0 +1,7 @@
+class C{
+    
+    /**
+     * @param <caret>
+     */
+    private int foo(int a, char b, String c) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/javadoc/ParamValue1.java b/java/java-tests/testData/codeInsight/completion/javadoc/ParamValue1.java
new file mode 100644
index 0000000..7d0f058
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/javadoc/ParamValue1.java
@@ -0,0 +1,7 @@
+class C{
+    
+    /**
+     * @param a<caret>
+     */
+    private int foo(int a1, char a2, String a3) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/javadoc/ParamValue2.java b/java/java-tests/testData/codeInsight/completion/javadoc/ParamValue2.java
new file mode 100644
index 0000000..fb32c57
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/javadoc/ParamValue2.java
@@ -0,0 +1,9 @@
+class C{
+    
+    /**
+     * @param a1
+     * @param a<caret>
+     * @param a4
+     */
+    private int foo(int a1, char a2, String a3, boolean a4) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/javadoc/QualifiedClassReference.java b/java/java-tests/testData/codeInsight/completion/javadoc/QualifiedClassReference.java
new file mode 100644
index 0000000..ae89665
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/javadoc/QualifiedClassReference.java
@@ -0,0 +1,7 @@
+/**
+ * {@link FileInputStr<caret>}
+ */
+
+class Foo {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/javadoc/QualifiedClassReference_after.java b/java/java-tests/testData/codeInsight/completion/javadoc/QualifiedClassReference_after.java
new file mode 100644
index 0000000..2617e1d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/javadoc/QualifiedClassReference_after.java
@@ -0,0 +1,7 @@
+/**
+ * {@link java.io.FileInputStream<caret>}
+ */
+
+class Foo {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/javadoc/ReferenceProvider.java b/java/java-tests/testData/codeInsight/completion/javadoc/ReferenceProvider.java
new file mode 100644
index 0000000..8b2abf5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/javadoc/ReferenceProvider.java
@@ -0,0 +1,4 @@
+/**
+ * @custom <caret>
+ */
+class A{}
diff --git a/java/java-tests/testData/codeInsight/completion/javadoc/See0.java b/java/java-tests/testData/codeInsight/completion/javadoc/See0.java
new file mode 100644
index 0000000..4620bfc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/javadoc/See0.java
@@ -0,0 +1,7 @@
+class C{
+    
+    /**
+     * @see #<caret>
+     */
+    private int foo(int a, char b, String c) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/javadoc/See1.java b/java/java-tests/testData/codeInsight/completion/javadoc/See1.java
new file mode 100644
index 0000000..36fd1a6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/javadoc/See1.java
@@ -0,0 +1,7 @@
+class C{
+    
+    /**
+     * @see #not<caret>
+     */
+    private int foo(int a, char b, String c) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/javadoc/See2.java b/java/java-tests/testData/codeInsight/completion/javadoc/See2.java
new file mode 100644
index 0000000..53f421a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/javadoc/See2.java
@@ -0,0 +1,9 @@
+class C{
+    
+    /**
+     * @see #not<caret>
+     *
+     * @since
+     */
+    private int foo(int a, char b, String c) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/javadoc/See3.java b/java/java-tests/testData/codeInsight/completion/javadoc/See3.java
new file mode 100644
index 0000000..d0f0542
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/javadoc/See3.java
@@ -0,0 +1,10 @@
+class C{
+    private int myField;
+    
+    /**
+     * @see #<caret>
+     *
+     * @since
+     */
+    private int foo(int a, char b, String c) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/javadoc/See4.java b/java/java-tests/testData/codeInsight/completion/javadoc/See4.java
new file mode 100644
index 0000000..36ae286
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/javadoc/See4.java
@@ -0,0 +1,13 @@
+class C{
+    private int myField;
+    
+    /**
+     * @see <caret>
+     *
+     * @since
+     */
+    private int foo(int a, char b, String c) {}
+    
+    class A{}
+    class B{}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/javadoc/See5.java b/java/java-tests/testData/codeInsight/completion/javadoc/See5.java
new file mode 100644
index 0000000..211b366
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/javadoc/See5.java
@@ -0,0 +1,9 @@
+class C{
+    /**
+     * @see A#<caret>
+     */
+    private int myField;
+    
+    class A{  private String myName;  private int foo(int a, char b, String c) {} }
+    class B{}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/javadoc/See6.java b/java/java-tests/testData/codeInsight/completion/javadoc/See6.java
new file mode 100644
index 0000000..c3b012b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/javadoc/See6.java
@@ -0,0 +1,11 @@
+class C{
+    /**
+     * @see #perform(<caret>
+     */
+    private int myField;
+
+    public void perform() {}
+    public void perform(int a) {}
+    public void perform(int a, String b) {}
+    public void perform(String b) {}
+}
diff --git a/java/java-tests/testData/codeInsight/completion/javadoc/See6After.java b/java/java-tests/testData/codeInsight/completion/javadoc/See6After.java
new file mode 100644
index 0000000..fe9a26e3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/javadoc/See6After.java
@@ -0,0 +1,11 @@
+class C{
+    /**
+     * @see #perform(int, String) <caret>
+     */
+    private int myField;
+
+    public void perform() {}
+    public void perform(int a) {}
+    public void perform(int a, String b) {}
+    public void perform(String b) {}
+}
diff --git a/java/java-tests/testData/codeInsight/completion/javadoc/ShortenClassName.java b/java/java-tests/testData/codeInsight/completion/javadoc/ShortenClassName.java
new file mode 100644
index 0000000..c883ec4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/javadoc/ShortenClassName.java
@@ -0,0 +1,7 @@
+package foo;
+
+/**
+ * Some text {@link Fub<caret>
+ */
+class Fubar {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/javadoc/ShortenClassName_after.java b/java/java-tests/testData/codeInsight/completion/javadoc/ShortenClassName_after.java
new file mode 100644
index 0000000..f364c62
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/javadoc/ShortenClassName_after.java
@@ -0,0 +1,7 @@
+package foo;
+
+/**
+ * Some text {@link Fubar<caret>
+ */
+class Fubar {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/javadoc/ShortenClassReference.java b/java/java-tests/testData/codeInsight/completion/javadoc/ShortenClassReference.java
new file mode 100644
index 0000000..b99b8be
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/javadoc/ShortenClassReference.java
@@ -0,0 +1,9 @@
+import java.io.*;
+
+/**
+ * {@link FileInputStr<caret>}
+ */
+
+class Foo {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/javadoc/ShortenClassReference_after.java b/java/java-tests/testData/codeInsight/completion/javadoc/ShortenClassReference_after.java
new file mode 100644
index 0000000..31b15cf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/javadoc/ShortenClassReference_after.java
@@ -0,0 +1,9 @@
+import java.io.*;
+
+/**
+ * {@link FileInputStream<caret>}
+ */
+
+class Foo {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/javadoc/ThrowsNonImported.java b/java/java-tests/testData/codeInsight/completion/javadoc/ThrowsNonImported.java
new file mode 100644
index 0000000..921e384
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/javadoc/ThrowsNonImported.java
@@ -0,0 +1,7 @@
+/**
+ * @throws NoSEleEx<caret>
+ */
+
+class Foo {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/javadoc/ThrowsNonImported_after.java b/java/java-tests/testData/codeInsight/completion/javadoc/ThrowsNonImported_after.java
new file mode 100644
index 0000000..1f1a0c2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/javadoc/ThrowsNonImported_after.java
@@ -0,0 +1,7 @@
+/**
+ * @throws java.util.NoSuchElementException<caret>
+ */
+
+class Foo {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/abstractInInterface.java b/java/java-tests/testData/codeInsight/completion/keywords/abstractInInterface.java
new file mode 100644
index 0000000..701fa8c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/abstractInInterface.java
@@ -0,0 +1,3 @@
+interface I {
+  <caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/afterAnnotations.java b/java/java-tests/testData/codeInsight/completion/keywords/afterAnnotations.java
new file mode 100644
index 0000000..1e7c4771
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/afterAnnotations.java
@@ -0,0 +1,2 @@
+@Deprecated
+<caret>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/catchFinally.java b/java/java-tests/testData/codeInsight/completion/keywords/catchFinally.java
new file mode 100644
index 0000000..f724d93
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/catchFinally.java
@@ -0,0 +1,23 @@
+/*
+ * 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.
+ */
+public class A{
+ public void method(){
+  try{
+   String str = "";
+  }
+  <caret>
+ }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/charInAnnotatedParameter.java b/java/java-tests/testData/codeInsight/completion/keywords/charInAnnotatedParameter.java
new file mode 100644
index 0000000..b62484f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/charInAnnotatedParameter.java
@@ -0,0 +1,7 @@
+public class Util {
+
+  void foo(@NotNull <caret> a) {
+  }
+
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/classInMethod.java b/java/java-tests/testData/codeInsight/completion/keywords/classInMethod.java
new file mode 100644
index 0000000..c9f963c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/classInMethod.java
@@ -0,0 +1,5 @@
+public class Util {
+  void foo() {
+    c<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/classScope1.java b/java/java-tests/testData/codeInsight/completion/keywords/classScope1.java
new file mode 100644
index 0000000..ed5717c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/classScope1.java
@@ -0,0 +1 @@
+public <caret>
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/classScope2.java b/java/java-tests/testData/codeInsight/completion/keywords/classScope2.java
new file mode 100644
index 0000000..44060e3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/classScope2.java
@@ -0,0 +1 @@
+abstract <caret>
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/classScope3.java b/java/java-tests/testData/codeInsight/completion/keywords/classScope3.java
new file mode 100644
index 0000000..09ead44
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/classScope3.java
@@ -0,0 +1 @@
+class <caret>
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/classScope4.java b/java/java-tests/testData/codeInsight/completion/keywords/classScope4.java
new file mode 100644
index 0000000..24e7bfb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/classScope4.java
@@ -0,0 +1,18 @@
+/*
+ * 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 A{
+<caret>
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/continue.java b/java/java-tests/testData/codeInsight/completion/keywords/continue.java
new file mode 100644
index 0000000..9d33f53
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/continue.java
@@ -0,0 +1,6 @@
+
+public class Foo {
+    {
+        for(int i;;) { cont<caret> }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/continue_after.java b/java/java-tests/testData/codeInsight/completion/keywords/continue_after.java
new file mode 100644
index 0000000..cf2b10a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/continue_after.java
@@ -0,0 +1,6 @@
+
+public class Foo {
+    {
+        for(int i;;) { continue; }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/defaultInAnno.java b/java/java-tests/testData/codeInsight/completion/keywords/defaultInAnno.java
new file mode 100644
index 0000000..c07be64
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/defaultInAnno.java
@@ -0,0 +1,3 @@
+@interface Foo {
+  String foo() def<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/defaultInAnno_after.java b/java/java-tests/testData/codeInsight/completion/keywords/defaultInAnno_after.java
new file mode 100644
index 0000000..f15ebae
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/defaultInAnno_after.java
@@ -0,0 +1,3 @@
+@interface Foo {
+  String foo() default <caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/extends1.java b/java/java-tests/testData/codeInsight/completion/keywords/extends1.java
new file mode 100644
index 0000000..f3a5b84
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/extends1.java
@@ -0,0 +1,16 @@
+/*
+ * 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 x3 <caret>
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/extends10.java b/java/java-tests/testData/codeInsight/completion/keywords/extends10.java
new file mode 100644
index 0000000..3e32612
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/extends10.java
@@ -0,0 +1,18 @@
+/*
+ * 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 A{
+ void <T e<caret>>foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/extends10_after.java b/java/java-tests/testData/codeInsight/completion/keywords/extends10_after.java
new file mode 100644
index 0000000..ad63c3b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/extends10_after.java
@@ -0,0 +1,18 @@
+/*
+ * 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 A{
+ void <T extends <caret>>foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/extends11.java b/java/java-tests/testData/codeInsight/completion/keywords/extends11.java
new file mode 100644
index 0000000..a7cd5d64
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/extends11.java
@@ -0,0 +1,18 @@
+/*
+ * 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 A{
+ void <T extends String, V e<caret>>foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/extends11_after.java b/java/java-tests/testData/codeInsight/completion/keywords/extends11_after.java
new file mode 100644
index 0000000..201aa5f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/extends11_after.java
@@ -0,0 +1,18 @@
+/*
+ * 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 A{
+ void <T extends String, V extends <caret>>foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/extends12.java b/java/java-tests/testData/codeInsight/completion/keywords/extends12.java
new file mode 100644
index 0000000..880b0eb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/extends12.java
@@ -0,0 +1,20 @@
+/*
+ * 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 A{
+ {
+   Collection<? ex<caret>>
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/extends12_after.java b/java/java-tests/testData/codeInsight/completion/keywords/extends12_after.java
new file mode 100644
index 0000000..7cf4bae
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/extends12_after.java
@@ -0,0 +1,20 @@
+/*
+ * 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 A{
+ {
+   Collection<? extends <caret>>
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/extends2.java b/java/java-tests/testData/codeInsight/completion/keywords/extends2.java
new file mode 100644
index 0000000..e00ac4c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/extends2.java
@@ -0,0 +1,18 @@
+/*
+ * 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 AAA{}
+
+class BBB extends <caret>
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/extends3.java b/java/java-tests/testData/codeInsight/completion/keywords/extends3.java
new file mode 100644
index 0000000..00e012b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/extends3.java
@@ -0,0 +1,20 @@
+/*
+ * 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 AAA{}
+
+interface CCC{}
+
+class BBB extends <caret>
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/extends4.java b/java/java-tests/testData/codeInsight/completion/keywords/extends4.java
new file mode 100644
index 0000000..0e7697b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/extends4.java
@@ -0,0 +1,20 @@
+/*
+ * 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 AAA{}
+
+interface CCC{}
+
+class BBB implements <caret>
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/extends5.java b/java/java-tests/testData/codeInsight/completion/keywords/extends5.java
new file mode 100644
index 0000000..cfec9d7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/extends5.java
@@ -0,0 +1,18 @@
+/*
+ * 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 AAA{}
+
+interface BBB extends <caret>
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/extends6.java b/java/java-tests/testData/codeInsight/completion/keywords/extends6.java
new file mode 100644
index 0000000..cfffdb1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/extends6.java
@@ -0,0 +1,18 @@
+/*
+ * 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.
+ */
+interface AAA{}
+
+interface BBB extends Runnable, <caret>
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/extends7.java b/java/java-tests/testData/codeInsight/completion/keywords/extends7.java
new file mode 100644
index 0000000..3fb696c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/extends7.java
@@ -0,0 +1,18 @@
+/*
+ * 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 AAA{}
+
+class BBB extends AAA i<caret>
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/extends7_after.java b/java/java-tests/testData/codeInsight/completion/keywords/extends7_after.java
new file mode 100644
index 0000000..3788648
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/extends7_after.java
@@ -0,0 +1,18 @@
+/*
+ * 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 AAA{}
+
+class BBB extends AAA implements <caret>
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/extends8.java b/java/java-tests/testData/codeInsight/completion/keywords/extends8.java
new file mode 100644
index 0000000..867fef8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/extends8.java
@@ -0,0 +1,19 @@
+/*
+ * 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 AAA{}
+
+class BBB extends AAA i<caret> {
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/extends8_after.java b/java/java-tests/testData/codeInsight/completion/keywords/extends8_after.java
new file mode 100644
index 0000000..ea7a94e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/extends8_after.java
@@ -0,0 +1,19 @@
+/*
+ * 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 AAA{}
+
+class BBB extends AAA implements <caret> {
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/extends9.java b/java/java-tests/testData/codeInsight/completion/keywords/extends9.java
new file mode 100644
index 0000000..37cf1f2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/extends9.java
@@ -0,0 +1,16 @@
+/*
+ * 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.
+ */
+interface AAAA e<caret>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/extends9_after.java b/java/java-tests/testData/codeInsight/completion/keywords/extends9_after.java
new file mode 100644
index 0000000..71f1777
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/extends9_after.java
@@ -0,0 +1,16 @@
+/*
+ * 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.
+ */
+interface AAAA extends <caret>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/extendsInCastTypeParameters.java b/java/java-tests/testData/codeInsight/completion/keywords/extendsInCastTypeParameters.java
new file mode 100644
index 0000000..74a5758
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/extendsInCastTypeParameters.java
@@ -0,0 +1,6 @@
+public class Main {
+
+    public static void main() {
+        x = (ProceedingJoinPoint<? ext<caret>>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/extendsInCastTypeParameters2.java b/java/java-tests/testData/codeInsight/completion/keywords/extendsInCastTypeParameters2.java
new file mode 100644
index 0000000..9cf7515
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/extendsInCastTypeParameters2.java
@@ -0,0 +1,9 @@
+public class Main {
+
+  public int compare(Object value1, Object value2) {
+    if (value1 instanceof Comparable && value2 instanceof Comparable) {
+      return ((Comparable<? <caret>>) value1).compareTo(value2);
+    }
+    throw new IllegalArgumentException();
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/extendsInCastTypeParameters_after.java b/java/java-tests/testData/codeInsight/completion/keywords/extendsInCastTypeParameters_after.java
new file mode 100644
index 0000000..7b66670
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/extendsInCastTypeParameters_after.java
@@ -0,0 +1,6 @@
+public class Main {
+
+    public static void main() {
+        x = (ProceedingJoinPoint<? extends <caret>>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/extendsInMethodParameters.java b/java/java-tests/testData/codeInsight/completion/keywords/extendsInMethodParameters.java
new file mode 100644
index 0000000..6c467e3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/extendsInMethodParameters.java
@@ -0,0 +1,20 @@
+/*
+ * 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.
+ */
+public class Xxx {
+
+    <T ext<caret>
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/extendsInMethodParameters_after.java b/java/java-tests/testData/codeInsight/completion/keywords/extendsInMethodParameters_after.java
new file mode 100644
index 0000000..694dba7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/extendsInMethodParameters_after.java
@@ -0,0 +1,20 @@
+/*
+ * 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.
+ */
+public class Xxx {
+
+    <T extends <caret>
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/extendsWithRightContextInClassTypeParameters.java b/java/java-tests/testData/codeInsight/completion/keywords/extendsWithRightContextInClassTypeParameters.java
new file mode 100644
index 0000000..30922b7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/extendsWithRightContextInClassTypeParameters.java
@@ -0,0 +1,18 @@
+/*
+ * 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 Foo<T ext<caret> A> {
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/extendsWithRightContextInClassTypeParameters_after.java b/java/java-tests/testData/codeInsight/completion/keywords/extendsWithRightContextInClassTypeParameters_after.java
new file mode 100644
index 0000000..ef03219
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/extendsWithRightContextInClassTypeParameters_after.java
@@ -0,0 +1,18 @@
+/*
+ * 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 Foo<T extends<caret> A> {
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/extraBracketAfterFinally1.java b/java/java-tests/testData/codeInsight/completion/keywords/extraBracketAfterFinally1.java
new file mode 100644
index 0000000..6a9f750
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/extraBracketAfterFinally1.java
@@ -0,0 +1,27 @@
+
+/*
+ * 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.
+ */
+public class Main {
+
+    public static void main() {
+        try {
+            
+        } final<caret> {
+
+        }
+
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/extraBracketAfterFinally1_after.java b/java/java-tests/testData/codeInsight/completion/keywords/extraBracketAfterFinally1_after.java
new file mode 100644
index 0000000..43512dd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/extraBracketAfterFinally1_after.java
@@ -0,0 +1,27 @@
+
+/*
+ * 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.
+ */
+public class Main {
+
+    public static void main() {
+        try {
+            
+        } finally {<caret>
+
+        }
+
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/extraBracketAfterFinally2.java b/java/java-tests/testData/codeInsight/completion/keywords/extraBracketAfterFinally2.java
new file mode 100644
index 0000000..f1e4289
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/extraBracketAfterFinally2.java
@@ -0,0 +1,25 @@
+
+/*
+ * 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.
+ */
+public class Main {
+
+    public static void main() {
+        try {
+            
+        } final<caret>
+
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/extraBracketAfterFinally2_after.java b/java/java-tests/testData/codeInsight/completion/keywords/extraBracketAfterFinally2_after.java
new file mode 100644
index 0000000..b99df3c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/extraBracketAfterFinally2_after.java
@@ -0,0 +1,27 @@
+
+/*
+ * 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.
+ */
+public class Main {
+
+    public static void main() {
+        try {
+            
+        } finally {
+            <caret>
+        }
+
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/fileScope1.java b/java/java-tests/testData/codeInsight/completion/keywords/fileScope1.java
new file mode 100644
index 0000000..113fdcf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/fileScope1.java
@@ -0,0 +1 @@
+<caret>
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/fileScope2.java b/java/java-tests/testData/codeInsight/completion/keywords/fileScope2.java
new file mode 100644
index 0000000..e70c35c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/fileScope2.java
@@ -0,0 +1,18 @@
+/*
+ * 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.
+ */
+package myPackage;
+
+<caret>
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/finalAfterParameterAnno.java b/java/java-tests/testData/codeInsight/completion/keywords/finalAfterParameterAnno.java
new file mode 100644
index 0000000..2b539b8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/finalAfterParameterAnno.java
@@ -0,0 +1,2 @@
+public class Util {
+  void foo(@Foo <caret> String[] args) { }}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/finalAfterParameterAnno2.java b/java/java-tests/testData/codeInsight/completion/keywords/finalAfterParameterAnno2.java
new file mode 100644
index 0000000..276bfb3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/finalAfterParameterAnno2.java
@@ -0,0 +1,3 @@
+public class Util {
+  void foo(@Foo <caret> int args) { }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/finalInTryWithResources.java b/java/java-tests/testData/codeInsight/completion/keywords/finalInTryWithResources.java
new file mode 100644
index 0000000..f087130
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/finalInTryWithResources.java
@@ -0,0 +1,5 @@
+public class Util {
+  void foo() {
+    try (<caret>)
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/instanceOf1.java b/java/java-tests/testData/codeInsight/completion/keywords/instanceOf1.java
new file mode 100644
index 0000000..b3e9890
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/instanceOf1.java
@@ -0,0 +1,5 @@
+public class A{
+ public void method(){
+  boolean x = this ins<caret>
+ }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/instanceOf1_after.java b/java/java-tests/testData/codeInsight/completion/keywords/instanceOf1_after.java
new file mode 100644
index 0000000..b8693688
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/instanceOf1_after.java
@@ -0,0 +1,5 @@
+public class A{
+ public void method(){
+  boolean x = this instanceof <caret>
+ }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/instanceOf2.java b/java/java-tests/testData/codeInsight/completion/keywords/instanceOf2.java
new file mode 100644
index 0000000..a60c70a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/instanceOf2.java
@@ -0,0 +1,20 @@
+/*
+ * 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.
+ */
+public class A{
+ public void method(){
+  boolean x = super <caret>
+ }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/instanceOf2_after.java b/java/java-tests/testData/codeInsight/completion/keywords/instanceOf2_after.java
new file mode 100644
index 0000000..a60c70a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/instanceOf2_after.java
@@ -0,0 +1,20 @@
+/*
+ * 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.
+ */
+public class A{
+ public void method(){
+  boolean x = super <caret>
+ }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/instanceOf3.java b/java/java-tests/testData/codeInsight/completion/keywords/instanceOf3.java
new file mode 100644
index 0000000..b0e93ee
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/instanceOf3.java
@@ -0,0 +1,6 @@
+public class A{
+ public void method(){
+  String str = "";
+  boolean x = str ins<caret>
+ }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/instanceOf3_after.java b/java/java-tests/testData/codeInsight/completion/keywords/instanceOf3_after.java
new file mode 100644
index 0000000..9bc7e1c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/instanceOf3_after.java
@@ -0,0 +1,6 @@
+public class A{
+ public void method(){
+  String str = "";
+  boolean x = str instanceof <caret>
+ }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/intInClassArray.java b/java/java-tests/testData/codeInsight/completion/keywords/intInClassArray.java
new file mode 100644
index 0000000..4dd1b78
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/intInClassArray.java
@@ -0,0 +1,5 @@
+public class Util {
+  int goo() {
+    Class[] c = {AbstractMethodError.class, <caret>}
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/intInClassArray2.java b/java/java-tests/testData/codeInsight/completion/keywords/intInClassArray2.java
new file mode 100644
index 0000000..9b4eb8d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/intInClassArray2.java
@@ -0,0 +1,5 @@
+public class Util {
+  int goo() {
+    new Class[]{AbstractMethodError.class, <caret>.class}
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/intInClassArray3.java b/java/java-tests/testData/codeInsight/completion/keywords/intInClassArray3.java
new file mode 100644
index 0000000..5073a54
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/intInClassArray3.java
@@ -0,0 +1,5 @@
+public class Util {
+  int goo() {
+    new Class[]{<caret>}
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/intInGenerics.java b/java/java-tests/testData/codeInsight/completion/keywords/intInGenerics.java
new file mode 100644
index 0000000..e821893
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/intInGenerics.java
@@ -0,0 +1,7 @@
+import java.lang.Object;
+
+public class Util {
+  int goo() {
+    Pair<Object, <caret>>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/intInGenerics2.java b/java/java-tests/testData/codeInsight/completion/keywords/intInGenerics2.java
new file mode 100644
index 0000000..b9ef326
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/intInGenerics2.java
@@ -0,0 +1,7 @@
+import java.lang.Object;
+
+public class Util {
+  int goo() {
+    Pair<Object, <caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/interfaceScope.java b/java/java-tests/testData/codeInsight/completion/keywords/interfaceScope.java
new file mode 100644
index 0000000..701fa8c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/interfaceScope.java
@@ -0,0 +1,3 @@
+interface I {
+  <caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/methodScope1.java b/java/java-tests/testData/codeInsight/completion/keywords/methodScope1.java
new file mode 100644
index 0000000..1afc320
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/methodScope1.java
@@ -0,0 +1,18 @@
+/*
+ * 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.
+ */
+public class A{
+ public void method() <caret> {}
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/methodScope2.java b/java/java-tests/testData/codeInsight/completion/keywords/methodScope2.java
new file mode 100644
index 0000000..e6492ad
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/methodScope2.java
@@ -0,0 +1,19 @@
+/*
+ * 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.
+ */
+public class A{
+ public void method(<caret>){
+ }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/methodScope3.java b/java/java-tests/testData/codeInsight/completion/keywords/methodScope3.java
new file mode 100644
index 0000000..b7dc464
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/methodScope3.java
@@ -0,0 +1,20 @@
+/*
+ * 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.
+ */
+public class A{
+ public void method(){
+  <caret>
+ }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/methodScope4.java b/java/java-tests/testData/codeInsight/completion/keywords/methodScope4.java
new file mode 100644
index 0000000..b7dc464
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/methodScope4.java
@@ -0,0 +1,20 @@
+/*
+ * 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.
+ */
+public class A{
+ public void method(){
+  <caret>
+ }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/methodScope5.java b/java/java-tests/testData/codeInsight/completion/keywords/methodScope5.java
new file mode 100644
index 0000000..685c9f4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/methodScope5.java
@@ -0,0 +1,20 @@
+/*
+ * 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.
+ */
+public class A{
+ public void method(fi<caret> String){
+  
+ }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/methodScope5_after.java b/java/java-tests/testData/codeInsight/completion/keywords/methodScope5_after.java
new file mode 100644
index 0000000..a270c75
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/methodScope5_after.java
@@ -0,0 +1,20 @@
+/*
+ * 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.
+ */
+public class A{
+ public void method(final<caret> String){
+  
+ }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/newInMethodRefs.java b/java/java-tests/testData/codeInsight/completion/keywords/newInMethodRefs.java
new file mode 100644
index 0000000..1f42d81
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/newInMethodRefs.java
@@ -0,0 +1,23 @@
+/*
+ * 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 Foo {
+  interface I { Object m(); }
+
+  void test() {
+    I i = Foo::n<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/newInMethodRefs_after.java b/java/java-tests/testData/codeInsight/completion/keywords/newInMethodRefs_after.java
new file mode 100644
index 0000000..dfc740a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/newInMethodRefs_after.java
@@ -0,0 +1,23 @@
+/*
+ * 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 Foo {
+  interface I { Object m(); }
+
+  void test() {
+    I i = Foo::new;<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/nullInIf.java b/java/java-tests/testData/codeInsight/completion/keywords/nullInIf.java
new file mode 100644
index 0000000..92a0dfe
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/nullInIf.java
@@ -0,0 +1,23 @@
+
+/*
+ * 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.
+ */
+public class Main {
+
+    public static void main() {
+        if (nu<caret>)
+
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/nullInIf_after.java b/java/java-tests/testData/codeInsight/completion/keywords/nullInIf_after.java
new file mode 100644
index 0000000..b538755
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/nullInIf_after.java
@@ -0,0 +1,23 @@
+
+/*
+ * 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.
+ */
+public class Main {
+
+    public static void main() {
+        if (null<caret>)
+
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/nullInMethodCall.java b/java/java-tests/testData/codeInsight/completion/keywords/nullInMethodCall.java
new file mode 100644
index 0000000..665f58f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/nullInMethodCall.java
@@ -0,0 +1,22 @@
+/*
+ * 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 Null {
+  public static void main(String[] argv) {
+    StringBuffer buf = new StringBuffer();
+    
+    buf.append(nu<caret>);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/nullInMethodCall2.java b/java/java-tests/testData/codeInsight/completion/keywords/nullInMethodCall2.java
new file mode 100644
index 0000000..bd1e40d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/nullInMethodCall2.java
@@ -0,0 +1,22 @@
+/*
+ * 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 Null {
+  public static void main(String[] argv) {
+    StringBuffer buf = new StringBuffer();
+    
+    buf.append(Null.nu<caret>);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/nullInMethodCall2_after.java b/java/java-tests/testData/codeInsight/completion/keywords/nullInMethodCall2_after.java
new file mode 100644
index 0000000..bd1e40d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/nullInMethodCall2_after.java
@@ -0,0 +1,22 @@
+/*
+ * 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 Null {
+  public static void main(String[] argv) {
+    StringBuffer buf = new StringBuffer();
+    
+    buf.append(Null.nu<caret>);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/nullInMethodCall_after.java b/java/java-tests/testData/codeInsight/completion/keywords/nullInMethodCall_after.java
new file mode 100644
index 0000000..5312998
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/nullInMethodCall_after.java
@@ -0,0 +1,22 @@
+/*
+ * 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 Null {
+  public static void main(String[] argv) {
+    StringBuffer buf = new StringBuffer();
+    
+    buf.append(null);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/nullInReturn.java b/java/java-tests/testData/codeInsight/completion/keywords/nullInReturn.java
new file mode 100644
index 0000000..79fdea8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/nullInReturn.java
@@ -0,0 +1,23 @@
+
+/*
+ * 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.
+ */
+public class Main {
+
+    public static Object main() {
+        return nu<caret>
+
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/nullInReturn_after.java b/java/java-tests/testData/codeInsight/completion/keywords/nullInReturn_after.java
new file mode 100644
index 0000000..465b5e7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/nullInReturn_after.java
@@ -0,0 +1,23 @@
+
+/*
+ * 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.
+ */
+public class Main {
+
+    public static Object main() {
+        return null<caret>
+
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/returnInTernary.java b/java/java-tests/testData/codeInsight/completion/keywords/returnInTernary.java
new file mode 100644
index 0000000..ad957a4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/returnInTernary.java
@@ -0,0 +1,5 @@
+public class Util {
+  int goo() {
+    ret<caret>cond ? 1: 0;
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/spaceAfterInstanceof.java b/java/java-tests/testData/codeInsight/completion/keywords/spaceAfterInstanceof.java
new file mode 100644
index 0000000..53904b6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/spaceAfterInstanceof.java
@@ -0,0 +1,7 @@
+class Foo {
+  void test(Object o) {
+    if (o inst<caret> Foo) {
+
+    }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/spaceAfterInstanceof_after.java b/java/java-tests/testData/codeInsight/completion/keywords/spaceAfterInstanceof_after.java
new file mode 100644
index 0000000..584007d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/spaceAfterInstanceof_after.java
@@ -0,0 +1,7 @@
+class Foo {
+  void test(Object o) {
+    if (o instanceof<caret> Foo) {
+
+    }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/super1.java b/java/java-tests/testData/codeInsight/completion/keywords/super1.java
new file mode 100644
index 0000000..43c488c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/super1.java
@@ -0,0 +1,22 @@
+/*
+ * 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 B{
+ class A{
+  {
+   B.<caret>
+  }
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/super2.java b/java/java-tests/testData/codeInsight/completion/keywords/super2.java
new file mode 100644
index 0000000..1780ecb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/super2.java
@@ -0,0 +1,20 @@
+/*
+ * 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 A{
+ {
+ String.<caret>
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/synchronized1.java b/java/java-tests/testData/codeInsight/completion/keywords/synchronized1.java
new file mode 100644
index 0000000..e00064c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/synchronized1.java
@@ -0,0 +1,22 @@
+/*
+ * 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 A {
+  void foo () {
+    new Runnable () {
+      public synch<caret>
+    };
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/synchronized1_after.java b/java/java-tests/testData/codeInsight/completion/keywords/synchronized1_after.java
new file mode 100644
index 0000000..519a52c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/synchronized1_after.java
@@ -0,0 +1,22 @@
+/*
+ * 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 A {
+  void foo () {
+    new Runnable () {
+      public synchronized <caret>
+    };
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/synchronized2.java b/java/java-tests/testData/codeInsight/completion/keywords/synchronized2.java
new file mode 100644
index 0000000..d3ae6e1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/synchronized2.java
@@ -0,0 +1,21 @@
+/*
+ * 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 Test {
+    void foo() {
+        if (true) {
+        } else syn<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/synchronized2_after.java b/java/java-tests/testData/codeInsight/completion/keywords/synchronized2_after.java
new file mode 100644
index 0000000..ef913db
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/synchronized2_after.java
@@ -0,0 +1,21 @@
+/*
+ * 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 Test {
+    void foo() {
+        if (true) {
+        } else synchronized(<caret>)
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/throwsOnSeparateLine.java b/java/java-tests/testData/codeInsight/completion/keywords/throwsOnSeparateLine.java
new file mode 100644
index 0000000..cbff613
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/throwsOnSeparateLine.java
@@ -0,0 +1,5 @@
+
+public class Foo {
+  void foo()
+  th<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/throwsOnSeparateLine_after.java b/java/java-tests/testData/codeInsight/completion/keywords/throwsOnSeparateLine_after.java
new file mode 100644
index 0000000..f0adeda
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/throwsOnSeparateLine_after.java
@@ -0,0 +1,5 @@
+
+public class Foo {
+  void foo()
+  throws <caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/trueInVariableDeclaration.java b/java/java-tests/testData/codeInsight/completion/keywords/trueInVariableDeclaration.java
new file mode 100644
index 0000000..2a64ecf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/trueInVariableDeclaration.java
@@ -0,0 +1,23 @@
+
+/*
+ * 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.
+ */
+public class Main {
+
+    public static void main() {
+        boolean b = tr<caret>
+
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/trueInVariableDeclaration_after.java b/java/java-tests/testData/codeInsight/completion/keywords/trueInVariableDeclaration_after.java
new file mode 100644
index 0000000..f202474
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/trueInVariableDeclaration_after.java
@@ -0,0 +1,23 @@
+
+/*
+ * 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.
+ */
+public class Main {
+
+    public static void main() {
+        boolean b = true<caret>
+
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/keywords/tryInExpression.java b/java/java-tests/testData/codeInsight/completion/keywords/tryInExpression.java
new file mode 100644
index 0000000..0e0753a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/keywords/tryInExpression.java
@@ -0,0 +1,5 @@
+public class MessageBean {
+ {
+    String containingClass = ((String) t<caret>    
+ }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/AccessInstanceFromStaticSecond.java b/java/java-tests/testData/codeInsight/completion/normal/AccessInstanceFromStaticSecond.java
new file mode 100644
index 0000000..a6fd614
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/AccessInstanceFromStaticSecond.java
@@ -0,0 +1,11 @@
+public class Inspection {
+
+  public boolean ignoreEnums = false;
+
+  private static class Visitor {
+    public void visitClass() {
+      if (ignoen<caret>) {
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/AccessInstanceFromStaticSecond_after.java b/java/java-tests/testData/codeInsight/completion/normal/AccessInstanceFromStaticSecond_after.java
new file mode 100644
index 0000000..1e4633f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/AccessInstanceFromStaticSecond_after.java
@@ -0,0 +1,11 @@
+public class Inspection {
+
+  public boolean ignoreEnums = false;
+
+  private static class Visitor {
+    public void visitClass() {
+      if (ignoreEnums<caret>) {
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/AccessStaticViaInstance.java b/java/java-tests/testData/codeInsight/completion/normal/AccessStaticViaInstance.java
new file mode 100644
index 0000000..c35afb5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/AccessStaticViaInstance.java
@@ -0,0 +1,10 @@
+@SuppressWarnings("AccessStaticViaInstance")
+public class KeyVO {
+  {
+    new Cli().fo<caret>
+  }
+}
+
+class Cli {
+  static void foo() {}
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/AccessStaticViaInstanceSecond.java b/java/java-tests/testData/codeInsight/completion/normal/AccessStaticViaInstanceSecond.java
new file mode 100644
index 0000000..8a9a915
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/AccessStaticViaInstanceSecond.java
@@ -0,0 +1,6 @@
+public class KeyVO {
+  {
+    this.fo<caret>
+  }
+  static void foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/AccessStaticViaInstanceSecond_after.java b/java/java-tests/testData/codeInsight/completion/normal/AccessStaticViaInstanceSecond_after.java
new file mode 100644
index 0000000..bc41195
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/AccessStaticViaInstanceSecond_after.java
@@ -0,0 +1,6 @@
+public class KeyVO {
+  {
+    this.foo();<caret>
+  }
+  static void foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/AccessStaticViaInstance_after.java b/java/java-tests/testData/codeInsight/completion/normal/AccessStaticViaInstance_after.java
new file mode 100644
index 0000000..71e72e8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/AccessStaticViaInstance_after.java
@@ -0,0 +1,10 @@
+@SuppressWarnings("AccessStaticViaInstance")
+public class KeyVO {
+  {
+    new Cli().foo();<caret>
+  }
+}
+
+class Cli {
+  static void foo() {}
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/AfterCast1.java b/java/java-tests/testData/codeInsight/completion/normal/AfterCast1.java
new file mode 100644
index 0000000..9c5ba30
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/AfterCast1.java
@@ -0,0 +1,7 @@
+class A{
+ {
+   X aaa, aab;
+
+   (A)aa<caret>
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/AfterCast2-result.java b/java/java-tests/testData/codeInsight/completion/normal/AfterCast2-result.java
new file mode 100644
index 0000000..6628017
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/AfterCast2-result.java
@@ -0,0 +1,6 @@
+class A{
+  private A myClassCombo;
+  protected void createNorthPanel() {
+    ((A)myClassCombo<caret>)
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/AfterCast2.java b/java/java-tests/testData/codeInsight/completion/normal/AfterCast2.java
new file mode 100644
index 0000000..e4536b9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/AfterCast2.java
@@ -0,0 +1,6 @@
+class A{
+  private A myClassCombo;
+  protected void createNorthPanel() {
+    ((A)my<caret>)
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/AfterCommonPrefix.java b/java/java-tests/testData/codeInsight/completion/normal/AfterCommonPrefix.java
new file mode 100644
index 0000000..7fd81dd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/AfterCommonPrefix.java
@@ -0,0 +1,5 @@
+public class SomeClass {
+  void foo(String param) {
+    if (param.<caret>)
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/AfterCommonPrefix_after.java b/java/java-tests/testData/codeInsight/completion/normal/AfterCommonPrefix_after.java
new file mode 100644
index 0000000..d6745c3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/AfterCommonPrefix_after.java
@@ -0,0 +1,5 @@
+public class SomeClass {
+  void foo(String param) {
+    if (param.equals(<caret>))
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/AfterInstanceof.java b/java/java-tests/testData/codeInsight/completion/normal/AfterInstanceof.java
new file mode 100644
index 0000000..3334c61
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/AfterInstanceof.java
@@ -0,0 +1,5 @@
+class A{
+ {
+  boolean xxx = xxx instanceof <caret>
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/AllAssertClassesMethods.java b/java/java-tests/testData/codeInsight/completion/normal/AllAssertClassesMethods.java
new file mode 100644
index 0000000..b9b429b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/AllAssertClassesMethods.java
@@ -0,0 +1,5 @@
+class Foo {
+  {
+    if (Assert.<caret>)
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/AllAssertClassesMethods_after.java b/java/java-tests/testData/codeInsight/completion/normal/AllAssertClassesMethods_after.java
new file mode 100644
index 0000000..56571f2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/AllAssertClassesMethods_after.java
@@ -0,0 +1,7 @@
+import bar.Assert;
+
+class Foo {
+  {
+    if (Assert.bar()<caret>)
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/AllClassesOnSecondBasicCompletion.java b/java/java-tests/testData/codeInsight/completion/normal/AllClassesOnSecondBasicCompletion.java
new file mode 100644
index 0000000..78802e6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/AllClassesOnSecondBasicCompletion.java
@@ -0,0 +1,9 @@
+class AyByCyDyEy {}
+
+public class Foo {
+
+    {
+        ABCDE<caret>
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/AllClassesWhenNothingIsFound.java b/java/java-tests/testData/codeInsight/completion/normal/AllClassesWhenNothingIsFound.java
new file mode 100644
index 0000000..1caaf14
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/AllClassesWhenNothingIsFound.java
@@ -0,0 +1,7 @@
+public class Foo {
+
+    {
+        ABCDE<caret>
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/AllClassesWhenNothingIsFound_after.java b/java/java-tests/testData/codeInsight/completion/normal/AllClassesWhenNothingIsFound_after.java
new file mode 100644
index 0000000..6b77a5c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/AllClassesWhenNothingIsFound_after.java
@@ -0,0 +1,9 @@
+import foo.bar.AxBxCxDxEx;
+
+public class Foo {
+
+    {
+        AxBxCxDxEx<caret>
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/AnnoParameterValue.java b/java/java-tests/testData/codeInsight/completion/normal/AnnoParameterValue.java
new file mode 100644
index 0000000..656e6b8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/AnnoParameterValue.java
@@ -0,0 +1,3 @@
+public class Util {
+  @Foo(val=<caret>) void foo(String[] args) { }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/Annotation.java b/java/java-tests/testData/codeInsight/completion/normal/Annotation.java
new file mode 100644
index 0000000..0acecf2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/Annotation.java
@@ -0,0 +1,7 @@
+@interface MyAnnotation {
+  Object value();
+  String name();
+}
+
+@MyAnnotation(v<caret>) 
+class MyClass {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/Annotation2.java b/java/java-tests/testData/codeInsight/completion/normal/Annotation2.java
new file mode 100644
index 0000000..7784a2b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/Annotation2.java
@@ -0,0 +1,7 @@
+@interface MyAnnotation {
+  Object value();
+  String name();
+}
+
+@MyAnnotation(value = null, n<caret>) 
+class MyClass {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/Annotation2_after.java b/java/java-tests/testData/codeInsight/completion/normal/Annotation2_after.java
new file mode 100644
index 0000000..d9964ad
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/Annotation2_after.java
@@ -0,0 +1,7 @@
+@interface MyAnnotation {
+  Object value();
+  String name();
+}
+
+@MyAnnotation(value = null, name = <caret>) 
+class MyClass {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/Annotation3.java b/java/java-tests/testData/codeInsight/completion/normal/Annotation3.java
new file mode 100644
index 0000000..514b811
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/Annotation3.java
@@ -0,0 +1,6 @@
+@interface MyAnnotation {
+  Object value();
+}
+
+@My<caret> 
+class MyClass {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/Annotation3_after.java b/java/java-tests/testData/codeInsight/completion/normal/Annotation3_after.java
new file mode 100644
index 0000000..145a5a6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/Annotation3_after.java
@@ -0,0 +1,6 @@
+@interface MyAnnotation {
+  Object value();
+}
+
+@MyAnnotation(<caret>) 
+class MyClass {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/Annotation4.java b/java/java-tests/testData/codeInsight/completion/normal/Annotation4.java
new file mode 100644
index 0000000..5f9e8cd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/Annotation4.java
@@ -0,0 +1,16 @@
+enum Setup {
+  NONE,
+  CONNECTION
+}
+
+@Target(value = ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Test {
+  Setup setup();
+}
+
+public class Client {
+  @Test(setup = Setup.CO<caret>)
+  public void run() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/Annotation4_after.java b/java/java-tests/testData/codeInsight/completion/normal/Annotation4_after.java
new file mode 100644
index 0000000..a058ca4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/Annotation4_after.java
@@ -0,0 +1,16 @@
+enum Setup {
+  NONE,
+  CONNECTION
+}
+
+@Target(value = ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Test {
+  Setup setup();
+}
+
+public class Client {
+  @Test(setup = Setup.CONNECTION<caret>)
+  public void run() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/Annotation5.java b/java/java-tests/testData/codeInsight/completion/normal/Annotation5.java
new file mode 100644
index 0000000..62ebf57
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/Annotation5.java
@@ -0,0 +1,6 @@
+@interface MyAnnotation {
+  String documentation() default "";
+}
+
+@My<caret>
+class MyClass {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/Annotation5_after.java b/java/java-tests/testData/codeInsight/completion/normal/Annotation5_after.java
new file mode 100644
index 0000000..063bce3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/Annotation5_after.java
@@ -0,0 +1,6 @@
+@interface MyAnnotation {
+  String documentation() default "";
+}
+
+@MyAnnotation<caret>
+class MyClass {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/Annotation6.java b/java/java-tests/testData/codeInsight/completion/normal/Annotation6.java
new file mode 100644
index 0000000..f0adee2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/Annotation6.java
@@ -0,0 +1,7 @@
+@interface MyAnnotation {
+  int value();
+  String name();
+}
+
+@MyAnnotation(value = 0, n<caret>)
+class MyClass {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/Annotation6_after.java b/java/java-tests/testData/codeInsight/completion/normal/Annotation6_after.java
new file mode 100644
index 0000000..9b044a2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/Annotation6_after.java
@@ -0,0 +1,7 @@
+@interface MyAnnotation {
+  int value();
+  String name();
+}
+
+@MyAnnotation(value = 0, name = <caret>)
+class MyClass {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/Annotation7.java b/java/java-tests/testData/codeInsight/completion/normal/Annotation7.java
new file mode 100644
index 0000000..9a6c332
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/Annotation7.java
@@ -0,0 +1,6 @@
+@interface MyAnnotation {
+  Class value();
+}
+
+@MyAnnotation(<caret>A.class)
+class MyClass {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/Annotation7_after.java b/java/java-tests/testData/codeInsight/completion/normal/Annotation7_after.java
new file mode 100644
index 0000000..2dab0ed
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/Annotation7_after.java
@@ -0,0 +1,6 @@
+@interface MyAnnotation {
+  Class value();
+}
+
+@MyAnnotation(value = <caret>A.class)
+class MyClass {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/AnnotationAsUsualObject.java b/java/java-tests/testData/codeInsight/completion/normal/AnnotationAsUsualObject.java
new file mode 100644
index 0000000..5710dc4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/AnnotationAsUsualObject.java
@@ -0,0 +1,12 @@
+@interface MyAnno {
+  String xxx();
+  String yyy();
+}
+
+public class MyFirstTestClassFoo {
+
+    {
+       MyAn<caret>
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/AnnotationAsUsualObjectFromJavadoc.java b/java/java-tests/testData/codeInsight/completion/normal/AnnotationAsUsualObjectFromJavadoc.java
new file mode 100644
index 0000000..fac91e7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/AnnotationAsUsualObjectFromJavadoc.java
@@ -0,0 +1,10 @@
+@interface MyAnno {
+  String xxx();
+  String yyy();
+}
+
+/**
+* @see MyAn<caret>
+*/
+public class MyFirstTestClassFoo {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/AnnotationAsUsualObjectFromJavadoc_after.java b/java/java-tests/testData/codeInsight/completion/normal/AnnotationAsUsualObjectFromJavadoc_after.java
new file mode 100644
index 0000000..80f1979e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/AnnotationAsUsualObjectFromJavadoc_after.java
@@ -0,0 +1,10 @@
+@interface MyAnno {
+  String xxx();
+  String yyy();
+}
+
+/**
+* @see MyAnno<caret>
+*/
+public class MyFirstTestClassFoo {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/AnnotationAsUsualObjectInsideClass.java b/java/java-tests/testData/codeInsight/completion/normal/AnnotationAsUsualObjectInsideClass.java
new file mode 100644
index 0000000..e9d9415
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/AnnotationAsUsualObjectInsideClass.java
@@ -0,0 +1,10 @@
+@interface MyAnno {
+  String xxx();
+  String yyy();
+}
+
+public class MyFirstTestClassFoo {
+
+     MyAn<caret>
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/AnnotationAsUsualObjectInsideClass_after.java b/java/java-tests/testData/codeInsight/completion/normal/AnnotationAsUsualObjectInsideClass_after.java
new file mode 100644
index 0000000..8b65472
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/AnnotationAsUsualObjectInsideClass_after.java
@@ -0,0 +1,10 @@
+@interface MyAnno {
+  String xxx();
+  String yyy();
+}
+
+public class MyFirstTestClassFoo {
+
+     MyAnno<caret>
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/AnnotationAsUsualObject_after.java b/java/java-tests/testData/codeInsight/completion/normal/AnnotationAsUsualObject_after.java
new file mode 100644
index 0000000..fb05a3c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/AnnotationAsUsualObject_after.java
@@ -0,0 +1,12 @@
+@interface MyAnno {
+  String xxx();
+  String yyy();
+}
+
+public class MyFirstTestClassFoo {
+
+    {
+       MyAnno<caret>
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/AnnotationClassFromWithinAnnotation.java b/java/java-tests/testData/codeInsight/completion/normal/AnnotationClassFromWithinAnnotation.java
new file mode 100644
index 0000000..5a55cf8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/AnnotationClassFromWithinAnnotation.java
@@ -0,0 +1,8 @@
+public @interface Example {
+
+  public static final String FOO = "foo", BAR = "bar";
+
+  String value();
+}
+
+@Example(Exam<caret>)
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/AnnotationClassFromWithinAnnotation_after.java b/java/java-tests/testData/codeInsight/completion/normal/AnnotationClassFromWithinAnnotation_after.java
new file mode 100644
index 0000000..9a55237
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/AnnotationClassFromWithinAnnotation_after.java
@@ -0,0 +1,8 @@
+public @interface Example {
+
+  public static final String FOO = "foo", BAR = "bar";
+
+  String value();
+}
+
+@Example(Example<caret>)
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/AnnotationOnNothingParens.java b/java/java-tests/testData/codeInsight/completion/normal/AnnotationOnNothingParens.java
new file mode 100644
index 0000000..467b21e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/AnnotationOnNothingParens.java
@@ -0,0 +1,10 @@
+@interface MyAnno {
+  String xxx();
+  String yyy();
+}
+
+public class MyFirstTestClassFoo {
+
+    @MyAn<caret>
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/AnnotationOnNothingParens_after.java b/java/java-tests/testData/codeInsight/completion/normal/AnnotationOnNothingParens_after.java
new file mode 100644
index 0000000..0c9665e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/AnnotationOnNothingParens_after.java
@@ -0,0 +1,10 @@
+@interface MyAnno {
+  String xxx();
+  String yyy();
+}
+
+public class MyFirstTestClassFoo {
+
+    @MyAnno(<caret>)
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/AnnotationQualifiedName.java b/java/java-tests/testData/codeInsight/completion/normal/AnnotationQualifiedName.java
new file mode 100644
index 0000000..da06833
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/AnnotationQualifiedName.java
@@ -0,0 +1,3 @@
[email protected]<caret>
+class Foo {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/AnnotationQualifiedName_after.java b/java/java-tests/testData/codeInsight/completion/normal/AnnotationQualifiedName_after.java
new file mode 100644
index 0000000..a8b33eb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/AnnotationQualifiedName_after.java
@@ -0,0 +1,3 @@
[email protected].<caret>
+class Foo {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/AnnotationWithoutValueMethod.java b/java/java-tests/testData/codeInsight/completion/normal/AnnotationWithoutValueMethod.java
new file mode 100644
index 0000000..7cd7d4c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/AnnotationWithoutValueMethod.java
@@ -0,0 +1,7 @@
+@interface Anno {
+  String foo();
+  String bar();
+}
+
+@Anno(<caret>)
+class Foo {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/Annotation_after.java b/java/java-tests/testData/codeInsight/completion/normal/Annotation_after.java
new file mode 100644
index 0000000..d562ad3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/Annotation_after.java
@@ -0,0 +1,7 @@
+@interface MyAnnotation {
+  Object value();
+  String name();
+}
+
+@MyAnnotation(value = <caret>) 
+class MyClass {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/AnonymousProcess.java b/java/java-tests/testData/codeInsight/completion/normal/AnonymousProcess.java
new file mode 100644
index 0000000..9b5aa6c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/AnonymousProcess.java
@@ -0,0 +1,8 @@
+import java.util.*;
+
+public class Runner {
+  public static void main(String[] args) {
+    List<Process> src;
+    List<Process> dest = ListUtils.filter(src, new <caret>);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/AnonymousProcess_after.java b/java/java-tests/testData/codeInsight/completion/normal/AnonymousProcess_after.java
new file mode 100644
index 0000000..b532bc1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/AnonymousProcess_after.java
@@ -0,0 +1,13 @@
+import java.util.*;
+
+public class Runner {
+  public static void main(String[] args) {
+    List<Process> src;
+    List<Process> dest = ListUtils.filter(src, new Pred<Process>() {
+        @Override
+        public boolean predicate(Process elem) {
+            <selection><caret>return false;  //To change body of implemented methods use File | Settings | File Templates.</selection>
+        }
+    });
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/AnonymousTypeParameter.java b/java/java-tests/testData/codeInsight/completion/normal/AnonymousTypeParameter.java
new file mode 100644
index 0000000..5f3df45
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/AnonymousTypeParameter.java
@@ -0,0 +1,13 @@
+public class Util {
+
+  public static <T,V> List<V> map(@NotNull Function<T, V> mapping) { }
+
+  public Object[] getVariants() {
+    return map(new Function<Object, AIOO<caret>>() { }
+  }
+
+
+}
+interface Function<Param, Result> {
+  Result fun(Param param);
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/AnonymousTypeParameter_after.java b/java/java-tests/testData/codeInsight/completion/normal/AnonymousTypeParameter_after.java
new file mode 100644
index 0000000..a1f002b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/AnonymousTypeParameter_after.java
@@ -0,0 +1,13 @@
+public class Util {
+
+  public static <T,V> List<V> map(@NotNull Function<T, V> mapping) { }
+
+  public Object[] getVariants() {
+    return map(new Function<Object, ArrayIndexOutOfBoundsException<caret>>() { }
+  }
+
+
+}
+interface Function<Param, Result> {
+  Result fun(Param param);
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/AssigningFieldForTheFirstTime.java b/java/java-tests/testData/codeInsight/completion/normal/AssigningFieldForTheFirstTime.java
new file mode 100644
index 0000000..b853064
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/AssigningFieldForTheFirstTime.java
@@ -0,0 +1,6 @@
+class A {
+  final boolean aboo;
+  A() {
+    abo<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/AssigningFieldForTheFirstTime_after.java b/java/java-tests/testData/codeInsight/completion/normal/AssigningFieldForTheFirstTime_after.java
new file mode 100644
index 0000000..b355e70
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/AssigningFieldForTheFirstTime_after.java
@@ -0,0 +1,6 @@
+class A {
+  final boolean aboo;
+  A() {
+    aboo<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/AtUnderClass.java b/java/java-tests/testData/codeInsight/completion/normal/AtUnderClass.java
new file mode 100644
index 0000000..a1109c3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/AtUnderClass.java
@@ -0,0 +1,3 @@
+public class Main {
+@in<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/AtUnderClassNoModifiers.java b/java/java-tests/testData/codeInsight/completion/normal/AtUnderClassNoModifiers.java
new file mode 100644
index 0000000..db9766c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/AtUnderClassNoModifiers.java
@@ -0,0 +1,3 @@
+public class Main {
+@ab<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/AtUnderClassNoModifiers_after.java b/java/java-tests/testData/codeInsight/completion/normal/AtUnderClassNoModifiers_after.java
new file mode 100644
index 0000000..db9766c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/AtUnderClassNoModifiers_after.java
@@ -0,0 +1,3 @@
+public class Main {
+@ab<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/AtUnderClass_after.java b/java/java-tests/testData/codeInsight/completion/normal/AtUnderClass_after.java
new file mode 100644
index 0000000..f2c4c89
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/AtUnderClass_after.java
@@ -0,0 +1,3 @@
+public class Main {
+@interface <caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/BeforeInitialization.java b/java/java-tests/testData/codeInsight/completion/normal/BeforeInitialization.java
new file mode 100644
index 0000000..177c76b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/BeforeInitialization.java
@@ -0,0 +1,7 @@
+class A{
+{
+Integer i;
+i.<caret>
+i;
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/BooleanLiterals.java b/java/java-tests/testData/codeInsight/completion/normal/BooleanLiterals.java
new file mode 100644
index 0000000..ccc9ebb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/BooleanLiterals.java
@@ -0,0 +1,6 @@
+public class Main {
+
+  {
+    equals(tr<caret>)
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/BooleanLiterals_after.java b/java/java-tests/testData/codeInsight/completion/normal/BooleanLiterals_after.java
new file mode 100644
index 0000000..554e511
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/BooleanLiterals_after.java
@@ -0,0 +1,6 @@
+public class Main {
+
+  {
+    equals(true<caret>)
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/BreakInIfCondition.java b/java/java-tests/testData/codeInsight/completion/normal/BreakInIfCondition.java
new file mode 100644
index 0000000..b1cdf50
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/BreakInIfCondition.java
@@ -0,0 +1,6 @@
+public class Main {
+  {
+    while(true)
+      if (cond) br<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/BreakInIfCondition_after.java b/java/java-tests/testData/codeInsight/completion/normal/BreakInIfCondition_after.java
new file mode 100644
index 0000000..18da0c3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/BreakInIfCondition_after.java
@@ -0,0 +1,6 @@
+public class Main {
+  {
+    while(true)
+      if (cond) break;<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/BreakInSwitch.java b/java/java-tests/testData/codeInsight/completion/normal/BreakInSwitch.java
new file mode 100644
index 0000000..3d2d7bb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/BreakInSwitch.java
@@ -0,0 +1,9 @@
+public class ConstConfig {
+    {
+      switch (x) {
+        case 1:
+          println(1);
+          brea<caret>
+      }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/BreakInSwitch_after.java b/java/java-tests/testData/codeInsight/completion/normal/BreakInSwitch_after.java
new file mode 100644
index 0000000..f13293e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/BreakInSwitch_after.java
@@ -0,0 +1,9 @@
+public class ConstConfig {
+    {
+      switch (x) {
+        case 1:
+          println(1);
+          break;<caret>
+      }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/CaseTailType.java b/java/java-tests/testData/codeInsight/completion/normal/CaseTailType.java
new file mode 100644
index 0000000..7e4c8e9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/CaseTailType.java
@@ -0,0 +1,13 @@
+public class Foooo {
+
+    {
+        Xxx a;
+        switch (a) {
+            case F<caret>
+        }
+    }
+
+    enum Xxx {
+        FOO, BAR
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/CaseTailType_after.java b/java/java-tests/testData/codeInsight/completion/normal/CaseTailType_after.java
new file mode 100644
index 0000000..d018eea
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/CaseTailType_after.java
@@ -0,0 +1,13 @@
+public class Foooo {
+
+    {
+        Xxx a;
+        switch (a) {
+            case FOO:<caret>
+        }
+    }
+
+    enum Xxx {
+        FOO, BAR
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/CastComplexInstanceofedQualifier.java b/java/java-tests/testData/codeInsight/completion/normal/CastComplexInstanceofedQualifier.java
new file mode 100644
index 0000000..e1946e3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/CastComplexInstanceofedQualifier.java
@@ -0,0 +1,11 @@
+public class Aaaaaaa {
+
+    Object foo() {}
+
+    void bar() {
+        if (foo() instanceof String) {
+            foo().substr<caret>
+        }
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/CastComplexInstanceofedQualifier_after.java b/java/java-tests/testData/codeInsight/completion/normal/CastComplexInstanceofedQualifier_after.java
new file mode 100644
index 0000000..abcbca5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/CastComplexInstanceofedQualifier_after.java
@@ -0,0 +1,11 @@
+public class Aaaaaaa {
+
+    Object foo() {}
+
+    void bar() {
+        if (foo() instanceof String) {
+            ((String) foo()).substring(<caret>)
+        }
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/CastInstanceofedQualifier.java b/java/java-tests/testData/codeInsight/completion/normal/CastInstanceofedQualifier.java
new file mode 100644
index 0000000..6a5af6b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/CastInstanceofedQualifier.java
@@ -0,0 +1,10 @@
+public abstract class Zzza {
+
+    void foo(Object o) {
+      if (o instanceof String) {
+        o.substr<caret>
+      }
+    }
+
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/CastInstanceofedQualifierInForeach.java b/java/java-tests/testData/codeInsight/completion/normal/CastInstanceofedQualifierInForeach.java
new file mode 100644
index 0000000..9acf6a0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/CastInstanceofedQualifierInForeach.java
@@ -0,0 +1,12 @@
+public abstract class Zzza {
+
+    void foo(Object o) {
+      if (o instanceof String) {
+        for (java.lang.Object  : o.substr<caret>) {
+
+        }
+      }
+    }
+
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/CastInstanceofedQualifierInForeach_after.java b/java/java-tests/testData/codeInsight/completion/normal/CastInstanceofedQualifierInForeach_after.java
new file mode 100644
index 0000000..ef3755a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/CastInstanceofedQualifierInForeach_after.java
@@ -0,0 +1,12 @@
+public abstract class Zzza {
+
+    void foo(Object o) {
+      if (o instanceof String) {
+        for (java.lang.Object  : ((String) o).substring(<caret>)) {
+
+        }
+      }
+    }
+
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/CastInstanceofedQualifier_after.java b/java/java-tests/testData/codeInsight/completion/normal/CastInstanceofedQualifier_after.java
new file mode 100644
index 0000000..064fa79
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/CastInstanceofedQualifier_after.java
@@ -0,0 +1,10 @@
+public abstract class Zzza {
+
+    void foo(Object o) {
+      if (o instanceof String) {
+        ((String) o).substring(<caret>)
+      }
+    }
+
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/CastToPrimitive1.java b/java/java-tests/testData/codeInsight/completion/normal/CastToPrimitive1.java
new file mode 100644
index 0000000..ea6c607
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/CastToPrimitive1.java
@@ -0,0 +1,6 @@
+class A{
+  {
+    long zzz = 0;
+    int asd = (<caret>)zzz
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/CastToPrimitive2.java b/java/java-tests/testData/codeInsight/completion/normal/CastToPrimitive2.java
new file mode 100644
index 0000000..3476b09
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/CastToPrimitive2.java
@@ -0,0 +1,6 @@
+class A{
+  {
+    long zzz = 0;
+    int asd = (<caret>)
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/CastToPrimitive3.java b/java/java-tests/testData/codeInsight/completion/normal/CastToPrimitive3.java
new file mode 100644
index 0000000..a4867ab
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/CastToPrimitive3.java
@@ -0,0 +1,6 @@
+class A{
+  {
+    long zzz = 0;
+    int asd = (<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/CastTooComplexInstanceofedQualifier.java b/java/java-tests/testData/codeInsight/completion/normal/CastTooComplexInstanceofedQualifier.java
new file mode 100644
index 0000000..57e38b1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/CastTooComplexInstanceofedQualifier.java
@@ -0,0 +1,73 @@
+public class Aaaaaaa {
+
+    Object foo() {
+        return null;
+    }
+
+    Object foobar() {
+        return null;
+    }
+
+    void bar() {
+        try {
+
+            if (foo() instanceof String) {
+                //foo().s
+            }
+            try {
+                try {
+                    try {
+                        try {
+                            if (foobar() instanceof String) {
+                            }
+                          foobar().substr<caret>
+                        } finally {
+                            try {
+                                System.out.println("");
+                            } catch (Exception e) {
+                                System.out.println("");
+                            }
+                        }
+                    } finally {
+                        try {
+                            try {
+                                if (foo() instanceof String) {
+                                    System.out.println("");
+                                }
+                            } finally {
+                                try {
+                                    System.out.println("");
+                                } catch (Exception e) {
+                                    System.out.println("");
+                                }
+                            }
+
+                        } catch (Exception e) {
+                            System.out.println("");
+                        }
+                    }
+                } finally {
+                    try {
+                        System.out.println("");
+                    } catch (Exception e) {
+                        System.out.println("");
+                    }
+                }
+            } finally {
+                try {
+                    System.out.println("");
+                } catch (Exception e) {
+                    System.out.println("");
+                }
+            }
+
+        } finally {
+            try {
+                System.out.println("");
+            } catch (Exception e) {
+                System.out.println("");
+            }
+        }
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/CastVisually.java b/java/java-tests/testData/codeInsight/completion/normal/CastVisually.java
new file mode 100644
index 0000000..17d30a7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/CastVisually.java
@@ -0,0 +1,14 @@
+import java.lang.Object;
+
+class IFoo {
+  Object getValue() {}
+}
+
+class Foo extends IFoo {
+  Foo getValue() {}
+  void foo(IFoo o) {
+    if (o instanceof Foo) {
+      o.getv<caret>x
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ChainedCallOnNextLine.java b/java/java-tests/testData/codeInsight/completion/normal/ChainedCallOnNextLine.java
new file mode 100644
index 0000000..3ce9d27
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ChainedCallOnNextLine.java
@@ -0,0 +1,5 @@
+class Foo {
+    int a = new Foo().
+    t<caret>a().length(). .. 
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ChainedCallOnNextLine_after.java b/java/java-tests/testData/codeInsight/completion/normal/ChainedCallOnNextLine_after.java
new file mode 100644
index 0000000..d901331
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ChainedCallOnNextLine_after.java
@@ -0,0 +1,5 @@
+class Foo {
+    int a = new Foo().
+    toString()<caret>a().length(). .. 
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassAngleBracket.java b/java/java-tests/testData/codeInsight/completion/normal/ClassAngleBracket.java
new file mode 100644
index 0000000..89fff3a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassAngleBracket.java
@@ -0,0 +1,6 @@
+class AbcdClass {}
+class AbcdeClass {}
+
+class Foo {
+  Abcd<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassAngleBracket_after.java b/java/java-tests/testData/codeInsight/completion/normal/ClassAngleBracket_after.java
new file mode 100644
index 0000000..ab3dc84
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassAngleBracket_after.java
@@ -0,0 +1,6 @@
+class AbcdClass {}
+class AbcdeClass {}
+
+class Foo {
+  AbcdClass<<caret>>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassBeforeCast.java b/java/java-tests/testData/codeInsight/completion/normal/ClassBeforeCast.java
new file mode 100644
index 0000000..24c9369
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassBeforeCast.java
@@ -0,0 +1,6 @@
+public class Foo {
+    public static void fpp(Object o) {
+        FileInpSt<caret>
+        ((Object) o).notify();
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassBeforeCast_after.java b/java/java-tests/testData/codeInsight/completion/normal/ClassBeforeCast_after.java
new file mode 100644
index 0000000..5be44d8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassBeforeCast_after.java
@@ -0,0 +1,8 @@
+import java.io.FileInputStream;
+
+public class Foo {
+    public static void fpp(Object o) {
+        FileInputStream<caret>
+        ((Object) o).notify();
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassLiteralInAnnoParam.java b/java/java-tests/testData/codeInsight/completion/normal/ClassLiteralInAnnoParam.java
new file mode 100644
index 0000000..d50ada5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassLiteralInAnnoParam.java
@@ -0,0 +1,7 @@
+@Anno(String.cla<caret>)
+public class Main {
+}
+
+@interface Anno {
+  Class value();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassLiteralInAnnoParam_after.java b/java/java-tests/testData/codeInsight/completion/normal/ClassLiteralInAnnoParam_after.java
new file mode 100644
index 0000000..36d6b52
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassLiteralInAnnoParam_after.java
@@ -0,0 +1,7 @@
+@Anno(String.class<caret>)
+public class Main {
+}
+
+@interface Anno {
+  Class value();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassLiteralInArrayAnnoInitializer.java b/java/java-tests/testData/codeInsight/completion/normal/ClassLiteralInArrayAnnoInitializer.java
new file mode 100644
index 0000000..a52476d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassLiteralInArrayAnnoInitializer.java
@@ -0,0 +1,10 @@
+@interface TestFor {
+  Class[] testForClass();
+}
+
+class Foo {
+  @TestFor(testForClass = { Aaaaaa<caret> } )
+  public void foo22() {}
+}
+
+class Aaaaaaaaaaaaaaaaaaaaa {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassLiteralInArrayAnnoInitializer2.java b/java/java-tests/testData/codeInsight/completion/normal/ClassLiteralInArrayAnnoInitializer2.java
new file mode 100644
index 0000000..be571e4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassLiteralInArrayAnnoInitializer2.java
@@ -0,0 +1,10 @@
+@interface TestFor {
+  Class[] testForClass();
+}
+
+class Foo {
+  @TestFor(testForClass = { Object.class, Aaaaaa<caret> } )
+  public void foo22() {}
+}
+
+class Aaaaaaaaaaaaaaaaaaaaa {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassLiteralInArrayAnnoInitializer2_after.java b/java/java-tests/testData/codeInsight/completion/normal/ClassLiteralInArrayAnnoInitializer2_after.java
new file mode 100644
index 0000000..f957157
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassLiteralInArrayAnnoInitializer2_after.java
@@ -0,0 +1,10 @@
+@interface TestFor {
+  Class[] testForClass();
+}
+
+class Foo {
+  @TestFor(testForClass = { Object.class, Aaaaaaaaaaaaaaaaaaaaa<caret> } )
+  public void foo22() {}
+}
+
+class Aaaaaaaaaaaaaaaaaaaaa {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassLiteralInArrayAnnoInitializer_after.java b/java/java-tests/testData/codeInsight/completion/normal/ClassLiteralInArrayAnnoInitializer_after.java
new file mode 100644
index 0000000..6ab28d5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassLiteralInArrayAnnoInitializer_after.java
@@ -0,0 +1,10 @@
+@interface TestFor {
+  Class[] testForClass();
+}
+
+class Foo {
+  @TestFor(testForClass = { Aaaaaaaaaaaaaaaaaaaaa<caret> } )
+  public void foo22() {}
+}
+
+class Aaaaaaaaaaaaaaaaaaaaa {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassNameAnonymous.java b/java/java-tests/testData/codeInsight/completion/normal/ClassNameAnonymous.java
new file mode 100644
index 0000000..4496007
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassNameAnonymous.java
@@ -0,0 +1,9 @@
+class Foo {
+  {
+    Zzoo l = new Zz<caret>
+  }
+}
+
+interface Zzoo {
+  void run();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassNameAnonymous_after.java b/java/java-tests/testData/codeInsight/completion/normal/ClassNameAnonymous_after.java
new file mode 100644
index 0000000..4711434
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassNameAnonymous_after.java
@@ -0,0 +1,14 @@
+class Foo {
+  {
+    Zzoo l = new Zzoo() {
+        @Override
+        public void run() {
+            <selection>//To change body of implemented methods use File | Settings | File Templates.</selection>
+        }
+    }
+  }
+}
+
+interface Zzoo {
+  void run();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassNameDot.java b/java/java-tests/testData/codeInsight/completion/normal/ClassNameDot.java
new file mode 100644
index 0000000..9646474
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassNameDot.java
@@ -0,0 +1,5 @@
+class Foo {
+  {
+    FIStr<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassNameDotBeforeCall.java b/java/java-tests/testData/codeInsight/completion/normal/ClassNameDotBeforeCall.java
new file mode 100644
index 0000000..8f010e4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassNameDotBeforeCall.java
@@ -0,0 +1,7 @@
+public class Foo {
+  {
+      verify(runP4WithClient("integ", "main/...", "rel/..."));
+      FileInputStream.<caret>
+      verify(runP4WithClient("resolve", "-at"));
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassNameDotBeforeCall_after.java b/java/java-tests/testData/codeInsight/completion/normal/ClassNameDotBeforeCall_after.java
new file mode 100644
index 0000000..5c5258b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassNameDotBeforeCall_after.java
@@ -0,0 +1,9 @@
+import java.io.FileInputStream;
+
+public class Foo {
+  {
+      verify(runP4WithClient("integ", "main/...", "rel/..."));
+      FileInputStream.<caret>
+      verify(runP4WithClient("resolve", "-at"));
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassNameDot_after.java b/java/java-tests/testData/codeInsight/completion/normal/ClassNameDot_after.java
new file mode 100644
index 0000000..33dc577
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassNameDot_after.java
@@ -0,0 +1,7 @@
+import java.io.FileInputStream;
+
+class Foo {
+  {
+      FileInputStream.<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassNameGenerics.java b/java/java-tests/testData/codeInsight/completion/normal/ClassNameGenerics.java
new file mode 100644
index 0000000..6cd8c28
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassNameGenerics.java
@@ -0,0 +1,7 @@
+import java.util.List;
+
+class Foo {
+  {
+    List<String> l = new ArraLi<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassNameGenerics_after.java b/java/java-tests/testData/codeInsight/completion/normal/ClassNameGenerics_after.java
new file mode 100644
index 0000000..77077f6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassNameGenerics_after.java
@@ -0,0 +1,8 @@
+import java.util.ArrayList;
+import java.util.List;
+
+class Foo {
+  {
+    List<String> l = new ArrayList<String>(<caret>)
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassNameInIfBeforeIdentifier.java b/java/java-tests/testData/codeInsight/completion/normal/ClassNameInIfBeforeIdentifier.java
new file mode 100644
index 0000000..c1a436a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassNameInIfBeforeIdentifier.java
@@ -0,0 +1,7 @@
+class Xxx {
+  {
+    if (ABCDEF<caret>aaa.bbb()) {
+
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassNameInIfBeforeIdentifier_after.java b/java/java-tests/testData/codeInsight/completion/normal/ClassNameInIfBeforeIdentifier_after.java
new file mode 100644
index 0000000..adef7f8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassNameInIfBeforeIdentifier_after.java
@@ -0,0 +1,7 @@
+class Xxx {
+  {
+    if (ABCDEFFFFF<caret>aaa.bbb()) {
+
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassNameInsideIdentifierInIf.java b/java/java-tests/testData/codeInsight/completion/normal/ClassNameInsideIdentifierInIf.java
new file mode 100644
index 0000000..2637f89
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassNameInsideIdentifierInIf.java
@@ -0,0 +1,6 @@
+public class Bar {
+    {
+        if (2 != InpStrRea<caret>Aaa) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassNameInsideIdentifierInIf_after.java b/java/java-tests/testData/codeInsight/completion/normal/ClassNameInsideIdentifierInIf_after.java
new file mode 100644
index 0000000..6a0b1b1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassNameInsideIdentifierInIf_after.java
@@ -0,0 +1,8 @@
+import java.io.InputStreamReader;
+
+public class Bar {
+    {
+        if (2 != InputStreamReader<caret>Aaa) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithExistingParensAsQualifier.java b/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithExistingParensAsQualifier.java
new file mode 100644
index 0000000..e7ccb0c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithExistingParensAsQualifier.java
@@ -0,0 +1,5 @@
+public class FooBar {
+  {
+    new FooB<caret>().
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithExistingParensAsQualifier_after.java b/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithExistingParensAsQualifier_after.java
new file mode 100644
index 0000000..095a530
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithExistingParensAsQualifier_after.java
@@ -0,0 +1,5 @@
+public class FooBar {
+  {
+    new FooBar()<caret>.
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithGenericsTab.java b/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithGenericsTab.java
new file mode 100644
index 0000000..4f69a7e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithGenericsTab.java
@@ -0,0 +1,9 @@
+public class TestClass {
+
+    public TestClass create() {
+        final int value = 1;
+        return new Xx<caret>TexCompXxx<String>(value);
+    }
+}
+
+class Xxx { }
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithGenericsTab2.java b/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithGenericsTab2.java
new file mode 100644
index 0000000..20b2f66
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithGenericsTab2.java
@@ -0,0 +1,8 @@
+import java.util.ArrayList;
+import java.util.List;
+
+public class Foo {
+    public static void main(String[] args) {
+        List<Integer> set = new ArrayLis<caret>t<Integer>();
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithGenericsTab2_after.java b/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithGenericsTab2_after.java
new file mode 100644
index 0000000..afc79f2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithGenericsTab2_after.java
@@ -0,0 +1,8 @@
+import java.util.ArrayList;
+import java.util.List;
+
+public class Foo {
+    public static void main(String[] args) {
+        List<Integer> set = new ArrayList<Integer>(<caret>);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithGenericsTab_after.java b/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithGenericsTab_after.java
new file mode 100644
index 0000000..eb3de92
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithGenericsTab_after.java
@@ -0,0 +1,9 @@
+public class TestClass {
+
+    public TestClass create() {
+        final int value = 1;
+        return new Xxx<caret><String>(value);
+    }
+}
+
+class Xxx { }
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithInner.java b/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithInner.java
new file mode 100644
index 0000000..58913ee
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithInner.java
@@ -0,0 +1,11 @@
+class Foo {
+  {
+    Zzoo l = new Zz<caret>
+  }
+}
+
+interface Zzoo {
+  void run();
+
+  class Impl implements Zzoo {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithInner2.java b/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithInner2.java
new file mode 100644
index 0000000..c14c009
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithInner2.java
@@ -0,0 +1,11 @@
+class Foo {
+  {
+    Zzoo.Impl l = new Zz<caret>
+  }
+}
+
+interface Zzoo {
+  void run();
+
+  class Impl implements Zzoo {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithInner2_after.java b/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithInner2_after.java
new file mode 100644
index 0000000..4b592ed
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithInner2_after.java
@@ -0,0 +1,11 @@
+class Foo {
+  {
+    Zzoo.Impl l = new Zzoo.Impl()<caret>
+  }
+}
+
+interface Zzoo {
+  void run();
+
+  class Impl implements Zzoo {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithInner_after.java b/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithInner_after.java
new file mode 100644
index 0000000..1170812
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithInner_after.java
@@ -0,0 +1,16 @@
+class Foo {
+  {
+    Zzoo l = new Zzoo() {
+        @Override
+        public void run() {
+            <selection>//To change body of implemented methods use File | Settings | File Templates.</selection>
+        }
+    }
+  }
+}
+
+interface Zzoo {
+  void run();
+
+  class Impl implements Zzoo {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithInnersTab.java b/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithInnersTab.java
new file mode 100644
index 0000000..2c1cada
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithInnersTab.java
@@ -0,0 +1,16 @@
+public class TestClass {
+
+    public TestClass create() {
+        final int value = 1;
+        return new Xx<caret>TexCompXxx(value);
+    }
+}
+
+class Xxx {
+    private Xxx(String x) {
+    }
+
+    static class Yyy {
+
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithInnersTab_after.java b/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithInnersTab_after.java
new file mode 100644
index 0000000..868142c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithInnersTab_after.java
@@ -0,0 +1,16 @@
+public class TestClass {
+
+    public TestClass create() {
+        final int value = 1;
+        return new Xxx(<caret>value);
+    }
+}
+
+class Xxx {
+    private Xxx(String x) {
+    }
+
+    static class Yyy {
+
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithInstanceInner.java b/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithInstanceInner.java
new file mode 100644
index 0000000..ba8e6d1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithInstanceInner.java
@@ -0,0 +1,11 @@
+class Foo {
+  {
+    Zzoo l = new Zz<caret>
+  }
+}
+
+class Zzoo {
+  void run();
+
+  class Impl implements Zzoo {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithInstanceInner_after.java b/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithInstanceInner_after.java
new file mode 100644
index 0000000..2ee90df
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithInstanceInner_after.java
@@ -0,0 +1,11 @@
+class Foo {
+  {
+    Zzoo l = new Zzoo()<caret>
+  }
+}
+
+class Zzoo {
+  void run();
+
+  class Impl implements Zzoo {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassReferenceInFor.java b/java/java-tests/testData/codeInsight/completion/normal/ClassReferenceInFor.java
new file mode 100644
index 0000000..3916e23
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassReferenceInFor.java
@@ -0,0 +1,6 @@
+public class Zoo2 {
+    {
+        for (Stri<caret>child : dir.getChildren())
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassReferenceInFor2.java b/java/java-tests/testData/codeInsight/completion/normal/ClassReferenceInFor2.java
new file mode 100644
index 0000000..0f87000
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassReferenceInFor2.java
@@ -0,0 +1,6 @@
+public class Zoo2 {
+    {
+        for (Stri<caret> : dir.getChildren())
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassReferenceInFor2_after.java b/java/java-tests/testData/codeInsight/completion/normal/ClassReferenceInFor2_after.java
new file mode 100644
index 0000000..f403633
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassReferenceInFor2_after.java
@@ -0,0 +1,6 @@
+public class Zoo2 {
+    {
+        for (String <caret> : dir.getChildren())
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassReferenceInFor3.java b/java/java-tests/testData/codeInsight/completion/normal/ClassReferenceInFor3.java
new file mode 100644
index 0000000..9c33617
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassReferenceInFor3.java
@@ -0,0 +1,6 @@
+public class Zoo2 {
+    {
+        String string;
+        for (Stri<caret>)
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassReferenceInFor3_after.java b/java/java-tests/testData/codeInsight/completion/normal/ClassReferenceInFor3_after.java
new file mode 100644
index 0000000..71a9943
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassReferenceInFor3_after.java
@@ -0,0 +1,6 @@
+public class Zoo2 {
+    {
+        String string;
+        for (String <caret>)
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassReferenceInFor_after.java b/java/java-tests/testData/codeInsight/completion/normal/ClassReferenceInFor_after.java
new file mode 100644
index 0000000..e228e80
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassReferenceInFor_after.java
@@ -0,0 +1,6 @@
+public class Zoo2 {
+    {
+        for (String <caret>child : dir.getChildren())
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassSquareBracket.java b/java/java-tests/testData/codeInsight/completion/normal/ClassSquareBracket.java
new file mode 100644
index 0000000..89fff3a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassSquareBracket.java
@@ -0,0 +1,6 @@
+class AbcdClass {}
+class AbcdeClass {}
+
+class Foo {
+  Abcd<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassSquareBracket_after.java b/java/java-tests/testData/codeInsight/completion/normal/ClassSquareBracket_after.java
new file mode 100644
index 0000000..03944aa
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassSquareBracket_after.java
@@ -0,0 +1,6 @@
+class AbcdClass {}
+class AbcdeClass {}
+
+class Foo {
+  AbcdClass[<caret>]
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassTypeParameters.java b/java/java-tests/testData/codeInsight/completion/normal/ClassTypeParameters.java
new file mode 100644
index 0000000..5659211
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassTypeParameters.java
@@ -0,0 +1,3 @@
+class Koo {}
+public class FooMap<K,V> implements YourMapInterface<K<caret>, V> {
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassTypeParametersGenericBounds.java b/java/java-tests/testData/codeInsight/completion/normal/ClassTypeParametersGenericBounds.java
new file mode 100644
index 0000000..5e58f5d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ClassTypeParametersGenericBounds.java
@@ -0,0 +1,3 @@
+class Koo{}
+public class FooMap<K,V extends K<caret>> {
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/CommaAfterVariable.java b/java/java-tests/testData/codeInsight/completion/normal/CommaAfterVariable.java
new file mode 100644
index 0000000..49b48ce
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/CommaAfterVariable.java
@@ -0,0 +1,10 @@
+class AbcdClass {}
+class AbcdException extends Throwable {}
+
+class Foo {
+  {
+    int aaa;
+    int aab;
+    equals(aa<caret>)
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/CommaAfterVariable_after.java b/java/java-tests/testData/codeInsight/completion/normal/CommaAfterVariable_after.java
new file mode 100644
index 0000000..28d3b28
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/CommaAfterVariable_after.java
@@ -0,0 +1,10 @@
+class AbcdClass {}
+class AbcdException extends Throwable {}
+
+class Foo {
+  {
+    int aaa;
+    int aab;
+    equals(aaa, <caret>)
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/CompatibleInterfacesCast.java b/java/java-tests/testData/codeInsight/completion/normal/CompatibleInterfacesCast.java
new file mode 100644
index 0000000..68c89b2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/CompatibleInterfacesCast.java
@@ -0,0 +1,10 @@
+interface Foo { void foo(); }
+interface Bar { void bar(); }
+
+public class A {
+  void foo(Foo l) {
+    if (l instanceof Bar) {
+      l.<caret>
+    }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/CompletionInsideClassLiteral.java b/java/java-tests/testData/codeInsight/completion/normal/CompletionInsideClassLiteral.java
new file mode 100644
index 0000000..cf049db
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/CompletionInsideClassLiteral.java
@@ -0,0 +1,7 @@
+public class Xxx {
+
+    {
+        this.e<caret>Xxx.class;
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/CompletionInsideClassLiteral_after.java b/java/java-tests/testData/codeInsight/completion/normal/CompletionInsideClassLiteral_after.java
new file mode 100644
index 0000000..8f8d39b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/CompletionInsideClassLiteral_after.java
@@ -0,0 +1,7 @@
+public class Xxx {
+
+    {
+        this.equals(<caret>)Xxx.class;
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ConstantInAnno.java b/java/java-tests/testData/codeInsight/completion/normal/ConstantInAnno.java
new file mode 100644
index 0000000..6f6759f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ConstantInAnno.java
@@ -0,0 +1,8 @@
+public final class FileAttributes {
+  public static final int SYM_LINK = 0x01;
+  public static final int BROKEN_SYM_LINK = 0x02;
+  public static final int HIDDEN = 0x20;
+
+  @MagicConstant(flags = {SYM_LINK, BROK<caret>, HIDDEN})
+  public @interface Flags { }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ConstantInAnno_after.java b/java/java-tests/testData/codeInsight/completion/normal/ConstantInAnno_after.java
new file mode 100644
index 0000000..f889b8d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ConstantInAnno_after.java
@@ -0,0 +1,8 @@
+public final class FileAttributes {
+  public static final int SYM_LINK = 0x01;
+  public static final int BROKEN_SYM_LINK = 0x02;
+  public static final int HIDDEN = 0x20;
+
+  @MagicConstant(flags = {SYM_LINK, BROKEN_SYM_LINK<caret>, HIDDEN})
+  public @interface Flags { }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ConstructorName1.java b/java/java-tests/testData/codeInsight/completion/normal/ConstructorName1.java
new file mode 100644
index 0000000..0c5e783
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ConstructorName1.java
@@ -0,0 +1,3 @@
+class ABCDE{
+  public AB<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ConstructorName2.java b/java/java-tests/testData/codeInsight/completion/normal/ConstructorName2.java
new file mode 100644
index 0000000..af63b4c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ConstructorName2.java
@@ -0,0 +1,3 @@
+class ABCDE{
+  public AB<caret>(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ContinueLabel.java b/java/java-tests/testData/codeInsight/completion/normal/ContinueLabel.java
new file mode 100644
index 0000000..27341ba
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ContinueLabel.java
@@ -0,0 +1,7 @@
+public class Util {
+  void foo(int a, int b) {
+    Outer: for (int i = 0; i < 239; i++) {
+      conti<caret>
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ContinueLabel_after.java b/java/java-tests/testData/codeInsight/completion/normal/ContinueLabel_after.java
new file mode 100644
index 0000000..c1b9a66
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ContinueLabel_after.java
@@ -0,0 +1,7 @@
+public class Util {
+  void foo(int a, int b) {
+    Outer: for (int i = 0; i < 239; i++) {
+      continue <caret>
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/DefaultAnnoParam.java b/java/java-tests/testData/codeInsight/completion/normal/DefaultAnnoParam.java
new file mode 100644
index 0000000..8807a95
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/DefaultAnnoParam.java
@@ -0,0 +1,14 @@
+@interface Anno {
+  String value();
+}
+
+public class FooBar {
+    @Anno(FoB<caret>)
+    void m() {}
+
+    String FooBarrrrrr() {}
+
+    public static String FooBarrrr() {}
+
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/DefaultAnnoParam_after.java b/java/java-tests/testData/codeInsight/completion/normal/DefaultAnnoParam_after.java
new file mode 100644
index 0000000..09adc43
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/DefaultAnnoParam_after.java
@@ -0,0 +1,14 @@
+@interface Anno {
+  String value();
+}
+
+public class FooBar {
+    @Anno(FooBar<caret>)
+    void m() {}
+
+    String FooBarrrrrr() {}
+
+    public static String FooBarrrr() {}
+
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/DefaultInSwitch.java b/java/java-tests/testData/codeInsight/completion/normal/DefaultInSwitch.java
new file mode 100644
index 0000000..8bfb38e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/DefaultInSwitch.java
@@ -0,0 +1,9 @@
+public class ConstConfig {
+    {
+        switch (a) {
+            case Foooo: {}
+            def<caret>
+
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/DefaultInSwitch_after.java b/java/java-tests/testData/codeInsight/completion/normal/DefaultInSwitch_after.java
new file mode 100644
index 0000000..bbd0330
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/DefaultInSwitch_after.java
@@ -0,0 +1,9 @@
+public class ConstConfig {
+    {
+        switch (a) {
+            case Foooo: {}
+            default:<caret>
+
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/DoWhileMethodCall.java b/java/java-tests/testData/codeInsight/completion/normal/DoWhileMethodCall.java
new file mode 100644
index 0000000..785cd1a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/DoWhileMethodCall.java
@@ -0,0 +1,9 @@
+public class Foo {
+
+    {
+        do {
+
+        } while (toSt<caret>);
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/DoWhileMethodCall_after.java b/java/java-tests/testData/codeInsight/completion/normal/DoWhileMethodCall_after.java
new file mode 100644
index 0000000..3c159f7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/DoWhileMethodCall_after.java
@@ -0,0 +1,9 @@
+public class Foo {
+
+    {
+        do {
+
+        } while (toString()<caret>);
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/DontAutoInsertMiddleMatch.java b/java/java-tests/testData/codeInsight/completion/normal/DontAutoInsertMiddleMatch.java
new file mode 100644
index 0000000..9e4ac2e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/DontAutoInsertMiddleMatch.java
@@ -0,0 +1,5 @@
+public class A {
+  void foo(Foo myXxxxxxxxx) {
+    Xxxxx<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/DontAutoInsertMiddleMatch_after.java b/java/java-tests/testData/codeInsight/completion/normal/DontAutoInsertMiddleMatch_after.java
new file mode 100644
index 0000000..9e4ac2e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/DontAutoInsertMiddleMatch_after.java
@@ -0,0 +1,5 @@
+public class A {
+  void foo(Foo myXxxxxxxxx) {
+    Xxxxx<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/DontCastInstanceofedQualifier.java b/java/java-tests/testData/codeInsight/completion/normal/DontCastInstanceofedQualifier.java
new file mode 100644
index 0000000..27ff04e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/DontCastInstanceofedQualifier.java
@@ -0,0 +1,10 @@
+public abstract class Zzza {
+
+    void foo(Object o) {
+      if (o instanceof String) {
+        o.toStr<caret>
+      }
+    }
+
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/DontCastInstanceofedQualifier_after.java b/java/java-tests/testData/codeInsight/completion/normal/DontCastInstanceofedQualifier_after.java
new file mode 100644
index 0000000..c544898
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/DontCastInstanceofedQualifier_after.java
@@ -0,0 +1,10 @@
+public abstract class Zzza {
+
+    void foo(Object o) {
+      if (o instanceof String) {
+        o.toString()<caret>
+      }
+    }
+
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/DoubleBooleanInParameter.java b/java/java-tests/testData/codeInsight/completion/normal/DoubleBooleanInParameter.java
new file mode 100644
index 0000000..aa4a59a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/DoubleBooleanInParameter.java
@@ -0,0 +1,4 @@
+interface Foo {
+  void getGooBarDoo();
+    void bar(final b<caret>);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/DoubleConstant.java b/java/java-tests/testData/codeInsight/completion/normal/DoubleConstant.java
new file mode 100644
index 0000000..063c773
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/DoubleConstant.java
@@ -0,0 +1,8 @@
+interface Intf { Intf XFOO = null; }
+interface Intf2 extends Intf { Intf2 XFOO = null; }
+
+public class Bar implements Intf2 {
+  public static void fpp() {
+    XF<caret>x
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/DoubleExpectedTypeFactoryMethod.java b/java/java-tests/testData/codeInsight/completion/normal/DoubleExpectedTypeFactoryMethod.java
new file mode 100644
index 0000000..6b2f7dd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/DoubleExpectedTypeFactoryMethod.java
@@ -0,0 +1,11 @@
+class Zoo2 {
+    {
+        foo(Key<caret>, true);
+    }
+
+    <T> void foo(Key<T> f, T b) { }
+}
+
+class Key<T> {
+    static <T> Key<T> create() {} 
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/DoubleFalse.java b/java/java-tests/testData/codeInsight/completion/normal/DoubleFalse.java
new file mode 100644
index 0000000..eeae271
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/DoubleFalse.java
@@ -0,0 +1,13 @@
+public class Foo {
+
+    void bar() {
+        equals(new Object() {
+            boolean bar() {
+                return f<caret>
+            }
+        });
+    }
+
+  boolean fefefef() {}
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/DuplicateExpectedTypeInTypeArgumentList.java b/java/java-tests/testData/codeInsight/completion/normal/DuplicateExpectedTypeInTypeArgumentList.java
new file mode 100644
index 0000000..4cf2f4c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/DuplicateExpectedTypeInTypeArgumentList.java
@@ -0,0 +1,8 @@
+import java.util.*;
+import java.util.List;
+
+class Zoo {
+  {
+    List<String> l = new ArrayList<Stri<caret>>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/EnclosingThis.java b/java/java-tests/testData/codeInsight/completion/normal/EnclosingThis.java
new file mode 100644
index 0000000..5cf8136d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/EnclosingThis.java
@@ -0,0 +1,7 @@
+public class A {
+  public class B {
+    void m() {
+      A.thi<caret>
+    }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/EnclosingThis_after.java b/java/java-tests/testData/codeInsight/completion/normal/EnclosingThis_after.java
new file mode 100644
index 0000000..56ae376
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/EnclosingThis_after.java
@@ -0,0 +1,7 @@
+public class A {
+  public class B {
+    void m() {
+      A.this<caret>
+    }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/EnumConstantFromEnumMember.java b/java/java-tests/testData/codeInsight/completion/normal/EnumConstantFromEnumMember.java
new file mode 100644
index 0000000..c3503f0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/EnumConstantFromEnumMember.java
@@ -0,0 +1,6 @@
+public enum ButtonKey {
+  CANCEL_ALL,
+  CANCEL_SELL;
+
+  public static final ButtonKey[] ARR = {CANCEL_ALL, CANCEL_S<caret>};
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/EnumConstantFromEnumMember_after.java b/java/java-tests/testData/codeInsight/completion/normal/EnumConstantFromEnumMember_after.java
new file mode 100644
index 0000000..ec0e055
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/EnumConstantFromEnumMember_after.java
@@ -0,0 +1,6 @@
+public enum ButtonKey {
+  CANCEL_ALL,
+  CANCEL_SELL;
+
+  public static final ButtonKey[] ARR = {CANCEL_ALL, CANCEL_SELL<caret>};
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/EnumPrivateFinal.java b/java/java-tests/testData/codeInsight/completion/normal/EnumPrivateFinal.java
new file mode 100644
index 0000000..5ac67b9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/EnumPrivateFinal.java
@@ -0,0 +1,5 @@
+enum Goo {
+    a,b;
+
+    private fin<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/EnumPrivateFinal_after.java b/java/java-tests/testData/codeInsight/completion/normal/EnumPrivateFinal_after.java
new file mode 100644
index 0000000..30b4ad0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/EnumPrivateFinal_after.java
@@ -0,0 +1,5 @@
+enum Goo {
+    a,b;
+
+    private final <caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/EnumWithoutConstants.java b/java/java-tests/testData/codeInsight/completion/normal/EnumWithoutConstants.java
new file mode 100644
index 0000000..ea1066e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/EnumWithoutConstants.java
@@ -0,0 +1 @@
+public enum Foooooo { private Fooo<caret> }
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/EnumWithoutConstants_after.java b/java/java-tests/testData/codeInsight/completion/normal/EnumWithoutConstants_after.java
new file mode 100644
index 0000000..0aef69a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/EnumWithoutConstants_after.java
@@ -0,0 +1 @@
+public enum Foooooo { private Foooooo<caret> }
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ExcessSpaceInTypeCast.java b/java/java-tests/testData/codeInsight/completion/normal/ExcessSpaceInTypeCast.java
new file mode 100644
index 0000000..f7161f2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ExcessSpaceInTypeCast.java
@@ -0,0 +1,11 @@
+public class Main {
+    interface Account {}
+
+    public static void main(String[] args) {
+        java.util.List list;
+        for (int i = 0; i < list.size(); i++) {
+          Object o = (Acco<caret>list.get(i);
+          System.out.println(o);
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ExcessSpaceInTypeCast_after.java b/java/java-tests/testData/codeInsight/completion/normal/ExcessSpaceInTypeCast_after.java
new file mode 100644
index 0000000..db95bc7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ExcessSpaceInTypeCast_after.java
@@ -0,0 +1,11 @@
+public class Main {
+    interface Account {}
+
+    public static void main(String[] args) {
+        java.util.List list;
+        for (int i = 0; i < list.size(); i++) {
+          Object o = (Account<caret>list.get(i);
+          System.out.println(o);
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ExcludeInstanceInnerClasses.java b/java/java-tests/testData/codeInsight/completion/normal/ExcludeInstanceInnerClasses.java
new file mode 100644
index 0000000..c618ce6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ExcludeInstanceInnerClasses.java
@@ -0,0 +1,3 @@
+public class Main {
+  Inner<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ExcludeStringBuffer.java b/java/java-tests/testData/codeInsight/completion/normal/ExcludeStringBuffer.java
new file mode 100644
index 0000000..13c9bc3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ExcludeStringBuffer.java
@@ -0,0 +1,3 @@
+public class Main {
+  StringBuf<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ExcludedInstanceInnerClassCreation.java b/java/java-tests/testData/codeInsight/completion/normal/ExcludedInstanceInnerClassCreation.java
new file mode 100644
index 0000000..114b1f8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ExcludedInstanceInnerClassCreation.java
@@ -0,0 +1,6 @@
+public class Main {
+  void f(foo.Outer outer) {
+    outer.new In<caret>x
+  }
+  
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ExcludedInstanceInnerClassQualifiedReference.java b/java/java-tests/testData/codeInsight/completion/normal/ExcludedInstanceInnerClassQualifiedReference.java
new file mode 100644
index 0000000..83f6456
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ExcludedInstanceInnerClassQualifiedReference.java
@@ -0,0 +1,5 @@
+public class Main {
+  void f(foo.Outer.In<caret>x outer) {
+  }
+  
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ExpectedTypeMembersVersusStaticImports.java b/java/java-tests/testData/codeInsight/completion/normal/ExpectedTypeMembersVersusStaticImports.java
new file mode 100644
index 0000000..ec41469
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ExpectedTypeMembersVersusStaticImports.java
@@ -0,0 +1,12 @@
+import static Super.XFOO;
+
+class Super {
+    public static final Super XFOO = null;
+    public static final Super XFOX = true;
+}
+
+class Intermediate {
+    Super s = XFO<caret>
+}
+
+
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ExpectedTypesDotSelectsItem.java b/java/java-tests/testData/codeInsight/completion/normal/ExpectedTypesDotSelectsItem.java
new file mode 100644
index 0000000..154d4a1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ExpectedTypesDotSelectsItem.java
@@ -0,0 +1,14 @@
+class Super {
+    public static final Super FOO = null;
+}
+class Super2 {
+}
+
+class Intermediate {
+    void foo(Super s, int a) {}
+  void bar() {
+    foo(Su<caret>)
+  }
+}
+
+
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ExpectedTypesDotSelectsItem_after.java b/java/java-tests/testData/codeInsight/completion/normal/ExpectedTypesDotSelectsItem_after.java
new file mode 100644
index 0000000..b284b69
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ExpectedTypesDotSelectsItem_after.java
@@ -0,0 +1,14 @@
+class Super {
+    public static final Super FOO = null;
+}
+class Super2 {
+}
+
+class Intermediate {
+    void foo(Super s, int a) {}
+  void bar() {
+    foo(Super.<caret>)
+  }
+}
+
+
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ExtendsInTypeParams.java b/java/java-tests/testData/codeInsight/completion/normal/ExtendsInTypeParams.java
new file mode 100644
index 0000000..d7898103
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ExtendsInTypeParams.java
@@ -0,0 +1,8 @@
+class List<T> {}
+
+class Foo {
+
+  List<? e<caret>>
+  
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ExtendsInTypeParams_after.java b/java/java-tests/testData/codeInsight/completion/normal/ExtendsInTypeParams_after.java
new file mode 100644
index 0000000..68dc393
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ExtendsInTypeParams_after.java
@@ -0,0 +1,8 @@
+class List<T> {}
+
+class Foo {
+
+  List<? extends <caret>>
+  
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/FieldItemPresentationGenerics.java b/java/java-tests/testData/codeInsight/completion/normal/FieldItemPresentationGenerics.java
new file mode 100644
index 0000000..4ce6c88
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/FieldItemPresentationGenerics.java
@@ -0,0 +1,10 @@
+class Ref<T> {
+  T target;
+}
+
+class TestPoint2D {
+    void (Ref<String> r) {
+        r.<caret>
+
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/FieldNegation.java b/java/java-tests/testData/codeInsight/completion/normal/FieldNegation.java
new file mode 100644
index 0000000..7379f01
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/FieldNegation.java
@@ -0,0 +1,7 @@
+public class ConstConfig {
+  public static boolean testMode = false;
+    
+    {
+        if (test<caret>x)
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/FieldNegation_after.java b/java/java-tests/testData/codeInsight/completion/normal/FieldNegation_after.java
new file mode 100644
index 0000000..39e4af0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/FieldNegation_after.java
@@ -0,0 +1,7 @@
+public class ConstConfig {
+  public static boolean testMode = false;
+    
+    {
+        if (!testMode<caret>x)
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/FieldType.java b/java/java-tests/testData/codeInsight/completion/normal/FieldType.java
new file mode 100644
index 0000000..a2abc34
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/FieldType.java
@@ -0,0 +1,4 @@
+class A {
+    private lo<caret> localizedStringManager;
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/FieldType_after.java b/java/java-tests/testData/codeInsight/completion/normal/FieldType_after.java
new file mode 100644
index 0000000..172e9db
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/FieldType_after.java
@@ -0,0 +1,4 @@
+class A {
+    private long<caret> localizedStringManager;
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/FieldWithCastingCaret.java b/java/java-tests/testData/codeInsight/completion/normal/FieldWithCastingCaret.java
new file mode 100644
index 0000000..1fc4dfb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/FieldWithCastingCaret.java
@@ -0,0 +1,9 @@
+public class TestClass {
+    int abc;
+
+    public TestClass create(Object o) {
+        if (o instanceof TestClass) {
+            o.ab<caret>
+        }
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/FieldWithCastingCaret_after.java b/java/java-tests/testData/codeInsight/completion/normal/FieldWithCastingCaret_after.java
new file mode 100644
index 0000000..e19a12a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/FieldWithCastingCaret_after.java
@@ -0,0 +1,9 @@
+public class TestClass {
+    int abc;
+
+    public TestClass create(Object o) {
+        if (o instanceof TestClass) {
+            ((TestClass) o).abc<caret>
+        }
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/FinalBeforeMethodCall.java b/java/java-tests/testData/codeInsight/completion/normal/FinalBeforeMethodCall.java
new file mode 100644
index 0000000..c28c3b2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/FinalBeforeMethodCall.java
@@ -0,0 +1,5 @@
+class A {
+    A() {
+        fin<caret>this.toString();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/FinalInForLoop.java b/java/java-tests/testData/codeInsight/completion/normal/FinalInForLoop.java
new file mode 100644
index 0000000..14705a9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/FinalInForLoop.java
@@ -0,0 +1,7 @@
+public class Foooo {
+
+    {
+        for (fin<caret>x)
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/FinalInForLoop2.java b/java/java-tests/testData/codeInsight/completion/normal/FinalInForLoop2.java
new file mode 100644
index 0000000..41aefd1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/FinalInForLoop2.java
@@ -0,0 +1,9 @@
+import java.util.ArrayList;
+
+public class Foooo {
+
+    {
+        for (fin<caret> Object o : new ArrayList())
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/FinishClassNameWithDot.java b/java/java-tests/testData/codeInsight/completion/normal/FinishClassNameWithDot.java
new file mode 100644
index 0000000..b9d2e34
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/FinishClassNameWithDot.java
@@ -0,0 +1,7 @@
+public class MyFirstTestClassFoo {
+
+    {
+        MFT<caret>x
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/FinishClassNameWithDot_after.java b/java/java-tests/testData/codeInsight/completion/normal/FinishClassNameWithDot_after.java
new file mode 100644
index 0000000..6afaf75
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/FinishClassNameWithDot_after.java
@@ -0,0 +1,7 @@
+public class MyFirstTestClassFoo {
+
+    {
+        MyFirstTestClassFoo.<caret>x
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/FinishClassNameWithLParen.java b/java/java-tests/testData/codeInsight/completion/normal/FinishClassNameWithLParen.java
new file mode 100644
index 0000000..a67f782
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/FinishClassNameWithLParen.java
@@ -0,0 +1,3 @@
+public class Foo {
+  String s = new Strin<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/FinishClassNameWithLParen_after.java b/java/java-tests/testData/codeInsight/completion/normal/FinishClassNameWithLParen_after.java
new file mode 100644
index 0000000..4159960
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/FinishClassNameWithLParen_after.java
@@ -0,0 +1,3 @@
+public class Foo {
+  String s = new String(<caret>)
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/FinishWithDot.java b/java/java-tests/testData/codeInsight/completion/normal/FinishWithDot.java
new file mode 100644
index 0000000..c8169c2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/FinishWithDot.java
@@ -0,0 +1,7 @@
+class Foo {
+    int foo();
+
+    {
+      fo<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/FinishWithDot_after.java b/java/java-tests/testData/codeInsight/completion/normal/FinishWithDot_after.java
new file mode 100644
index 0000000..e802dcd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/FinishWithDot_after.java
@@ -0,0 +1,7 @@
+class Foo {
+    int foo();
+
+    {
+      foo().<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/GetterWithExistingNonEmptyParameterList.java b/java/java-tests/testData/codeInsight/completion/normal/GetterWithExistingNonEmptyParameterList.java
new file mode 100644
index 0000000..665e1c3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/GetterWithExistingNonEmptyParameterList.java
@@ -0,0 +1,7 @@
+public class MyFirstTestClassFoo {
+
+    {
+        getCl<caret>(abc)
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/GetterWithExistingNonEmptyParameterList_after.java b/java/java-tests/testData/codeInsight/completion/normal/GetterWithExistingNonEmptyParameterList_after.java
new file mode 100644
index 0000000..fa67b0b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/GetterWithExistingNonEmptyParameterList_after.java
@@ -0,0 +1,7 @@
+public class MyFirstTestClassFoo {
+
+    {
+        getClass<caret>(abc)
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/HonorUnderscoreInPrefix.java b/java/java-tests/testData/codeInsight/completion/normal/HonorUnderscoreInPrefix.java
new file mode 100644
index 0000000..7e73f21
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/HonorUnderscoreInPrefix.java
@@ -0,0 +1,10 @@
+public class Quetzalcoatl {
+  public static final String FOO_BAR;
+  public static final String FOO_CHAR;
+}
+
+public class Beda {
+    {
+      Quetzalcoatl.F_B<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/HonorUnderscoreInPrefix_after.java b/java/java-tests/testData/codeInsight/completion/normal/HonorUnderscoreInPrefix_after.java
new file mode 100644
index 0000000..87b69f1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/HonorUnderscoreInPrefix_after.java
@@ -0,0 +1,10 @@
+public class Quetzalcoatl {
+  public static final String FOO_BAR;
+  public static final String FOO_CHAR;
+}
+
+public class Beda {
+    {
+      Quetzalcoatl.FOO_BAR<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/IDEADEV6408.java b/java/java-tests/testData/codeInsight/completion/normal/IDEADEV6408.java
new file mode 100644
index 0000000..0cb057e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/IDEADEV6408.java
@@ -0,0 +1,8 @@
+class DoubleTypeCompletion {
+
+    private final b<caret>
+
+    DoubleTypeCompletion(boolean result) {
+
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ImportInGenericType.java b/java/java-tests/testData/codeInsight/completion/normal/ImportInGenericType.java
new file mode 100644
index 0000000..07c2a4b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ImportInGenericType.java
@@ -0,0 +1,5 @@
+public class Foo {
+    public static void main(String[] args) {
+        Set<caret><Integer>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ImportInGenericType_after.java b/java/java-tests/testData/codeInsight/completion/normal/ImportInGenericType_after.java
new file mode 100644
index 0000000..3303a67
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ImportInGenericType_after.java
@@ -0,0 +1,7 @@
+import java.util.Set;
+
+public class Foo {
+    public static void main(String[] args) {
+        Set<caret><Integer>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ImportStringValue.java b/java/java-tests/testData/codeInsight/completion/normal/ImportStringValue.java
new file mode 100644
index 0000000..ec32798
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ImportStringValue.java
@@ -0,0 +1,5 @@
+public class Bar {
+    {
+        StringValu<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ImportStringValue_after.java b/java/java-tests/testData/codeInsight/completion/normal/ImportStringValue_after.java
new file mode 100644
index 0000000..ff82072
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ImportStringValue_after.java
@@ -0,0 +1,7 @@
+import foo.*;
+
+public class Bar {
+    {
+        StringValue <caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/InThrowsCompletion.java b/java/java-tests/testData/codeInsight/completion/normal/InThrowsCompletion.java
new file mode 100644
index 0000000..61ac207
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/InThrowsCompletion.java
@@ -0,0 +1,5 @@
+class A{
+ public class B{}
+ public class C extends Exception{}
+ public int method() throws <caret>
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/IncNull.java b/java/java-tests/testData/codeInsight/completion/normal/IncNull.java
new file mode 100644
index 0000000..bc5d0c2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/IncNull.java
@@ -0,0 +1,5 @@
+class Foo {
+    {
+        ++nul<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/InnerChainedReturnType.java b/java/java-tests/testData/codeInsight/completion/normal/InnerChainedReturnType.java
new file mode 100644
index 0000000..ec09acc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/InnerChainedReturnType.java
@@ -0,0 +1,9 @@
+public class Bar3 {
+
+  protected abstract Response.Stat<caret>
+}
+class Goo {
+  public static class Response {
+    public enum Status {}
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/InnerChainedReturnTypeInAnonymous.java b/java/java-tests/testData/codeInsight/completion/normal/InnerChainedReturnTypeInAnonymous.java
new file mode 100644
index 0000000..a2cba0f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/InnerChainedReturnTypeInAnonymous.java
@@ -0,0 +1,12 @@
+public class Bar3 {
+  {
+    new Runnable() {
+      protected abstract Response.Statu<caret>
+    }
+  }
+}
+class Goo {
+  public static class Response {
+    public enum Status {}
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/InnerChainedReturnTypeInAnonymous_after.java b/java/java-tests/testData/codeInsight/completion/normal/InnerChainedReturnTypeInAnonymous_after.java
new file mode 100644
index 0000000..03c2503f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/InnerChainedReturnTypeInAnonymous_after.java
@@ -0,0 +1,12 @@
+public class Bar3 {
+  {
+    new Runnable() {
+      protected abstract Goo.Response.Status<caret>
+    }
+  }
+}
+class Goo {
+  public static class Response {
+    public enum Status {}
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/InnerChainedReturnType_after.java b/java/java-tests/testData/codeInsight/completion/normal/InnerChainedReturnType_after.java
new file mode 100644
index 0000000..9b33908
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/InnerChainedReturnType_after.java
@@ -0,0 +1,9 @@
+public class Bar3 {
+
+  protected abstract Goo.Response.Status<caret>
+}
+class Goo {
+  public static class Response {
+    public enum Status {}
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/InnerEnumConstant.java b/java/java-tests/testData/codeInsight/completion/normal/InnerEnumConstant.java
new file mode 100644
index 0000000..4b557c2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/InnerEnumConstant.java
@@ -0,0 +1,9 @@
+class Foo {
+    {
+        Bar b = FOOOO<caret>
+    }
+
+    enum Bar {
+        FOOOOOOO
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/InnerEnumConstant_after.java b/java/java-tests/testData/codeInsight/completion/normal/InnerEnumConstant_after.java
new file mode 100644
index 0000000..94b578f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/InnerEnumConstant_after.java
@@ -0,0 +1,9 @@
+class Foo {
+    {
+        Bar b = Bar.FOOOOOOO<caret>
+    }
+
+    enum Bar {
+        FOOOOOOO
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/InstanceMagicMethod.java b/java/java-tests/testData/codeInsight/completion/normal/InstanceMagicMethod.java
new file mode 100644
index 0000000..0f2880c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/InstanceMagicMethod.java
@@ -0,0 +1,7 @@
+public class JavaClass {
+  <T> T magic() {}
+
+  void foo() {
+    mag<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/InstanceMagicMethod_after.java b/java/java-tests/testData/codeInsight/completion/normal/InstanceMagicMethod_after.java
new file mode 100644
index 0000000..4ebc59a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/InstanceMagicMethod_after.java
@@ -0,0 +1,7 @@
+public class JavaClass {
+  <T> T magic() {}
+
+  void foo() {
+    magic()<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/InterfaceImplementationNoCast.java b/java/java-tests/testData/codeInsight/completion/normal/InterfaceImplementationNoCast.java
new file mode 100644
index 0000000..5f34269
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/InterfaceImplementationNoCast.java
@@ -0,0 +1,18 @@
+public class Util2 {
+  void foo(XmlAttribute o ) {
+    if (o instanceof XmlAttributeImpl) {
+      o.getpar<caret>
+    }
+  }
+}
+
+interface PsiElement {
+  PsiElement getParent();
+}
+interface XmlAttribute extends PsiElement {}
+class XmlAttributeImpl implements XmlAttribute {
+  @Override
+  public PsiElement getParent() {
+    return null;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/InterfaceImplementationNoCast_after.java b/java/java-tests/testData/codeInsight/completion/normal/InterfaceImplementationNoCast_after.java
new file mode 100644
index 0000000..94718ee
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/InterfaceImplementationNoCast_after.java
@@ -0,0 +1,18 @@
+public class Util2 {
+  void foo(XmlAttribute o ) {
+    if (o instanceof XmlAttributeImpl) {
+      o.getParent()<caret>
+    }
+  }
+}
+
+interface PsiElement {
+  PsiElement getParent();
+}
+interface XmlAttribute extends PsiElement {}
+class XmlAttributeImpl implements XmlAttribute {
+  @Override
+  public PsiElement getParent() {
+    return null;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/IntersectionTypeMembers.java b/java/java-tests/testData/codeInsight/completion/normal/IntersectionTypeMembers.java
new file mode 100644
index 0000000..7a77c2d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/IntersectionTypeMembers.java
@@ -0,0 +1,18 @@
+interface IA{
+    void fooa();
+}
+
+interface IB{
+    void foob();
+}
+
+interface IC<T extends IA>{
+    T c();
+}
+
+class K {
+    void foo(IC<? extends IB> x){
+        x.c().fo<caret>
+
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/KeywordSmartEnter.java b/java/java-tests/testData/codeInsight/completion/normal/KeywordSmartEnter.java
new file mode 100644
index 0000000..92d0eb2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/KeywordSmartEnter.java
@@ -0,0 +1,6 @@
+public class Bar {
+    {
+        String nullity = "";
+        if (this != nul<caret>)
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/KeywordSmartEnter_after.java b/java/java-tests/testData/codeInsight/completion/normal/KeywordSmartEnter_after.java
new file mode 100644
index 0000000..701335c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/KeywordSmartEnter_after.java
@@ -0,0 +1,8 @@
+public class Bar {
+    {
+        String nullity = "";
+        if (this != null) {
+            <caret>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/KeywordsInName.java b/java/java-tests/testData/codeInsight/completion/normal/KeywordsInName.java
new file mode 100644
index 0000000..08418548
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/KeywordsInName.java
@@ -0,0 +1,4 @@
+class A{
+    A nullA = new A();
+    A x = null<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/KeywordsInName_after.java b/java/java-tests/testData/codeInsight/completion/normal/KeywordsInName_after.java
new file mode 100644
index 0000000..9fd630c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/KeywordsInName_after.java
@@ -0,0 +1,4 @@
+class A{
+    A nullA = new A();
+    A x = nullA<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/LastExpressionInFor.java b/java/java-tests/testData/codeInsight/completion/normal/LastExpressionInFor.java
new file mode 100644
index 0000000..5495ac62
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/LastExpressionInFor.java
@@ -0,0 +1,8 @@
+public class Main {
+  Main getParent() {}
+
+  {
+    Main v;
+    for (;;v.getPa<caret>)
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/LastExpressionInFor_after.java b/java/java-tests/testData/codeInsight/completion/normal/LastExpressionInFor_after.java
new file mode 100644
index 0000000..12fbf80
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/LastExpressionInFor_after.java
@@ -0,0 +1,8 @@
+public class Main {
+  Main getParent() {}
+
+  {
+    Main v;
+    for (;;v.getParent()<caret>)
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ListArrayListCast.java b/java/java-tests/testData/codeInsight/completion/normal/ListArrayListCast.java
new file mode 100644
index 0000000..d559cf0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ListArrayListCast.java
@@ -0,0 +1,10 @@
+import java.util.List;
+import java.util.ArrayList;
+
+public class A {
+  void foo(List<String> l) {
+    if (l instanceof ArrayList) {
+      l.ge<caret>
+    }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ListArrayListCast_after.java b/java/java-tests/testData/codeInsight/completion/normal/ListArrayListCast_after.java
new file mode 100644
index 0000000..7c4d5a7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ListArrayListCast_after.java
@@ -0,0 +1,10 @@
+import java.util.List;
+import java.util.ArrayList;
+
+public class A {
+  void foo(List<String> l) {
+    if (l instanceof ArrayList) {
+      l.get(<caret>)
+    }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/LiveTemplatePrefixTab.java b/java/java-tests/testData/codeInsight/completion/normal/LiveTemplatePrefixTab.java
new file mode 100644
index 0000000..ee788e7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/LiveTemplatePrefixTab.java
@@ -0,0 +1,7 @@
+class Xxx {
+  {
+    int iteraaa;
+    int iterbbb;
+    iter<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/LiveTemplatePrefixTab_after.java b/java/java-tests/testData/codeInsight/completion/normal/LiveTemplatePrefixTab_after.java
new file mode 100644
index 0000000..2e1d704
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/LiveTemplatePrefixTab_after.java
@@ -0,0 +1,7 @@
+class Xxx {
+  {
+    int iteraaa;
+    int iterbbb;
+    iteraaa<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/LocalClassName.java b/java/java-tests/testData/codeInsight/completion/normal/LocalClassName.java
new file mode 100644
index 0000000..d2a3886
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/LocalClassName.java
@@ -0,0 +1,6 @@
+public class FooMap<K,V extends K> implements YourMapInterface<K, V> {
+  void foo() {
+    class Zoooooooo {}
+    Zoo<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/LocalClassName_after.java b/java/java-tests/testData/codeInsight/completion/normal/LocalClassName_after.java
new file mode 100644
index 0000000..82b2d2e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/LocalClassName_after.java
@@ -0,0 +1,6 @@
+public class FooMap<K,V extends K> implements YourMapInterface<K, V> {
+  void foo() {
+    class Zoooooooo {}
+    Zoooooooo<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/LocalClassTwice.java b/java/java-tests/testData/codeInsight/completion/normal/LocalClassTwice.java
new file mode 100644
index 0000000..3396c28
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/LocalClassTwice.java
@@ -0,0 +1,7 @@
+class Zooooo {}
+public class FooMap<K,V extends K> implements YourMapInterface<K, V> {
+  void foo() {
+    class Zoooz implements Runnable {}
+    Runnable r = new Zo<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/LocalTopLevelConflict.java b/java/java-tests/testData/codeInsight/completion/normal/LocalTopLevelConflict.java
new file mode 100644
index 0000000..daa47c1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/LocalTopLevelConflict.java
@@ -0,0 +1,8 @@
+class Zoooz {}
+class Zooooo {}
+public class FooMap<K,V extends K> implements YourMapInterface<K, V> {
+  void foo() {
+    class Zoooz implements Runnable {}
+    Runnable r = new Zo<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/MapsInvalidation.java b/java/java-tests/testData/codeInsight/completion/normal/MapsInvalidation.java
new file mode 100644
index 0000000..2978171
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/MapsInvalidation.java
@@ -0,0 +1,12 @@
+class Foo extends Super {
+  int aaa;
+  int bbb;
+
+    public int g<caret>oo() {
+    }
+}
+
+class Super {
+    public int goo() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/MembersInStaticImports.java b/java/java-tests/testData/codeInsight/completion/normal/MembersInStaticImports.java
new file mode 100644
index 0000000..b6ea497
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/MembersInStaticImports.java
@@ -0,0 +1,2 @@
+import static java.util.Collections.emptySe<caret>
+class A {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/MembersInStaticImports_after.java b/java/java-tests/testData/codeInsight/completion/normal/MembersInStaticImports_after.java
new file mode 100644
index 0000000..65fcbea
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/MembersInStaticImports_after.java
@@ -0,0 +1,2 @@
+import static java.util.Collections.emptySet<caret>
+class A {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/MethodColon.java b/java/java-tests/testData/codeInsight/completion/normal/MethodColon.java
new file mode 100644
index 0000000..8799074
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/MethodColon.java
@@ -0,0 +1,8 @@
+class Bar {
+  int zoooa() {}
+  int zooob() {}
+
+  int foo() {
+    return true ? zoo<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/MethodColon_after.java b/java/java-tests/testData/codeInsight/completion/normal/MethodColon_after.java
new file mode 100644
index 0000000..15c1334
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/MethodColon_after.java
@@ -0,0 +1,8 @@
+class Bar {
+  int zoooa() {}
+  int zooob() {}
+
+  int foo() {
+    return true ? zoooa() : <caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/MethodItemPresentation.java b/java/java-tests/testData/codeInsight/completion/normal/MethodItemPresentation.java
new file mode 100644
index 0000000..e18a8fa
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/MethodItemPresentation.java
@@ -0,0 +1,5 @@
+class Foo {
+  {
+    "".equals<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/MethodItemPresentationGenerics.java b/java/java-tests/testData/codeInsight/completion/normal/MethodItemPresentationGenerics.java
new file mode 100644
index 0000000..01242a5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/MethodItemPresentationGenerics.java
@@ -0,0 +1,8 @@
+import java.util.ArrayList;
+
+class TestPoint2D {
+    {
+        new ArrayList<String>().ad<caret>
+
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/MethodLookup.java b/java/java-tests/testData/codeInsight/completion/normal/MethodLookup.java
new file mode 100644
index 0000000..7c96cab
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/MethodLookup.java
@@ -0,0 +1,17 @@
+class B {
+    void setA(int i) {}
+    void setB(int i) {}
+  }
+
+  class C {
+    B b;
+  }
+
+  class A {
+
+  C c;
+
+  A() {
+    c.b.set<caret>A();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/MethodLookup2.java b/java/java-tests/testData/codeInsight/completion/normal/MethodLookup2.java
new file mode 100644
index 0000000..ab0bf23
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/MethodLookup2.java
@@ -0,0 +1,7 @@
+class A {
+  int getAAA(int param) { return 0; }
+  public void actionPerformed(A a) {
+    a.getAA<caret>
+    ((A)a).actionPerformed(this);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/MethodLookup2_After.java b/java/java-tests/testData/codeInsight/completion/normal/MethodLookup2_After.java
new file mode 100644
index 0000000..81c26a7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/MethodLookup2_After.java
@@ -0,0 +1,7 @@
+class A {
+  int getAAA(int param) { return 0; }
+  public void actionPerformed(A a) {
+    a.getAAA(<caret>)
+    ((A)a).actionPerformed(this);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/MethodLookup2_After2.java b/java/java-tests/testData/codeInsight/completion/normal/MethodLookup2_After2.java
new file mode 100644
index 0000000..d123399
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/MethodLookup2_After2.java
@@ -0,0 +1,7 @@
+class A {
+  int getAAA(int param) { return 0; }
+  public void actionPerformed(A a) {
+    a.getAAA
+    (<caret>(A)a).actionPerformed(this);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/MethodLookup3.java b/java/java-tests/testData/codeInsight/completion/normal/MethodLookup3.java
new file mode 100644
index 0000000..4ee8278
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/MethodLookup3.java
@@ -0,0 +1,6 @@
+class A {
+  void getAAA(int param) { return 0; }
+  public void actionPerformed(A a) {
+    a.getAA<caret>zzz(239);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/MethodLookup3_After.java b/java/java-tests/testData/codeInsight/completion/normal/MethodLookup3_After.java
new file mode 100644
index 0000000..91d76b5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/MethodLookup3_After.java
@@ -0,0 +1,6 @@
+class A {
+  void getAAA(int param) { return 0; }
+  public void actionPerformed(A a) {
+    a.getAAA(<caret>239);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/MethodNoPairBrace.java b/java/java-tests/testData/codeInsight/completion/normal/MethodNoPairBrace.java
new file mode 100644
index 0000000..0403bf2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/MethodNoPairBrace.java
@@ -0,0 +1,8 @@
+class MyClass {
+
+void foo() {}
+
+{
+  fo<caret>
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/MethodNoPairBrace_after.java b/java/java-tests/testData/codeInsight/completion/normal/MethodNoPairBrace_after.java
new file mode 100644
index 0000000..c976d92
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/MethodNoPairBrace_after.java
@@ -0,0 +1,8 @@
+class MyClass {
+
+void foo() {}
+
+{
+  foo(<caret>
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/MethodParameterAnnotationClass.java b/java/java-tests/testData/codeInsight/completion/normal/MethodParameterAnnotationClass.java
new file mode 100644
index 0000000..6180c62
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/MethodParameterAnnotationClass.java
@@ -0,0 +1,3 @@
+public class Foo {
+  Object foo(@Deprecated(Foo.c<caret>)){ }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/MethodParameterAnnotationClass_after.java b/java/java-tests/testData/codeInsight/completion/normal/MethodParameterAnnotationClass_after.java
new file mode 100644
index 0000000..2254a08
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/MethodParameterAnnotationClass_after.java
@@ -0,0 +1,3 @@
+public class Foo {
+  Object foo(@Deprecated(Foo.class<caret>)){ }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/MethodParameterTypeDot.java b/java/java-tests/testData/codeInsight/completion/normal/MethodParameterTypeDot.java
new file mode 100644
index 0000000..3ae791c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/MethodParameterTypeDot.java
@@ -0,0 +1,4 @@
+public class Driver {
+
+    void main(String.<caret> args) { }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/MethodParenthesesSpaces.java b/java/java-tests/testData/codeInsight/completion/normal/MethodParenthesesSpaces.java
new file mode 100644
index 0000000..9d30950
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/MethodParenthesesSpaces.java
@@ -0,0 +1,8 @@
+public class Bar {
+    {
+        foo ( ba<caret> )
+    }
+
+    void foo(int x) {}
+    int bar() {}
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/MethodParenthesesSpacesArgs.java b/java/java-tests/testData/codeInsight/completion/normal/MethodParenthesesSpacesArgs.java
new file mode 100644
index 0000000..8256d51
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/MethodParenthesesSpacesArgs.java
@@ -0,0 +1,8 @@
+public class Bar {
+    {
+        foo ( ba<caret> )
+    }
+
+    void foo(int x) {}
+    int bar(int x) {}
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/MethodParenthesesSpacesArgs_after.java b/java/java-tests/testData/codeInsight/completion/normal/MethodParenthesesSpacesArgs_after.java
new file mode 100644
index 0000000..0726bf4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/MethodParenthesesSpacesArgs_after.java
@@ -0,0 +1,8 @@
+public class Bar {
+    {
+        foo ( bar ( <caret> ) )
+    }
+
+    void foo(int x) {}
+    int bar(int x) {}
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/MethodParenthesesSpaces_after.java b/java/java-tests/testData/codeInsight/completion/normal/MethodParenthesesSpaces_after.java
new file mode 100644
index 0000000..d226fb4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/MethodParenthesesSpaces_after.java
@@ -0,0 +1,8 @@
+public class Bar {
+    {
+        foo ( bar ()<caret> )
+    }
+
+    void foo(int x) {}
+    int bar() {}
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/MethodReferenceCallContext.java b/java/java-tests/testData/codeInsight/completion/normal/MethodReferenceCallContext.java
new file mode 100644
index 0000000..a2c7cf4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/MethodReferenceCallContext.java
@@ -0,0 +1,9 @@
+import java.util.*;
+
+class Test {
+    void aaa(Test p) { return 1; }
+    void test() {
+        c(Test::<caret>);
+    }
+    void c(Comparator<Test> c){}
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/MethodReferenceCallContext_after.java b/java/java-tests/testData/codeInsight/completion/normal/MethodReferenceCallContext_after.java
new file mode 100644
index 0000000..bd2ff8a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/MethodReferenceCallContext_after.java
@@ -0,0 +1,9 @@
+import java.util.*;
+
+class Test {
+    void aaa(Test p) { return 1; }
+    void test() {
+        c(Test::c);
+    }
+    void c(Comparator<Test> c){}
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/MethodReferenceNoStatic.java b/java/java-tests/testData/codeInsight/completion/normal/MethodReferenceNoStatic.java
new file mode 100644
index 0000000..e79f79c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/MethodReferenceNoStatic.java
@@ -0,0 +1,8 @@
+import java.util.*;
+
+class Test {
+    void aaa(Test p) { return 1; }
+    void test() {
+        Comparator<Test> r2 = Test::<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/MethodReferenceNoStatic_after.java b/java/java-tests/testData/codeInsight/completion/normal/MethodReferenceNoStatic_after.java
new file mode 100644
index 0000000..2680fa9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/MethodReferenceNoStatic_after.java
@@ -0,0 +1,8 @@
+import java.util.*;
+
+class Test {
+    void aaa(Test p) { return 1; }
+    void test() {
+        Comparator<Test> r2 = Test::test;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/MethodReturnType.java b/java/java-tests/testData/codeInsight/completion/normal/MethodReturnType.java
new file mode 100644
index 0000000..1cb34e3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/MethodReturnType.java
@@ -0,0 +1,6 @@
+public class FooBar {
+
+    StringBuf<caret> foo() {
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/MethodReturnTypeNoSpace.java b/java/java-tests/testData/codeInsight/completion/normal/MethodReturnTypeNoSpace.java
new file mode 100644
index 0000000..2ae0d8e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/MethodReturnTypeNoSpace.java
@@ -0,0 +1,6 @@
+public class FooBar {
+
+    StringBuf<caret>boo() {
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/MethodReturnTypeNoSpace_after.java b/java/java-tests/testData/codeInsight/completion/normal/MethodReturnTypeNoSpace_after.java
new file mode 100644
index 0000000..3c8943b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/MethodReturnTypeNoSpace_after.java
@@ -0,0 +1,6 @@
+public class FooBar {
+
+    StringBuffer<caret>boo() {
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/MethodReturnType_after.java b/java/java-tests/testData/codeInsight/completion/normal/MethodReturnType_after.java
new file mode 100644
index 0000000..17c25e4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/MethodReturnType_after.java
@@ -0,0 +1,6 @@
+public class FooBar {
+
+    StringBuffer<caret> foo() {
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/MethodSquareBracket.java b/java/java-tests/testData/codeInsight/completion/normal/MethodSquareBracket.java
new file mode 100644
index 0000000..8103370
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/MethodSquareBracket.java
@@ -0,0 +1,9 @@
+class Foo {
+  int[] aaaa(int x){}
+  int[] aaab(){}
+
+
+  {
+    aaa<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/MethodSquareBracket_after.java b/java/java-tests/testData/codeInsight/completion/normal/MethodSquareBracket_after.java
new file mode 100644
index 0000000..e563262
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/MethodSquareBracket_after.java
@@ -0,0 +1,9 @@
+class Foo {
+  int[] aaaa(int x){}
+  int[] aaab(){}
+
+
+  {
+    aaaa()[<caret>]
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/MethodWithLeftParTailType.java b/java/java-tests/testData/codeInsight/completion/normal/MethodWithLeftParTailType.java
new file mode 100644
index 0000000..0403bf2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/MethodWithLeftParTailType.java
@@ -0,0 +1,8 @@
+class MyClass {
+
+void foo() {}
+
+{
+  fo<caret>
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/MethodWithLeftParTailType2.java b/java/java-tests/testData/codeInsight/completion/normal/MethodWithLeftParTailType2.java
new file mode 100644
index 0000000..c38a1fa
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/MethodWithLeftParTailType2.java
@@ -0,0 +1,8 @@
+class MyClass {
+
+void foo(int a) {}
+
+{
+  fo<caret>
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/MethodWithLeftParTailType2_after.java b/java/java-tests/testData/codeInsight/completion/normal/MethodWithLeftParTailType2_after.java
new file mode 100644
index 0000000..b4b5c16
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/MethodWithLeftParTailType2_after.java
@@ -0,0 +1,8 @@
+class MyClass {
+
+void foo(int a) {}
+
+{
+  foo(<caret>);
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/MethodWithLeftParTailTypeNoPairBrace.java b/java/java-tests/testData/codeInsight/completion/normal/MethodWithLeftParTailTypeNoPairBrace.java
new file mode 100644
index 0000000..0403bf2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/MethodWithLeftParTailTypeNoPairBrace.java
@@ -0,0 +1,8 @@
+class MyClass {
+
+void foo() {}
+
+{
+  fo<caret>
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/MethodWithLeftParTailTypeNoPairBrace_after.java b/java/java-tests/testData/codeInsight/completion/normal/MethodWithLeftParTailTypeNoPairBrace_after.java
new file mode 100644
index 0000000..c976d92
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/MethodWithLeftParTailTypeNoPairBrace_after.java
@@ -0,0 +1,8 @@
+class MyClass {
+
+void foo() {}
+
+{
+  foo(<caret>
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/MethodWithLeftParTailTypeNoPairBrace_after2.java b/java/java-tests/testData/codeInsight/completion/normal/MethodWithLeftParTailTypeNoPairBrace_after2.java
new file mode 100644
index 0000000..c976d92
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/MethodWithLeftParTailTypeNoPairBrace_after2.java
@@ -0,0 +1,8 @@
+class MyClass {
+
+void foo() {}
+
+{
+  foo(<caret>
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/MethodWithLeftParTailType_after.java b/java/java-tests/testData/codeInsight/completion/normal/MethodWithLeftParTailType_after.java
new file mode 100644
index 0000000..7680812
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/MethodWithLeftParTailType_after.java
@@ -0,0 +1,8 @@
+class MyClass {
+
+void foo() {}
+
+{
+  foo(<caret>);
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/MultiResolveQualifier.java b/java/java-tests/testData/codeInsight/completion/normal/MultiResolveQualifier.java
new file mode 100644
index 0000000..3a9b692
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/MultiResolveQualifier.java
@@ -0,0 +1,14 @@
+class Foo {
+  String xxx();
+}
+
+public class MyFirstTestClassFoo {
+
+    {
+       foo().xx<caret>
+    }
+
+    Foo foo(int a) {}
+    Foo foo(String a) {}
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/MultiResolveQualifier_after.java b/java/java-tests/testData/codeInsight/completion/normal/MultiResolveQualifier_after.java
new file mode 100644
index 0000000..d316a15
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/MultiResolveQualifier_after.java
@@ -0,0 +1,14 @@
+class Foo {
+  String xxx();
+}
+
+public class MyFirstTestClassFoo {
+
+    {
+       foo().xxx()<caret>
+    }
+
+    Foo foo(int a) {}
+    Foo foo(String a) {}
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/NewClassAngleBracket.java b/java/java-tests/testData/codeInsight/completion/normal/NewClassAngleBracket.java
new file mode 100644
index 0000000..92c60da
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/NewClassAngleBracket.java
@@ -0,0 +1,9 @@
+class Zooooooo<T> { }
+class Zooooooz<T> { }
+
+
+class Bar {
+  {
+    new Zoooo<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/NewClassAngleBracketExpected.java b/java/java-tests/testData/codeInsight/completion/normal/NewClassAngleBracketExpected.java
new file mode 100644
index 0000000..4db008a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/NewClassAngleBracketExpected.java
@@ -0,0 +1,7 @@
+class Zooooooo<T> { }
+
+class Bar {
+  {
+    Zooooooo<String> z = new Zoooo<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/NewClassAngleBracketExpected_after.java b/java/java-tests/testData/codeInsight/completion/normal/NewClassAngleBracketExpected_after.java
new file mode 100644
index 0000000..e7146d8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/NewClassAngleBracketExpected_after.java
@@ -0,0 +1,7 @@
+class Zooooooo<T> { }
+
+class Bar {
+  {
+    Zooooooo<String> z = new Zooooooo<<caret>>()
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/NewClassAngleBracket_after.java b/java/java-tests/testData/codeInsight/completion/normal/NewClassAngleBracket_after.java
new file mode 100644
index 0000000..a13dc39
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/NewClassAngleBracket_after.java
@@ -0,0 +1,9 @@
+class Zooooooo<T> { }
+class Zooooooz<T> { }
+
+
+class Bar {
+  {
+    new Zooooooo<<caret>>()
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/NewClassSquareBracket.java b/java/java-tests/testData/codeInsight/completion/normal/NewClassSquareBracket.java
new file mode 100644
index 0000000..92c60da
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/NewClassSquareBracket.java
@@ -0,0 +1,9 @@
+class Zooooooo<T> { }
+class Zooooooz<T> { }
+
+
+class Bar {
+  {
+    new Zoooo<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/NewClassSquareBracket_after.java b/java/java-tests/testData/codeInsight/completion/normal/NewClassSquareBracket_after.java
new file mode 100644
index 0000000..6b62cd0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/NewClassSquareBracket_after.java
@@ -0,0 +1,9 @@
+class Zooooooo<T> { }
+class Zooooooz<T> { }
+
+
+class Bar {
+  {
+    new Zooooooo[<caret>]
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/NewExpectedClassParens.java b/java/java-tests/testData/codeInsight/completion/normal/NewExpectedClassParens.java
new file mode 100644
index 0000000..7f050e3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/NewExpectedClassParens.java
@@ -0,0 +1,9 @@
+class Foooo {
+  interface Bar {}
+}
+
+class Bar {
+    {
+        Foooo c = new Fooo<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/NewExpectedClassParens_after.java b/java/java-tests/testData/codeInsight/completion/normal/NewExpectedClassParens_after.java
new file mode 100644
index 0000000..ad66e4e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/NewExpectedClassParens_after.java
@@ -0,0 +1,9 @@
+class Foooo {
+  interface Bar {}
+}
+
+class Bar {
+    {
+        Foooo c = new Foooo()<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/NewGenericClass.java b/java/java-tests/testData/codeInsight/completion/normal/NewGenericClass.java
new file mode 100644
index 0000000..a9261e0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/NewGenericClass.java
@@ -0,0 +1,5 @@
+public class Driver {
+  {
+    new ArrayLi<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/NewGenericClass_after.java b/java/java-tests/testData/codeInsight/completion/normal/NewGenericClass_after.java
new file mode 100644
index 0000000..5083bac
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/NewGenericClass_after.java
@@ -0,0 +1,7 @@
+import java.util.ArrayList;
+
+public class Driver {
+  {
+    new ArrayList<<caret>>()
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/NewGenericInterface.java b/java/java-tests/testData/codeInsight/completion/normal/NewGenericInterface.java
new file mode 100644
index 0000000..6621604
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/NewGenericInterface.java
@@ -0,0 +1,9 @@
+public class Driver {
+  {
+    new Fooo<caret>
+  }
+}
+
+interface Foooo<T> {
+  void bar();
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/NewGenericInterface_after.java b/java/java-tests/testData/codeInsight/completion/normal/NewGenericInterface_after.java
new file mode 100644
index 0000000..b8534e2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/NewGenericInterface_after.java
@@ -0,0 +1,9 @@
+public class Driver {
+  {
+    new Foooo<<caret>>()
+  }
+}
+
+interface Foooo<T> {
+  void bar();
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/NoAllClassesOnQualifiedReference.java b/java/java-tests/testData/codeInsight/completion/normal/NoAllClassesOnQualifiedReference.java
new file mode 100644
index 0000000..d846e6f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/NoAllClassesOnQualifiedReference.java
@@ -0,0 +1,10 @@
+interface A {
+}
+interface AxBxCx extends A{
+}
+
+class Foo {
+    {
+        A.ABC<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/NoArgsMethodSpace.java b/java/java-tests/testData/codeInsight/completion/normal/NoArgsMethodSpace.java
new file mode 100644
index 0000000..2e955771
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/NoArgsMethodSpace.java
@@ -0,0 +1,8 @@
+class Foo {
+  int foo1() {}
+  int foo2() {}
+
+  {
+    foo<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/NoArgsMethodSpace_after.java b/java/java-tests/testData/codeInsight/completion/normal/NoArgsMethodSpace_after.java
new file mode 100644
index 0000000..9f13852
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/NoArgsMethodSpace_after.java
@@ -0,0 +1,8 @@
+class Foo {
+  int foo1() {}
+  int foo2() {}
+
+  {
+    foo1() <caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/NoClosingWhenChoosingWithParenBeforeIdentifier.java b/java/java-tests/testData/codeInsight/completion/normal/NoClosingWhenChoosingWithParenBeforeIdentifier.java
new file mode 100644
index 0000000..e9682a8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/NoClosingWhenChoosingWithParenBeforeIdentifier.java
@@ -0,0 +1,5 @@
+class Foo {
+  {
+    toS<caret>xxx
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/NoClosingWhenChoosingWithParenBeforeIdentifier_after.java b/java/java-tests/testData/codeInsight/completion/normal/NoClosingWhenChoosingWithParenBeforeIdentifier_after.java
new file mode 100644
index 0000000..489d121
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/NoClosingWhenChoosingWithParenBeforeIdentifier_after.java
@@ -0,0 +1,5 @@
+class Foo {
+  {
+    toString(<caret>xxx
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/NoCommonPrefixInsideIdentifier.java b/java/java-tests/testData/codeInsight/completion/normal/NoCommonPrefixInsideIdentifier.java
new file mode 100644
index 0000000..d23809c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/NoCommonPrefixInsideIdentifier.java
@@ -0,0 +1,8 @@
+public class TestCase {
+	{
+        int fai1;
+        int fai2;
+        fa<caret>aaaaa
+
+	}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/NoDotOverwrite.java b/java/java-tests/testData/codeInsight/completion/normal/NoDotOverwrite.java
new file mode 100644
index 0000000..77a04c3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/NoDotOverwrite.java
@@ -0,0 +1,8 @@
+public class JavaClass {
+  Object magic() {}
+  Object magic2() {}
+
+  void foo() {
+    mag<caret>.aaa
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/NoDotOverwrite_after.java b/java/java-tests/testData/codeInsight/completion/normal/NoDotOverwrite_after.java
new file mode 100644
index 0000000..d504955
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/NoDotOverwrite_after.java
@@ -0,0 +1,8 @@
+public class JavaClass {
+  Object magic() {}
+  Object magic2() {}
+
+  void foo() {
+    magic().<caret>.aaa
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/NoForceBraces.java b/java/java-tests/testData/codeInsight/completion/normal/NoForceBraces.java
new file mode 100644
index 0000000..79a7d54
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/NoForceBraces.java
@@ -0,0 +1,8 @@
+import java.io.File;
+
+public class Foo {
+  void foo(boolean flag) {
+      if ('\\' == File.separaCh<caret>)
+      System.out.println();
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/NoForceBraces_after.java b/java/java-tests/testData/codeInsight/completion/normal/NoForceBraces_after.java
new file mode 100644
index 0000000..67bfc31
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/NoForceBraces_after.java
@@ -0,0 +1,8 @@
+import java.io.File;
+
+public class Foo {
+  void foo(boolean flag) {
+      if ('\\' == File.separatorChar<caret>)
+      System.out.println();
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/NoGenericsWhenChoosingWithParen.java b/java/java-tests/testData/codeInsight/completion/normal/NoGenericsWhenChoosingWithParen.java
new file mode 100644
index 0000000..221d428
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/NoGenericsWhenChoosingWithParen.java
@@ -0,0 +1,5 @@
+class Foo {
+  {
+    new Hash<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/NoGenericsWhenChoosingWithParen_after.java b/java/java-tests/testData/codeInsight/completion/normal/NoGenericsWhenChoosingWithParen_after.java
new file mode 100644
index 0000000..0bb51b1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/NoGenericsWhenChoosingWithParen_after.java
@@ -0,0 +1,7 @@
+import java.util.HashMap;
+
+class Foo {
+  {
+    new HashMap(<caret>)
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/NoMethodsInNonStaticImports.java b/java/java-tests/testData/codeInsight/completion/normal/NoMethodsInNonStaticImports.java
new file mode 100644
index 0000000..9439ae6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/NoMethodsInNonStaticImports.java
@@ -0,0 +1,2 @@
+import java.util.Collections.<caret>
+class A {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/NoMethodsInParameterType.java b/java/java-tests/testData/codeInsight/completion/normal/NoMethodsInParameterType.java
new file mode 100644
index 0000000..b2a6fae
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/NoMethodsInParameterType.java
@@ -0,0 +1,3 @@
+class Foo {
+  static void foo(f<caret>int a) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/NoParenthesesAroundCallQualifier.java b/java/java-tests/testData/codeInsight/completion/normal/NoParenthesesAroundCallQualifier.java
new file mode 100644
index 0000000..e6fe68f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/NoParenthesesAroundCallQualifier.java
@@ -0,0 +1,6 @@
+public class Foo {
+  String getString() {}
+  {
+      getS.subse<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/NoParenthesesAroundCallQualifier_after.java b/java/java-tests/testData/codeInsight/completion/normal/NoParenthesesAroundCallQualifier_after.java
new file mode 100644
index 0000000..332af46
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/NoParenthesesAroundCallQualifier_after.java
@@ -0,0 +1,6 @@
+public class Foo {
+  String getString() {}
+  {
+      getString().subSequence(<caret>)
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/NoReturnAfterDot.java b/java/java-tests/testData/codeInsight/completion/normal/NoReturnAfterDot.java
new file mode 100644
index 0000000..96e7824
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/NoReturnAfterDot.java
@@ -0,0 +1,6 @@
+public class Zoo {
+  {
+    if (true) toString().<caret>
+  }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/NoReturnInTernary.java b/java/java-tests/testData/codeInsight/completion/normal/NoReturnInTernary.java
new file mode 100644
index 0000000..2947103
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/NoReturnInTernary.java
@@ -0,0 +1,10 @@
+import javax.swing.*;
+import java.awt.*;
+
+public class Bar {
+  public static void main(String[] args) {
+    boolean retrere = false;
+    foo(args == null ? true : ret<caret>)
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/completion/normal/NoReturnInTernary_after.java b/java/java-tests/testData/codeInsight/completion/normal/NoReturnInTernary_after.java
new file mode 100644
index 0000000..58910b2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/NoReturnInTernary_after.java
@@ -0,0 +1,10 @@
+import javax.swing.*;
+import java.awt.*;
+
+public class Bar {
+  public static void main(String[] args) {
+    boolean retrere = false;
+    foo(args == null ? true : retrere<caret>)
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/completion/normal/NoSemicolonAfterExistingParenthesesEspeciallyIfItsACast.java b/java/java-tests/testData/codeInsight/completion/normal/NoSemicolonAfterExistingParenthesesEspeciallyIfItsACast.java
new file mode 100644
index 0000000..8f7b35e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/NoSemicolonAfterExistingParenthesesEspeciallyIfItsACast.java
@@ -0,0 +1,5 @@
+public class Beda {
+    {
+      System.out.printl<caret>  ((String)"a").subSequence();
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/NoSemicolonAfterExistingParenthesesEspeciallyIfItsACast_after.java b/java/java-tests/testData/codeInsight/completion/normal/NoSemicolonAfterExistingParenthesesEspeciallyIfItsACast_after.java
new file mode 100644
index 0000000..25802dc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/NoSemicolonAfterExistingParenthesesEspeciallyIfItsACast_after.java
@@ -0,0 +1,5 @@
+public class Beda {
+    {
+      System.out.println  (<caret>(String)"a").subSequence();
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/NoSpaceInParensWithoutParams.java b/java/java-tests/testData/codeInsight/completion/normal/NoSpaceInParensWithoutParams.java
new file mode 100644
index 0000000..3c32a937
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/NoSpaceInParensWithoutParams.java
@@ -0,0 +1,6 @@
+public class Main {
+  {
+    Main v;
+    v.hash<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/NoSpaceInParensWithoutParams_after.java b/java/java-tests/testData/codeInsight/completion/normal/NoSpaceInParensWithoutParams_after.java
new file mode 100644
index 0000000..71a09f1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/NoSpaceInParensWithoutParams_after.java
@@ -0,0 +1,6 @@
+public class Main {
+  {
+    Main v;
+    v.hashCode()<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/NoThisInComment.java b/java/java-tests/testData/codeInsight/completion/normal/NoThisInComment.java
new file mode 100644
index 0000000..03f433f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/NoThisInComment.java
@@ -0,0 +1,6 @@
+class Foo {
+    {
+        int[] x = new int[]{ // th<caret>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/NotOnlyKeywordsInsideSwitch.java b/java/java-tests/testData/codeInsight/completion/normal/NotOnlyKeywordsInsideSwitch.java
new file mode 100644
index 0000000..78ca6d3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/NotOnlyKeywordsInsideSwitch.java
@@ -0,0 +1,9 @@
+public class Main {
+  int _aaa;
+
+  {
+    switch (a) {
+      case 1: _<caret>
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/NotOnlyKeywordsInsideSwitch_after.java b/java/java-tests/testData/codeInsight/completion/normal/NotOnlyKeywordsInsideSwitch_after.java
new file mode 100644
index 0000000..efa667c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/NotOnlyKeywordsInsideSwitch_after.java
@@ -0,0 +1,9 @@
+public class Main {
+  int _aaa;
+
+  {
+    switch (a) {
+      case 1: _aaa<caret>
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/NothingAfterNumericLiteral.java b/java/java-tests/testData/codeInsight/completion/normal/NothingAfterNumericLiteral.java
new file mode 100644
index 0000000..16b01e8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/NothingAfterNumericLiteral.java
@@ -0,0 +1,7 @@
+public class MyFirstTestClassFoo {
+
+    {
+      map.put("key", new double[]{1.1d<caret>
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/OnlyAnnotationsAfterAt.java b/java/java-tests/testData/codeInsight/completion/normal/OnlyAnnotationsAfterAt.java
new file mode 100644
index 0000000..2bde739
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/OnlyAnnotationsAfterAt.java
@@ -0,0 +1,5 @@
+class AbcdClass {}
+@interface AbcdAnno {}
+
+@Abcd<caret>
+class Foo {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/OnlyAnnotationsAfterAt2.java b/java/java-tests/testData/codeInsight/completion/normal/OnlyAnnotationsAfterAt2.java
new file mode 100644
index 0000000..ceb44ba
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/OnlyAnnotationsAfterAt2.java
@@ -0,0 +1,12 @@
+import static BeanUtil.A.NOT_NULL;
+class BeanUtil {
+  public static class A {
+    public static final Object NOT_NULL = null;
+  }
+  @NN<caret>
+  String foo() {
+    return null;
+  }
+}
+
+@interface NotNull {}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/OnlyAnnotationsAfterAt2_after.java b/java/java-tests/testData/codeInsight/completion/normal/OnlyAnnotationsAfterAt2_after.java
new file mode 100644
index 0000000..4a897e7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/OnlyAnnotationsAfterAt2_after.java
@@ -0,0 +1,12 @@
+import static BeanUtil.A.NOT_NULL;
+class BeanUtil {
+  public static class A {
+    public static final Object NOT_NULL = null;
+  }
+  @NotNull<caret>
+  String foo() {
+    return null;
+  }
+}
+
+@interface NotNull {}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/OnlyAnnotationsAfterAt_after.java b/java/java-tests/testData/codeInsight/completion/normal/OnlyAnnotationsAfterAt_after.java
new file mode 100644
index 0000000..17ac9b2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/OnlyAnnotationsAfterAt_after.java
@@ -0,0 +1,5 @@
+class AbcdClass {}
+@interface AbcdAnno {}
+
+@AbcdAnno
+class Foo {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/OnlyClassesInExtends.java b/java/java-tests/testData/codeInsight/completion/normal/OnlyClassesInExtends.java
new file mode 100644
index 0000000..e28ffbc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/OnlyClassesInExtends.java
@@ -0,0 +1,5 @@
+class Bar {
+  static class Inner {}
+}
+
+public class Foooo extends Bar.<caret>
diff --git a/java/java-tests/testData/codeInsight/completion/normal/OnlyExceptionsInCatch1.java b/java/java-tests/testData/codeInsight/completion/normal/OnlyExceptionsInCatch1.java
new file mode 100644
index 0000000..9c9897e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/OnlyExceptionsInCatch1.java
@@ -0,0 +1,10 @@
+class AbcdClass {}
+class AbcdException extends Throwable {}
+
+class Foo {
+  {
+    try {
+
+    } catch (Abcd<caret>)
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/OnlyExceptionsInCatch1_after.java b/java/java-tests/testData/codeInsight/completion/normal/OnlyExceptionsInCatch1_after.java
new file mode 100644
index 0000000..c26ed86
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/OnlyExceptionsInCatch1_after.java
@@ -0,0 +1,10 @@
+class AbcdClass {}
+class AbcdException extends Throwable {}
+
+class Foo {
+  {
+    try {
+
+    } catch (AbcdException<caret>)
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/OnlyExceptionsInCatch2.java b/java/java-tests/testData/codeInsight/completion/normal/OnlyExceptionsInCatch2.java
new file mode 100644
index 0000000..1fd7f3a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/OnlyExceptionsInCatch2.java
@@ -0,0 +1,8 @@
+class AbcdClass {}
+class AbcdException extends Throwable {}
+
+class Foo {
+  {
+    try { } catch (Abcd<caret> e)
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/OnlyExceptionsInCatch2_after.java b/java/java-tests/testData/codeInsight/completion/normal/OnlyExceptionsInCatch2_after.java
new file mode 100644
index 0000000..b6971d1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/OnlyExceptionsInCatch2_after.java
@@ -0,0 +1,8 @@
+class AbcdClass {}
+class AbcdException extends Throwable {}
+
+class Foo {
+  {
+    try { } catch (AbcdException<caret> e)
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/OnlyExceptionsInCatch3.java b/java/java-tests/testData/codeInsight/completion/normal/OnlyExceptionsInCatch3.java
new file mode 100644
index 0000000..0604ca2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/OnlyExceptionsInCatch3.java
@@ -0,0 +1,8 @@
+class AbcdClass {}
+class AbcdException extends Throwable {}
+
+class Foo {
+  {
+    try { } catch (final Abcd<caret>)
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/OnlyExceptionsInCatch3_after.java b/java/java-tests/testData/codeInsight/completion/normal/OnlyExceptionsInCatch3_after.java
new file mode 100644
index 0000000..40922c8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/OnlyExceptionsInCatch3_after.java
@@ -0,0 +1,8 @@
+class AbcdClass {}
+class AbcdException extends Throwable {}
+
+class Foo {
+  {
+    try { } catch (final AbcdException<caret>)
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/OnlyExceptionsInCatch4.java b/java/java-tests/testData/codeInsight/completion/normal/OnlyExceptionsInCatch4.java
new file mode 100644
index 0000000..33b703c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/OnlyExceptionsInCatch4.java
@@ -0,0 +1,8 @@
+class AbcdClass {}
+class AbcdException extends Throwable {}
+
+class Foo {
+  {
+    try { } catch (final Abcd<caret> e)
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/OnlyExceptionsInCatch4_after.java b/java/java-tests/testData/codeInsight/completion/normal/OnlyExceptionsInCatch4_after.java
new file mode 100644
index 0000000..4ff8503
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/OnlyExceptionsInCatch4_after.java
@@ -0,0 +1,8 @@
+class AbcdClass {}
+class AbcdException extends Throwable {}
+
+class Foo {
+  {
+    try { } catch (final AbcdException<caret> e)
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/OnlyExceptionsInMultiCatch1.java b/java/java-tests/testData/codeInsight/completion/normal/OnlyExceptionsInMultiCatch1.java
new file mode 100644
index 0000000..d8594a2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/OnlyExceptionsInMultiCatch1.java
@@ -0,0 +1,7 @@
+class MyClass {
+  static class MyException extends Exception { }
+
+  void m() {
+    try { } catch (RuntimeException | My<caret>) { }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/OnlyExceptionsInMultiCatch1_after.java b/java/java-tests/testData/codeInsight/completion/normal/OnlyExceptionsInMultiCatch1_after.java
new file mode 100644
index 0000000..034ff37
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/OnlyExceptionsInMultiCatch1_after.java
@@ -0,0 +1,7 @@
+class MyClass {
+  static class MyException extends Exception { }
+
+  void m() {
+    try { } catch (RuntimeException | MyException<caret>) { }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/OnlyExceptionsInMultiCatch2.java b/java/java-tests/testData/codeInsight/completion/normal/OnlyExceptionsInMultiCatch2.java
new file mode 100644
index 0000000..5c5002e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/OnlyExceptionsInMultiCatch2.java
@@ -0,0 +1,7 @@
+class MyClass {
+  static class MyException extends Exception { }
+
+  void m() {
+    try { } catch (RuntimeException | My<caret> e) { }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/OnlyExceptionsInMultiCatch2_after.java b/java/java-tests/testData/codeInsight/completion/normal/OnlyExceptionsInMultiCatch2_after.java
new file mode 100644
index 0000000..1eb8841
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/OnlyExceptionsInMultiCatch2_after.java
@@ -0,0 +1,7 @@
+class MyClass {
+  static class MyException extends Exception { }
+
+  void m() {
+    try { } catch (RuntimeException | MyException<caret> e) { }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/OnlyKeywordsInsideSwitch.java b/java/java-tests/testData/codeInsight/completion/normal/OnlyKeywordsInsideSwitch.java
new file mode 100644
index 0000000..bb62cb4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/OnlyKeywordsInsideSwitch.java
@@ -0,0 +1,8 @@
+public class Main {
+
+  {
+    switch (a) {
+      <caret>
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/OnlyResourcesInResourceList1.java b/java/java-tests/testData/codeInsight/completion/normal/OnlyResourcesInResourceList1.java
new file mode 100644
index 0000000..95e8413
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/OnlyResourcesInResourceList1.java
@@ -0,0 +1,6 @@
+class MyClass {
+  void f() {
+    try (A<caret>) {
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/OnlyResourcesInResourceList1_after.java b/java/java-tests/testData/codeInsight/completion/normal/OnlyResourcesInResourceList1_after.java
new file mode 100644
index 0000000..2f6f1eb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/OnlyResourcesInResourceList1_after.java
@@ -0,0 +1,6 @@
+class MyClass {
+  void f() {
+    try (AutoCloseable<caret>) {
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/OnlyResourcesInResourceList2.java b/java/java-tests/testData/codeInsight/completion/normal/OnlyResourcesInResourceList2.java
new file mode 100644
index 0000000..7702fe0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/OnlyResourcesInResourceList2.java
@@ -0,0 +1,8 @@
+class MyClass {
+  static class MyResource implements AutoCloseable { }
+
+  void f() {
+    try (final My<caret>) {
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/OnlyResourcesInResourceList2_after.java b/java/java-tests/testData/codeInsight/completion/normal/OnlyResourcesInResourceList2_after.java
new file mode 100644
index 0000000..572d48b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/OnlyResourcesInResourceList2_after.java
@@ -0,0 +1,8 @@
+class MyClass {
+  static class MyResource implements AutoCloseable { }
+
+  void f() {
+    try (final MyResource<caret>) {
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/OnlyResourcesInResourceList3.java b/java/java-tests/testData/codeInsight/completion/normal/OnlyResourcesInResourceList3.java
new file mode 100644
index 0000000..05f1395b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/OnlyResourcesInResourceList3.java
@@ -0,0 +1,8 @@
+class MyClass {
+  static class MyResource implements AutoCloseable { }
+
+  void f() {
+    try (My<caret> r) {
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/OnlyResourcesInResourceList3_after.java b/java/java-tests/testData/codeInsight/completion/normal/OnlyResourcesInResourceList3_after.java
new file mode 100644
index 0000000..8099167
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/OnlyResourcesInResourceList3_after.java
@@ -0,0 +1,8 @@
+class MyClass {
+  static class MyResource implements AutoCloseable { }
+
+  void f() {
+    try (MyResource<caret> r) {
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/OnlyResourcesInResourceList4.java b/java/java-tests/testData/codeInsight/completion/normal/OnlyResourcesInResourceList4.java
new file mode 100644
index 0000000..c77163b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/OnlyResourcesInResourceList4.java
@@ -0,0 +1,8 @@
+class MyClass {
+  static class MyResource implements AutoCloseable { }
+
+  void f() {
+    try (MyResource r1 = null; My<caret>) {
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/OnlyResourcesInResourceList4_after.java b/java/java-tests/testData/codeInsight/completion/normal/OnlyResourcesInResourceList4_after.java
new file mode 100644
index 0000000..617904e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/OnlyResourcesInResourceList4_after.java
@@ -0,0 +1,8 @@
+class MyClass {
+  static class MyResource implements AutoCloseable { }
+
+  void f() {
+    try (MyResource r1 = null; MyResource<caret>) {
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/OrAssignmentDfa.java b/java/java-tests/testData/codeInsight/completion/normal/OrAssignmentDfa.java
new file mode 100644
index 0000000..48fab97
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/OrAssignmentDfa.java
@@ -0,0 +1,17 @@
+class Foo {
+
+    boolean foo(Object o, final PairFunction<String, ElementType, Boolean> fun){
+        boolean result = true;
+        result |= fun.fun(path);
+        if (o instanceof String) {
+            o.subst<caret>
+        }
+    }
+
+    void foo(String s) {}
+}
+
+interface PairFunction<T, V, U> {
+  U fun(T t, V v);
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/OrAssignmentDfa_after.java b/java/java-tests/testData/codeInsight/completion/normal/OrAssignmentDfa_after.java
new file mode 100644
index 0000000..cecc367
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/OrAssignmentDfa_after.java
@@ -0,0 +1,17 @@
+class Foo {
+
+    boolean foo(Object o, final PairFunction<String, ElementType, Boolean> fun){
+        boolean result = true;
+        result |= fun.fun(path);
+        if (o instanceof String) {
+            ((String) o).substring(<caret>)
+        }
+    }
+
+    void foo(String s) {}
+}
+
+interface PairFunction<T, V, U> {
+  U fun(T t, V v);
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/OverwriteGenericsAfterNew.java b/java/java-tests/testData/codeInsight/completion/normal/OverwriteGenericsAfterNew.java
new file mode 100644
index 0000000..e37957a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/OverwriteGenericsAfterNew.java
@@ -0,0 +1,6 @@
+class Bar {
+  {
+    Koo<String> hs = new Ko<caret><StringX>();
+  }
+}
+class Koo<X> {}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/OverwriteGenericsAfterNew_after.java b/java/java-tests/testData/codeInsight/completion/normal/OverwriteGenericsAfterNew_after.java
new file mode 100644
index 0000000..9cd9c1b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/OverwriteGenericsAfterNew_after.java
@@ -0,0 +1,6 @@
+class Bar {
+  {
+    Koo<String> hs = new Koo<String>()<caret>;
+  }
+}
+class Koo<X> {}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/PackageInAnnoParam.java b/java/java-tests/testData/codeInsight/completion/normal/PackageInAnnoParam.java
new file mode 100644
index 0000000..7f7ad99
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/PackageInAnnoParam.java
@@ -0,0 +1,7 @@
+@Anno(java.la<caret>)
+public class Main {
+}
+
+@interface Anno {
+  Class value();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/PackageInAnnoParam_after.java b/java/java-tests/testData/codeInsight/completion/normal/PackageInAnnoParam_after.java
new file mode 100644
index 0000000..65c55bc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/PackageInAnnoParam_after.java
@@ -0,0 +1,7 @@
+@Anno(java.lang.<caret>)
+public class Main {
+}
+
+@interface Anno {
+  Class value();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/PackageInMemberType.java b/java/java-tests/testData/codeInsight/completion/normal/PackageInMemberType.java
new file mode 100644
index 0000000..e065346e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/PackageInMemberType.java
@@ -0,0 +1,3 @@
+class Foo {
+  java.la<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/PackageInMemberType_after.java b/java/java-tests/testData/codeInsight/completion/normal/PackageInMemberType_after.java
new file mode 100644
index 0000000..9db38bb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/PackageInMemberType_after.java
@@ -0,0 +1,3 @@
+class Foo {
+  java.lang.<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/PackageNamedVariableBeforeAssignment.java b/java/java-tests/testData/codeInsight/completion/normal/PackageNamedVariableBeforeAssignment.java
new file mode 100644
index 0000000..6345520
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/PackageNamedVariableBeforeAssignment.java
@@ -0,0 +1,10 @@
+public class Bar {
+
+    {
+        int a = 1;
+        Object java;
+        java.eq<caret>
+        a = 2;
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/PackageNamedVariableBeforeAssignment_after.java b/java/java-tests/testData/codeInsight/completion/normal/PackageNamedVariableBeforeAssignment_after.java
new file mode 100644
index 0000000..73374b9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/PackageNamedVariableBeforeAssignment_after.java
@@ -0,0 +1,10 @@
+public class Bar {
+
+    {
+        int a = 1;
+        Object java;
+        java.equals(<caret>)
+        a = 2;
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/PackagePrefix.java b/java/java-tests/testData/codeInsight/completion/normal/PackagePrefix.java
new file mode 100644
index 0000000..ac1d36c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/PackagePrefix.java
@@ -0,0 +1,7 @@
+package foo.bar.goo;
+
+public class Bar {
+    {
+        foo.b<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/PackagePrefix_after.java b/java/java-tests/testData/codeInsight/completion/normal/PackagePrefix_after.java
new file mode 100644
index 0000000..8dd85df
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/PackagePrefix_after.java
@@ -0,0 +1,7 @@
+package foo.bar.goo;
+
+public class Bar {
+    {
+        foo.bar.<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/PreferLongerNamesOption.java b/java/java-tests/testData/codeInsight/completion/normal/PreferLongerNamesOption.java
new file mode 100644
index 0000000..9ad0f83f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/PreferLongerNamesOption.java
@@ -0,0 +1,6 @@
+class Foo {
+  {
+    AbcdEfghIjk <caret>
+  }
+  class AbcdEfghIjk{}
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/PreferTestCases.java b/java/java-tests/testData/codeInsight/completion/normal/PreferTestCases.java
new file mode 100644
index 0000000..0f9ded6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/PreferTestCases.java
@@ -0,0 +1 @@
+class Foo extends Some<caret>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/PreselectEditorSelection.java b/java/java-tests/testData/codeInsight/completion/normal/PreselectEditorSelection.java
new file mode 100644
index 0000000..544ac1a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/PreselectEditorSelection.java
@@ -0,0 +1,7 @@
+public class FooBar {
+
+    int a() {
+        <caret><selection>finalize</selection>
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/PrimitiveArrayClass.java b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveArrayClass.java
new file mode 100644
index 0000000..bf71548
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveArrayClass.java
@@ -0,0 +1,5 @@
+private class Zooooooo {
+  {
+    Class<?> cls = byte[].cla<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/PrimitiveArrayClass_after.java b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveArrayClass_after.java
new file mode 100644
index 0000000..1d38cd6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveArrayClass_after.java
@@ -0,0 +1,5 @@
+private class Zooooooo {
+  {
+    Class<?> cls = byte[].class<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/PrimitiveArrayInAnno.java b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveArrayInAnno.java
new file mode 100644
index 0000000..cf44170
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveArrayInAnno.java
@@ -0,0 +1,9 @@
+private class Zooooooo {
+  @interface B {
+      Class<?> value();
+  }
+
+  @B(byte[].c<caret>)
+  public static void main(String[] args) {
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/PrimitiveArrayInAnno_after.java b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveArrayInAnno_after.java
new file mode 100644
index 0000000..59059f1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveArrayInAnno_after.java
@@ -0,0 +1,9 @@
+private class Zooooooo {
+  @interface B {
+      Class<?> value();
+  }
+
+  @B(byte[].class<caret>)
+  public static void main(String[] args) {
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/PrimitiveArrayOnlyClass.java b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveArrayOnlyClass.java
new file mode 100644
index 0000000..3cf50b9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveArrayOnlyClass.java
@@ -0,0 +1,5 @@
+private class Zooooooo {
+  {
+    Class<?> cls = byte[].Cla<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/PrimitiveArrayWithRBrace.java b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveArrayWithRBrace.java
new file mode 100644
index 0000000..6e9e33e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveArrayWithRBrace.java
@@ -0,0 +1,5 @@
+public class Bar {
+    {
+        int[] a = new in<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/PrimitiveArrayWithRBrace_after.java b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveArrayWithRBrace_after.java
new file mode 100644
index 0000000..80f4392
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveArrayWithRBrace_after.java
@@ -0,0 +1,5 @@
+public class Bar {
+    {
+        int[] a = new int[<caret>]
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/PrimitiveCastOverwrite.java b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveCastOverwrite.java
new file mode 100644
index 0000000..5f1efdb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveCastOverwrite.java
@@ -0,0 +1,6 @@
+public class Zoo2 {
+    {
+        byte v1 = (by<caret>te) 0;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/completion/normal/PrimitiveCastOverwrite_after.java b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveCastOverwrite_after.java
new file mode 100644
index 0000000..a838d08
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveCastOverwrite_after.java
@@ -0,0 +1,6 @@
+public class Zoo2 {
+    {
+        byte v1 = (byte<caret>) 0;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/completion/normal/PrimitiveClass.java b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveClass.java
new file mode 100644
index 0000000..fb682ef
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveClass.java
@@ -0,0 +1,5 @@
+private class Zooooooo {
+  {
+    Class<?> cls = byte.cla<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/PrimitiveClass_after.java b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveClass_after.java
new file mode 100644
index 0000000..269cd1e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveClass_after.java
@@ -0,0 +1,5 @@
+private class Zooooooo {
+  {
+    Class<?> cls = byte.class<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/PrimitiveMethodParameter.java b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveMethodParameter.java
new file mode 100644
index 0000000..eea3b77
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveMethodParameter.java
@@ -0,0 +1,3 @@
+public class Foo {
+  Object foo(bo<caret>){ }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/PrimitiveMethodParameter_after.java b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveMethodParameter_after.java
new file mode 100644
index 0000000..d649b2d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveMethodParameter_after.java
@@ -0,0 +1,3 @@
+public class Foo {
+  Object foo(boolean<caret>){ }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/PrimitiveSquareBracket.java b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveSquareBracket.java
new file mode 100644
index 0000000..31513c1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveSquareBracket.java
@@ -0,0 +1,5 @@
+class Foo {
+  d<caret>
+
+  class doz {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/PrimitiveSquareBracket_after.java b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveSquareBracket_after.java
new file mode 100644
index 0000000..0be62fe
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveSquareBracket_after.java
@@ -0,0 +1,5 @@
+class Foo {
+  double[<caret>]
+
+  class doz {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/PrimitiveTypesInForLoop.java b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveTypesInForLoop.java
new file mode 100644
index 0000000..e5ce137
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveTypesInForLoop.java
@@ -0,0 +1,7 @@
+public class Foooo {
+
+    {
+        for (boo<caret>x)
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/PrimitiveTypesInForLoop2.java b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveTypesInForLoop2.java
new file mode 100644
index 0000000..aeb92e38
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveTypesInForLoop2.java
@@ -0,0 +1,7 @@
+public class Foooo {
+
+    {
+        for (boo<caret>x
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/PrimitiveTypesInForLoop3.java b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveTypesInForLoop3.java
new file mode 100644
index 0000000..1d38dea
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveTypesInForLoop3.java
@@ -0,0 +1,7 @@
+public class Foooo {
+
+    {
+        for (final boo<caret>x
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/PrimitiveTypesInForLoop4.java b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveTypesInForLoop4.java
new file mode 100644
index 0000000..9b777fe
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveTypesInForLoop4.java
@@ -0,0 +1,7 @@
+public class Foooo {
+
+    {
+        for (final boo<caret>x y
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/PrimitiveTypesInForLoop5.java b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveTypesInForLoop5.java
new file mode 100644
index 0000000..f2a1561
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveTypesInForLoop5.java
@@ -0,0 +1,7 @@
+public class Foooo {
+
+    {
+        for (final boo<caret>x y : z)
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/PrimitiveTypesInForLoop6.java b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveTypesInForLoop6.java
new file mode 100644
index 0000000..b6fa564
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveTypesInForLoop6.java
@@ -0,0 +1,7 @@
+public class Foooo {
+
+    {
+        for (final boo<caret>x y = 0;;)
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/PrimitiveTypesInForLoopSpace.java b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveTypesInForLoopSpace.java
new file mode 100644
index 0000000..3c66d67
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveTypesInForLoopSpace.java
@@ -0,0 +1,8 @@
+public class Foooo {
+
+    {
+        int intaaaa;
+        for (int<caret>)
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/PrimitiveTypesInForLoopSpace_after.java b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveTypesInForLoopSpace_after.java
new file mode 100644
index 0000000..b5b04b7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveTypesInForLoopSpace_after.java
@@ -0,0 +1,8 @@
+public class Foooo {
+
+    {
+        int intaaaa;
+        for (int <caret>)
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/PrivateInAnonymous.java b/java/java-tests/testData/codeInsight/completion/normal/PrivateInAnonymous.java
new file mode 100644
index 0000000..8b5f200
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/PrivateInAnonymous.java
@@ -0,0 +1,10 @@
+class A {
+    A() {
+      new Runnable() {
+          pri<caret>
+      };
+        
+    }
+  
+  public void prepareImage() {}
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/PrivateInAnonymous_after.java b/java/java-tests/testData/codeInsight/completion/normal/PrivateInAnonymous_after.java
new file mode 100644
index 0000000..b9c77cc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/PrivateInAnonymous_after.java
@@ -0,0 +1,10 @@
+class A {
+    A() {
+      new Runnable() {
+          private <caret>
+      };
+        
+    }
+  
+  public void prepareImage() {}
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/PropertyReferencePrefix.java b/java/java-tests/testData/codeInsight/completion/normal/PropertyReferencePrefix.java
new file mode 100644
index 0000000..8554f7b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/PropertyReferencePrefix.java
@@ -0,0 +1,5 @@
+public class Beda extends Quetzalcoatl {
+    {
+      "/fo<caret>"
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ProtectedFromSuper.java b/java/java-tests/testData/codeInsight/completion/normal/ProtectedFromSuper.java
new file mode 100644
index 0000000..c0b5409
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ProtectedFromSuper.java
@@ -0,0 +1,11 @@
+class A{
+ class B{
+  protected void xxx(){}
+ }
+
+ class C extends B{
+  {
+   super.<caret>
+  }
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ProtectedFromSuper2.java b/java/java-tests/testData/codeInsight/completion/normal/ProtectedFromSuper2.java
new file mode 100644
index 0000000..918b571
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ProtectedFromSuper2.java
@@ -0,0 +1,11 @@
+class A{
+ class B{
+  protected void xxx(){}
+ }
+
+ class C extends B{
+  {
+   B.super.<caret>
+  }
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ProtectedInaccessibleOnSecondInvocation.java b/java/java-tests/testData/codeInsight/completion/normal/ProtectedInaccessibleOnSecondInvocation.java
new file mode 100644
index 0000000..c8523e8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ProtectedInaccessibleOnSecondInvocation.java
@@ -0,0 +1,9 @@
+public class Quetzalcoatl {
+  private int _foo;
+}
+
+public class Beda extends Quetzalcoatl {
+    {
+      _<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ProtectedInaccessibleOnSecondInvocation_after.java b/java/java-tests/testData/codeInsight/completion/normal/ProtectedInaccessibleOnSecondInvocation_after.java
new file mode 100644
index 0000000..3367262
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ProtectedInaccessibleOnSecondInvocation_after.java
@@ -0,0 +1,9 @@
+public class Quetzalcoatl {
+  private int _foo;
+}
+
+public class Beda extends Quetzalcoatl {
+    {
+      _foo<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/QualifiedNew1.java b/java/java-tests/testData/codeInsight/completion/normal/QualifiedNew1.java
new file mode 100644
index 0000000..d0626f7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/QualifiedNew1.java
@@ -0,0 +1,11 @@
+class Foo {
+  {
+    Outer outer;
+    outer.new I<caret>
+  }
+}
+
+class Outer{
+  class Inner{}
+  class IInner{}
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/QualifiedNew2.java b/java/java-tests/testData/codeInsight/completion/normal/QualifiedNew2.java
new file mode 100644
index 0000000..9c4f719
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/QualifiedNew2.java
@@ -0,0 +1,11 @@
+class Foo {
+  {
+    Outer outer;
+    outer.new <caret>
+  }
+}
+
+class Outer{
+  class Inner{}
+  class AnInner{}
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/QualifierAsPackage.java b/java/java-tests/testData/codeInsight/completion/normal/QualifierAsPackage.java
new file mode 100644
index 0000000..af07485
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/QualifierAsPackage.java
@@ -0,0 +1,10 @@
+import java.util.List;
+
+public class FooBar {
+
+    {
+        List<String> java;
+        java.addAl<caret>lll();
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/QualifierAsPackage2.java b/java/java-tests/testData/codeInsight/completion/normal/QualifierAsPackage2.java
new file mode 100644
index 0000000..7c7d1f9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/QualifierAsPackage2.java
@@ -0,0 +1,10 @@
+import java.util.List;
+
+public class FooBar {
+
+    {
+        List<String> java;
+        java.addAl<caret> lll();
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/QualifierAsPackage2_after.java b/java/java-tests/testData/codeInsight/completion/normal/QualifierAsPackage2_after.java
new file mode 100644
index 0000000..2bac18d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/QualifierAsPackage2_after.java
@@ -0,0 +1,10 @@
+import java.util.List;
+
+public class FooBar {
+
+    {
+        List<String> java;
+        java.addAll(<caret>) lll();
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/QualifierAsPackage3.java b/java/java-tests/testData/codeInsight/completion/normal/QualifierAsPackage3.java
new file mode 100644
index 0000000..a4e9cbb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/QualifierAsPackage3.java
@@ -0,0 +1,10 @@
+import java.util.List;
+
+public class FooBar {
+
+    int a() {
+        List<String> java;
+        java.addAl<caret> lll();
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/QualifierAsPackage3_after.java b/java/java-tests/testData/codeInsight/completion/normal/QualifierAsPackage3_after.java
new file mode 100644
index 0000000..bb4ce66
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/QualifierAsPackage3_after.java
@@ -0,0 +1,10 @@
+import java.util.List;
+
+public class FooBar {
+
+    int a() {
+        List<String> java;
+        java.addAll(<caret>) lll();
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/QualifierAsPackage_after.java b/java/java-tests/testData/codeInsight/completion/normal/QualifierAsPackage_after.java
new file mode 100644
index 0000000..0031ae8e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/QualifierAsPackage_after.java
@@ -0,0 +1,10 @@
+import java.util.List;
+
+public class FooBar {
+
+    {
+        List<String> java;
+        java.addAll(<caret>)lll();
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/QualifierCastingBeforeLt.java b/java/java-tests/testData/codeInsight/completion/normal/QualifierCastingBeforeLt.java
new file mode 100644
index 0000000..d784b34
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/QualifierCastingBeforeLt.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2000-2011 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.
+ */
+import javax.swing.*;
+import java.awt.*;
+
+public class Bar {
+
+    static class CellWrapper {
+        public boolean isSeparator() {
+            return true;
+        }
+    }
+
+    static class MyRenderer extends DefaultListCellRenderer {
+        public Component getListCellRendererComponent(JList list, Object value, int index, boolean s, boolean focus) {
+            assert value instanceof CellWrapper;
+
+            value.is<caret><car>
+
+        }
+    }
+
+}
+
diff --git a/java/java-tests/testData/codeInsight/completion/normal/QualifierCastingBeforeLt_after.java b/java/java-tests/testData/codeInsight/completion/normal/QualifierCastingBeforeLt_after.java
new file mode 100644
index 0000000..9095c2b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/QualifierCastingBeforeLt_after.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2000-2011 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.
+ */
+import javax.swing.*;
+import java.awt.*;
+
+public class Bar {
+
+    static class CellWrapper {
+        public boolean isSeparator() {
+            return true;
+        }
+    }
+
+    static class MyRenderer extends DefaultListCellRenderer {
+        public Component getListCellRendererComponent(JList list, Object value, int index, boolean s, boolean focus) {
+            assert value instanceof CellWrapper;
+
+            ((CellWrapper) value).isSeparator()<caret><car>
+
+        }
+    }
+
+}
+
diff --git a/java/java-tests/testData/codeInsight/completion/normal/QualifierCastingWithUnknownAssignments.java b/java/java-tests/testData/codeInsight/completion/normal/QualifierCastingWithUnknownAssignments.java
new file mode 100644
index 0000000..e9d4498
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/QualifierCastingWithUnknownAssignments.java
@@ -0,0 +1,24 @@
+import javax.swing.*;
+import java.awt.*;
+
+public class Bar {
+
+    static class CellWrapper {
+        public boolean isSeparator() {
+            return true;
+        }
+    }
+
+    static class MyRenderer extends DefaultListCellRenderer {
+        public Component getListCellRendererComponent(JList list, Object value, int index, boolean s, boolean focus) {
+            assert value instanceof CellWrapper;
+
+            value.is<caret>
+
+            mySelected = isSelected;
+
+        }
+    }
+
+}
+
diff --git a/java/java-tests/testData/codeInsight/completion/normal/QualifierCastingWithUnknownAssignments_after.java b/java/java-tests/testData/codeInsight/completion/normal/QualifierCastingWithUnknownAssignments_after.java
new file mode 100644
index 0000000..3055fdb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/QualifierCastingWithUnknownAssignments_after.java
@@ -0,0 +1,24 @@
+import javax.swing.*;
+import java.awt.*;
+
+public class Bar {
+
+    static class CellWrapper {
+        public boolean isSeparator() {
+            return true;
+        }
+    }
+
+    static class MyRenderer extends DefaultListCellRenderer {
+        public Component getListCellRendererComponent(JList list, Object value, int index, boolean s, boolean focus) {
+            assert value instanceof CellWrapper;
+
+            ((CellWrapper) value).isSeparator()<caret>
+
+            mySelected = isSelected;
+
+        }
+    }
+
+}
+
diff --git a/java/java-tests/testData/codeInsight/completion/normal/QualifyInnerMembers.java b/java/java-tests/testData/codeInsight/completion/normal/QualifyInnerMembers.java
new file mode 100644
index 0000000..24e90f5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/QualifyInnerMembers.java
@@ -0,0 +1,11 @@
+class C1 {
+ static enum E {
+   FOO, BAAAAAAAAAR;
+ }
+}
+
+class C2 {
+  void f() {
+      C1.E e = BAAAA<caret>;
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/QualifyInnerMembers_after.java b/java/java-tests/testData/codeInsight/completion/normal/QualifyInnerMembers_after.java
new file mode 100644
index 0000000..82d0c57
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/QualifyInnerMembers_after.java
@@ -0,0 +1,11 @@
+class C1 {
+ static enum E {
+   FOO, BAAAAAAAAAR;
+ }
+}
+
+class C2 {
+  void f() {
+      C1.E e = C1.E.BAAAAAAAAAR<caret>;
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ReferenceParameters.java b/java/java-tests/testData/codeInsight/completion/normal/ReferenceParameters.java
new file mode 100644
index 0000000..7eca926
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ReferenceParameters.java
@@ -0,0 +1,7 @@
+class AAAB{}
+class AAAA{
+ {
+ int AAAAAAAAA = 0;
+ List<AA<caret>>
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ReplaceThisWithSuper.java b/java/java-tests/testData/codeInsight/completion/normal/ReplaceThisWithSuper.java
new file mode 100644
index 0000000..553a4ce
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ReplaceThisWithSuper.java
@@ -0,0 +1,10 @@
+public class Util {
+  public Util(String a) {
+    this.a = a;
+  }
+
+  public Util() {
+    su<caret>this("2");
+  }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ReplaceThisWithSuper_After.java b/java/java-tests/testData/codeInsight/completion/normal/ReplaceThisWithSuper_After.java
new file mode 100644
index 0000000..2ae91d8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ReplaceThisWithSuper_After.java
@@ -0,0 +1,10 @@
+public class Util {
+  public Util(String a) {
+    this.a = a;
+  }
+
+  public Util() {
+    super(<caret>"2");
+  }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ResourceParentInResourceList.java b/java/java-tests/testData/codeInsight/completion/normal/ResourceParentInResourceList.java
new file mode 100644
index 0000000..231eaa2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ResourceParentInResourceList.java
@@ -0,0 +1,10 @@
+class MyClass {
+  static class InnerResource implements AutoCloseable { }
+}
+class MyOuterResource implements AutoCloseable { }
+class Main {
+  void f() {
+    try (My<caret> r) {
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ResourceParentInResourceList_after.java b/java/java-tests/testData/codeInsight/completion/normal/ResourceParentInResourceList_after.java
new file mode 100644
index 0000000..3e48f0a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ResourceParentInResourceList_after.java
@@ -0,0 +1,10 @@
+class MyClass {
+  static class InnerResource implements AutoCloseable { }
+}
+class MyOuterResource implements AutoCloseable { }
+class Main {
+  void f() {
+    try (MyClass<caret> r) {
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ReturnInCase.java b/java/java-tests/testData/codeInsight/completion/normal/ReturnInCase.java
new file mode 100644
index 0000000..2ffcdb0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ReturnInCase.java
@@ -0,0 +1,7 @@
+public class Demo {
+    {
+        switch(x) {
+            case y: ret<caret>
+        }
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ReturnInCase_after.java b/java/java-tests/testData/codeInsight/completion/normal/ReturnInCase_after.java
new file mode 100644
index 0000000..9a17f25
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ReturnInCase_after.java
@@ -0,0 +1,7 @@
+public class Demo {
+    {
+        switch(x) {
+            case y: return<caret>
+        }
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ReturningTypeVariable.java b/java/java-tests/testData/codeInsight/completion/normal/ReturningTypeVariable.java
new file mode 100644
index 0000000..49ee189
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ReturningTypeVariable.java
@@ -0,0 +1,3 @@
+public class Beda {
+    public <Toooo> Tooo<caret>
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ReturningTypeVariable2.java b/java/java-tests/testData/codeInsight/completion/normal/ReturningTypeVariable2.java
new file mode 100644
index 0000000..9dd7059
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ReturningTypeVariable2.java
@@ -0,0 +1,3 @@
+public class Beda {
+    public <Toooo> Tooo<caret> x
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ReturningTypeVariable2_after.java b/java/java-tests/testData/codeInsight/completion/normal/ReturningTypeVariable2_after.java
new file mode 100644
index 0000000..4f846ea
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ReturningTypeVariable2_after.java
@@ -0,0 +1,3 @@
+public class Beda {
+    public <Toooo> Toooo<caret> x
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ReturningTypeVariable3.java b/java/java-tests/testData/codeInsight/completion/normal/ReturningTypeVariable3.java
new file mode 100644
index 0000000..675ce20
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ReturningTypeVariable3.java
@@ -0,0 +1,3 @@
+public class Beda {
+    public <Toooo> Tooo<caret> a()
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ReturningTypeVariable3_after.java b/java/java-tests/testData/codeInsight/completion/normal/ReturningTypeVariable3_after.java
new file mode 100644
index 0000000..c382a57c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ReturningTypeVariable3_after.java
@@ -0,0 +1,3 @@
+public class Beda {
+    public <Toooo> Toooo<caret> a()
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/ReturningTypeVariable_after.java b/java/java-tests/testData/codeInsight/completion/normal/ReturningTypeVariable_after.java
new file mode 100644
index 0000000..99044b6b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/ReturningTypeVariable_after.java
@@ -0,0 +1,3 @@
+public class Beda {
+    public <Toooo> Toooo<caret>
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/RightShift.java b/java/java-tests/testData/codeInsight/completion/normal/RightShift.java
new file mode 100644
index 0000000..40d03f2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/RightShift.java
@@ -0,0 +1,8 @@
+public class SomeClass {
+  Object myField1;
+  Object myField2;
+
+  void foo(int param) {
+    int a = param >> my<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SCR7208.java b/java/java-tests/testData/codeInsight/completion/normal/SCR7208.java
new file mode 100644
index 0000000..7d5390e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SCR7208.java
@@ -0,0 +1,9 @@
+class A{
+  {
+    try{      
+    }
+    catch(Exception){
+      a<caret>
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SameNamedVariableInNestedClasses.java b/java/java-tests/testData/codeInsight/completion/normal/SameNamedVariableInNestedClasses.java
new file mode 100644
index 0000000..8b8c2bc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SameNamedVariableInNestedClasses.java
@@ -0,0 +1,11 @@
+public class Beda {
+    private int ffid;
+
+    class Abc {
+        int ffid;
+
+        {
+            ff<caret>
+        }
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SameNamedVariableInNestedClasses_after.java b/java/java-tests/testData/codeInsight/completion/normal/SameNamedVariableInNestedClasses_after.java
new file mode 100644
index 0000000..bee35ea
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SameNamedVariableInNestedClasses_after.java
@@ -0,0 +1,11 @@
+public class Beda {
+    private int ffid;
+
+    class Abc {
+        int ffid;
+
+        {
+            ffid<caret>
+        }
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SameSignature.java b/java/java-tests/testData/codeInsight/completion/normal/SameSignature.java
new file mode 100644
index 0000000..5a7f86d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SameSignature.java
@@ -0,0 +1,11 @@
+import java.io.File;
+
+class Zoo {
+  private Zoo delegate;
+
+  public void foo(String s, File file) {
+  }
+  public void foo(String s, File file, int a) {
+    delegate.foo(s<caret>);
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SameSignature_after.java b/java/java-tests/testData/codeInsight/completion/normal/SameSignature_after.java
new file mode 100644
index 0000000..287c9fe
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SameSignature_after.java
@@ -0,0 +1,11 @@
+import java.io.File;
+
+class Zoo {
+  private Zoo delegate;
+
+  public void foo(String s, File file) {
+  }
+  public void foo(String s, File file, int a) {
+    delegate.foo(s, file, a);<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SeamlessConstant.java b/java/java-tests/testData/codeInsight/completion/normal/SeamlessConstant.java
new file mode 100644
index 0000000..f704fc1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SeamlessConstant.java
@@ -0,0 +1,9 @@
+interface Bar {
+  boolean ABC = 2;
+}
+
+class BarImpl implements Bar {
+  {
+    boolean a = A<caret>zzz;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SeamlessConstant_after.java b/java/java-tests/testData/codeInsight/completion/normal/SeamlessConstant_after.java
new file mode 100644
index 0000000..eb092d8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SeamlessConstant_after.java
@@ -0,0 +1,9 @@
+interface Bar {
+  boolean ABC = 2;
+}
+
+class BarImpl implements Bar {
+  {
+    boolean a = ABC<caret>zzz;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SecondAnonymousClassParameter.java b/java/java-tests/testData/codeInsight/completion/normal/SecondAnonymousClassParameter.java
new file mode 100644
index 0000000..bb19729
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SecondAnonymousClassParameter.java
@@ -0,0 +1,10 @@
+public abstract class Zzza {
+
+    {
+        new Runnable(hashCode(), ha<caret>) {
+
+        }
+    }
+
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SecondAnonymousClassParameter_after.java b/java/java-tests/testData/codeInsight/completion/normal/SecondAnonymousClassParameter_after.java
new file mode 100644
index 0000000..41655e9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SecondAnonymousClassParameter_after.java
@@ -0,0 +1,10 @@
+public abstract class Zzza {
+
+    {
+        new Runnable(hashCode(), hashCode()<caret>) {
+
+        }
+    }
+
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SecondMethodParameter.java b/java/java-tests/testData/codeInsight/completion/normal/SecondMethodParameter.java
new file mode 100644
index 0000000..3bc8fe3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SecondMethodParameter.java
@@ -0,0 +1,13 @@
+public class Aaa {
+    String ggetAaa() {
+
+    }
+
+    void foo(int a, Object b) {
+
+    }
+
+    void save() {
+        foo(239, gg<caret>);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SecondMethodParameterName.java b/java/java-tests/testData/codeInsight/completion/normal/SecondMethodParameterName.java
new file mode 100644
index 0000000..ae5ac36
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SecondMethodParameterName.java
@@ -0,0 +1,6 @@
+public class MyFirstTestClassFoo {
+
+    void foo(int a, Eee e<caret>){
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SecondMethodParameterName_after.java b/java/java-tests/testData/codeInsight/completion/normal/SecondMethodParameterName_after.java
new file mode 100644
index 0000000..60942921
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SecondMethodParameterName_after.java
@@ -0,0 +1,6 @@
+public class MyFirstTestClassFoo {
+
+    void foo(int a, Eee eee<caret>){
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SecondMethodParameter_after.java b/java/java-tests/testData/codeInsight/completion/normal/SecondMethodParameter_after.java
new file mode 100644
index 0000000..8f9f8a6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SecondMethodParameter_after.java
@@ -0,0 +1,13 @@
+public class Aaa {
+    String ggetAaa() {
+
+    }
+
+    void foo(int a, Object b) {
+
+    }
+
+    void save() {
+        foo(239, ggetAaa()<caret>);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SecondTypeParameterExtends.java b/java/java-tests/testData/codeInsight/completion/normal/SecondTypeParameterExtends.java
new file mode 100644
index 0000000..7d5a3c2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SecondTypeParameterExtends.java
@@ -0,0 +1,6 @@
+interface Foo<T,V> {}
+
+  class Bar<T,V> {
+    Bar(Foo<? extends T, ? ext<caret>> foo) {}
+  }
+
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SecondTypeParameterExtends_after.java b/java/java-tests/testData/codeInsight/completion/normal/SecondTypeParameterExtends_after.java
new file mode 100644
index 0000000..7cf4c85
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SecondTypeParameterExtends_after.java
@@ -0,0 +1,6 @@
+interface Foo<T,V> {}
+
+  class Bar<T,V> {
+    Bar(Foo<? extends T, ? extends <caret>> foo) {}
+  }
+
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SelectNoParameterSignature.java b/java/java-tests/testData/codeInsight/completion/normal/SelectNoParameterSignature.java
new file mode 100644
index 0000000..e36e98c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SelectNoParameterSignature.java
@@ -0,0 +1,11 @@
+public class MyFirstTestClassFoo {
+
+   void foo() {}
+   void foo(int a) {}
+   void fox(int a) {}
+
+    {
+        new MyFirstTestClassFoo().fo<caret>
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SelectNoParameterSignature_after.java b/java/java-tests/testData/codeInsight/completion/normal/SelectNoParameterSignature_after.java
new file mode 100644
index 0000000..c113cc7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SelectNoParameterSignature_after.java
@@ -0,0 +1,11 @@
+public class MyFirstTestClassFoo {
+
+   void foo() {}
+   void foo(int a) {}
+   void fox(int a) {}
+
+    {
+        new MyFirstTestClassFoo().foo();<caret>
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/Simple.java b/java/java-tests/testData/codeInsight/completion/normal/Simple.java
new file mode 100644
index 0000000..8e40c8d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/Simple.java
@@ -0,0 +1,20 @@
+class A extends Base{
+  int _field;
+  void _method(){}
+
+  void foo(){
+    int _local1;
+    int _local2;
+    _<caret>
+    int _local3;
+  }
+}
+
+class Base{
+  void _baseMethod(){}
+  int _baseField;
+
+  private void privateMethod(){}
+  private int privateField;
+}
+
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SimpleVariable.java b/java/java-tests/testData/codeInsight/completion/normal/SimpleVariable.java
new file mode 100644
index 0000000..8114f8c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SimpleVariable.java
@@ -0,0 +1,4 @@
+class A{
+    A aA = new A();
+    A x = a<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SimpleVariable_after.java b/java/java-tests/testData/codeInsight/completion/normal/SimpleVariable_after.java
new file mode 100644
index 0000000..523e463
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SimpleVariable_after.java
@@ -0,0 +1,4 @@
+class A{
+    A aA = new A();
+    A x = aA<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SmartEnterWrapsConstructorCall.java b/java/java-tests/testData/codeInsight/completion/normal/SmartEnterWrapsConstructorCall.java
new file mode 100644
index 0000000..9fb8abd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SmartEnterWrapsConstructorCall.java
@@ -0,0 +1,13 @@
+class Entity {}
+class EntityBuilder {}
+
+class Tester {
+  private Entity entity;
+
+  private void build(EntityBuilder builder) {
+  }
+
+  public void test1() {
+      bui<caret>new EntityBuilder();
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SmartEnterWrapsConstructorCall_after.java b/java/java-tests/testData/codeInsight/completion/normal/SmartEnterWrapsConstructorCall_after.java
new file mode 100644
index 0000000..43e9168
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SmartEnterWrapsConstructorCall_after.java
@@ -0,0 +1,13 @@
+class Entity {}
+class EntityBuilder {}
+
+class Tester {
+  private Entity entity;
+
+  private void build(EntityBuilder builder) {
+  }
+
+  public void test1() {
+      build(new EntityBuilder());<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SpaceAfterLookupString.java b/java/java-tests/testData/codeInsight/completion/normal/SpaceAfterLookupString.java
new file mode 100644
index 0000000..be6805f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SpaceAfterLookupString.java
@@ -0,0 +1,9 @@
+class Foo {
+
+    {
+        String abc;
+        String abcdef;
+        ab<caret> d
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SpaceAfterLookupString_after.java b/java/java-tests/testData/codeInsight/completion/normal/SpaceAfterLookupString_after.java
new file mode 100644
index 0000000..13d4c7a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SpaceAfterLookupString_after.java
@@ -0,0 +1,9 @@
+class Foo {
+
+    {
+        String abc;
+        String abcdef;
+        abc <caret> d
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SpaceAfterReturn.java b/java/java-tests/testData/codeInsight/completion/normal/SpaceAfterReturn.java
new file mode 100644
index 0000000..de9477c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SpaceAfterReturn.java
@@ -0,0 +1,8 @@
+public abstract class Zzza {
+
+    int foo() {
+        ret<caret>x
+    }
+
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SpaceAfterReturn_after.java b/java/java-tests/testData/codeInsight/completion/normal/SpaceAfterReturn_after.java
new file mode 100644
index 0000000..3b12fd4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SpaceAfterReturn_after.java
@@ -0,0 +1,8 @@
+public abstract class Zzza {
+
+    int foo() {
+        return <caret>x
+    }
+
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SpacesAroundEq.java b/java/java-tests/testData/codeInsight/completion/normal/SpacesAroundEq.java
new file mode 100644
index 0000000..b43308c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SpacesAroundEq.java
@@ -0,0 +1,7 @@
+class B {
+  void m() {
+    int xxx = 0;
+    int xxy = 0;
+    xx<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SpacesAroundEq_after.java b/java/java-tests/testData/codeInsight/completion/normal/SpacesAroundEq_after.java
new file mode 100644
index 0000000..25a7fb6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SpacesAroundEq_after.java
@@ -0,0 +1,7 @@
+class B {
+  void m() {
+    int xxx = 0;
+    int xxy = 0;
+    xxx = <caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/StaticInnerExtendingOuter.java b/java/java-tests/testData/codeInsight/completion/normal/StaticInnerExtendingOuter.java
new file mode 100644
index 0000000..70a7a09
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/StaticInnerExtendingOuter.java
@@ -0,0 +1,7 @@
+class Bar {
+    private static class Zooooooo extends Bar {
+        {
+            Zoooo<caret>
+        }
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/StaticInnerExtendingOuter_after.java b/java/java-tests/testData/codeInsight/completion/normal/StaticInnerExtendingOuter_after.java
new file mode 100644
index 0000000..6057247
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/StaticInnerExtendingOuter_after.java
@@ -0,0 +1,7 @@
+class Bar {
+    private static class Zooooooo extends Bar {
+        {
+            Zooooooo<caret>
+        }
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/StaticallyImportedInner.java b/java/java-tests/testData/codeInsight/completion/normal/StaticallyImportedInner.java
new file mode 100644
index 0000000..626915c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/StaticallyImportedInner.java
@@ -0,0 +1,9 @@
+import static Util2.AIOInner;
+
+public class Util2 {
+  public static class AIOInner {}
+}
+
+class Test {
+  AIO<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/StaticallyImportedMethodsBeforeExpression.java b/java/java-tests/testData/codeInsight/completion/normal/StaticallyImportedMethodsBeforeExpression.java
new file mode 100644
index 0000000..d27cd96
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/StaticallyImportedMethodsBeforeExpression.java
@@ -0,0 +1,11 @@
+import static Foo.assertNotNull;
+
+class Foo {
+  static void assertNotNull() {}
+}
+
+class Bar {
+  {
+    asnn<caret> lists.get(0).size() > 0);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/StaticallyImportedMethodsBeforeExpression_after.java b/java/java-tests/testData/codeInsight/completion/normal/StaticallyImportedMethodsBeforeExpression_after.java
new file mode 100644
index 0000000..bcc1d55
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/StaticallyImportedMethodsBeforeExpression_after.java
@@ -0,0 +1,11 @@
+import static Foo.assertNotNull;
+
+class Foo {
+  static void assertNotNull() {}
+}
+
+class Bar {
+  {
+    assertNotNull();<caret> lists.get(0).size() > 0);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SuggestAllTypeArguments.java b/java/java-tests/testData/codeInsight/completion/normal/SuggestAllTypeArguments.java
new file mode 100644
index 0000000..853b8c0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SuggestAllTypeArguments.java
@@ -0,0 +1,5 @@
+import java.util.HashMap;
+
+public class A {
+  private HashMap<String, String> m = new HashMap<St<caret>>()
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SuggestAllTypeArguments_after.java b/java/java-tests/testData/codeInsight/completion/normal/SuggestAllTypeArguments_after.java
new file mode 100644
index 0000000..e135089
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SuggestAllTypeArguments_after.java
@@ -0,0 +1,5 @@
+import java.util.HashMap;
+
+public class A {
+  private HashMap<String, String> m = new HashMap<String, String>(<caret>)
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SuggestEmptySet.java b/java/java-tests/testData/codeInsight/completion/normal/SuggestEmptySet.java
new file mode 100644
index 0000000..c0b8823
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SuggestEmptySet.java
@@ -0,0 +1,7 @@
+import java.util.Set;
+
+class Foo {
+  {
+    Set<String> s = empt<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SuggestEmptySet_after.java b/java/java-tests/testData/codeInsight/completion/normal/SuggestEmptySet_after.java
new file mode 100644
index 0000000..a9f9ca9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SuggestEmptySet_after.java
@@ -0,0 +1,8 @@
+import java.util.Collections;
+import java.util.Set;
+
+class Foo {
+  {
+    Set<String> s = Collections.emptySet()<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SuggestExpectedTypeMembers.java b/java/java-tests/testData/codeInsight/completion/normal/SuggestExpectedTypeMembers.java
new file mode 100644
index 0000000..203a4f2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SuggestExpectedTypeMembers.java
@@ -0,0 +1,10 @@
+class Super {
+    public static final Super FOO = null;
+    public static final boolean FOX = true;
+}
+
+class Intermediate {
+    Super s = FO<caret>
+}
+
+
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SuggestExpectedTypeMembersInAnno.java b/java/java-tests/testData/codeInsight/completion/normal/SuggestExpectedTypeMembersInAnno.java
new file mode 100644
index 0000000..5eee9cf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SuggestExpectedTypeMembersInAnno.java
@@ -0,0 +1,4 @@
+enum TestEnum { TEXT1, TEXT2 }
+public @interface TestAnnotation { TestEnum value(); }
+
+@TestAnnotation(Tex<caret>)
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SuggestExpectedTypeMembersInAnno_after.java b/java/java-tests/testData/codeInsight/completion/normal/SuggestExpectedTypeMembersInAnno_after.java
new file mode 100644
index 0000000..4c0f478
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SuggestExpectedTypeMembersInAnno_after.java
@@ -0,0 +1,4 @@
+enum TestEnum { TEXT1, TEXT2 }
+public @interface TestAnnotation { TestEnum value(); }
+
+@TestAnnotation(TestEnum.TEXT1<caret>)
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SuggestExpectedTypeMembersInCall.java b/java/java-tests/testData/codeInsight/completion/normal/SuggestExpectedTypeMembersInCall.java
new file mode 100644
index 0000000..834b1c7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SuggestExpectedTypeMembersInCall.java
@@ -0,0 +1,12 @@
+class Super {
+    public static final Super FOO = null;
+}
+
+class Intermediate {
+    void foo(Super s, int a) {}
+  void bar() {
+    foo(FO<caret>)
+  }
+}
+
+
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SuggestExpectedTypeMembersInCall_after.java b/java/java-tests/testData/codeInsight/completion/normal/SuggestExpectedTypeMembersInCall_after.java
new file mode 100644
index 0000000..bab52e7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SuggestExpectedTypeMembersInCall_after.java
@@ -0,0 +1,12 @@
+class Super {
+    public static final Super FOO = null;
+}
+
+class Intermediate {
+    void foo(Super s, int a) {}
+  void bar() {
+    foo(Super.FOO<caret>)
+  }
+}
+
+
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SuggestExpectedTypeMembersNonImported.java b/java/java-tests/testData/codeInsight/completion/normal/SuggestExpectedTypeMembersNonImported.java
new file mode 100644
index 0000000..729682c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SuggestExpectedTypeMembersNonImported.java
@@ -0,0 +1,7 @@
+class Intermediate {
+  {
+    foo.Usage.foo(FO<caret>)
+  }
+}
+
+
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SuggestExpectedTypeMembersNonImported_after.java b/java/java-tests/testData/codeInsight/completion/normal/SuggestExpectedTypeMembersNonImported_after.java
new file mode 100644
index 0000000..af97636
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SuggestExpectedTypeMembersNonImported_after.java
@@ -0,0 +1,9 @@
+import foo.Super;
+
+class Intermediate {
+  {
+    foo.Usage.foo(Super.FOO<caret>)
+  }
+}
+
+
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SuggestExpectedTypeMembers_after.java b/java/java-tests/testData/codeInsight/completion/normal/SuggestExpectedTypeMembers_after.java
new file mode 100644
index 0000000..86e848e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SuggestExpectedTypeMembers_after.java
@@ -0,0 +1,10 @@
+class Super {
+    public static final Super FOO = null;
+    public static final boolean FOX = true;
+}
+
+class Intermediate {
+    Super s = Super.FOO<caret>
+}
+
+
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SuggestInaccessibleOnSecondInvocation.java b/java/java-tests/testData/codeInsight/completion/normal/SuggestInaccessibleOnSecondInvocation.java
new file mode 100644
index 0000000..927c2dbc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SuggestInaccessibleOnSecondInvocation.java
@@ -0,0 +1,11 @@
+public class Quetzalcoatl {
+  private static int _foo;
+  public static int _bar;
+  public static int _goo;
+}
+
+public class Beda {
+    {
+      Quetzalcoatl._<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SuggestInaccessibleOnSecondInvocation_after.java b/java/java-tests/testData/codeInsight/completion/normal/SuggestInaccessibleOnSecondInvocation_after.java
new file mode 100644
index 0000000..47069d0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SuggestInaccessibleOnSecondInvocation_after.java
@@ -0,0 +1,11 @@
+public class Quetzalcoatl {
+  private static int _foo;
+  public static int _bar;
+  public static int _goo;
+}
+
+public class Beda {
+    {
+      Quetzalcoatl._foo<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SuggestMembersOfStaticallyImportedClasses.java b/java/java-tests/testData/codeInsight/completion/normal/SuggestMembersOfStaticallyImportedClasses.java
new file mode 100644
index 0000000..c431974
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SuggestMembersOfStaticallyImportedClasses.java
@@ -0,0 +1,6 @@
+import static foo.Foo.foo;
+
+class Bar {{
+  foo();
+  ba<caret>
+}}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SuggestMembersOfStaticallyImportedClassesUnqualifiedOnly.java b/java/java-tests/testData/codeInsight/completion/normal/SuggestMembersOfStaticallyImportedClassesUnqualifiedOnly.java
new file mode 100644
index 0000000..b0f1402
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SuggestMembersOfStaticallyImportedClassesUnqualifiedOnly.java
@@ -0,0 +1,7 @@
+import foo.Foo;
+import static foo.Foo.foo;
+
+class Bar {{
+  foo();
+  new Foo().ba<caret>z
+}}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SuggestMembersOfStaticallyImportedClassesUnqualifiedOnly_after.java b/java/java-tests/testData/codeInsight/completion/normal/SuggestMembersOfStaticallyImportedClassesUnqualifiedOnly_after.java
new file mode 100644
index 0000000..9476b09
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SuggestMembersOfStaticallyImportedClassesUnqualifiedOnly_after.java
@@ -0,0 +1,7 @@
+import foo.Foo;
+import static foo.Foo.foo;
+
+class Bar {{
+  foo();
+  new Foo().bar();<caret>
+}}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SuggestMembersOfStaticallyImportedClasses_after.java b/java/java-tests/testData/codeInsight/completion/normal/SuggestMembersOfStaticallyImportedClasses_after.java
new file mode 100644
index 0000000..39afee0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SuggestMembersOfStaticallyImportedClasses_after.java
@@ -0,0 +1,7 @@
+import static foo.Foo.bar;
+import static foo.Foo.foo;
+
+class Bar {{
+  foo();
+  bar();<caret>
+}}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SuperInConstructor.java b/java/java-tests/testData/codeInsight/completion/normal/SuperInConstructor.java
new file mode 100644
index 0000000..da0149e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SuperInConstructor.java
@@ -0,0 +1,7 @@
+public class Xxx {
+
+    Xxx() {
+        sup<caret>
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SuperInConstructorWithParams.java b/java/java-tests/testData/codeInsight/completion/normal/SuperInConstructorWithParams.java
new file mode 100644
index 0000000..1eaec15
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SuperInConstructorWithParams.java
@@ -0,0 +1,7 @@
+public class Xxx extends java.util.ArrayList {
+
+    Xxx() {
+        sup<caret>
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SuperInConstructorWithParams_after.java b/java/java-tests/testData/codeInsight/completion/normal/SuperInConstructorWithParams_after.java
new file mode 100644
index 0000000..8a8ad91
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SuperInConstructorWithParams_after.java
@@ -0,0 +1,7 @@
+public class Xxx extends java.util.ArrayList {
+
+    Xxx() {
+        super(<caret>);
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SuperInConstructor_after.java b/java/java-tests/testData/codeInsight/completion/normal/SuperInConstructor_after.java
new file mode 100644
index 0000000..99122ed
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SuperInConstructor_after.java
@@ -0,0 +1,7 @@
+public class Xxx {
+
+    Xxx() {
+        super();<caret>
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SuperInMethod.java b/java/java-tests/testData/codeInsight/completion/normal/SuperInMethod.java
new file mode 100644
index 0000000..90e80fa
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SuperInMethod.java
@@ -0,0 +1,7 @@
+public class Xxx {
+
+    void foo() {
+        sup<caret>
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SuperInMethod_after.java b/java/java-tests/testData/codeInsight/completion/normal/SuperInMethod_after.java
new file mode 100644
index 0000000..de4c112
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SuperInMethod_after.java
@@ -0,0 +1,7 @@
+public class Xxx {
+
+    void foo() {
+        super<caret>
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SuperProtectedMethod.java b/java/java-tests/testData/codeInsight/completion/normal/SuperProtectedMethod.java
new file mode 100644
index 0000000..3522333
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SuperProtectedMethod.java
@@ -0,0 +1,9 @@
+class BarImpl extends foo.Bar {
+    {
+        new Runnable() {
+            public void run() {
+                BarImpl.super.fo<caret>
+            }
+        };
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SuperProtectedMethod_after.java b/java/java-tests/testData/codeInsight/completion/normal/SuperProtectedMethod_after.java
new file mode 100644
index 0000000..87bc34e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SuperProtectedMethod_after.java
@@ -0,0 +1,9 @@
+class BarImpl extends foo.Bar {
+    {
+        new Runnable() {
+            public void run() {
+                BarImpl.super.foo();<caret>
+            }
+        };
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SwitchConstantsFromReferencedClass.java b/java/java-tests/testData/codeInsight/completion/normal/SwitchConstantsFromReferencedClass.java
new file mode 100644
index 0000000..3078656
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SwitchConstantsFromReferencedClass.java
@@ -0,0 +1,13 @@
+class Foo {
+  void foo(int i) {
+    switch (i) {
+      case Constants.BAR0: return;
+      case B<caret>:
+    }
+  }
+}
+
+interface Constants {
+  int BAR0 = 0;
+  int BAR1 = 1;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SwitchConstantsFromReferencedClass_after.java b/java/java-tests/testData/codeInsight/completion/normal/SwitchConstantsFromReferencedClass_after.java
new file mode 100644
index 0000000..0165500
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SwitchConstantsFromReferencedClass_after.java
@@ -0,0 +1,13 @@
+class Foo {
+  void foo(int i) {
+    switch (i) {
+      case Constants.BAR0: return;
+      case Constants.BAR1:<caret>
+    }
+  }
+}
+
+interface Constants {
+  int BAR0 = 0;
+  int BAR1 = 1;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SwitchEnumLabel.java b/java/java-tests/testData/codeInsight/completion/normal/SwitchEnumLabel.java
new file mode 100644
index 0000000..21d416d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SwitchEnumLabel.java
@@ -0,0 +1,15 @@
+class A extends Base{
+  void foo(){
+    B x = null;
+    switch(x){
+      case <caret>
+    }
+  }
+}
+
+enum B{
+  A,
+  B,
+  C
+}
+
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SynchronizedHonoursCodeStyle.java b/java/java-tests/testData/codeInsight/completion/normal/SynchronizedHonoursCodeStyle.java
new file mode 100644
index 0000000..b13bf8e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SynchronizedHonoursCodeStyle.java
@@ -0,0 +1,6 @@
+public class Client {
+  public void run() {
+    synchroni<caret>
+
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SynchronizedHonoursCodeStyle_after.java b/java/java-tests/testData/codeInsight/completion/normal/SynchronizedHonoursCodeStyle_after.java
new file mode 100644
index 0000000..63c395f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/SynchronizedHonoursCodeStyle_after.java
@@ -0,0 +1,6 @@
+public class Client {
+  public void run() {
+    synchronized (<caret>)
+
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/TabInXml.xml b/java/java-tests/testData/codeInsight/completion/normal/TabInXml.xml
new file mode 100644
index 0000000..194601a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/TabInXml.xml
@@ -0,0 +1,5 @@
+<a>
+  <b class="java.lang.Int<caret>xxx">
+
+  </b>
+</a>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/TabInXml2.xml b/java/java-tests/testData/codeInsight/completion/normal/TabInXml2.xml
new file mode 100644
index 0000000..2fc87cc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/TabInXml2.xml
@@ -0,0 +1,5 @@
+<a>
+  <b class="java.lang.Inte<caret>hhhhhhhhhhhhhhhhhhhhhh.hhhh">
+
+  </b>
+</a>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/TabInXml2_After.xml b/java/java-tests/testData/codeInsight/completion/normal/TabInXml2_After.xml
new file mode 100644
index 0000000..561c466
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/TabInXml2_After.xml
@@ -0,0 +1,5 @@
+<a>
+  <b class="java.lang.Integer<caret>.hhhh">
+
+  </b>
+</a>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/TabInXml_After.xml b/java/java-tests/testData/codeInsight/completion/normal/TabInXml_After.xml
new file mode 100644
index 0000000..35ec7f0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/TabInXml_After.xml
@@ -0,0 +1,5 @@
+<a>
+  <b class="java.lang.Integer<caret>">
+
+  </b>
+</a>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/TabReplacesMethodNameWithLocalVariableName.java b/java/java-tests/testData/codeInsight/completion/normal/TabReplacesMethodNameWithLocalVariableName.java
new file mode 100644
index 0000000..a82d40a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/TabReplacesMethodNameWithLocalVariableName.java
@@ -0,0 +1,6 @@
+class Foo {
+    void foo() {
+        Object textIndex = null;
+        Object p = tI<caret>equals(2);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/TabReplacesMethodNameWithLocalVariableName_after.java b/java/java-tests/testData/codeInsight/completion/normal/TabReplacesMethodNameWithLocalVariableName_after.java
new file mode 100644
index 0000000..8627911
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/TabReplacesMethodNameWithLocalVariableName_after.java
@@ -0,0 +1,6 @@
+class Foo {
+    void foo() {
+        Object textIndex = null;
+        Object p = textIndex<caret>(2);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/TwoSpacesInParensWithParams.java b/java/java-tests/testData/codeInsight/completion/normal/TwoSpacesInParensWithParams.java
new file mode 100644
index 0000000..56ddd99
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/TwoSpacesInParensWithParams.java
@@ -0,0 +1,6 @@
+public class Main {
+  {
+    Main v;
+    v.equa<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/TwoSpacesInParensWithParams_after.java b/java/java-tests/testData/codeInsight/completion/normal/TwoSpacesInParensWithParams_after.java
new file mode 100644
index 0000000..ee70dc1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/TwoSpacesInParensWithParams_after.java
@@ -0,0 +1,6 @@
+public class Main {
+  {
+    Main v;
+    v.equals( <caret> )
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/UnboxedConstantsInCase.java b/java/java-tests/testData/codeInsight/completion/normal/UnboxedConstantsInCase.java
new file mode 100644
index 0000000..7da6075
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/UnboxedConstantsInCase.java
@@ -0,0 +1,11 @@
+public class Demo {
+    void foo(Integer i){
+        switch(i) {
+            case Types.CH<caret>
+        }
+    }
+}
+
+interface Types {
+  int CHAR = 2;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/UnboxedConstantsInCase_after.java b/java/java-tests/testData/codeInsight/completion/normal/UnboxedConstantsInCase_after.java
new file mode 100644
index 0000000..8519263
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/UnboxedConstantsInCase_after.java
@@ -0,0 +1,11 @@
+public class Demo {
+    void foo(Integer i){
+        switch(i) {
+            case Types.CHAR<caret>
+        }
+    }
+}
+
+interface Types {
+  int CHAR = 2;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/UnfinishedMethodTypeParameter.java b/java/java-tests/testData/codeInsight/completion/normal/UnfinishedMethodTypeParameter.java
new file mode 100644
index 0000000..9dfc817
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/UnfinishedMethodTypeParameter.java
@@ -0,0 +1,5 @@
+import java.util.ArrayList;
+
+class A {
+  public static <MyParameter, MySecondParameter> ArrayList<My<caret>>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/UnfinishedMethodTypeParameter2.java b/java/java-tests/testData/codeInsight/completion/normal/UnfinishedMethodTypeParameter2.java
new file mode 100644
index 0000000..c82489a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/UnfinishedMethodTypeParameter2.java
@@ -0,0 +1,5 @@
+import java.util.ArrayList;
+
+class A {
+  public static <MyParameter, MySecondParameter> My<caret>>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/UnnecessaryMethodMerging.java b/java/java-tests/testData/codeInsight/completion/normal/UnnecessaryMethodMerging.java
new file mode 100644
index 0000000..a952da8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/UnnecessaryMethodMerging.java
@@ -0,0 +1,8 @@
+class Foo {
+    void fofoo() {}
+    void fofoo(int a) {}
+
+    {
+        fof<caret>o
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/VariableColon.java b/java/java-tests/testData/codeInsight/completion/normal/VariableColon.java
new file mode 100644
index 0000000..51ed4cf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/VariableColon.java
@@ -0,0 +1,5 @@
+class Bar {
+  int foo(int zoooa, int zooob) {
+    return true ? zoo<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/VariableColon_after.java b/java/java-tests/testData/codeInsight/completion/normal/VariableColon_after.java
new file mode 100644
index 0000000..57904ef
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/VariableColon_after.java
@@ -0,0 +1,5 @@
+class Bar {
+  int foo(int zoooa, int zooob) {
+    return true ? zoooa : <caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normal/VariableSquareBracket.java b/java/java-tests/testData/codeInsight/completion/normal/VariableSquareBracket.java
new file mode 100644
index 0000000..ebff9d9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/VariableSquareBracket.java
@@ -0,0 +1,7 @@
+class Foo {
+  {
+    int[] aaaa;
+    int[] aaab;
+    aa<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/VariableSquareBracket_after.java b/java/java-tests/testData/codeInsight/completion/normal/VariableSquareBracket_after.java
new file mode 100644
index 0000000..8453864
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/VariableSquareBracket_after.java
@@ -0,0 +1,7 @@
+class Foo {
+  {
+    int[] aaaa;
+    int[] aaab;
+    aaaa[<caret>]
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/WildcardsInLookup.java b/java/java-tests/testData/codeInsight/completion/normal/WildcardsInLookup.java
new file mode 100644
index 0000000..facf72d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/WildcardsInLookup.java
@@ -0,0 +1,10 @@
+public abstract class Zzza {
+
+    {
+        int azzzfzzz = 2;
+        int fzazzz = 2;
+        <caret>
+    }
+
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/WriteInInvokeLater.java b/java/java-tests/testData/codeInsight/completion/normal/WriteInInvokeLater.java
new file mode 100644
index 0000000..21169c2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/WriteInInvokeLater.java
@@ -0,0 +1,6 @@
+class Foo {
+  void f() {
+    long forumId;
+    String forumName=g(for<caret>);
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/AlphaSortPackages.java b/java/java-tests/testData/codeInsight/completion/normalSorting/AlphaSortPackages.java
new file mode 100644
index 0000000..3cc32c37
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/AlphaSortPackages.java
@@ -0,0 +1,6 @@
+class Goo {
+  {
+    new Foox<caret>
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/CaseInsensitivePrefixMatch.java b/java/java-tests/testData/codeInsight/completion/normalSorting/CaseInsensitivePrefixMatch.java
new file mode 100644
index 0000000..830d1bf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/CaseInsensitivePrefixMatch.java
@@ -0,0 +1,9 @@
+class Foo {
+  void foo1() {}
+  void foo2() {}
+
+  {
+    foo<caret>
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/ChangePreselectionOnSecondInvocation.java b/java/java-tests/testData/codeInsight/completion/normalSorting/ChangePreselectionOnSecondInvocation.java
new file mode 100644
index 0000000..cc05fe8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/ChangePreselectionOnSecondInvocation.java
@@ -0,0 +1,6 @@
+class Util {
+  {
+    FooZoo<caret>
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/ClassStaticMembersInBooleanContext.java b/java/java-tests/testData/codeInsight/completion/normalSorting/ClassStaticMembersInBooleanContext.java
new file mode 100644
index 0000000..3d40a2f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/ClassStaticMembersInBooleanContext.java
@@ -0,0 +1,17 @@
+public class Foo {
+    {
+        if (Bar.<caret>)
+    }
+}
+
+class Bar {
+
+    public static void voidMethod() {}
+    public static boolean booleanMethod() {}
+    public static final boolean BOOLEAN = true;
+    public static final Object AN_OBJECT = "";
+
+    public static class Inner {}
+
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/ClassStaticMembersInVoidContext.java b/java/java-tests/testData/codeInsight/completion/normalSorting/ClassStaticMembersInVoidContext.java
new file mode 100644
index 0000000..e0d404d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/ClassStaticMembersInVoidContext.java
@@ -0,0 +1,17 @@
+public class Foo {
+    {
+        Bar.<caret>
+    }
+}
+
+class Bar {
+
+    public static void voidMethod() {}
+    public static boolean booleanMethod() {}
+    public static final boolean BOOLEAN = true;
+    public static final Object AN_OBJECT = "";
+
+    public static class Inner {}
+
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/CommonPrefixMoreImportantThanExpectedType.java b/java/java-tests/testData/codeInsight/completion/normalSorting/CommonPrefixMoreImportantThanExpectedType.java
new file mode 100644
index 0000000..90a2ffb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/CommonPrefixMoreImportantThanExpectedType.java
@@ -0,0 +1,8 @@
+
+public class Foo {
+  int myCurrentStep = null;
+  Object myStep = null;
+  void foo() {
+    int a = myst<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/CommonPrefixMoreImportantThanKind.java b/java/java-tests/testData/codeInsight/completion/normalSorting/CommonPrefixMoreImportantThanKind.java
new file mode 100644
index 0000000..9d0f813
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/CommonPrefixMoreImportantThanKind.java
@@ -0,0 +1,10 @@
+class PsiElement {}
+
+public class Foo {
+  
+  Object psiElement() {}
+  
+  void foo() {
+    Psi<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/CurrentClassBest.java b/java/java-tests/testData/codeInsight/completion/normalSorting/CurrentClassBest.java
new file mode 100644
index 0000000..d212085
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/CurrentClassBest.java
@@ -0,0 +1,6 @@
+class XcodeConfigurable {}
+
+class XcodeProjectTemplate {
+  Xcod<caret>
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/DeclaredMembersGoFirst.java b/java/java-tests/testData/codeInsight/completion/normalSorting/DeclaredMembersGoFirst.java
new file mode 100644
index 0000000..1f6474a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/DeclaredMembersGoFirst.java
@@ -0,0 +1,15 @@
+class Foo {
+  void fromSuper() {}
+  void overridden() {}
+}
+
+class FooImpl extends Foo {
+  void overridden() {}
+  void fromThis() {}
+}
+
+class Bar {
+    {
+        new FooImpl().<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/DeepestSuperMethodStats.java b/java/java-tests/testData/codeInsight/completion/normalSorting/DeepestSuperMethodStats.java
new file mode 100644
index 0000000..d42b7ea
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/DeepestSuperMethodStats.java
@@ -0,0 +1,18 @@
+class AbstractSet {
+  public void addX() {}
+  public void addY() {}
+}
+
+class MySet1 extends AbstractSet {
+  public void addX() {}
+}
+class MySet2 extends AbstractSet {
+  public void addX() {}
+}
+
+class Foo {
+  
+  void foo(MySet1 set1, MySet2 set2) {
+    set1.ad<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/DispreferDeclared.java b/java/java-tests/testData/codeInsight/completion/normalSorting/DispreferDeclared.java
new file mode 100644
index 0000000..d2e0abc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/DispreferDeclared.java
@@ -0,0 +1,9 @@
+public class Aaaaaaa {
+    private final String aaa;
+
+    Aaaaaaa(String aabbb) {
+        aaa = "";
+        aaa = true ? null : aa<caret>
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/DispreferDeclaredOfExpectedType.java b/java/java-tests/testData/codeInsight/completion/normalSorting/DispreferDeclaredOfExpectedType.java
new file mode 100644
index 0000000..4acc0b1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/DispreferDeclaredOfExpectedType.java
@@ -0,0 +1,9 @@
+public class Aaaaaaa {
+    private final String aaa;
+
+    Aaaaaaa(Object aabbb) {
+        aaa = "";
+        aaa = true ? null : aa<caret>
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/DispreferFinalize.java b/java/java-tests/testData/codeInsight/completion/normalSorting/DispreferFinalize.java
new file mode 100644
index 0000000..aaee7b70
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/DispreferFinalize.java
@@ -0,0 +1,7 @@
+public class Bar {
+
+    {
+        fina<caret>x
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/DispreferImpls.java b/java/java-tests/testData/codeInsight/completion/normalSorting/DispreferImpls.java
new file mode 100644
index 0000000..73e8206
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/DispreferImpls.java
@@ -0,0 +1,12 @@
+public class Aaaaaaa {
+    private final String aaa;
+
+    Aaaaaaa(Object aabbb) {
+        Xx<caret>
+    }
+
+}
+
+class XxxEx {}
+class XxxImpl {}
+class Xxy {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/DispreferInnerClasses.java b/java/java-tests/testData/codeInsight/completion/normalSorting/DispreferInnerClasses.java
new file mode 100644
index 0000000..db2e1d0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/DispreferInnerClasses.java
@@ -0,0 +1,14 @@
+abstract class Base {
+    public static @interface IfNotParsed {}
+
+    static class X {}
+}
+
+class Derived extends Base {
+
+}
+class B {
+    void foo(Derived b) {
+        b.<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/DispreferReturnBeforeStatement.java b/java/java-tests/testData/codeInsight/completion/normalSorting/DispreferReturnBeforeStatement.java
new file mode 100644
index 0000000..181d448
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/DispreferReturnBeforeStatement.java
@@ -0,0 +1,7 @@
+class Util {
+  void foo(int reaction, boolean rezet) {
+    re<caret>
+    System.out.println();
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/DoNotPreferGetClass.java b/java/java-tests/testData/codeInsight/completion/normalSorting/DoNotPreferGetClass.java
new file mode 100644
index 0000000..3976c01
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/DoNotPreferGetClass.java
@@ -0,0 +1,8 @@
+import java.util.HashMap;
+
+class Util {
+  void foo(int reaction, boolean rezet) {
+    new HashMap().g<caret>x
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/DontPreferRecursiveMethod.java b/java/java-tests/testData/codeInsight/completion/normalSorting/DontPreferRecursiveMethod.java
new file mode 100644
index 0000000..a6d91ea
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/DontPreferRecursiveMethod.java
@@ -0,0 +1,7 @@
+class Foo {
+
+  void register(int registrar) {
+    regi<caret>
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/DontPreferRecursiveMethod2.java b/java/java-tests/testData/codeInsight/completion/normalSorting/DontPreferRecursiveMethod2.java
new file mode 100644
index 0000000..f6462ad
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/DontPreferRecursiveMethod2.java
@@ -0,0 +1,7 @@
+class Foo {
+
+  int register() {
+    re<caret>
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/DontPreselectLastChosenWithUnrelatedPrefix.java b/java/java-tests/testData/codeInsight/completion/normalSorting/DontPreselectLastChosenWithUnrelatedPrefix.java
new file mode 100644
index 0000000..2ffd936
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/DontPreselectLastChosenWithUnrelatedPrefix.java
@@ -0,0 +1,8 @@
+
+public class Foo {
+  Object myExtendsClause = null;
+  Object myClass = null;
+  void foo() {
+    myexc<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/EqualsStats.java b/java/java-tests/testData/codeInsight/completion/normalSorting/EqualsStats.java
new file mode 100644
index 0000000..d35a6c2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/EqualsStats.java
@@ -0,0 +1,8 @@
+import java.util.HashMap;
+
+class Util {
+  void foo(int reaction, boolean rezet) {
+    "".eq<caret>
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/ExpectedTypeIsMoreImportantThanCase.java b/java/java-tests/testData/codeInsight/completion/normalSorting/ExpectedTypeIsMoreImportantThanCase.java
new file mode 100644
index 0000000..95e9cc3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/ExpectedTypeIsMoreImportantThanCase.java
@@ -0,0 +1,9 @@
+class Foo {
+  boolean ENABLED;
+  void enable() {}
+
+  {
+    if (!en<caret>)
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/FqnStats.java b/java/java-tests/testData/codeInsight/completion/normalSorting/FqnStats.java
new file mode 100644
index 0000000..9ba3841
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/FqnStats.java
@@ -0,0 +1,4 @@
+class Foo {
+  Baaa<caret>x
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/GenericMethodsWithBoundParametersAreStillBetterThanClassLiteral.java b/java/java-tests/testData/codeInsight/completion/normalSorting/GenericMethodsWithBoundParametersAreStillBetterThanClassLiteral.java
new file mode 100644
index 0000000..8e71c84
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/GenericMethodsWithBoundParametersAreStillBetterThanClassLiteral.java
@@ -0,0 +1,17 @@
+public class ServiceManager {
+
+  public static <T> T getService(Class<T> serviceClass) {
+  }
+
+  public static <T> T getService(Project project, Class<T> serviceClass) {
+  }
+
+}
+
+
+class Foo {
+  String getFoo() {
+    return ServiceManager.<caret>
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/IfConditionStats.java b/java/java-tests/testData/codeInsight/completion/normalSorting/IfConditionStats.java
new file mode 100644
index 0000000..a93f810
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/IfConditionStats.java
@@ -0,0 +1,14 @@
+class AbstractSet<T> {
+  public boolean contains(T t) {}
+}
+
+class MySet<T> extends AbstractSet<T> {
+  public boolean containsAll(Collection<?> c) {}
+}
+
+public class Foo {
+  MySet<String> set;
+  void foo() {
+    if (set.<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/ImplsAfterNew.java b/java/java-tests/testData/codeInsight/completion/normalSorting/ImplsAfterNew.java
new file mode 100644
index 0000000..1fde709
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/ImplsAfterNew.java
@@ -0,0 +1,10 @@
+public class Aaaaaaa {
+    private final String aaa;
+
+    Aaaaaaa(Object aabbb) {
+        Xxx x = new Xx<caret>
+    }
+
+}
+
+class XxxImpl implements Xxx {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/JComponentInstanceMembers.java b/java/java-tests/testData/codeInsight/completion/normalSorting/JComponentInstanceMembers.java
new file mode 100644
index 0000000..e14adc6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/JComponentInstanceMembers.java
@@ -0,0 +1,7 @@
+import javax.swing.*;
+
+public class Foo {
+    {
+        new JPanel().<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/LocalVarsOverMethods.java b/java/java-tests/testData/codeInsight/completion/normalSorting/LocalVarsOverMethods.java
new file mode 100644
index 0000000..7dabcde7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/LocalVarsOverMethods.java
@@ -0,0 +1,8 @@
+class SomeComponent extends javax.swing.JPanel {
+  @Nullable
+  public String getSelectedItemString() {
+    final Object value = getList().getSelectedValue();
+    return val<caret>x
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/NoExpectedTypeInStringConcatenation.java b/java/java-tests/testData/codeInsight/completion/normalSorting/NoExpectedTypeInStringConcatenation.java
new file mode 100644
index 0000000..17188ee
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/NoExpectedTypeInStringConcatenation.java
@@ -0,0 +1,8 @@
+import java.lang.String;
+
+public class Foo {
+  
+  void foo(Object vx) {
+    String s = "" + v<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/PreferAnnotationMethods.java b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferAnnotationMethods.java
new file mode 100644
index 0000000..b8dc76d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferAnnotationMethods.java
@@ -0,0 +1,7 @@
+@interface Anno {
+  String value();
+  String name();
+}
+
+@Anno(<caret>)
+class Foo {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/PreferApplicableAnnotations.java b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferApplicableAnnotations.java
new file mode 100644
index 0000000..fe60807
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferApplicableAnnotations.java
@@ -0,0 +1,2 @@
+@T<caret>
+@interface Foo { }
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/PreferApplicableAnnotationsMethod.java b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferApplicableAnnotationsMethod.java
new file mode 100644
index 0000000..345e8cc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferApplicableAnnotationsMethod.java
@@ -0,0 +1,6 @@
+class Foo {
+  @T<caret>
+  public static void main(String[] args) {
+    
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/PreferBetterMatchingConstantToMethods.java b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferBetterMatchingConstantToMethods.java
new file mode 100644
index 0000000..456e747
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferBetterMatchingConstantToMethods.java
@@ -0,0 +1,10 @@
+class Foo {
+  String s = Util.se<caret>
+}
+
+class Util {
+  public static final String serial = "serialVersionUID";
+
+  public static Runnable superExpressionInIllegalContext() {}
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/PreferClassStaticMembers.java b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferClassStaticMembers.java
new file mode 100644
index 0000000..07334c2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferClassStaticMembers.java
@@ -0,0 +1,16 @@
+enum Zoo {
+    A,B,C,D,E,F,G,H
+}
+
+class Zaa {}
+class Zab {}
+class Zac {}
+class Zad {}
+class Zae {}
+
+class Bar {
+
+    {
+        Zoo z = Z<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/PreferClassToItsConstants.java b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferClassToItsConstants.java
new file mode 100644
index 0000000..75ee87c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferClassToItsConstants.java
@@ -0,0 +1,8 @@
+import java.util.Calendar;
+
+class Util {
+  void foo() {
+    Calendar.getInstance().get(Cale<caret>x)
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/PreferClassesInExtends.java b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferClassesInExtends.java
new file mode 100644
index 0000000..5da8a5c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferClassesInExtends.java
@@ -0,0 +1,8 @@
+interface Foo_Intf {}
+class FooClass {}
+
+class Goo extends Foo<caret> {
+    int boo() {}
+    int doo() {}
+    int foo() {}
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/PreferDefaultTypeToExpected.java b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferDefaultTypeToExpected.java
new file mode 100644
index 0000000..57fe800
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferDefaultTypeToExpected.java
@@ -0,0 +1,11 @@
+class Foo {
+    String getName() {}
+    Foo getNameIdentifier() {}
+}
+
+class Bar {
+    void foo() {
+       Foo f;
+        if ("abc".equals(f.getN<caret>))
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/PreferElse.java b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferElse.java
new file mode 100644
index 0000000..45ab274
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferElse.java
@@ -0,0 +1,8 @@
+class Foo {
+    {
+        Object element;
+        if (true) {}
+        el<caret>
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/PreferEnumConstants.java b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferEnumConstants.java
new file mode 100644
index 0000000..0c2ecd4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferEnumConstants.java
@@ -0,0 +1,11 @@
+public class Foo {
+  void method(MyEnum e) { }
+
+  {
+    method(<caret>);
+  }
+
+
+}
+
+enum MyEnum { foo, bar }
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/PreferFieldToMethod.java b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferFieldToMethod.java
new file mode 100644
index 0000000..7d00592
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferFieldToMethod.java
@@ -0,0 +1,6 @@
+public class Foo {
+  private int size;
+
+  public int size() { return size; }
+
+  public boolean isEmpty() { return size<caret>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/PreferFinallyToFinal.java b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferFinallyToFinal.java
new file mode 100644
index 0000000..b7e11a4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferFinallyToFinal.java
@@ -0,0 +1,6 @@
+class A {
+  {
+    try {}
+    fin<caret>x
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/PreferInterfacesInImplements.java b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferInterfacesInImplements.java
new file mode 100644
index 0000000..4809d42
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferInterfacesInImplements.java
@@ -0,0 +1,8 @@
+interface FooIntf {}
+class FooClass {}
+
+class Goo implements Foo<caret> {
+    int boo() {}
+    int doo() {}
+    int foo() {}
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/PreferKeywordsToVoidMethodsInExpectedTypeContext.java b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferKeywordsToVoidMethodsInExpectedTypeContext.java
new file mode 100644
index 0000000..bc89fef
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferKeywordsToVoidMethodsInExpectedTypeContext.java
@@ -0,0 +1,11 @@
+class Foo {
+  java.io.File f;
+
+  {
+    f = n<caret>
+  }
+
+  java.io.File noo() {}
+  Object noo2() {}
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/PreferLessHumps.java b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferLessHumps.java
new file mode 100644
index 0000000..d86bea2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferLessHumps.java
@@ -0,0 +1,12 @@
+public class Aaaaaaa {
+    private final String aaa;
+
+    Aaaaaaa(Object aabbb) {
+        if (aabbb instanceof XY<caret>)
+    }
+
+}
+
+class XaYaEx {}
+class XaYaImpl {}
+class XyYaXa {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/PreferLessParameters.java b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferLessParameters.java
new file mode 100644
index 0000000..68f8efa
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferLessParameters.java
@@ -0,0 +1,12 @@
+public class MyFirstTestClassFoo {
+
+   void foo(int a) {}
+   void foo() {}
+   void foo(int a, int b) {}
+   void fox(int a) {}
+
+    {
+        new MyFirstTestClassFoo().fo<caret>
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/PreferLocalsToStaticsInSecondCompletion.java b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferLocalsToStaticsInSecondCompletion.java
new file mode 100644
index 0000000..d12688f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferLocalsToStaticsInSecondCompletion.java
@@ -0,0 +1,7 @@
+class Util {
+  void foox() {
+    int fooy;
+    foo<caret>
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/PreferModifiers.java b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferModifiers.java
new file mode 100644
index 0000000..c3348c2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferModifiers.java
@@ -0,0 +1,9 @@
+public class Test {
+
+    p<caret>
+
+  class paaa {}
+
+  static class paab {}
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/PreferMoreMatching.java b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferMoreMatching.java
new file mode 100644
index 0000000..a9fa56e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferMoreMatching.java
@@ -0,0 +1,9 @@
+class FooOCSomething {}
+class FooObjectCollector {}
+
+class Foo {
+    {
+        FooOC<caret>
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/PreferNewExpectedInner.java b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferNewExpectedInner.java
new file mode 100644
index 0000000..bd9d046
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferNewExpectedInner.java
@@ -0,0 +1,9 @@
+class Foooo {
+  interface Bar {}
+}
+
+class Bar {
+    {
+        Foooo.Bar c = new Fooo<caret>x
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/PreferOwnInnerClasses.java b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferOwnInnerClasses.java
new file mode 100644
index 0000000..bb0f31c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferOwnInnerClasses.java
@@ -0,0 +1,9 @@
+class Foo {
+    final Yy<caret>
+
+    private static class YyyXxx {
+
+    }
+}
+
+class YyyZzz {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/PreferReturn.java b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferReturn.java
new file mode 100644
index 0000000..165abb0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferReturn.java
@@ -0,0 +1,10 @@
+public class Test {
+
+    void rMethod() {}
+
+    int foo(int rParam) {
+        Object rLocal;
+        r<caret>
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/PreferSameNamedMethods.java b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferSameNamedMethods.java
new file mode 100644
index 0000000..03d1003
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferSameNamedMethods.java
@@ -0,0 +1,15 @@
+class Goo {
+    int boo() {}
+    int doo() {}
+    int foo() {}
+}
+
+class Foooo {
+    Goo g;
+
+    int foo() {
+        return g.<caret>
+    }
+
+}
+
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/PreferSamePackageOverImported.java b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferSamePackageOverImported.java
new file mode 100644
index 0000000..78694fe
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferSamePackageOverImported.java
@@ -0,0 +1,9 @@
+import bar.*;
+
+public class Test {
+
+  {
+    Bar<caret>
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/PreferSuperMethods.java b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferSuperMethods.java
new file mode 100644
index 0000000..12d31ea
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferSuperMethods.java
@@ -0,0 +1,10 @@
+class Foo {
+    void bar() {}
+    void foo() {}
+}
+
+class Bar extends Foo {
+    void foo() {
+        super.<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/PreferTopLevelClasses.java b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferTopLevelClasses.java
new file mode 100644
index 0000000..4765d10
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferTopLevelClasses.java
@@ -0,0 +1,10 @@
+public class TestClass {
+    public TestClass create(XxY<caret>) {
+    }
+}
+
+class XxxYyy {}
+
+class Aaa {
+    static class XxzYyy{}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/PreselectLastChosen.java b/java/java-tests/testData/codeInsight/completion/normalSorting/PreselectLastChosen.java
new file mode 100644
index 0000000..1ba0558
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/PreselectLastChosen.java
@@ -0,0 +1,7 @@
+import java.util.Set;
+
+public class Foo {
+  void foo(Set<String> set) {
+    set.ad<caret>x
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/PreselectMostRelevantInTheMiddleAlpha.java b/java/java-tests/testData/codeInsight/completion/normalSorting/PreselectMostRelevantInTheMiddleAlpha.java
new file mode 100644
index 0000000..34da2cf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/PreselectMostRelevantInTheMiddleAlpha.java
@@ -0,0 +1,17 @@
+class Foo {
+  int ELXEMENT_A = 1;
+  int ELXEMENT_B = 1;
+  int ELXEMENT_C = 1;
+  int ELXEMENT_D = 1;
+  int ELXEMENT_E = 1;
+  int ELXEMENT_F = 1;
+  int ELXEMENT_G = 1;
+  int ELXEMENT_H = 1;
+  int ELXEMENT_I = 1;
+
+
+    {
+        Elx<caret>
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/ReallyAlphaSorting.java b/java/java-tests/testData/codeInsight/completion/normalSorting/ReallyAlphaSorting.java
new file mode 100644
index 0000000..4fcc11b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/ReallyAlphaSorting.java
@@ -0,0 +1,8 @@
+class Foo {
+  void zoo() {}
+
+  {
+    new Foo().<caret>
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/ReturnF.java b/java/java-tests/testData/codeInsight/completion/normalSorting/ReturnF.java
new file mode 100644
index 0000000..065a361
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/ReturnF.java
@@ -0,0 +1,5 @@
+class Foo {
+    boolean zoo(String s) {
+      return f<caret>x
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/SameStatsForDifferentQualifiersJComponent.java b/java/java-tests/testData/codeInsight/completion/normalSorting/SameStatsForDifferentQualifiersJComponent.java
new file mode 100644
index 0000000..4f4dfa7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/SameStatsForDifferentQualifiersJComponent.java
@@ -0,0 +1,9 @@
+import javax.swing.*;
+
+public class MyFirstTestClassFoo {
+
+  void foo(JComponent c) {
+    c.getCom<caret>x
+  }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/SameStatsForDifferentQualifiersJLabel.java b/java/java-tests/testData/codeInsight/completion/normalSorting/SameStatsForDifferentQualifiersJLabel.java
new file mode 100644
index 0000000..defdba5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/SameStatsForDifferentQualifiersJLabel.java
@@ -0,0 +1,9 @@
+import javax.swing.*;
+
+public class MyFirstTestClassFoo {
+
+  void foo(JLabel l) {
+    l.getCompo<caret>x
+  }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/ShorterPrefixesGoFirst.html b/java/java-tests/testData/codeInsight/completion/normalSorting/ShorterPrefixesGoFirst.html
new file mode 100644
index 0000000..fe6254d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/ShorterPrefixesGoFirst.html
@@ -0,0 +1 @@
+<p<caret>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/ShorterShouldBePreselected.java b/java/java-tests/testData/codeInsight/completion/normalSorting/ShorterShouldBePreselected.java
new file mode 100644
index 0000000..18c7b4a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/ShorterShouldBePreselected.java
@@ -0,0 +1,11 @@
+class Foo {
+    String fooLongButOfDefaultType() {}
+    Foo foo() {}
+}
+
+class Bar {
+    void foo() {
+        Foo f;
+        if ("abc".equals(f.foo<caret>))
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/SkipLifted.java b/java/java-tests/testData/codeInsight/completion/normalSorting/SkipLifted.java
new file mode 100644
index 0000000..4763b02
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/SkipLifted.java
@@ -0,0 +1,8 @@
+class Foo {
+  {
+    hashCo<caret>x
+  }
+
+  int hashCodeMine() {}
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/SortSameNamedVariantsByProximity.java b/java/java-tests/testData/codeInsight/completion/normalSorting/SortSameNamedVariantsByProximity.java
new file mode 100644
index 0000000..dc49a79
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/SortSameNamedVariantsByProximity.java
@@ -0,0 +1,9 @@
+import sun.swing.BakedArrayList;
+
+class Foo {
+    {
+        Object element;
+        if (element instanceof Bar<caret>)
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/StatisticsByPrefix.java b/java/java-tests/testData/codeInsight/completion/normalSorting/StatisticsByPrefix.java
new file mode 100644
index 0000000..3e96c04
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/StatisticsByPrefix.java
@@ -0,0 +1,6 @@
+class FooBar {
+  int _foo1, _foo2, _boo1, _boo2, _goo1, _goo2;
+  {
+    <caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/StatisticsMattersOnNextCompletion.java b/java/java-tests/testData/codeInsight/completion/normalSorting/StatisticsMattersOnNextCompletion.java
new file mode 100644
index 0000000..b992e14
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/StatisticsMattersOnNextCompletion.java
@@ -0,0 +1,8 @@
+class JComponent {}
+class JComboBox {}
+
+class FooBar {
+  void foo() {
+    JCom<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/StatsForClassNameInExpression.java b/java/java-tests/testData/codeInsight/completion/normalSorting/StatsForClassNameInExpression.java
new file mode 100644
index 0000000..dc5646f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/StatsForClassNameInExpression.java
@@ -0,0 +1,7 @@
+public class MyFirstTestClassFoo {
+
+  int foo() {
+    return FooB<caret>.fff().zoo();
+  }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/StatsMoreImportantThanExpectedType.java b/java/java-tests/testData/codeInsight/completion/normalSorting/StatsMoreImportantThanExpectedType.java
new file mode 100644
index 0000000..2f1162c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/StatsMoreImportantThanExpectedType.java
@@ -0,0 +1,22 @@
+public class AnotherTestClass {
+  public static void main(String[] args) throws IOException {
+    test(getnu<caret>);
+  }
+
+  private static void test(int i, int j) {
+  }
+
+  public static NumberProvider getNumProvider() {
+    return new NumberProvider();
+  }
+
+  public static int getNumber() {
+    return 1;
+  }
+
+  private static class NumberProvider {
+    public int getNumber() {
+      return 1;
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/SubstringVsSubSequence.java b/java/java-tests/testData/codeInsight/completion/normalSorting/SubstringVsSubSequence.java
new file mode 100644
index 0000000..be563ed
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/SubstringVsSubSequence.java
@@ -0,0 +1,6 @@
+class Foo {
+    void foo(String s) {}
+    {
+        foo("aaa".sub<caret>)
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/UnderscoresDontMakeMatchMiddle.java b/java/java-tests/testData/codeInsight/completion/normalSorting/UnderscoresDontMakeMatchMiddle.java
new file mode 100644
index 0000000..7867e34
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/UnderscoresDontMakeMatchMiddle.java
@@ -0,0 +1,5 @@
+class FooBar {
+  void foo(FooBar _fooBar) {
+    fb<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/UppercaseMatters2.java b/java/java-tests/testData/codeInsight/completion/normalSorting/UppercaseMatters2.java
new file mode 100644
index 0000000..b09f76b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/UppercaseMatters2.java
@@ -0,0 +1,9 @@
+class Foo {
+  {
+    Object classLOSomething;
+    Object classLoader;
+    Object classLoader2;
+    cLo<caret>
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/reflection/DeclaredField.java b/java/java-tests/testData/codeInsight/completion/reflection/DeclaredField.java
new file mode 100644
index 0000000..88111a4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/reflection/DeclaredField.java
@@ -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 DeclaredField {
+  void foo() {
+    Test.class.getDeclaredField("<caret>");
+  }
+}
+
+class Test {
+  public int num;
+  public int num2;
+  int num3;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/reflection/DeclaredField_after.java b/java/java-tests/testData/codeInsight/completion/reflection/DeclaredField_after.java
new file mode 100644
index 0000000..924c8f0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/reflection/DeclaredField_after.java
@@ -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 DeclaredField {
+  void foo() {
+    Test.class.getDeclaredField("num2");
+  }
+}
+
+class Test {
+  public int num;
+  public int num2;
+  int num3;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/reflection/DeclaredMethod.java b/java/java-tests/testData/codeInsight/completion/reflection/DeclaredMethod.java
new file mode 100644
index 0000000..5abc4c4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/reflection/DeclaredMethod.java
@@ -0,0 +1,30 @@
+/*
+ * 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 DecalredMethod {
+  void foo() {
+    Test.class.getDeclaredMethod("<caret>");
+  }
+}
+
+class Test {
+  public void method(){}
+  public void method2(A a, B b){}
+  public void method3(){}
+}
+
+class A {}
+class B {}
+class C {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/reflection/DeclaredMethod2.java b/java/java-tests/testData/codeInsight/completion/reflection/DeclaredMethod2.java
new file mode 100644
index 0000000..7c63f9b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/reflection/DeclaredMethod2.java
@@ -0,0 +1,30 @@
+/*
+ * 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 DecalredMethod2 {
+  void foo() {
+    Test.class.getDeclaredMethod("m<caret>", A.class, B.class);
+  }
+}
+
+class Test {
+  void method(){}
+  void method2(A a, B b){}
+  void method3(){}
+}
+
+class A {}
+class B {}
+class C {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/reflection/DeclaredMethod2_after.java b/java/java-tests/testData/codeInsight/completion/reflection/DeclaredMethod2_after.java
new file mode 100644
index 0000000..f9d56a0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/reflection/DeclaredMethod2_after.java
@@ -0,0 +1,30 @@
+/*
+ * 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 DecalredMethod2 {
+  void foo() {
+    Test.class.getDeclaredMethod("method3");
+  }
+}
+
+class Test {
+  void method(){}
+  void method2(A a, B b){}
+  void method3(){}
+}
+
+class A {}
+class B {}
+class C {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/reflection/DeclaredMethod_after.java b/java/java-tests/testData/codeInsight/completion/reflection/DeclaredMethod_after.java
new file mode 100644
index 0000000..c6c0d5b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/reflection/DeclaredMethod_after.java
@@ -0,0 +1,30 @@
+/*
+ * 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 DecalredMethod {
+  void foo() {
+    Test.class.getDeclaredMethod("method2", A.class, B.class);
+  }
+}
+
+class Test {
+  public void method(){}
+  public void method2(A a, B b){}
+  public void method3(){}
+}
+
+class A {}
+class B {}
+class C {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/reflection/Field.java b/java/java-tests/testData/codeInsight/completion/reflection/Field.java
new file mode 100644
index 0000000..1d39408e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/reflection/Field.java
@@ -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 Field {
+  void foo() {
+    Test.class.getField("<caret>");
+  }
+}
+
+class Test {
+  public int num;
+  public int num2;
+  int num3;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/reflection/Field_after.java b/java/java-tests/testData/codeInsight/completion/reflection/Field_after.java
new file mode 100644
index 0000000..352645d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/reflection/Field_after.java
@@ -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 Field {
+  void foo() {
+    Test.class.getField("num2");
+  }
+}
+
+class Test {
+  public int num;
+  public int num2;
+  int num3;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/reflection/ForNameDeclaredField.java b/java/java-tests/testData/codeInsight/completion/reflection/ForNameDeclaredField.java
new file mode 100644
index 0000000..b8111ab
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/reflection/ForNameDeclaredField.java
@@ -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 ForNameDeclaredField {
+  void foo() {
+    Class.forName("Test").getDeclaredField("<caret>");
+  }
+}
+
+class Test {
+  public int num;
+  public int num2;
+  int num3;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/reflection/ForNameDeclaredField_after.java b/java/java-tests/testData/codeInsight/completion/reflection/ForNameDeclaredField_after.java
new file mode 100644
index 0000000..b6224c1f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/reflection/ForNameDeclaredField_after.java
@@ -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 ForNameDeclaredField {
+  void foo() {
+    Class.forName("Test").getDeclaredField("num3");
+  }
+}
+
+class Test {
+  public int num;
+  public int num2;
+  int num3;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/reflection/ForNameDeclaredMethod.java b/java/java-tests/testData/codeInsight/completion/reflection/ForNameDeclaredMethod.java
new file mode 100644
index 0000000..9f2d2ae
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/reflection/ForNameDeclaredMethod.java
@@ -0,0 +1,30 @@
+/*
+ * 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 ForNameDeclaredMethod {
+  void foo() {
+    Class.forName("Test").getDeclaredMethod("<caret>");
+  }
+}
+
+class Test {
+  public void method(){}
+  public void method2(A a, B b){}
+  void method3(){}
+}
+
+class A {}
+class B {}
+class C {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/reflection/ForNameDeclaredMethod_after.java b/java/java-tests/testData/codeInsight/completion/reflection/ForNameDeclaredMethod_after.java
new file mode 100644
index 0000000..ff165cfc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/reflection/ForNameDeclaredMethod_after.java
@@ -0,0 +1,30 @@
+/*
+ * 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 ForNameDeclaredMethod {
+  void foo() {
+    Class.forName("Test").getDeclaredMethod("method2", A.class, B.class);
+  }
+}
+
+class Test {
+  public void method(){}
+  public void method2(A a, B b){}
+  void method3(){}
+}
+
+class A {}
+class B {}
+class C {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/reflection/ForNameField.java b/java/java-tests/testData/codeInsight/completion/reflection/ForNameField.java
new file mode 100644
index 0000000..ace6e48
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/reflection/ForNameField.java
@@ -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 ForNameField {
+  void foo() {
+    Class.forName("Test").getField("<caret>");
+  }
+}
+
+class Test {
+  public int num;
+  public int num2;
+  int num3;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/reflection/ForNameField_after.java b/java/java-tests/testData/codeInsight/completion/reflection/ForNameField_after.java
new file mode 100644
index 0000000..c8c6d5e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/reflection/ForNameField_after.java
@@ -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 ForNameField {
+  void foo() {
+    Class.forName("Test").getField("num2");
+  }
+}
+
+class Test {
+  public int num;
+  public int num2;
+  int num3;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/reflection/ForNameMethod.java b/java/java-tests/testData/codeInsight/completion/reflection/ForNameMethod.java
new file mode 100644
index 0000000..9789073
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/reflection/ForNameMethod.java
@@ -0,0 +1,30 @@
+/*
+ * 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 ForNameMethod {
+  void foo() {
+    Class.forName("Test").getMethod("<caret>");
+  }
+}
+
+class Test {
+  public void method(){}
+  public void method2(A a, B b){}
+  void method3(){}
+}
+
+class A {}
+class B {}
+class C {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/reflection/ForNameMethod_after.java b/java/java-tests/testData/codeInsight/completion/reflection/ForNameMethod_after.java
new file mode 100644
index 0000000..8a1412e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/reflection/ForNameMethod_after.java
@@ -0,0 +1,30 @@
+/*
+ * 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 ForNameMethod {
+  void foo() {
+    Class.forName("Test").getMethod("method2", A.class, B.class);
+  }
+}
+
+class Test {
+  public void method(){}
+  public void method2(A a, B b){}
+  void method3(){}
+}
+
+class A {}
+class B {}
+class C {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/reflection/Generics.java b/java/java-tests/testData/codeInsight/completion/reflection/Generics.java
new file mode 100644
index 0000000..505c742
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/reflection/Generics.java
@@ -0,0 +1,25 @@
+/*
+ * 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 Generics {
+  void foo() {
+    Test.class.getMethod("<caret>");
+  }
+}
+
+class Test {
+  public void foo(A<? extends Test> name) {}
+}
+class A<K> {}
diff --git a/java/java-tests/testData/codeInsight/completion/reflection/Generics_after.java b/java/java-tests/testData/codeInsight/completion/reflection/Generics_after.java
new file mode 100644
index 0000000..afdc1ea
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/reflection/Generics_after.java
@@ -0,0 +1,25 @@
+/*
+ * 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 Generics {
+  void foo() {
+    Test.class.getMethod("foo", A.class);
+  }
+}
+
+class Test {
+  public void foo(A<? extends Test> name) {}
+}
+class A<K> {}
diff --git a/java/java-tests/testData/codeInsight/completion/reflection/Method.java b/java/java-tests/testData/codeInsight/completion/reflection/Method.java
new file mode 100644
index 0000000..d6e0b96
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/reflection/Method.java
@@ -0,0 +1,30 @@
+/*
+ * 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 DecalredMethod {
+  void foo() {
+    Test.class.getMethod("<caret>");
+  }
+}
+
+class Test {
+  public void method(){}
+  public void method2(A a, B b){}
+  void method3(){}
+}
+
+class A {}
+class B {}
+class C {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/reflection/Method_after.java b/java/java-tests/testData/codeInsight/completion/reflection/Method_after.java
new file mode 100644
index 0000000..986c6e2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/reflection/Method_after.java
@@ -0,0 +1,30 @@
+/*
+ * 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 DecalredMethod {
+  void foo() {
+    Test.class.getMethod("method2", A.class, B.class);
+  }
+}
+
+class Test {
+  public void method(){}
+  public void method2(A a, B b){}
+  void method3(){}
+}
+
+class A {}
+class B {}
+class C {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/AbstractClassTwice.java b/java/java-tests/testData/codeInsight/completion/smartType/AbstractClassTwice.java
new file mode 100644
index 0000000..d27017a8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/AbstractClassTwice.java
@@ -0,0 +1,3 @@
+abstract class Foo {
+  Foo f = new <caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/AfterNewInTernary-out.java b/java/java-tests/testData/codeInsight/completion/smartType/AfterNewInTernary-out.java
new file mode 100644
index 0000000..d18e846
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/AfterNewInTernary-out.java
@@ -0,0 +1,5 @@
+class User {
+    {
+        String s = new String(<caret>) == null ? getDefaultEjbName() : s;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/AfterNewInTernary.java b/java/java-tests/testData/codeInsight/completion/smartType/AfterNewInTernary.java
new file mode 100644
index 0000000..8d0c024
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/AfterNewInTernary.java
@@ -0,0 +1,5 @@
+class User {
+    {
+        String s = new <caret> == null ? getDefaultEjbName() : s;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/AfterNewWithGenerics-out.java b/java/java-tests/testData/codeInsight/completion/smartType/AfterNewWithGenerics-out.java
new file mode 100644
index 0000000..0984e6a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/AfterNewWithGenerics-out.java
@@ -0,0 +1,15 @@
+class Pair<A, B> {
+  public final A first;
+  public final B second;
+
+  Pair(A first, B second) {
+    this.first = first;
+    this.second = second;
+  }
+}
+
+class Test {
+    void test(Pair<String, Integer> p) {
+        Pair<String, Integer> p2 = new Pair<String, Integer>(p.first, <caret>);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/AfterNewWithGenerics.java b/java/java-tests/testData/codeInsight/completion/smartType/AfterNewWithGenerics.java
new file mode 100644
index 0000000..eb46f9f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/AfterNewWithGenerics.java
@@ -0,0 +1,15 @@
+class Pair<A, B> {
+  public final A first;
+  public final B second;
+
+  Pair(A first, B second) {
+    this.first = first;
+    this.second = second;
+  }
+}
+
+class Test {
+    void test(Pair<String, Integer> p) {
+        Pair<String, Integer> p2 = new Pair<String, Integer>(p.f<caret>);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/AfterQualifiedNew-out.java b/java/java-tests/testData/codeInsight/completion/smartType/AfterQualifiedNew-out.java
new file mode 100644
index 0000000..acaacdf4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/AfterQualifiedNew-out.java
@@ -0,0 +1,5 @@
+class A {{
+  Aa a = new Aa();
+
+  Aa.B b = a.new B();<caret>
+}}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/AfterQualifiedNew.java b/java/java-tests/testData/codeInsight/completion/smartType/AfterQualifiedNew.java
new file mode 100644
index 0000000..667f0a3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/AfterQualifiedNew.java
@@ -0,0 +1,5 @@
+class A {{
+  Aa a = new Aa();
+
+  Aa.B b = a.new <caret>
+}}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/AmbiguousConstant-out.java b/java/java-tests/testData/codeInsight/completion/smartType/AmbiguousConstant-out.java
new file mode 100644
index 0000000..3b199d7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/AmbiguousConstant-out.java
@@ -0,0 +1,15 @@
+interface Foo {
+  int ABC = 1;
+}
+
+interface Bar extends Foo {
+  boolean ABC = 2;
+}
+
+class FooImpl implements Foo {}
+
+class BarImpl extends FooImpl implements Bar {
+  {
+    boolean a = Bar.ABC;<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/AmbiguousConstant.java b/java/java-tests/testData/codeInsight/completion/smartType/AmbiguousConstant.java
new file mode 100644
index 0000000..8bddaaa
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/AmbiguousConstant.java
@@ -0,0 +1,15 @@
+interface Foo {
+  int ABC = 1;
+}
+
+interface Bar extends Foo {
+  boolean ABC = 2;
+}
+
+class FooImpl implements Foo {}
+
+class BarImpl extends FooImpl implements Bar {
+  {
+    boolean a = A<caret>;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/Annotation.java b/java/java-tests/testData/codeInsight/completion/smartType/Annotation.java
new file mode 100644
index 0000000..3b986c7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/Annotation.java
@@ -0,0 +1,5 @@
+import java.lang.annotation.Target;
+@Target(value={<caret>})
+@interface Annotation {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/Annotation2.java b/java/java-tests/testData/codeInsight/completion/smartType/Annotation2.java
new file mode 100644
index 0000000..f4c8343
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/Annotation2.java
@@ -0,0 +1,5 @@
+import java.lang.annotation.Retention;
+@Retention(<caret>)
+@interface Annotation {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/Annotation2_2.java b/java/java-tests/testData/codeInsight/completion/smartType/Annotation2_2.java
new file mode 100644
index 0000000..77cedc2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/Annotation2_2.java
@@ -0,0 +1,5 @@
+import java.lang.annotation.Retention;
+@Retention(value=<caret>)
+@interface Annotation {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/Annotation3-out.java b/java/java-tests/testData/codeInsight/completion/smartType/Annotation3-out.java
new file mode 100644
index 0000000..8e790eb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/Annotation3-out.java
@@ -0,0 +1,13 @@
+@interface Table {
+  int columnCount();
+}
+
+@interface Join {
+  Table table();
+}
+
+
+@Join(table = @Table(<caret>) )
+@interface Annotation {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/Annotation3.java b/java/java-tests/testData/codeInsight/completion/smartType/Annotation3.java
new file mode 100644
index 0000000..209b83d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/Annotation3.java
@@ -0,0 +1,13 @@
+@interface Table {
+  int columnCount();
+}
+
+@interface Join {
+  Table table();
+}
+
+
+@Join(table = <caret> )
+@interface Annotation {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/Annotation3_2-out.java b/java/java-tests/testData/codeInsight/completion/smartType/Annotation3_2-out.java
new file mode 100644
index 0000000..888338a3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/Annotation3_2-out.java
@@ -0,0 +1,17 @@
+@interface Column {
+  String name();
+}
+
+@interface Table {
+  Column id();
+}
+
+@interface Join {
+  Table[] table();
+}
+
+
+@Join({@Table(id = @Column(<caret>))} )
+@interface Annotation {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/Annotation3_2.java b/java/java-tests/testData/codeInsight/completion/smartType/Annotation3_2.java
new file mode 100644
index 0000000..6dd157d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/Annotation3_2.java
@@ -0,0 +1,17 @@
+@interface Column {
+  String name();
+}
+
+@interface Table {
+  Column id();
+}
+
+@interface Join {
+  Table[] table();
+}
+
+
+@Join({@Table(id = <caret>)} )
+@interface Annotation {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/Annotation4-out.java b/java/java-tests/testData/codeInsight/completion/smartType/Annotation4-out.java
new file mode 100644
index 0000000..dd32bc1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/Annotation4-out.java
@@ -0,0 +1,8 @@
+@interface Join {
+  boolean nestedLoops();
+}
+
+@Join(nestedLoops = <caret> )
+@interface Annotation {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/Annotation4.java b/java/java-tests/testData/codeInsight/completion/smartType/Annotation4.java
new file mode 100644
index 0000000..dd32bc1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/Annotation4.java
@@ -0,0 +1,8 @@
+@interface Join {
+  boolean nestedLoops();
+}
+
+@Join(nestedLoops = <caret> )
+@interface Annotation {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/Annotation5-out.java b/java/java-tests/testData/codeInsight/completion/smartType/Annotation5-out.java
new file mode 100644
index 0000000..c074aa9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/Annotation5-out.java
@@ -0,0 +1,16 @@
+enum Setup {
+  NO_CONNECTION,
+  CONNECTION
+}
+
+@Target(value = ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Test {
+  Setup setup();
+}
+
+public class Client {
+  @Test(setup = Setup.<caret>)
+  public void run() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/Annotation5.java b/java/java-tests/testData/codeInsight/completion/smartType/Annotation5.java
new file mode 100644
index 0000000..c074aa9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/Annotation5.java
@@ -0,0 +1,16 @@
+enum Setup {
+  NO_CONNECTION,
+  CONNECTION
+}
+
+@Target(value = ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Test {
+  Setup setup();
+}
+
+public class Client {
+  @Test(setup = Setup.<caret>)
+  public void run() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/Annotation6.java b/java/java-tests/testData/codeInsight/completion/smartType/Annotation6.java
new file mode 100644
index 0000000..15838a2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/Annotation6.java
@@ -0,0 +1,5 @@
+import java.lang.annotation.Target;
+
+@Target(<caret>)
+public @interface Test {
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/AnonymousNoPairBracket-out.java b/java/java-tests/testData/codeInsight/completion/smartType/AnonymousNoPairBracket-out.java
new file mode 100644
index 0000000..20da698
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/AnonymousNoPairBracket-out.java
@@ -0,0 +1,11 @@
+public class Bar {
+    {
+        new Thread(new Runnable() {
+            @Override
+            public void run() {
+                <selection>//To change body of implemented methods use File | Settings | File Templates.</selection>
+            }
+        })
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/AnonymousNoPairBracket.java b/java/java-tests/testData/codeInsight/completion/smartType/AnonymousNoPairBracket.java
new file mode 100644
index 0000000..9ea4a46
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/AnonymousNoPairBracket.java
@@ -0,0 +1,6 @@
+public class Bar {
+    {
+        new Thread(new Run<caret>)
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ArrayAccessIndex-out.java b/java/java-tests/testData/codeInsight/completion/smartType/ArrayAccessIndex-out.java
new file mode 100644
index 0000000..8cae38f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ArrayAccessIndex-out.java
@@ -0,0 +1,7 @@
+public class Foo {
+    {
+        int pppp;
+        int[] aaaa;
+        aaaa[pppp<caret>]
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ArrayAccessIndex.java b/java/java-tests/testData/codeInsight/completion/smartType/ArrayAccessIndex.java
new file mode 100644
index 0000000..2522531
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ArrayAccessIndex.java
@@ -0,0 +1,7 @@
+public class Foo {
+    {
+        int pppp;
+        int[] aaaa;
+        aaaa[p<caret>]
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ArrayAnnoParameter-out.java b/java/java-tests/testData/codeInsight/completion/smartType/ArrayAnnoParameter-out.java
new file mode 100644
index 0000000..8c76cb0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ArrayAnnoParameter-out.java
@@ -0,0 +1,10 @@
+public @interface A {
+   String[] value();
+}
+
+class WontComplete {
+   public static final String STRING = "aaaaa";
+
+   @A(STRING<caret>{"x"})
+   int x;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ArrayAnnoParameter.java b/java/java-tests/testData/codeInsight/completion/smartType/ArrayAnnoParameter.java
new file mode 100644
index 0000000..690e599
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ArrayAnnoParameter.java
@@ -0,0 +1,10 @@
+public @interface A {
+   String[] value();
+}
+
+class WontComplete {
+   public static final String STRING = "aaaaa";
+
+   @A(<caret>{"x"})
+   int x;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ArrayClone-out.java b/java/java-tests/testData/codeInsight/completion/smartType/ArrayClone-out.java
new file mode 100644
index 0000000..3c7a265
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ArrayClone-out.java
@@ -0,0 +1,6 @@
+public class ArrayClone {
+    public static void main(String[] arg) {
+        String[] strings1 = {""};
+        String[] strings2 = strings1.clone();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ArrayClone.java b/java/java-tests/testData/codeInsight/completion/smartType/ArrayClone.java
new file mode 100644
index 0000000..025398d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ArrayClone.java
@@ -0,0 +1,6 @@
+public class ArrayClone {
+    public static void main(String[] arg) {
+        String[] strings1 = {""};
+        String[] strings2 = strings1.cl<caret>();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ArrayIndexTailType-out.java b/java/java-tests/testData/codeInsight/completion/smartType/ArrayIndexTailType-out.java
new file mode 100644
index 0000000..093cd7c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ArrayIndexTailType-out.java
@@ -0,0 +1,10 @@
+public class Foo {
+
+    {
+        int abcdef;
+        int[] xxx;
+        int z = xxx[abcdef<caret>]
+
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ArrayIndexTailType.java b/java/java-tests/testData/codeInsight/completion/smartType/ArrayIndexTailType.java
new file mode 100644
index 0000000..1dc2aa6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ArrayIndexTailType.java
@@ -0,0 +1,10 @@
+public class Foo {
+
+    {
+        int abcdef;
+        int[] xxx;
+        int z = xxx[a<caret>]
+
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ArrayInitializerBeforeVarargs-out.java b/java/java-tests/testData/codeInsight/completion/smartType/ArrayInitializerBeforeVarargs-out.java
new file mode 100644
index 0000000..bec60ac
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ArrayInitializerBeforeVarargs-out.java
@@ -0,0 +1,5 @@
+class Super {
+  void foo(String[] params, int... indices) {
+      foo(new String[]{<caret>}, 0);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ArrayInitializerBeforeVarargs.java b/java/java-tests/testData/codeInsight/completion/smartType/ArrayInitializerBeforeVarargs.java
new file mode 100644
index 0000000..a783d14
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ArrayInitializerBeforeVarargs.java
@@ -0,0 +1,5 @@
+class Super {
+  void foo(String[] params, int... indices) {
+      foo(new <caret>, 0);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/AssertThatMatcher-out.java b/java/java-tests/testData/codeInsight/completion/smartType/AssertThatMatcher-out.java
new file mode 100644
index 0000000..fe57795
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/AssertThatMatcher-out.java
@@ -0,0 +1,13 @@
+import java.util.List;
+
+public class Zoo2 {
+    <T> void assertThat(T t, List<T> tt) { }
+    <T> List<T> wrap(T t) { }
+
+    public void main(String[] args) {
+        assertThat(args, wrap(args)<caret>);
+    }
+
+}
+
+
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/AssertThatMatcher.java b/java/java-tests/testData/codeInsight/completion/smartType/AssertThatMatcher.java
new file mode 100644
index 0000000..149254e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/AssertThatMatcher.java
@@ -0,0 +1,13 @@
+import java.util.List;
+
+public class Zoo2 {
+    <T> void assertThat(T t, List<T> tt) { }
+    <T> List<T> wrap(T t) { }
+
+    public void main(String[] args) {
+        assertThat(args, wrap(<caret>));
+    }
+
+}
+
+
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/AssignFromTheSameFieldOfAnotherObject-out.java b/java/java-tests/testData/codeInsight/completion/smartType/AssignFromTheSameFieldOfAnotherObject-out.java
new file mode 100644
index 0000000..fa8d90f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/AssignFromTheSameFieldOfAnotherObject-out.java
@@ -0,0 +1,8 @@
+class Foo {
+    int foo;
+
+    {
+        Foo f;
+        foo = f.foo;<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/AssignFromTheSameFieldOfAnotherObject.java b/java/java-tests/testData/codeInsight/completion/smartType/AssignFromTheSameFieldOfAnotherObject.java
new file mode 100644
index 0000000..9e3f69b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/AssignFromTheSameFieldOfAnotherObject.java
@@ -0,0 +1,8 @@
+class Foo {
+    int foo;
+
+    {
+        Foo f;
+        foo = f.f<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/AssignableToAfterCast-out.java b/java/java-tests/testData/codeInsight/completion/smartType/AssignableToAfterCast-out.java
new file mode 100644
index 0000000..6a1511f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/AssignableToAfterCast-out.java
@@ -0,0 +1,8 @@
+public class ZZZ {
+       Object foo();
+
+        {
+            ZZZ z;
+            ZZZ y = (ZZZ ) z.foo()<caret>
+        }
+    }
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/AssignableToAfterCast.java b/java/java-tests/testData/codeInsight/completion/smartType/AssignableToAfterCast.java
new file mode 100644
index 0000000..5f42aeb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/AssignableToAfterCast.java
@@ -0,0 +1,8 @@
+public class ZZZ {
+       Object foo();
+
+        {
+            ZZZ z;
+            ZZZ y = (ZZZ ) z.f<caret>
+        }
+    }
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/AutoCastWhenAlreadyCasted-out.java b/java/java-tests/testData/codeInsight/completion/smartType/AutoCastWhenAlreadyCasted-out.java
new file mode 100644
index 0000000..01e3051
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/AutoCastWhenAlreadyCasted-out.java
@@ -0,0 +1,9 @@
+class B {
+  {
+      Object o;
+      if (o instanceof String) {
+          String s = (String) o;
+          String ss = (String) o;<caret>
+      }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/AutoCastWhenAlreadyCasted.java b/java/java-tests/testData/codeInsight/completion/smartType/AutoCastWhenAlreadyCasted.java
new file mode 100644
index 0000000..34cc868
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/AutoCastWhenAlreadyCasted.java
@@ -0,0 +1,9 @@
+class B {
+  {
+      Object o;
+      if (o instanceof String) {
+          String s = (String) o;
+          String ss = o<caret>
+      }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/BeforeBinaryExpressionInMethodCall-out.java b/java/java-tests/testData/codeInsight/completion/smartType/BeforeBinaryExpressionInMethodCall-out.java
new file mode 100644
index 0000000..6eb3407
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/BeforeBinaryExpressionInMethodCall-out.java
@@ -0,0 +1,10 @@
+public class Foo {
+
+    {
+        Foo foo = null;
+        Foo bar = id(foo, <caret>Foo.class.toString() + "[]"));
+    }
+
+    Foo id(Foo foo, String a) {return foo;}
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/BeforeBinaryExpressionInMethodCall.java b/java/java-tests/testData/codeInsight/completion/smartType/BeforeBinaryExpressionInMethodCall.java
new file mode 100644
index 0000000..013b71f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/BeforeBinaryExpressionInMethodCall.java
@@ -0,0 +1,10 @@
+public class Foo {
+
+    {
+        Foo foo = null;
+        Foo bar = id(f<caret>Foo.class.toString() + "[]"));
+    }
+
+    Foo id(Foo foo, String a) {return foo;}
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/BeforeCastToArray-out.java b/java/java-tests/testData/codeInsight/completion/smartType/BeforeCastToArray-out.java
new file mode 100644
index 0000000..d33efbd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/BeforeCastToArray-out.java
@@ -0,0 +1,8 @@
+class Foo {
+    public static final Foo[] EMPTY_ARRAY = new Foo[0];
+
+    public Foo[] foo(boolean b){
+        return EMPTY_ARRAY;<caret>(Bar[]);
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/BeforeCastToArray.java b/java/java-tests/testData/codeInsight/completion/smartType/BeforeCastToArray.java
new file mode 100644
index 0000000..6d1621e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/BeforeCastToArray.java
@@ -0,0 +1,8 @@
+class Foo {
+    public static final Foo[] EMPTY_ARRAY = new Foo[0];
+
+    public Foo[] foo(boolean b){
+        return EMA<caret>(Bar[]);
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/BreakLabel-out.java b/java/java-tests/testData/codeInsight/completion/smartType/BreakLabel-out.java
new file mode 100644
index 0000000..5b484ac
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/BreakLabel-out.java
@@ -0,0 +1,8 @@
+public class Util {
+  void foo(int labInt) {
+    label:
+    while (true) {
+      break label;<caret>
+    }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/BreakLabel.java b/java/java-tests/testData/codeInsight/completion/smartType/BreakLabel.java
new file mode 100644
index 0000000..c3ddefc7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/BreakLabel.java
@@ -0,0 +1,8 @@
+public class Util {
+  void foo(int labInt) {
+    label:
+    while (true) {
+      break l<caret>
+    }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/Bug1-out.java b/java/java-tests/testData/codeInsight/completion/smartType/Bug1-out.java
new file mode 100644
index 0000000..3f15d9f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/Bug1-out.java
@@ -0,0 +1,12 @@
+
+public class QQQ {
+  void f(QQQ q) { }
+
+  {
+    new Runnable() {
+      public void run() {
+        f(QQQ.this);<caret>
+      }
+    };
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/Bug1.java b/java/java-tests/testData/codeInsight/completion/smartType/Bug1.java
new file mode 100644
index 0000000..375826d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/Bug1.java
@@ -0,0 +1,12 @@
+
+public class QQQ {
+  void f(QQQ q) { }
+
+  {
+    new Runnable() {
+      public void run() {
+        f(<caret>);
+      }
+    };
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/Bug2.java b/java/java-tests/testData/codeInsight/completion/smartType/Bug2.java
new file mode 100644
index 0000000..32fe05b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/Bug2.java
@@ -0,0 +1,7 @@
+class Test {
+  /**
+   *  @exception IllegalStateException<caret>
+   */
+  public void foo() throws java.io.IOException, IllegalStateException {
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/CallVarargArgument-out.java b/java/java-tests/testData/codeInsight/completion/smartType/CallVarargArgument-out.java
new file mode 100644
index 0000000..f5cec0a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/CallVarargArgument-out.java
@@ -0,0 +1,18 @@
+public class JavaClass<T> {
+
+
+
+    <V extends T> V foo(Class<V> s) {}
+}
+
+class Zoo {
+    {
+        Class<? extends String> xcccccccc = null;
+        JavaClass<String> cccc = new JavaClass<String>();
+        bar(cccc.foo(xcccccccc<caret>));
+    }
+
+    void bar(String... s) {
+
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/CallVarargArgument.java b/java/java-tests/testData/codeInsight/completion/smartType/CallVarargArgument.java
new file mode 100644
index 0000000..da6cfc9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/CallVarargArgument.java
@@ -0,0 +1,18 @@
+public class JavaClass<T> {
+
+
+
+    <V extends T> V foo(Class<V> s) {}
+}
+
+class Zoo {
+    {
+        Class<? extends String> xcccccccc = null;
+        JavaClass<String> cccc = new JavaClass<String>();
+        bar(cccc.foo(xcc<caret>));
+    }
+
+    void bar(String... s) {
+
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/CaseMissingEnumValue-out.java b/java/java-tests/testData/codeInsight/completion/smartType/CaseMissingEnumValue-out.java
new file mode 100644
index 0000000..25f5e69
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/CaseMissingEnumValue-out.java
@@ -0,0 +1,10 @@
+class A {
+    A(MyEnum e) {
+      switch (e) {
+        case bar: return;
+        case foo:<caret>
+      }
+    }
+}
+
+enum MyEnum { foo, bar }
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/CaseMissingEnumValue.java b/java/java-tests/testData/codeInsight/completion/smartType/CaseMissingEnumValue.java
new file mode 100644
index 0000000..056dfbd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/CaseMissingEnumValue.java
@@ -0,0 +1,10 @@
+class A {
+    A(MyEnum e) {
+      switch (e) {
+        case bar: return;
+        case <caret>
+      }
+    }
+}
+
+enum MyEnum { foo, bar }
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/CaseMissingEnumValue2-out.java b/java/java-tests/testData/codeInsight/completion/smartType/CaseMissingEnumValue2-out.java
new file mode 100644
index 0000000..b13e612
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/CaseMissingEnumValue2-out.java
@@ -0,0 +1,10 @@
+class A {
+    A(MyEnum e) {
+      switch (e) {
+        case foo:<caret>
+        case bar: return;
+      }
+    }
+}
+
+enum MyEnum { foo, bar }
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/CaseMissingEnumValue2.java b/java/java-tests/testData/codeInsight/completion/smartType/CaseMissingEnumValue2.java
new file mode 100644
index 0000000..b1acd4c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/CaseMissingEnumValue2.java
@@ -0,0 +1,10 @@
+class A {
+    A(MyEnum e) {
+      switch (e) {
+        case <caret>
+        case bar: return;
+      }
+    }
+}
+
+enum MyEnum { foo, bar }
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/CastAutoboxing-out.java b/java/java-tests/testData/codeInsight/completion/smartType/CastAutoboxing-out.java
new file mode 100644
index 0000000..bbf0f76
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/CastAutoboxing-out.java
@@ -0,0 +1,8 @@
+class A {
+  public abstract void zoo(int y);
+
+  {
+    Object x;
+    zoo((Integer) <caret>x);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/CastAutoboxing.java b/java/java-tests/testData/codeInsight/completion/smartType/CastAutoboxing.java
new file mode 100644
index 0000000..661b6ea
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/CastAutoboxing.java
@@ -0,0 +1,8 @@
+class A {
+  public abstract void zoo(int y);
+
+  {
+    Object x;
+    zoo((<caret>x);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/CastAutoboxing2-out.java b/java/java-tests/testData/codeInsight/completion/smartType/CastAutoboxing2-out.java
new file mode 100644
index 0000000..bbf0f76
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/CastAutoboxing2-out.java
@@ -0,0 +1,8 @@
+class A {
+  public abstract void zoo(int y);
+
+  {
+    Object x;
+    zoo((Integer) <caret>x);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/CastAutoboxing2.java b/java/java-tests/testData/codeInsight/completion/smartType/CastAutoboxing2.java
new file mode 100644
index 0000000..fede6af
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/CastAutoboxing2.java
@@ -0,0 +1,8 @@
+class A {
+  public abstract void zoo(int y);
+
+  {
+    Object x;
+    zoo((<caret>) x);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/CastAutoboxing3-out.java b/java/java-tests/testData/codeInsight/completion/smartType/CastAutoboxing3-out.java
new file mode 100644
index 0000000..bbf0f76
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/CastAutoboxing3-out.java
@@ -0,0 +1,8 @@
+class A {
+  public abstract void zoo(int y);
+
+  {
+    Object x;
+    zoo((Integer) <caret>x);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/CastAutoboxing3.java b/java/java-tests/testData/codeInsight/completion/smartType/CastAutoboxing3.java
new file mode 100644
index 0000000..4df5d6a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/CastAutoboxing3.java
@@ -0,0 +1,8 @@
+class A {
+  public abstract void zoo(int y);
+
+  {
+    Object x;
+    zoo((<caret>a) x);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/CastGenericQualifier-out.java b/java/java-tests/testData/codeInsight/completion/smartType/CastGenericQualifier-out.java
new file mode 100644
index 0000000..14543b6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/CastGenericQualifier-out.java
@@ -0,0 +1,13 @@
+class A<T> {
+  T get() {
+    return null;
+  }
+}
+class B extends A<StringBuffer> {}
+class C {
+  void m(A<?> a) {
+    if (a instanceof B) {
+      StringBuffer s = ((B) a).get();<caret>
+    }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/CastGenericQualifier.java b/java/java-tests/testData/codeInsight/completion/smartType/CastGenericQualifier.java
new file mode 100644
index 0000000..b84a1c5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/CastGenericQualifier.java
@@ -0,0 +1,13 @@
+class A<T> {
+  T get() {
+    return null;
+  }
+}
+class B extends A<StringBuffer> {}
+class C {
+  void m(A<?> a) {
+    if (a instanceof B) {
+      StringBuffer s = a.<caret>
+    }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/CastInThrow-out.java b/java/java-tests/testData/codeInsight/completion/smartType/CastInThrow-out.java
new file mode 100644
index 0000000..0ba02a78
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/CastInThrow-out.java
@@ -0,0 +1,11 @@
+class MyException extends Exception {}
+
+class Test {
+    void test() throws MyException {
+        try {
+          throw new RuntimeException();
+        } catch(Exception e) {
+          throw (MyException) <caret>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/CastInThrow.java b/java/java-tests/testData/codeInsight/completion/smartType/CastInThrow.java
new file mode 100644
index 0000000..79892bd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/CastInThrow.java
@@ -0,0 +1,11 @@
+class MyException extends Exception {}
+
+class Test {
+    void test() throws MyException {
+        try {
+          throw new RuntimeException();
+        } catch(Exception e) {
+          throw (<caret>) 
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/CastToArray-out.java b/java/java-tests/testData/codeInsight/completion/smartType/CastToArray-out.java
new file mode 100644
index 0000000..c693df5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/CastToArray-out.java
@@ -0,0 +1,7 @@
+public class SomeClass {
+
+    {
+        String[] aaa = (String[]) <caret>
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/CastToArray.java b/java/java-tests/testData/codeInsight/completion/smartType/CastToArray.java
new file mode 100644
index 0000000..3eff526
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/CastToArray.java
@@ -0,0 +1,7 @@
+public class SomeClass {
+
+    {
+        String[] aaa = (<caret>
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/CastToParameterizedType-out.java b/java/java-tests/testData/codeInsight/completion/smartType/CastToParameterizedType-out.java
new file mode 100644
index 0000000..2bf1038
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/CastToParameterizedType-out.java
@@ -0,0 +1,11 @@
+public class A<T> {
+    private static final A<?> X = null;
+
+    A<String> get(B o) {
+      return (A<String>) <caret>X;
+    }
+  }
+
+class B {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/CastToParameterizedType.java b/java/java-tests/testData/codeInsight/completion/smartType/CastToParameterizedType.java
new file mode 100644
index 0000000..dea9c61
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/CastToParameterizedType.java
@@ -0,0 +1,11 @@
+public class A<T> {
+    private static final A<?> X = null;
+
+    A<String> get(B o) {
+      return (<caret>X;
+    }
+  }
+
+class B {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/CastWildcards-out.java b/java/java-tests/testData/codeInsight/completion/smartType/CastWildcards-out.java
new file mode 100644
index 0000000..307a275
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/CastWildcards-out.java
@@ -0,0 +1,6 @@
+abstract class A<T> {
+    void foo(T x){}
+    void bar(A<? super Throwable> a, Object b){
+        a.foo((Throwable) <caret>b);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/CastWildcards.java b/java/java-tests/testData/codeInsight/completion/smartType/CastWildcards.java
new file mode 100644
index 0000000..0570efc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/CastWildcards.java
@@ -0,0 +1,6 @@
+abstract class A<T> {
+    void foo(T x){}
+    void bar(A<? super Throwable> a, Object b){
+        a.foo((<caret>) b);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/CastWith2TypeParameters-out.java b/java/java-tests/testData/codeInsight/completion/smartType/CastWith2TypeParameters-out.java
new file mode 100644
index 0000000..2a5b79d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/CastWith2TypeParameters-out.java
@@ -0,0 +1,10 @@
+interface Foo<T,V> {}
+
+  class Bar<T,V> {
+    Bar(Foo<T,V> foo) {}
+  }
+
+  class Main {
+    Foo foo;
+    Bar<String,String> bar = new Bar<String,String>((Foo<String, String>) <caret>foo);
+  }
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/CastWith2TypeParameters.java b/java/java-tests/testData/codeInsight/completion/smartType/CastWith2TypeParameters.java
new file mode 100644
index 0000000..1e2d46d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/CastWith2TypeParameters.java
@@ -0,0 +1,10 @@
+interface Foo<T,V> {}
+
+  class Bar<T,V> {
+    Bar(Foo<T,V> foo) {}
+  }
+
+  class Main {
+    Foo foo;
+    Bar<String,String> bar = new Bar<String,String>((<caret>foo);
+  }
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/CastWithGenerics-out.java b/java/java-tests/testData/codeInsight/completion/smartType/CastWithGenerics-out.java
new file mode 100644
index 0000000..9e5e012
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/CastWithGenerics-out.java
@@ -0,0 +1,9 @@
+public class Aaaaaaa {
+
+    void foo(Class<? extends Object> c) {}
+
+    void bar() {
+        foo((Class<Object>) <caret>Class.forName("sdd"));
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/CastWithGenerics.java b/java/java-tests/testData/codeInsight/completion/smartType/CastWithGenerics.java
new file mode 100644
index 0000000..8e3735a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/CastWithGenerics.java
@@ -0,0 +1,9 @@
+public class Aaaaaaa {
+
+    void foo(Class<? extends Object> c) {}
+
+    void bar() {
+        foo((<caret>Class.forName("sdd"));
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/CatchInAnonymous-out.java b/java/java-tests/testData/codeInsight/completion/smartType/CatchInAnonymous-out.java
new file mode 100644
index 0000000..1d95df5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/CatchInAnonymous-out.java
@@ -0,0 +1,17 @@
+import java.io.*;
+
+class Foo {
+  {
+                                Runnable runnable = new Runnable() {
+                                    public void run() {
+                                        try {
+                                            throw new IOException();
+                                        } catch (IOException <caret>) {
+
+                                        }
+                                    }
+                                };
+
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/CatchInAnonymous.java b/java/java-tests/testData/codeInsight/completion/smartType/CatchInAnonymous.java
new file mode 100644
index 0000000..8ef3ccd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/CatchInAnonymous.java
@@ -0,0 +1,17 @@
+import java.io.*;
+
+class Foo {
+  {
+                                Runnable runnable = new Runnable() {
+                                    public void run() {
+                                        try {
+                                            throw new IOException();
+                                        } catch (<caret>) {
+
+                                        }
+                                    }
+                                };
+
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/CheckStaticImportsType.java b/java/java-tests/testData/codeInsight/completion/smartType/CheckStaticImportsType.java
new file mode 100644
index 0000000..a378e36
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/CheckStaticImportsType.java
@@ -0,0 +1,11 @@
+import java.util.ArrayList;
+import java.util.List;
+import static java.lang.Math.*;
+
+public class TestClass {
+    private List<String> testList;
+
+    public void testMe() {
+        List<String> newList = new ArrayList<String>(at<caret>);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ClassLiteral-out.java b/java/java-tests/testData/codeInsight/completion/smartType/ClassLiteral-out.java
new file mode 100644
index 0000000..823663b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ClassLiteral-out.java
@@ -0,0 +1,6 @@
+class C {
+  void h (Class<? extends String> clazz) {}
+  {
+    h(<caret>);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ClassLiteral.java b/java/java-tests/testData/codeInsight/completion/smartType/ClassLiteral.java
new file mode 100644
index 0000000..823663b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ClassLiteral.java
@@ -0,0 +1,6 @@
+class C {
+  void h (Class<? extends String> clazz) {}
+  {
+    h(<caret>);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ClassLiteralInAnno1-out.java b/java/java-tests/testData/codeInsight/completion/smartType/ClassLiteralInAnno1-out.java
new file mode 100644
index 0000000..ee8001b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ClassLiteralInAnno1-out.java
@@ -0,0 +1,5 @@
+@interface Anno {
+  Class<? extends String> value();
+}
+@Anno(String.class<caret>)
+class Foo {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ClassLiteralInAnno1.java b/java/java-tests/testData/codeInsight/completion/smartType/ClassLiteralInAnno1.java
new file mode 100644
index 0000000..15e1ab6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ClassLiteralInAnno1.java
@@ -0,0 +1,5 @@
+@interface Anno {
+  Class<? extends String> value();
+}
+@Anno(String.cl<caret>)
+class Foo {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ClassLiteralInAnno2-out.java b/java/java-tests/testData/codeInsight/completion/smartType/ClassLiteralInAnno2-out.java
new file mode 100644
index 0000000..ee8001b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ClassLiteralInAnno2-out.java
@@ -0,0 +1,5 @@
+@interface Anno {
+  Class<? extends String> value();
+}
+@Anno(String.class<caret>)
+class Foo {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ClassLiteralInAnno2.java b/java/java-tests/testData/codeInsight/completion/smartType/ClassLiteralInAnno2.java
new file mode 100644
index 0000000..9abed98
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ClassLiteralInAnno2.java
@@ -0,0 +1,5 @@
+@interface Anno {
+  Class<? extends String> value();
+}
+@Anno(<caret>)
+class Foo {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ClassLiteralInArrayAnnoInitializer-out.java b/java/java-tests/testData/codeInsight/completion/smartType/ClassLiteralInArrayAnnoInitializer-out.java
new file mode 100644
index 0000000..cd292b1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ClassLiteralInArrayAnnoInitializer-out.java
@@ -0,0 +1,10 @@
+@interface TestFor {
+  Class[] testForClass();
+}
+
+class Foo {
+  @TestFor(testForClass = { Aaaaaaaaaaaaaaaaaaaaa.class<caret> } )
+  public void foo22() {}
+}
+
+class Aaaaaaaaaaaaaaaaaaaaa {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ClassLiteralInArrayAnnoInitializer.java b/java/java-tests/testData/codeInsight/completion/smartType/ClassLiteralInArrayAnnoInitializer.java
new file mode 100644
index 0000000..a52476d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ClassLiteralInArrayAnnoInitializer.java
@@ -0,0 +1,10 @@
+@interface TestFor {
+  Class[] testForClass();
+}
+
+class Foo {
+  @TestFor(testForClass = { Aaaaaa<caret> } )
+  public void foo22() {}
+}
+
+class Aaaaaaaaaaaaaaaaaaaaa {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ClassLiteralInArrayAnnoInitializer2-out.java b/java/java-tests/testData/codeInsight/completion/smartType/ClassLiteralInArrayAnnoInitializer2-out.java
new file mode 100644
index 0000000..5aa9035
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ClassLiteralInArrayAnnoInitializer2-out.java
@@ -0,0 +1,12 @@
+import java.lang.Object;
+
+@interface TestFor {
+  Class[] testForClass();
+}
+
+class Foo {
+  @TestFor(testForClass = {Object.class, Aaaaaaaaaaaaaaaaaaaaa.class<caret> } )
+  public void foo22() {}
+}
+
+class Aaaaaaaaaaaaaaaaaaaaa {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ClassLiteralInArrayAnnoInitializer2.java b/java/java-tests/testData/codeInsight/completion/smartType/ClassLiteralInArrayAnnoInitializer2.java
new file mode 100644
index 0000000..76387fe
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ClassLiteralInArrayAnnoInitializer2.java
@@ -0,0 +1,12 @@
+import java.lang.Object;
+
+@interface TestFor {
+  Class[] testForClass();
+}
+
+class Foo {
+  @TestFor(testForClass = {Object.class, Aaaaaa<caret> } )
+  public void foo22() {}
+}
+
+class Aaaaaaaaaaaaaaaaaaaaa {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ClassLiteralInheritors-out.java b/java/java-tests/testData/codeInsight/completion/smartType/ClassLiteralInheritors-out.java
new file mode 100644
index 0000000..9768a73
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ClassLiteralInheritors-out.java
@@ -0,0 +1,6 @@
+@interface Anno {
+  Class<? extends Foo> value();
+}
+@Anno(Bar.class<caret>)
+class Foo {}
+class Bar extends Foo{}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ClassLiteralInheritors.java b/java/java-tests/testData/codeInsight/completion/smartType/ClassLiteralInheritors.java
new file mode 100644
index 0000000..5080121
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ClassLiteralInheritors.java
@@ -0,0 +1,6 @@
+@interface Anno {
+  Class<? extends Foo> value();
+}
+@Anno(B<caret>)
+class Foo {}
+class Bar extends Foo{}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ClassLiteralShouldInsertImport-out.java b/java/java-tests/testData/codeInsight/completion/smartType/ClassLiteralShouldInsertImport-out.java
new file mode 100644
index 0000000..daaa873
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ClassLiteralShouldInsertImport-out.java
@@ -0,0 +1,6 @@
+import bar.Intf;
+import foo.Bar;
+
+class Fooooo {
+    Class<? extends Intf> f = Bar.class;<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ClassLiteralShouldInsertImport.java b/java/java-tests/testData/codeInsight/completion/smartType/ClassLiteralShouldInsertImport.java
new file mode 100644
index 0000000..ce0d69e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ClassLiteralShouldInsertImport.java
@@ -0,0 +1,5 @@
+import bar.Intf;
+
+class Fooooo {
+    Class<? extends Intf> f = B<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/CollectionsEmptySetInMethodCall-out.java b/java/java-tests/testData/codeInsight/completion/smartType/CollectionsEmptySetInMethodCall-out.java
new file mode 100644
index 0000000..ebec352
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/CollectionsEmptySetInMethodCall-out.java
@@ -0,0 +1,14 @@
+class Set<T> {}
+
+class Collections {
+  static <T> Set<T> emptySet() {}
+}
+
+class Bar {
+
+  {
+    foo(Collections.<String>emptySet());<caret>
+  }
+
+  void foo(Set<String> set){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/CollectionsEmptySetInMethodCall.java b/java/java-tests/testData/codeInsight/completion/smartType/CollectionsEmptySetInMethodCall.java
new file mode 100644
index 0000000..fc0353e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/CollectionsEmptySetInMethodCall.java
@@ -0,0 +1,14 @@
+class Set<T> {}
+
+class Collections {
+  static <T> Set<T> emptySet() {}
+}
+
+class Bar {
+
+  {
+    foo(Collections.e<caret>)
+  }
+
+  void foo(Set<String> set){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/CollectionsEmptySetInTernary-out.java b/java/java-tests/testData/codeInsight/completion/smartType/CollectionsEmptySetInTernary-out.java
new file mode 100644
index 0000000..f292f19
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/CollectionsEmptySetInTernary-out.java
@@ -0,0 +1,14 @@
+class Set<T> {}
+
+class Collections {
+  static <T> Set<T> emptySet() {}
+}
+
+class Bar {
+
+  Set<String> bar() {
+    return true ? Collections.<String>emptySet() : <caret>
+  }
+
+  void foo(Set<String> set){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/CollectionsEmptySetInTernary.java b/java/java-tests/testData/codeInsight/completion/smartType/CollectionsEmptySetInTernary.java
new file mode 100644
index 0000000..1f913e8f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/CollectionsEmptySetInTernary.java
@@ -0,0 +1,14 @@
+class Set<T> {}
+
+class Collections {
+  static <T> Set<T> emptySet() {}
+}
+
+class Bar {
+
+  Set<String> bar() {
+    return true ? Collections.e<caret>
+  }
+
+  void foo(Set<String> set){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/CollectionsEmptySetInTernary2-out.java b/java/java-tests/testData/codeInsight/completion/smartType/CollectionsEmptySetInTernary2-out.java
new file mode 100644
index 0000000..e0081fb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/CollectionsEmptySetInTernary2-out.java
@@ -0,0 +1,14 @@
+class Set<T> {}
+
+class Collections {
+  static <T> Set<T> emptySet() {}
+}
+
+class Bar {
+
+  Set<String> bar() {
+    return true ? null : Collections.<String>emptySet();<caret>
+  }
+
+  void foo(Set<String> set){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/CollectionsEmptySetInTernary2.java b/java/java-tests/testData/codeInsight/completion/smartType/CollectionsEmptySetInTernary2.java
new file mode 100644
index 0000000..f0d94b4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/CollectionsEmptySetInTernary2.java
@@ -0,0 +1,14 @@
+class Set<T> {}
+
+class Collections {
+  static <T> Set<T> emptySet() {}
+}
+
+class Bar {
+
+  Set<String> bar() {
+    return true ? null : Collections.e<caret>
+  }
+
+  void foo(Set<String> set){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/CommaDoublePenetration-out.java b/java/java-tests/testData/codeInsight/completion/smartType/CommaDoublePenetration-out.java
new file mode 100644
index 0000000..b3e7f1e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/CommaDoublePenetration-out.java
@@ -0,0 +1,11 @@
+public abstract class Zzz {
+
+    {
+        foo(aaaa(), <caret>)
+    }
+
+    int aaaa() {}
+
+    void foo(int a) {}
+    void foo(int a, String b) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/CommaDoublePenetration.java b/java/java-tests/testData/codeInsight/completion/smartType/CommaDoublePenetration.java
new file mode 100644
index 0000000..d3fa180
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/CommaDoublePenetration.java
@@ -0,0 +1,11 @@
+public abstract class Zzz {
+
+    {
+        foo(<caret>)
+    }
+
+    int aaaa() {}
+
+    void foo(int a) {}
+    void foo(int a, String b) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/CommonPrefixWithSelection-out.java b/java/java-tests/testData/codeInsight/completion/smartType/CommonPrefixWithSelection-out.java
new file mode 100644
index 0000000..d303277
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/CommonPrefixWithSelection-out.java
@@ -0,0 +1,13 @@
+import java.util.*;
+
+public class FooBar {
+
+    {
+        List<String> laaaaaa;
+        List<String> laaaabbbbbb;
+        for (String s : laaaaaa<caret>) {
+
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/CommonPrefixWithSelection.java b/java/java-tests/testData/codeInsight/completion/smartType/CommonPrefixWithSelection.java
new file mode 100644
index 0000000..9d169ba
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/CommonPrefixWithSelection.java
@@ -0,0 +1,13 @@
+import java.util.*;
+
+public class FooBar {
+
+    {
+        List<String> laaaaaa;
+        List<String> laaaabbbbbb;
+        for (String s : <selection><caret>laaaasdafsdf</selection>) {
+
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ConstantTwice-out.java b/java/java-tests/testData/codeInsight/completion/smartType/ConstantTwice-out.java
new file mode 100644
index 0000000..cf77050
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ConstantTwice-out.java
@@ -0,0 +1,11 @@
+class Key {}
+
+public class Foo {
+  static final Key FOO;
+
+  void foo(Key key) {}
+
+  {
+    foo(FOO);<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ConstantTwice.java b/java/java-tests/testData/codeInsight/completion/smartType/ConstantTwice.java
new file mode 100644
index 0000000..e2e62dd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ConstantTwice.java
@@ -0,0 +1,11 @@
+class Key {}
+
+public class Foo {
+  static final Key FOO;
+
+  void foo(Key key) {}
+
+  {
+    foo(<caret>)
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ConstantTwice2.java b/java/java-tests/testData/codeInsight/completion/smartType/ConstantTwice2.java
new file mode 100644
index 0000000..3886f28
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ConstantTwice2.java
@@ -0,0 +1,10 @@
+interface Bar {
+  char c;
+  char d;
+}
+
+class Foo {
+  {
+    String s = "".substring("".lastIndexOf(Bar.<caret>));
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ConstructorArgsSmartEnter-out.java b/java/java-tests/testData/codeInsight/completion/smartType/ConstructorArgsSmartEnter-out.java
new file mode 100644
index 0000000..9d25f93
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ConstructorArgsSmartEnter-out.java
@@ -0,0 +1,10 @@
+import java.util.ArrayList;
+import java.util.List;
+
+public class MyJavaClass {
+
+    {
+
+        List l = new ArrayList(239);<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ConstructorArgsSmartEnter.java b/java/java-tests/testData/codeInsight/completion/smartType/ConstructorArgsSmartEnter.java
new file mode 100644
index 0000000..f28c82c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ConstructorArgsSmartEnter.java
@@ -0,0 +1,9 @@
+import java.util.List;
+
+public class MyJavaClass {
+
+    {
+
+        List l = new ArraL<caret>239
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ConstructorNoPairBracketSemicolon-out.java b/java/java-tests/testData/codeInsight/completion/smartType/ConstructorNoPairBracketSemicolon-out.java
new file mode 100644
index 0000000..b1b9a92
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ConstructorNoPairBracketSemicolon-out.java
@@ -0,0 +1,5 @@
+class A {
+  {
+    String c = new String();<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ConstructorNoPairBracketSemicolon.java b/java/java-tests/testData/codeInsight/completion/smartType/ConstructorNoPairBracketSemicolon.java
new file mode 100644
index 0000000..f05c021
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ConstructorNoPairBracketSemicolon.java
@@ -0,0 +1,5 @@
+class A {
+  {
+    String c = new Stri<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ConstructorOnSeparateLineInMethodCall-out.java b/java/java-tests/testData/codeInsight/completion/smartType/ConstructorOnSeparateLineInMethodCall-out.java
new file mode 100644
index 0000000..d859597
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ConstructorOnSeparateLineInMethodCall-out.java
@@ -0,0 +1,10 @@
+class Main {
+    private static void method(Integer param) {
+    }
+
+    public static void main(String[] args) {
+        method(
+                new Integer(<caret>)
+        );
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ConstructorOnSeparateLineInMethodCall.java b/java/java-tests/testData/codeInsight/completion/smartType/ConstructorOnSeparateLineInMethodCall.java
new file mode 100644
index 0000000..4f17aec
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ConstructorOnSeparateLineInMethodCall.java
@@ -0,0 +1,10 @@
+class Main {
+    private static void method(Integer param) {
+    }
+
+    public static void main(String[] args) {
+        method(
+                new <caret>
+        );
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ConstructorWithExistingParens-out.java b/java/java-tests/testData/codeInsight/completion/smartType/ConstructorWithExistingParens-out.java
new file mode 100644
index 0000000..5dc3bf7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ConstructorWithExistingParens-out.java
@@ -0,0 +1,7 @@
+public class TestSmartComplete {
+    public static void main(String[] args) {
+        Long var;
+
+        var = new Long(<caret>);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ConstructorWithExistingParens.java b/java/java-tests/testData/codeInsight/completion/smartType/ConstructorWithExistingParens.java
new file mode 100644
index 0000000..d4349c9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ConstructorWithExistingParens.java
@@ -0,0 +1,7 @@
+public class TestSmartComplete {
+    public static void main(String[] args) {
+        Long var;
+
+        var = new <caret>();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/DefaultAnnoMethodValue-out.java b/java/java-tests/testData/codeInsight/completion/smartType/DefaultAnnoMethodValue-out.java
new file mode 100644
index 0000000..f110255
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/DefaultAnnoMethodValue-out.java
@@ -0,0 +1,8 @@
+enum MyEnum {
+  FOO, BAR;
+}
+
+public @interface Foo {
+    
+    MyEnum en() default MyEnum.FOO;<caret>
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/DefaultAnnoMethodValue.java b/java/java-tests/testData/codeInsight/completion/smartType/DefaultAnnoMethodValue.java
new file mode 100644
index 0000000..8553b0b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/DefaultAnnoMethodValue.java
@@ -0,0 +1,8 @@
+enum MyEnum {
+  FOO, BAR;
+}
+
+public @interface Foo {
+    
+    MyEnum en() default F<caret>
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/DefaultAnnoParam-out.java b/java/java-tests/testData/codeInsight/completion/smartType/DefaultAnnoParam-out.java
new file mode 100644
index 0000000..b233dd2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/DefaultAnnoParam-out.java
@@ -0,0 +1,16 @@
+@interface Anno {
+  String value();
+}
+
+public class FooBar {
+    public static final String FOO_BAR;
+
+    @Anno(FOO_BAR<caret>)
+    void m() {}
+
+    String FooBarrrrrr() {}
+
+    public static String FooBarrrr() {}
+
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/DefaultAnnoParam.java b/java/java-tests/testData/codeInsight/completion/smartType/DefaultAnnoParam.java
new file mode 100644
index 0000000..f0b8d8b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/DefaultAnnoParam.java
@@ -0,0 +1,16 @@
+@interface Anno {
+  String value();
+}
+
+public class FooBar {
+    public static final String FOO_BAR;
+
+    @Anno(FB<caret>)
+    void m() {}
+
+    String FooBarrrrrr() {}
+
+    public static String FooBarrrr() {}
+
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/DefaultAnnoParam2-out.java b/java/java-tests/testData/codeInsight/completion/smartType/DefaultAnnoParam2-out.java
new file mode 100644
index 0000000..6ee7a99
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/DefaultAnnoParam2-out.java
@@ -0,0 +1,14 @@
+@interface Anno {
+  String value();
+}
+
+@Anno(FooBar.FEE_BAR<caret>)
+public class FooBar {
+    public static final String FEE_BAR;
+
+    String FooBarrrrrr() {}
+
+    public static String FooBarrrr() {}
+
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/DefaultAnnoParam2.java b/java/java-tests/testData/codeInsight/completion/smartType/DefaultAnnoParam2.java
new file mode 100644
index 0000000..0167b08
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/DefaultAnnoParam2.java
@@ -0,0 +1,14 @@
+@interface Anno {
+  String value();
+}
+
+@Anno(FB<caret>)
+public class FooBar {
+    public static final String FEE_BAR;
+
+    String FooBarrrrrr() {}
+
+    public static String FooBarrrr() {}
+
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/DelegateMethodArguments-out.java b/java/java-tests/testData/codeInsight/completion/smartType/DelegateMethodArguments-out.java
new file mode 100644
index 0000000..d92f9e5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/DelegateMethodArguments-out.java
@@ -0,0 +1,14 @@
+public class SomeClass {
+
+    public void foo(int count) {}
+    public static Object foo(int count, String descr) {
+
+    }
+
+}
+
+class SomeClassImpl {
+    public Object foo(int count, String description) {
+        SomeClass.foo(count, description)<caret>;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/DelegateMethodArguments.java b/java/java-tests/testData/codeInsight/completion/smartType/DelegateMethodArguments.java
new file mode 100644
index 0000000..4fa21e0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/DelegateMethodArguments.java
@@ -0,0 +1,14 @@
+public class SomeClass {
+
+    public void foo(int count) {}
+    public static Object foo(int count, String descr) {
+
+    }
+
+}
+
+class SomeClassImpl {
+    public Object foo(int count, String description) {
+        SomeClass.foo(<caret>);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/DelegationToParent-out.java b/java/java-tests/testData/codeInsight/completion/smartType/DelegationToParent-out.java
new file mode 100644
index 0000000..2364822
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/DelegationToParent-out.java
@@ -0,0 +1,15 @@
+class ExtensionPointName<T> {
+    public static <T> ExtensionPointName<T> create(String s) { return null; }
+}
+
+class Foo<B> {
+    public static <T> T[] getExtensions(ExtensionPointName<T> extensionPointName) {
+      return null;
+    }
+
+    ExtensionPointName<B> EXTENSION_POINT_NAME = ExtensionPointName.create("com.intellij.fileBasedIndex");
+
+    void f() {
+        final B[] extensions = getExtensions(EXTENSION_POINT_NAME)<caret>;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/DelegationToParent.java b/java/java-tests/testData/codeInsight/completion/smartType/DelegationToParent.java
new file mode 100644
index 0000000..f35e7a4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/DelegationToParent.java
@@ -0,0 +1,15 @@
+class ExtensionPointName<T> {
+    public static <T> ExtensionPointName<T> create(String s) { return null; }
+}
+
+class Foo<B> {
+    public static <T> T[] getExtensions(ExtensionPointName<T> extensionPointName) {
+      return null;
+    }
+
+    ExtensionPointName<B> EXTENSION_POINT_NAME = ExtensionPointName.create("com.intellij.fileBasedIndex");
+
+    void f() {
+        final B[] extensions = getExtensions(<caret>XXX.EXTENSION_POINT_NAME);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/DiamondCollapsed-out.java b/java/java-tests/testData/codeInsight/completion/smartType/DiamondCollapsed-out.java
new file mode 100644
index 0000000..9e59477
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/DiamondCollapsed-out.java
@@ -0,0 +1,8 @@
+class MyClass {
+  public void foo() {
+    MyDD<String> d = new MyDD<>();<caret>
+  }
+}
+
+class MyDD<T> {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/DiamondCollapsed.java b/java/java-tests/testData/codeInsight/completion/smartType/DiamondCollapsed.java
new file mode 100644
index 0000000..9ff1b4a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/DiamondCollapsed.java
@@ -0,0 +1,8 @@
+class MyClass {
+  public void foo() {
+    MyDD<String> d = new MyD<caret>
+  }
+}
+
+class MyDD<T> {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/DiamondNotCollapsed-out.java b/java/java-tests/testData/codeInsight/completion/smartType/DiamondNotCollapsed-out.java
new file mode 100644
index 0000000..b0e0ac5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/DiamondNotCollapsed-out.java
@@ -0,0 +1,9 @@
+class MyClass {
+  public void foo() {
+    MyDD<String> d = new MyDD<String>(<caret>);
+  }
+}
+
+class MyDD<T> {
+  MyDD(T t){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/DiamondNotCollapsed.java b/java/java-tests/testData/codeInsight/completion/smartType/DiamondNotCollapsed.java
new file mode 100644
index 0000000..1267915
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/DiamondNotCollapsed.java
@@ -0,0 +1,9 @@
+class MyClass {
+  public void foo() {
+    MyDD<String> d = new MyD<caret>
+  }
+}
+
+class MyDD<T> {
+  MyDD(T t){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/DiamondNotCollapsedInCaseOfAnonymousClasses-out.java b/java/java-tests/testData/codeInsight/completion/smartType/DiamondNotCollapsedInCaseOfAnonymousClasses-out.java
new file mode 100644
index 0000000..0b2d9e7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/DiamondNotCollapsedInCaseOfAnonymousClasses-out.java
@@ -0,0 +1,33 @@
+class MyClass {
+  public void foo() {
+    MyDD<String> d = new MyDD<String>() {
+        @Override
+        public int hashCode() {
+            <selection>return super.hashCode();    //To change body of overridden methods use File | Settings | File Templates.</selection>
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            return super.equals(obj);    //To change body of overridden methods use File | Settings | File Templates.
+        }
+
+        @Override
+        protected Object clone() throws CloneNotSupportedException {
+            return super.clone();    //To change body of overridden methods use File | Settings | File Templates.
+        }
+
+        @Override
+        public String toString() {
+            return super.toString();    //To change body of overridden methods use File | Settings | File Templates.
+        }
+
+        @Override
+        protected void finalize() throws Throwable {
+            super.finalize();    //To change body of overridden methods use File | Settings | File Templates.
+        }
+    };
+  }
+}
+
+abstract class MyDD<T> {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/DiamondNotCollapsedInCaseOfAnonymousClasses.java b/java/java-tests/testData/codeInsight/completion/smartType/DiamondNotCollapsedInCaseOfAnonymousClasses.java
new file mode 100644
index 0000000..546c59c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/DiamondNotCollapsedInCaseOfAnonymousClasses.java
@@ -0,0 +1,8 @@
+class MyClass {
+  public void foo() {
+    MyDD<String> d = new MyD<caret>
+  }
+}
+
+abstract class MyDD<T> {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/DiamondNotCollapsedInCaseOfInapplicableInference-out.java b/java/java-tests/testData/codeInsight/completion/smartType/DiamondNotCollapsedInCaseOfInapplicableInference-out.java
new file mode 100644
index 0000000..a658060
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/DiamondNotCollapsedInCaseOfInapplicableInference-out.java
@@ -0,0 +1,12 @@
+import java.util.ArrayList;
+
+public class CompletionWithPassToMethod {
+
+    public static void main(String[] args) {
+        foo(new ArrayList<String>());
+    }
+
+
+    static void foo(ArrayList<String> ll) {
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/DiamondNotCollapsedInCaseOfInapplicableInference.java b/java/java-tests/testData/codeInsight/completion/smartType/DiamondNotCollapsedInCaseOfInapplicableInference.java
new file mode 100644
index 0000000..4665f7a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/DiamondNotCollapsedInCaseOfInapplicableInference.java
@@ -0,0 +1,12 @@
+import java.util.ArrayList;
+
+public class CompletionWithPassToMethod {
+
+    public static void main(String[] args) {
+        foo(new ArrayL<caret>);
+    }
+
+
+    static void foo(ArrayList<String> ll) {
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/DiamondNotCollapsedNotApplicable-out.java b/java/java-tests/testData/codeInsight/completion/smartType/DiamondNotCollapsedNotApplicable-out.java
new file mode 100644
index 0000000..618fd33
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/DiamondNotCollapsedNotApplicable-out.java
@@ -0,0 +1,15 @@
+import java.util.ArrayList;
+
+public class TestCompletion {
+    public static void test() {
+        A<ArrayList<String>> ref = new A<>();
+        ref.set(new ArrayList<String>(<caret>) );
+    }
+}
+
+class A<V> {
+    A() {
+    }
+
+    void set(V v){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/DiamondNotCollapsedNotApplicable.java b/java/java-tests/testData/codeInsight/completion/smartType/DiamondNotCollapsedNotApplicable.java
new file mode 100644
index 0000000..3d79a33
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/DiamondNotCollapsedNotApplicable.java
@@ -0,0 +1,15 @@
+import java.util.ArrayList;
+
+public class TestCompletion {
+    public static void test() {
+        A<ArrayList<String>> ref = new A<>();
+        ref.set(new <caret> );
+    }
+}
+
+class A<V> {
+    A() {
+    }
+
+    void set(V v){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/DiamondPresentation.java b/java/java-tests/testData/codeInsight/completion/smartType/DiamondPresentation.java
new file mode 100644
index 0000000..4dde647
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/DiamondPresentation.java
@@ -0,0 +1,8 @@
+class MyClass {
+  public void foo() {
+    MyDD<String> d = new MyD<caret>x
+  }
+}
+
+class MyDD<T> {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/DoNotExcludeAssignedVariable-out.java b/java/java-tests/testData/codeInsight/completion/smartType/DoNotExcludeAssignedVariable-out.java
new file mode 100644
index 0000000..08d29c0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/DoNotExcludeAssignedVariable-out.java
@@ -0,0 +1,11 @@
+class Foo {
+  Foo myFoo;
+
+  Foo foo(Foo foo) {
+  }
+
+  {
+    myFoo = foo(myFoo)<caret>
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/DoNotExcludeAssignedVariable.java b/java/java-tests/testData/codeInsight/completion/smartType/DoNotExcludeAssignedVariable.java
new file mode 100644
index 0000000..158c72a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/DoNotExcludeAssignedVariable.java
@@ -0,0 +1,11 @@
+class Foo {
+  Foo myFoo;
+
+  Foo foo(Foo foo) {
+  }
+
+  {
+    myFoo = foo(m<caret>)
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/DontAutoCastWhenAlreadyCasted-out.java b/java/java-tests/testData/codeInsight/completion/smartType/DontAutoCastWhenAlreadyCasted-out.java
new file mode 100644
index 0000000..e3ece2d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/DontAutoCastWhenAlreadyCasted-out.java
@@ -0,0 +1,9 @@
+class B {
+  {
+      Object o;
+      if (o instanceof String) {
+          String s = (String) o;
+          String ss = s;
+      }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/DontAutoCastWhenAlreadyCasted.java b/java/java-tests/testData/codeInsight/completion/smartType/DontAutoCastWhenAlreadyCasted.java
new file mode 100644
index 0000000..8df19e9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/DontAutoCastWhenAlreadyCasted.java
@@ -0,0 +1,9 @@
+class B {
+  {
+      Object o;
+      if (o instanceof String) {
+          String s = (String) o;
+          String ss = <caret>
+      }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/DoubleEmptyArray.java b/java/java-tests/testData/codeInsight/completion/smartType/DoubleEmptyArray.java
new file mode 100644
index 0000000..13c784b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/DoubleEmptyArray.java
@@ -0,0 +1,12 @@
+class Foo {
+  public static final Foo[] EMPTY = new Foo[0];
+}
+
+class Bar {
+
+  Foo[] bar() {}
+
+  Foo[] foo() {
+    return <caret>;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/DoubleSemicolonPenetration-out.java b/java/java-tests/testData/codeInsight/completion/smartType/DoubleSemicolonPenetration-out.java
new file mode 100644
index 0000000..c8faef1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/DoubleSemicolonPenetration-out.java
@@ -0,0 +1,11 @@
+public class Foo {
+
+    void bar() {
+      this.foo();<caret>
+    }
+
+    void foo() {
+
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/DoubleSemicolonPenetration.java b/java/java-tests/testData/codeInsight/completion/smartType/DoubleSemicolonPenetration.java
new file mode 100644
index 0000000..0f8e120
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/DoubleSemicolonPenetration.java
@@ -0,0 +1,11 @@
+public class Foo {
+
+    void bar() {
+      this.fo<caret>
+    }
+
+    void foo() {
+
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/DoubleThis-out.java b/java/java-tests/testData/codeInsight/completion/smartType/DoubleThis-out.java
new file mode 100644
index 0000000..aef4adf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/DoubleThis-out.java
@@ -0,0 +1,11 @@
+interface Aaa {}
+interface Bbb {}
+
+class Ccc implements Aaa, Bbb {
+    void foo(Aaa a);
+    void foo(Bbb b);
+
+    {
+        foo(this);<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/DoubleThis.java b/java/java-tests/testData/codeInsight/completion/smartType/DoubleThis.java
new file mode 100644
index 0000000..542e6bf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/DoubleThis.java
@@ -0,0 +1,11 @@
+interface Aaa {}
+interface Bbb {}
+
+class Ccc implements Aaa, Bbb {
+    void foo(Aaa a);
+    void foo(Bbb b);
+
+    {
+        foo(<caret>)
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/DoubleTrueInOverloadedMethodCall-out.java b/java/java-tests/testData/codeInsight/completion/smartType/DoubleTrueInOverloadedMethodCall-out.java
new file mode 100644
index 0000000..fb3d316
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/DoubleTrueInOverloadedMethodCall-out.java
@@ -0,0 +1,8 @@
+class Client {
+    {
+        foo(true);<caret>
+    }
+
+    void foo(Object o) {}
+    void foo(boolean o) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/DoubleTrueInOverloadedMethodCall.java b/java/java-tests/testData/codeInsight/completion/smartType/DoubleTrueInOverloadedMethodCall.java
new file mode 100644
index 0000000..de813b5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/DoubleTrueInOverloadedMethodCall.java
@@ -0,0 +1,8 @@
+class Client {
+    {
+        foo(tr<caret>)
+    }
+
+    void foo(Object o) {}
+    void foo(boolean o) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/DuplicateMembersFromSuperClass-out.java b/java/java-tests/testData/codeInsight/completion/smartType/DuplicateMembersFromSuperClass-out.java
new file mode 100644
index 0000000..a5d781b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/DuplicateMembersFromSuperClass-out.java
@@ -0,0 +1,10 @@
+class Super {
+    public static final Super FOO = null;
+}
+
+class Intermediate extends Super {
+
+    Super s = FOO;<caret>
+}
+
+
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/DuplicateMembersFromSuperClass.java b/java/java-tests/testData/codeInsight/completion/smartType/DuplicateMembersFromSuperClass.java
new file mode 100644
index 0000000..95f38dd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/DuplicateMembersFromSuperClass.java
@@ -0,0 +1,10 @@
+class Super {
+    public static final Super FOO = null;
+}
+
+class Intermediate extends Super {
+
+    Super s = F<caret>
+}
+
+
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/DuplicateMembersFromSuperClassInAnotherFile-out.java b/java/java-tests/testData/codeInsight/completion/smartType/DuplicateMembersFromSuperClassInAnotherFile-out.java
new file mode 100644
index 0000000..3ea9f3c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/DuplicateMembersFromSuperClassInAnotherFile-out.java
@@ -0,0 +1,5 @@
+class Intermediate extends Super {
+    Super s = FOO;<caret>
+}
+
+
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/DuplicateMembersFromSuperClassInAnotherFile.java b/java/java-tests/testData/codeInsight/completion/smartType/DuplicateMembersFromSuperClassInAnotherFile.java
new file mode 100644
index 0000000..a93c25f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/DuplicateMembersFromSuperClassInAnotherFile.java
@@ -0,0 +1,5 @@
+class Intermediate extends Super {
+    Super s = F<caret>
+}
+
+
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/EmptyListBeforeSemicolon-out.java b/java/java-tests/testData/codeInsight/completion/smartType/EmptyListBeforeSemicolon-out.java
new file mode 100644
index 0000000..197b8d1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/EmptyListBeforeSemicolon-out.java
@@ -0,0 +1,7 @@
+import java.util.Collections;
+
+class Foo {
+  java.util.List<String> foo() {
+    return Collections.emptyList();<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/EmptyListBeforeSemicolon.java b/java/java-tests/testData/codeInsight/completion/smartType/EmptyListBeforeSemicolon.java
new file mode 100644
index 0000000..2a1a563
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/EmptyListBeforeSemicolon.java
@@ -0,0 +1,5 @@
+class Foo {
+  java.util.List<String> foo() {
+    return em<caret>;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/EmptyListInReturn-out.java b/java/java-tests/testData/codeInsight/completion/smartType/EmptyListInReturn-out.java
new file mode 100644
index 0000000..197b8d1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/EmptyListInReturn-out.java
@@ -0,0 +1,7 @@
+import java.util.Collections;
+
+class Foo {
+  java.util.List<String> foo() {
+    return Collections.emptyList();<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/EmptyListInReturn.java b/java/java-tests/testData/codeInsight/completion/smartType/EmptyListInReturn.java
new file mode 100644
index 0000000..fe6e579
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/EmptyListInReturn.java
@@ -0,0 +1,5 @@
+class Foo {
+  java.util.List<String> foo() {
+    return <caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/EmptyListInReturn2-out.java b/java/java-tests/testData/codeInsight/completion/smartType/EmptyListInReturn2-out.java
new file mode 100644
index 0000000..3e129fe
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/EmptyListInReturn2-out.java
@@ -0,0 +1,5 @@
+class Foo {
+  java.util.List<String> foo() {
+    return java.util.Collections.emptyList();<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/EmptyListInReturn2.java b/java/java-tests/testData/codeInsight/completion/smartType/EmptyListInReturn2.java
new file mode 100644
index 0000000..3b5ded6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/EmptyListInReturn2.java
@@ -0,0 +1,5 @@
+class Foo {
+  java.util.List<String> foo() {
+    return java.util.Collections.em<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/EmptyListInReturnTernary-out.java b/java/java-tests/testData/codeInsight/completion/smartType/EmptyListInReturnTernary-out.java
new file mode 100644
index 0000000..b9d1045
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/EmptyListInReturnTernary-out.java
@@ -0,0 +1,7 @@
+import java.util.Collections;
+
+class Foo {
+  java.util.Set<String> foo() {
+    return true ? Collections.<String>emptySet() : <caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/EmptyListInReturnTernary.java b/java/java-tests/testData/codeInsight/completion/smartType/EmptyListInReturnTernary.java
new file mode 100644
index 0000000..da30365
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/EmptyListInReturnTernary.java
@@ -0,0 +1,5 @@
+class Foo {
+  java.util.Set<String> foo() {
+    return true ? em<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/EmptyListWithCollectionsPrefix-out.java b/java/java-tests/testData/codeInsight/completion/smartType/EmptyListWithCollectionsPrefix-out.java
new file mode 100644
index 0000000..197b8d1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/EmptyListWithCollectionsPrefix-out.java
@@ -0,0 +1,7 @@
+import java.util.Collections;
+
+class Foo {
+  java.util.List<String> foo() {
+    return Collections.emptyList();<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/EmptyListWithCollectionsPrefix.java b/java/java-tests/testData/codeInsight/completion/smartType/EmptyListWithCollectionsPrefix.java
new file mode 100644
index 0000000..c77ae8f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/EmptyListWithCollectionsPrefix.java
@@ -0,0 +1,5 @@
+class Foo {
+  java.util.List<String> foo() {
+    return Collect<caret>;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/EnumAsDefaultAnnotationParam-out.java b/java/java-tests/testData/codeInsight/completion/smartType/EnumAsDefaultAnnotationParam-out.java
new file mode 100644
index 0000000..7fa1152
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/EnumAsDefaultAnnotationParam-out.java
@@ -0,0 +1,12 @@
+enum MyEnum {
+  FOO, BAR
+}
+
+@interface Anno {
+  MyEnum value();
+}
+
+
+@Anno(MyEnum.FOO<caret>)
+class Foo {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/EnumAsDefaultAnnotationParam.java b/java/java-tests/testData/codeInsight/completion/smartType/EnumAsDefaultAnnotationParam.java
new file mode 100644
index 0000000..14364f5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/EnumAsDefaultAnnotationParam.java
@@ -0,0 +1,12 @@
+enum MyEnum {
+  FOO, BAR
+}
+
+@interface Anno {
+  MyEnum value();
+}
+
+
+@Anno(MyEnum.F<caret>)
+class Foo {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/EnumConstInSwitch-out.java b/java/java-tests/testData/codeInsight/completion/smartType/EnumConstInSwitch-out.java
new file mode 100644
index 0000000..8e383bc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/EnumConstInSwitch-out.java
@@ -0,0 +1,9 @@
+enum E {
+  CONS;
+  
+  void foo (E e) {
+    switch (e) {
+      case CONS:<caret>
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/EnumConstInSwitch.java b/java/java-tests/testData/codeInsight/completion/smartType/EnumConstInSwitch.java
new file mode 100644
index 0000000..d0916ff
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/EnumConstInSwitch.java
@@ -0,0 +1,9 @@
+enum E {
+  CONS;
+  
+  void foo (E e) {
+    switch (e) {
+      case <caret>
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/EnumConstInSwitchOutside-out.java b/java/java-tests/testData/codeInsight/completion/smartType/EnumConstInSwitchOutside-out.java
new file mode 100644
index 0000000..6b095d2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/EnumConstInSwitchOutside-out.java
@@ -0,0 +1,11 @@
+enum E {
+  CONS
+}
+
+class Foo {
+    void foo (E e) {
+    switch (e) {
+      case CONS:<caret>
+    }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/EnumConstInSwitchOutside.java b/java/java-tests/testData/codeInsight/completion/smartType/EnumConstInSwitchOutside.java
new file mode 100644
index 0000000..e4ddf2e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/EnumConstInSwitchOutside.java
@@ -0,0 +1,11 @@
+enum E {
+  CONS
+}
+
+class Foo {
+    void foo (E e) {
+    switch (e) {
+      case C<caret>
+    }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/EnumField-out.java b/java/java-tests/testData/codeInsight/completion/smartType/EnumField-out.java
new file mode 100644
index 0000000..8944fcb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/EnumField-out.java
@@ -0,0 +1,9 @@
+enum MyEnum {
+  FOO, BAR
+}
+
+class Foo {
+  {
+    MyEnum me = MyEnum.FOO;<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/EnumField.java b/java/java-tests/testData/codeInsight/completion/smartType/EnumField.java
new file mode 100644
index 0000000..5e600ac
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/EnumField.java
@@ -0,0 +1,9 @@
+enum MyEnum {
+  FOO, BAR
+}
+
+class Foo {
+  {
+    MyEnum me = FO<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/EnumField1-out.java b/java/java-tests/testData/codeInsight/completion/smartType/EnumField1-out.java
new file mode 100644
index 0000000..74fb6ea
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/EnumField1-out.java
@@ -0,0 +1,9 @@
+enum MyEnum {
+  FOO, BAR
+}
+
+class Foo {
+  MyEnum foo() {
+    return <caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/EnumField1.java b/java/java-tests/testData/codeInsight/completion/smartType/EnumField1.java
new file mode 100644
index 0000000..74fb6ea
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/EnumField1.java
@@ -0,0 +1,9 @@
+enum MyEnum {
+  FOO, BAR
+}
+
+class Foo {
+  MyEnum foo() {
+    return <caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/EverythingDoubles.java b/java/java-tests/testData/codeInsight/completion/smartType/EverythingDoubles.java
new file mode 100644
index 0000000..bfabccf8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/EverythingDoubles.java
@@ -0,0 +1,6 @@
+class Foo {
+    {
+        java.util.List<String> l;
+        new int[l.<caret>]
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ExceptionTwice-out.java b/java/java-tests/testData/codeInsight/completion/smartType/ExceptionTwice-out.java
new file mode 100644
index 0000000..963a3ac
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ExceptionTwice-out.java
@@ -0,0 +1,7 @@
+class MyException extends RuntimeException{}
+
+class MyClass {
+public void foo() throws MyException {
+  throw new MyException();<caret> 
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ExceptionTwice.java b/java/java-tests/testData/codeInsight/completion/smartType/ExceptionTwice.java
new file mode 100644
index 0000000..364a577
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ExceptionTwice.java
@@ -0,0 +1,7 @@
+class MyException extends RuntimeException{}
+
+class MyClass {
+public void foo() throws MyException {
+  throw new MyEx<caret> 
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ExceptionTwice2-out.java b/java/java-tests/testData/codeInsight/completion/smartType/ExceptionTwice2-out.java
new file mode 100644
index 0000000..b08b5fd7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ExceptionTwice2-out.java
@@ -0,0 +1,7 @@
+class MyException extends Exception{}
+
+class MyClass {
+public void foo() throws MyException {
+  throw new MyException();<caret> 
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ExceptionTwice2.java b/java/java-tests/testData/codeInsight/completion/smartType/ExceptionTwice2.java
new file mode 100644
index 0000000..038e6eb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ExceptionTwice2.java
@@ -0,0 +1,7 @@
+class MyException extends Exception{}
+
+class MyClass {
+public void foo() throws MyException {
+  throw new MyEx<caret> 
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ExcessiveTail-out.java b/java/java-tests/testData/codeInsight/completion/smartType/ExcessiveTail-out.java
new file mode 100644
index 0000000..c3c03a1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ExcessiveTail-out.java
@@ -0,0 +1,5 @@
+class HashMap<T,V> {}
+
+public class A {
+  private HashMap<String, String> m = new HashMap<String, String>();<caret>
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ExcessiveTail.java b/java/java-tests/testData/codeInsight/completion/smartType/ExcessiveTail.java
new file mode 100644
index 0000000..b444d8e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ExcessiveTail.java
@@ -0,0 +1,5 @@
+class HashMap<T,V> {}
+
+public class A {
+  private HashMap<String, String> m = new HashMap<String, <selection><caret>Integer</selection>>();
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ExclamationFinishNonBoolean-out.java b/java/java-tests/testData/codeInsight/completion/smartType/ExclamationFinishNonBoolean-out.java
new file mode 100644
index 0000000..7768537
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ExclamationFinishNonBoolean-out.java
@@ -0,0 +1,11 @@
+class BarBase {
+
+    {
+        Foo f = Foo.fo!<caret>
+    }
+
+}
+
+class Foo {
+  static final Foo foo;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ExclamationFinishNonBoolean.java b/java/java-tests/testData/codeInsight/completion/smartType/ExclamationFinishNonBoolean.java
new file mode 100644
index 0000000..8ecd872
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ExclamationFinishNonBoolean.java
@@ -0,0 +1,11 @@
+class BarBase {
+
+    {
+        Foo f = Foo.fo<caret>
+    }
+
+}
+
+class Foo {
+  static final Foo foo;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ExclamationMethodFinish-out.java b/java/java-tests/testData/codeInsight/completion/smartType/ExclamationMethodFinish-out.java
new file mode 100644
index 0000000..b63adc2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ExclamationMethodFinish-out.java
@@ -0,0 +1,8 @@
+class BarBase {
+
+    {
+        boolean f = !foo();<caret>
+    }
+
+    boolean foo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ExclamationMethodFinish.java b/java/java-tests/testData/codeInsight/completion/smartType/ExclamationMethodFinish.java
new file mode 100644
index 0000000..ce518e6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ExclamationMethodFinish.java
@@ -0,0 +1,8 @@
+class BarBase {
+
+    {
+        boolean f = fo<caret>
+    }
+
+    boolean foo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ExclamationStaticFieldFinish-out.java b/java/java-tests/testData/codeInsight/completion/smartType/ExclamationStaticFieldFinish-out.java
new file mode 100644
index 0000000..3747d7c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ExclamationStaticFieldFinish-out.java
@@ -0,0 +1,12 @@
+class BarBase {
+
+    {
+        boolean foo;
+        boolean f = !Foo.foo;<caret>
+    }
+
+}
+
+class Foo {
+  static final Boolean foo;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ExclamationStaticFieldFinish.java b/java/java-tests/testData/codeInsight/completion/smartType/ExclamationStaticFieldFinish.java
new file mode 100644
index 0000000..9a153a9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ExclamationStaticFieldFinish.java
@@ -0,0 +1,12 @@
+class BarBase {
+
+    {
+        boolean foo;
+        boolean f = Foo.fo<caret>
+    }
+
+}
+
+class Foo {
+  static final Boolean foo;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ExclamationVariableFinish-out.java b/java/java-tests/testData/codeInsight/completion/smartType/ExclamationVariableFinish-out.java
new file mode 100644
index 0000000..4115518
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ExclamationVariableFinish-out.java
@@ -0,0 +1,8 @@
+class BarBase {
+
+    {
+        boolean foo;
+        boolean f = !foo;<caret>
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ExclamationVariableFinish.java b/java/java-tests/testData/codeInsight/completion/smartType/ExclamationVariableFinish.java
new file mode 100644
index 0000000..b000061
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ExclamationVariableFinish.java
@@ -0,0 +1,8 @@
+class BarBase {
+
+    {
+        boolean foo;
+        boolean f = fo<caret>
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ExcludeDeclaredConstant-out.java b/java/java-tests/testData/codeInsight/completion/smartType/ExcludeDeclaredConstant-out.java
new file mode 100644
index 0000000..bff1ac7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ExcludeDeclaredConstant-out.java
@@ -0,0 +1,5 @@
+public class Foo {
+  public static final Foo FOO = "";
+  public static final Foo BAR = FOO;
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ExcludeDeclaredConstant.java b/java/java-tests/testData/codeInsight/completion/smartType/ExcludeDeclaredConstant.java
new file mode 100644
index 0000000..2cad3ce
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ExcludeDeclaredConstant.java
@@ -0,0 +1,5 @@
+public class Foo {
+  public static final Foo FOO = "";
+  public static final Foo BAR = <caret>;
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ExpectedReturnType-out.java b/java/java-tests/testData/codeInsight/completion/smartType/ExpectedReturnType-out.java
new file mode 100644
index 0000000..c96328d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ExpectedReturnType-out.java
@@ -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.
+ */
+interface I {
+  boolean foo(String s);
+}
+public class Test {
+  public int m() {
+    I i = s -> {
+      return s.contains();
+    };
+    return 0;
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ExpectedReturnType.java b/java/java-tests/testData/codeInsight/completion/smartType/ExpectedReturnType.java
new file mode 100644
index 0000000..81f759d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ExpectedReturnType.java
@@ -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.
+ */
+interface I {
+  boolean foo(String s);
+}
+public class Test {
+  public int m() {
+    I i = s -> {
+      return s.<caret>
+    };
+    return 0;
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ExpectedReturnType1-out.java b/java/java-tests/testData/codeInsight/completion/smartType/ExpectedReturnType1-out.java
new file mode 100644
index 0000000..73a03e4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ExpectedReturnType1-out.java
@@ -0,0 +1,24 @@
+/*
+ * 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.
+ */
+interface I {
+  boolean foo(String s);
+}
+public class Test {
+  public int m() {
+    I i = s -> s.contains();
+    return 0;
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ExpectedReturnType1.java b/java/java-tests/testData/codeInsight/completion/smartType/ExpectedReturnType1.java
new file mode 100644
index 0000000..240b05b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ExpectedReturnType1.java
@@ -0,0 +1,24 @@
+/*
+ * 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.
+ */
+interface I {
+  boolean foo(String s);
+}
+public class Test {
+  public int m() {
+    I i = s -> s.<caret>
+    return 0;
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ExpectedReturnTypeWithSubstitution-out.java b/java/java-tests/testData/codeInsight/completion/smartType/ExpectedReturnTypeWithSubstitution-out.java
new file mode 100644
index 0000000..0ffbb8b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ExpectedReturnTypeWithSubstitution-out.java
@@ -0,0 +1,31 @@
+/*
+ * 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.
+ */
+public class Test {
+  public interface Some<T> {
+    T test(T p1, T p2);
+  }
+
+  class Foo {
+    public Foo create() {return null;}
+    public Foo create1() {return null;}
+  }
+
+  {
+    Some<Foo> some = (i1, i2) -> {
+      return i1.create();
+    };
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ExpectedReturnTypeWithSubstitution.java b/java/java-tests/testData/codeInsight/completion/smartType/ExpectedReturnTypeWithSubstitution.java
new file mode 100644
index 0000000..029456d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ExpectedReturnTypeWithSubstitution.java
@@ -0,0 +1,31 @@
+/*
+ * 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.
+ */
+public class Test {
+  public interface Some<T> {
+    T test(T p1, T p2);
+  }
+
+  class Foo {
+    public Foo create() {return null;}
+    public Foo create1() {return null;}
+  }
+
+  {
+    Some<Foo> some = (i1, i2) -> {
+      return i1.<caret>
+    };
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ExplicitMethodTypeParametersFromSuperClass-out.java b/java/java-tests/testData/codeInsight/completion/smartType/ExplicitMethodTypeParametersFromSuperClass-out.java
new file mode 100644
index 0000000..831ff2d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ExplicitMethodTypeParametersFromSuperClass-out.java
@@ -0,0 +1,13 @@
+import java.io.File;
+
+public class Super {
+  protected <T> T foo() {}
+}
+
+public class Foo extends Super {
+    {
+        bar(this.<File>foo());<caret>
+    }
+
+    void bar(java.io.File s) {}
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ExplicitMethodTypeParametersFromSuperClass.java b/java/java-tests/testData/codeInsight/completion/smartType/ExplicitMethodTypeParametersFromSuperClass.java
new file mode 100644
index 0000000..8d685e3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ExplicitMethodTypeParametersFromSuperClass.java
@@ -0,0 +1,11 @@
+public class Super {
+  protected <T> T foo() {}
+}
+
+public class Foo extends Super {
+    {
+        bar(fo<caret>)
+    }
+
+    void bar(java.io.File s) {}
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ExplicitMethodTypeParametersOverZealous-out.java b/java/java-tests/testData/codeInsight/completion/smartType/ExplicitMethodTypeParametersOverZealous-out.java
new file mode 100644
index 0000000..ff19c35
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ExplicitMethodTypeParametersOverZealous-out.java
@@ -0,0 +1,9 @@
+public class Foo {
+    {
+        bar(foo());<caret>
+    }
+
+    <T> T foo() {}
+
+    void bar(Object s) {}
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ExplicitMethodTypeParametersOverZealous.java b/java/java-tests/testData/codeInsight/completion/smartType/ExplicitMethodTypeParametersOverZealous.java
new file mode 100644
index 0000000..1867542
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ExplicitMethodTypeParametersOverZealous.java
@@ -0,0 +1,9 @@
+public class Foo {
+    {
+        bar(fo<caret>)
+    }
+
+    <T> T foo() {}
+
+    void bar(Object s) {}
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ExplicitMethodTypeParametersQualify-out.java b/java/java-tests/testData/codeInsight/completion/smartType/ExplicitMethodTypeParametersQualify-out.java
new file mode 100644
index 0000000..9cd3adc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ExplicitMethodTypeParametersQualify-out.java
@@ -0,0 +1,11 @@
+import java.io.File;
+
+public class Foo {
+    {
+        bar(this.<File>foo());<caret>
+    }
+
+    <T> T foo() {}
+
+    void bar(java.io.File s) {}
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ExplicitMethodTypeParametersQualify.java b/java/java-tests/testData/codeInsight/completion/smartType/ExplicitMethodTypeParametersQualify.java
new file mode 100644
index 0000000..85ececb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ExplicitMethodTypeParametersQualify.java
@@ -0,0 +1,9 @@
+public class Foo {
+    {
+        bar(fo<caret>)
+    }
+
+    <T> T foo() {}
+
+    void bar(java.io.File s) {}
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ExplicitWildcardArrayParam-out.java b/java/java-tests/testData/codeInsight/completion/smartType/ExplicitWildcardArrayParam-out.java
new file mode 100644
index 0000000..5398df7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ExplicitWildcardArrayParam-out.java
@@ -0,0 +1,12 @@
+class Key<T> {
+  static <T> Key<T> create(String s);
+}
+
+class Foo {
+  <T> void putUserData(Key<T[]> key, T value) {}
+
+  {
+    putUserData(Key.create(<caret>), )
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ExplicitWildcardArrayParam.java b/java/java-tests/testData/codeInsight/completion/smartType/ExplicitWildcardArrayParam.java
new file mode 100644
index 0000000..5ce30d3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ExplicitWildcardArrayParam.java
@@ -0,0 +1,12 @@
+class Key<T> {
+  static <T> Key<T> create(String s);
+}
+
+class Foo {
+  <T> void putUserData(Key<T[]> key, T value) {}
+
+  {
+    putUserData(<caret>)
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ExtendsInTypeCast-out.java b/java/java-tests/testData/codeInsight/completion/smartType/ExtendsInTypeCast-out.java
new file mode 100644
index 0000000..445f8a0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ExtendsInTypeCast-out.java
@@ -0,0 +1,10 @@
+class List<T> {
+  public void add(T t) {};
+}
+
+public class A {
+  {
+    List<? extends Object> list;
+    list.add((Object) <caret>)
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ExtendsInTypeCast.java b/java/java-tests/testData/codeInsight/completion/smartType/ExtendsInTypeCast.java
new file mode 100644
index 0000000..44d945b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ExtendsInTypeCast.java
@@ -0,0 +1,10 @@
+class List<T> {
+  public void add(T t) {};
+}
+
+public class A {
+  {
+    List<? extends Object> list;
+    list.add((<caret>))
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ExtraSemicolonAfterMethodParam-out.java b/java/java-tests/testData/codeInsight/completion/smartType/ExtraSemicolonAfterMethodParam-out.java
new file mode 100644
index 0000000..19e323e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ExtraSemicolonAfterMethodParam-out.java
@@ -0,0 +1,20 @@
+public class MyAspect {
+
+    public void foo() {
+        State state;
+        StateListener stateListener;
+        state.addListener( stateListener );<caret>
+
+    }
+
+    private static class State {
+        void addListener(StateListener listener) {}
+    }
+
+
+
+    private static class StateListener {
+
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ExtraSemicolonAfterMethodParam.java b/java/java-tests/testData/codeInsight/completion/smartType/ExtraSemicolonAfterMethodParam.java
new file mode 100644
index 0000000..b3739e8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ExtraSemicolonAfterMethodParam.java
@@ -0,0 +1,20 @@
+public class MyAspect {
+
+    public void foo() {
+        State state;
+        StateListener stateListener;
+        state.addListener( sta<caret>);
+
+    }
+
+    private static class State {
+        void addListener(StateListener listener) {}
+    }
+
+
+
+    private static class StateListener {
+
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/FieldsSetAbove-out.java b/java/java-tests/testData/codeInsight/completion/smartType/FieldsSetAbove-out.java
new file mode 100644
index 0000000..cc99ed5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/FieldsSetAbove-out.java
@@ -0,0 +1,9 @@
+class A {
+  int doo;
+  int aaa;
+  A(int b) {
+    doo = b;
+    aaa = doo;<caret>
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/FieldsSetAbove.java b/java/java-tests/testData/codeInsight/completion/smartType/FieldsSetAbove.java
new file mode 100644
index 0000000..bad8dd3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/FieldsSetAbove.java
@@ -0,0 +1,9 @@
+class A {
+  int doo;
+  int aaa;
+  A(int b) {
+    doo = b;
+    aaa = d<caret>
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/FieldsSetInAnotherConstructor-out.java b/java/java-tests/testData/codeInsight/completion/smartType/FieldsSetInAnotherConstructor-out.java
new file mode 100644
index 0000000..f78838d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/FieldsSetInAnotherConstructor-out.java
@@ -0,0 +1,13 @@
+class A {
+  int doo;
+  int aaa;
+  A(int b) {
+    doo = b;
+  }
+
+  A(int aac, int aad) {
+    this(aac);
+    aaa = doo;<caret>
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/FieldsSetInAnotherConstructor.java b/java/java-tests/testData/codeInsight/completion/smartType/FieldsSetInAnotherConstructor.java
new file mode 100644
index 0000000..51b47e1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/FieldsSetInAnotherConstructor.java
@@ -0,0 +1,13 @@
+class A {
+  int doo;
+  int aaa;
+  A(int b) {
+    doo = b;
+  }
+
+  A(int aac, int aad) {
+    this(aac);
+    aaa = d<caret>
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/FilterPrivateConstructors-out.java b/java/java-tests/testData/codeInsight/completion/smartType/FilterPrivateConstructors-out.java
new file mode 100644
index 0000000..31d2d7b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/FilterPrivateConstructors-out.java
@@ -0,0 +1,5 @@
+class Foo {
+  {
+    Class c = new <caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/FilterPrivateConstructors.java b/java/java-tests/testData/codeInsight/completion/smartType/FilterPrivateConstructors.java
new file mode 100644
index 0000000..31d2d7b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/FilterPrivateConstructors.java
@@ -0,0 +1,5 @@
+class Foo {
+  {
+    Class c = new <caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/Foreach-out.java b/java/java-tests/testData/codeInsight/completion/smartType/Foreach-out.java
new file mode 100644
index 0000000..da4a0b0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/Foreach-out.java
@@ -0,0 +1,11 @@
+import java.util.List;
+class Foreach {
+    void foo (Foreach e) {
+        for (String s : e.f()) {}
+    }
+
+    List<? extends String> f () {
+        return null;
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/Foreach.java b/java/java-tests/testData/codeInsight/completion/smartType/Foreach.java
new file mode 100644
index 0000000..dd9dd91
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/Foreach.java
@@ -0,0 +1,11 @@
+import java.util.List;
+class Foreach {
+    void foo (Foreach e) {
+        for (String s : e.<caret>) {}
+    }
+
+    List<? extends String> f () {
+        return null;
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ForeachLoopVariableInIterableExpression.java b/java/java-tests/testData/codeInsight/completion/smartType/ForeachLoopVariableInIterableExpression.java
new file mode 100644
index 0000000..a5032b9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ForeachLoopVariableInIterableExpression.java
@@ -0,0 +1,5 @@
+public class Bar {{
+        for (java.util.List trololo : trolo<caret>) {
+
+        }
+    } }
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/HidingFields-out.java b/java/java-tests/testData/codeInsight/completion/smartType/HidingFields-out.java
new file mode 100644
index 0000000..2b15203
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/HidingFields-out.java
@@ -0,0 +1,12 @@
+interface A {
+    int ABC;
+}
+interface B extends A{
+    int ABC;
+}
+
+class Foo {
+    {
+        int x = B.ABC;<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/HidingFields.java b/java/java-tests/testData/codeInsight/completion/smartType/HidingFields.java
new file mode 100644
index 0000000..8c405fc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/HidingFields.java
@@ -0,0 +1,12 @@
+interface A {
+    int ABC;
+}
+interface B extends A{
+    int ABC;
+}
+
+class Foo {
+    {
+        int x = B.A<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/HonorSelection-out.java b/java/java-tests/testData/codeInsight/completion/smartType/HonorSelection-out.java
new file mode 100644
index 0000000..39b617a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/HonorSelection-out.java
@@ -0,0 +1,9 @@
+class Foo {
+  {
+    Foo fa;
+    String foo;
+    String s = foo;<caret>
+  }
+
+  public String toString() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/HonorSelection.java b/java/java-tests/testData/codeInsight/completion/smartType/HonorSelection.java
new file mode 100644
index 0000000..b838fde
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/HonorSelection.java
@@ -0,0 +1,9 @@
+class Foo {
+  {
+    Foo fa;
+    String foo;
+    String s = f<selection>.toString();</selection>
+  }
+
+  public String toString() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/IDEADEV13148.java b/java/java-tests/testData/codeInsight/completion/smartType/IDEADEV13148.java
new file mode 100644
index 0000000..bd148a6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/IDEADEV13148.java
@@ -0,0 +1,6 @@
+class Clazz {
+
+    static void foo() {
+        synchronized(<caret>)
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/IDEADEV2626-out.java b/java/java-tests/testData/codeInsight/completion/smartType/IDEADEV2626-out.java
new file mode 100644
index 0000000..86d5e63
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/IDEADEV2626-out.java
@@ -0,0 +1,12 @@
+class Generic<T> { }
+
+class Other {
+  static <T> T take(Generic<T> thing) { return null; }
+}
+
+class Tester {
+  Generic<String> str;
+  void method() {
+    CharSequence x = Other.take(str)<caret>;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/IDEADEV2626.java b/java/java-tests/testData/codeInsight/completion/smartType/IDEADEV2626.java
new file mode 100644
index 0000000..ca2e8213
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/IDEADEV2626.java
@@ -0,0 +1,12 @@
+class Generic<T> { }
+
+class Other {
+  static <T> T take(Generic<T> thing) { return null; }
+}
+
+class Tester {
+  Generic<String> str;
+  void method() {
+    CharSequence x = Other.take(<caret>);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/IDEADEV2668-out.java b/java/java-tests/testData/codeInsight/completion/smartType/IDEADEV2668-out.java
new file mode 100644
index 0000000..9140574
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/IDEADEV2668-out.java
@@ -0,0 +1,11 @@
+class BigDecimal{}
+
+enum Treasures {
+    DIAMOND(new BigDecimal())<caret>;
+
+    Treasures(BigDecimal value) {
+        this.value = value;
+    }
+
+    private BigDecimal value;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/IDEADEV2668.java b/java/java-tests/testData/codeInsight/completion/smartType/IDEADEV2668.java
new file mode 100644
index 0000000..4729a7c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/IDEADEV2668.java
@@ -0,0 +1,11 @@
+class BigDecimal{}
+
+enum Treasures {
+    DIAMOND(new <caret>);
+
+    Treasures(BigDecimal value) {
+        this.value = value;
+    }
+
+    private BigDecimal value;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/IDEADEV5150-out.java b/java/java-tests/testData/codeInsight/completion/smartType/IDEADEV5150-out.java
new file mode 100644
index 0000000..6dc7948
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/IDEADEV5150-out.java
@@ -0,0 +1,12 @@
+import java.util.*;
+
+class Test
+{
+    private String[] strings;
+
+    public List<String> getStrings()
+    {
+        return Arrays.asList(strings);
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/IDEADEV5150.java b/java/java-tests/testData/codeInsight/completion/smartType/IDEADEV5150.java
new file mode 100644
index 0000000..97605ac
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/IDEADEV5150.java
@@ -0,0 +1,12 @@
+import java.util.*;
+
+class Test
+{
+    private String[] strings;
+
+    public List<String> getStrings()
+    {
+        return Arrays.asList(str<caret>);
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/IDEADEV7835-out.java b/java/java-tests/testData/codeInsight/completion/smartType/IDEADEV7835-out.java
new file mode 100644
index 0000000..21f8a8e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/IDEADEV7835-out.java
@@ -0,0 +1,10 @@
+import java.util.*;
+
+class List<T> {}
+
+class Clazz {
+
+    static void foo(Foo<String> foo) {
+        List<Map.Entry> f = new List<Map.Entry>();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/IDEADEV7835.java b/java/java-tests/testData/codeInsight/completion/smartType/IDEADEV7835.java
new file mode 100644
index 0000000..ec2ce5a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/IDEADEV7835.java
@@ -0,0 +1,10 @@
+import java.util.*;
+
+class List<T> {}
+
+class Clazz {
+
+    static void foo(Foo<String> foo) {
+        List<Map.Entry> f = new L<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/IfConditionBinaryExpression-out.java b/java/java-tests/testData/codeInsight/completion/smartType/IfConditionBinaryExpression-out.java
new file mode 100644
index 0000000..5994130
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/IfConditionBinaryExpression-out.java
@@ -0,0 +1,6 @@
+public class TabComplete {
+	public void scene() {
+        boolean bbb;
+        if (bbb<caret> == 2) {}
+	}
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/IfConditionBinaryExpression.java b/java/java-tests/testData/codeInsight/completion/smartType/IfConditionBinaryExpression.java
new file mode 100644
index 0000000..e2eef4d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/IfConditionBinaryExpression.java
@@ -0,0 +1,6 @@
+public class TabComplete {
+	public void scene() {
+        boolean bbb;
+        if (b<caret> == 2) {}
+	}
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/IfConditionExpectedType-out.java b/java/java-tests/testData/codeInsight/completion/smartType/IfConditionExpectedType-out.java
new file mode 100644
index 0000000..c8c1ad6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/IfConditionExpectedType-out.java
@@ -0,0 +1,19 @@
+interface Computable<T> {
+    T compute();
+}
+
+public class Zoo2 {
+    <T> T run(Computable<T> computable) {
+        
+    }
+
+    {
+        
+        if (run(new Computable<Boolean>() {
+            @Override
+            public Boolean compute() {
+                <selection>return null;  //To change body of implemented methods use File | Settings | File Templates.</selection>
+            }
+        }))
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/IfConditionExpectedType.java b/java/java-tests/testData/codeInsight/completion/smartType/IfConditionExpectedType.java
new file mode 100644
index 0000000..d52c2ca
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/IfConditionExpectedType.java
@@ -0,0 +1,14 @@
+interface Computable<T> {
+    T compute();
+}
+
+public class Zoo2 {
+    <T> T run(Computable<T> computable) {
+        
+    }
+
+    {
+        
+        if (run(new <caret>))
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/InThisExpression-out.java b/java/java-tests/testData/codeInsight/completion/smartType/InThisExpression-out.java
new file mode 100644
index 0000000..c5ccb38
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/InThisExpression-out.java
@@ -0,0 +1,8 @@
+public class Foo {
+    
+    Runnable r = new Runnable() {
+        public void run() {
+            Foo f = Foo.this;<caret>Foo.this;
+        }
+    };
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/InThisExpression.java b/java/java-tests/testData/codeInsight/completion/smartType/InThisExpression.java
new file mode 100644
index 0000000..fba4e083
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/InThisExpression.java
@@ -0,0 +1,8 @@
+public class Foo {
+    
+    Runnable r = new Runnable() {
+        public void run() {
+            Foo f = <caret>Foo.this;
+        }
+    };
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/InaccessibleClassAfterNew-out.java b/java/java-tests/testData/codeInsight/completion/smartType/InaccessibleClassAfterNew-out.java
new file mode 100644
index 0000000..176db05
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/InaccessibleClassAfterNew-out.java
@@ -0,0 +1,6 @@
+class A {
+  {
+    bar.Bar.accept(new foo.Foo() {
+    });
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/InaccessibleClassAfterNew.java b/java/java-tests/testData/codeInsight/completion/smartType/InaccessibleClassAfterNew.java
new file mode 100644
index 0000000..37f5769
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/InaccessibleClassAfterNew.java
@@ -0,0 +1,5 @@
+class A {
+  {
+    bar.Bar.accept(new <caret>)
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/InferFromCall-out.java b/java/java-tests/testData/codeInsight/completion/smartType/InferFromCall-out.java
new file mode 100644
index 0000000..c8fe903
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/InferFromCall-out.java
@@ -0,0 +1,14 @@
+import java.util.ArrayList;
+
+class Arrays {
+  static <T> ArrayList<T> asList(T... ts) {
+    return null;
+  }
+}
+
+class DDD {
+    static {
+        DDD ddd = new DDD();
+        new ArrayList<DDD>(Arrays.asList(ddd)<caret>);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/InferFromCall.java b/java/java-tests/testData/codeInsight/completion/smartType/InferFromCall.java
new file mode 100644
index 0000000..cd6592ab
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/InferFromCall.java
@@ -0,0 +1,14 @@
+import java.util.ArrayList;
+
+class Arrays {
+  static <T> ArrayList<T> asList(T... ts) {
+    return null;
+  }
+}
+
+class DDD {
+    static {
+        DDD ddd = new DDD();
+        new ArrayList<DDD>(Arrays.asList(<caret>));
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/InferFromCall1-out.java b/java/java-tests/testData/codeInsight/completion/smartType/InferFromCall1-out.java
new file mode 100644
index 0000000..9c55bce
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/InferFromCall1-out.java
@@ -0,0 +1,11 @@
+class Key<T> {}
+class Foo {
+  <T> void putUserData(Key<T> k, T t) {}
+
+  <T> Key<T> getKey(Key<T> t) {}
+
+  {
+    Key<Key<String>> k = new Key<Key<String>>();
+    putUserData(k, getKey(new Key<String>())<caret>);
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/InferFromCall1.java b/java/java-tests/testData/codeInsight/completion/smartType/InferFromCall1.java
new file mode 100644
index 0000000..5e8b389
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/InferFromCall1.java
@@ -0,0 +1,11 @@
+class Key<T> {}
+class Foo {
+  <T> void putUserData(Key<T> k, T t) {}
+
+  <T> Key<T> getKey(Key<T> t) {}
+
+  {
+    Key<Key<String>> k = new Key<Key<String>>();
+    putUserData(k, getKey(new <caret>));
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/InheritedClass-out.java b/java/java-tests/testData/codeInsight/completion/smartType/InheritedClass-out.java
new file mode 100644
index 0000000..e0fd7a5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/InheritedClass-out.java
@@ -0,0 +1,10 @@
+class Foo {}
+class Bar extends Foo {
+
+void test() {
+  method(new Bar());<caret>
+}
+
+void method(Foo f) {}
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/InheritedClass.java b/java/java-tests/testData/codeInsight/completion/smartType/InheritedClass.java
new file mode 100644
index 0000000..c64748a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/InheritedClass.java
@@ -0,0 +1,10 @@
+class Foo {}
+class Bar extends Foo {
+
+void test() {
+  method(new B<caret>)
+}
+
+void method(Foo f) {}
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/InnerAfterNew-out.java b/java/java-tests/testData/codeInsight/completion/smartType/InnerAfterNew-out.java
new file mode 100644
index 0000000..3dd226d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/InnerAfterNew-out.java
@@ -0,0 +1,14 @@
+public class Test {
+
+  {
+    new Foo<String>().method(new Outer.Inner<String>());<caret>
+  }
+
+  static class Outer {
+    static class Inner<A> {}
+  }
+
+  class Foo<A> {
+    public void method(Outer.Inner<A> inner) {}
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/InnerAfterNew.java b/java/java-tests/testData/codeInsight/completion/smartType/InnerAfterNew.java
new file mode 100644
index 0000000..ea4d21d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/InnerAfterNew.java
@@ -0,0 +1,14 @@
+public class Test {
+
+  {
+    new Foo<String>().method(new <caret>);
+  }
+
+  static class Outer {
+    static class Inner<A> {}
+  }
+
+  class Foo<A> {
+    public void method(Outer.Inner<A> inner) {}
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/InnerClassImports-out.java b/java/java-tests/testData/codeInsight/completion/smartType/InnerClassImports-out.java
new file mode 100644
index 0000000..715d992
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/InnerClassImports-out.java
@@ -0,0 +1,12 @@
+import java.awt.geom.Point2D;
+
+class UTest {
+
+    void foo() {
+        Point2D.Double d = new Point2D.Double();<caret>
+    }
+
+    void bar() {
+        Double d;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/InnerClassImports.java b/java/java-tests/testData/codeInsight/completion/smartType/InnerClassImports.java
new file mode 100644
index 0000000..d034430
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/InnerClassImports.java
@@ -0,0 +1,12 @@
+import java.awt.geom.Point2D;
+
+class UTest {
+
+    void foo() {
+        Point2D.Double d = new <caret>
+    }
+
+    void bar() {
+        Double d;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/InnerEnum-out.java b/java/java-tests/testData/codeInsight/completion/smartType/InnerEnum-out.java
new file mode 100644
index 0000000..d63e577
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/InnerEnum-out.java
@@ -0,0 +1,11 @@
+public class Foo {
+    void foo() {
+      Bar.Fubar b = true ? Bar.Fubar.Bar : <caret>
+    }
+}
+  
+public static class Bar {
+  public enum Fubar {
+    Foo, Bar
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/InnerEnum.java b/java/java-tests/testData/codeInsight/completion/smartType/InnerEnum.java
new file mode 100644
index 0000000..22cb9156
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/InnerEnum.java
@@ -0,0 +1,11 @@
+public class Foo {
+    void foo() {
+      Bar.Fubar b = true ? <caret>
+    }
+}
+  
+public static class Bar {
+  public enum Fubar {
+    Foo, Bar
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/InnerEnumInMethod-out.java b/java/java-tests/testData/codeInsight/completion/smartType/InnerEnumInMethod-out.java
new file mode 100644
index 0000000..465b8bc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/InnerEnumInMethod-out.java
@@ -0,0 +1,10 @@
+public class Foo {
+
+    {
+        enum Bar {
+            Fubar
+        }
+        Bar b = Bar.Fubar;<caret> 
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/InnerEnumInMethod.java b/java/java-tests/testData/codeInsight/completion/smartType/InnerEnumInMethod.java
new file mode 100644
index 0000000..5802730
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/InnerEnumInMethod.java
@@ -0,0 +1,10 @@
+public class Foo {
+
+    {
+        enum Bar {
+            Fubar
+        }
+        Bar b = Fub<caret> 
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/InsertOverride-out.java b/java/java-tests/testData/codeInsight/completion/smartType/InsertOverride-out.java
new file mode 100644
index 0000000..bd86c53
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/InsertOverride-out.java
@@ -0,0 +1,10 @@
+class C {
+    void f() {
+        Runnable r = new Runnable() {
+            @Override
+            public void run() {
+                <selection>//To change body of implemented methods use File | Settings | File Templates.</selection>
+            }
+        };
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/InsertOverride.java b/java/java-tests/testData/codeInsight/completion/smartType/InsertOverride.java
new file mode 100644
index 0000000..f030be3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/InsertOverride.java
@@ -0,0 +1,5 @@
+class C {
+    void f() {
+        Runnable r = new <caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/InsertTypeParametersOnImporting-out.java b/java/java-tests/testData/codeInsight/completion/smartType/InsertTypeParametersOnImporting-out.java
new file mode 100644
index 0000000..b95c096c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/InsertTypeParametersOnImporting-out.java
@@ -0,0 +1,8 @@
+import java.util.HashMap;
+import java.util.Map;
+
+class Foo {
+  {
+    Map<String,String> m = new HashMap<String, String>(<caret>);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/InsertTypeParametersOnImporting.java b/java/java-tests/testData/codeInsight/completion/smartType/InsertTypeParametersOnImporting.java
new file mode 100644
index 0000000..d0f7a83
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/InsertTypeParametersOnImporting.java
@@ -0,0 +1,7 @@
+import java.util.Map;
+
+class Foo {
+  {
+    Map<String,String> m = new HashM<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/InsideCatch-out.java b/java/java-tests/testData/codeInsight/completion/smartType/InsideCatch-out.java
new file mode 100644
index 0000000..846e156
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/InsideCatch-out.java
@@ -0,0 +1,9 @@
+class A{
+
+{
+ try{
+  throw new Exception();
+ }
+ catch(Exception <caret>)
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/InsideCatch.java b/java/java-tests/testData/codeInsight/completion/smartType/InsideCatch.java
new file mode 100644
index 0000000..86f69aa
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/InsideCatch.java
@@ -0,0 +1,9 @@
+class A{
+
+{
+ try{
+  throw new Exception();
+ }
+ catch(<caret>)
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/InsideGenericClassLiteral.java b/java/java-tests/testData/codeInsight/completion/smartType/InsideGenericClassLiteral.java
new file mode 100644
index 0000000..60419b7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/InsideGenericClassLiteral.java
@@ -0,0 +1,9 @@
+class Foo {
+
+  <T extends CharSequence> T bar(Class<T> t) {}
+
+  {
+     bar(St<caret>.class)
+  }
+
+  }
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/InsideStringLiteral.java b/java/java-tests/testData/codeInsight/completion/smartType/InsideStringLiteral.java
new file mode 100644
index 0000000..77522e4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/InsideStringLiteral.java
@@ -0,0 +1,3 @@
+public class ZZZ {
+       String s = "<caret>";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/InstanceMethodParametersFromStaticContext-out.java b/java/java-tests/testData/codeInsight/completion/smartType/InstanceMethodParametersFromStaticContext-out.java
new file mode 100644
index 0000000..d8bce2a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/InstanceMethodParametersFromStaticContext-out.java
@@ -0,0 +1,13 @@
+public class MyFirstTestClassBoo {
+
+    static void foo(int a) {}
+
+    void foo(String s) {}
+
+    static {
+        int xxy;
+        String xxz;
+        foo(xxy);<caret>
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/InstanceMethodParametersFromStaticContext.java b/java/java-tests/testData/codeInsight/completion/smartType/InstanceMethodParametersFromStaticContext.java
new file mode 100644
index 0000000..a7dc2e0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/InstanceMethodParametersFromStaticContext.java
@@ -0,0 +1,13 @@
+public class MyFirstTestClassBoo {
+
+    static void foo(int a) {}
+
+    void foo(String s) {}
+
+    static {
+        int xxy;
+        String xxz;
+        foo(xx<caret>)
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/InstanceMethodParametersFromStaticContext2-out.java b/java/java-tests/testData/codeInsight/completion/smartType/InstanceMethodParametersFromStaticContext2-out.java
new file mode 100644
index 0000000..01c0bc7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/InstanceMethodParametersFromStaticContext2-out.java
@@ -0,0 +1,10 @@
+public class MyFirstTestClassBoo {
+
+    void foo(String s) {}
+
+    static {
+        String xxz;
+        foo(xxz);<caret>
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/InstanceMethodParametersFromStaticContext2.java b/java/java-tests/testData/codeInsight/completion/smartType/InstanceMethodParametersFromStaticContext2.java
new file mode 100644
index 0000000..b1b85bb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/InstanceMethodParametersFromStaticContext2.java
@@ -0,0 +1,10 @@
+public class MyFirstTestClassBoo {
+
+    void foo(String s) {}
+
+    static {
+        String xxz;
+        foo(xx<caret>)
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/InstanceofedInsideAnonymous-out.java b/java/java-tests/testData/codeInsight/completion/smartType/InstanceofedInsideAnonymous-out.java
new file mode 100644
index 0000000..3cfb17d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/InstanceofedInsideAnonymous-out.java
@@ -0,0 +1,16 @@
+class C{
+    {
+        Object o;
+        if (o instanceof Foo) {
+            new Runnable() {
+                public void run() {
+                    Foo f = (Foo) o;<caret>
+                }
+            }
+        }
+    }
+}
+
+class Foo {
+    void dofoo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/InstanceofedInsideAnonymous.java b/java/java-tests/testData/codeInsight/completion/smartType/InstanceofedInsideAnonymous.java
new file mode 100644
index 0000000..eb08b22
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/InstanceofedInsideAnonymous.java
@@ -0,0 +1,16 @@
+class C{
+    {
+        Object o;
+        if (o instanceof Foo) {
+            new Runnable() {
+                public void run() {
+                    Foo f = <caret>
+                }
+            }
+        }
+    }
+}
+
+class Foo {
+    void dofoo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/IntConstInSwitch-out.java b/java/java-tests/testData/codeInsight/completion/smartType/IntConstInSwitch-out.java
new file mode 100644
index 0000000..8547f50
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/IntConstInSwitch-out.java
@@ -0,0 +1,11 @@
+class E {
+  static final int ABC;
+  static final int DEF;
+
+  void foo (int e) {
+    int ADF;
+    switch (e) {
+      case ABC:<caret>
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/IntConstInSwitch.java b/java/java-tests/testData/codeInsight/completion/smartType/IntConstInSwitch.java
new file mode 100644
index 0000000..e2d37df
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/IntConstInSwitch.java
@@ -0,0 +1,11 @@
+class E {
+  static final int ABC;
+  static final int DEF;
+
+  void foo (int e) {
+    int ADF;
+    switch (e) {
+      case A<caret>
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/IntPlusLongNotDouble-out.java b/java/java-tests/testData/codeInsight/completion/smartType/IntPlusLongNotDouble-out.java
new file mode 100644
index 0000000..8025008
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/IntPlusLongNotDouble-out.java
@@ -0,0 +1,7 @@
+class Foo {
+    {
+        int a;
+        long b;
+        int c = a + (int) <caret>b;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/IntPlusLongNotDouble.java b/java/java-tests/testData/codeInsight/completion/smartType/IntPlusLongNotDouble.java
new file mode 100644
index 0000000..288fe21
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/IntPlusLongNotDouble.java
@@ -0,0 +1,7 @@
+class Foo {
+    {
+        int a;
+        long b;
+        int c = a + (<caret>b;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/JavadocThrows-out.java b/java/java-tests/testData/codeInsight/completion/smartType/JavadocThrows-out.java
new file mode 100644
index 0000000..d97ac7c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/JavadocThrows-out.java
@@ -0,0 +1,9 @@
+class MyException extends RuntimeException{}
+
+class MyClass {
+/**
+* @throws MyException <caret>
+*/
+public void foo() throws MyException {
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/JavadocThrows.java b/java/java-tests/testData/codeInsight/completion/smartType/JavadocThrows.java
new file mode 100644
index 0000000..2295fba
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/JavadocThrows.java
@@ -0,0 +1,9 @@
+class MyException extends RuntimeException{}
+
+class MyClass {
+/**
+* @throws <caret>
+*/
+public void foo() throws MyException {
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/LiveTemplate-out.java b/java/java-tests/testData/codeInsight/completion/smartType/LiveTemplate-out.java
new file mode 100644
index 0000000..a969d7e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/LiveTemplate-out.java
@@ -0,0 +1,12 @@
+class Foo {
+}
+
+class FooFactory {
+  static Foo createFoo() {}
+}
+
+class XXX {
+  {
+    Foo f = FooFactory.createFoo()<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/LiveTemplate.java b/java/java-tests/testData/codeInsight/completion/smartType/LiveTemplate.java
new file mode 100644
index 0000000..bd9978f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/LiveTemplate.java
@@ -0,0 +1,12 @@
+class Foo {
+}
+
+class FooFactory {
+  static Foo createFoo() {}
+}
+
+class XXX {
+  {
+    Foo f = <caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/MeaninglessExplicitWildcardParam-out.java b/java/java-tests/testData/codeInsight/completion/smartType/MeaninglessExplicitWildcardParam-out.java
new file mode 100644
index 0000000..61c88d7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/MeaninglessExplicitWildcardParam-out.java
@@ -0,0 +1,12 @@
+class Key<T> {
+  static <T> Key<T> create(String s);
+}
+
+class Foo {
+  <T> void putUserData(Key<T> key, T value) {}
+
+  {
+    putUserData(Key.create(<caret>), )
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/MeaninglessExplicitWildcardParam.java b/java/java-tests/testData/codeInsight/completion/smartType/MeaninglessExplicitWildcardParam.java
new file mode 100644
index 0000000..379381e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/MeaninglessExplicitWildcardParam.java
@@ -0,0 +1,12 @@
+class Key<T> {
+  static <T> Key<T> create(String s);
+}
+
+class Foo {
+  <T> void putUserData(Key<T> key, T value) {}
+
+  {
+    putUserData(<caret>)
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/MemberImportStatically-out.java b/java/java-tests/testData/codeInsight/completion/smartType/MemberImportStatically-out.java
new file mode 100644
index 0000000..a1684c5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/MemberImportStatically-out.java
@@ -0,0 +1,13 @@
+import static Super.FOO;
+
+class Super {
+  public static final Super FOO = null;
+  public static Super FOO2() {};
+}
+
+class Intermediate {
+
+    Super s = FOO;<caret>
+}
+
+
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/MemberImportStatically.java b/java/java-tests/testData/codeInsight/completion/smartType/MemberImportStatically.java
new file mode 100644
index 0000000..fe0dd020
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/MemberImportStatically.java
@@ -0,0 +1,11 @@
+class Super {
+  public static final Super FOO = null;
+  public static Super FOO2() {};
+}
+
+class Intermediate {
+
+    Super s = F<caret>
+}
+
+
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/MethodAnnotationNamedParameter-out.java b/java/java-tests/testData/codeInsight/completion/smartType/MethodAnnotationNamedParameter-out.java
new file mode 100644
index 0000000..2088296
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/MethodAnnotationNamedParameter-out.java
@@ -0,0 +1,9 @@
+public class BarBaz {
+
+    @Foo(isBar = true<caret>)
+    public void x() {}
+
+    public @interface Foo {
+        boolean isBar() default false;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/MethodAnnotationNamedParameter.java b/java/java-tests/testData/codeInsight/completion/smartType/MethodAnnotationNamedParameter.java
new file mode 100644
index 0000000..a354191
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/MethodAnnotationNamedParameter.java
@@ -0,0 +1,9 @@
+public class BarBaz {
+
+    @Foo(isBar = t<caret>)
+    public void x() {}
+
+    public @interface Foo {
+        boolean isBar() default false;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/MethodCallDot-out.java b/java/java-tests/testData/codeInsight/completion/smartType/MethodCallDot-out.java
new file mode 100644
index 0000000..59e89a0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/MethodCallDot-out.java
@@ -0,0 +1,9 @@
+public class Foo {
+    {
+        String ssss;
+        foo(ssss)<caret>.;
+    }
+
+    void foo(String s);
+
+ }
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/MethodCallDot.java b/java/java-tests/testData/codeInsight/completion/smartType/MethodCallDot.java
new file mode 100644
index 0000000..582a945
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/MethodCallDot.java
@@ -0,0 +1,9 @@
+public class Foo {
+    {
+        String ssss;
+        foo(s<caret>).;
+    }
+
+    void foo(String s);
+
+ }
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/MethodColon-out.java b/java/java-tests/testData/codeInsight/completion/smartType/MethodColon-out.java
new file mode 100644
index 0000000..15c1334
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/MethodColon-out.java
@@ -0,0 +1,8 @@
+class Bar {
+  int zoooa() {}
+  int zooob() {}
+
+  int foo() {
+    return true ? zoooa() : <caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/MethodColon.java b/java/java-tests/testData/codeInsight/completion/smartType/MethodColon.java
new file mode 100644
index 0000000..8799074
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/MethodColon.java
@@ -0,0 +1,8 @@
+class Bar {
+  int zoooa() {}
+  int zooob() {}
+
+  int foo() {
+    return true ? zoo<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/MethodNoPairBracketComma-out.java b/java/java-tests/testData/codeInsight/completion/smartType/MethodNoPairBracketComma-out.java
new file mode 100644
index 0000000..883ef9b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/MethodNoPairBracketComma-out.java
@@ -0,0 +1,8 @@
+class A {
+  void foo(String bar, int a) {}
+  String zoo(int b) {}
+
+  {
+    foo(zoo(), <caret>)
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/MethodNoPairBracketComma.java b/java/java-tests/testData/codeInsight/completion/smartType/MethodNoPairBracketComma.java
new file mode 100644
index 0000000..ab1e7d3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/MethodNoPairBracketComma.java
@@ -0,0 +1,8 @@
+class A {
+  void foo(String bar, int a) {}
+  String zoo(int b) {}
+
+  {
+    foo(zo<caret>)
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NegateVariable-out.java b/java/java-tests/testData/codeInsight/completion/smartType/NegateVariable-out.java
new file mode 100644
index 0000000..94fe936
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NegateVariable-out.java
@@ -0,0 +1,9 @@
+public class Foo {
+    {
+        boolean bbbb;
+        bbbb = !bbbb;<caret>
+    }
+
+
+ }
+
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NegateVariable.java b/java/java-tests/testData/codeInsight/completion/smartType/NegateVariable.java
new file mode 100644
index 0000000..1040072
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NegateVariable.java
@@ -0,0 +1,9 @@
+public class Foo {
+    {
+        boolean bbbb;
+        bbbb = !b<caret>
+    }
+
+
+ }
+
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NestedAssignments-out.java b/java/java-tests/testData/codeInsight/completion/smartType/NestedAssignments-out.java
new file mode 100644
index 0000000..dd2d55c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NestedAssignments-out.java
@@ -0,0 +1,5 @@
+class User {
+    {
+        int a = hashCode();<caret> = c;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NestedAssignments.java b/java/java-tests/testData/codeInsight/completion/smartType/NestedAssignments.java
new file mode 100644
index 0000000..58f0a0e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NestedAssignments.java
@@ -0,0 +1,5 @@
+class User {
+    {
+        int a = h<caret> = c;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NewAbstractClassWithConstructorArgs-out.java b/java/java-tests/testData/codeInsight/completion/smartType/NewAbstractClassWithConstructorArgs-out.java
new file mode 100644
index 0000000..28ffcac
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NewAbstractClassWithConstructorArgs-out.java
@@ -0,0 +1,19 @@
+public class Main {
+
+  public static void main(String[] args) {
+    Bar b = new Bar() {
+        @Override
+        void update() {
+            <selection>//To change body of implemented methods use File | Settings | File Templates.</selection>
+        }
+    };
+  }
+
+}
+
+public abstract class Bar {
+  protected Bar(int a) {
+  }
+
+  abstract void update();
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NewAbstractClassWithConstructorArgs.java b/java/java-tests/testData/codeInsight/completion/smartType/NewAbstractClassWithConstructorArgs.java
new file mode 100644
index 0000000..e274aec
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NewAbstractClassWithConstructorArgs.java
@@ -0,0 +1,14 @@
+public class Main {
+
+  public static void main(String[] args) {
+    Bar b = new B<caret>
+  }
+
+}
+
+public abstract class Bar {
+  protected Bar(int a) {
+  }
+
+  abstract void update();
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NewAbstractInsideAnonymous-out.java b/java/java-tests/testData/codeInsight/completion/smartType/NewAbstractInsideAnonymous-out.java
new file mode 100644
index 0000000..3c29042
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NewAbstractInsideAnonymous-out.java
@@ -0,0 +1,19 @@
+public class Foo {
+
+  public Foo() {
+    Runnable r = new Runnable() {
+      public void run() {
+        Goo<String> g = new Goo<String>() {
+            @Override
+            void foo() {
+                <selection>//To change body of implemented methods use File | Settings | File Templates.</selection>
+            }
+        };
+      }
+    };
+  }
+}
+
+abstract class Goo<T> {
+  abstract void foo();
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NewAbstractInsideAnonymous.java b/java/java-tests/testData/codeInsight/completion/smartType/NewAbstractInsideAnonymous.java
new file mode 100644
index 0000000..b3a1417
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NewAbstractInsideAnonymous.java
@@ -0,0 +1,14 @@
+public class Foo {
+
+  public Foo() {
+    Runnable r = new Runnable() {
+      public void run() {
+        Goo<String> g = new G<caret>
+      }
+    };
+  }
+}
+
+abstract class Goo<T> {
+  abstract void foo();
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NewAnonymousFunction-out.java b/java/java-tests/testData/codeInsight/completion/smartType/NewAnonymousFunction-out.java
new file mode 100644
index 0000000..3a4d6fb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NewAnonymousFunction-out.java
@@ -0,0 +1,29 @@
+interface Function<X, Y> { }
+class A {
+  private static final Function<String, String> a = new Function<String, String>() {
+      @Override
+      public int hashCode() {
+          <selection>return super.hashCode();    //To change body of overridden methods use File | Settings | File Templates.</selection>
+      }
+
+      @Override
+      public boolean equals(Object obj) {
+          return super.equals(obj);    //To change body of overridden methods use File | Settings | File Templates.
+      }
+
+      @Override
+      protected Object clone() throws CloneNotSupportedException {
+          return super.clone();    //To change body of overridden methods use File | Settings | File Templates.
+      }
+
+      @Override
+      public String toString() {
+          return super.toString();    //To change body of overridden methods use File | Settings | File Templates.
+      }
+
+      @Override
+      protected void finalize() throws Throwable {
+          super.finalize();    //To change body of overridden methods use File | Settings | File Templates.
+      }
+  };
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NewAnonymousFunction.java b/java/java-tests/testData/codeInsight/completion/smartType/NewAnonymousFunction.java
new file mode 100644
index 0000000..4a63599
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NewAnonymousFunction.java
@@ -0,0 +1,4 @@
+interface Function<X, Y> { }
+class A {
+  private static final Function<String, String> a = new <caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NewByteArray.java b/java/java-tests/testData/codeInsight/completion/smartType/NewByteArray.java
new file mode 100644
index 0000000..f0cdb71
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NewByteArray.java
@@ -0,0 +1,5 @@
+class A {
+  byte[] m() {
+    return new <caret>x;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NewInnerClassNameShortPrefix-out.java b/java/java-tests/testData/codeInsight/completion/smartType/NewInnerClassNameShortPrefix-out.java
new file mode 100644
index 0000000..4972dcf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NewInnerClassNameShortPrefix-out.java
@@ -0,0 +1,12 @@
+public class JavaClass {
+  {
+    Outer.Boo b = new Outer.Boo();<caret>
+  }
+}
+
+class Outer {
+  static class Boo { }
+}
+
+
+class ABooImpl extends Outer.Boo { }
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NewInnerClassNameShortPrefix.java b/java/java-tests/testData/codeInsight/completion/smartType/NewInnerClassNameShortPrefix.java
new file mode 100644
index 0000000..9a402da
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NewInnerClassNameShortPrefix.java
@@ -0,0 +1,12 @@
+public class JavaClass {
+  {
+    Outer.Boo b = new B<caret>
+  }
+}
+
+class Outer {
+  static class Boo { }
+}
+
+
+class ABooImpl extends Outer.Boo { }
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NewInnerClassOfSuper-out.java b/java/java-tests/testData/codeInsight/completion/smartType/NewInnerClassOfSuper-out.java
new file mode 100644
index 0000000..0708954
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NewInnerClassOfSuper-out.java
@@ -0,0 +1,13 @@
+public class Zoo2 {
+    static class Handler {}
+}
+
+class Zoo3 extends Zoo2 {
+    class MyHandler extends Handler {}
+}
+
+class Zoo4 extends Zoo3 {
+    {
+        Handler handler = new MyHandler();<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NewInnerClassOfSuper.java b/java/java-tests/testData/codeInsight/completion/smartType/NewInnerClassOfSuper.java
new file mode 100644
index 0000000..429f286
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NewInnerClassOfSuper.java
@@ -0,0 +1,13 @@
+public class Zoo2 {
+    static class Handler {}
+}
+
+class Zoo3 extends Zoo2 {
+    class MyHandler extends Handler {}
+}
+
+class Zoo4 extends Zoo3 {
+    {
+        Handler handler = new M<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NewInnerOfParameterizedClass-out.java b/java/java-tests/testData/codeInsight/completion/smartType/NewInnerOfParameterizedClass-out.java
new file mode 100644
index 0000000..6c015fc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NewInnerOfParameterizedClass-out.java
@@ -0,0 +1,12 @@
+public class ExecutionChannel<
+        T_ConversationId,
+        T_Conversation,
+        T_Configuration,
+        T_ProtocolObject> {
+
+ private ExecutionChannelCacheObserver y = new ExecutionChannelCacheObserver();<caret>
+
+ private class ExecutionChannelCacheObserver {
+ }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NewInnerOfParameterizedClass.java b/java/java-tests/testData/codeInsight/completion/smartType/NewInnerOfParameterizedClass.java
new file mode 100644
index 0000000..600374a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NewInnerOfParameterizedClass.java
@@ -0,0 +1,12 @@
+public class ExecutionChannel<
+        T_ConversationId,
+        T_Conversation,
+        T_Configuration,
+        T_ProtocolObject> {
+
+ private ExecutionChannelCacheObserver y = new <caret>
+
+ private class ExecutionChannelCacheObserver {
+ }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NewInnerRunnable-out.java b/java/java-tests/testData/codeInsight/completion/smartType/NewInnerRunnable-out.java
new file mode 100644
index 0000000..60dfc49
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NewInnerRunnable-out.java
@@ -0,0 +1,13 @@
+interface Runnable {}
+
+class MyClass {
+  static class Foo implements Runnable {}
+}
+
+class Goo implements Runnable {}
+
+class XXX {
+  {
+    Runnable r = new MyClass.Foo();<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NewInnerRunnable.java b/java/java-tests/testData/codeInsight/completion/smartType/NewInnerRunnable.java
new file mode 100644
index 0000000..361d3c0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NewInnerRunnable.java
@@ -0,0 +1,13 @@
+interface Runnable {}
+
+class MyClass {
+  static class Foo implements Runnable {}
+}
+
+class Goo implements Runnable {}
+
+class XXX {
+  {
+    Runnable r = new MyClass.<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NewVararg.java b/java/java-tests/testData/codeInsight/completion/smartType/NewVararg.java
new file mode 100644
index 0000000..bd4ad4d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NewVararg.java
@@ -0,0 +1,9 @@
+interface Foo {}
+
+class Bar {
+    void foo(Foo... f)
+
+    {
+        foo(new <caret>)
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NewVararg2.java b/java/java-tests/testData/codeInsight/completion/smartType/NewVararg2.java
new file mode 100644
index 0000000..3ce5e96
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NewVararg2.java
@@ -0,0 +1,9 @@
+import java.util.List;
+
+class A {
+  public static <T> List<T> asList(T... a) { }
+
+  List<String> m() {
+    return asList(new <caret>);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NoClassLiteral-out.java b/java/java-tests/testData/codeInsight/completion/smartType/NoClassLiteral-out.java
new file mode 100644
index 0000000..2a9b61a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NoClassLiteral-out.java
@@ -0,0 +1,6 @@
+class C {
+  <T> void h (Class<? extends T> clazz) {}
+  {
+    h(<caret>);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NoClassLiteral.java b/java/java-tests/testData/codeInsight/completion/smartType/NoClassLiteral.java
new file mode 100644
index 0000000..2a9b61a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NoClassLiteral.java
@@ -0,0 +1,6 @@
+class C {
+  <T> void h (Class<? extends T> clazz) {}
+  {
+    h(<caret>);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NoCommaBeforeVarargs-out.java b/java/java-tests/testData/codeInsight/completion/smartType/NoCommaBeforeVarargs-out.java
new file mode 100644
index 0000000..ff7e54e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NoCommaBeforeVarargs-out.java
@@ -0,0 +1,8 @@
+class Foooo {
+    int bar(int a, Object... varargs) {}
+
+    int foo() {
+        bar(hashCode()<caret>);
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NoCommaBeforeVarargs.java b/java/java-tests/testData/codeInsight/completion/smartType/NoCommaBeforeVarargs.java
new file mode 100644
index 0000000..2d588132
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NoCommaBeforeVarargs.java
@@ -0,0 +1,8 @@
+class Foooo {
+    int bar(int a, Object... varargs) {}
+
+    int foo() {
+        bar(ha<caret>);
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NoConstructorTailWhenNoPairBracket-out.java b/java/java-tests/testData/codeInsight/completion/smartType/NoConstructorTailWhenNoPairBracket-out.java
new file mode 100644
index 0000000..0ac5842
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NoConstructorTailWhenNoPairBracket-out.java
@@ -0,0 +1,5 @@
+class A {
+  {
+    String c = new String(<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NoConstructorTailWhenNoPairBracket.java b/java/java-tests/testData/codeInsight/completion/smartType/NoConstructorTailWhenNoPairBracket.java
new file mode 100644
index 0000000..f05c021
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NoConstructorTailWhenNoPairBracket.java
@@ -0,0 +1,5 @@
+class A {
+  {
+    String c = new Stri<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NoFieldsInSuperConstructorCall-out.java b/java/java-tests/testData/codeInsight/completion/smartType/NoFieldsInSuperConstructorCall-out.java
new file mode 100644
index 0000000..dd4e04b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NoFieldsInSuperConstructorCall-out.java
@@ -0,0 +1,11 @@
+class A {
+  A(int a) {}
+}
+
+class B extends A {
+  int aaa;
+
+  B(int aab) {
+    super(aab);<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NoFieldsInSuperConstructorCall.java b/java/java-tests/testData/codeInsight/completion/smartType/NoFieldsInSuperConstructorCall.java
new file mode 100644
index 0000000..654cfc4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NoFieldsInSuperConstructorCall.java
@@ -0,0 +1,11 @@
+class A {
+  A(int a) {}
+}
+
+class B extends A {
+  int aaa;
+
+  B(int aab) {
+    super(a<caret>);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NoInstanceofedValueInElse.java b/java/java-tests/testData/codeInsight/completion/smartType/NoInstanceofedValueInElse.java
new file mode 100644
index 0000000..352bb3c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NoInstanceofedValueInElse.java
@@ -0,0 +1,13 @@
+public class TestCase extends Zzz {
+  boolean foo(String s) {
+   }
+
+
+    {
+        Object ooo;
+        if (ooo instanceof String) {
+        } else {
+          foo(oo<caret>)
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NoInstanceofedValueInElseWithComplexIf.java b/java/java-tests/testData/codeInsight/completion/smartType/NoInstanceofedValueInElseWithComplexIf.java
new file mode 100644
index 0000000..9360074
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NoInstanceofedValueInElseWithComplexIf.java
@@ -0,0 +1,13 @@
+public class TestCase extends Zzz {
+  boolean foo(String s) {
+   }
+
+
+    {
+        Object ooo;
+        if (ooo instanceof String && true) {
+        } else {
+          foo(oo<caret>)
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NoInstanceofedValueInThenNegated.java b/java/java-tests/testData/codeInsight/completion/smartType/NoInstanceofedValueInThenNegated.java
new file mode 100644
index 0000000..9446692
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NoInstanceofedValueInThenNegated.java
@@ -0,0 +1,9 @@
+public class TestCase extends Zzz {
+
+    {
+        Object ooo;
+        if (!(ooo instanceof String)) {
+          String s = oo<caret>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NoInstanceofedValueWhenBasicSuits-out.java b/java/java-tests/testData/codeInsight/completion/smartType/NoInstanceofedValueWhenBasicSuits-out.java
new file mode 100644
index 0000000..030beb8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NoInstanceofedValueWhenBasicSuits-out.java
@@ -0,0 +1,11 @@
+public class TestCase extends Zzz {
+
+    Object ooo() {}
+
+    {
+        if (!(ooo() instanceof String)) {
+          return;
+        }
+        Object s = ooo();<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NoInstanceofedValueWhenBasicSuits.java b/java/java-tests/testData/codeInsight/completion/smartType/NoInstanceofedValueWhenBasicSuits.java
new file mode 100644
index 0000000..a13bc05
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NoInstanceofedValueWhenBasicSuits.java
@@ -0,0 +1,11 @@
+public class TestCase extends Zzz {
+
+    Object ooo() {}
+
+    {
+        if (!(ooo() instanceof String)) {
+          return;
+        }
+        Object s = o<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NoKeyConstant.java b/java/java-tests/testData/codeInsight/completion/smartType/NoKeyConstant.java
new file mode 100644
index 0000000..73022c5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NoKeyConstant.java
@@ -0,0 +1,25 @@
+class Key<T> {
+  static <T> Key<T> create() {}
+}
+
+interface Intf<T,Loc> {}
+class Impl implements Intf<String,String> {}
+
+interface IBar {
+  Key<Impl> A_KEY = Key.create("a");
+}
+
+class Bar implements IBar {
+
+  {
+    IBar item;
+    new Foo().incUseCount(<caret>item);
+  }
+}
+
+class Foo {
+
+  public <T, Loc> void incUseCount(final Key<? extends Intf<T, Loc>> key,
+                                                                 final T element,
+                                                                 final Loc location) {}
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NoNewEnum.java b/java/java-tests/testData/codeInsight/completion/smartType/NoNewEnum.java
new file mode 100644
index 0000000..ca04da0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NoNewEnum.java
@@ -0,0 +1,17 @@
+interface Foo {
+}
+
+enum FooEnum implements Foo {
+    ONE, TWO;
+}
+
+class Doo {
+    void doSomething(Foo f) {
+    }
+
+    void doSomethingElse() {
+        doSomething(new <caret>);
+    }
+
+}
+
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NoNullAfterDot.java b/java/java-tests/testData/codeInsight/completion/smartType/NoNullAfterDot.java
new file mode 100644
index 0000000..beb78ef
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NoNullAfterDot.java
@@ -0,0 +1,6 @@
+public class Foo {
+    
+    {
+      String s = StringUtil.n<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NoSecondMethodTypeArguments-out.java b/java/java-tests/testData/codeInsight/completion/smartType/NoSecondMethodTypeArguments-out.java
new file mode 100644
index 0000000..ffd936e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NoSecondMethodTypeArguments-out.java
@@ -0,0 +1,9 @@
+import java.util.Collections;
+import java.util.List;
+
+class A {
+    void foo(List<String> x){}
+    {
+        foo(Collections.<String>emptyList());<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NoSecondMethodTypeArguments.java b/java/java-tests/testData/codeInsight/completion/smartType/NoSecondMethodTypeArguments.java
new file mode 100644
index 0000000..d81ea0d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NoSecondMethodTypeArguments.java
@@ -0,0 +1,9 @@
+import java.util.Collections;
+import java.util.List;
+
+class A {
+    void foo(List<String> x){}
+    {
+        foo(Collections.<String>emptyL<caret>ist());
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NoTailWhenNoPairBracket-out.java b/java/java-tests/testData/codeInsight/completion/smartType/NoTailWhenNoPairBracket-out.java
new file mode 100644
index 0000000..6d72b12
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NoTailWhenNoPairBracket-out.java
@@ -0,0 +1,6 @@
+class A {
+  {
+    String x;
+    Class c = x.getClass(<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NoTailWhenNoPairBracket.java b/java/java-tests/testData/codeInsight/completion/smartType/NoTailWhenNoPairBracket.java
new file mode 100644
index 0000000..d90fbae
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NoTailWhenNoPairBracket.java
@@ -0,0 +1,6 @@
+class A {
+  {
+    String x;
+    Class c = x.getCl<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NoTailWhenNoPairBracket2-out.java b/java/java-tests/testData/codeInsight/completion/smartType/NoTailWhenNoPairBracket2-out.java
new file mode 100644
index 0000000..5dbeaa6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NoTailWhenNoPairBracket2-out.java
@@ -0,0 +1,7 @@
+class A {
+  {
+    Class c = this.xxxxx(<caret>
+  }
+
+  Class xxxxx() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NoTailWhenNoPairBracket2.java b/java/java-tests/testData/codeInsight/completion/smartType/NoTailWhenNoPairBracket2.java
new file mode 100644
index 0000000..31d1d65
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NoTailWhenNoPairBracket2.java
@@ -0,0 +1,7 @@
+class A {
+  {
+    Class c = this.xx<caret>
+  }
+
+  Class xxxxx() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NoTypeParametersForToArray-out.java b/java/java-tests/testData/codeInsight/completion/smartType/NoTypeParametersForToArray-out.java
new file mode 100644
index 0000000..bb687d3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NoTypeParametersForToArray-out.java
@@ -0,0 +1,8 @@
+class Foo {
+  void bar(Object[] o) {}
+
+  Object[] foo() {
+    java.util.Set<String> set;
+    bar(set.toArray(<caret>));
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NoTypeParametersForToArray.java b/java/java-tests/testData/codeInsight/completion/smartType/NoTypeParametersForToArray.java
new file mode 100644
index 0000000..9c47b71
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NoTypeParametersForToArray.java
@@ -0,0 +1,8 @@
+class Foo {
+  void bar(Object[] o) {}
+
+  Object[] foo() {
+    java.util.Set<String> set;
+    bar(set.to<caret>)
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NoUninitializedFieldsInConstructor.java b/java/java-tests/testData/codeInsight/completion/smartType/NoUninitializedFieldsInConstructor.java
new file mode 100644
index 0000000..4d45189
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NoUninitializedFieldsInConstructor.java
@@ -0,0 +1,8 @@
+class A {
+  int aaa;
+  int aab;
+  A(int aac) {
+    aaa = a<caret>
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NoWrongSubstitutorFromStats-out.java b/java/java-tests/testData/codeInsight/completion/smartType/NoWrongSubstitutorFromStats-out.java
new file mode 100644
index 0000000..4f68901
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NoWrongSubstitutorFromStats-out.java
@@ -0,0 +1,16 @@
+import java.util.Comparator;
+import java.util.List;
+import java.util.Collections;
+
+public class Foo {
+    private List<String> myList;
+
+    private void sort() {
+        Collections.sort(myList, new Comparator<String>() {
+            @Override
+            public int compare(String o1, String o2) {
+                <selection>return 0;  //To change body of implemented methods use File | Settings | File Templates.</selection>
+            }
+        });
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NoWrongSubstitutorFromStats.java b/java/java-tests/testData/codeInsight/completion/smartType/NoWrongSubstitutorFromStats.java
new file mode 100644
index 0000000..0e4c7a8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NoWrongSubstitutorFromStats.java
@@ -0,0 +1,10 @@
+import java.util.List;
+import java.util.Collections;
+
+public class Foo {
+    private List<String> myList;
+
+    private void sort() {
+        Collections.sort(myList, new Comparator<caret>);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NonExistentGenericAfterNew-out.java b/java/java-tests/testData/codeInsight/completion/smartType/NonExistentGenericAfterNew-out.java
new file mode 100644
index 0000000..695ff58
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NonExistentGenericAfterNew-out.java
@@ -0,0 +1,7 @@
+import java.util.HashMap;
+
+class Test {
+    void test() {
+      java.util.Map<String, ClassThatDoesNotExistYet> map = new HashMap<String, ClassThatDoesNotExistYet>(<caret>);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NonExistentGenericAfterNew.java b/java/java-tests/testData/codeInsight/completion/smartType/NonExistentGenericAfterNew.java
new file mode 100644
index 0000000..7f18a35
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NonExistentGenericAfterNew.java
@@ -0,0 +1,5 @@
+class Test {
+    void test() {
+      java.util.Map<String, ClassThatDoesNotExistYet> map = new HashM<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NonStaticField.java b/java/java-tests/testData/codeInsight/completion/smartType/NonStaticField.java
new file mode 100644
index 0000000..cfa4af0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NonStaticField.java
@@ -0,0 +1,15 @@
+public class SmartCompletionTest {
+  interface SmartCompletionType {}
+  
+  private SmartCompletionType myNonStaticField;
+  
+  private static void staticMethod(SmartCompletionType type) {}
+  
+  private static class StaticInnerClass extends SmartCompletionTest {
+    
+    private void method() {
+      staticMethod(myNon<caret>);
+    }
+    
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NonStaticInnerClass.java b/java/java-tests/testData/codeInsight/completion/smartType/NonStaticInnerClass.java
new file mode 100644
index 0000000..87cd9eb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/NonStaticInnerClass.java
@@ -0,0 +1,12 @@
+public class Outer {
+    public class Inner {
+        public Inner() {
+        }
+    }
+}
+
+class OuterMain {
+    public static void main(String[] args) {
+        Outer.Inner inner = new <caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/OneElementArray-out.java b/java/java-tests/testData/codeInsight/completion/smartType/OneElementArray-out.java
new file mode 100644
index 0000000..362ea50
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/OneElementArray-out.java
@@ -0,0 +1,8 @@
+public class SomeClass {
+
+    {
+        int[] aaa = new int[1];
+        int bbb = aaa[0];<caret>
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/OneElementArray.java b/java/java-tests/testData/codeInsight/completion/smartType/OneElementArray.java
new file mode 100644
index 0000000..531162c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/OneElementArray.java
@@ -0,0 +1,8 @@
+public class SomeClass {
+
+    {
+        int[] aaa = new int[1];
+        int bbb = a<caret>
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/OverloadedMethods-out.java b/java/java-tests/testData/codeInsight/completion/smartType/OverloadedMethods-out.java
new file mode 100644
index 0000000..9c91cf6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/OverloadedMethods-out.java
@@ -0,0 +1,13 @@
+interface Comparable<T extends Comparable<T>> {}
+class List<T> {}
+class Collections {
+  static <T extends Comparable<? super T>> void sort(List<T> list) {}
+  static <T> void sort(List<T> list, Comparator<? super T> c) {}
+}
+
+class Foo implements Comparable<Foo> {
+  public static void main(String[] args){
+    List<Foo> list;
+    Collections.sort(list<caret>)
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/OverloadedMethods.java b/java/java-tests/testData/codeInsight/completion/smartType/OverloadedMethods.java
new file mode 100644
index 0000000..8ad289a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/OverloadedMethods.java
@@ -0,0 +1,13 @@
+interface Comparable<T extends Comparable<T>> {}
+class List<T> {}
+class Collections {
+  static <T extends Comparable<? super T>> void sort(List<T> list) {}
+  static <T> void sort(List<T> list, Comparator<? super T> c) {}
+}
+
+class Foo implements Comparable<Foo> {
+  public static void main(String[] args){
+    List<Foo> list;
+    Collections.sort(l<caret>)
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ParameterizedConstructor-out.java b/java/java-tests/testData/codeInsight/completion/smartType/ParameterizedConstructor-out.java
new file mode 100644
index 0000000..434490c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ParameterizedConstructor-out.java
@@ -0,0 +1,14 @@
+class Collection<T> {}
+
+class CommentCompletion<T> {
+
+    static {
+        Collection<Integer> c;
+        new CommentCompletion<Integer>(c);
+    }
+
+    <E extends T> CommentCompletion(Collection<E> collection) {
+
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ParameterizedConstructor.java b/java/java-tests/testData/codeInsight/completion/smartType/ParameterizedConstructor.java
new file mode 100644
index 0000000..630b025
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ParameterizedConstructor.java
@@ -0,0 +1,14 @@
+class Collection<T> {}
+
+class CommentCompletion<T> {
+
+    static {
+        Collection<Integer> c;
+        new CommentCompletion<Integer>(<caret>);
+    }
+
+    <E extends T> CommentCompletion(Collection<E> collection) {
+
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/PolyadicExpression-out.java b/java/java-tests/testData/codeInsight/completion/smartType/PolyadicExpression-out.java
new file mode 100644
index 0000000..f9d7272
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/PolyadicExpression-out.java
@@ -0,0 +1,5 @@
+class A {
+  int m() {
+    return 0 + 1 + hashCode()<caret>;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/PolyadicExpression.java b/java/java-tests/testData/codeInsight/completion/smartType/PolyadicExpression.java
new file mode 100644
index 0000000..456af98
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/PolyadicExpression.java
@@ -0,0 +1,5 @@
+class A {
+  int m() {
+    return 0 + 1 + ha<caret>;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/PrimitiveArrayClassInMethod-out.java b/java/java-tests/testData/codeInsight/completion/smartType/PrimitiveArrayClassInMethod-out.java
new file mode 100644
index 0000000..693cebd5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/PrimitiveArrayClassInMethod-out.java
@@ -0,0 +1,5 @@
+class Bar {
+  public static void main(String[] args) {
+      Class<?> cls = byte[].class;<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/PrimitiveArrayClassInMethod.java b/java/java-tests/testData/codeInsight/completion/smartType/PrimitiveArrayClassInMethod.java
new file mode 100644
index 0000000..eefcb73
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/PrimitiveArrayClassInMethod.java
@@ -0,0 +1,5 @@
+class Bar {
+  public static void main(String[] args) {
+      Class<?> cls = byte[].<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/PrimitiveClassInAnno-out.java b/java/java-tests/testData/codeInsight/completion/smartType/PrimitiveClassInAnno-out.java
new file mode 100644
index 0000000..b3b43ce
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/PrimitiveClassInAnno-out.java
@@ -0,0 +1,10 @@
+class Bar {
+  @interface B {
+      Class<?> value();
+  }
+
+  @B(byte[].class<caret>)
+  public static void main(String[] args) {
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/PrimitiveClassInAnno.java b/java/java-tests/testData/codeInsight/completion/smartType/PrimitiveClassInAnno.java
new file mode 100644
index 0000000..fb5791f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/PrimitiveClassInAnno.java
@@ -0,0 +1,10 @@
+class Bar {
+  @interface B {
+      Class<?> value();
+  }
+
+  @B(byte[].<caret>)
+  public static void main(String[] args) {
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/PrivateOverloads-out.java b/java/java-tests/testData/codeInsight/completion/smartType/PrivateOverloads-out.java
new file mode 100644
index 0000000..bd1c1a3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/PrivateOverloads-out.java
@@ -0,0 +1,12 @@
+class A {
+  private static void m(int a) { }
+  public static void m(String s) { }
+}
+
+class B {
+  void m() {
+    int xxx = 0;
+    String xxy = "";
+    A.m(xxy);<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/PrivateOverloads.java b/java/java-tests/testData/codeInsight/completion/smartType/PrivateOverloads.java
new file mode 100644
index 0000000..9a5c316
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/PrivateOverloads.java
@@ -0,0 +1,12 @@
+class A {
+  private static void m(int a) { }
+  public static void m(String s) { }
+}
+
+class B {
+  void m() {
+    int xxx = 0;
+    String xxy = "";
+    A.m(xx<caret>);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ProtectedAnonymousConstructor-out.java b/java/java-tests/testData/codeInsight/completion/smartType/ProtectedAnonymousConstructor-out.java
new file mode 100644
index 0000000..0503b49
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ProtectedAnonymousConstructor-out.java
@@ -0,0 +1,9 @@
+import pkg.Foo;
+
+class Bar {
+
+  public void foo() {
+    new Foo(hashCode())<caret> {}
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ProtectedAnonymousConstructor.java b/java/java-tests/testData/codeInsight/completion/smartType/ProtectedAnonymousConstructor.java
new file mode 100644
index 0000000..01cb39a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ProtectedAnonymousConstructor.java
@@ -0,0 +1,9 @@
+import pkg.Foo;
+
+class Bar {
+
+  public void foo() {
+    new Foo(hash<caret>) {}
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ProtectedAnonymousConstructor2-out.java b/java/java-tests/testData/codeInsight/completion/smartType/ProtectedAnonymousConstructor2-out.java
new file mode 100644
index 0000000..b7f3dea
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ProtectedAnonymousConstructor2-out.java
@@ -0,0 +1,11 @@
+import pkg.Bar;
+
+import java.util.ArrayList;
+
+class Goo {
+
+  public void foo() {
+    new Bar<String>(new ArrayList<String>(<caret>)) {}
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ProtectedAnonymousConstructor2.java b/java/java-tests/testData/codeInsight/completion/smartType/ProtectedAnonymousConstructor2.java
new file mode 100644
index 0000000..30ee9c0f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ProtectedAnonymousConstructor2.java
@@ -0,0 +1,9 @@
+import pkg.Bar;
+
+class Goo {
+
+  public void foo() {
+    new Bar<String>(new ArrL<caret>) {}
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/QualifiedAfterNew-out.java b/java/java-tests/testData/codeInsight/completion/smartType/QualifiedAfterNew-out.java
new file mode 100644
index 0000000..dd22d5a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/QualifiedAfterNew-out.java
@@ -0,0 +1,5 @@
+class A {{
+    foo.Foo<String> f = new bar.Bar();<caret>
+}}
+
+class Bar {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/QualifiedAfterNew.java b/java/java-tests/testData/codeInsight/completion/smartType/QualifiedAfterNew.java
new file mode 100644
index 0000000..00d6af5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/QualifiedAfterNew.java
@@ -0,0 +1,5 @@
+class A {{
+    foo.Foo<String> f = new B<caret>
+}}
+
+class Bar {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/QualifiedThis-out.java b/java/java-tests/testData/codeInsight/completion/smartType/QualifiedThis-out.java
new file mode 100644
index 0000000..14dd7ef
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/QualifiedThis-out.java
@@ -0,0 +1,13 @@
+class A {
+  public void f(A a){}
+
+  public void g(){
+    B b = new B(){
+      void h(){
+        f(A.this);<caret>
+      }
+    };
+  }
+
+  private class B{}
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/QualifiedThis.java b/java/java-tests/testData/codeInsight/completion/smartType/QualifiedThis.java
new file mode 100644
index 0000000..72efffa
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/QualifiedThis.java
@@ -0,0 +1,13 @@
+class A {
+  public void f(A a){}
+
+  public void g(){
+    B b = new B(){
+      void h(){
+        f(A.<caret>)
+      }
+    };
+  }
+
+  private class B{}
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/QualifiedThisInAnonymousConstructor-out.java b/java/java-tests/testData/codeInsight/completion/smartType/QualifiedThisInAnonymousConstructor-out.java
new file mode 100644
index 0000000..3a11c07
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/QualifiedThisInAnonymousConstructor-out.java
@@ -0,0 +1,11 @@
+public class Foo {
+
+    {
+        new Bar(this)<caret> {}
+    }
+
+}
+
+class Bar {
+    Bar(Foo f) {}
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/QualifiedThisInAnonymousConstructor.java b/java/java-tests/testData/codeInsight/completion/smartType/QualifiedThisInAnonymousConstructor.java
new file mode 100644
index 0000000..166cd0a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/QualifiedThisInAnonymousConstructor.java
@@ -0,0 +1,11 @@
+public class Foo {
+
+    {
+        new Bar(<caret>) {}
+    }
+
+}
+
+class Bar {
+    Bar(Foo f) {}
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ReplaceWholeReferenceChain-out.java b/java/java-tests/testData/codeInsight/completion/smartType/ReplaceWholeReferenceChain-out.java
new file mode 100644
index 0000000..043a587
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ReplaceWholeReferenceChain-out.java
@@ -0,0 +1,11 @@
+public class TestCase {
+  Object field;
+
+  int foo() {
+   }
+
+
+    {
+        int a = foo()<caret> + 2;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ReplaceWholeReferenceChain.java b/java/java-tests/testData/codeInsight/completion/smartType/ReplaceWholeReferenceChain.java
new file mode 100644
index 0000000..7ceea6b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ReplaceWholeReferenceChain.java
@@ -0,0 +1,11 @@
+public class TestCase {
+  Object field;
+
+  int foo() {
+   }
+
+
+    {
+        int a = fo<caret>this.field.clone().hashCode() + 2;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SameFieldInAnotherObject-out.java b/java/java-tests/testData/codeInsight/completion/smartType/SameFieldInAnotherObject-out.java
new file mode 100644
index 0000000..54c34d4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SameFieldInAnotherObject-out.java
@@ -0,0 +1,8 @@
+class Foo {
+  int abcde;
+
+  {
+    Foo a;
+    a.abcde = abcde;<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SameFieldInAnotherObject.java b/java/java-tests/testData/codeInsight/completion/smartType/SameFieldInAnotherObject.java
new file mode 100644
index 0000000..250d877
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SameFieldInAnotherObject.java
@@ -0,0 +1,8 @@
+class Foo {
+  int abcde;
+
+  {
+    Foo a;
+    a.abcde = ab<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SameMethodArgumentsInIf-out.java b/java/java-tests/testData/codeInsight/completion/smartType/SameMethodArgumentsInIf-out.java
new file mode 100644
index 0000000..3f88a7a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SameMethodArgumentsInIf-out.java
@@ -0,0 +1,9 @@
+public class Foo {
+  public void handleInsert(InsertionContext context, LookupElement item) {
+    if (hasParams(context, item)<caret>)
+  }
+
+  private static boolean hasParams(InsertionContext context, LookupElement item) {
+    return false;
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SameMethodArgumentsInIf.java b/java/java-tests/testData/codeInsight/completion/smartType/SameMethodArgumentsInIf.java
new file mode 100644
index 0000000..ef81365
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SameMethodArgumentsInIf.java
@@ -0,0 +1,9 @@
+public class Foo {
+  public void handleInsert(InsertionContext context, LookupElement item) {
+    if (hasParams(<caret>))
+  }
+
+  private static boolean hasParams(InsertionContext context, LookupElement item) {
+    return false;
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SameNamedArguments-out.java b/java/java-tests/testData/codeInsight/completion/smartType/SameNamedArguments-out.java
new file mode 100644
index 0000000..fd9c8d0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SameNamedArguments-out.java
@@ -0,0 +1,9 @@
+public class SomeClass {
+  Border createBorder(Color color, int top, boolean isOpaque, int bottom, int right, int left) {
+    new Insets(top, left, bottom, right)<caret>
+  }
+}
+
+class Insets {
+  Insets(int top, int left, int bottom, int right) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SameNamedArguments.java b/java/java-tests/testData/codeInsight/completion/smartType/SameNamedArguments.java
new file mode 100644
index 0000000..e9a6bce
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SameNamedArguments.java
@@ -0,0 +1,9 @@
+public class SomeClass {
+  Border createBorder(Color color, int top, boolean isOpaque, int bottom, int right, int left) {
+    new Insets(<caret>)
+  }
+}
+
+class Insets {
+  Insets(int top, int left, int bottom, int right) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SameNamedArgumentsDelegation-out.java b/java/java-tests/testData/codeInsight/completion/smartType/SameNamedArgumentsDelegation-out.java
new file mode 100644
index 0000000..bff93e7c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SameNamedArgumentsDelegation-out.java
@@ -0,0 +1,13 @@
+import java.io.File;
+
+public interface Zoo {
+  void foo(String s, File file);
+}
+
+class ZooImpl implements Zoo {
+  private Zoo delegate;
+  @Override
+  public void foo(String s, File file) {
+    delegate.foo(s, file);<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SameNamedArgumentsDelegation.java b/java/java-tests/testData/codeInsight/completion/smartType/SameNamedArgumentsDelegation.java
new file mode 100644
index 0000000..915e760
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SameNamedArgumentsDelegation.java
@@ -0,0 +1,13 @@
+import java.io.File;
+
+public interface Zoo {
+  void foo(String s, File file);
+}
+
+class ZooImpl implements Zoo {
+  private Zoo delegate;
+  @Override
+  public void foo(String s, File file) {
+    delegate.foo(<caret>);
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SameNamedFieldAndLocal-out.java b/java/java-tests/testData/codeInsight/completion/smartType/SameNamedFieldAndLocal-out.java
new file mode 100644
index 0000000..9650878
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SameNamedFieldAndLocal-out.java
@@ -0,0 +1,8 @@
+public class Test {
+    int ffa;
+
+    {
+        int ffa = 2;
+        int b = ffa;<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SameNamedFieldAndLocal.java b/java/java-tests/testData/codeInsight/completion/smartType/SameNamedFieldAndLocal.java
new file mode 100644
index 0000000..d18cf6e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SameNamedFieldAndLocal.java
@@ -0,0 +1,8 @@
+public class Test {
+    int ffa;
+
+    {
+        int ffa = 2;
+        int b = ff<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SameTypeArg-out.java b/java/java-tests/testData/codeInsight/completion/smartType/SameTypeArg-out.java
new file mode 100644
index 0000000..62646eb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SameTypeArg-out.java
@@ -0,0 +1,5 @@
+class Bar<T> {
+    {
+        Bar<T> f = new Bar<T>();<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SameTypeArg.java b/java/java-tests/testData/codeInsight/completion/smartType/SameTypeArg.java
new file mode 100644
index 0000000..bdb1c45
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SameTypeArg.java
@@ -0,0 +1,5 @@
+class Bar<T> {
+    {
+        Bar<T> f = new <caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SemicolonInCodeBlocBodyInLocalVariable-out.java b/java/java-tests/testData/codeInsight/completion/smartType/SemicolonInCodeBlocBodyInLocalVariable-out.java
new file mode 100644
index 0000000..446d58f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SemicolonInCodeBlocBodyInLocalVariable-out.java
@@ -0,0 +1,5 @@
+class Test {
+  public void foo() {
+    Runnable r = () -> {notify();};
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SemicolonInCodeBlocBodyInLocalVariable.java b/java/java-tests/testData/codeInsight/completion/smartType/SemicolonInCodeBlocBodyInLocalVariable.java
new file mode 100644
index 0000000..fa6f209
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SemicolonInCodeBlocBodyInLocalVariable.java
@@ -0,0 +1,5 @@
+class Test {
+  public void foo() {
+    Runnable r = () -> {<caret>};
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SemicolonInExpressionBodyInExpressionList-out.java b/java/java-tests/testData/codeInsight/completion/smartType/SemicolonInExpressionBodyInExpressionList-out.java
new file mode 100644
index 0000000..8b17af9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SemicolonInExpressionBodyInExpressionList-out.java
@@ -0,0 +1,5 @@
+class Test {
+  public void foo() {
+    new Thread(() -> notify());
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SemicolonInExpressionBodyInExpressionList.java b/java/java-tests/testData/codeInsight/completion/smartType/SemicolonInExpressionBodyInExpressionList.java
new file mode 100644
index 0000000..7b403c0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SemicolonInExpressionBodyInExpressionList.java
@@ -0,0 +1,5 @@
+class Test {
+  public void foo() {
+    new Thread(() -> <caret>);
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SemicolonInExpressionBodyInLocalVariable-out.java b/java/java-tests/testData/codeInsight/completion/smartType/SemicolonInExpressionBodyInLocalVariable-out.java
new file mode 100644
index 0000000..f6950c0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SemicolonInExpressionBodyInLocalVariable-out.java
@@ -0,0 +1,5 @@
+class Test {
+  public void foo() {
+    Runnable r = () -> notify();
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SemicolonInExpressionBodyInLocalVariable.java b/java/java-tests/testData/codeInsight/completion/smartType/SemicolonInExpressionBodyInLocalVariable.java
new file mode 100644
index 0000000..e41c2a1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SemicolonInExpressionBodyInLocalVariable.java
@@ -0,0 +1,5 @@
+class Test {
+  public void foo() {
+    Runnable r = () -> <caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SeveralTypeArguments-out.java b/java/java-tests/testData/codeInsight/completion/smartType/SeveralTypeArguments-out.java
new file mode 100644
index 0000000..d2c7713
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SeveralTypeArguments-out.java
@@ -0,0 +1,5 @@
+import java.util.HashMap;
+
+public class A {
+  private HashMap<String, String> m = new HashMap<String, String>(<caret>);
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SeveralTypeArguments.java b/java/java-tests/testData/codeInsight/completion/smartType/SeveralTypeArguments.java
new file mode 100644
index 0000000..31ec500
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SeveralTypeArguments.java
@@ -0,0 +1,5 @@
+import java.util.HashMap;
+
+public class A {
+  private HashMap<String, String> m = new HashMap<<caret>>();
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SeveralTypeArgumentsSomeUnknown-out.java b/java/java-tests/testData/codeInsight/completion/smartType/SeveralTypeArgumentsSomeUnknown-out.java
new file mode 100644
index 0000000..0a148ef
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SeveralTypeArgumentsSomeUnknown-out.java
@@ -0,0 +1,3 @@
+class AAAAA<K,V,G>{
+  AAAAA<K,V,?> asd = new AAAAA<K, <caret>
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SeveralTypeArgumentsSomeUnknown.java b/java/java-tests/testData/codeInsight/completion/smartType/SeveralTypeArgumentsSomeUnknown.java
new file mode 100644
index 0000000..915b39d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SeveralTypeArgumentsSomeUnknown.java
@@ -0,0 +1,3 @@
+class AAAAA<K,V,G>{
+  AAAAA<K,V,?> asd = new AAAAA<<caret>
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SiblingOfAStaticallyImportedField-out.java b/java/java-tests/testData/codeInsight/completion/smartType/SiblingOfAStaticallyImportedField-out.java
new file mode 100644
index 0000000..84b336d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SiblingOfAStaticallyImportedField-out.java
@@ -0,0 +1,15 @@
+import static Bar.BAR;
+import static Bar.FOO;
+
+class Bar {
+  static String FOO;
+  static String BAR;
+}
+
+class Foo {
+
+  Object[] foo() {
+    String a = FOO;
+    String b = BAR;<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SiblingOfAStaticallyImportedField.java b/java/java-tests/testData/codeInsight/completion/smartType/SiblingOfAStaticallyImportedField.java
new file mode 100644
index 0000000..87041be
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SiblingOfAStaticallyImportedField.java
@@ -0,0 +1,14 @@
+import static Bar.FOO;
+
+class Bar {
+  static String FOO;
+  static String BAR;
+}
+
+class Foo {
+
+  Object[] foo() {
+    String a = FOO;
+    String b = BA<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/Silly1.java b/java/java-tests/testData/codeInsight/completion/smartType/Silly1.java
new file mode 100644
index 0000000..25c53dd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/Silly1.java
@@ -0,0 +1,7 @@
+class A{
+ {
+  int iiiii = 0;
+
+  iiiii = iii<caret>
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SillyAssignmentInTernary-out.java b/java/java-tests/testData/codeInsight/completion/smartType/SillyAssignmentInTernary-out.java
new file mode 100644
index 0000000..6bb40f3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SillyAssignmentInTernary-out.java
@@ -0,0 +1,7 @@
+class Foo {
+  Foo[] myFoos;
+
+  Foo(Foo[] foos) {
+    myFoos = true ? foos : <caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SillyAssignmentInTernary.java b/java/java-tests/testData/codeInsight/completion/smartType/SillyAssignmentInTernary.java
new file mode 100644
index 0000000..84a0840
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SillyAssignmentInTernary.java
@@ -0,0 +1,7 @@
+class Foo {
+  Foo[] myFoos;
+
+  Foo(Foo[] foos) {
+    myFoos = true ? <caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SmartFinish-out.java b/java/java-tests/testData/codeInsight/completion/smartType/SmartFinish-out.java
new file mode 100644
index 0000000..e95297e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SmartFinish-out.java
@@ -0,0 +1,10 @@
+public class Foo {
+
+    {
+        Foo foo = null;
+        Foo bar = id(foo);<caret>
+    }
+
+    Foo id(Foo foo) {return foo;}
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SmartFinish.java b/java/java-tests/testData/codeInsight/completion/smartType/SmartFinish.java
new file mode 100644
index 0000000..e6bc953
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SmartFinish.java
@@ -0,0 +1,10 @@
+public class Foo {
+
+    {
+        Foo foo = null;
+        Foo bar = id<caret>foo;
+    }
+
+    Foo id(Foo foo) {return foo;}
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SpaceAfterCommaInMethodCall-out.java b/java/java-tests/testData/codeInsight/completion/smartType/SpaceAfterCommaInMethodCall-out.java
new file mode 100644
index 0000000..0d32e7b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SpaceAfterCommaInMethodCall-out.java
@@ -0,0 +1,9 @@
+public static class G {
+  public static void foo(String s1, String s2) {
+  }
+
+  public static void main(String[] args) {
+    String sss1 = "text";
+    foo(sss1,<caret>);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SpaceAfterCommaInMethodCall.java b/java/java-tests/testData/codeInsight/completion/smartType/SpaceAfterCommaInMethodCall.java
new file mode 100644
index 0000000..c6e05ff
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SpaceAfterCommaInMethodCall.java
@@ -0,0 +1,9 @@
+public static class G {
+  public static void foo(String s1, String s2) {
+  }
+
+  public static void main(String[] args) {
+    String sss1 = "text";
+    foo(ss<caret>);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/StaticSubclass-out.java b/java/java-tests/testData/codeInsight/completion/smartType/StaticSubclass-out.java
new file mode 100644
index 0000000..d6a5b3d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/StaticSubclass-out.java
@@ -0,0 +1,13 @@
+class BarBase {
+    {
+        FooBase f = FooBase.EMPTY;<caret>
+    }
+}
+
+class FooBase {
+    public static final FooBase EMPTY;
+
+    public static class FooBaseImpl extends FooBase {}
+
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/StaticSubclass.java b/java/java-tests/testData/codeInsight/completion/smartType/StaticSubclass.java
new file mode 100644
index 0000000..2b4e8ad
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/StaticSubclass.java
@@ -0,0 +1,13 @@
+class BarBase {
+    {
+        FooBase f = <caret>
+    }
+}
+
+class FooBase {
+    public static final FooBase EMPTY;
+
+    public static class FooBaseImpl extends FooBase {}
+
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/StaticallyImportedField-out.java b/java/java-tests/testData/codeInsight/completion/smartType/StaticallyImportedField-out.java
new file mode 100644
index 0000000..883dfd4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/StaticallyImportedField-out.java
@@ -0,0 +1,13 @@
+import static Bar.FOO
+
+class Bar {
+  static String FOO;
+  static String BAR;
+}
+
+class Foo {
+
+  Object[] foo() {
+    String b = FOO;<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/StaticallyImportedField.java b/java/java-tests/testData/codeInsight/completion/smartType/StaticallyImportedField.java
new file mode 100644
index 0000000..301e1e0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/StaticallyImportedField.java
@@ -0,0 +1,13 @@
+import static Bar.FOO
+
+class Bar {
+  static String FOO;
+  static String BAR;
+}
+
+class Foo {
+
+  Object[] foo() {
+    String b = FO<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/StaticallyImportedMagicMethod-out.java b/java/java-tests/testData/codeInsight/completion/smartType/StaticallyImportedMagicMethod-out.java
new file mode 100644
index 0000000..33213d4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/StaticallyImportedMagicMethod-out.java
@@ -0,0 +1,15 @@
+import static Foo.foo;
+
+class Foo {
+  public static <T> T foo ()
+
+}
+
+class Bar {
+  void f(String s) {
+  }
+
+  {
+    f(Foo.<String>foo());<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/StaticallyImportedMagicMethod.java b/java/java-tests/testData/codeInsight/completion/smartType/StaticallyImportedMagicMethod.java
new file mode 100644
index 0000000..e4e6683
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/StaticallyImportedMagicMethod.java
@@ -0,0 +1,15 @@
+import static Foo.foo;
+
+class Foo {
+  public static <T> T foo ()
+
+}
+
+class Bar {
+  void f(String s) {
+  }
+
+  {
+    f(foo<caret>x)
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/StringConstantInAnno-out.java b/java/java-tests/testData/codeInsight/completion/smartType/StringConstantInAnno-out.java
new file mode 100644
index 0000000..0c82168
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/StringConstantInAnno-out.java
@@ -0,0 +1,9 @@
+@interface Anno {
+    String value();
+}
+
+@Anno(A.AAA<caret>)
+class A {
+    public static final String AAA = "aaa";
+}
+
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/StringConstantInAnno.java b/java/java-tests/testData/codeInsight/completion/smartType/StringConstantInAnno.java
new file mode 100644
index 0000000..fa96439
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/StringConstantInAnno.java
@@ -0,0 +1,9 @@
+@interface Anno {
+    String value();
+}
+
+@Anno(A.<caret>)
+class A {
+    public static final String AAA = "aaa";
+}
+
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SuggestAnythingWhenWildcardExpected.java b/java/java-tests/testData/codeInsight/completion/smartType/SuggestAnythingWhenWildcardExpected.java
new file mode 100644
index 0000000..7f7e487
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SuggestAnythingWhenWildcardExpected.java
@@ -0,0 +1,7 @@
+class X<T> {}
+class Y extends X<String>{}
+class Z<T> extends X<T>{}
+
+class Main {
+    X<?> a = new <caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SuggestCastedValueAfterCast-out.java b/java/java-tests/testData/codeInsight/completion/smartType/SuggestCastedValueAfterCast-out.java
new file mode 100644
index 0000000..1a4cf34
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SuggestCastedValueAfterCast-out.java
@@ -0,0 +1,10 @@
+public class TestCase extends Zzz {
+
+    Object ooo() {}
+
+    {
+        ((String) ooo()).toString();
+
+        String s = (String) ooo();<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SuggestCastedValueAfterCast.java b/java/java-tests/testData/codeInsight/completion/smartType/SuggestCastedValueAfterCast.java
new file mode 100644
index 0000000..8c4ff0f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SuggestCastedValueAfterCast.java
@@ -0,0 +1,10 @@
+public class TestCase extends Zzz {
+
+    Object ooo() {}
+
+    {
+        ((String) ooo()).toString();
+
+        String s = o<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SuggestInstanceofedValue-out.java b/java/java-tests/testData/codeInsight/completion/smartType/SuggestInstanceofedValue-out.java
new file mode 100644
index 0000000..0d12399
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SuggestInstanceofedValue-out.java
@@ -0,0 +1,10 @@
+public class TestCase extends Zzz {
+  public TestCase ttt(Zzz ooo) {
+    if (ooo instanceof TestCase) {
+      return (TestCase) ooo;<caret>
+    }
+  }
+}
+
+class Zzz {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SuggestInstanceofedValue.java b/java/java-tests/testData/codeInsight/completion/smartType/SuggestInstanceofedValue.java
new file mode 100644
index 0000000..3736079
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SuggestInstanceofedValue.java
@@ -0,0 +1,10 @@
+public class TestCase extends Zzz {
+  public TestCase ttt(Zzz ooo) {
+    if (ooo instanceof TestCase) {
+      return o<caret>
+    }
+  }
+}
+
+class Zzz {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SuggestInstanceofedValueAfterReturn-out.java b/java/java-tests/testData/codeInsight/completion/smartType/SuggestInstanceofedValueAfterReturn-out.java
new file mode 100644
index 0000000..8a43ecf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SuggestInstanceofedValueAfterReturn-out.java
@@ -0,0 +1,11 @@
+public class TestCase extends Zzz {
+
+    Object ooo() {}
+
+    {
+        if (!(ooo() instanceof String)) {
+          return;
+        }
+        String s = (String) ooo();<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SuggestInstanceofedValueAfterReturn.java b/java/java-tests/testData/codeInsight/completion/smartType/SuggestInstanceofedValueAfterReturn.java
new file mode 100644
index 0000000..7ed279f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SuggestInstanceofedValueAfterReturn.java
@@ -0,0 +1,11 @@
+public class TestCase extends Zzz {
+
+    Object ooo() {}
+
+    {
+        if (!(ooo() instanceof String)) {
+          return;
+        }
+        String s = o<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SuggestInstanceofedValueInComplexIf-out.java b/java/java-tests/testData/codeInsight/completion/smartType/SuggestInstanceofedValueInComplexIf-out.java
new file mode 100644
index 0000000..00acc2e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SuggestInstanceofedValueInComplexIf-out.java
@@ -0,0 +1,11 @@
+public class TestCase extends Zzz {
+  boolean foo(String s) {
+   }
+
+
+    {
+        Object ooo;
+        if (ooo instanceof String && foo((String) ooo)<caret>) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SuggestInstanceofedValueInComplexIf.java b/java/java-tests/testData/codeInsight/completion/smartType/SuggestInstanceofedValueInComplexIf.java
new file mode 100644
index 0000000..1bb3bc4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SuggestInstanceofedValueInComplexIf.java
@@ -0,0 +1,11 @@
+public class TestCase extends Zzz {
+  boolean foo(String s) {
+   }
+
+
+    {
+        Object ooo;
+        if (ooo instanceof String && foo(o<caret>)) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SuggestInstanceofedValueInElseNegated-out.java b/java/java-tests/testData/codeInsight/completion/smartType/SuggestInstanceofedValueInElseNegated-out.java
new file mode 100644
index 0000000..b966761
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SuggestInstanceofedValueInElseNegated-out.java
@@ -0,0 +1,11 @@
+public class TestCase extends Zzz {
+
+    Object ooo() {}
+
+    {
+        if (!(ooo() instanceof String)) {
+        } else {
+          String s = (String) ooo();<caret>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SuggestInstanceofedValueInElseNegated.java b/java/java-tests/testData/codeInsight/completion/smartType/SuggestInstanceofedValueInElseNegated.java
new file mode 100644
index 0000000..f7f4d56
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SuggestInstanceofedValueInElseNegated.java
@@ -0,0 +1,11 @@
+public class TestCase extends Zzz {
+
+    Object ooo() {}
+
+    {
+        if (!(ooo() instanceof String)) {
+        } else {
+          String s = o<caret>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SuggestInstanceofedValueInTernary-out.java b/java/java-tests/testData/codeInsight/completion/smartType/SuggestInstanceofedValueInTernary-out.java
new file mode 100644
index 0000000..3865ec9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SuggestInstanceofedValueInTernary-out.java
@@ -0,0 +1,9 @@
+public class TestCase extends Zzz {
+  public TestCase ttt(Zzz ooo) {
+    return ooo.g() instanceof TestCase ? (TestCase) ooo.g() : <caret>
+  }
+}
+
+class Zzz {
+  Object g();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SuggestInstanceofedValueInTernary.java b/java/java-tests/testData/codeInsight/completion/smartType/SuggestInstanceofedValueInTernary.java
new file mode 100644
index 0000000..c59cca4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SuggestInstanceofedValueInTernary.java
@@ -0,0 +1,9 @@
+public class TestCase extends Zzz {
+  public TestCase ttt(Zzz ooo) {
+    return ooo.g() instanceof TestCase ? o<caret>
+  }
+}
+
+class Zzz {
+  Object g();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SuggestNames.java b/java/java-tests/testData/codeInsight/completion/smartType/SuggestNames.java
new file mode 100644
index 0000000..cb53fca
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SuggestNames.java
@@ -0,0 +1,6 @@
+import java.util.ArrayList;
+
+class Foo {
+  public static void main(ArrayList <caret>){
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SuggestNull-out.java b/java/java-tests/testData/codeInsight/completion/smartType/SuggestNull-out.java
new file mode 100644
index 0000000..29c8210
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SuggestNull-out.java
@@ -0,0 +1,6 @@
+public class Foo {
+    
+    {
+      String s = null;<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SuggestNull.java b/java/java-tests/testData/codeInsight/completion/smartType/SuggestNull.java
new file mode 100644
index 0000000..c24a7e0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SuggestNull.java
@@ -0,0 +1,6 @@
+public class Foo {
+    
+    {
+      String s = nu<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SuperConstructorArguments-out.java b/java/java-tests/testData/codeInsight/completion/smartType/SuperConstructorArguments-out.java
new file mode 100644
index 0000000..3aff214
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SuperConstructorArguments-out.java
@@ -0,0 +1,16 @@
+public class SomeClass {
+    public SomeClass() {
+    }
+    public SomeClass(int i, int j) {
+    }
+    public SomeClass(int j, int i, int k) {
+    }
+
+}
+
+class SomeClassImpl extends SomeClass {
+    SomeClassImpl(int i, int j) {
+        super(i, j);<caret>
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SuperConstructorArguments.java b/java/java-tests/testData/codeInsight/completion/smartType/SuperConstructorArguments.java
new file mode 100644
index 0000000..b8dce40
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SuperConstructorArguments.java
@@ -0,0 +1,16 @@
+public class SomeClass {
+    public SomeClass() {
+    }
+    public SomeClass(int i, int j) {
+    }
+    public SomeClass(int j, int i, int k) {
+    }
+
+}
+
+class SomeClassImpl extends SomeClass {
+    SomeClassImpl(int i, int j) {
+        super(<caret>);
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SuperMethodArguments-out.java b/java/java-tests/testData/codeInsight/completion/smartType/SuperMethodArguments-out.java
new file mode 100644
index 0000000..eec55fb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SuperMethodArguments-out.java
@@ -0,0 +1,14 @@
+public class SomeClass {
+
+    public void foo(int count) {}
+    public Object foo(int count, String descr) {
+
+    }
+
+}
+
+class SomeClassImpl extends SomeClass {
+    public Object foo(int count, String description) {
+        super.foo(count, description)<caret>;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SuperMethodArguments.java b/java/java-tests/testData/codeInsight/completion/smartType/SuperMethodArguments.java
new file mode 100644
index 0000000..a4788d2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SuperMethodArguments.java
@@ -0,0 +1,14 @@
+public class SomeClass {
+
+    public void foo(int count) {}
+    public Object foo(int count, String descr) {
+
+    }
+
+}
+
+class SomeClassImpl extends SomeClass {
+    public Object foo(int count, String description) {
+        super.foo(<caret>);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/TabAfterNew-out.java b/java/java-tests/testData/codeInsight/completion/smartType/TabAfterNew-out.java
new file mode 100644
index 0000000..0eb33cc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/TabAfterNew-out.java
@@ -0,0 +1,21 @@
+public class Main {
+
+  public void main(String[] args) {
+    Aaaa a = new Bbbb(<caret>2);
+  }
+
+  class Aaaa {
+    int aaa;
+
+    Aaaa(int aaa) {
+      this.aaa = aaa;
+    }
+  }
+
+  class Bbbb extends Aaaa{
+    Bbbb(int aaa) {
+      super(aaa);
+    }
+  }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/TabAfterNew.java b/java/java-tests/testData/codeInsight/completion/smartType/TabAfterNew.java
new file mode 100644
index 0000000..98174a6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/TabAfterNew.java
@@ -0,0 +1,21 @@
+public class Main {
+
+  public void main(String[] args) {
+    Aaaa a = new B<caret>Aaaa(2);
+  }
+
+  class Aaaa {
+    int aaa;
+
+    Aaaa(int aaa) {
+      this.aaa = aaa;
+    }
+  }
+
+  class Bbbb extends Aaaa{
+    Bbbb(int aaa) {
+      super(aaa);
+    }
+  }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/TabMethodCall-out.java b/java/java-tests/testData/codeInsight/completion/smartType/TabMethodCall-out.java
new file mode 100644
index 0000000..d7c1a56
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/TabMethodCall-out.java
@@ -0,0 +1,9 @@
+public class MyJavaClass {
+
+    boolean ffff() {}
+
+    {
+
+        boolean b = ffff(<caret>239);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/TabMethodCall.java b/java/java-tests/testData/codeInsight/completion/smartType/TabMethodCall.java
new file mode 100644
index 0000000..da21a4b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/TabMethodCall.java
@@ -0,0 +1,9 @@
+public class MyJavaClass {
+
+    boolean ffff() {}
+
+    {
+
+        boolean b = <caret>equals(239);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/TabMethodInBinaryExpression-out.java b/java/java-tests/testData/codeInsight/completion/smartType/TabMethodInBinaryExpression-out.java
new file mode 100644
index 0000000..7fcb565
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/TabMethodInBinaryExpression-out.java
@@ -0,0 +1,13 @@
+public class TabComplete {
+	public void scene() {
+		Servant servant = new Servant();
+		int var = servant.method1()<caret> + 1;
+	}
+}
+
+class Servant {
+	public int method1() {
+		return 1;
+	}
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/TabMethodInBinaryExpression.java b/java/java-tests/testData/codeInsight/completion/smartType/TabMethodInBinaryExpression.java
new file mode 100644
index 0000000..e3fe222
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/TabMethodInBinaryExpression.java
@@ -0,0 +1,13 @@
+public class TabComplete {
+	public void scene() {
+		Servant servant = new Servant();
+		int var = servant.met<caret>hod1() + 1;
+	}
+}
+
+class Servant {
+	public int method1() {
+		return 1;
+	}
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/TabToReplaceClassKeyword-out.java b/java/java-tests/testData/codeInsight/completion/smartType/TabToReplaceClassKeyword-out.java
new file mode 100644
index 0000000..f2b4f61
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/TabToReplaceClassKeyword-out.java
@@ -0,0 +1,7 @@
+class Foo {
+  void foo() {
+    Class<? extends Foo> c = Foo.class;<caret>
+  }
+}
+
+class Bar extends Foo {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/TabToReplaceClassKeyword.java b/java/java-tests/testData/codeInsight/completion/smartType/TabToReplaceClassKeyword.java
new file mode 100644
index 0000000..e093a23
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/TabToReplaceClassKeyword.java
@@ -0,0 +1,7 @@
+class Foo {
+  void foo() {
+    Class<? extends Foo> c = F<caret>a.class;
+  }
+}
+
+class Bar extends Foo {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/TailAfterInstanceOf-out.java b/java/java-tests/testData/codeInsight/completion/smartType/TailAfterInstanceOf-out.java
new file mode 100644
index 0000000..cc049f30
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/TailAfterInstanceOf-out.java
@@ -0,0 +1,9 @@
+public class TestCase extends Zzz {
+	public boolean ttt(Zzz o) {
+		return o instanceof TestCase<caret>
+	}
+}
+
+class Zzz {
+    private void fax() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/TailAfterInstanceOf.java b/java/java-tests/testData/codeInsight/completion/smartType/TailAfterInstanceOf.java
new file mode 100644
index 0000000..de72614
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/TailAfterInstanceOf.java
@@ -0,0 +1,9 @@
+public class TestCase extends Zzz {
+	public boolean ttt(Zzz o) {
+		return o instanceof <caret>
+	}
+}
+
+class Zzz {
+    private void fax() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ThisFieldAssignedToItself.java b/java/java-tests/testData/codeInsight/completion/smartType/ThisFieldAssignedToItself.java
new file mode 100644
index 0000000..93b10fb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ThisFieldAssignedToItself.java
@@ -0,0 +1,8 @@
+class A {
+    Object field;
+
+    A() {
+        field = 2;
+        this.field = fi<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ThrowExceptionConstructor-out.java b/java/java-tests/testData/codeInsight/completion/smartType/ThrowExceptionConstructor-out.java
new file mode 100644
index 0000000..7d740e5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ThrowExceptionConstructor-out.java
@@ -0,0 +1,9 @@
+class MyException extends RuntimeException {
+  public MyException(String[] s) {}
+}
+
+class XXX {
+  {
+    throw new MyException(new String[]{<caret>});
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ThrowExceptionConstructor.java b/java/java-tests/testData/codeInsight/completion/smartType/ThrowExceptionConstructor.java
new file mode 100644
index 0000000..1a77926
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ThrowExceptionConstructor.java
@@ -0,0 +1,9 @@
+class MyException extends RuntimeException {
+  public MyException(String[] s) {}
+}
+
+class XXX {
+  {
+    throw new MyException(new <caret>)
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ThrowRuntimeException-out.java b/java/java-tests/testData/codeInsight/completion/smartType/ThrowRuntimeException-out.java
new file mode 100644
index 0000000..d67cac0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ThrowRuntimeException-out.java
@@ -0,0 +1,7 @@
+class Foo {
+  {
+    RuntimeException e;
+    throw e;<caret>
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ThrowRuntimeException.java b/java/java-tests/testData/codeInsight/completion/smartType/ThrowRuntimeException.java
new file mode 100644
index 0000000..c821a6e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ThrowRuntimeException.java
@@ -0,0 +1,7 @@
+class Foo {
+  {
+    RuntimeException e;
+    throw <caret>
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/TryWithResourcesNoSemicolon-out.java b/java/java-tests/testData/codeInsight/completion/smartType/TryWithResourcesNoSemicolon-out.java
new file mode 100644
index 0000000..eb57c3f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/TryWithResourcesNoSemicolon-out.java
@@ -0,0 +1,8 @@
+class MyClass {
+  static class MyResource implements AutoCloseable { }
+
+  void f(MyResource resource) {
+    try (final MyResource c = resource<caret>) {
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/TryWithResourcesNoSemicolon.java b/java/java-tests/testData/codeInsight/completion/smartType/TryWithResourcesNoSemicolon.java
new file mode 100644
index 0000000..dbbae50
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/TryWithResourcesNoSemicolon.java
@@ -0,0 +1,8 @@
+class MyClass {
+  static class MyResource implements AutoCloseable { }
+
+  void f(MyResource resource) {
+    try (final MyResource c = r<caret>) {
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/TryWithResourcesThrowsException-out.java b/java/java-tests/testData/codeInsight/completion/smartType/TryWithResourcesThrowsException-out.java
new file mode 100644
index 0000000..7b35479
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/TryWithResourcesThrowsException-out.java
@@ -0,0 +1,11 @@
+import java.io.FileInputStream;
+import java.io.IOException;
+
+class Test {
+  void foo() {
+    try {
+      try (FileInputStream in = new FileInputStream("adsf")) {
+      }
+    } catch (IOException <caret>) {}
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/TryWithResourcesThrowsException.java b/java/java-tests/testData/codeInsight/completion/smartType/TryWithResourcesThrowsException.java
new file mode 100644
index 0000000..3683c713
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/TryWithResourcesThrowsException.java
@@ -0,0 +1,10 @@
+import java.io.FileInputStream;
+
+class Test {
+  void foo() {
+    try {
+      try (FileInputStream in = new FileInputStream("adsf")) {
+      }
+    } catch (IO<caret>) {}
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/TypeArgs1-out.java b/java/java-tests/testData/codeInsight/completion/smartType/TypeArgs1-out.java
new file mode 100644
index 0000000..185c361
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/TypeArgs1-out.java
@@ -0,0 +1,9 @@
+class List<T> {}
+
+public class AA {
+    class Entry {}
+
+    {
+        List<Entry> l = new List<Entry>();
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/TypeArgs1.java b/java/java-tests/testData/codeInsight/completion/smartType/TypeArgs1.java
new file mode 100644
index 0000000..7072c14
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/TypeArgs1.java
@@ -0,0 +1,9 @@
+class List<T> {}
+
+public class AA {
+    class Entry {}
+
+    {
+        List<Entry> l = new <caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/TypeArgs2-out.java b/java/java-tests/testData/codeInsight/completion/smartType/TypeArgs2-out.java
new file mode 100644
index 0000000..28d7baec
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/TypeArgs2-out.java
@@ -0,0 +1,10 @@
+import java.util.Collection;
+
+class List<T> {}
+
+public class A {
+    void f() {
+        class Collection {}
+        List<java.util.Collection> l = new List<java.util.Collection>();
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/TypeArgs2.java b/java/java-tests/testData/codeInsight/completion/smartType/TypeArgs2.java
new file mode 100644
index 0000000..4fb01c7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/TypeArgs2.java
@@ -0,0 +1,8 @@
+class List<T> {}
+
+public class A {
+    void f() {
+        class Collection {}
+        List<java.util.Collection> l = new <caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/TypeParametersInheritors-out.java b/java/java-tests/testData/codeInsight/completion/smartType/TypeParametersInheritors-out.java
new file mode 100644
index 0000000..c1e2e92
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/TypeParametersInheritors-out.java
@@ -0,0 +1,7 @@
+class Foo {}
+class Bar extends Foo {}
+class Goo extends Bar {}
+
+class Params<X extends Foo> {}
+class Main extends Params<Foo><caret>
+
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/TypeParametersInheritors.java b/java/java-tests/testData/codeInsight/completion/smartType/TypeParametersInheritors.java
new file mode 100644
index 0000000..2185937
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/TypeParametersInheritors.java
@@ -0,0 +1,7 @@
+class Foo {}
+class Bar extends Foo {}
+class Goo extends Bar {}
+
+class Params<X extends Foo> {}
+class Main extends Params<<caret>
+
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/TypeParametersInheritorsComma-out.java b/java/java-tests/testData/codeInsight/completion/smartType/TypeParametersInheritorsComma-out.java
new file mode 100644
index 0000000..7c24b57
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/TypeParametersInheritorsComma-out.java
@@ -0,0 +1,5 @@
+class Foo {}
+
+class Params<X extends Foo,Y> {}
+class Main extends Params<Foo, <caret>
+
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/TypeParametersInheritorsComma.java b/java/java-tests/testData/codeInsight/completion/smartType/TypeParametersInheritorsComma.java
new file mode 100644
index 0000000..3d8c026
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/TypeParametersInheritorsComma.java
@@ -0,0 +1,5 @@
+class Foo {}
+
+class Params<X extends Foo,Y> {}
+class Main extends Params<<caret>
+
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/TypeParametersInheritorsInExpression-out.java b/java/java-tests/testData/codeInsight/completion/smartType/TypeParametersInheritorsInExpression-out.java
new file mode 100644
index 0000000..351e177
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/TypeParametersInheritorsInExpression-out.java
@@ -0,0 +1,6 @@
+class CharSequence {}
+
+class Stringy<S extends CharSequence> { }
+
+class Tester {
+void method() { new Stringy<CharSequence><caret> }
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/TypeParametersInheritorsInExpression.java b/java/java-tests/testData/codeInsight/completion/smartType/TypeParametersInheritorsInExpression.java
new file mode 100644
index 0000000..746cd0b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/TypeParametersInheritorsInExpression.java
@@ -0,0 +1,6 @@
+class CharSequence {}
+
+class Stringy<S extends CharSequence> { }
+
+class Tester {
+void method() { new Stringy<CS<caret> }
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/TypeParametersObjectInheritors-out.java b/java/java-tests/testData/codeInsight/completion/smartType/TypeParametersObjectInheritors-out.java
new file mode 100644
index 0000000..1f6764a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/TypeParametersObjectInheritors-out.java
@@ -0,0 +1,6 @@
+class CharSequenceX {}
+
+class Stringy<S> { }
+
+class Tester {
+void method() { new Stringy<CharSequenceX><caret> }
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/TypeParametersObjectInheritors.java b/java/java-tests/testData/codeInsight/completion/smartType/TypeParametersObjectInheritors.java
new file mode 100644
index 0000000..9a626cb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/TypeParametersObjectInheritors.java
@@ -0,0 +1,6 @@
+class CharSequenceX {}
+
+class Stringy<S> { }
+
+class Tester {
+void method() { new Stringy<CSX<caret> }
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/TypeVariableInstanceOf.java b/java/java-tests/testData/codeInsight/completion/smartType/TypeVariableInstanceOf.java
new file mode 100644
index 0000000..0c9030f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/TypeVariableInstanceOf.java
@@ -0,0 +1,10 @@
+interface Foo {}
+class Bar implements Foo {}
+class Goo implements Foo {}
+
+class Main<T extends Foo> {
+  {
+    T t;
+    if (t instanceof <caret>)
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/UnboundTypeArgs-out.java b/java/java-tests/testData/codeInsight/completion/smartType/UnboundTypeArgs-out.java
new file mode 100644
index 0000000..e0f7ba5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/UnboundTypeArgs-out.java
@@ -0,0 +1,10 @@
+interface Foo {}
+interface FooEx<T> extends Foo {
+    T foo();
+}
+
+class Bar {
+    {
+        Foo f = new FooEx<<caret>>() {};
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/UnboundTypeArgs.java b/java/java-tests/testData/codeInsight/completion/smartType/UnboundTypeArgs.java
new file mode 100644
index 0000000..aa2333d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/UnboundTypeArgs.java
@@ -0,0 +1,10 @@
+interface Foo {}
+interface FooEx<T> extends Foo {
+    T foo();
+}
+
+class Bar {
+    {
+        Foo f = new FE<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/UnboundTypeArgs2-out.java b/java/java-tests/testData/codeInsight/completion/smartType/UnboundTypeArgs2-out.java
new file mode 100644
index 0000000..99659b5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/UnboundTypeArgs2-out.java
@@ -0,0 +1,8 @@
+interface Foo {}
+class FooEx<T> implements Foo {}
+
+class Bar {
+    {
+        Foo f = new FooEx<<caret>>();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/UnboundTypeArgs2.java b/java/java-tests/testData/codeInsight/completion/smartType/UnboundTypeArgs2.java
new file mode 100644
index 0000000..4787cde
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/UnboundTypeArgs2.java
@@ -0,0 +1,8 @@
+interface Foo {}
+class FooEx<T> implements Foo {}
+
+class Bar {
+    {
+        Foo f = new FE<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/UnlockDocument-out.java b/java/java-tests/testData/codeInsight/completion/smartType/UnlockDocument-out.java
new file mode 100644
index 0000000..a5cc8dd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/UnlockDocument-out.java
@@ -0,0 +1,10 @@
+import java.util.*;
+
+import pkg.Bar;
+import pkg.Foo;
+
+class MyClass {
+{
+  Foo.foo(Collections.<Bar>emptyList());
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/UnlockDocument.java b/java/java-tests/testData/codeInsight/completion/smartType/UnlockDocument.java
new file mode 100644
index 0000000..2473d8c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/UnlockDocument.java
@@ -0,0 +1,8 @@
+import java.util.*;
+import pkg.Foo;
+
+class MyClass {
+{
+  Foo.foo(Collections.em<caret>)
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/UnqualifiedConstantInSwitch-out.java b/java/java-tests/testData/codeInsight/completion/smartType/UnqualifiedConstantInSwitch-out.java
new file mode 100644
index 0000000..397513d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/UnqualifiedConstantInSwitch-out.java
@@ -0,0 +1,16 @@
+enum Foo {
+    FOO, BAR
+  }
+
+
+class Main {
+
+  {
+    Foo a;
+    Foo b;
+    switch (a) {
+      case FOO: b = Foo.BAR;<caret>
+    }
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/UnqualifiedConstantInSwitch.java b/java/java-tests/testData/codeInsight/completion/smartType/UnqualifiedConstantInSwitch.java
new file mode 100644
index 0000000..75d9f49
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/UnqualifiedConstantInSwitch.java
@@ -0,0 +1,16 @@
+enum Foo {
+    FOO, BAR
+  }
+
+
+class Main {
+
+  {
+    Foo a;
+    Foo b;
+    switch (a) {
+      case FOO: b = B<caret>
+    }
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/UseIntConstantsFromConstructedClass-out.java b/java/java-tests/testData/codeInsight/completion/smartType/UseIntConstantsFromConstructedClass-out.java
new file mode 100644
index 0000000..eb9855b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/UseIntConstantsFromConstructedClass-out.java
@@ -0,0 +1,15 @@
+class Foo {
+  public static final int FOO_FOO;
+  public static final int FOO_BAR;
+
+  Foo(int a) {}
+
+  void foo(int x);
+}
+
+public class Bar {
+    
+    {
+       new Foo(Foo.FOO_BAR)<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/UseIntConstantsFromConstructedClass.java b/java/java-tests/testData/codeInsight/completion/smartType/UseIntConstantsFromConstructedClass.java
new file mode 100644
index 0000000..dfbb0e2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/UseIntConstantsFromConstructedClass.java
@@ -0,0 +1,15 @@
+class Foo {
+  public static final int FOO_FOO;
+  public static final int FOO_BAR;
+
+  Foo(int a) {}
+
+  void foo(int x);
+}
+
+public class Bar {
+    
+    {
+       new Foo(FB<caret>)
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/UseIntConstantsFromTargetClass-out.java b/java/java-tests/testData/codeInsight/completion/smartType/UseIntConstantsFromTargetClass-out.java
new file mode 100644
index 0000000..8ee6bc9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/UseIntConstantsFromTargetClass-out.java
@@ -0,0 +1,13 @@
+class Foo {
+  public static final int FOO_FOO;
+  public static final int FOO_BAR;
+
+  void foo(int x);
+}
+
+public class Bar {
+    
+    {
+       new Foo().foo(Foo.FOO_BAR);<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/UseIntConstantsFromTargetClass.java b/java/java-tests/testData/codeInsight/completion/smartType/UseIntConstantsFromTargetClass.java
new file mode 100644
index 0000000..3ee926c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/UseIntConstantsFromTargetClass.java
@@ -0,0 +1,13 @@
+class Foo {
+  public static final int FOO_FOO;
+  public static final int FOO_BAR;
+
+  void foo(int x);
+}
+
+public class Bar {
+    
+    {
+       new Foo().foo(FB<caret>)
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/UseIntConstantsFromTargetClassReturnValue-out.java b/java/java-tests/testData/codeInsight/completion/smartType/UseIntConstantsFromTargetClassReturnValue-out.java
new file mode 100644
index 0000000..57fef98
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/UseIntConstantsFromTargetClassReturnValue-out.java
@@ -0,0 +1,13 @@
+class Foo {
+  public static final int FOO_FOO;
+  public static final int FOO_BAR;
+
+  int foo();
+}
+
+public class Bar {
+    
+    {
+       if (new Foo().foo() == Foo.FOO_BAR<caret>)
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/UseIntConstantsFromTargetClassReturnValue.java b/java/java-tests/testData/codeInsight/completion/smartType/UseIntConstantsFromTargetClassReturnValue.java
new file mode 100644
index 0000000..00c2495
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/UseIntConstantsFromTargetClassReturnValue.java
@@ -0,0 +1,13 @@
+class Foo {
+  public static final int FOO_FOO;
+  public static final int FOO_BAR;
+
+  int foo();
+}
+
+public class Bar {
+    
+    {
+       if (new Foo().foo() == FB<caret>)
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/UseIntConstantsInOr-out.java b/java/java-tests/testData/codeInsight/completion/smartType/UseIntConstantsInOr-out.java
new file mode 100644
index 0000000..2c6d84a0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/UseIntConstantsInOr-out.java
@@ -0,0 +1,15 @@
+class Foo {
+  public static final int FOO_FOO;
+  public static final int FOO_BAR;
+
+  Foo(int a) {}
+
+  void foo(int x);
+}
+
+public class Bar {
+    
+    {
+       new Foo(2 | Foo.FOO_BAR<caret>)
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/UseIntConstantsInOr.java b/java/java-tests/testData/codeInsight/completion/smartType/UseIntConstantsInOr.java
new file mode 100644
index 0000000..7c4d822
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/UseIntConstantsInOr.java
@@ -0,0 +1,15 @@
+class Foo {
+  public static final int FOO_FOO;
+  public static final int FOO_BAR;
+
+  Foo(int a) {}
+
+  void foo(int x);
+}
+
+public class Bar {
+    
+    {
+       new Foo(2 | FB<caret>)
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/UseIntConstantsInPlus-out.java b/java/java-tests/testData/codeInsight/completion/smartType/UseIntConstantsInPlus-out.java
new file mode 100644
index 0000000..8122f10
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/UseIntConstantsInPlus-out.java
@@ -0,0 +1,15 @@
+class Foo {
+  public static final int FOO_FOO;
+  public static final int FOO_BAR;
+
+  Foo(int a) {}
+
+  void foo(int x);
+}
+
+public class Bar {
+    
+    {
+       new Foo(2 + Foo.FOO_BAR<caret>)
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/UseIntConstantsInPlus.java b/java/java-tests/testData/codeInsight/completion/smartType/UseIntConstantsInPlus.java
new file mode 100644
index 0000000..88d89a7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/UseIntConstantsInPlus.java
@@ -0,0 +1,15 @@
+class Foo {
+  public static final int FOO_FOO;
+  public static final int FOO_BAR;
+
+  Foo(int a) {}
+
+  void foo(int x);
+}
+
+public class Bar {
+    
+    {
+       new Foo(2 + FB<caret>)
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/UserDataListAddAll-out.java b/java/java-tests/testData/codeInsight/completion/smartType/UserDataListAddAll-out.java
new file mode 100644
index 0000000..19dc86d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/UserDataListAddAll-out.java
@@ -0,0 +1,18 @@
+class List<T> {
+  void addAll(List<? extends T> l);
+}
+
+class Key<T> {}
+
+class FooBase {
+    Key<List<String>> STRING_LIST;
+
+    <T> T get(Key<T> key);
+
+    {
+        List<String> l;
+        l.addAll(get(STRING_LIST)<caret>)
+    }
+
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/UserDataListAddAll.java b/java/java-tests/testData/codeInsight/completion/smartType/UserDataListAddAll.java
new file mode 100644
index 0000000..d8e40cd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/UserDataListAddAll.java
@@ -0,0 +1,18 @@
+class List<T> {
+  void addAll(List<? extends T> l);
+}
+
+class Key<T> {}
+
+class FooBase {
+    Key<List<String>> STRING_LIST;
+
+    <T> T get(Key<T> key);
+
+    {
+        List<String> l;
+        l.addAll(get(S<caret>))
+    }
+
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/Varargs1-out.java b/java/java-tests/testData/codeInsight/completion/smartType/Varargs1-out.java
new file mode 100644
index 0000000..c1fb01b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/Varargs1-out.java
@@ -0,0 +1,8 @@
+public class Varargs {
+    void foo (String s, String ... objs) {}
+
+    void bar () {
+        String sss = new String();
+        foo ("", "", sss<caret>);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/Varargs1.java b/java/java-tests/testData/codeInsight/completion/smartType/Varargs1.java
new file mode 100644
index 0000000..656c5c8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/Varargs1.java
@@ -0,0 +1,8 @@
+public class Varargs {
+    void foo (String s, String ... objs) {}
+
+    void bar () {
+        String sss = new String();
+        foo ("", "", s<caret>);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/VariableColon-out.java b/java/java-tests/testData/codeInsight/completion/smartType/VariableColon-out.java
new file mode 100644
index 0000000..57904ef
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/VariableColon-out.java
@@ -0,0 +1,5 @@
+class Bar {
+  int foo(int zoooa, int zooob) {
+    return true ? zoooa : <caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/VariableColon.java b/java/java-tests/testData/codeInsight/completion/smartType/VariableColon.java
new file mode 100644
index 0000000..51ed4cf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/VariableColon.java
@@ -0,0 +1,5 @@
+class Bar {
+  int foo(int zoooa, int zooob) {
+    return true ? zoo<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/VoidCast.java b/java/java-tests/testData/codeInsight/completion/smartType/VoidCast.java
new file mode 100644
index 0000000..3e92491
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/VoidCast.java
@@ -0,0 +1,5 @@
+class C{
+    {
+        (<caret>) 
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/VoidExpectedType-out.java b/java/java-tests/testData/codeInsight/completion/smartType/VoidExpectedType-out.java
new file mode 100644
index 0000000..b3a9d7a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/VoidExpectedType-out.java
@@ -0,0 +1,8 @@
+class Main {
+
+  {
+    new Foo().equals(<caret>);
+  }
+}
+
+class Foo {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/VoidExpectedType.java b/java/java-tests/testData/codeInsight/completion/smartType/VoidExpectedType.java
new file mode 100644
index 0000000..8bf5195
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/VoidExpectedType.java
@@ -0,0 +1,8 @@
+class Main {
+
+  {
+    new Foo().<caret>
+  }
+}
+
+class Foo {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/WildcardedInstanceof-out.java b/java/java-tests/testData/codeInsight/completion/smartType/WildcardedInstanceof-out.java
new file mode 100644
index 0000000..a7d2000
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/WildcardedInstanceof-out.java
@@ -0,0 +1,9 @@
+class A<T> {}
+class Bbbb<T> extends A<T> {}
+public class C {
+  void m(A<?> a) {
+    if (a instanceof Bbbb<?><caret>) {
+
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/WildcardedInstanceof.java b/java/java-tests/testData/codeInsight/completion/smartType/WildcardedInstanceof.java
new file mode 100644
index 0000000..27c6bdc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/WildcardedInstanceof.java
@@ -0,0 +1,9 @@
+class A<T> {}
+class Bbbb<T> extends A<T> {}
+public class C {
+  void m(A<?> a) {
+    if (a instanceof B<caret>) {
+
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/WildcardedInstanceof2-out.java b/java/java-tests/testData/codeInsight/completion/smartType/WildcardedInstanceof2-out.java
new file mode 100644
index 0000000..e2bdb77
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/WildcardedInstanceof2-out.java
@@ -0,0 +1,9 @@
+class A<T> {}
+class Bbbb<T> extends A<T> {}
+public class C {
+  void m(A a) {
+    if (a instanceof Bbbb<caret>) {
+
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/WildcardedInstanceof2.java b/java/java-tests/testData/codeInsight/completion/smartType/WildcardedInstanceof2.java
new file mode 100644
index 0000000..46d373e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/WildcardedInstanceof2.java
@@ -0,0 +1,9 @@
+class A<T> {}
+class Bbbb<T> extends A<T> {}
+public class C {
+  void m(A a) {
+    if (a instanceof B<caret>) {
+
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/WildcardedInstanceof3-out.java b/java/java-tests/testData/codeInsight/completion/smartType/WildcardedInstanceof3-out.java
new file mode 100644
index 0000000..7750ed7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/WildcardedInstanceof3-out.java
@@ -0,0 +1,9 @@
+class A<T> {}
+class Bbbb<T> extends A<T> {}
+public class C {
+  void m(A<String> a) {
+    if (a instanceof Bbbb<?><caret>) {
+
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/WildcardedInstanceof3.java b/java/java-tests/testData/codeInsight/completion/smartType/WildcardedInstanceof3.java
new file mode 100644
index 0000000..a8e6970
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/WildcardedInstanceof3.java
@@ -0,0 +1,9 @@
+class A<T> {}
+class Bbbb<T> extends A<T> {}
+public class C {
+  void m(A<String> a) {
+    if (a instanceof B<caret>) {
+
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/WrongAnonymous-out.java b/java/java-tests/testData/codeInsight/completion/smartType/WrongAnonymous-out.java
new file mode 100644
index 0000000..127e4f7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/WrongAnonymous-out.java
@@ -0,0 +1,21 @@
+import java.io.File;
+import java.io.FilenameFilter;
+
+class Intermediate {
+
+    {
+        new File(".").listFiles(new FilenameFilter() {
+            @Override
+            public boolean accept(File dir, String name) {
+                <selection>return false;  //To change body of implemented methods use File | Settings | File Templates.</selection>
+            }
+        })
+                SwingUtilities.invokeLater(new Runnable() {
+                    public void run() {
+                    }
+                });
+
+
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/WrongAnonymous.java b/java/java-tests/testData/codeInsight/completion/smartType/WrongAnonymous.java
new file mode 100644
index 0000000..7577a76
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/WrongAnonymous.java
@@ -0,0 +1,15 @@
+import java.io.File;
+
+class Intermediate {
+
+    {
+        new File(".").listFiles(new FileFilter<caret>
+                SwingUtilities.invokeLater(new Runnable() {
+                    public void run() {
+                    }
+                });
+
+
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/afterInstanceOf/after1.java b/java/java-tests/testData/codeInsight/completion/smartType/afterInstanceOf/after1.java
new file mode 100644
index 0000000..8ecf6ed
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/afterInstanceOf/after1.java
@@ -0,0 +1,11 @@
+class A{
+ {
+   A a;
+
+   if(a instanceof B<caret>)
+
+ }
+
+ class B extends A{}
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/afterInstanceOf/after2.java b/java/java-tests/testData/codeInsight/completion/smartType/afterInstanceOf/after2.java
new file mode 100644
index 0000000..1e85e51
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/afterInstanceOf/after2.java
@@ -0,0 +1,11 @@
+class A{
+ {
+   A a;
+
+   if(a instanceof BBBB<caret>)
+
+ }
+
+ class BBBB extends A{}
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/afterInstanceOf/before1.java b/java/java-tests/testData/codeInsight/completion/smartType/afterInstanceOf/before1.java
new file mode 100644
index 0000000..688de52
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/afterInstanceOf/before1.java
@@ -0,0 +1,11 @@
+class A{
+ {
+   A a;
+
+   if(a instanceof <caret>)
+
+ }
+
+ class B extends A{}
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/afterInstanceOf/before2.java b/java/java-tests/testData/codeInsight/completion/smartType/afterInstanceOf/before2.java
new file mode 100644
index 0000000..d1b8cdf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/afterInstanceOf/before2.java
@@ -0,0 +1,11 @@
+class A{
+ {
+   A a;
+
+   if(a instanceof BB<caret>)
+
+ }
+
+ class BBBB extends A{}
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/afterNew/LastArgInInnerNewAfter.java b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/LastArgInInnerNewAfter.java
new file mode 100644
index 0000000..63728c2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/LastArgInInnerNewAfter.java
@@ -0,0 +1,10 @@
+class B {
+    class A {
+      A(int i) {}
+    }
+    static B createB(A a) {}
+    public static void main(String[] args) {
+        int i;
+        foo(createB(new A(i)<caret>));
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/afterNew/LastArgInInnerNewAfter2.java b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/LastArgInInnerNewAfter2.java
new file mode 100644
index 0000000..323b284
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/LastArgInInnerNewAfter2.java
@@ -0,0 +1,9 @@
+class B {
+    private static int getSeed() { return 0; }
+    class A {
+      A(int i) {}
+    }
+    public static void main(String[] args) {
+      new A(getSeed()).show();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/afterNew/LastArgInInnerNewAfter3.java b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/LastArgInInnerNewAfter3.java
new file mode 100644
index 0000000..938ebae
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/LastArgInInnerNewAfter3.java
@@ -0,0 +1,13 @@
+class AAA {
+  AAA(int i) {}
+}
+
+class B {
+    int iiii=0;
+    B(int i,AAA aaa, int j, int k) {
+      B b = new B(
+        0,
+        new AAA(iiii),
+      );
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/afterNew/LastArgInInnerNewAfter4.java b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/LastArgInInnerNewAfter4.java
new file mode 100644
index 0000000..3e2fa6f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/LastArgInInnerNewAfter4.java
@@ -0,0 +1,8 @@
+class _Map<K> {}
+
+class B {
+  B(_Map<String> map) {}
+  public static void main(String[] argv) {
+    B b = new B( (_Map<String>) <caret>);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/afterNew/LastArgInInnerNewBefore.java b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/LastArgInInnerNewBefore.java
new file mode 100644
index 0000000..a2a3b95
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/LastArgInInnerNewBefore.java
@@ -0,0 +1,10 @@
+class B {
+    class A {
+      A(int i) {}
+    }
+    static B createB(A a) {}
+    public static void main(String[] args) {
+        int i;
+        foo(createB(new A(<caret>)));
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/afterNew/LastArgInInnerNewBefore2.java b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/LastArgInInnerNewBefore2.java
new file mode 100644
index 0000000..94d848f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/LastArgInInnerNewBefore2.java
@@ -0,0 +1,9 @@
+class B {
+    private static int getSeed() { return 0; }
+    class A {
+      A(int i) {}
+    }
+    public static void main(String[] args) {
+      new A(get<caret>).show();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/afterNew/LastArgInInnerNewBefore3.java b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/LastArgInInnerNewBefore3.java
new file mode 100644
index 0000000..bd30d9b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/LastArgInInnerNewBefore3.java
@@ -0,0 +1,13 @@
+class AAA {
+  AAA(int i) {}
+}
+
+class B {
+    int iiii=0;
+    B(int i,AAA aaa, int j, int k) {
+      B b = new B(
+        0,
+        new AAA(ii<caret>),
+      );
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/afterNew/LastArgInInnerNewBefore4.java b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/LastArgInInnerNewBefore4.java
new file mode 100644
index 0000000..e8828b99
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/LastArgInInnerNewBefore4.java
@@ -0,0 +1,8 @@
+class _Map<K> {}
+
+class B {
+  B(_Map<String> map) {}
+  public static void main(String[] argv) {
+    B b = new B( (<caret>) );
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after1.java b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after1.java
new file mode 100644
index 0000000..6b0db84
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after1.java
@@ -0,0 +1,5 @@
+class AAA<T>{
+  {
+    AAA aa = new AAA();<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after10.java b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after10.java
new file mode 100644
index 0000000..8368802
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after10.java
@@ -0,0 +1,11 @@
+import java.io.InputStream;
+class Test {
+  InputStream inputStream = new MyInputStream(<caret>);
+
+  private class MyInputStream extends InputStream {
+    MyInputStream(String nmame){}
+    public int read() throws IOException {
+      return 0;
+    }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after11.java b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after11.java
new file mode 100644
index 0000000..6b0db84
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after11.java
@@ -0,0 +1,5 @@
+class AAA<T>{
+  {
+    AAA aa = new AAA();<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after12.java b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after12.java
new file mode 100644
index 0000000..9a81b52
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after12.java
@@ -0,0 +1,4 @@
+
+class Test<T> {
+  Test<String> test = new Test<String>();<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after13.java b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after13.java
new file mode 100644
index 0000000..5d8f893
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after13.java
@@ -0,0 +1,3 @@
+class AAAAA<K,V>{
+ AAAAA<K,V> asd = new AAAAA<K, V>();<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after14.java b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after14.java
new file mode 100644
index 0000000..1c28f2b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after14.java
@@ -0,0 +1,5 @@
+class A{
+  void foo(){
+    throw new RuntimeException(<caret>);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after15.java b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after15.java
new file mode 100644
index 0000000..d0cf0a8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after15.java
@@ -0,0 +1,7 @@
+class A{
+  void foo() throws MyException{
+    throw new Error(<caret>);
+  }
+
+  class MyException extends Exception{}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after16.java b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after16.java
new file mode 100644
index 0000000..9964bf1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after16.java
@@ -0,0 +1,7 @@
+class A{
+  void foo() throws MyException{
+    throw new MyException();<caret>
+  }
+
+  class MyException extends Exception{}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after2.java b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after2.java
new file mode 100644
index 0000000..560883e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after2.java
@@ -0,0 +1,5 @@
+class AAA<T>{
+  {
+    AAA<String> aa = new AAA<String>();<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after3.java b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after3.java
new file mode 100644
index 0000000..2fd00bb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after3.java
@@ -0,0 +1,9 @@
+interface XXX<T>{}
+
+class BBB<X> implements XXX<X>{}
+
+class AAA{
+  {
+    XXX aa = new BBB();<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after4.java b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after4.java
new file mode 100644
index 0000000..b111dae
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after4.java
@@ -0,0 +1,8 @@
+class AAA{
+  interface XXX<T>{}
+
+  class BBB<Z> implements XXX<Z>{}
+  {
+    XXX<String> aa = new BBB<String>();<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after5.java b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after5.java
new file mode 100644
index 0000000..8c25b3e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after5.java
@@ -0,0 +1,8 @@
+class AAA{
+  interface XXX<T>{}
+
+  class BBB<Z> implements XXX<Z>{}
+  {
+    XXX aa = new BBB();<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after6.java b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after6.java
new file mode 100644
index 0000000..b1a6cfe
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after6.java
@@ -0,0 +1,8 @@
+class AAA{
+  interface XXX<T>{}
+
+  class BBB<Z> implements XXX<Z>{}
+  {
+    XXX<String[]> aa = new BBB<String[]>();<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after7.java b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after7.java
new file mode 100644
index 0000000..9087c1e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after7.java
@@ -0,0 +1,8 @@
+class AAA{
+  interface XXX<T, T1>{}
+
+  class BBB<Z, Z1> implements XXX<Z, Z1>{}
+  {
+    XXX<String,String[]> aa = new BBB<String, String[]>();<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after8.java b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after8.java
new file mode 100644
index 0000000..8e17e8a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after8.java
@@ -0,0 +1,8 @@
+class AAA{
+  interface XXX<T>{}
+  interface ZZZ<T>{}
+  class BBB<Z> implements XXX<ZZZ<Z>>{}
+  {
+    XXX<ZZZ<String>> aa = new BBB<String>();
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after9.java b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after9.java
new file mode 100644
index 0000000..0bb0342
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/after9.java
@@ -0,0 +1,7 @@
+class A{
+ interface Interface{}
+
+ {
+ Interface in = new <caret>
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before1.java b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before1.java
new file mode 100644
index 0000000..390f787
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before1.java
@@ -0,0 +1,5 @@
+class AAA<T>{
+  {
+    AAA aa = new <caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before10.java b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before10.java
new file mode 100644
index 0000000..ff6693a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before10.java
@@ -0,0 +1,11 @@
+import java.io.InputStream;
+class Test {
+  InputStream inputStream = new MyIn<caret>
+
+  private class MyInputStream extends InputStream {
+    MyInputStream(String nmame){}
+    public int read() throws IOException {
+      return 0;
+    }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before11.java b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before11.java
new file mode 100644
index 0000000..ff6693a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before11.java
@@ -0,0 +1,11 @@
+import java.io.InputStream;
+class Test {
+  InputStream inputStream = new MyIn<caret>
+
+  private class MyInputStream extends InputStream {
+    MyInputStream(String nmame){}
+    public int read() throws IOException {
+      return 0;
+    }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before12.java b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before12.java
new file mode 100644
index 0000000..18af020
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before12.java
@@ -0,0 +1,4 @@
+
+class Test<T> {
+  Test<String> test = new Test<<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before13.java b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before13.java
new file mode 100644
index 0000000..817fedc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before13.java
@@ -0,0 +1,3 @@
+class AAAAA<K,V>{
+ AAAAA<K,V> asd = new AAAAA<<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before14.java b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before14.java
new file mode 100644
index 0000000..f248589
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before14.java
@@ -0,0 +1,5 @@
+class A{
+  void foo(){
+    throw new RuntimeEx<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before15.java b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before15.java
new file mode 100644
index 0000000..cb778f9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before15.java
@@ -0,0 +1,7 @@
+class A{
+  void foo() throws MyException{
+    throw new Erro<caret>
+  }
+
+  class MyException extends Exception{}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before16.java b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before16.java
new file mode 100644
index 0000000..221a4c4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before16.java
@@ -0,0 +1,7 @@
+class A{
+  void foo() throws MyException{
+    throw new MyEx<caret>
+  }
+
+  class MyException extends Exception{}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before2.java b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before2.java
new file mode 100644
index 0000000..998bba4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before2.java
@@ -0,0 +1,5 @@
+class AAA<T>{
+  {
+    AAA<String> aa = new <caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before3.java b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before3.java
new file mode 100644
index 0000000..3e48eda
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before3.java
@@ -0,0 +1,9 @@
+interface XXX<T>{}
+
+class BBB<X> implements XXX<X>{}
+
+class AAA{
+  {
+    XXX aa = new B<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before4.java b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before4.java
new file mode 100644
index 0000000..a8a8585
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before4.java
@@ -0,0 +1,8 @@
+class AAA{
+  interface XXX<T>{}
+
+  class BBB<Z> implements XXX<Z>{}
+  {
+    XXX<String> aa = new B<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before5.java b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before5.java
new file mode 100644
index 0000000..71d3cc3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before5.java
@@ -0,0 +1,8 @@
+class AAA{
+  interface XXX<T>{}
+
+  class BBB<Z> implements XXX<Z>{}
+  {
+    XXX aa = new B<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before6.java b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before6.java
new file mode 100644
index 0000000..ecbc1a2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before6.java
@@ -0,0 +1,8 @@
+class AAA{
+  interface XXX<T>{}
+
+  class BBB<Z> implements XXX<Z>{}
+  {
+    XXX<String[]> aa = new B<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before7.java b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before7.java
new file mode 100644
index 0000000..c5fc6d6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before7.java
@@ -0,0 +1,8 @@
+class AAA{
+  interface XXX<T, T1>{}
+
+  class BBB<Z, Z1> implements XXX<Z, Z1>{}
+  {
+    XXX<String,String[]> aa = new B<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before8.java b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before8.java
new file mode 100644
index 0000000..f31ab8a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before8.java
@@ -0,0 +1,8 @@
+class AAA{
+  interface XXX<T>{}
+  interface ZZZ<T>{}
+  class BBB<Z> implements XXX<ZZZ<Z>>{}
+  {
+    XXX<ZZZ<String>> aa = new B<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before9.java b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before9.java
new file mode 100644
index 0000000..0bb0342
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/afterNew/before9.java
@@ -0,0 +1,7 @@
+class A{
+ interface Interface{}
+
+ {
+ Interface in = new <caret>
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/foo/GetInstance-out.java b/java/java-tests/testData/codeInsight/completion/smartType/foo/GetInstance-out.java
new file mode 100644
index 0000000..d1947a4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/foo/GetInstance-out.java
@@ -0,0 +1,11 @@
+package foo;
+
+class ServiceManager {
+  static <T> T getService(Class<T> aClass) {}
+}
+
+class MyClass {
+  public MyClass getInstance() {
+    return ServiceManager.getService(MyClass.class)<caret>; 
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/foo/GetInstance.java b/java/java-tests/testData/codeInsight/completion/smartType/foo/GetInstance.java
new file mode 100644
index 0000000..3381143
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/foo/GetInstance.java
@@ -0,0 +1,11 @@
+package foo;
+
+class ServiceManager {
+  static <T> T getService(Class<T> aClass) {}
+}
+
+class MyClass {
+  public MyClass getInstance() {
+    return ServiceManager.getService(<caret>); 
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/generics/after1.java b/java/java-tests/testData/codeInsight/completion/smartType/generics/after1.java
new file mode 100644
index 0000000..9ff05f0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/generics/after1.java
@@ -0,0 +1,9 @@
+class A<T>{
+
+  T get(){return null;}
+  void put(String str);
+
+  {
+    put(new A<String>().get());<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/generics/after2.java b/java/java-tests/testData/codeInsight/completion/smartType/generics/after2.java
new file mode 100644
index 0000000..ee4a000
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/generics/after2.java
@@ -0,0 +1,9 @@
+class A<T>{
+
+  T get(){return null;}
+  void put(T str);
+
+  {
+    new A<String>().put(new A<String>().get());<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/generics/after3.java b/java/java-tests/testData/codeInsight/completion/smartType/generics/after3.java
new file mode 100644
index 0000000..8ffd2de
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/generics/after3.java
@@ -0,0 +1,10 @@
+class A<T>{
+
+  T get(){return null;}
+  <T> void put(T str);
+
+  {
+    Object obj;
+    put(obj);<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/generics/after4.java b/java/java-tests/testData/codeInsight/completion/smartType/generics/after4.java
new file mode 100644
index 0000000..f6f9a23
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/generics/after4.java
@@ -0,0 +1,10 @@
+class A<T>{
+
+  T get(){return null;}
+  <T> void put(T[] str);
+
+  {
+    Object[] obj;
+    put(obj);<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/generics/after5.java b/java/java-tests/testData/codeInsight/completion/smartType/generics/after5.java
new file mode 100644
index 0000000..398e010
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/generics/after5.java
@@ -0,0 +1,9 @@
+class A{
+ class Map<U,V>{
+  V get(U u){}
+ }
+
+ {
+   String str = new Map<Object, String>().get(<caret>);
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/generics/after6.java b/java/java-tests/testData/codeInsight/completion/smartType/generics/after6.java
new file mode 100644
index 0000000..d3dad3c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/generics/after6.java
@@ -0,0 +1,9 @@
+class C{
+ class X<T>{}
+
+ public <T> X<T> foo(T sdhg);'
+ {
+
+  X<C> dsd = foo(<caret>)
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/generics/after7.java b/java/java-tests/testData/codeInsight/completion/smartType/generics/after7.java
new file mode 100644
index 0000000..a278de9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/generics/after7.java
@@ -0,0 +1,7 @@
+class List<T> {}
+
+class C {
+  void foo () {
+    List<? extends String> l = new List<String>();<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/generics/after8.java b/java/java-tests/testData/codeInsight/completion/smartType/generics/after8.java
new file mode 100644
index 0000000..a0db73a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/generics/after8.java
@@ -0,0 +1,7 @@
+class List<T> {}
+
+class C {
+  void foo () {
+    List<? extends String>[] array = new List[<caret>];
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/generics/after9.java b/java/java-tests/testData/codeInsight/completion/smartType/generics/after9.java
new file mode 100644
index 0000000..b06059a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/generics/after9.java
@@ -0,0 +1,7 @@
+class A {
+    <T> void foo(T[] ts) {}
+
+    {
+        foo(new Object[]{<caret>});
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/generics/before1.java b/java/java-tests/testData/codeInsight/completion/smartType/generics/before1.java
new file mode 100644
index 0000000..cd42eef
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/generics/before1.java
@@ -0,0 +1,9 @@
+class A<T>{
+
+  T get(){return null;}
+  void put(String str);
+
+  {
+    put(new A<String>().ge<caret>)
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/generics/before2.java b/java/java-tests/testData/codeInsight/completion/smartType/generics/before2.java
new file mode 100644
index 0000000..7b1ec19
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/generics/before2.java
@@ -0,0 +1,9 @@
+class A<T>{
+
+  T get(){return null;}
+  void put(T str);
+
+  {
+    new A<String>().put(new A<String>().ge<caret>)
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/generics/before3.java b/java/java-tests/testData/codeInsight/completion/smartType/generics/before3.java
new file mode 100644
index 0000000..25d9436
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/generics/before3.java
@@ -0,0 +1,10 @@
+class A<T>{
+
+  T get(){return null;}
+  <T> void put(T str);
+
+  {
+    Object obj;
+    put(ob<caret>)
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/generics/before4.java b/java/java-tests/testData/codeInsight/completion/smartType/generics/before4.java
new file mode 100644
index 0000000..5e434c2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/generics/before4.java
@@ -0,0 +1,10 @@
+class A<T>{
+
+  T get(){return null;}
+  <T> void put(T[] str);
+
+  {
+    Object[] obj;
+    put(ob<caret>)
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/generics/before5.java b/java/java-tests/testData/codeInsight/completion/smartType/generics/before5.java
new file mode 100644
index 0000000..fa8d78b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/generics/before5.java
@@ -0,0 +1,9 @@
+class A{
+ class Map<U,V>{
+  V get(U u){}
+ }
+
+ {
+   String str = new Map<Object, String>().ge<caret>
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/generics/before6.java b/java/java-tests/testData/codeInsight/completion/smartType/generics/before6.java
new file mode 100644
index 0000000..9948d5d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/generics/before6.java
@@ -0,0 +1,9 @@
+class C{
+ class X<T>{}
+
+ public <T> X<T> foo(T sdhg);'
+ {
+
+  X<C> dsd = f<caret>
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/generics/before7.java b/java/java-tests/testData/codeInsight/completion/smartType/generics/before7.java
new file mode 100644
index 0000000..b386d20
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/generics/before7.java
@@ -0,0 +1,7 @@
+class List<T> {}
+
+class C {
+  void foo () {
+    List<? extends String> l = new <caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/generics/before8.java b/java/java-tests/testData/codeInsight/completion/smartType/generics/before8.java
new file mode 100644
index 0000000..64f5232b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/generics/before8.java
@@ -0,0 +1,7 @@
+class List<T> {}
+
+class C {
+  void foo () {
+    List<? extends String>[] array = new <caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/generics/before9.java b/java/java-tests/testData/codeInsight/completion/smartType/generics/before9.java
new file mode 100644
index 0000000..a2e62ae
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/generics/before9.java
@@ -0,0 +1,7 @@
+class A {
+    <T> void foo(T[] ts) {}
+
+    {
+        foo(new <caret>);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCall/after1.java b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCall/after1.java
new file mode 100644
index 0000000..8362398
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCall/after1.java
@@ -0,0 +1,5 @@
+public class TestClass {
+    public void foo(TestClass p) {
+        foo(this);<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCall/after1_space.java b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCall/after1_space.java
new file mode 100644
index 0000000..f6f88d0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCall/after1_space.java
@@ -0,0 +1,5 @@
+public class TestClass {
+    public void foo(TestClass p) {
+        foo(this );<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCall/after2.java b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCall/after2.java
new file mode 100644
index 0000000..d629fa6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCall/after2.java
@@ -0,0 +1,5 @@
+public class TestClass {
+    public int foo(TestClass p) {
+        foo(this)<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCall/after3.java b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCall/after3.java
new file mode 100644
index 0000000..8362398
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCall/after3.java
@@ -0,0 +1,5 @@
+public class TestClass {
+    public void foo(TestClass p) {
+        foo(this);<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCall/after4.java b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCall/after4.java
new file mode 100644
index 0000000..35316e0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCall/after4.java
@@ -0,0 +1,5 @@
+public class TestClass {
+    public int foo(TestClass p) {
+        bar(foo(this)<caret>)
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCall/after5.java b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCall/after5.java
new file mode 100644
index 0000000..77332b4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCall/after5.java
@@ -0,0 +1,5 @@
+public class TestClass {
+    public int foo(TestClass p) {
+        if(foo(this)<caret>)
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCall/after6.java b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCall/after6.java
new file mode 100644
index 0000000..821072b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCall/after6.java
@@ -0,0 +1,7 @@
+public class TestClass {
+    static TestClass getInstance() { return new TestClass(); }
+    public int foo(TestClass p) {
+        foo(getInstance()<caret>
+        );
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCall/before1.java b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCall/before1.java
new file mode 100644
index 0000000..b9d5cef
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCall/before1.java
@@ -0,0 +1,5 @@
+public class TestClass {
+    public void foo(TestClass p) {
+        foo(t<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCall/before2.java b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCall/before2.java
new file mode 100644
index 0000000..18ef895
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCall/before2.java
@@ -0,0 +1,5 @@
+public class TestClass {
+    public int foo(TestClass p) {
+        foo(t<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCall/before3.java b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCall/before3.java
new file mode 100644
index 0000000..e79a90f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCall/before3.java
@@ -0,0 +1,5 @@
+public class TestClass {
+    public void foo(TestClass p) {
+        foo(t<caret>);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCall/before4.java b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCall/before4.java
new file mode 100644
index 0000000..134fd2c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCall/before4.java
@@ -0,0 +1,5 @@
+public class TestClass {
+    public int foo(TestClass p) {
+        bar(foo(t<caret>)
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCall/before5.java b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCall/before5.java
new file mode 100644
index 0000000..972ab60
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCall/before5.java
@@ -0,0 +1,5 @@
+public class TestClass {
+    public int foo(TestClass p) {
+        if(foo(t<caret>)
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCall/before6.java b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCall/before6.java
new file mode 100644
index 0000000..8f1a2ea
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCall/before6.java
@@ -0,0 +1,7 @@
+public class TestClass {
+    static TestClass getInstance() { return new TestClass(); }
+    public int foo(TestClass p) {
+        foo(get<caret>
+        );
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCast/after1.java b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCast/after1.java
new file mode 100644
index 0000000..129178f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCast/after1.java
@@ -0,0 +1,5 @@
+public class TestClass {
+    public void foo(TestClass p) {
+        foo((TestClass) <caret>);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCast/after2.java b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCast/after2.java
new file mode 100644
index 0000000..9036f95
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCast/after2.java
@@ -0,0 +1,5 @@
+public class TestClass {
+    TestClass(TestClass p){
+       new TestClass((TestClass) <caret>obj).f();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCast/after3.java b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCast/after3.java
new file mode 100644
index 0000000..140236c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCast/after3.java
@@ -0,0 +1,8 @@
+class A{
+ {
+  String str = (String)foo()<caret>
+
+ }
+
+ Object foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCast/before1.java b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCast/before1.java
new file mode 100644
index 0000000..e8916ab
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCast/before1.java
@@ -0,0 +1,5 @@
+public class TestClass {
+    public void foo(TestClass p) {
+        foo((<caret>);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCast/before2.java b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCast/before2.java
new file mode 100644
index 0000000..1e63171
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCast/before2.java
@@ -0,0 +1,5 @@
+public class TestClass {
+    TestClass(TestClass p){
+       new TestClass((<caret>AAA)obj).f();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCast/before3.java b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCast/before3.java
new file mode 100644
index 0000000..d01eac6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterCast/before3.java
@@ -0,0 +1,8 @@
+class A{
+ {
+  String str = (String)fo<caret>
+
+ }
+
+ Object foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/parenAfterIf/after1.java b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterIf/after1.java
new file mode 100644
index 0000000..9f11d7e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterIf/after1.java
@@ -0,0 +1,5 @@
+public class TestClass {
+    public void foo(boolean parm) {
+        if (parm)<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/parenAfterIf/after2.java b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterIf/after2.java
new file mode 100644
index 0000000..9f11d7e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterIf/after2.java
@@ -0,0 +1,5 @@
+public class TestClass {
+    public void foo(boolean parm) {
+        if (parm)<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/parenAfterIf/before1.java b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterIf/before1.java
new file mode 100644
index 0000000..ef9fc4b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterIf/before1.java
@@ -0,0 +1,5 @@
+public class TestClass {
+    public void foo(boolean parm) {
+        if (p<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/parenAfterIf/before2.java b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterIf/before2.java
new file mode 100644
index 0000000..b289256
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/parenAfterIf/before2.java
@@ -0,0 +1,5 @@
+public class TestClass {
+    public void foo(boolean parm) {
+        if (p<caret>)
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/return/after1.java b/java/java-tests/testData/codeInsight/completion/smartType/return/after1.java
new file mode 100644
index 0000000..045b2ff
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/return/after1.java
@@ -0,0 +1,12 @@
+class A{
+  class B{
+    int fooo(){
+    }
+  }
+
+  int fooo(){
+    B b = null;
+
+    return b.fooo();<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/return/after2.java b/java/java-tests/testData/codeInsight/completion/smartType/return/after2.java
new file mode 100644
index 0000000..a68033e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/return/after2.java
@@ -0,0 +1,12 @@
+class A{
+  class B{
+    int fooo(){
+    }
+  }
+
+  int fooo(){
+    A b = null;
+
+    return b.fooo();<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/return/after3.java b/java/java-tests/testData/codeInsight/completion/smartType/return/after3.java
new file mode 100644
index 0000000..02ab02b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/return/after3.java
@@ -0,0 +1,12 @@
+class A{
+  class B{
+    int fooo(){
+    }
+  }
+
+  int fooo(){
+    A b = null;
+
+    return fo<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/return/before1.java b/java/java-tests/testData/codeInsight/completion/smartType/return/before1.java
new file mode 100644
index 0000000..f97e57e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/return/before1.java
@@ -0,0 +1,12 @@
+class A{
+  class B{
+    int fooo(){
+    }
+  }
+
+  int fooo(){
+    B b = null;
+
+    return b.fo<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/return/before2.java b/java/java-tests/testData/codeInsight/completion/smartType/return/before2.java
new file mode 100644
index 0000000..6645ebd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/return/before2.java
@@ -0,0 +1,12 @@
+class A{
+  class B{
+    int fooo(){
+    }
+  }
+
+  int fooo(){
+    A b = null;
+
+    return b.fo<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/return/before3.java b/java/java-tests/testData/codeInsight/completion/smartType/return/before3.java
new file mode 100644
index 0000000..02ab02b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/return/before3.java
@@ -0,0 +1,12 @@
+class A{
+  class B{
+    int fooo(){
+    }
+  }
+
+  int fooo(){
+    A b = null;
+
+    return fo<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/ArrayMemberAccess-out.java b/java/java-tests/testData/codeInsight/completion/smartType/second/ArrayMemberAccess-out.java
new file mode 100644
index 0000000..2161087
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/ArrayMemberAccess-out.java
@@ -0,0 +1,6 @@
+class Goo {
+    {
+        boolean[] los;
+        boolean a = los[<caret>];
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/ArrayMemberAccess.java b/java/java-tests/testData/codeInsight/completion/smartType/second/ArrayMemberAccess.java
new file mode 100644
index 0000000..6b2f0d6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/ArrayMemberAccess.java
@@ -0,0 +1,6 @@
+class Goo {
+    {
+        boolean[] los;
+        boolean a = los<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/ArrayRefAsQualifier-out.java b/java/java-tests/testData/codeInsight/completion/smartType/second/ArrayRefAsQualifier-out.java
new file mode 100644
index 0000000..493d9d5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/ArrayRefAsQualifier-out.java
@@ -0,0 +1,11 @@
+class Bar {
+  Goo getGoo();
+}
+class Goo {}
+
+class Foo {
+  {
+    Bar[] ref = new Bar[1];
+    Goo g = ref[0].getGoo();<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/ArrayRefAsQualifier.java b/java/java-tests/testData/codeInsight/completion/smartType/second/ArrayRefAsQualifier.java
new file mode 100644
index 0000000..53e4b68
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/ArrayRefAsQualifier.java
@@ -0,0 +1,11 @@
+class Bar {
+  Goo getGoo();
+}
+class Goo {}
+
+class Foo {
+  {
+    Bar[] ref = new Bar[1];
+    Goo g = <caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/CastInstanceofedQualifier-out.java b/java/java-tests/testData/codeInsight/completion/smartType/second/CastInstanceofedQualifier-out.java
new file mode 100644
index 0000000..7943f45
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/CastInstanceofedQualifier-out.java
@@ -0,0 +1,19 @@
+interface Zip extends Bar{
+  Foo getZip();
+}
+
+interface Bar {}
+
+class Foo {
+
+}
+
+class Goo {
+    {
+        Bar o;
+        if (o instanceof Zip) {
+          Foo f = ((Zip) o).getZip();<caret>
+        }
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/CastInstanceofedQualifier.java b/java/java-tests/testData/codeInsight/completion/smartType/second/CastInstanceofedQualifier.java
new file mode 100644
index 0000000..a3275d2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/CastInstanceofedQualifier.java
@@ -0,0 +1,19 @@
+interface Zip extends Bar{
+  Foo getZip();
+}
+
+interface Bar {}
+
+class Foo {
+
+}
+
+class Goo {
+    {
+        Bar o;
+        if (o instanceof Zip) {
+          Foo f = <caret>
+        }
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/ChainingPerformance.java b/java/java-tests/testData/codeInsight/completion/smartType/second/ChainingPerformance.java
new file mode 100644
index 0000000..14125cc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/ChainingPerformance.java
@@ -0,0 +1,7 @@
+class Foo extends javax.swing.JComponent {
+
+    {
+        String cl = <caret>
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/DifferentQualifiers.java b/java/java-tests/testData/codeInsight/completion/smartType/second/DifferentQualifiers.java
new file mode 100644
index 0000000..2a2c56b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/DifferentQualifiers.java
@@ -0,0 +1,14 @@
+class Bar {
+  Goo getGoo(int a);
+}
+class Goo {}
+
+class Foo {
+  Bar getBar() {}
+  Bar b;
+
+
+  {
+    Goo g = <caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/DontChainStringMethodsOnString-out.java b/java/java-tests/testData/codeInsight/completion/smartType/second/DontChainStringMethodsOnString-out.java
new file mode 100644
index 0000000..ce60f2b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/DontChainStringMethodsOnString-out.java
@@ -0,0 +1,9 @@
+class Foo {
+
+   String afoo();
+
+    {
+        String cl = afoo();<caret>
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/DontChainStringMethodsOnString.java b/java/java-tests/testData/codeInsight/completion/smartType/second/DontChainStringMethodsOnString.java
new file mode 100644
index 0000000..9751a698
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/DontChainStringMethodsOnString.java
@@ -0,0 +1,9 @@
+class Foo {
+
+   String afoo();
+
+    {
+        String cl = af<caret>
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/DontIgnoreToStringInStringBuilders.java b/java/java-tests/testData/codeInsight/completion/smartType/second/DontIgnoreToStringInStringBuilders.java
new file mode 100644
index 0000000..ced29ef
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/DontIgnoreToStringInStringBuilders.java
@@ -0,0 +1,8 @@
+class Foo {
+
+    public String foo() {
+        AbstractStringBuilder bar;
+        String f = b<caret>
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/DontIgnoreToStringInsideIt-out.java b/java/java-tests/testData/codeInsight/completion/smartType/second/DontIgnoreToStringInsideIt-out.java
new file mode 100644
index 0000000..17e4e41
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/DontIgnoreToStringInsideIt-out.java
@@ -0,0 +1,8 @@
+class Foo {
+
+    public String toString() {
+        Foo bar;
+        String f = bar.toString();<caret>
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/DontIgnoreToStringInsideIt.java b/java/java-tests/testData/codeInsight/completion/smartType/second/DontIgnoreToStringInsideIt.java
new file mode 100644
index 0000000..fce4760
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/DontIgnoreToStringInsideIt.java
@@ -0,0 +1,8 @@
+class Foo {
+
+    public String toString() {
+        Foo bar;
+        String f = b<caret>
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/DontSuggestTooGenericMethods.java b/java/java-tests/testData/codeInsight/completion/smartType/second/DontSuggestTooGenericMethods.java
new file mode 100644
index 0000000..99617ee
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/DontSuggestTooGenericMethods.java
@@ -0,0 +1,19 @@
+interface Zip extends Bar{}
+
+interface Bar {}
+
+interface Foo {
+    <T> T any();
+    <T extends Goo> T gooAny();
+    <T extends Zip> T zipAny();
+    <T extends Bar> T barAny();
+
+}
+
+class Goo {
+    {
+        Foo f;
+        Bar a = f<caret>
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/EmptyListInMethodCall-out.java b/java/java-tests/testData/codeInsight/completion/smartType/second/EmptyListInMethodCall-out.java
new file mode 100644
index 0000000..b431250
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/EmptyListInMethodCall-out.java
@@ -0,0 +1,13 @@
+import java.util.Collections;
+import java.util.List;
+
+public class SomeClass {
+    void foo(List<String> l) {
+
+    }
+
+    {
+        foo(Collections.<String>emptyList());<caret>
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/EmptyListInMethodCall.java b/java/java-tests/testData/codeInsight/completion/smartType/second/EmptyListInMethodCall.java
new file mode 100644
index 0000000..f50a1de
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/EmptyListInMethodCall.java
@@ -0,0 +1,12 @@
+import java.util.List;
+
+public class SomeClass {
+    void foo(List<String> l) {
+
+    }
+
+    {
+        foo(em<caret>)
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/EmptyMapPresentation.java b/java/java-tests/testData/codeInsight/completion/smartType/second/EmptyMapPresentation.java
new file mode 100644
index 0000000..11184f4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/EmptyMapPresentation.java
@@ -0,0 +1,12 @@
+import java.util.Map;
+
+public class Foo {
+
+  void foo(Map<String, String> map) {
+    
+  }
+
+  void bar() {
+    foo(em<caret>)
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/EmptyMapPresentation2.java b/java/java-tests/testData/codeInsight/completion/smartType/second/EmptyMapPresentation2.java
new file mode 100644
index 0000000..49017ac
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/EmptyMapPresentation2.java
@@ -0,0 +1,8 @@
+import java.util.Map;
+
+public class Foo {
+
+  Set<String> bar() {
+    Map<String, String> s = em<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/FieldAsQualifier-out.java b/java/java-tests/testData/codeInsight/completion/smartType/second/FieldAsQualifier-out.java
new file mode 100644
index 0000000..ec34944
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/FieldAsQualifier-out.java
@@ -0,0 +1,13 @@
+class Bar {
+  Goo goo;
+}
+class Goo {}
+
+class Foo {
+  Bar b;
+
+
+  {
+    Goo g = b.goo;<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/FieldAsQualifier.java b/java/java-tests/testData/codeInsight/completion/smartType/second/FieldAsQualifier.java
new file mode 100644
index 0000000..873c5ea
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/FieldAsQualifier.java
@@ -0,0 +1,13 @@
+class Bar {
+  Goo goo;
+}
+class Goo {}
+
+class Foo {
+  Bar b;
+
+
+  {
+    Goo g = <caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/Generics-out.java b/java/java-tests/testData/codeInsight/completion/smartType/second/Generics-out.java
new file mode 100644
index 0000000..d5269cc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/Generics-out.java
@@ -0,0 +1,13 @@
+class Bar<T> {
+  T getGoo(int a);
+}
+class Goo {}
+
+class Foo {
+  Bar<Goo> bgetBar() {}
+
+
+  {
+    Goo g = bgetBar().getGoo(<caret>);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/Generics.java b/java/java-tests/testData/codeInsight/completion/smartType/second/Generics.java
new file mode 100644
index 0000000..0d40889
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/Generics.java
@@ -0,0 +1,13 @@
+class Bar<T> {
+  T getGoo(int a);
+}
+class Goo {}
+
+class Foo {
+  Bar<Goo> bgetBar() {}
+
+
+  {
+    Goo g = b<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/GetClassLoader-out.java b/java/java-tests/testData/codeInsight/completion/smartType/second/GetClassLoader-out.java
new file mode 100644
index 0000000..3bea6cd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/GetClassLoader-out.java
@@ -0,0 +1,7 @@
+class Foo {
+
+    {
+        ClassLoader cl = getClass().getClassLoader();<caret>
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/GetClassLoader.java b/java/java-tests/testData/codeInsight/completion/smartType/second/GetClassLoader.java
new file mode 100644
index 0000000..d0760dc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/GetClassLoader.java
@@ -0,0 +1,7 @@
+class Foo {
+
+    {
+        ClassLoader cl = getCl<caret>
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/GlobalFactoryMethods.java b/java/java-tests/testData/codeInsight/completion/smartType/second/GlobalFactoryMethods.java
new file mode 100644
index 0000000..a0d383a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/GlobalFactoryMethods.java
@@ -0,0 +1,29 @@
+class Super<T> {
+}
+
+class SubString extends Super<String> {
+  public static SubString createSubString() {}
+}
+class SubInt extends Super<Integer> { }
+class SubGeneric<T> extends Super<T> { }
+class SubRaw extends Super { }
+
+interface Constants {
+  SubString SUBSTRING = null
+}
+
+class Factory {
+  public static Object createObject() {}
+  public static <T> Super<T> createExpected() {}
+  public static Super<Integer> createSuperInt() {}
+  public static SubInt createSubInt() {}
+  public static <T> SubGeneric<T> createSubGeneric() {}
+  public static SubRaw createSubRaw() {}
+}
+
+class Intermediate {
+
+    Super<String> s = <caret>
+}
+
+
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/IgnoreToString-out.java b/java/java-tests/testData/codeInsight/completion/smartType/second/IgnoreToString-out.java
new file mode 100644
index 0000000..5ce8170
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/IgnoreToString-out.java
@@ -0,0 +1,10 @@
+class Foo {
+
+    String foo();
+
+    {
+        Foo bar;
+        String f = bar.foo();<caret>
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/IgnoreToString.java b/java/java-tests/testData/codeInsight/completion/smartType/second/IgnoreToString.java
new file mode 100644
index 0000000..40a9a7f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/IgnoreToString.java
@@ -0,0 +1,10 @@
+class Foo {
+
+    String foo();
+
+    {
+        Foo bar;
+        String f = b<caret>
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/InheritorEnumMembers-out.java b/java/java-tests/testData/codeInsight/completion/smartType/second/InheritorEnumMembers-out.java
new file mode 100644
index 0000000..5cd194c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/InheritorEnumMembers-out.java
@@ -0,0 +1,17 @@
+interface Foo {
+}
+
+enum FooEnum implements Foo {
+    ONE, TWO;
+}
+
+class Doo {
+    void doSomething(Foo f) {
+    }
+
+    void doSomethingElse() {
+        doSomething(FooEnum.ONE);<caret>
+    }
+
+}
+
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/InheritorEnumMembers.java b/java/java-tests/testData/codeInsight/completion/smartType/second/InheritorEnumMembers.java
new file mode 100644
index 0000000..ca1662c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/InheritorEnumMembers.java
@@ -0,0 +1,17 @@
+interface Foo {
+}
+
+enum FooEnum implements Foo {
+    ONE, TWO;
+}
+
+class Doo {
+    void doSomething(Foo f) {
+    }
+
+    void doSomethingElse() {
+        doSomething(O<caret>);
+    }
+
+}
+
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/InheritorMembers-out.java b/java/java-tests/testData/codeInsight/completion/smartType/second/InheritorMembers-out.java
new file mode 100644
index 0000000..e0cc9f8a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/InheritorMembers-out.java
@@ -0,0 +1,13 @@
+class Super {
+}
+
+class Sub extends Super {
+  public static final Super FOO = null;
+}
+
+class Intermediate {
+
+    Super s = Sub.FOO;<caret>
+}
+
+
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/InheritorMembers.java b/java/java-tests/testData/codeInsight/completion/smartType/second/InheritorMembers.java
new file mode 100644
index 0000000..eeff14f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/InheritorMembers.java
@@ -0,0 +1,13 @@
+class Super {
+}
+
+class Sub extends Super {
+  public static final Super FOO = null;
+}
+
+class Intermediate {
+
+    Super s = F<caret>
+}
+
+
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/MergeMethods-out.java b/java/java-tests/testData/codeInsight/completion/smartType/second/MergeMethods-out.java
new file mode 100644
index 0000000..215284f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/MergeMethods-out.java
@@ -0,0 +1,14 @@
+class Bar {
+  Goo getGoo(int a);
+  Goo getGoo();
+}
+class Goo {}
+
+class Foo {
+  Bar getBar() {}
+
+
+  {
+    Goo g = getBar().getGoo(<caret>);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/MergeMethods.java b/java/java-tests/testData/codeInsight/completion/smartType/second/MergeMethods.java
new file mode 100644
index 0000000..8bb6b1f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/MergeMethods.java
@@ -0,0 +1,14 @@
+class Bar {
+  Goo getGoo(int a);
+  Goo getGoo();
+}
+class Goo {}
+
+class Foo {
+  Bar getBar() {}
+
+
+  {
+    Goo g = <caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/MethodAsQualifier-out.java b/java/java-tests/testData/codeInsight/completion/smartType/second/MethodAsQualifier-out.java
new file mode 100644
index 0000000..759ebf0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/MethodAsQualifier-out.java
@@ -0,0 +1,13 @@
+class Bar {
+  Goo getGoo();
+}
+class Goo {}
+
+class Foo {
+  Bar getBar() {}
+
+
+  {
+    Goo g = getBar().getGoo();<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/MethodAsQualifier.java b/java/java-tests/testData/codeInsight/completion/smartType/second/MethodAsQualifier.java
new file mode 100644
index 0000000..a32ba81
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/MethodAsQualifier.java
@@ -0,0 +1,13 @@
+class Bar {
+  Goo getGoo();
+}
+class Goo {}
+
+class Foo {
+  Bar getBar() {}
+
+
+  {
+    Goo g = <caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/MethodDelegation-out.java b/java/java-tests/testData/codeInsight/completion/smartType/second/MethodDelegation-out.java
new file mode 100644
index 0000000..f018d39
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/MethodDelegation-out.java
@@ -0,0 +1,9 @@
+class Bar {}
+
+class Foo {
+  Foo myFoo;
+
+  Bar getBar() {
+    return myFoo.getBar();<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/MethodDelegation.java b/java/java-tests/testData/codeInsight/completion/smartType/second/MethodDelegation.java
new file mode 100644
index 0000000..f2ae6a4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/MethodDelegation.java
@@ -0,0 +1,9 @@
+class Bar {}
+
+class Foo {
+  Foo myFoo;
+
+  Bar getBar() {
+    return m<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/MethodWithParams-out.java b/java/java-tests/testData/codeInsight/completion/smartType/second/MethodWithParams-out.java
new file mode 100644
index 0000000..9a4e17c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/MethodWithParams-out.java
@@ -0,0 +1,13 @@
+class Bar {
+  Goo getGoo(int a);
+}
+class Goo {}
+
+class Foo {
+  Bar getBar() {}
+
+
+  {
+    Goo g = getBar().getGoo(<caret>);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/MethodWithParams.java b/java/java-tests/testData/codeInsight/completion/smartType/second/MethodWithParams.java
new file mode 100644
index 0000000..4ae7e08
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/MethodWithParams.java
@@ -0,0 +1,13 @@
+class Bar {
+  Goo getGoo(int a);
+}
+class Goo {}
+
+class Foo {
+  Bar getBar() {}
+
+
+  {
+    Goo g = <caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/NewStaticProblem-out.java b/java/java-tests/testData/codeInsight/completion/smartType/second/NewStaticProblem-out.java
new file mode 100644
index 0000000..93b6835
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/NewStaticProblem-out.java
@@ -0,0 +1,13 @@
+public class Test{
+    
+    public class F {}
+    
+    public int x(F f) {
+        return 1;
+    }
+
+    public static void main(String[] args) {
+        Test test = new Test();
+        test.x(new F())<caret>;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/NewStaticProblem.java b/java/java-tests/testData/codeInsight/completion/smartType/second/NewStaticProblem.java
new file mode 100644
index 0000000..c49fee0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/NewStaticProblem.java
@@ -0,0 +1,13 @@
+public class Test{
+    
+    public class F {}
+    
+    public int x(F f) {
+        return 1;
+    }
+
+    public static void main(String[] args) {
+        Test test = new Test();
+        test.x(new <caret>);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/NoArraysAsListCommonPrefix-out.java b/java/java-tests/testData/codeInsight/completion/smartType/second/NoArraysAsListCommonPrefix-out.java
new file mode 100644
index 0000000..117c28d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/NoArraysAsListCommonPrefix-out.java
@@ -0,0 +1,12 @@
+import java.util.*;
+
+class Foo {
+
+    String[] foo();
+    String[] bar();
+
+    static {
+        Foo f;
+        List<String> g = Arrays.asList(f.foo());<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/NoArraysAsListCommonPrefix.java b/java/java-tests/testData/codeInsight/completion/smartType/second/NoArraysAsListCommonPrefix.java
new file mode 100644
index 0000000..27be5d1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/NoArraysAsListCommonPrefix.java
@@ -0,0 +1,12 @@
+import java.util.*;
+
+class Foo {
+
+    String[] foo();
+    String[] bar();
+
+    static {
+        Foo f;
+        List<String> g = f.<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/NoLeftRecursion.java b/java/java-tests/testData/codeInsight/completion/smartType/second/NoLeftRecursion.java
new file mode 100644
index 0000000..c227539
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/NoLeftRecursion.java
@@ -0,0 +1,15 @@
+public class Test {
+
+  static MyEnum getAvailabilityStatusCode() {
+
+    return getAS<caret>
+  }
+
+
+  public static enum MyEnum {
+
+    VALUE_1,
+    VALUE_2
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/NoObjectMethodsAsFirstPart-out.java b/java/java-tests/testData/codeInsight/completion/smartType/second/NoObjectMethodsAsFirstPart-out.java
new file mode 100644
index 0000000..45dcd4e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/NoObjectMethodsAsFirstPart-out.java
@@ -0,0 +1,12 @@
+class Foo {
+
+   boolean is();
+
+    public String toString() {
+        boolean foo;
+        boolean bar;
+        Foo to;
+        boolean f = to.is();<caret>
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/NoObjectMethodsAsFirstPart.java b/java/java-tests/testData/codeInsight/completion/smartType/second/NoObjectMethodsAsFirstPart.java
new file mode 100644
index 0000000..084ad18
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/NoObjectMethodsAsFirstPart.java
@@ -0,0 +1,12 @@
+class Foo {
+
+   boolean is();
+
+    public String toString() {
+        boolean foo;
+        boolean bar;
+        Foo to;
+        boolean f = to<caret>
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/NoRedundantCasts.java b/java/java-tests/testData/codeInsight/completion/smartType/second/NoRedundantCasts.java
new file mode 100644
index 0000000..091e671e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/NoRedundantCasts.java
@@ -0,0 +1,17 @@
+public abstract class Zzz {
+
+    boolean gggg() {}
+
+    static {
+        Zzz o;
+        if (o instanceof Yyy && <caret>) {
+
+        }
+    }
+
+
+}
+
+class Yyy extends Zzz {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/NoUnqualifiedCastsInQualifiedContext.java b/java/java-tests/testData/codeInsight/completion/smartType/second/NoUnqualifiedCastsInQualifiedContext.java
new file mode 100644
index 0000000..0528557
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/NoUnqualifiedCastsInQualifiedContext.java
@@ -0,0 +1,12 @@
+class C{
+    {
+        Object o;
+        if (o instanceof Foo) {
+            new Object().dofo<caret>
+        }
+    }
+}
+
+class Foo {
+    void dofoo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/NonInitializedField-out.java b/java/java-tests/testData/codeInsight/completion/smartType/second/NonInitializedField-out.java
new file mode 100644
index 0000000..b74ac99
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/NonInitializedField-out.java
@@ -0,0 +1,7 @@
+class Foo {
+  int aaa;
+  int bbb;
+  Foo() {
+    aaa = bbb;<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/NonInitializedField.java b/java/java-tests/testData/codeInsight/completion/smartType/second/NonInitializedField.java
new file mode 100644
index 0000000..e8eee5d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/NonInitializedField.java
@@ -0,0 +1,7 @@
+class Foo {
+  int aaa;
+  int bbb;
+  Foo() {
+    aaa = b<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/PreferFieldAndGetterQualifiers.java b/java/java-tests/testData/codeInsight/completion/smartType/second/PreferFieldAndGetterQualifiers.java
new file mode 100644
index 0000000..4076cff
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/PreferFieldAndGetterQualifiers.java
@@ -0,0 +1,20 @@
+class Foo {
+
+}
+
+class Bar {
+  Foo getFoo() {}
+}
+
+class Main {
+  {
+    Bar localBar = bar;
+    Foo f = <caret>
+  }
+
+  Bar bar;
+  Bar getBar() { return bar; }
+  Bar findBar() { return getBar(); }
+
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/QualifiedArrayMemberAccess-out.java b/java/java-tests/testData/codeInsight/completion/smartType/second/QualifiedArrayMemberAccess-out.java
new file mode 100644
index 0000000..a2f5c8e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/QualifiedArrayMemberAccess-out.java
@@ -0,0 +1,8 @@
+class Goo {
+    boolean[] array();
+
+    {
+
+        boolean a = this.array()[<caret>];
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/QualifiedArrayMemberAccess.java b/java/java-tests/testData/codeInsight/completion/smartType/second/QualifiedArrayMemberAccess.java
new file mode 100644
index 0000000..a1400e1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/QualifiedArrayMemberAccess.java
@@ -0,0 +1,8 @@
+class Goo {
+    boolean[] array();
+
+    {
+
+        boolean a = this.ar<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/QualifierMatters-out.java b/java/java-tests/testData/codeInsight/completion/smartType/second/QualifierMatters-out.java
new file mode 100644
index 0000000..6a0c801
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/QualifierMatters-out.java
@@ -0,0 +1,19 @@
+class Goo {}
+class Foo {
+    public static final Bar<Goo> BAR;
+
+
+}
+
+class Bar<T> {
+    T getGoo();
+
+}
+
+class Main {
+    {
+
+        Goo g = Foo.BAR.getGoo();<caret>
+
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/QualifierMatters.java b/java/java-tests/testData/codeInsight/completion/smartType/second/QualifierMatters.java
new file mode 100644
index 0000000..bac22ea
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/QualifierMatters.java
@@ -0,0 +1,19 @@
+class Goo {}
+class Foo {
+    public static final Bar<Goo> BAR;
+
+
+}
+
+class Bar<T> {
+    T getGoo();
+
+}
+
+class Main {
+    {
+
+        Goo g = Foo.<caret>
+
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/RestoreInitialPrefix.java b/java/java-tests/testData/codeInsight/completion/smartType/second/RestoreInitialPrefix.java
new file mode 100644
index 0000000..5351720
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/RestoreInitialPrefix.java
@@ -0,0 +1,18 @@
+class MyEnum {
+    public static final MyEnum Foo;
+    public static final MyEnum Bar;
+}
+
+class Bar {
+  MyEnum getEnum();
+}
+
+class Foo {
+
+   Bar my;
+
+    {
+        MyEnum cl = <caret>
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/SingletonMap-out.java b/java/java-tests/testData/codeInsight/completion/smartType/second/SingletonMap-out.java
new file mode 100644
index 0000000..3a0adaf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/SingletonMap-out.java
@@ -0,0 +1,13 @@
+import java.util.Collections;
+import java.util.Map;
+
+public class SomeClass {
+    void foo(Map<String, String> l) {
+
+    }
+
+    {
+        foo(Collections.singletonMap(<caret>));
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/SingletonMap.java b/java/java-tests/testData/codeInsight/completion/smartType/second/SingletonMap.java
new file mode 100644
index 0000000..cd4de1b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/SingletonMap.java
@@ -0,0 +1,12 @@
+import java.util.Map;
+
+public class SomeClass {
+    void foo(Map<String, String> l) {
+
+    }
+
+    {
+        foo(sing<caret>)
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/StringMethodsWhenNothingFound-out.java b/java/java-tests/testData/codeInsight/completion/smartType/second/StringMethodsWhenNothingFound-out.java
new file mode 100644
index 0000000..2091f66
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/StringMethodsWhenNothingFound-out.java
@@ -0,0 +1,8 @@
+class Foo {
+
+    {
+      String message = "";
+      if (message.startsWith(<caret>))
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/StringMethodsWhenNothingFound.java b/java/java-tests/testData/codeInsight/completion/smartType/second/StringMethodsWhenNothingFound.java
new file mode 100644
index 0000000..c2bf5cc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/StringMethodsWhenNothingFound.java
@@ -0,0 +1,8 @@
+class Foo {
+
+    {
+      String message = "";
+      if (staWi<caret>)
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/SuggestArraysAsList-out.java b/java/java-tests/testData/codeInsight/completion/smartType/second/SuggestArraysAsList-out.java
new file mode 100644
index 0000000..739f216
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/SuggestArraysAsList-out.java
@@ -0,0 +1,11 @@
+import java.util.Arrays;
+import java.util.Collection;
+
+class Foo {
+
+  {
+    Foo[] foos;
+    Collection<Foo> c = Arrays.asList(foos);<caret>
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/SuggestArraysAsList.java b/java/java-tests/testData/codeInsight/completion/smartType/second/SuggestArraysAsList.java
new file mode 100644
index 0000000..6e3a2eb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/SuggestArraysAsList.java
@@ -0,0 +1,10 @@
+import java.util.Collection;
+
+class Foo {
+
+  {
+    Foo[] foos;
+    Collection<Foo> c = foo<caret>
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/SuggestArraysAsListWildcard-out.java b/java/java-tests/testData/codeInsight/completion/smartType/second/SuggestArraysAsListWildcard-out.java
new file mode 100644
index 0000000..84530c7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/SuggestArraysAsListWildcard-out.java
@@ -0,0 +1,13 @@
+import java.util.Arrays;
+import java.util.Collection;
+
+interface Bar {}
+
+class Foo implements Bar {
+
+  {
+    Foo[] foos;
+    Collection<? extends Bar> c = Arrays.asList(foos);<caret>
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/SuggestArraysAsListWildcard.java b/java/java-tests/testData/codeInsight/completion/smartType/second/SuggestArraysAsListWildcard.java
new file mode 100644
index 0000000..15b6228
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/SuggestArraysAsListWildcard.java
@@ -0,0 +1,12 @@
+import java.util.Collection;
+
+interface Bar {}
+
+class Foo implements Bar {
+
+  {
+    Foo[] foos;
+    Collection<? extends Bar> c = foo<caret>
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/SuggestToArrayWithExistingEmptyArray-out.java b/java/java-tests/testData/codeInsight/completion/smartType/second/SuggestToArrayWithExistingEmptyArray-out.java
new file mode 100644
index 0000000..2197774
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/SuggestToArrayWithExistingEmptyArray-out.java
@@ -0,0 +1,14 @@
+import java.util.Collection;
+
+class Foo {
+  public static final Foo[] EMPTY_ARRAY = new Foo[0];
+  public static final Foo[] EMPTY_ARRAY2 = new Foo[]{};
+  public static final Foo[] NON_EMPTY_ARRAY = new Foo[1];
+
+  Collection<Foo> foos() {}
+
+  {
+    Foo[] f = foos().toArray(EMPTY_ARRAY);<caret>
+  }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/SuggestToArrayWithExistingEmptyArray.java b/java/java-tests/testData/codeInsight/completion/smartType/second/SuggestToArrayWithExistingEmptyArray.java
new file mode 100644
index 0000000..68c037a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/SuggestToArrayWithExistingEmptyArray.java
@@ -0,0 +1,14 @@
+import java.util.Collection;
+
+class Foo {
+  public static final Foo[] EMPTY_ARRAY = new Foo[0];
+  public static final Foo[] EMPTY_ARRAY2 = new Foo[]{};
+  public static final Foo[] NON_EMPTY_ARRAY = new Foo[1];
+
+  Collection<Foo> foos() {}
+
+  {
+    Foo[] f = f<caret>
+  }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/SuggestToArrayWithExistingEmptyArrayFromAnotherClass-out.java b/java/java-tests/testData/codeInsight/completion/smartType/second/SuggestToArrayWithExistingEmptyArrayFromAnotherClass-out.java
new file mode 100644
index 0000000..e77ad33
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/SuggestToArrayWithExistingEmptyArrayFromAnotherClass-out.java
@@ -0,0 +1,16 @@
+import java.util.Collection;
+
+class Bar {
+  public static final Bar[] EMPTY_ARRAY = new Bar[0];
+  public static final Bar[] EMPTY_ARRAY2 = new Bar[]{};
+  public static final Bar[] NON_EMPTY_ARRAY = new Bar[1];
+
+}
+
+class Foo {
+  Collection<Bar> foos() {}
+
+  {
+    Bar[] f = foos().toArray(Bar.EMPTY_ARRAY);
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/SuggestToArrayWithExistingEmptyArrayFromAnotherClass.java b/java/java-tests/testData/codeInsight/completion/smartType/second/SuggestToArrayWithExistingEmptyArrayFromAnotherClass.java
new file mode 100644
index 0000000..b3c29ea
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/SuggestToArrayWithExistingEmptyArrayFromAnotherClass.java
@@ -0,0 +1,16 @@
+import java.util.Collection;
+
+class Bar {
+  public static final Bar[] EMPTY_ARRAY = new Bar[0];
+  public static final Bar[] EMPTY_ARRAY2 = new Bar[]{};
+  public static final Bar[] NON_EMPTY_ARRAY = new Bar[1];
+
+}
+
+class Foo {
+  Collection<Bar> foos() {}
+
+  {
+    Bar[] f = f<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/SuggestToArrayWithNewEmptyArray-out.java b/java/java-tests/testData/codeInsight/completion/smartType/second/SuggestToArrayWithNewEmptyArray-out.java
new file mode 100644
index 0000000..c577f09
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/SuggestToArrayWithNewEmptyArray-out.java
@@ -0,0 +1,11 @@
+import java.util.Collection;
+
+class Foo {
+
+  Collection<Foo> foos() {}
+
+  {
+    Foo[] f = foos().toArray(new Foo[0]);<caret>
+  }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/SuggestToArrayWithNewEmptyArray.java b/java/java-tests/testData/codeInsight/completion/smartType/second/SuggestToArrayWithNewEmptyArray.java
new file mode 100644
index 0000000..df8b912
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/SuggestToArrayWithNewEmptyArray.java
@@ -0,0 +1,11 @@
+import java.util.Collection;
+
+class Foo {
+
+  Collection<Foo> foos() {}
+
+  {
+    Foo[] f = <caret>
+  }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/SuggestToArrayWithNewNonEmptyArray-out.java b/java/java-tests/testData/codeInsight/completion/smartType/second/SuggestToArrayWithNewNonEmptyArray-out.java
new file mode 100644
index 0000000..b509730
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/SuggestToArrayWithNewNonEmptyArray-out.java
@@ -0,0 +1,10 @@
+import java.util.Collection;
+
+class Foo {
+
+  {
+    Collection<Foo> foos;
+    Foo[] f = foos.toArray(new Foo[foos.size()]);<caret>
+  }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/SuggestToArrayWithNewNonEmptyArray.java b/java/java-tests/testData/codeInsight/completion/smartType/second/SuggestToArrayWithNewNonEmptyArray.java
new file mode 100644
index 0000000..9ca7a67
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/SuggestToArrayWithNewNonEmptyArray.java
@@ -0,0 +1,10 @@
+import java.util.Collection;
+
+class Foo {
+
+  {
+    Collection<Foo> foos;
+    Foo[] f = <caret>
+  }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/ToArrayFieldsQualifier-out.java b/java/java-tests/testData/codeInsight/completion/smartType/second/ToArrayFieldsQualifier-out.java
new file mode 100644
index 0000000..2c4d836
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/ToArrayFieldsQualifier-out.java
@@ -0,0 +1,13 @@
+import java.util.Collection;
+
+class Bar {
+    public static final Collection<Foo> foos;
+}
+
+class Foo {
+
+    {
+        Foo[] f = Bar.foos.toArray(new Foo[Bar.foos.size()]);<caret>
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/ToArrayFieldsQualifier.java b/java/java-tests/testData/codeInsight/completion/smartType/second/ToArrayFieldsQualifier.java
new file mode 100644
index 0000000..a291388
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/ToArrayFieldsQualifier.java
@@ -0,0 +1,13 @@
+import java.util.Collection;
+
+class Bar {
+    public static final Collection<Foo> foos;
+}
+
+class Foo {
+
+    {
+        Foo[] f = Bar.<caret>
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/ToArrayGenericArrayCreation-out.java b/java/java-tests/testData/codeInsight/completion/smartType/second/ToArrayGenericArrayCreation-out.java
new file mode 100644
index 0000000..00b3b3e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/ToArrayGenericArrayCreation-out.java
@@ -0,0 +1,11 @@
+import java.util.Collection;
+
+class Foo<T> {
+
+  Collection<Foo<T>> foos() {}
+
+  {
+    Foo<T>[] f = <caret>
+  }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/ToArrayGenericArrayCreation.java b/java/java-tests/testData/codeInsight/completion/smartType/second/ToArrayGenericArrayCreation.java
new file mode 100644
index 0000000..00b3b3e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/ToArrayGenericArrayCreation.java
@@ -0,0 +1,11 @@
+import java.util.Collection;
+
+class Foo<T> {
+
+  Collection<Foo<T>> foos() {}
+
+  {
+    Foo<T>[] f = <caret>
+  }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/ToArrayMethodQualifier-out.java b/java/java-tests/testData/codeInsight/completion/smartType/second/ToArrayMethodQualifier-out.java
new file mode 100644
index 0000000..3a4d8ef
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/ToArrayMethodQualifier-out.java
@@ -0,0 +1,13 @@
+import java.util.Collection;
+
+class Bar {
+    public static final Collection<Foo> foos();
+}
+
+class Foo {
+
+    {
+        Foo[] f = Bar.foos().toArray(new Foo[0]);<caret>
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/ToArrayMethodQualifier.java b/java/java-tests/testData/codeInsight/completion/smartType/second/ToArrayMethodQualifier.java
new file mode 100644
index 0000000..afbedf1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/ToArrayMethodQualifier.java
@@ -0,0 +1,13 @@
+import java.util.Collection;
+
+class Bar {
+    public static final Collection<Foo> foos();
+}
+
+class Foo {
+
+    {
+        Foo[] f = Bar.<caret>
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/ToListWithQualifier-out.java b/java/java-tests/testData/codeInsight/completion/smartType/second/ToListWithQualifier-out.java
new file mode 100644
index 0000000..8bdb21b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/ToListWithQualifier-out.java
@@ -0,0 +1,14 @@
+import java.util.Arrays;
+import java.util.Collection;
+
+class Bar {
+    public static final Foo[] foos();
+}
+
+class Foo {
+
+    {
+        Collection<Foo> f = Arrays.asList(Bar.foos());<caret>
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/ToListWithQualifier.java b/java/java-tests/testData/codeInsight/completion/smartType/second/ToListWithQualifier.java
new file mode 100644
index 0000000..1e143c2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/ToListWithQualifier.java
@@ -0,0 +1,13 @@
+import java.util.Collection;
+
+class Bar {
+    public static final Foo[] foos();
+}
+
+class Foo {
+
+    {
+        Collection<Foo> f = Bar.<caret>
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/VarargMemberAccess-out.java b/java/java-tests/testData/codeInsight/completion/smartType/second/VarargMemberAccess-out.java
new file mode 100644
index 0000000..d1c00ff
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/VarargMemberAccess-out.java
@@ -0,0 +1,5 @@
+class Goo {
+    void foo(boolean... los) {
+        boolean a = los[<caret>];
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/second/VarargMemberAccess.java b/java/java-tests/testData/codeInsight/completion/smartType/second/VarargMemberAccess.java
new file mode 100644
index 0000000..0bc82bf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartType/second/VarargMemberAccess.java
@@ -0,0 +1,5 @@
+class Goo {
+    void foo(boolean... los) {
+        boolean a = los<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/AssertEquals.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/AssertEquals.java
new file mode 100644
index 0000000..2922426
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/AssertEquals.java
@@ -0,0 +1,12 @@
+import junit.framework.Assert;
+import java.io.File;
+
+public class Aaaaaaa extends Assert {
+
+    {
+        File boo;
+        int bar;
+        assertEquals(new File("x"), b<caret>);
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/BooleanValueOf.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/BooleanValueOf.java
new file mode 100644
index 0000000..e17446f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/BooleanValueOf.java
@@ -0,0 +1,10 @@
+public abstract class Foo {
+
+    void foo(Boolean value);
+
+    {                                                                                            
+        boolean b;
+        foo(<caret>)
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/ClassLiteral.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/ClassLiteral.java
new file mode 100644
index 0000000..1f43c8a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/ClassLiteral.java
@@ -0,0 +1,6 @@
+public class Foo  {
+
+    public Class<? extends String> foo() {
+        return <caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/DispreferGetterInSetterCall.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/DispreferGetterInSetterCall.java
new file mode 100644
index 0000000..80abddf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/DispreferGetterInSetterCall.java
@@ -0,0 +1,13 @@
+public class Aaaaaaa {
+  int color;
+
+  void setColor(int color) {}
+  int getColor() {}
+  int getZooColor() {}
+
+  {
+    setColor(<caret>);
+  }
+
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/DontPreferCasted.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/DontPreferCasted.java
new file mode 100644
index 0000000..9b690f7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/DontPreferCasted.java
@@ -0,0 +1,17 @@
+class Foo {
+    {
+        Object _o;
+        Bar b;
+        if (_o instanceof Goo) {
+            Goo g = <caret>
+        }
+    }
+}
+
+class Goo {
+
+}
+
+class Bar extends Goo {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/DontPreferKeywords.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/DontPreferKeywords.java
new file mode 100644
index 0000000..88d26d4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/DontPreferKeywords.java
@@ -0,0 +1,10 @@
+public class Foo {
+
+   {
+        String name;
+        Object o1;
+        Foo foo;
+
+        Object o = <caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/EnumValueOf.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/EnumValueOf.java
new file mode 100644
index 0000000..382bb15
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/EnumValueOf.java
@@ -0,0 +1,11 @@
+enum MyEnum {
+  FOO, BAR;
+}
+
+public class Foo {
+
+   {
+        MyEnum e;
+        MyEnum e1 = <caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/EnumValueOf2.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/EnumValueOf2.java
new file mode 100644
index 0000000..2bec7eb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/EnumValueOf2.java
@@ -0,0 +1,13 @@
+enum MyEnum {
+  FOO, BAR;
+}
+
+public class Foo {
+
+   MyEnum bar() {}
+
+   MyEnum foo() {
+        MyEnum e;
+        return <caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/ErasureNotAffectingProximity.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/ErasureNotAffectingProximity.java
new file mode 100644
index 0000000..e0e6557
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/ErasureNotAffectingProximity.java
@@ -0,0 +1,3 @@
+class A {{
+    foo.Foo<String> f = new B<caret>
+}}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/ExpectedInterfaceShouldGoFirst.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/ExpectedInterfaceShouldGoFirst.java
new file mode 100644
index 0000000..14558df
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/ExpectedInterfaceShouldGoFirst.java
@@ -0,0 +1,9 @@
+interface MyProcessor<T> {
+  void execute(T t);
+}
+
+class Proc1<T> implements MyProcessor<T> { public void execute(T t) {}}
+
+class Foo {
+  MyProcessor<Foo> p = new <caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/FactoryMethodForDefaultType.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/FactoryMethodForDefaultType.java
new file mode 100644
index 0000000..a306630
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/FactoryMethodForDefaultType.java
@@ -0,0 +1,16 @@
+import java.util.*;
+
+public class Foo {
+
+    {
+        Map<Pair<Object, Object>, Object> map;
+        map.get(<caret>)
+    }
+
+}
+
+class Pair<A, B> {
+    Pair(A a, B b) {}
+
+    static <A,B> Pair<A,B> create(A a, B b) {}
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/FieldNameOutweighsStats.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/FieldNameOutweighsStats.java
new file mode 100644
index 0000000..0247002
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/FieldNameOutweighsStats.java
@@ -0,0 +1,9 @@
+class Foo {
+  String myFoo;
+  String myBar;
+
+  String getFoo() {
+    return my<caret>
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/GwtButtons.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/GwtButtons.java
new file mode 100644
index 0000000..ca0d5ffe
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/GwtButtons.java
@@ -0,0 +1,9 @@
+class Smth {}
+class Button extends Smth {}
+class ButtonBase extends Button {}
+
+class Foo {
+  Foo foo(String s) {
+    Smth s = new B<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/InnerClassesProximity.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/InnerClassesProximity.java
new file mode 100644
index 0000000..097f7b5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/InnerClassesProximity.java
@@ -0,0 +1,21 @@
+package zzzzz;
+
+public class Foo {
+    {
+        class InnerGoo extends Goo{}
+
+        Goo g = new <caret>
+    }
+
+    class Bar extends Goo {
+
+    }
+
+}
+
+class Goo {
+
+}
+
+class AGoo extends Goo {}
+
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/JComponentAdd.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/JComponentAdd.java
new file mode 100644
index 0000000..962c4c6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/JComponentAdd.java
@@ -0,0 +1,14 @@
+import javax.swing.*;
+import java.awt.*;
+
+public class FooBean3 extends JComponent {
+
+    JComponent foo(int a) {
+    }
+
+    public void setFooBean239(String fooBean239) {
+        String name;
+        PopupMenu b;
+        add(<caret>)
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/JComponentAddNew.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/JComponentAddNew.java
new file mode 100644
index 0000000..7b1fb23
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/JComponentAddNew.java
@@ -0,0 +1,9 @@
+import javax.swing.*;
+import java.awt.*;
+
+public class FooBean3 extends JComponent {
+
+    {
+        add(new <caret>)
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/LiteralInIf.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/LiteralInIf.java
new file mode 100644
index 0000000..cdbe155
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/LiteralInIf.java
@@ -0,0 +1,5 @@
+public class Foo {
+    public void getAbc() {
+        if(<caret>)
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/LiteralInReturn.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/LiteralInReturn.java
new file mode 100644
index 0000000..5fe4da8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/LiteralInReturn.java
@@ -0,0 +1,5 @@
+public class Foo {
+    public boolean getAbc() {
+        return <caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/LocalVariablesOutweighStats.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/LocalVariablesOutweighStats.java
new file mode 100644
index 0000000..9beebba
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/LocalVariablesOutweighStats.java
@@ -0,0 +1,11 @@
+class Foo {
+
+  Foo bar() { }
+  Foo goo() { }
+
+  void foo(Foo param) {
+    Foo foo;
+    Foo zzz = <caret>
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/LocalVarsBeforeClassLiterals.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/LocalVarsBeforeClassLiterals.java
new file mode 100644
index 0000000..7043c8c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/LocalVarsBeforeClassLiterals.java
@@ -0,0 +1,10 @@
+public class Foo {
+
+    {
+        Class<Foo> local;
+        Class<? extends Foo> f = <caret>
+    }
+
+}
+
+class Bar extends Foo {}
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/MethodStats.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/MethodStats.java
new file mode 100644
index 0000000..e2e9c5f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/MethodStats.java
@@ -0,0 +1,16 @@
+public class FooBar {
+
+ class Xxx {}
+
+    Xxx foo() { }
+    Xxx bar() { }
+    Xxx goo() { }
+
+    void aaa(Xxx a) {}
+
+    {
+        new FooBar().aaa( new FooBar().<caret> );
+    }
+
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/MethodsWithSubstitutableReturnType.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/MethodsWithSubstitutableReturnType.java
new file mode 100644
index 0000000..a019a28
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/MethodsWithSubstitutableReturnType.java
@@ -0,0 +1,11 @@
+public class Foo<T> {
+
+   T foo() {}
+
+   <V> V bar() {}
+
+    {
+        Foo<String> o;
+        String a = o.<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/NewArrayList.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/NewArrayList.java
new file mode 100644
index 0000000..cd5ed9e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/NewArrayList.java
@@ -0,0 +1,15 @@
+interface List {
+  void add();
+}
+
+class ArrayList implements List {
+  public void add() {}
+}
+
+class OtherList extends ArrayList {}
+
+class Foo {
+  {
+    ArrayList l = new <caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/NewComponent.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/NewComponent.java
new file mode 100644
index 0000000..011dd738
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/NewComponent.java
@@ -0,0 +1,9 @@
+import javax.swing.*;
+import java.awt.*;
+
+public class Foo extends JComponent {
+
+    public Component foo() {
+        return new <caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/NewListAlwaysFirst.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/NewListAlwaysFirst.java
new file mode 100644
index 0000000..f8a1e67
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/NewListAlwaysFirst.java
@@ -0,0 +1,8 @@
+import java.util.*;
+
+public class FooBean3 extends JComponent {
+
+    {
+      List<String> l = new <caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/NewRunnable.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/NewRunnable.java
new file mode 100644
index 0000000..1fa9358
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/NewRunnable.java
@@ -0,0 +1,8 @@
+public class MyRunnable implements Runnable {
+
+    private class MyAnotherRunnable extends MyRunnable {}
+
+    Runnable foo() {
+        return new <caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/NoSkippingInSmartCast.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/NoSkippingInSmartCast.java
new file mode 100644
index 0000000..c2eb276
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/NoSkippingInSmartCast.java
@@ -0,0 +1,16 @@
+interface Bar {}
+class Goo {}
+
+abstract class Foo {
+    void foo(Bar f);
+
+    void foo(Foo f);
+
+    void foo(Goo f);
+
+
+  {
+
+    foo((<caret>))
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/PassingQualifierToMethodCall.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/PassingQualifierToMethodCall.java
new file mode 100644
index 0000000..34d988a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/PassingQualifierToMethodCall.java
@@ -0,0 +1,11 @@
+class Foo {
+
+  void register(Foo param) {
+
+  }
+
+  void foo(Foo param) {
+    param.register(<caret>)
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/PassingThisToUnqualifiedMethodCall.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/PassingThisToUnqualifiedMethodCall.java
new file mode 100644
index 0000000..854c214
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/PassingThisToUnqualifiedMethodCall.java
@@ -0,0 +1,11 @@
+class Foo {
+
+  void register(Foo param) {
+
+  }
+
+  void foo(Foo param) {
+    register(<caret>)
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/PreferAccessibleMembers.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/PreferAccessibleMembers.java
new file mode 100644
index 0000000..776d8c2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/PreferAccessibleMembers.java
@@ -0,0 +1,12 @@
+class Foo {
+  private static final Foo A_PRIVATE;
+  @Deprecated public static final Foo B_DEPRECATED;
+  public static final Foo C_NORMAL;
+
+}
+
+class Bar {
+  {
+    Foo a = <caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/PreferCollectionsEmptyList.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/PreferCollectionsEmptyList.java
new file mode 100644
index 0000000..0b6920c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/PreferCollectionsEmptyList.java
@@ -0,0 +1,12 @@
+import java.util.List;
+
+public class Aaaaaaa {
+
+  List<String> locMethod() {}
+
+    {
+        List<String> local = null;
+        List<String> l = <caret>
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/PreferDelegatingMethodParams.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/PreferDelegatingMethodParams.java
new file mode 100644
index 0000000..6df8a16
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/PreferDelegatingMethodParams.java
@@ -0,0 +1,7 @@
+public class A {
+  private A myDelegate;
+
+  public void method(String abc, String xyz) {
+    myDelegate.method(abc, <caret>);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/PreferFieldsToMethods.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/PreferFieldsToMethods.java
new file mode 100644
index 0000000..dd2ddcf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/PreferFieldsToMethods.java
@@ -0,0 +1,9 @@
+class Foo {
+  String myVersion;
+  String getVersion();
+  String getSelectedVersion();
+  String calculateVersion();
+  {
+    String version = <caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/PreferImportedClasses.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/PreferImportedClasses.java
new file mode 100644
index 0000000..0d73c40
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/PreferImportedClasses.java
@@ -0,0 +1,8 @@
+import javax.swing.JPanel;
+
+public class FooBean3 extends javax.swing.JComponent {
+
+    {
+        add(new <caret>)
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/PreferMatchedWords.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/PreferMatchedWords.java
new file mode 100644
index 0000000..3e40218
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/PreferMatchedWords.java
@@ -0,0 +1,8 @@
+public class ZZZZZZ {
+    public String getTitle() { }
+    private static String getVersionString(int a) {}
+
+    public String getDefaultVersion() {
+        return <caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/PreferNestedClasses.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/PreferNestedClasses.java
new file mode 100644
index 0000000..2df70a2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/PreferNestedClasses.java
@@ -0,0 +1,8 @@
+public class FooBean3 extends javax.swing.JComponent {
+
+    {
+        add(new <caret>)
+    }
+
+    private class NestedClass extends FooBean3 {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/PreferNonRecursiveMethodParams.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/PreferNonRecursiveMethodParams.java
new file mode 100644
index 0000000..3b15ad7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/PreferNonRecursiveMethodParams.java
@@ -0,0 +1,11 @@
+class Foo {
+  Foo foo(int i, String s) {
+
+  }
+
+  Foo foo(String s) {
+    String a;
+    int b;
+    return foo(<caret>)
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/PreferOtherGetterInSetterCall.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/PreferOtherGetterInSetterCall.java
new file mode 100644
index 0000000..861cce3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/PreferOtherGetterInSetterCall.java
@@ -0,0 +1,13 @@
+public class Aaaaaaa {
+  int color;
+
+  void setColor(int color) {}
+  int getColor() {}
+  int getZooColor() {}
+
+  void foo(Aaaaaaa a) {
+    setColor(a.<caret>);
+  }
+
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/PreferParametersToGetters.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/PreferParametersToGetters.java
new file mode 100644
index 0000000..fa16535
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/PreferParametersToGetters.java
@@ -0,0 +1,16 @@
+class T {
+    I lastI;
+    I getLastI() { return lastI; }
+
+    void setLastI(I a) {
+        lastI = <caret>
+    }
+}
+
+class I {
+    static final I _1 = new I();
+
+    static I valueOf(String sth) {
+        return null;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/PreferSameNamedMethods.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/PreferSameNamedMethods.java
new file mode 100644
index 0000000..03d1003
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/PreferSameNamedMethods.java
@@ -0,0 +1,15 @@
+class Goo {
+    int boo() {}
+    int doo() {}
+    int foo() {}
+}
+
+class Foooo {
+    Goo g;
+
+    int foo() {
+        return g.<caret>
+    }
+
+}
+
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/PreferredByNameDontChangeStatistics.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/PreferredByNameDontChangeStatistics.java
new file mode 100644
index 0000000..1591bb6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/PreferredByNameDontChangeStatistics.java
@@ -0,0 +1,12 @@
+class Foo {
+  boolean foo;
+  boolean bar;
+
+  {
+    foo(f<caret>)
+  }
+
+  void foo(boolean foo, boolean bar) {
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/SmartCollections.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/SmartCollections.java
new file mode 100644
index 0000000..d1da4a0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/SmartCollections.java
@@ -0,0 +1,10 @@
+public class Foo {
+
+    {
+        String s;
+        Object o;
+        java.util.List<String> list;
+        list.contains(<caret>)
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/SmartCollectionsNew.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/SmartCollectionsNew.java
new file mode 100644
index 0000000..f76f639
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/SmartCollectionsNew.java
@@ -0,0 +1,10 @@
+public abstract class Foo {
+
+   private class Bar extends Foo {}
+
+    {                                                                                            
+        java.util.List<Foo> list;
+        list.contains(new <caret>)
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/SmartEquals.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/SmartEquals.java
new file mode 100644
index 0000000..a12abf1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/SmartEquals.java
@@ -0,0 +1,9 @@
+public class Foo {
+
+    {
+        String s;
+        Object o;
+        new String().equals(<caret>)
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/SmartEquals2.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/SmartEquals2.java
new file mode 100644
index 0000000..81bfd06
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/SmartEquals2.java
@@ -0,0 +1,10 @@
+public class Foo {
+
+    {
+        String s;
+        Foo foo;
+        Object o;
+        new Foo().equals(<caret>)
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/SmartEquals3.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/SmartEquals3.java
new file mode 100644
index 0000000..cebf774
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/SmartEquals3.java
@@ -0,0 +1,10 @@
+public class Foo {
+
+    {
+        String a;
+        Foo b;
+        Object z;
+        equals(<caret>)
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/SmartEqualsNew.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/SmartEqualsNew.java
new file mode 100644
index 0000000..eb5cd97
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/SmartEqualsNew.java
@@ -0,0 +1,9 @@
+public abstract class Foo {
+
+   private class Bar extends Foo {}
+
+    {                                                                                            
+        new Foo().equals(new <caret>)
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/SmartEqualsNew2.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/SmartEqualsNew2.java
new file mode 100644
index 0000000..2216b3d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/SmartEqualsNew2.java
@@ -0,0 +1,7 @@
+public abstract class Foo {
+
+    {                                                                                            
+        this.equals(new <caret>)
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/StatisticsAffectsNonPreferableExpectedItems.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/StatisticsAffectsNonPreferableExpectedItems.java
new file mode 100644
index 0000000..037e76b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/StatisticsAffectsNonPreferableExpectedItems.java
@@ -0,0 +1,3 @@
+class Foo {
+  java.util.List<Foo> p = new <caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartTypeSorting/XmlTagGetAttribute.java b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/XmlTagGetAttribute.java
new file mode 100644
index 0000000..6e30ad6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/smartTypeSorting/XmlTagGetAttribute.java
@@ -0,0 +1,11 @@
+class Foo {
+  String getAttributeValue(String s);
+  String getNamespace();
+}
+
+class Bar {
+  String getAttribute() {
+    Foo f;
+    return f.<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/style/AfterNew15-out.java b/java/java-tests/testData/codeInsight/completion/style/AfterNew15-out.java
new file mode 100644
index 0000000..6d43d5e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/AfterNew15-out.java
@@ -0,0 +1,12 @@
+import java.io.File;
+import java.io.FilenameFilter;
+
+class A {
+  {
+    new java.io.File("aaa").list(new FilenameFilter() {
+        public boolean accept(File dir, String name) {
+            <selection>return false;  //To change body of implemented methods use File | Settings | File Templates.</selection>
+        }
+    });
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/style/AfterNew15.java b/java/java-tests/testData/codeInsight/completion/style/AfterNew15.java
new file mode 100644
index 0000000..2244e86
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/AfterNew15.java
@@ -0,0 +1,5 @@
+class A {
+  {
+    new java.io.File("aaa").list(new <caret>);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/style/after1.java b/java/java-tests/testData/codeInsight/completion/style/after1.java
new file mode 100644
index 0000000..0e8f0eb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/after1.java
@@ -0,0 +1,10 @@
+class A{
+ interface A<T>{}
+ class MyGenericClass1<T> implements A<T>{}
+ class MyGenericClass2<T> implements A<T>{}
+ class MyGenericClass3<T> implements A<T>{}
+
+ {
+   A<String> a = new MyGenericClass2<String>();<caret>
+ }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/style/after10.java b/java/java-tests/testData/codeInsight/completion/style/after10.java
new file mode 100644
index 0000000..a61fe8e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/after10.java
@@ -0,0 +1,12 @@
+class A{
+ class Constants{
+  public static final Constants xxxx;
+ }
+
+ public void foo(Constants s){}
+ public void foo(boolean bol){}
+
+ {
+  foo(Constants.xxxx);
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/style/after11.java b/java/java-tests/testData/codeInsight/completion/style/after11.java
new file mode 100644
index 0000000..1f52478
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/after11.java
@@ -0,0 +1,5 @@
+class A{
+ {
+  String.CASE_INSENSITIVE_ORDER<caret>kasjdhgfkjasgf
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/style/after12.java b/java/java-tests/testData/codeInsight/completion/style/after12.java
new file mode 100644
index 0000000..9a4e3445
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/after12.java
@@ -0,0 +1,3 @@
+class A{
+  String s = new String(<caret>);Blah()
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/style/after13.java b/java/java-tests/testData/codeInsight/completion/style/after13.java
new file mode 100644
index 0000000..c04bbb9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/after13.java
@@ -0,0 +1,5 @@
+class A{
+ {
+ new A().toString()<caret>;
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/style/after15.java b/java/java-tests/testData/codeInsight/completion/style/after15.java
new file mode 100644
index 0000000..681bed8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/after15.java
@@ -0,0 +1,6 @@
+class A{
+{
+ String str;
+ str.toCharArray();
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/style/after16.java b/java/java-tests/testData/codeInsight/completion/style/after16.java
new file mode 100644
index 0000000..2d4f8e2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/after16.java
@@ -0,0 +1,8 @@
+class A{
+{
+String str;
+
+str.substring(<caret>);
+jhasgfjhsdgf();
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/style/after17.java b/java/java-tests/testData/codeInsight/completion/style/after17.java
new file mode 100644
index 0000000..3017047
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/after17.java
@@ -0,0 +1,7 @@
+class A{
+ {
+  final String path = BASE_PATH;
+  path.toCharArray()<caret>;
+  sdkfjsdkhjfh();
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/style/after21.java b/java/java-tests/testData/codeInsight/completion/style/after21.java
new file mode 100644
index 0000000..f934d4f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/after21.java
@@ -0,0 +1,9 @@
+public class GenericsSmartCast<T>{
+  public GenericsSmartCast(GenericsSmartCast<T> other) {}
+
+  public static Object foo() { return null; }
+
+  public static void main(String[] args) {
+    GenericsSmartCast<String> bar = new GenericsSmartCast<String>((GenericsSmartCast<String>) foo());
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/style/after22.java b/java/java-tests/testData/codeInsight/completion/style/after22.java
new file mode 100644
index 0000000..60a1a6a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/after22.java
@@ -0,0 +1,5 @@
+class A{
+{
+synchronized( <caret> )
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/style/after3.java b/java/java-tests/testData/codeInsight/completion/style/after3.java
new file mode 100644
index 0000000..1bbe69c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/after3.java
@@ -0,0 +1,10 @@
+class A{
+  void foo(int a){}
+  void foo(int a, int b){}
+
+  {
+   int aaa = 0;
+
+   foo(aaa<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/style/after31.java b/java/java-tests/testData/codeInsight/completion/style/after31.java
new file mode 100644
index 0000000..81cfe20b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/after31.java
@@ -0,0 +1,6 @@
+class A{
+ {
+  Object obj;
+  String s = (String )
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/style/after32-a.java b/java/java-tests/testData/codeInsight/completion/style/after32-a.java
new file mode 100644
index 0000000..c795248
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/after32-a.java
@@ -0,0 +1,7 @@
+class A{
+ {
+  Object obj;
+  String s = null;
+  s.substring ( <caret> )
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/style/after32.java b/java/java-tests/testData/codeInsight/completion/style/after32.java
new file mode 100644
index 0000000..814d6aa
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/after32.java
@@ -0,0 +1,7 @@
+class A{
+ {
+  Object obj;
+  String s = null;
+  s.substring (<caret>)
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/style/after33.java b/java/java-tests/testData/codeInsight/completion/style/after33.java
new file mode 100644
index 0000000..2995777
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/after33.java
@@ -0,0 +1,13 @@
+class A{
+ public static final A ONE = new A();
+ public static final A TWO = new A();
+ public static final A THREE = new A();
+}
+
+class B{
+
+ static void foo(){}
+ {
+  A a = A.ONE;B.foo();'
+ }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/style/after34.java b/java/java-tests/testData/codeInsight/completion/style/after34.java
new file mode 100644
index 0000000..44cc53f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/after34.java
@@ -0,0 +1,5 @@
+class A{
+ {
+ File<caret>
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/style/after36.java b/java/java-tests/testData/codeInsight/completion/style/after36.java
new file mode 100644
index 0000000..3805aff
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/after36.java
@@ -0,0 +1,7 @@
+class A{
+ /**
+   * @deprecated use {@link #foo(String, String)}
+   */
+ void aaa(){}
+ void foo(String a, String b){}
+}
diff --git a/java/java-tests/testData/codeInsight/completion/style/after38.java b/java/java-tests/testData/codeInsight/completion/style/after38.java
new file mode 100644
index 0000000..576076f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/after38.java
@@ -0,0 +1,3 @@
+public interface SomethingCool{
+    SomethingCool getSomethingCool<caret>
+}
diff --git a/java/java-tests/testData/codeInsight/completion/style/after39.java b/java/java-tests/testData/codeInsight/completion/style/after39.java
new file mode 100644
index 0000000..9dbd2cd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/after39.java
@@ -0,0 +1,12 @@
+class A{
+ public static final A ONE = new A();
+ public static final A TWO = new A();
+ public static final A THREE = new A();
+}
+
+class B{
+
+ static A foo(){
+  return A.ONE;<caret>
+ }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/style/after4.java b/java/java-tests/testData/codeInsight/completion/style/after4.java
new file mode 100644
index 0000000..101ab10
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/after4.java
@@ -0,0 +1,8 @@
+class A{
+  void foo(Object a){}
+  void foo(Object a, int b){}
+
+  {
+   foo(this<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/style/after6.java b/java/java-tests/testData/codeInsight/completion/style/after6.java
new file mode 100644
index 0000000..a0d064a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/after6.java
@@ -0,0 +1,5 @@
+class A{
+ {
+  boolean a = A<caret>;
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/style/after7.java b/java/java-tests/testData/codeInsight/completion/style/after7.java
new file mode 100644
index 0000000..45cf2ed
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/after7.java
@@ -0,0 +1,6 @@
+class A{
+ /**
+ * {@link String#charAt(int)} <caret>
+ */
+ void foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/style/after8.java b/java/java-tests/testData/codeInsight/completion/style/after8.java
new file mode 100644
index 0000000..4006b7d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/after8.java
@@ -0,0 +1,12 @@
+class A{
+ class Constants{
+  public static final Constants xxxx;
+ }
+
+ public void foo(Constants s){}
+ public void foo(boolean bol){}
+
+ {
+  foo(Constants.xxxx);<caret>
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/style/after9.java b/java/java-tests/testData/codeInsight/completion/style/after9.java
new file mode 100644
index 0000000..a61fe8e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/after9.java
@@ -0,0 +1,12 @@
+class A{
+ class Constants{
+  public static final Constants xxxx;
+ }
+
+ public void foo(Constants s){}
+ public void foo(boolean bol){}
+
+ {
+  foo(Constants.xxxx);
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/style/before1.java b/java/java-tests/testData/codeInsight/completion/style/before1.java
new file mode 100644
index 0000000..cc8a20a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/before1.java
@@ -0,0 +1,10 @@
+class A{
+ interface A<T>{}
+ class MyGenericClass1<T> implements A<T>{}
+ class MyGenericClass2<T> implements A<T>{}
+ class MyGenericClass3<T> implements A<T>{}
+
+ {
+   A<String> a = new <caret>asjdgjh<Object>
+ }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/style/before10.java b/java/java-tests/testData/codeInsight/completion/style/before10.java
new file mode 100644
index 0000000..797f0d6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/before10.java
@@ -0,0 +1,12 @@
+class A{
+ class Constants{
+  public static final Constants xxxx;
+ }
+
+ public void foo(Constants s){}
+ public void foo(boolean bol){}
+
+ {
+  foo(<caret>equals);
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/style/before11.java b/java/java-tests/testData/codeInsight/completion/style/before11.java
new file mode 100644
index 0000000..22585b0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/before11.java
@@ -0,0 +1,5 @@
+class A{
+ {
+  String.C<caret>kasjdhgfkjasgf
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/style/before12.java b/java/java-tests/testData/codeInsight/completion/style/before12.java
new file mode 100644
index 0000000..cd935d7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/before12.java
@@ -0,0 +1,3 @@
+class A{
+  String s = new <caret>Blah()
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/style/before13.java b/java/java-tests/testData/codeInsight/completion/style/before13.java
new file mode 100644
index 0000000..d93fd6a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/before13.java
@@ -0,0 +1,5 @@
+class A{
+ {
+ new A().toString<caret>();
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/style/before15.java b/java/java-tests/testData/codeInsight/completion/style/before15.java
new file mode 100644
index 0000000..37f4ef5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/before15.java
@@ -0,0 +1,6 @@
+class A{
+{
+ String str;
+ str.to<caret>substring();
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/style/before16.java b/java/java-tests/testData/codeInsight/completion/style/before16.java
new file mode 100644
index 0000000..ece9025
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/before16.java
@@ -0,0 +1,8 @@
+class A{
+{
+String str;
+
+str.sub<caret>toString();
+jhasgfjhsdgf();
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/style/before17.java b/java/java-tests/testData/codeInsight/completion/style/before17.java
new file mode 100644
index 0000000..ba501ee
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/before17.java
@@ -0,0 +1,7 @@
+class A{
+ {
+  final String path = BASE_PATH;
+  path.to<caret>subbstring();
+  sdkfjsdkhjfh();
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/style/before21.java b/java/java-tests/testData/codeInsight/completion/style/before21.java
new file mode 100644
index 0000000..2baef88
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/before21.java
@@ -0,0 +1,9 @@
+public class GenericsSmartCast<T>{
+  public GenericsSmartCast(GenericsSmartCast<T> other) {}
+
+  public static Object foo() { return null; }
+
+  public static void main(String[] args) {
+    GenericsSmartCast<String> bar = new GenericsSmartCast<String>((<caret>) foo());
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/style/before22.java b/java/java-tests/testData/codeInsight/completion/style/before22.java
new file mode 100644
index 0000000..6ad472a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/before22.java
@@ -0,0 +1,5 @@
+class A{
+{
+synch<caret>
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/style/before3.java b/java/java-tests/testData/codeInsight/completion/style/before3.java
new file mode 100644
index 0000000..1203958
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/before3.java
@@ -0,0 +1,10 @@
+class A{
+  void foo(int a){}
+  void foo(int a, int b){}
+
+  {
+   int aaa = 0;
+
+   foo(aa<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/style/before31.java b/java/java-tests/testData/codeInsight/completion/style/before31.java
new file mode 100644
index 0000000..dcc56fa
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/before31.java
@@ -0,0 +1,6 @@
+class A{
+ {
+  Object obj;
+  String s = (<caret>)
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/style/before32.java b/java/java-tests/testData/codeInsight/completion/style/before32.java
new file mode 100644
index 0000000..277cd52
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/before32.java
@@ -0,0 +1,7 @@
+class A{
+ {
+  Object obj;
+  String s = null;
+  s.substr<caret>
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/style/before33.java b/java/java-tests/testData/codeInsight/completion/style/before33.java
new file mode 100644
index 0000000..16452cf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/before33.java
@@ -0,0 +1,13 @@
+class A{
+ public static final A ONE = new A();
+ public static final A TWO = new A();
+ public static final A THREE = new A();
+}
+
+class B{
+
+ static void foo(){}
+ {
+  A a = <caret>B.foo();'
+ }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/style/before34.java b/java/java-tests/testData/codeInsight/completion/style/before34.java
new file mode 100644
index 0000000..44cc53f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/before34.java
@@ -0,0 +1,5 @@
+class A{
+ {
+ File<caret>
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/style/before35.java b/java/java-tests/testData/codeInsight/completion/style/before35.java
new file mode 100644
index 0000000..de4ad37f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/before35.java
@@ -0,0 +1,3 @@
+class A{
+aa
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/style/before36.java b/java/java-tests/testData/codeInsight/completion/style/before36.java
new file mode 100644
index 0000000..f6b83bd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/before36.java
@@ -0,0 +1,7 @@
+class A{
+ /**
+   * @deprecated use {@link #f<caret>aaa()}
+   */
+ void aaa(){}
+ void foo(String a, String b){}
+}
diff --git a/java/java-tests/testData/codeInsight/completion/style/before38.java b/java/java-tests/testData/codeInsight/completion/style/before38.java
new file mode 100644
index 0000000..7c68a2e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/before38.java
@@ -0,0 +1,3 @@
+public interface SomethingCool{
+    SomethingCool getSome<caret>
+}
diff --git a/java/java-tests/testData/codeInsight/completion/style/before39.java b/java/java-tests/testData/codeInsight/completion/style/before39.java
new file mode 100644
index 0000000..2251a2c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/before39.java
@@ -0,0 +1,12 @@
+class A{
+ public static final A ONE = new A();
+ public static final A TWO = new A();
+ public static final A THREE = new A();
+}
+
+class B{
+
+ static A foo(){
+  return <caret>;
+ }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/style/before4.java b/java/java-tests/testData/codeInsight/completion/style/before4.java
new file mode 100644
index 0000000..ed9e065
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/before4.java
@@ -0,0 +1,8 @@
+class A{
+  void foo(Object a){}
+  void foo(Object a, int b){}
+
+  {
+   foo(th<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/style/before5.java b/java/java-tests/testData/codeInsight/completion/style/before5.java
new file mode 100644
index 0000000..f7356d9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/before5.java
@@ -0,0 +1,6 @@
+class A{
+ {
+ String xxxx;
+ String a = <caret>
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/style/before6.java b/java/java-tests/testData/codeInsight/completion/style/before6.java
new file mode 100644
index 0000000..f4cbe08
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/before6.java
@@ -0,0 +1,5 @@
+class A{
+ {
+  boolean a = A<caret>false;
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/style/before7.java b/java/java-tests/testData/codeInsight/completion/style/before7.java
new file mode 100644
index 0000000..e9bfd2c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/before7.java
@@ -0,0 +1,6 @@
+class A{
+ /**
+ * {@link String#<caret>
+ */
+ void foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/style/before8.java b/java/java-tests/testData/codeInsight/completion/style/before8.java
new file mode 100644
index 0000000..3f8b191
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/before8.java
@@ -0,0 +1,12 @@
+class A{
+ class Constants{
+  public static final Constants xxxx;
+ }
+
+ public void foo(Constants s){}
+ public void foo(boolean bol){}
+
+ {
+  foo(<caret>true);
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/style/before9.java b/java/java-tests/testData/codeInsight/completion/style/before9.java
new file mode 100644
index 0000000..6555d6c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/style/before9.java
@@ -0,0 +1,12 @@
+class A{
+ class Constants{
+  public static final Constants xxxx;
+ }
+
+ public void foo(Constants s){}
+ public void foo(boolean bol){}
+
+ {
+  foo(<caret>equals(null));
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/variables/AnnotationValue.java b/java/java-tests/testData/codeInsight/completion/variables/AnnotationValue.java
new file mode 100644
index 0000000..7d8a62c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/AnnotationValue.java
@@ -0,0 +1,3 @@
+@interface Some {
+  String v<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/variables/AnnotationValue_after.java b/java/java-tests/testData/codeInsight/completion/variables/AnnotationValue_after.java
new file mode 100644
index 0000000..8b29070
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/AnnotationValue_after.java
@@ -0,0 +1,3 @@
+@interface Some {
+  String value()<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/variables/ConstructorParameterName.java b/java/java-tests/testData/codeInsight/completion/variables/ConstructorParameterName.java
new file mode 100644
index 0000000..52a7ce8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/ConstructorParameterName.java
@@ -0,0 +1,4 @@
+class Car {
+  private final String color;
+  Car(String co<caret>x) { }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/variables/ConstructorParameterNameWithPrefix.java b/java/java-tests/testData/codeInsight/completion/variables/ConstructorParameterNameWithPrefix.java
new file mode 100644
index 0000000..79c24fa
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/ConstructorParameterNameWithPrefix.java
@@ -0,0 +1,5 @@
+class Car {
+  private final String myColor;
+  private final int myColor2;
+  Car(String pCo<caret>x) { }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/variables/DuplicateSuggestionsFromUsage.java b/java/java-tests/testData/codeInsight/completion/variables/DuplicateSuggestionsFromUsage.java
new file mode 100644
index 0000000..4bb3eb8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/DuplicateSuggestionsFromUsage.java
@@ -0,0 +1,11 @@
+public class Foo {
+
+  void bar() {
+    APreferencePolicy p<caret> = 2;
+    System.out.println(policy);
+  }
+}
+
+class APreferencePolicy {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/variables/NoKeywordsInForLoopVariableName.java b/java/java-tests/testData/codeInsight/completion/variables/NoKeywordsInForLoopVariableName.java
new file mode 100644
index 0000000..7c04089
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/NoKeywordsInForLoopVariableName.java
@@ -0,0 +1,15 @@
+import java.util.ArrayList;
+
+public class Test {
+  {
+
+    Runnable runnable = new Runnable() {
+      public void run() {
+        for (StringBuffer <caret> : new ArrayList<StringBuffer>()) {
+
+        }
+      }
+    };
+  }
+
+}
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/ArrayMethodName-result.java b/java/java-tests/testData/codeInsight/completion/variables/locals/ArrayMethodName-result.java
new file mode 100644
index 0000000..4cfa251
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/ArrayMethodName-result.java
@@ -0,0 +1,3 @@
+interface Abc {
+    String[] getStrings<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/ArrayMethodName.java b/java/java-tests/testData/codeInsight/completion/variables/locals/ArrayMethodName.java
new file mode 100644
index 0000000..3632f2b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/ArrayMethodName.java
@@ -0,0 +1,3 @@
+interface Abc {
+    String[] get<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/FieldNameCompletion1-result.java b/java/java-tests/testData/codeInsight/completion/variables/locals/FieldNameCompletion1-result.java
new file mode 100644
index 0000000..a0bfcf92
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/FieldNameCompletion1-result.java
@@ -0,0 +1,4 @@
+class Zloboglas{}
+class A{
+  Zloboglas zloboglas<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/FieldNameCompletion1.java b/java/java-tests/testData/codeInsight/completion/variables/locals/FieldNameCompletion1.java
new file mode 100644
index 0000000..21fd10d0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/FieldNameCompletion1.java
@@ -0,0 +1,4 @@
+class Zloboglas{}
+class A{
+  Zloboglas z<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/FieldNameCompletion2-result.java b/java/java-tests/testData/codeInsight/completion/variables/locals/FieldNameCompletion2-result.java
new file mode 100644
index 0000000..84f34ea
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/FieldNameCompletion2-result.java
@@ -0,0 +1,4 @@
+class Zloboglas{}
+class A{
+  Zloboglas myZloboglas<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/FieldNameCompletion2.java b/java/java-tests/testData/codeInsight/completion/variables/locals/FieldNameCompletion2.java
new file mode 100644
index 0000000..ee3a640
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/FieldNameCompletion2.java
@@ -0,0 +1,4 @@
+class Zloboglas{}
+class A{
+  Zloboglas my<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/FieldNameCompletion3-result.java b/java/java-tests/testData/codeInsight/completion/variables/locals/FieldNameCompletion3-result.java
new file mode 100644
index 0000000..3b49cf4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/FieldNameCompletion3-result.java
@@ -0,0 +1,7 @@
+class Zloboglas{}
+class B {
+  private Zloboglas myZloboglas;
+}
+class A extends B {
+  private Zloboglas myZloboglas<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/FieldNameCompletion3.java b/java/java-tests/testData/codeInsight/completion/variables/locals/FieldNameCompletion3.java
new file mode 100644
index 0000000..dcac40d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/FieldNameCompletion3.java
@@ -0,0 +1,7 @@
+class Zloboglas{}
+class B {
+  private Zloboglas myZloboglas;
+}
+class A extends B {
+  private Zloboglas my<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/InputMethodEventVariable.java b/java/java-tests/testData/codeInsight/completion/variables/locals/InputMethodEventVariable.java
new file mode 100644
index 0000000..bf41d2c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/InputMethodEventVariable.java
@@ -0,0 +1,5 @@
+class TestSource1{
+  public void foo(){
+    java.awt.event.InputMethodEvent i<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/InputMethodEventVariable_after.java b/java/java-tests/testData/codeInsight/completion/variables/locals/InputMethodEventVariable_after.java
new file mode 100644
index 0000000..f62eab3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/InputMethodEventVariable_after.java
@@ -0,0 +1,5 @@
+class TestSource1{
+  public void foo(){
+    java.awt.event.InputMethodEvent inputMethodEvent<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/InterfaceMethod.java b/java/java-tests/testData/codeInsight/completion/variables/locals/InterfaceMethod.java
new file mode 100644
index 0000000..403c0cd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/InterfaceMethod.java
@@ -0,0 +1,5 @@
+interface Foo {
+  GooBarDoo calc<caret>
+}
+
+interface GooBarDoo {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/LocalReserved.java b/java/java-tests/testData/codeInsight/completion/variables/locals/LocalReserved.java
new file mode 100644
index 0000000..5a8c280
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/LocalReserved.java
@@ -0,0 +1,5 @@
+public class TestSource7 {
+    public void foo(){
+        Class my<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/LocalReserved2.java b/java/java-tests/testData/codeInsight/completion/variables/locals/LocalReserved2.java
new file mode 100644
index 0000000..bb410e3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/LocalReserved2.java
@@ -0,0 +1,5 @@
+public class TestSource7 {
+    public void foo(){
+        Class c<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/LocalReserved_after.java b/java/java-tests/testData/codeInsight/completion/variables/locals/LocalReserved_after.java
new file mode 100644
index 0000000..f044d4a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/LocalReserved_after.java
@@ -0,0 +1,5 @@
+public class TestSource7 {
+    public void foo(){
+        Class myClass<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/ObjectVariable.java b/java/java-tests/testData/codeInsight/completion/variables/locals/ObjectVariable.java
new file mode 100644
index 0000000..69db062
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/ObjectVariable.java
@@ -0,0 +1,5 @@
+class TestSource1{
+  public void foo(){
+    Object ob<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/ObjectVariable_after.java b/java/java-tests/testData/codeInsight/completion/variables/locals/ObjectVariable_after.java
new file mode 100644
index 0000000..b05b7b8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/ObjectVariable_after.java
@@ -0,0 +1,5 @@
+class TestSource1{
+  public void foo(){
+    Object object<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/StringVariable.java b/java/java-tests/testData/codeInsight/completion/variables/locals/StringVariable.java
new file mode 100644
index 0000000..4f0c1f5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/StringVariable.java
@@ -0,0 +1,5 @@
+class TestSource1{
+  public void foo(){
+    String st<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/StringVariable_after.java b/java/java-tests/testData/codeInsight/completion/variables/locals/StringVariable_after.java
new file mode 100644
index 0000000..c9aa5b8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/StringVariable_after.java
@@ -0,0 +1,5 @@
+class TestSource1{
+  public void foo(){
+    String string<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/TestFieldOutOfAnonymous.java b/java/java-tests/testData/codeInsight/completion/variables/locals/TestFieldOutOfAnonymous.java
new file mode 100644
index 0000000..906843a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/TestFieldOutOfAnonymous.java
@@ -0,0 +1,19 @@
+package codeInsight.completion.variables.locals;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: igork
+ * Date: Nov 25, 2002
+ * Time: 3:10:08 PM
+ * To change this template use Options | File Templates.
+ */
+public class TestSource9 {
+    private int aField;
+    public void foo() {
+        Runnable r = new Runnable() {
+            public void run() {
+               int x = aF<caret>;
+            }
+        };
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/TestFieldOutOfAnonymousResult.java b/java/java-tests/testData/codeInsight/completion/variables/locals/TestFieldOutOfAnonymousResult.java
new file mode 100644
index 0000000..db0df9e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/TestFieldOutOfAnonymousResult.java
@@ -0,0 +1,19 @@
+package codeInsight.completion.variables.locals;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: igork
+ * Date: Nov 25, 2002
+ * Time: 3:10:08 PM
+ * To change this template use Options | File Templates.
+ */
+public class TestSource9 {
+    private int aField;
+    public void foo() {
+        Runnable r = new Runnable() {
+            public void run() {
+               int x = aField<caret>;
+            }
+        };
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/TestResult1.java b/java/java-tests/testData/codeInsight/completion/variables/locals/TestResult1.java
new file mode 100644
index 0000000..decbf77
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/TestResult1.java
@@ -0,0 +1,5 @@
+class TestSource1{
+  public void foo(){
+    int abc = 0, bac = abc<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/TestResult2.java b/java/java-tests/testData/codeInsight/completion/variables/locals/TestResult2.java
new file mode 100644
index 0000000..a00a590
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/TestResult2.java
@@ -0,0 +1,15 @@
+package codeInsight.completion.variables.locals;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: igork
+ * Date: Nov 25, 2002
+ * Time: 3:07:18 PM
+ * To change this template use Options | File Templates.
+ */
+public class TestSource2 {
+  int aaa = 0;
+  public void foo(){
+    int abc = 0, bac = a<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/TestResult3.java b/java/java-tests/testData/codeInsight/completion/variables/locals/TestResult3.java
new file mode 100644
index 0000000..cb35d20
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/TestResult3.java
@@ -0,0 +1,15 @@
+package codeInsight.completion.variables.locals;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: igork
+ * Date: Nov 25, 2002
+ * Time: 3:10:08 PM
+ * To change this template use Options | File Templates.
+ */
+public class TestSource3 {
+    int aaa = 0;
+    public static void foo(){
+        int abc = 0, bac = abc<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/TestResult4.java b/java/java-tests/testData/codeInsight/completion/variables/locals/TestResult4.java
new file mode 100644
index 0000000..cc417f5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/TestResult4.java
@@ -0,0 +1,18 @@
+package codeInsight.completion.variables.locals;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: igork
+ * Date: Nov 25, 2002
+ * Time: 3:10:08 PM
+ * To change this template use Options | File Templates.
+ */
+public class TestSource4 {
+    int aaa = 0;
+    public static void foo(){
+        int abc = 0;
+        class Inner1{
+           int sbe=abc<caret>
+        }
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/TestResult5.java b/java/java-tests/testData/codeInsight/completion/variables/locals/TestResult5.java
new file mode 100644
index 0000000..51c7701
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/TestResult5.java
@@ -0,0 +1,22 @@
+package codeInsight.completion.variables.locals;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: igork
+ * Date: Nov 25, 2002
+ * Time: 3:10:08 PM
+ * To change this template use Options | File Templates.
+ */
+public class TestSource5 {
+
+    public static class inner{
+        static int aaa = 0;
+        public void foo(){
+            int abc = 0;
+        }
+
+        static class Inner1{
+            static int sbe = aaa<caret>
+        }
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/TestResult6.java b/java/java-tests/testData/codeInsight/completion/variables/locals/TestResult6.java
new file mode 100644
index 0000000..a4355d9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/TestResult6.java
@@ -0,0 +1,13 @@
+package codeInsight.completion.variables.locals;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: igork
+ * Date: Nov 25, 2002
+ * Time: 3:10:08 PM
+ * To change this template use Options | File Templates.
+ */
+public class TestSource6 {
+    int aaa = bbb<caret>
+    int bbb = 0;
+}
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/TestResult7.java b/java/java-tests/testData/codeInsight/completion/variables/locals/TestResult7.java
new file mode 100644
index 0000000..b045f4c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/TestResult7.java
@@ -0,0 +1,15 @@
+package codeInsight.completion.variables.locals;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: igork
+ * Date: Nov 25, 2002
+ * Time: 3:10:08 PM
+ * To change this template use Options | File Templates.
+ */
+public class TestSource7 {
+    public void foo(){
+        int aaa = b<caret>
+        int bbb = 0;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/TestResult8.java b/java/java-tests/testData/codeInsight/completion/variables/locals/TestResult8.java
new file mode 100644
index 0000000..4cf2638
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/TestResult8.java
@@ -0,0 +1,15 @@
+package codeInsight.completion.variables.locals;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: igork
+ * Date: Nov 25, 2002
+ * Time: 3:10:08 PM
+ * To change this template use Options | File Templates.
+ */
+public class TestSource8 {
+    static {
+        int aaa = b<caret>
+        int bbb = 0;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/TestResult9.java b/java/java-tests/testData/codeInsight/completion/variables/locals/TestResult9.java
new file mode 100644
index 0000000..31fc0d5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/TestResult9.java
@@ -0,0 +1,15 @@
+package codeInsight.completion.variables.locals;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: igork
+ * Date: Nov 25, 2002
+ * Time: 3:10:08 PM
+ * To change this template use Options | File Templates.
+ */
+public class TestSource9 {
+    static {
+        int bbb = 0;
+        int aaa = bbb<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/TestSource1.java b/java/java-tests/testData/codeInsight/completion/variables/locals/TestSource1.java
new file mode 100644
index 0000000..b9ded1e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/TestSource1.java
@@ -0,0 +1,5 @@
+class TestSource1{
+  public void foo(){
+    int abc = 0, bac = a<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/TestSource2.java b/java/java-tests/testData/codeInsight/completion/variables/locals/TestSource2.java
new file mode 100644
index 0000000..a00a590
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/TestSource2.java
@@ -0,0 +1,15 @@
+package codeInsight.completion.variables.locals;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: igork
+ * Date: Nov 25, 2002
+ * Time: 3:07:18 PM
+ * To change this template use Options | File Templates.
+ */
+public class TestSource2 {
+  int aaa = 0;
+  public void foo(){
+    int abc = 0, bac = a<caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/TestSource3.java b/java/java-tests/testData/codeInsight/completion/variables/locals/TestSource3.java
new file mode 100644
index 0000000..3958c5b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/TestSource3.java
@@ -0,0 +1,15 @@
+package codeInsight.completion.variables.locals;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: igork
+ * Date: Nov 25, 2002
+ * Time: 3:10:08 PM
+ * To change this template use Options | File Templates.
+ */
+public class TestSource3 {
+    int aaa = 0;
+    public static void foo(){
+        int abc = 0, bac = a<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/TestSource4.java b/java/java-tests/testData/codeInsight/completion/variables/locals/TestSource4.java
new file mode 100644
index 0000000..784a85f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/TestSource4.java
@@ -0,0 +1,18 @@
+package codeInsight.completion.variables.locals;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: igork
+ * Date: Nov 25, 2002
+ * Time: 3:10:08 PM
+ * To change this template use Options | File Templates.
+ */
+public class TestSource4 {
+    int aaa = 0;
+    public static void foo(){
+        int abc = 0;
+        class Inner1{
+           int sbe=a<caret>
+        }
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/TestSource5.java b/java/java-tests/testData/codeInsight/completion/variables/locals/TestSource5.java
new file mode 100644
index 0000000..ffd4fdf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/TestSource5.java
@@ -0,0 +1,22 @@
+package codeInsight.completion.variables.locals;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: igork
+ * Date: Nov 25, 2002
+ * Time: 3:10:08 PM
+ * To change this template use Options | File Templates.
+ */
+public class TestSource5 {
+
+    public static class inner{
+        static int aaa = 0;
+        public void foo(){
+            int abc = 0;
+        }
+
+        static class Inner1{
+            static int sbe = a<caret>
+        }
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/TestSource6.java b/java/java-tests/testData/codeInsight/completion/variables/locals/TestSource6.java
new file mode 100644
index 0000000..809e34a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/TestSource6.java
@@ -0,0 +1,13 @@
+package codeInsight.completion.variables.locals;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: igork
+ * Date: Nov 25, 2002
+ * Time: 3:10:08 PM
+ * To change this template use Options | File Templates.
+ */
+public class TestSource6 {
+    int aaa = b<caret>
+    int bbb = 0;
+}
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/TestSource7.java b/java/java-tests/testData/codeInsight/completion/variables/locals/TestSource7.java
new file mode 100644
index 0000000..b045f4c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/TestSource7.java
@@ -0,0 +1,15 @@
+package codeInsight.completion.variables.locals;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: igork
+ * Date: Nov 25, 2002
+ * Time: 3:10:08 PM
+ * To change this template use Options | File Templates.
+ */
+public class TestSource7 {
+    public void foo(){
+        int aaa = b<caret>
+        int bbb = 0;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/TestSource8.java b/java/java-tests/testData/codeInsight/completion/variables/locals/TestSource8.java
new file mode 100644
index 0000000..4cf2638
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/TestSource8.java
@@ -0,0 +1,15 @@
+package codeInsight.completion.variables.locals;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: igork
+ * Date: Nov 25, 2002
+ * Time: 3:10:08 PM
+ * To change this template use Options | File Templates.
+ */
+public class TestSource8 {
+    static {
+        int aaa = b<caret>
+        int bbb = 0;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/TestSource9.java b/java/java-tests/testData/codeInsight/completion/variables/locals/TestSource9.java
new file mode 100644
index 0000000..991c3cf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/TestSource9.java
@@ -0,0 +1,15 @@
+package codeInsight.completion.variables.locals;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: igork
+ * Date: Nov 25, 2002
+ * Time: 3:10:08 PM
+ * To change this template use Options | File Templates.
+ */
+public class TestSource9 {
+    static {
+        int bbb = 0;
+        int aaa = b<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/UniqueNameInFor.java b/java/java-tests/testData/codeInsight/completion/variables/locals/UniqueNameInFor.java
new file mode 100644
index 0000000..d982c7e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/UniqueNameInFor.java
@@ -0,0 +1,8 @@
+public class TestSource7 {
+  public void foo(){
+    List<Model> models;
+    Model model;
+    for(Model m<caret>)
+  }
+}
+class Model{}
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/UniqueNameInFor_after.java b/java/java-tests/testData/codeInsight/completion/variables/locals/UniqueNameInFor_after.java
new file mode 100644
index 0000000..521ef1c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/UniqueNameInFor_after.java
@@ -0,0 +1,8 @@
+public class TestSource7 {
+  public void foo(){
+    List<Model> models;
+    Model model;
+    for(Model model1<caret>)
+  }
+}
+class Model{}
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/UnresolvedMethodName.java b/java/java-tests/testData/codeInsight/completion/variables/locals/UnresolvedMethodName.java
new file mode 100644
index 0000000..c5df78e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/UnresolvedMethodName.java
@@ -0,0 +1,7 @@
+public class Foo {
+  public void a() {
+    int i = createStylesheetCombobox();
+  }
+
+  private int cre<caret>
+}
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/UnresolvedMethodName_after.java b/java/java-tests/testData/codeInsight/completion/variables/locals/UnresolvedMethodName_after.java
new file mode 100644
index 0000000..5096d65
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/UnresolvedMethodName_after.java
@@ -0,0 +1,7 @@
+public class Foo {
+  public void a() {
+    int i = createStylesheetCombobox();
+  }
+
+  private int createStylesheetCombobox<caret>
+}
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/UnresolvedReference.java b/java/java-tests/testData/codeInsight/completion/variables/locals/UnresolvedReference.java
new file mode 100644
index 0000000..46b3c30
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/UnresolvedReference.java
@@ -0,0 +1,8 @@
+class Foo {
+    void foo() {
+        Object <caret>
+        System.out.println(psiClass);
+        System.out.println(psiClass);
+        System.out.println(psiClass);
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/WithBuilderParameter.java b/java/java-tests/testData/codeInsight/completion/variables/locals/WithBuilderParameter.java
new file mode 100644
index 0000000..e11e6a7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/WithBuilderParameter.java
@@ -0,0 +1,4 @@
+public class Builder {
+  public Builder withSomething(String so<caret>) {}
+}
+
diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/WithBuilderParameter_after.java b/java/java-tests/testData/codeInsight/completion/variables/locals/WithBuilderParameter_after.java
new file mode 100644
index 0000000..ef9147b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/variables/locals/WithBuilderParameter_after.java
@@ -0,0 +1,4 @@
+public class Builder {
+  public Builder withSomething(String something<caret>) {}
+}
+
diff --git a/java/java-tests/testData/codeInsight/completion/word/1.properties b/java/java-tests/testData/codeInsight/completion/word/1.properties
new file mode 100644
index 0000000..07ff189
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/word/1.properties
@@ -0,0 +1 @@
+Settings Sett<caret> other
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/word/1.txt b/java/java-tests/testData/codeInsight/completion/word/1.txt
new file mode 100644
index 0000000..07ff189
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/word/1.txt
@@ -0,0 +1 @@
+Settings Sett<caret> other
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/word/1.xml b/java/java-tests/testData/codeInsight/completion/word/1.xml
new file mode 100644
index 0000000..59ce617
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/word/1.xml
@@ -0,0 +1 @@
+<a>Settings Sett<caret> other</a>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/word/1_after.properties b/java/java-tests/testData/codeInsight/completion/word/1_after.properties
new file mode 100644
index 0000000..d065e4a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/word/1_after.properties
@@ -0,0 +1 @@
+Settings Settings<caret> other
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/word/1_after.txt b/java/java-tests/testData/codeInsight/completion/word/1_after.txt
new file mode 100644
index 0000000..d065e4a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/word/1_after.txt
@@ -0,0 +1 @@
+Settings Settings<caret> other
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/word/1_after.xml b/java/java-tests/testData/codeInsight/completion/word/1_after.xml
new file mode 100644
index 0000000..1acc895
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/word/1_after.xml
@@ -0,0 +1 @@
+<a>Settings Settings<caret> other</a>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/word/2.xml b/java/java-tests/testData/codeInsight/completion/word/2.xml
new file mode 100644
index 0000000..827ff42
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/word/2.xml
@@ -0,0 +1,4 @@
+<root>
+<a value="Settings"/>
+<a value="Sett<caret>"></a>
+</root>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/word/2_after.xml b/java/java-tests/testData/codeInsight/completion/word/2_after.xml
new file mode 100644
index 0000000..d993a9c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/word/2_after.xml
@@ -0,0 +1,4 @@
+<root>
+<a value="Settings"/>
+<a value="Settings<caret>"></a>
+</root>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/word/3.java b/java/java-tests/testData/codeInsight/completion/word/3.java
new file mode 100644
index 0000000..6b5f498
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/word/3.java
@@ -0,0 +1,3 @@
+public class MyClass {
+ String b = "My<caret>"; 
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/word/3_after.java b/java/java-tests/testData/codeInsight/completion/word/3_after.java
new file mode 100644
index 0000000..362513c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/word/3_after.java
@@ -0,0 +1,3 @@
+public class MyClass {
+ String b = "MyHardVariant<caret>"; 
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/word/4.java b/java/java-tests/testData/codeInsight/completion/word/4.java
new file mode 100644
index 0000000..ee67efd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/word/4.java
@@ -0,0 +1,4 @@
+public class MyClass {
+ String b = "My";
+  // pu<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/word/4_after.java b/java/java-tests/testData/codeInsight/completion/word/4_after.java
new file mode 100644
index 0000000..e5fb98f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/word/4_after.java
@@ -0,0 +1,4 @@
+public class MyClass {
+ String b = "My";
+  // public<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/word/CompleteStringLiteralCopy.java b/java/java-tests/testData/codeInsight/completion/word/CompleteStringLiteralCopy.java
new file mode 100644
index 0000000..0406461
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/word/CompleteStringLiteralCopy.java
@@ -0,0 +1,5 @@
+class Bar {
+  String a = "abc.def"
+  String b = "abde<caret>"
+}
+
diff --git a/java/java-tests/testData/codeInsight/completion/word/CompleteStringLiteralCopy_after.java b/java/java-tests/testData/codeInsight/completion/word/CompleteStringLiteralCopy_after.java
new file mode 100644
index 0000000..74a09bb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/word/CompleteStringLiteralCopy_after.java
@@ -0,0 +1,5 @@
+class Bar {
+  String a = "abc.def"
+  String b = "abc.def<caret>"
+}
+
diff --git a/java/java-tests/testData/codeInsight/completion/word/DollarsInPrefix.txt b/java/java-tests/testData/codeInsight/completion/word/DollarsInPrefix.txt
new file mode 100644
index 0000000..d20aabb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/word/DollarsInPrefix.txt
@@ -0,0 +1,2 @@
+$test
+$te<caret>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/word/DollarsInPrefix_after.txt b/java/java-tests/testData/codeInsight/completion/word/DollarsInPrefix_after.txt
new file mode 100644
index 0000000..748e242
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/word/DollarsInPrefix_after.txt
@@ -0,0 +1,2 @@
+$test
+$test<caret>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/word/InJavaLiterals.java b/java/java-tests/testData/codeInsight/completion/word/InJavaLiterals.java
new file mode 100644
index 0000000..49bce32
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/word/InJavaLiterals.java
@@ -0,0 +1,3 @@
+public class MyClass {
+ String b = "My<caret>";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/word/InJavaLiterals_after.java b/java/java-tests/testData/codeInsight/completion/word/InJavaLiterals_after.java
new file mode 100644
index 0000000..5a3075c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/word/InJavaLiterals_after.java
@@ -0,0 +1,3 @@
+public class MyClass {
+ String b = "MyClass<caret>";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/word/SpaceInComment.java b/java/java-tests/testData/codeInsight/completion/word/SpaceInComment.java
new file mode 100644
index 0000000..aecf20ae
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/word/SpaceInComment.java
@@ -0,0 +1,4 @@
+public class MyClass {
+
+  // comment  <caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/word/TextInComment.java b/java/java-tests/testData/codeInsight/completion/word/TextInComment.java
new file mode 100644
index 0000000..13285ec
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/word/TextInComment.java
@@ -0,0 +1,4 @@
+public class MyClass {
+
+  /** comment  My<caret> */
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/word/TextInComment_after.java b/java/java-tests/testData/codeInsight/completion/word/TextInComment_after.java
new file mode 100644
index 0000000..aa7b8d7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/word/TextInComment_after.java
@@ -0,0 +1,4 @@
+public class MyClass {
+
+  /** comment  MyClass<caret> */
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/convertToBasicLatin/CharLiteral.java b/java/java-tests/testData/codeInsight/convertToBasicLatin/CharLiteral.java
new file mode 100644
index 0000000..8296a1c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/convertToBasicLatin/CharLiteral.java
@@ -0,0 +1,3 @@
+class C {
+    char ch = '<caret>©';
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/convertToBasicLatin/CharLiteral_after.java b/java/java-tests/testData/codeInsight/convertToBasicLatin/CharLiteral_after.java
new file mode 100644
index 0000000..2826f3e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/convertToBasicLatin/CharLiteral_after.java
@@ -0,0 +1,3 @@
+class C {
+    char ch = '\u00a9';
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/convertToBasicLatin/DocComment.java b/java/java-tests/testData/codeInsight/convertToBasicLatin/DocComment.java
new file mode 100644
index 0000000..f1329a8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/convertToBasicLatin/DocComment.java
@@ -0,0 +1,5 @@
+/**<caret>
+ * Copyright © 2000-2010 JetBrains s.r.o.
+ */
+class C {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/convertToBasicLatin/DocComment_after.java b/java/java-tests/testData/codeInsight/convertToBasicLatin/DocComment_after.java
new file mode 100644
index 0000000..39cc65a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/convertToBasicLatin/DocComment_after.java
@@ -0,0 +1,5 @@
+/**
+ * Copyright &copy; 2000-2010 JetBrains s.r.o.
+ */
+class C {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/convertToBasicLatin/DocTag.java b/java/java-tests/testData/codeInsight/convertToBasicLatin/DocTag.java
new file mode 100644
index 0000000..11f4e2e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/convertToBasicLatin/DocTag.java
@@ -0,0 +1,23 @@
+/*
+ * 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 {
+  /**
+   * Some method.
+   *
+   * @param value some (©)<caret> param.
+   */
+  abstract void m(int value);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/convertToBasicLatin/DocTag_after.java b/java/java-tests/testData/codeInsight/convertToBasicLatin/DocTag_after.java
new file mode 100644
index 0000000..28606ca
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/convertToBasicLatin/DocTag_after.java
@@ -0,0 +1,23 @@
+/*
+ * 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 {
+  /**
+   * Some method.
+   *
+   * @param value some (&copy;) param.
+   */
+  abstract void m(int value);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/convertToBasicLatin/PlainComment.java b/java/java-tests/testData/codeInsight/convertToBasicLatin/PlainComment.java
new file mode 100644
index 0000000..d675dd2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/convertToBasicLatin/PlainComment.java
@@ -0,0 +1,3 @@
+class C {
+    //<caret> © 2010 JetBrains
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/convertToBasicLatin/PlainComment_after.java b/java/java-tests/testData/codeInsight/convertToBasicLatin/PlainComment_after.java
new file mode 100644
index 0000000..ab5c41f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/convertToBasicLatin/PlainComment_after.java
@@ -0,0 +1,3 @@
+class C {
+    // &copy; 2010 JetBrains
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/convertToBasicLatin/StringLiteral.java b/java/java-tests/testData/codeInsight/convertToBasicLatin/StringLiteral.java
new file mode 100644
index 0000000..bba1d94
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/convertToBasicLatin/StringLiteral.java
@@ -0,0 +1,3 @@
+class C {
+    String s = "<caret>Áî";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/convertToBasicLatin/StringLiteral_after.java b/java/java-tests/testData/codeInsight/convertToBasicLatin/StringLiteral_after.java
new file mode 100644
index 0000000..8622f9b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/convertToBasicLatin/StringLiteral_after.java
@@ -0,0 +1,3 @@
+class C {
+    String s = "\u00c1\u00ee";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/convertToStringLiteral/Simple.java b/java/java-tests/testData/codeInsight/convertToStringLiteral/Simple.java
new file mode 100644
index 0000000..285c7ab
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/convertToStringLiteral/Simple.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2000-2011 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 {
+    {
+        System.out.println('<caret>aaa');
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/convertToStringLiteral/Simple_after.java b/java/java-tests/testData/codeInsight/convertToStringLiteral/Simple_after.java
new file mode 100644
index 0000000..d28758e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/convertToStringLiteral/Simple_after.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2000-2011 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 {
+    {
+        System.out.println("aaa");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/copyReference/Constructor.java b/java/java-tests/testData/codeInsight/copyReference/Constructor.java
new file mode 100644
index 0000000..0aa485c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/copyReference/Constructor.java
@@ -0,0 +1,4 @@
+class C2 {
+    public <caret>C2(int i) {
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/copyReference/Constructor_after.java b/java/java-tests/testData/codeInsight/copyReference/Constructor_after.java
new file mode 100644
index 0000000..293eeeb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/copyReference/Constructor_after.java
@@ -0,0 +1,9 @@
+class XXX {
+    void f() {
+        new C2(<caret>)
+    }
+}
+class C2 {
+    public C2(int i) {
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/copyReference/Constructor_dst.java b/java/java-tests/testData/codeInsight/copyReference/Constructor_dst.java
new file mode 100644
index 0000000..2695b93
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/copyReference/Constructor_dst.java
@@ -0,0 +1,9 @@
+class XXX {
+    void f() {
+        new <caret>
+    }
+}
+class C2 {
+    public C2(int i) {
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/copyReference/CopyFile_after.java b/java/java-tests/testData/codeInsight/copyReference/CopyFile_after.java
new file mode 100644
index 0000000..b0c0783
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/copyReference/CopyFile_after.java
@@ -0,0 +1,3 @@
+class X {
+  String s = "/x/x.txt<caret>";
+}
diff --git a/java/java-tests/testData/codeInsight/copyReference/CopyFile_dst.java b/java/java-tests/testData/codeInsight/copyReference/CopyFile_dst.java
new file mode 100644
index 0000000..82b50cd7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/copyReference/CopyFile_dst.java
@@ -0,0 +1,3 @@
+class X {
+  String s = "<caret>";
+}
diff --git a/java/java-tests/testData/codeInsight/copyReference/DefaultConstructor.java b/java/java-tests/testData/codeInsight/copyReference/DefaultConstructor.java
new file mode 100644
index 0000000..6a64f7c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/copyReference/DefaultConstructor.java
@@ -0,0 +1,7 @@
+class XXX {
+    void f() {
+        new <caret>C2();
+    }
+}
+class C2 {
+}
diff --git a/java/java-tests/testData/codeInsight/copyReference/DefaultConstructor_after.java b/java/java-tests/testData/codeInsight/copyReference/DefaultConstructor_after.java
new file mode 100644
index 0000000..8207340
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/copyReference/DefaultConstructor_after.java
@@ -0,0 +1,8 @@
+class XXX {
+    void f() {
+        new C2();
+        new C2()<caret>
+    }
+}
+class C2 {
+}
diff --git a/java/java-tests/testData/codeInsight/copyReference/DefaultConstructor_dst.java b/java/java-tests/testData/codeInsight/copyReference/DefaultConstructor_dst.java
new file mode 100644
index 0000000..7d2e83e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/copyReference/DefaultConstructor_dst.java
@@ -0,0 +1,8 @@
+class XXX {
+    void f() {
+        new C2();
+        new <caret>
+    }
+}
+class C2 {
+}
diff --git a/java/java-tests/testData/codeInsight/copyReference/IdentifierSeparator.java b/java/java-tests/testData/codeInsight/copyReference/IdentifierSeparator.java
new file mode 100644
index 0000000..f3842a1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/copyReference/IdentifierSeparator.java
@@ -0,0 +1,2 @@
+class <caret>C {
+}
diff --git a/java/java-tests/testData/codeInsight/copyReference/IdentifierSeparator_after.java b/java/java-tests/testData/codeInsight/copyReference/IdentifierSeparator_after.java
new file mode 100644
index 0000000..5cd4ac6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/copyReference/IdentifierSeparator_after.java
@@ -0,0 +1,5 @@
+class X {
+   void f(C <caret>X x) {}
+}
+class C {
+}
diff --git a/java/java-tests/testData/codeInsight/copyReference/IdentifierSeparator_dst.java b/java/java-tests/testData/codeInsight/copyReference/IdentifierSeparator_dst.java
new file mode 100644
index 0000000..eb4aaf7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/copyReference/IdentifierSeparator_dst.java
@@ -0,0 +1,5 @@
+class X {
+   void f(<caret>X x) {}
+}
+class C {
+}
diff --git a/java/java-tests/testData/codeInsight/copyReference/MethodFromAnonymousClass.java b/java/java-tests/testData/codeInsight/copyReference/MethodFromAnonymousClass.java
new file mode 100644
index 0000000..f16b252
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/copyReference/MethodFromAnonymousClass.java
@@ -0,0 +1,9 @@
+  class Test {
+     public void m() {
+       new Runnable() {
+           public void <caret>run() {
+
+           }
+       };
+     }
+  }
diff --git a/java/java-tests/testData/codeInsight/copyReference/MethodFromAnonymousClass_after.java b/java/java-tests/testData/codeInsight/copyReference/MethodFromAnonymousClass_after.java
new file mode 100644
index 0000000..21769c0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/copyReference/MethodFromAnonymousClass_after.java
@@ -0,0 +1,9 @@
+  class Test {
+     public void m() {
+       new Runnable() {
+           public void run() {
+               run()<caret>
+           }
+       };
+     }
+  }
diff --git a/java/java-tests/testData/codeInsight/copyReference/MethodFromAnonymousClass_dst.java b/java/java-tests/testData/codeInsight/copyReference/MethodFromAnonymousClass_dst.java
new file mode 100644
index 0000000..a39e7ec
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/copyReference/MethodFromAnonymousClass_dst.java
@@ -0,0 +1,9 @@
+  class Test {
+     public void m() {
+       new Runnable() {
+           public void run() {
+              <caret>
+           }
+       };
+     }
+  }
diff --git a/java/java-tests/testData/codeInsight/createSubclass/generics/after/Subclass.java b/java/java-tests/testData/codeInsight/createSubclass/generics/after/Subclass.java
new file mode 100644
index 0000000..96277ed
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/createSubclass/generics/after/Subclass.java
@@ -0,0 +1,2 @@
+public class Subclass<E extends Runnable, Q extends Runnable> extends Superclass<E, Q> {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/createSubclass/generics/after/Superclass.java b/java/java-tests/testData/codeInsight/createSubclass/generics/after/Superclass.java
new file mode 100644
index 0000000..1c0ec5c0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/createSubclass/generics/after/Superclass.java
@@ -0,0 +1,2 @@
+class Superclass<E extends Runnable, Q extends Runnable> {
+}
diff --git a/java/java-tests/testData/codeInsight/createSubclass/generics/before/Superclass.java b/java/java-tests/testData/codeInsight/createSubclass/generics/before/Superclass.java
new file mode 100644
index 0000000..1c0ec5c0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/createSubclass/generics/before/Superclass.java
@@ -0,0 +1,2 @@
+class Superclass<E extends Runnable, Q extends Runnable> {
+}
diff --git a/java/java-tests/testData/codeInsight/createSubclass/innerClass/after/Test.java b/java/java-tests/testData/codeInsight/createSubclass/innerClass/after/Test.java
new file mode 100644
index 0000000..d1d3e0b5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/createSubclass/innerClass/after/Test.java
@@ -0,0 +1,6 @@
+public class Test {
+    private interface Inner {}
+
+    public class InnerImpl implements Inner {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/createSubclass/innerClass/before/Test.java b/java/java-tests/testData/codeInsight/createSubclass/innerClass/before/Test.java
new file mode 100644
index 0000000..3b08f08
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/createSubclass/innerClass/before/Test.java
@@ -0,0 +1,3 @@
+public class Test {
+    private interface Inner {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/AbstractMethods.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/AbstractMethods.java
new file mode 100644
index 0000000..986e6f3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/AbstractMethods.java
@@ -0,0 +1,109 @@
+// abstract methods
+public class a {
+  <error descr="Missing method body, or declare abstract">void f();</error>
+
+}
+abstract class c1 {
+  abstract void f1();
+  <error descr="Missing method body, or declare abstract">int f2();</error>
+}
+
+interface ff {
+  abstract void f1();
+  void f2();
+}
+
+class x {
+  void f() {
+    <error descr="Method call expected">RuntimeException()</error>;
+    throw <error descr="Method call expected">RuntimeException()</error>;
+  }
+}
+
+// -------------------------------------------------------------
+<error descr="Class 'c2' must either be declared abstract or implement abstract method 'f()' in 'c2'">class c2</error> {
+  <error descr="Abstract method in non-abstract class">abstract</error> void f();
+}
+
+<error descr="Class 'c3' must either be declared abstract or implement abstract method 'iif()' in 'c4'">class c3 extends c4</error> {
+
+}
+
+abstract class c4 {
+  abstract void iif();
+}
+
+class c5 extends c6 implements i7 { public void ff(){} }
+abstract class c6 {}
+interface i7 { void ff(); }
+
+<error descr="Class 'c7' must either be declared abstract or implement abstract method 'ff()' in 'i7'">class c7 implements i7</error> {
+}
+
+class callabstract extends c4 {
+  void iif() {
+    <error descr="Abstract method 'iif()' cannot be accessed directly">super.iif()</error>;
+  }
+}
+
+
+abstract class c8 {
+    public abstract boolean equals(Object other);
+}
+
+<error descr="Class 'c9' must either be declared abstract or implement abstract method 'equals(Object)' in 'c8'">final class c9 extends c8</error> {
+}
+
+
+
+//------- if only Bottom were in other package, it should have been abstract --------------------------
+public abstract class AbstractTest {
+ 
+    abstract String getName();
+ 
+    abstract static class Middle extends AbstractTest {
+ 
+    }
+ 
+    static class Bottom extends Middle {
+        String getName() {
+            return null;
+        }
+    }
+}
+
+///////////
+abstract class cc1 {
+  abstract void f(int i);
+}
+abstract class cc2 extends cc1 {
+  abstract protected void f(int i);
+}
+class cc3 extends cc2 {
+  public void f(int i) {}
+}
+///////////////
+interface MyComparator {
+    int compare(Object t, Object t1);
+
+    boolean equals(java.lang.Object object);
+}
+class MyComparatorImpl implements MyComparator {
+    public int compare(Object o, Object o1) {
+        new MyComparator() {
+            public int compare(Object o, Object o1) {
+                return 0;
+            }
+        };
+        return 0;
+    }
+}
+//////////////// IDEADEV-6050
+interface Comparable {}
+
+interface PublicCloneable extends Cloneable {
+    Object clone() throws CloneNotSupportedException;
+}
+
+interface PublicCloneableExtension extends  Comparable, PublicCloneable {
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/AccessInner.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/AccessInner.java
new file mode 100644
index 0000000..2ab5a66
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/AccessInner.java
@@ -0,0 +1,55 @@
+// access problems in inner classes
+
+import java.awt.*;
+import java.beans.beancontext.BeanContextServicesSupport;
+import java.beans.beancontext.BeanContextServicesSupport.<error descr="'java.beans.beancontext.BeanContextServicesSupport.BCSSChild' has protected access in 'java.beans.beancontext.BeanContextServicesSupport'">BCSSChild</error>;
+
+class a extends Component {
+    void f() {
+        FlipBufferStrategy s = null;
+        int i = s.<error descr="'numBuffers' has protected access in 'java.awt.Component.FlipBufferStrategy'">numBuffers</error>;
+        s.<error descr="'createBuffers(int, java.awt.BufferCapabilities)' has protected access in 'java.awt.Component.FlipBufferStrategy'">createBuffers</error>(1,null);
+
+        // TODO
+        // now cannot distinquish private from package local in class files
+        //< error descr="'java.awt.Component.SingleBufferStrategy' has private access in 'java.awt.Component'">SingleBufferStrategy< /error> s2 = null;
+        //Object o = s2.< error descr="'caps' has private access in 'java.awt.Component.SingleBufferStrategy'">caps< /error>;
+    }
+
+
+
+        class ddd extends BeanContextServicesSupport {
+            BCSSChild.<error descr="'java.beans.beancontext.BeanContextServicesSupport.BCSSChild.BCSSCServiceClassRef' is not public in 'java.beans.beancontext.BeanContextServicesSupport.BCSSChild'. Cannot be accessed from outside package">BCSSCServiceClassRef</error> fd = null;
+            void ff() {
+                fd.<error descr="'addRequestor(java.lang.Object, java.beans.beancontext.BeanContextServiceRevokedListener)' is not public in 'java.beans.beancontext.BeanContextServicesSupport.BCSSChild.BCSSCServiceClassRef'. Cannot be accessed from outside package">addRequestor</error>(null,null);
+            }
+        }
+
+}
+
+
+interface I {
+  abstract class Imple implements I {
+    abstract void f();
+  }
+  abstract class Impl2 extends Imple {
+    abstract class Inner extends Impl2 {
+
+    }
+  }
+}
+
+
+class Class1 extends Class2 {
+  public void test() {
+    new <error descr="'Class2.Class2Inner' has private access in 'Class2'">Class2Inner</error>();
+    int i = <error descr="'Class2.Class2Inner' has private access in 'Class2'">Class2Inner</error>.i;
+  }
+}
+class Class2 {
+  private static class Class2Inner{
+    public static int i;
+    public Class2Inner() {
+    }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/AccessLevelClash.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/AccessLevelClash.java
new file mode 100644
index 0000000..7fa62b8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/AccessLevelClash.java
@@ -0,0 +1,87 @@
+// access level clashes
+interface i {
+ void ff();
+}
+
+public class a implements i {
+ void <error descr="'ff()' in 'a' clashes with 'ff()' in 'i'; attempting to assign weaker access privileges ('packageLocal'); was 'public'">ff</error>() {}
+}
+class ai implements i {
+ public <error descr="'ff()' in 'ai' clashes with 'ff()' in 'i'; attempting to use incompatible return type">int</error> ff() { return 0;}
+}
+
+class c2 implements i {
+ public c2() {}
+ public void ff() {}
+ protected void g() {}
+ private int fff(String s) { return 0; }
+}
+
+class c3 extends c2 {
+ protected c3() {}
+ private int g(int k) { return 2;}
+ private char fff(String s) { return 0; }
+}
+
+class c4 extends c3 {
+ private c4() {}
+ <error descr="'g()' in 'c4' clashes with 'g()' in 'c2'; attempting to assign weaker access privileges ('private'); was 'protected'">private</error> void g() {}
+ private String fff(String s) throws java.io.IOException { return null; }
+}
+class c4i extends c3 {
+ protected <error descr="'g()' in 'c4i' clashes with 'g()' in 'c2'; attempting to use incompatible return type">Object</error> g() {return null;}
+}
+
+// sibling inheritance
+abstract class c5 { abstract public int ff(); }
+interface i5 { void ff(); }
+<error descr="'ff()' in 'i5' clashes with 'ff()' in 'c5'; methods have unrelated return types">abstract class c6 extends c5 implements i5</error> {
+}
+
+class c7 { public String ff() { return null;} }
+<error descr="'ff()' in 'c7' clashes with 'ff()' in 'i5'; attempting to use incompatible return type">class c8 extends c7 implements i5</error> {
+}
+
+// interface should not clash with Object
+interface A {
+    Object clone() throws CloneNotSupportedException;
+    void finalize();
+
+    <error descr="'hashCode()' in 'A' clashes with 'hashCode()' in 'java.lang.Object'; attempting to use incompatible return type">void</error> hashCode();
+    <error descr="'equals(Object)' in 'A' clashes with 'equals(Object)' in 'java.lang.Object'; attempting to use incompatible return type">void</error> equals(Object o);
+    <error descr="'toString()' in 'A' clashes with 'toString()' in 'java.lang.Object'; attempting to use incompatible return type">void</error> toString();
+}
+
+interface ConflictWithObject {
+        Object clone() throws CloneNotSupportedException;
+}
+<error descr="'clone()' in 'java.lang.Object' clashes with 'clone()' in 'ConflictWithObject'; attempting to assign weaker access privileges ('protected'); was 'public'">class s implements ConflictWithObject</error> {
+
+}
+
+// parallel overriding methods from Object
+interface InderFace {
+  Object clone() throws CloneNotSupportedException;
+}
+
+interface SubInderFace extends InderFace {
+}
+
+<error descr="'clone()' in 'java.lang.Object' clashes with 'clone()' in 'InderFace'; attempting to assign weaker access privileges ('protected'); was 'public'">class Implementation implements SubInderFace</error> {
+}
+
+
+
+//SCR20002
+abstract class SCR20002A extends Object implements Runnable {
+  protected abstract int getSome();
+  private final Inner getInner() { return null; }
+  private class Inner { }
+}
+
+abstract class SCR20002B extends SCR20002A implements Runnable {
+  private final Inner getInner() { return null; }
+  private class Inner { }
+}
+abstract class SCR20002C extends SCR20002B implements Runnable {
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/AmbiguousMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/AmbiguousMethodCall.java
new file mode 100644
index 0000000..4155ee0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/AmbiguousMethodCall.java
@@ -0,0 +1,35 @@
+// Ambiguous method call
+
+class C61 {
+	public void foo(String s) {}
+	public void foo(Integer i) {}
+	public void foo2() {
+		foo<error descr="Ambiguous method call: both 'C61.foo(String)' and 'C61.foo(Integer)' match">(null)</error>;
+	}
+}
+
+class D61 extends C61 {
+	public void foo(Integer i) {}
+	public void foo2() {
+		foo<error descr="Ambiguous method call: both 'D61.foo(Integer)' and 'C61.foo(String)' match">(null)</error>;
+		foo<error descr="Cannot resolve method 'foo(int)'">(1)</error>;
+	}
+}
+class ex {
+    void f(String name, String[] i){}
+    void f(String name, ex i){}
+
+    void g() {
+        f<error descr="Ambiguous method call: both 'ex.f(String, String[])' and 'ex.f(String, ex)' match">("",null)</error>;
+    }
+}
+
+class XX {
+    XX() {}
+    void XX() {}
+
+    {
+        new XX().XX();
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/AnonBaseRef.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/AnonBaseRef.java
new file mode 100644
index 0000000..bef2526
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/AnonBaseRef.java
@@ -0,0 +1,11 @@
+class A{
+  {
+    class Local{
+      void foo(){}
+    }
+
+    new Local(){
+      void foo(){}
+    };
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/AnonInAnon.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/AnonInAnon.java
new file mode 100644
index 0000000..298668e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/AnonInAnon.java
@@ -0,0 +1,21 @@
+public class QQQ {
+  {
+    new Outer(){
+      void foo(){
+        new Inner(){
+          void method() {
+            super.method();
+          }
+        };
+      }
+    };
+  }
+}
+
+class Outer{
+  class Inner{
+    void method(){
+
+    }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/AssertExpression.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/AssertExpression.java
new file mode 100644
index 0000000..df5a2ec
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/AssertExpression.java
@@ -0,0 +1,12 @@
+// assert statement
+
+class a {
+  void f() {
+    assert false : <error descr="'void' type is not allowed here">System.out.println()</error>;
+
+    assert <error descr="Incompatible types. Found: 'int', required: 'boolean'">0</error>;
+    assert <error descr="Incompatible types. Found: 'char', required: 'boolean'">'a'</error>;
+    assert <error descr="Incompatible types. Found: 'java.lang.String', required: 'boolean'">""</error>; 
+    assert <error descr="Incompatible types. Found: 'void', required: 'boolean'">f()</error>;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/AssignToFinal.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/AssignToFinal.java
new file mode 100644
index 0000000..2049abc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/AssignToFinal.java
@@ -0,0 +1,72 @@
+// assign to final
+import java.io.*;
+import java.net.*;
+public class a21  {
+  final int fi;
+  {
+   fi = 4;
+  }
+  void f1(int i) {
+    final int j = 4;
+    <error descr="Cannot assign a value to final variable 'j'">j = 3</error>;
+    
+  }
+  void f2(final int i) {
+    final int j = 4;
+    <error descr="Cannot assign a value to final variable 'i'">i = 3</error>;
+    
+  }
+  void f3( int ip) {
+    <error descr="Cannot assign a value to final variable 'fi'">fi = 3</error>;
+    for (final int i = 0; i<3; <error descr="Cannot assign a value to final variable 'i'">i++</error>) {
+      int k = 4;  
+    }
+    final int i1 = 0;
+    <error descr="Cannot assign a value to final variable 'i1'">i1++</error>;
+    <error descr="Cannot assign a value to final variable 'i1'">--i1</error>;
+    int i2 = -i1 + ~i1;
+    final int j = (<error descr="Cannot assign a value to final variable 'j'">j=0</error>) == 1 || j==0 ? 9 : j;
+  }
+
+  static final boolean DEBUG = false;
+  void f4() {
+    if (DEBUG && (fi < 3 || fi >4)) return;
+  }
+}
+class B extends a21 {
+  public B() {
+    <error descr="Cannot assign a value to final variable 'fi'">fi = 0</error>;
+  }
+  void f() {
+     final Integer i;
+     new Runnable() {
+         public void run() {
+             <error descr="Cannot assign a value to final variable 'i'">i = new Integer(4)</error>;
+         }
+     };
+  }
+}
+
+class a21_2 {
+  final int i;
+  a21_2() {
+    i = 0;
+    new Runnable() {
+      public void run() {
+        <error descr="Cannot assign a value to final variable 'i'">i = 0</error>;
+      }
+    };
+  }
+}
+
+class Foo {
+  private final Foo next;
+
+  public Foo(Foo previous) {
+    this.next = null;
+
+    if (previous != null) {
+      <error descr="Cannot assign a value to final variable 'next'">previous.next = this</error>;
+    }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/AssignmentCompatible.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/AssignmentCompatible.java
new file mode 100644
index 0000000..e2f6b44
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/AssignmentCompatible.java
@@ -0,0 +1,46 @@
+/// assignment compatible types
+import java.io.*;
+import java.net.*;
+public class a  {
+  final int FI = 2;
+  final int FIBIG = 200000000;
+
+
+  void f() {
+    // not marked: OK, as literal value is in byte-range
+    byte b1 = 1;
+
+    // marked: OK, as literal value is out of byte-range and does not compile
+    <error descr="Incompatible types. Found: 'int', required: 'byte'">byte b2 = 1000;</error>
+   
+    // marked: OK, as char-value cannot be determined and does not compile
+    char c = 0;
+    <error descr="Incompatible types. Found: 'char', required: 'byte'">byte b3 = c;</error>
+
+    // marked: OK, as literal char-value is out of byte-range and does not compile
+    <error descr="Incompatible types. Found: 'char', required: 'byte'">byte b4 = '\u20AC';</error>
+
+    <error descr="Incompatible types. Found: 'int', required: 'byte'">byte b5 = '\n' - 4 + 1800;</error>
+    // literal char-value is in byte-range and compiles fine
+    byte b6 = '\u007F';
+    byte b7=(short) 0;
+    <error descr="Incompatible types. Found: 'long', required: 'byte'">byte b8 = (long)0;</error>
+
+    <error descr="Incompatible types. Found: 'double', required: 'float'">float f1 = 77.3;</error>
+    float f2 = 77.3F;
+
+    short s1 = 1 + FI;
+    <error descr="Incompatible types. Found: 'int', required: 'short'">short s2 = 1000000;</error>
+    short s3 = 'F' % FIBIG;
+
+    char c1 = 0;
+    <error descr="Incompatible types. Found: 'int', required: 'char'">char c2 = -1 + FIBIG;</error>
+    char c3=(byte) 0;
+    char c4=(short) 0;
+    <error descr="Incompatible types. Found: 'long', required: 'char'">char c5 = 0L;</error>
+
+    int i1='d';
+    <error descr="Incompatible types. Found: 'long', required: 'int'">int i2 = 1L;</error>
+
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/BreakOutside.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/BreakOutside.java
new file mode 100644
index 0000000..f2fd05b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/BreakOutside.java
@@ -0,0 +1,50 @@
+// break outside of
+public class a {
+
+  void f() {
+    <error descr="Break outside switch or loop">break;</error>
+    while (true) {
+      break;
+    }
+    do { break; } while (true);
+    switch (1) {
+      case 1: break;
+    }
+    for (;;) {
+      break;
+    }
+
+    for (;;) {
+      new ff() {
+        void f() { 
+          <error descr="Break outside switch or loop">break;</error>
+        }
+      };
+      break;
+    }
+
+
+    while (true) {
+      class s {
+       {
+         <error descr="Break outside switch or loop">break;</error>
+       }
+      }
+      break;
+    }
+
+    do {
+      class s {
+       {
+         <error descr="Break outside switch or loop">break;</error>
+       }
+      }
+      break;
+    } while (true);
+
+  }
+}
+
+class ff {
+ 
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/CanHaveBody.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/CanHaveBody.java
new file mode 100644
index 0000000..cdb7d19
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/CanHaveBody.java
@@ -0,0 +1,16 @@
+abstract public class a1 {
+  <error descr="Abstract methods cannot have a body">abstract void f()</error> {}
+  <error descr="Native methods cannot have a body">native void ff()</error> {}
+
+  void f2() {
+    new ii() {
+      public int iif(int i) {
+        return 0;
+      }
+    };
+  }
+}
+
+interface ii {
+  <error descr="Interface methods cannot have body">int iif(int i) throws Exception</error> { return 2; }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/CastFromVoid.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/CastFromVoid.java
new file mode 100644
index 0000000..49ea9c9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/CastFromVoid.java
@@ -0,0 +1,8 @@
+class K {
+    public K foo() {
+        return <error descr="Inconvertible types; cannot cast 'void' to 'K'">(K) bar()</error>;
+    }
+
+    private void bar() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/Casts.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/Casts.java
new file mode 100644
index 0000000..8622224
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/Casts.java
@@ -0,0 +1,102 @@
+// casts
+public class a  {
+ void f(i ii) {
+   boolean b;
+   b = <error descr="Inconvertible types; cannot cast 'int' to 'a'">2 instanceof a</error>;
+   b = <error descr="Inconvertible types; cannot cast 'null' to 'int'">null instanceof int</error>;
+   b = <error descr="Inconvertible types; cannot cast 'c3' to 'java.lang.Boolean'">(c3)null instanceof Boolean</error>;
+
+   b = ii instanceof i;
+   b = ((c2)ii) instanceof c4;
+   b = null instanceof a;
+   b = ii instanceof c3;
+   b = Boolean.valueOf("true") instanceof Boolean;
+   b = new Long(3) instanceof Number;
+   b = this instanceof a;
+   b = ii instanceof a;
+   b = this instanceof i;
+
+
+   // casts
+   c2 c2i = null;
+   c3 c3i = null;
+   c4 c4i = null;
+   Object o;
+   c4i = <error descr="Inconvertible types; cannot cast 'a' to 'c4'">(c4) this</error>;
+   o   = <error descr="Inconvertible types; cannot cast 'c2' to 'boolean'">(boolean) c2i</error>;
+   o   = <error descr="Inconvertible types; cannot cast 'c3' to 'java.lang.Integer'">(Integer) c3i</error>;
+   o   = <error descr="Inconvertible types; cannot cast 'c2' to 'a'">(a) c2i</error>;
+   o   = <error descr="Inconvertible types; cannot cast 'c3' to 'int'">(int) c3i</error>;
+
+   o = (a) ii;
+   o = (i) c4i; //cast to interface
+   o = (c3) c2i;
+   o = (c3) c3i;
+   o = (c3) c4i;
+   o = (Object) ii;
+   o = (iunrelated) ii;
+   o = (iunrelated) c2i;
+   o = (c4) c2i;
+   o = (c4) ii;
+   o   = <error descr="Inconvertible types; cannot cast 'i' to 'c5'">(c5) ii</error>;
+
+   int[] ai = null;
+   o = <error descr="Inconvertible types; cannot cast 'int[]' to 'byte[]'">(byte[])ai</error>;
+   o = <error descr="Inconvertible types; cannot cast 'int[]' to 'double[]'">(double[])ai</error>;
+   c3[] ac3i = null;
+   o = ac3i;
+   o = (c4[])ac3i;
+   o = (i[])ac3i;
+   Object[] results = null;
+   int index = (<error descr="Inconvertible types; cannot cast 'java.lang.Object[]' to 'java.lang.Integer'">(Integer) results</error>).intValue();
+
+
+   // arrays and Serializable/Cloneable/Object
+   int[] ai2 = (int[])o;
+   Cloneable cloneable = null;
+   ai2 = (int[]) cloneable;
+   java.io.Serializable serializable = null;
+   ai2 = (int[]) serializable;
+
+ }
+ 
+}
+
+interface iunrelated {}
+interface i {}
+class c2 implements i {
+ public c2() {}
+ public void f() {}
+ protected void g() {}
+}
+
+class c3 extends c2 {
+ protected c3() {}
+ private int g(int k) { return 0; }
+}
+
+final class c4 extends c3 {
+ private c4() {
+        int[] a=new int[3];
+        Cloneable s=a; 
+        java.io.Serializable ss = a;
+ }
+}
+final class c5 {}
+
+// clashing interfaces
+interface A {
+    void g();
+}
+interface B {
+    int g();
+}
+interface BB extends B {
+}
+class Foo {
+    void f(A a) {
+        B b = <error descr="Inconvertible types; cannot cast 'A' to 'B'">(B) a</error>;
+        BB b2 = <error descr="Inconvertible types; cannot cast 'A' to 'BB'">(BB) a</error>;
+        A a2 = <error descr="Inconvertible types; cannot cast 'BB' to 'A'">(A) b2</error>;
+    }
+}       
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/CatchType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/CatchType.java
new file mode 100644
index 0000000..74e0fb4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/CatchType.java
@@ -0,0 +1,32 @@
+// exception java.lang.Exception has already been caught/ illegal catch type
+
+import java.io.EOFException;
+import java.io.IOException;
+class Foo {
+    void f() {
+        try {
+        } catch (Throwable t) {
+        } catch (<error descr="Exception 'java.lang.Exception' has already been caught">Exception</error> e) {
+        }
+        try {
+        } catch (RuntimeException e) {
+        } catch (<error descr="Exception 'java.lang.NullPointerException' has already been caught">NullPointerException</error>  e) {
+        }
+        try {
+            throw new EOFException();
+        } catch (IOException e) {
+        } catch (<error descr="Exception 'java.io.EOFException' has already been caught">EOFException</error>  e) {
+        }
+
+        try {
+        }
+        catch (Exception e) {
+        }
+        catch (<error descr="Exception 'java.lang.Exception' has already been caught">Exception</error> e) {
+      
+        }
+    }
+
+
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/CatchUnknownMethod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/CatchUnknownMethod.java
new file mode 100644
index 0000000..da90b8b2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/CatchUnknownMethod.java
@@ -0,0 +1,11 @@
+public class MyClass {
+
+ public static void main(String[] args) {
+    try {
+      <error>unknownMethod</error>(); /* Red code - as expected  */
+    } catch (java.io.IOException e) { /* Unwanted red squiggly line  */
+      e.printStackTrace();
+    }
+  }
+
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ClassicRethrow.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ClassicRethrow.java
new file mode 100644
index 0000000..ce8e78b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ClassicRethrow.java
@@ -0,0 +1,153 @@
+class C {
+  static class E extends Exception { }
+  static class E1 extends E { }
+  static class E2 extends E { }
+  static class Err extends Error { }
+
+  void m1() {
+    try {
+      throw new E1();
+    }
+    catch (Exception e) {
+      try {
+        // throws Exception before JDK7
+        <error descr="Unhandled exception: java.lang.Exception">throw e;</error>
+      }
+      catch (E2 e2) { }
+    }
+  }
+
+  void m2() {
+    try {
+      throw new E1();
+    }
+    catch (Exception e) {
+      try {
+        e = new E1(); // no effect before JDK7
+        <error descr="Unhandled exception: java.lang.Exception">throw e;</error>
+      }
+      catch (E2 e2) { }
+    }
+  }
+
+  void m3(boolean f) throws E1, E2 {
+    try {
+      if (f)
+        throw new E1();
+      else
+        throw new E2();
+    }
+    catch (Exception e) {
+      // throws Exception before JDK7
+      <error descr="Unhandled exception: java.lang.Exception">throw e;</error>
+    }
+  }
+
+  void m4(boolean f) throws E1, E2 {
+    try {
+      if (f)
+        throw new E1();
+      else
+        throw new E2();
+    }
+    catch (Exception e) {
+      e = new E2(); // no effect before JDK7
+      <error descr="Unhandled exception: java.lang.Exception">throw e;</error>
+    }
+  }
+
+  void m5(boolean f) throws E {
+    try {
+      if (f)
+        throw new E1();
+      else if (!f)
+        throw new E2();
+      else
+        throw (Throwable)new E();
+    }
+    catch (E1 e1) { }
+    catch (final Exception e) {
+      // throws Exception
+      <error descr="Unhandled exception: java.lang.Exception">throw e;</error>
+    }
+    catch (Throwable t) { }
+  }
+
+  void m6(boolean f) throws E2 {
+    try {
+      if (f)
+        throw new E1();
+      else if (!f)
+        throw new E2();
+    }
+    catch (E1 e1) { }
+    catch (final Exception e) {
+      // throws Exception before JDK7
+      <error descr="Unhandled exception: java.lang.Exception">throw e;</error>
+    }
+  }
+
+  void m7() {
+    try {
+      throw new E1();
+    }
+    catch (E e) {
+      try {
+        throw e;
+      }
+      catch (E x) {
+        // no chained exception type evaluation
+        <error descr="Unhandled exception: C.E">throw x;</error>
+      }
+    }
+  }
+
+  void m8() {
+    try {
+      throw new E1();
+    }
+    catch (E e) {
+      E x = e;
+      // no chained exception type evaluation
+      <error descr="Unhandled exception: C.E">throw x;</error>
+    }
+  }
+
+  void m9_1() {
+    try {
+      System.out.println();
+    }
+    catch (Throwable t) {
+      // throws Throwable before JDK7
+      <error descr="Unhandled exception: java.lang.Throwable">throw t;</error>
+    }
+  }
+
+  void m9_2() {
+    try {
+      System.out.println();
+    }
+    catch (Error e) {
+      throw e;
+    }
+  }
+
+  void m9_3() {
+    try {
+      System.out.println();
+    }
+    catch (Err e) {
+      throw e;
+    }
+  }
+
+  void m9_4() {
+    try {
+      if (false) throw new RuntimeException();
+    }
+    catch (Exception e) {
+      // throws Exception before JDK7
+      <error descr="Unhandled exception: java.lang.Exception">throw e;</error>
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ComputeConstant.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ComputeConstant.java
new file mode 100644
index 0000000..43a794d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ComputeConstant.java
@@ -0,0 +1,20 @@
+class A_CR{
+  public static final int CONST = <error descr="Cannot resolve symbol 'CONSTX'">CONSTX</error>;
+
+  {
+    switch(0){
+      case <error descr="Constant expression required">CONST</error>:
+    }
+  }
+}
+
+class AClass {
+    private static final String SPACE = " ";
+    class s {
+        private static final String RET_VAL =
+                    "Roger" +
+                    SPACE +
+                    SPACE + // comment and uncomment this line
+                    " Dodger";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/CtrCallIsFirst.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/CtrCallIsFirst.java
new file mode 100644
index 0000000..53059fb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/CtrCallIsFirst.java
@@ -0,0 +1,63 @@
+// call to super must be first
+public class a {
+ a() {}
+ a(int i) {}
+}
+
+class b extends a {
+ b() {
+   int i = 3;
+   <error descr="Call to 'super()' must be first statement in constructor body">super()</error>;
+ }
+ b(int i) {
+   this();
+   <error descr="Call to 'super()' must be first statement in constructor body">super(2)</error>;
+ }
+ b(char i) {
+   super(4);
+   <error descr="Call to 'this()' must be first statement in constructor body">this()</error>;
+ }
+
+ b(String s) {
+   try {
+     <error descr="Call to 'super()' must be first statement in constructor body">super(2)</error>;
+   }
+   finally {
+   }
+ }
+ b(String s, int i) {
+   {
+     <error descr="Call to 'super()' must be first statement in constructor body">super(2)</error>;
+   }
+ }
+
+    void f() {
+      <error descr="Call to 'super()' must be first statement in constructor body">super()</error>;
+    }
+    void g() {
+      <error descr="Call to 'this()' must be first statement in constructor body">this()</error>;
+    }
+
+}
+class O extends <error descr="No enclosing instance of type 'A' is in scope">A.B</error>
+{
+  public O(A a)
+  {
+      int i = 0;
+      <error descr="Call to 'a.super()' must be first statement in constructor body">a.super()</error>;
+  }
+  public O(A a,int i)
+  {
+      a.super();
+      i = 0;
+  }
+}
+
+class A
+{
+  class B
+  {
+      class C{}
+  }
+
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/CyclicInheritance.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/CyclicInheritance.java
new file mode 100644
index 0000000..141b592
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/CyclicInheritance.java
@@ -0,0 +1,40 @@
+// cyclic inhertiance
+import java.io.*;
+import java.net.*;
+
+<error descr="Cyclic inheritance involving 'Foo'">class Foo extends Foo</error> {
+}
+
+
+interface Foo1 extends <error descr="Cannot resolve symbol 'Bar'">Bar</error> {
+    interface Bar {
+    }
+}
+
+
+<error descr="Cyclic inheritance involving 'c1'">class c1 extends c2</error> {}
+<error descr="Cyclic inheritance involving 'c2'">class c2 extends c1</error> {}
+
+
+
+class a1 {
+    class b extends a1 {
+    }
+}
+
+
+class a {
+ static class sb extends a {
+   class c extends a {
+     void f() {
+       class d extends a {
+       }
+     }
+   }
+ }
+ class b extends sb {
+  class c extends a {
+  }
+ }
+}
+         
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/DefaultPackageClassInStaticImport.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/DefaultPackageClassInStaticImport.java
new file mode 100644
index 0000000..afadb37
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/DefaultPackageClassInStaticImport.java
@@ -0,0 +1,12 @@
+import static <error descr="Cannot resolve symbol 'MyConstants'">MyConstants</error>.*;
+import <error descr="Cannot resolve symbol 'MyConstants'">MyConstants</error>;
+
+public class MyClient
+{
+    private int field = MyConstants.CONSTANT;
+}
+
+class MyConstants
+{
+    public static final int CONSTANT = 1;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/Deprecated.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/Deprecated.java
new file mode 100644
index 0000000..68482c3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/Deprecated.java
@@ -0,0 +1,89 @@
+// deprecated
+
+class a  {
+  /**
+  * @deprecated
+  */
+  void f() {}
+
+  /**
+  * @deprecated
+  */
+  int dep;
+  int notdep;
+
+  /**
+  * @deprecated
+  */
+  a(int i,int j,int k) {
+     new <warning descr="'a(int, int, int)' is deprecated">a</warning>(k+i+j,<warning descr="'dep' is deprecated">dep</warning>,notdep);
+  }
+}
+
+class b extends a {
+  void <warning descr="Overrides deprecated method in 'a'">f</warning>() {
+    super.<warning descr="'f()' is deprecated">f</warning>();
+  }
+
+  b() {
+    <warning descr="'b(int)' is deprecated">this</warning>(1);
+  }
+
+  /**
+  * @deprecated
+  */
+  b(int i) {
+    <warning descr="'a(int, int, int)' is deprecated">super</warning>(0,0,i);
+    System.out.print(i);
+  }
+}
+
+class c extends b {
+  // b.f is not deprecated 
+  void f() {}
+}
+
+interface i1 {
+  /**
+  * @deprecated
+  */
+  void f();
+}
+abstract class ac1 {
+  /**
+  * @deprecated
+  */
+  public abstract void f();
+}
+
+class ci1 extends ac1 implements i1 {
+ // no chance not to implement it
+ public void f() {}
+}
+
+class Aaa {
+  public Aaa(String s) {
+    System.out.println(s);
+  }
+
+  /**
+   * @deprecated
+   */
+  public Aaa() {}
+
+  public void foo() {
+    new Aaa("asdasdad") {};
+  }
+}
+
+class Anonym {
+    /**
+     * @deprecated
+     */
+    public Anonym(String sss) {
+        System.out.println(sss);
+    }
+    public void foo() {
+        new <warning descr="'Anonym(java.lang.String)' is deprecated">Anonym</warning>("asdasd") {};
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/DotBeforeDecl.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/DotBeforeDecl.java
new file mode 100644
index 0000000..058b405
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/DotBeforeDecl.java
@@ -0,0 +1,7 @@
+public class A_DBD {
+  {
+    int field = 0;
+    field.
+    <error descr="Cannot resolve symbol 'String'">String</error> s = null;
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/DuplicateClass.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/DuplicateClass.java
new file mode 100644
index 0000000..64f4766
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/DuplicateClass.java
@@ -0,0 +1,12 @@
+// duplicates in extends
+
+class a {
+}
+
+class b extends <error descr="Duplicate class: 'a'">a</error>, <error descr="Duplicate class: 'a'">a</error> {
+}
+
+interface i {}
+
+class c implements <error descr="Duplicate class: 'i'">i</error>, <error descr="Duplicate class: 'i'">i</error> {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/DuplicateClassMethod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/DuplicateClassMethod.java
new file mode 100644
index 0000000..a5d74ebe
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/DuplicateClassMethod.java
@@ -0,0 +1,75 @@
+public class a {
+  <error descr="'f(int)' is already defined in 'a'">void f(int i)</error> { }
+  <error descr="'f(int)' is already defined in 'a'">void f(int i)</error> {
+
+    new c1() {
+      <error descr="'f1()' is already defined in 'Anonymous class derived from c1'">public void f1()</error> {}
+      <error descr="'f1()' is already defined in 'Anonymous class derived from c1'">public void f1()</error> {}
+    };
+  }
+}
+abstract class c1 {
+  abstract void f1();
+}
+
+interface ii {
+  abstract void f1();
+  void f2();
+}
+
+<error descr="Duplicate class: 'a'">class a</error> {
+}
+
+class Foo {
+    void f() {
+        class Bar {
+        }
+        <error descr="Duplicate class: 'Bar'">class Bar</error> {
+        }
+    }
+}
+
+
+class c2 {
+  class c3 {
+    void f() {
+      <error descr="Duplicate class: 'c2'">class c2</error> {
+      }
+    }
+  }
+}
+
+
+class cont {
+        class B {
+        }
+        {
+            class B {
+            }
+        }
+        <error descr="Duplicate class: 'B'">class B</error> {
+        }
+}
+class cont2 {
+        {
+            class B {
+            }
+        }
+        class B {
+        }
+}
+class ok {
+        class Local{};
+        class AnotherLocal {
+            class Local {};
+            void bar() {
+                class Local {};
+                Local l;
+            }
+        }
+}
+
+class ok2 {
+  public ok2() {}
+  public void ok2() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/DuplicateClassMethodTop.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/DuplicateClassMethodTop.java
new file mode 100644
index 0000000..642e350
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/DuplicateClassMethodTop.java
@@ -0,0 +1,75 @@
+public class a {
+  void f(int i) { }
+  <error descr="'f(int)' is already defined in 'a'">void f(int i)</error> {
+
+    new c1() {
+      public void f1() {}
+      <error descr="'f1()' is already defined in 'Anonymous class derived from c1'">public void f1()</error> {}
+    };
+  }
+}
+abstract class c1 {
+  abstract void f1();
+}
+
+interface ii {
+  abstract void f1();
+  void f2();
+}
+
+<error descr="Duplicate class: 'a'">class a</error> {
+}
+
+class Foo {
+    void f() {
+        class Bar {
+        }
+        <error descr="Duplicate class: 'Bar'">class Bar</error> {
+        }
+    }
+}
+
+
+class c2 {
+  class c3 {
+    void f() {
+      <error descr="Duplicate class: 'c2'">class c2</error> {
+      }
+    }
+  }
+}
+
+
+class cont {
+        class B {
+        }
+        {
+            <error descr="Duplicate class: 'B'">class B</error> {
+            }
+        }
+        <error descr="Duplicate class: 'B'">class B</error> {
+        }
+}
+class cont2 {
+        {
+            class B {
+            }
+        }
+        class B {
+        }
+}
+class ok {
+        class Local{};
+        class AnotherLocal {
+            class Local {};
+            void bar() {
+                class Local {};
+                Local l;
+            }
+        }
+}
+
+class ok2 {
+  public ok2() {}
+  public void ok2() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/DuplicateSwitchLabels.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/DuplicateSwitchLabels.java
new file mode 100644
index 0000000..d2f7c626
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/DuplicateSwitchLabels.java
@@ -0,0 +1,66 @@
+// duplicate labels
+import java.io.*;
+import java.net.*;
+
+public class a  {
+
+  final int FI = 4;
+
+  void f(final int i) {
+    switch (i) {
+      <error descr="Duplicate default label">default:</error> break;
+      case 1: break;
+      <error descr="Duplicate default label">default:</error> break;
+    }
+
+    switch (i) {
+      case <error descr="Duplicate label '1'">1</error>: break;
+      case <error descr="Duplicate label '1'">1</error>: break;
+    }
+
+    switch (i) {
+      case <error descr="Duplicate label '1'">FI/2 - 1</error>: break;
+      case <error descr="Duplicate label '1'">(1 + 35/16)%2</error>: break;
+      case FI - 8: break;
+    }
+
+         final byte b = 127;
+
+         switch(i) {
+            case <error descr="Duplicate label '127'">b</error>:
+               System.out.println("b=" + b + ";");
+            case <error descr="Duplicate label '127'">127</error>:
+               System.out.println("MySwitch.MySwitch");
+         }
+
+
+    // internalize strings
+    switch (0) {
+        case 0:
+        case "\410" == "!0" ? 1 : 0:
+        case ""==""+"" ? 3 : 0:
+    }
+
+        switch (0) {
+        case 0:
+        //case 1./0 == Double.POSITIVE_INFINITY ? 1 : 0:
+
+        //case 1./0 == Float.POSITIVE_INFINITY ? 2 : 0:
+
+        // commented out ref
+        // does not work when running under JRE
+        //case -1./0 == Double.NEGATIVE_INFINITY ? 3 : 0:
+        //case -1./0 == Float.NEGATIVE_INFINITY ? 4 : 0:
+        //case Double.POSITIVE_INFINITY == Float.POSITIVE_INFINITY ? 5 : 0:
+        //case Double.NEGATIVE_INFINITY == Float.NEGATIVE_INFINITY ? 6 : 0:
+        //case Double.NaN != Float.NaN ? 7 : 0:
+        //case Integer.MIN_VALUE == -2.147483648e9 ? 8 : 0:
+        //case Integer.MIN_VALUE == -2.14748365e9f ? 9 : 0:
+        //case Long.MIN_VALUE == -9.223372036854776e18 ? 10 : 0:
+        //case Long.MIN_VALUE == -9.223372e18f ? 11 : 0:
+
+
+
+        }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/EnclosingInstance.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/EnclosingInstance.java
new file mode 100644
index 0000000..65dd6ac
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/EnclosingInstance.java
@@ -0,0 +1,97 @@
+// no enclosing instance when inheriting inner class
+
+
+class A57 {
+    class X  {
+    }
+    void f() {
+        class XL extends A57.X {
+        }
+
+    }
+    class XXL extends A57.X {
+    }
+}
+class B57 {
+    class X extends <error descr="No enclosing instance of type 'A57' is in scope">A57.X</error> {
+    }
+}
+class C57 extends <error descr="No enclosing instance of type 'B57' is in scope">B57.X</error> {
+}
+
+
+class inner_holder {
+  class inner {}
+}
+
+public class C1_57 extends inner_holder {
+  // inner instance available through inheritance
+  protected class c extends inner { 
+    private class iii extends inner {}
+  }
+}
+
+/////////////////////////////////////
+class ParentA {
+    class InnerA {
+
+    }
+}
+
+class ParentB extends ParentA {
+    static class InnerB extends <error descr="No enclosing instance of type 'ParentA' is in scope">InnerA</error> {
+
+    }
+    class InnerC extends InnerA {
+
+    }
+}
+////////////////////////
+class c {
+    static class s {
+        void f() {
+            Object o = this;
+        }
+    }
+    void f() {}
+}
+
+class cc {
+    static class sc extends c {
+        void f() {
+            super.f();
+        }
+    }
+}
+///////////////////////////
+class A
+{
+  class B
+  {
+      class C{}
+  }
+}
+class AB extends A.B {
+  AB(A a) {
+    a.super();
+  }
+  AB() {
+    this(new A());
+  }
+}
+class ABIllegal extends <error descr="No enclosing instance of type 'A' is in scope">A.B</error> {
+  ABIllegal(A a) {
+  }
+  ABIllegal() {
+    this(new A());
+  }
+}
+
+
+public class A42 {
+  class B {}
+}
+
+class D42 extends A42.B {
+  D42() {new A42().super();}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ExceptionNeverThrown.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ExceptionNeverThrown.java
new file mode 100644
index 0000000..5158a74
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ExceptionNeverThrown.java
@@ -0,0 +1,105 @@
+// Exception is never thrown in method
+
+import java.io.*;
+import java.sql.*;
+
+class a {
+    private void f() throws <warning descr="Exception 'java.io.IOException' is never thrown in the method">IOException</warning> {
+    }
+    public void usef() throws Exception { 
+        f(); //avoid unused f()
+    }
+
+    private void f2() throws <warning descr="Exception 'java.io.IOException' is never thrown in the method">IOException</warning> {
+      try {
+        throw new IOException();
+      }
+      finally {
+        return;
+      }
+    }
+    public final void f3() throws <warning descr="Exception 'java.io.IOException' is never thrown in the method">IOException</warning> {
+    }
+    public static void f4() throws <warning descr="Exception 'java.io.IOException' is never thrown in the method">IOException</warning> {
+    }
+
+    public void usef2() throws Exception { 
+        f2(); //avoid unused f()
+    }
+    public void usef3() throws Exception { 
+        f3(); //avoid unused f()
+    }
+    public void usef4() throws Exception { 
+        f4(); //avoid unused f()
+    }
+
+}
+
+final class Final {
+  {
+      new Object() {
+          void f() throws <warning descr="Exception 'java.io.IOException' is never thrown in the method">IOException</warning> {}
+      };
+  }
+  
+  void f() throws <warning descr="Exception 'java.io.IOException' is never thrown in the method">IOException</warning> {}
+  public void f1() throws <warning descr="Exception 'java.io.IOException' is never thrown in the method">IOException</warning> {}
+  protected void f2() throws <warning descr="Exception 'java.io.IOException' is never thrown in the method">IOException</warning> {}
+}
+
+
+
+class a1 {
+    a1() throws <warning descr="Exception 'java.io.IOException' is never thrown in the method">java.io.IOException</warning>, <warning descr="Exception 'java.sql.SQLException' is never thrown in the method">SQLException</warning>{
+    }
+
+}
+
+class b1 extends a1 {
+    b1() throws IOException, SQLException {
+    }
+}
+
+////////////////////////////////
+public class FooThrow
+{
+  final Foo foo = new Foo();  // Can throw FooException
+  FooThrow() throws Foo {
+  }
+}
+class Foo extends Exception {
+    public Foo() throws Foo {
+        throw new Foo();
+    }
+}
+//////////////
+class H {
+    public H() throws FileNotFoundException {            
+    }
+
+    {
+        if(true) {
+            throw new FileNotFoundException();
+        }
+    }
+}
+
+class PossibleIdeaBugs implements java.io.Serializable {
+
+    private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+    }
+
+    private void readObject(java.io.ObjectInputStream in)
+            throws java.io.IOException, ClassNotFoundException {
+    }
+
+
+    private Object writeReplace() throws java.io.ObjectStreamException {
+            return this;
+    }
+
+    private Object readResolve() throws java.io.ObjectStreamException {
+        return null;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ExceptionNeverThrownInTry.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ExceptionNeverThrownInTry.java
new file mode 100644
index 0000000..38782c3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ExceptionNeverThrownInTry.java
@@ -0,0 +1,13 @@
+import java.io.*;
+import java.sql.*;
+
+////////////
+class x {
+  void f() {
+    try {
+      int i = 0;
+    }
+    catch (<error descr="Exception 'java.io.IOException' is never thrown in the corresponding try block">IOException e</error>) {
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ExplicitConstructorInvocation.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ExplicitConstructorInvocation.java
new file mode 100644
index 0000000..0bb53bf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ExplicitConstructorInvocation.java
@@ -0,0 +1,42 @@
+class A {
+    class S {
+    }
+
+    class C extends S {
+        C(A c) {
+            c.super();
+        }
+        C(B b) {
+            b.super();
+        }
+    }
+}
+class B extends A {}
+
+class A1 {
+    static class S {
+    }
+
+    class C extends S {
+        C(A1 c) {
+            <error descr="'A1.S' is not an inner class">c</error>.super();
+        }
+    }
+}
+
+class C2 {
+    C2(String c){
+        <error descr="'java.lang.Object' is not an inner class">c</error>.super();
+    }
+}
+
+class A3 {
+    class S {
+    }
+
+    class C extends S {
+        C(String c) {
+          <error descr="Incompatible types. Found: 'java.lang.String', required: 'A3'">c</error>.super();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ExpressionsInSwitch.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ExpressionsInSwitch.java
new file mode 100644
index 0000000..5c725d5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ExpressionsInSwitch.java
@@ -0,0 +1,54 @@
+// constant expressions in switch
+
+import java.util.Date;
+
+class a {
+ final int f = -3;
+
+ void f1() {
+        switch (0) {
+        case <error descr="Constant expression required">new Integer(0).MAX_VALUE</error>:
+        }
+        int k=0;
+        switch (0) {
+        case <error descr="Constant expression required">false ? k : 0</error>:
+        case <error descr="Constant expression required">true ? 1 : k</error>:
+        }
+        boolean b=true;
+        switch (0) {
+        case <error descr="Constant expression required">false && b ? 0 : 1</error>:
+        case <error descr="Constant expression required">true || b ? 2 : 0</error>:
+        }
+        final Object obj="";
+        switch (0) {
+        case <error descr="Constant expression required">obj=="" ? 0 : 0</error>:
+        case <error descr="Constant expression required">this.f</error>:
+        }
+
+    int i = 0;
+    final Integer I = null;
+    switch (0) {
+      case <error descr="Constant expression required">i</error>:
+      case <error descr="Constant expression required">I.MAX_VALUE</error>:
+      case Integer.MAX_VALUE:
+    }
+
+ }
+
+ static class b {
+   static final int c = 8;
+ }
+ void cf1() {
+    final int i = 9;
+    switch (0) {
+      case i:
+      case 2+4:
+      case f:
+      case a.b.c:
+    }
+        switch (0) {
+        case true ^ true ? 0 : 0:
+        }
+
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ExtendMultipleClasses.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ExtendMultipleClasses.java
new file mode 100644
index 0000000..666b2ec
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ExtendMultipleClasses.java
@@ -0,0 +1,16 @@
+// multiple extend
+
+import java.io.*;
+
+class c1 {}
+class c2 implements Serializable, Externalizable {
+    public void writeExternal(ObjectOutput out) throws IOException {
+    }
+
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+    }
+}	
+class a <error descr="Class cannot extend multiple classes">extends c1,c2</error> {
+
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ExtendsClause.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ExtendsClause.java
new file mode 100644
index 0000000..5acef9b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ExtendsClause.java
@@ -0,0 +1,17 @@
+class s {
+  int i;
+  class inn extends <error descr="Class name expected">i</error> {}
+}
+
+interface IFoo {
+    public static final double UNKNOWN = -1;
+}
+class Foo implements <error descr="Class name expected">IFoo.UNKNOWN</error> {
+  // error should be shown here
+}
+class Foo2 extends <error descr="Class name expected">IFoo.UNKNOWN</error> {
+  // error should be shown here
+}
+class Xss implements <error descr="Class name expected">Integer.MAX_VALUE</error> {}
+class Xss2 extends <error descr="Class name expected">Integer.MAX_VALUE</error> {}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/FieldDoubleInitialization.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/FieldDoubleInitialization.java
new file mode 100644
index 0000000..c3de37b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/FieldDoubleInitialization.java
@@ -0,0 +1,118 @@
+// fields double initialization
+import java.io.*;
+import java.net.*;
+class Foo {
+    final int k;
+    final int ff = 5;
+    Foo(int i) {
+        <error descr="Variable 'k' might already have been assigned to">k</error> =1;
+    }
+    {
+        k=0;
+    }
+}
+
+class c2 {
+    static final int k;
+    static {
+        k=0;
+    }
+    c2() {
+      int i = k;
+    }
+    static {
+       <error descr="Variable 'k' might already have been assigned to">k</error> =1;
+    }
+}
+
+class c3 {
+    final int k;
+    {
+        k=0;
+    }
+    c3() {
+      int i = k;
+    }
+    {
+       <error descr="Variable 'k' might already have been assigned to">k</error> =1;
+    }
+}
+
+class c4 {
+    final int k;
+    {
+        k=0;
+    }
+    c4(int i) {
+      if (false) 
+        <error descr="Variable 'k' might already have been assigned to">k</error> =1;
+    }
+    c4() {
+      this(0);
+      <error descr="Variable 'k' might already have been assigned to">k</error> =1;
+    }
+}
+// redirected ctrs
+class c5 {
+    <error descr="Variable 'k' might not have been initialized">final int k</error>;
+    c5(int i) {
+      k =1;
+    }
+    c5() {
+      this(0);
+      <error descr="Variable 'k' might already have been assigned to">k</error> =1;
+    }
+
+
+    c5(char c) {
+    }
+    c5(int i, int j) {
+      this('c');
+      k = 5;
+    }
+    c5(String s) {
+      this(0,0);
+      <error descr="Variable 'k' might already have been assigned to">k</error> =1;
+    }
+}
+
+class c6 {
+    final int i;
+    c6() {
+        this(0);
+    }
+    c6(int i) {
+        this(0,0);
+    }
+    c6(int k, int l) {
+        i = k;
+    }
+}
+
+
+
+// multiple initalizers
+class c7 {
+ private final String x;
+ {
+   x = "Hello";
+ }
+
+ private final String y;
+ {
+   y = x; 
+ }
+
+ private static int i;
+ {
+   int j = 0;
+ }
+
+ static {
+   i = 9;
+ }
+
+ {
+   <error descr="Variable 'y' might already have been assigned to">y</error> = ""+i;
+ }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/FinalFieldInit.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/FinalFieldInit.java
new file mode 100644
index 0000000..17bd29a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/FinalFieldInit.java
@@ -0,0 +1,223 @@
+// final Fields initialization
+import java.io.*;
+import java.net.*;
+import java.awt.event.*;
+
+public class a  {
+  /**
+   * javadoc should not be highlighted
+   */ 
+  <error descr="Variable 'javaDoced' might not have been initialized">final int javaDoced</error>;
+
+  <error descr="Variable 'sfi1' might not have been initialized">static final int sfi1</error>;
+  <error descr="Variable 'sfi2' might not have been initialized">static final int sfi2</error>;
+  <error descr="Variable 'fi1' might not have been initialized">final int fi1</error>;
+  <error descr="Variable 'fi2' might not have been initialized">final int fi2</error>;
+
+  class inner {
+    <error descr="Variable 'fii' might not have been initialized">final int fii</error>;
+  }
+  final int fi3;
+  final int fi4;
+
+
+  static final int csfi1 = 0;
+  static final int csfi2 = csfi1 + 13 / 5;
+  static final int csfi3; 
+  static {
+   if (csfi1 < 13) {
+     csfi3 = csfi2 + (csfi1 == 4 ? 5 : csfi2/13);
+   }
+   else {
+     csfi3 = 0;
+     sfi2 = 2;
+   }
+  }
+
+
+  final int cifi1 = 1;
+  final int cifi2 = ff();
+  final int cifi3;
+
+  int ff() { 
+    int i = cifi1 + cifi2 + cifi3 + fi3 + fi4;
+    return i; 
+  }
+
+  {
+   switch (cifi1) {
+    case 2: cifi3 = 2; break;
+    case 1: cifi3 = 20; break;
+    case 0: cifi3 = 21; break;
+    default: cifi3 = 22; break;
+   }
+  }
+
+  final int cifi4;
+  a() {
+    cifi4 = 4;
+    int i = <error descr="Variable 'fi3' might not have been initialized">fi3</error>;
+    fi3 = 3;
+    a ainst = null;
+    fi4 = ainst.fi4;
+  }
+  a(int i) {
+    this.cifi4 = i;
+    fi2 = 3;
+    fi3 = 3;
+    a ainst = null;
+    fi4 = ainst.fi4;
+  }
+  a(String s) {
+    this(0);
+    int i = fi3;
+
+  }
+}
+
+class Test {
+  // access from within inner class OK
+    final boolean FB;
+    {
+      class s {
+        boolean b = FB;
+      }
+      FB = true;
+
+    }
+    private final String text;
+    public Test() {
+      new ActionListener() {
+        public void actionPerformed(ActionEvent e) {
+          doSomething(text);////
+        }
+      };
+      text = "Hello world";
+    }
+
+    private void doSomething(String value) {
+    }
+}
+
+// multiple initalizers
+class c1 {
+ private final String x;
+ {
+   x = "Hello";
+ }
+
+ private final String y;
+ {
+   y = x; 
+ }
+ void f() {
+   String s = x+y;
+ }
+}
+
+class c2 {
+    static { 
+    }
+    private static final int limit;
+    static {
+        limit = 5;
+    }
+    final String s;
+    int k = <error descr="Variable 's' might not have been initialized">s</error>.length();
+    final String c;
+    int k2 = <error descr="Variable 'c' might not have been initialized">c</error>.length();
+    {
+        s = "";
+    }
+
+    public c2() {
+        c = "";
+    }
+    // its ok
+    int k3 = c.length();
+
+    c2(int i) {
+      this();
+    }
+}
+
+class UninitializedFinal2 {
+    <error descr="Variable 's' might not have been initialized">private final String s</error>;
+
+    UninitializedFinal2(){
+        try {
+        }
+        finally {
+        }
+    }
+}
+class UninitedFinalFied {
+
+	<error descr="Variable 'string' might not have been initialized">private final String string</error>;
+
+	public UninitedFinalFied() throws IOException {
+		init();
+	}
+
+	private void init() throws IOException {}
+}
+class AssertFinalFied {
+	private final String string;
+
+	public AssertFinalFied(boolean b) throws Exception {
+	     assert b;
+	     string = null;
+	}
+}
+
+class a20Exotic {
+    int n=k=0;
+    final int k;
+    final int k2;
+    int n2 = k==0 ? (k2=9) : (k2=0);
+}
+
+public class cX {
+    final int i;
+    cX() {
+        this(1);
+        int k = i;
+    }
+    cX(int d) {
+        i = d;
+    }
+}
+
+// http://www.intellij.net/tracker/idea/viewSCR?publicId=20097
+class Lemma {
+    public Lemma() {
+        name.hashCode();
+    }
+    private final String name;
+    {   name = "Andy";
+    }
+}
+
+class correct {
+    void f() {
+        final Object o;
+        o = new Object();
+        new Object() {
+          { o.toString(); }
+        }; 
+    }
+}
+
+public class X {
+    final int i;
+    X() {
+        try {
+            i = 0;
+        }
+        finally {
+
+        }
+    }
+}
+
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/IDEADEV11877.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/IDEADEV11877.java
new file mode 100644
index 0000000..7dfc002
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/IDEADEV11877.java
@@ -0,0 +1,7 @@
+interface MyCloneable {
+
+    //protected method from java.lang.Object is not implicitly declared in interface with no base interfaces
+    <error descr="'clone()' in 'MyCloneable' clashes with 'clone()' in 'java.lang.Object'; attempting to use incompatible return type">int</error> clone();
+
+    <error descr="'toString()' in 'MyCloneable' clashes with 'toString()' in 'java.lang.Object'; attempting to use incompatible return type">int</error> toString();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/IDEADEV11919.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/IDEADEV11919.java
new file mode 100644
index 0000000..8181b03
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/IDEADEV11919.java
@@ -0,0 +1,55 @@
+interface Bar {
+    void DoBar();
+}
+
+abstract class Foo {
+    public Foo(Bar b) {
+    }
+}
+
+class Inh extends Foo {
+    public Integer myField = new Integer(0);
+
+    public Inh() {
+        super(new Bar() {
+            public void DoBar() {
+                <error descr="Cannot reference 'Inh.this' before supertype constructor has been called">Inh.this</error>.myField.toString();
+            }
+        });
+
+        class E extends Foo {
+            E() {
+                super(new Bar() {
+                    public void DoBar() {
+                        Inh.this.myField.toString();
+                    }
+                });
+            }
+
+            public void DoBar() {
+                Inh.this.myField.toString();
+            }
+        }
+        Inh.this.myField.toString();
+    }
+
+    public Inh(Bar b) {
+        super(b);
+    }
+}
+
+//IDEADEV-14306
+class Base {
+  protected String field;
+
+  public Base(final String field, int l) {
+    this.field = field;
+  }
+}
+
+class Inhertior extends Base {
+  public Inhertior() {
+    super("", <error descr="Cannot reference 'Base.field' before supertype constructor has been called">field</error>.length());
+  }
+}
+//end of IDEADEV-14306
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/IDEADEV13249.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/IDEADEV13249.java
new file mode 100644
index 0000000..3adc15d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/IDEADEV13249.java
@@ -0,0 +1,22 @@
+class TestSuper {
+    public static class A {
+        private String s = "A";
+
+        public void foo() {
+            System.out.println("A::foo");
+        }
+    }
+
+    public static class B extends A {
+
+        public void foo() {
+            super.foo();
+            System.out.println("B::foo " + super.s);
+            System.out.println("B::foo " + ((A) this).s);
+        }
+    }
+
+    public static void main(String[] args) {
+        new B().foo();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/IDEADEV25784.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/IDEADEV25784.java
new file mode 100644
index 0000000..99b6bc5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/IDEADEV25784.java
@@ -0,0 +1,13 @@
+public class X extends Y {}
+public class Y {
+
+	private static int x = 0;
+
+	public static int getX() {
+		return x;
+	}
+
+	public static void setX(int x) {
+		X.<error descr="'x' has private access in 'Y'">x</error> = x;
+	}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/IDEADEV8822.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/IDEADEV8822.java
new file mode 100644
index 0000000..23347d6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/IDEADEV8822.java
@@ -0,0 +1,8 @@
+class S extends S3 {
+    String XXX;  //should correctly resolve to java.lang.String
+}
+
+class S3 {
+    private class String {
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/IDEADEV9201.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/IDEADEV9201.java
new file mode 100644
index 0000000..322079a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/IDEADEV9201.java
@@ -0,0 +1,6 @@
+class YouAreNotMyType {
+
+    String[][] oldLady() {
+        return  new String[][]{<error descr="Incompatible types. Found: 'java.lang.Integer[]', required: 'java.lang.String[]'">new Integer[]{}</error>};
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/IllegalForwardReference.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/IllegalForwardReference.java
new file mode 100644
index 0000000..88dd953
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/IllegalForwardReference.java
@@ -0,0 +1,74 @@
+/// forward references
+import java.io.*;
+import java.net.*;
+
+public class a  {
+
+  {
+    int i;
+    if (<error descr="Illegal forward reference">FI</error> == 4) i = 5;
+  }
+  final int FI = 4;
+
+  int k = 1 + <error descr="Illegal forward reference">ki</error>;
+  int ki;
+
+  final int fi5 = <error descr="Illegal forward reference">fi5</error> + 1;
+}
+
+class a1 {
+ static int i = <error descr="Illegal forward reference">j</error> + 2; 
+ static int j = 4;
+}
+class a2 {
+ static { i = <error descr="Illegal forward reference">j</error> + 2; }
+ static int i, j;
+ static { j = 4; }
+}
+
+// pasted from JLS 8.3.2.3
+class UseBeforeDeclaration {
+ static {
+  x = 100; // ok - assignment
+  int y = <error descr="Illegal forward reference">x</error> + 1; // error - read before declaration
+  int v = x = 3; // ok - x at left hand side of assignment
+  int z = UseBeforeDeclaration.x * 2;	// ok - not accessed via simple name
+  Object o = new Object(){ 
+     void foo(){x++;} // ok - occurs in a different class
+     {x++;} // ok - occurs in a different class
+   };
+  }
+  {
+   j = 200; // ok - assignment
+   j = <error descr="Illegal forward reference">j</error> + 1; // error - right hand side reads before declaration
+   int k = j = <error descr="Illegal forward reference">j</error> + 1; 
+   int n = j = 300; // ok - j at left hand side of assignment
+   int h = <error descr="Illegal forward reference">j</error>++; // error - read before declaration
+   int l = this.j * 3; // ok - not accessed via simple name
+   Object o = new Object(){ 
+     void foo(){j++;} // ok - occurs in a different class
+     { j = j + 1;} // ok - occurs in a different class
+   };
+  }
+
+  int w = x= 3; // ok - x at left hand side of assignment
+  int p = x; // ok - instance initializers may access static fields
+  static int u = (new Object(){int bar(){return x;}}).bar();  // ok - occurs in a different class
+  static int x;
+  int m = j = 4; // ok - j at left hand side of assignment
+  int o = (new Object(){int bar(){return j;}}).bar();   // ok - occurs in a different class
+  int j;
+}
+
+class a3 {
+    static {
+        <error descr="Illegal forward reference">i</error>+=1;
+    }
+    static int j=<error descr="Illegal forward reference">i</error>+=1;
+    static int i=0;
+    {
+        <error descr="Illegal forward reference">k</error>+=1;
+    }
+    int n=<error descr="Illegal forward reference">k</error>+=1;
+    int k=0;
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/IllegalModifiersCombination.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/IllegalModifiersCombination.java
new file mode 100644
index 0000000..d682ba3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/IllegalModifiersCombination.java
@@ -0,0 +1,74 @@
+// illegal modifier combinations
+
+abstract public class a {
+  //////////////////// fields ////////////////////////////////
+  <error descr="Illegal combination of modifiers: 'public' and 'protected'">public</error> static
+  <error descr="Illegal combination of modifiers: 'protected' and 'public'">protected</error> int f1 = 0;
+
+  <error descr="Illegal combination of modifiers: 'public' and 'private'">public</error> volatile
+  <error descr="Illegal combination of modifiers: 'private' and 'public'">private</error> int f2 = 0;
+
+  <error descr="Illegal combination of modifiers: 'protected' and 'private'">protected</error> final
+  <error descr="Illegal combination of modifiers: 'private' and 'protected'">private</error> int f3 = 0;
+
+  <error descr="Illegal combination of modifiers: 'final' and 'volatile'">final</error>
+  <error descr="Illegal combination of modifiers: 'volatile' and 'final'">volatile</error> private int f4 = 0;
+
+  <error descr="Illegal combination of modifiers: 'public' and 'public'">public</error> 
+  <error descr="Illegal combination of modifiers: 'public' and 'public'">public</error>
+     int f5 = 0;
+
+  public static final int cf1 = 0;
+  static volatile private int cf2;
+  transient public static final int cf3 = 0;
+  protected volatile transient int cf4;
+  private static final int cf5 = 1;
+
+
+
+  ///////////////////// methods ///////////////////////////////////
+
+  <error descr="Illegal combination of modifiers: 'abstract' and 'native'">abstract</error>  
+  <error descr="Illegal combination of modifiers: 'native' and 'abstract'">native</error>  void m1();
+
+  <error descr="Illegal combination of modifiers: 'static' and 'abstract'">static</error>  public
+  <error descr="Illegal combination of modifiers: 'abstract' and 'static'">abstract</error>  void m2();
+
+  <error descr="Illegal combination of modifiers: 'final' and 'abstract'">final</error>
+  <error descr="Illegal combination of modifiers: 'abstract' and 'final'">abstract</error>  void m3();
+
+  <error descr="Illegal combination of modifiers: 'private' and 'public'">private</error> static
+  <error descr="Illegal combination of modifiers: 'public' and 'private'">public</error>  void m4() {}
+
+  <error descr="Illegal combination of modifiers: 'protected' and 'private'">protected</error> final
+  <error descr="Illegal combination of modifiers: 'private' and 'protected'">private</error>  void m5() {}
+
+  <error descr="Illegal combination of modifiers: 'public' and 'public'">public</error> 
+  <error descr="Illegal combination of modifiers: 'public' and 'public'">public</error> void m6() {};
+
+  public abstract void cm1();
+  protected static synchronized native void cm2();
+  public static final void cm3() {}
+
+
+  ///////////////////////// classes //////////////////////////////////
+  <error descr="Illegal combination of modifiers: 'final' and 'abstract'">final</error>  static strictfp protected
+  <error descr="Illegal combination of modifiers: 'abstract' and 'final'">abstract</error>  class c1 {}
+
+  <error descr="Illegal combination of modifiers: 'private' and 'public'">private</error> final
+  <error descr="Illegal combination of modifiers: 'public' and 'private'">public</error>  class c2 {}
+
+  <error descr="Illegal combination of modifiers: 'final' and 'final'">final</error> 
+  <error descr="Illegal combination of modifiers: 'final' and 'final'">final</error> class c3 {}
+
+  abstract protected static strictfp class cc1 {}
+  final private static class cc2 {}
+  class cc3 {}
+  static class cc4 {}
+
+  ///////////////////////// locals
+  void f() {
+    <error descr="Illegal combination of modifiers: 'final' and 'final'">final</error>
+    <error descr="Illegal combination of modifiers: 'final' and 'final'">final</error> int loc;
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/IllegalType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/IllegalType.java
new file mode 100644
index 0000000..1fd25c8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/IllegalType.java
@@ -0,0 +1,8 @@
+
+  class Foo {
+    int k;
+    Class c=<error descr="Unknown class: 'k'">k</error>.class;
+    void f() {
+      <error descr="Unknown class: 'java.io'">java.io</error> javaio;
+    }
+  }
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/IllegalVoidType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/IllegalVoidType.java
new file mode 100644
index 0000000..206be90
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/IllegalVoidType.java
@@ -0,0 +1,18 @@
+class s {
+  void f() {
+    // illegal type
+    <error descr="Illegal type: 'void'">void</error>[] va;
+    <error descr="Illegal type: 'void'">void</error> vv;
+    class loc {
+      void f(<error descr="Illegal type: 'void'">void</error> i) {}
+    }
+    Object o = new <error descr="Illegal type: 'void'">void</error>[1];
+
+    // this is the only valid void usage
+    Class voidClass = void.class;
+  }
+
+  {
+    <error descr="Incompatible types. Found: 'void', required: 'java.lang.Object'">Object o = f();</error>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ImplicitConstructor.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ImplicitConstructor.java
new file mode 100644
index 0000000..1402dec
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ImplicitConstructor.java
@@ -0,0 +1,9 @@
+class A_I extends B_I{
+  public A_I() {
+    super();
+    new B_I();
+  }
+}
+
+class B_I{
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/IncompatibleTypes.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/IncompatibleTypes.java
new file mode 100644
index 0000000..18f8b36
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/IncompatibleTypes.java
@@ -0,0 +1,80 @@
+class c {
+  void f() {
+    //---- switch --------------------------------------------------------
+    switch (<error descr="Incompatible types. Found: 'java.lang.String', required: 'byte, char, short or int'">"s"</error>) 
+    {default:}
+    byte bt = 0;
+    switch (bt) {
+      case <error descr="Incompatible types. Found: 'java.lang.String', required: 'byte'">"S"</error>: break;
+      case <error descr="Incompatible types. Found: 'long', required: 'byte'">10L</error>: break;
+      case <error descr="Incompatible types. Found: 'boolean', required: 'byte'">true</error>: break;
+      case <error descr="Incompatible types. Found: 'int', required: 'byte'">0xdfffffff</error>: break;
+      case <error descr="Incompatible types. Found: 'char', required: 'byte'">'\udede'</error>: break;
+      case <error descr="Incompatible types. Found: 'int', required: 'byte'">1280</error>: break;
+      // assignable compatible to byte
+      case 0: break;
+      case 'c': break;
+      case -1: break;
+      case 127: break;
+    }
+    char ch = 'd';
+    switch (ch) {
+      case <error descr="Incompatible types. Found: 'java.lang.String', required: 'char'">"S"</error>: break;
+      case <error descr="Incompatible types. Found: 'long', required: 'char'">10L</error>: break;
+      case <error descr="Incompatible types. Found: 'boolean', required: 'char'">true</error>: break;
+      case <error descr="Incompatible types. Found: 'int', required: 'char'">0xafffffff</error>: break;
+      // assignable compatible to char
+      case 0: break;
+      case '\u4567': break;
+      case 0xffff: break;
+      case 255: break;
+    }
+    switch ('d') {default:}
+
+    /// --------- incompatible types inside array initializer ----------
+
+
+    int[] ia = new int[] {
+      <error descr="Incompatible types. Found: 'java.lang.String', required: 'int'">"String"</error> 
+      , <error descr="Incompatible types. Found: 'double', required: 'int'">3.4</error> 
+    };
+
+    String[] sa = { "s",
+       <error descr="Incompatible types. Found: 'boolean', required: 'java.lang.String'">false</error> 
+       , <error descr="Incompatible types. Found: 'char', required: 'java.lang.String'">'S'</error> 
+    };
+
+    String[] vas = null;
+    Object o =  new int[<error descr="Incompatible types. Found: 'java.lang.String', required: 'int'">vas[0]</error>];
+
+    int[] weird={<error descr="Illegal initializer for 'int'">{0}</error>};
+    int[][] arrayInitializers = {{ }};
+    int[][][] arrayInitializers2 = {{ }, {{}} };
+    double[][] i2d = {{1}};
+    char[][] i2c = {{1}};
+    char foo = 0x0000; /* okay */
+    char[] bar = { 1,2,3 }; /* still okay */
+    char[][] baz = { { 1,2,3 } }; /* not okay in 4.5, okay in 4.0.x and for javac */
+
+
+    /// -------- conditional operator
+    int i8 = <error descr="Incompatible types. Found: 'java.lang.String', required: 'boolean'">"ff" + true</error> ? 1 : 2;
+    int i9 = 1==2 ? 1 : <error descr="Incompatible types. Found: 'java.lang.String', required: 'int'">"ff" + true</error>;
+    i9 = 1==2 ? 3 : <error descr="Incompatible types. Found: 'null', required: 'int'">null</error>;
+    Object o9 = true ? 0 : <error descr="Incompatible types. Found: 'java.lang.Object', required: 'int'">new Object()</error>;
+
+
+
+    final char ccons='0';
+    short ssss=ccons;
+    byte bbbbbb=ccons;
+    // too big char to fit in short
+    final char bigchar='\uffff';
+    <error descr="Incompatible types. Found: 'char', required: 'short'">short sbig = bigchar;</error>
+  }
+
+  void g(boolean f, byte b) {
+      byte c = '\n';
+      <error descr="Incompatible types. Found: 'int', required: 'byte'">byte next = f ? b : '\n';</error>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/InheritFinal.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/InheritFinal.java
new file mode 100644
index 0000000..56e1265
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/InheritFinal.java
@@ -0,0 +1,10 @@
+// inherit from final
+public class a extends <error descr="Cannot inherit from final 'ff'">ff</error> {
+
+  void f() {
+    Object o = new <error descr="Cannot inherit from final 'ff'">ff</error>() { void gg(){} };
+  }
+}
+
+final class ff {
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/InitializerCompletion.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/InitializerCompletion.java
new file mode 100644
index 0000000..2e270c0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/InitializerCompletion.java
@@ -0,0 +1,134 @@
+/// initalizers completion
+import java.io.*;
+import java.net.*;
+
+public class a  {
+
+  <error descr="Initializer must be able to complete normally">{
+    throw new RuntimeException();
+  }</error>
+
+  static <error descr="Initializer must be able to complete normally">{
+    try {
+      throw new RuntimeException();
+    }
+    finally {
+      throw new NullPointerException();
+    }
+  }</error>
+
+
+}
+class a2 {
+  { 
+    if (1==2) <error descr="Unhandled exception: java.io.IOException">throw new IOException();</error> 
+  }
+
+  <error descr="Unhandled exception: java.io.IOException">a2()</error> {}
+}
+class a3 {
+  { 
+    if (1==2) <error descr="Unhandled exception: java.net.SocketException">throw new SocketException();</error> 
+  }
+
+  <error descr="Unhandled exception: java.net.SocketException">a3() throws ConnectException</error> {}
+}
+
+class b {
+
+  { if (1==2) throw new SocketException(); }
+
+  b() throws IOException  {}
+}
+
+class a4 {
+    {
+        if (true) {
+            throw new Exception();
+        }
+    }
+    a4() throws Exception {
+    }
+}
+
+class a5 {
+  int i = <error descr="Unhandled exception: java.lang.ClassNotFoundException">f();</error>
+
+  int f() throws ClassNotFoundException {
+    return 0;
+  }
+}
+class a6 {
+  int i = f();
+
+  int f() throws ClassNotFoundException {
+    return 0;
+  }
+
+  a6() throws ClassNotFoundException {
+  }
+}
+
+class a7 {
+<error descr="Initializer must be able to complete normally">{
+            try {
+                throw new RuntimeException();
+            } finally {
+            }
+ }</error>
+}
+
+class MyRuntimeException extends RuntimeException {}
+
+class GUIBase {
+  GUIBase () throws MyRuntimeException {}
+}
+
+class GUI extends GUIBase {
+
+}
+
+
+class a8 {
+ {
+   assert true;
+ }
+ {
+   assert false;
+ }
+
+}
+
+class a9 {
+
+  private static interface AnInterface {}
+
+  public AnInterface getAnInterface() {
+        return new AnInterface() {
+            {
+                <error descr="Unhandled exception: java.io.FileNotFoundException">new java.io.FileInputStream("somefile")</error>;
+            }
+        };
+    }
+}
+
+////////////////////////////////
+class BadStatic {
+    static String f() throws ClassNotFoundException {
+        return null;
+    }
+	private static final String FOO = <error descr="Unhandled exception: java.lang.ClassNotFoundException">f();</error>
+
+	public BadStatic()  throws ClassNotFoundException {
+	}
+}
+class H {
+    public H() throws FileNotFoundException {
+    }
+
+    static {
+        if(true) {      
+            <error descr="Unhandled exception: java.io.FileNotFoundException">throw new FileNotFoundException();</error>
+        }
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/InjectedAnnotator.xml b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/InjectedAnnotator.xml
new file mode 100644
index 0000000..8efde91
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/InjectedAnnotator.xml
@@ -0,0 +1,5 @@
+<x <warning descr="AAATTR">aaa="dddd"</warning>>
+    <l>
+      <warning desr="ENTITY">&nbsp;</warning>
+    </l>
+</x>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/InnerClassesShadowing.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/InnerClassesShadowing.java
new file mode 100644
index 0000000..e87c5db
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/InnerClassesShadowing.java
@@ -0,0 +1,98 @@
+import java.io.*;
+
+public class Main {
+    static interface A
+    {
+        interface B  { }
+    }
+
+    static class D implements A
+    {
+        private interface B { }
+    }
+
+
+    static class C extends D implements A
+    {
+        interface E extends B { }
+        interface E1 extends D.B { }
+        interface E2 extends A.B { }
+    }
+
+}
+
+
+
+class Main1 {
+    static interface A
+    {
+        interface B  { }
+    }
+
+    static class D implements A
+    {
+        interface B { }
+    }
+
+
+    static class C extends D implements A
+    {
+        interface E extends <error descr="Reference to 'B' is ambiguous, both 'Main1.D.B' and 'Main1.A.B' match">B</error> { }
+        interface E1 extends D.B {
+        }
+        interface E2 extends A.B { }
+    }
+
+}
+
+
+interface A
+{
+    interface B  { }
+    interface B1  { }
+}
+
+class D implements A
+{
+    private interface B { }
+    interface B1 { }
+}
+
+
+class C extends D implements A
+{
+    interface E extends B { }
+    interface E1 extends D.<error descr="'D.B' has private access in 'D'">B</error> { }
+    interface E2 extends A.B { }
+
+    interface F extends <error descr="Reference to 'B1' is ambiguous, both 'D.B1' and 'A.B1' match">B1</error> { }
+    interface F1 extends D.B1 { }
+    interface F2 extends A.B1 { }
+
+}
+
+
+class AO {}
+class BAO {
+    AO bar = new AO();
+    {
+        bar.foo();
+    }
+    private class AO {
+        void foo(){}
+    }
+
+}
+
+class WithFileInputStream {
+  private static final Runnable runn = new Runnable() {
+    public void run() {
+      new FileInputStream("path");
+    }
+  };
+  
+  private static class FileInputStream {
+    private FileInputStream(String str) {
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/InstantiateAbstract.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/InstantiateAbstract.java
new file mode 100644
index 0000000..9bf1beb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/InstantiateAbstract.java
@@ -0,0 +1,37 @@
+// instantiate abstract
+public class a {
+  void f() {
+    <error descr="'ii' is abstract; cannot be instantiated">new ii()</error>;
+
+    <error descr="'c1' is abstract; cannot be instantiated">new c1()</error>;
+
+    new <error descr="Class 'Anonymous class derived from c1' must either be declared abstract or implement abstract method 'f1(int)' in 'c1'">c1</error>() {
+      public void f2() {}
+    };
+
+    new <error descr="Class 'Anonymous class derived from c1' must either be declared abstract or implement abstract method 'f1(int)' in 'c1'">c1</error>() {
+      public void f1() {}
+    };
+
+    new <error descr="Class 'Anonymous class derived from c1' must either be declared abstract or implement abstract method 'f2()' in 'Anonymous class derived from c1'">c1</error>() {
+      public void f1(int i) {}
+      public <error descr="Abstract method in non-abstract class">abstract</error> void f2();
+    };
+
+
+    new c1() {
+      public void f1(int i) {}
+    };
+    new ii() { public void f1(){} public void f2(){} };
+
+  }
+}
+abstract class c1 {
+  abstract public void f1(int i);
+}
+
+interface ii {
+  abstract void f1();
+  void f2();
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/Interface.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/Interface.java
new file mode 100644
index 0000000..2d3c989
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/Interface.java
@@ -0,0 +1,35 @@
+/*
+ * 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.
+ */
+interface i <error descr="No implements clause allowed for interface">implements Runnable</error> {}
+
+interface ii {}
+class cs extends <error descr="No interface expected here">ii</error> {}
+interface is extends ii {}
+
+class cs2 implements <error descr="Interface expected here">cs</error> {}
+interface is3 extends <error descr="Interface expected here">cs</error> {}
+
+abstract class Exercis {
+    public static void main() {
+        Object o = <error descr="Class name expected here">java.lang</error>.this;
+
+        new Runnable() {
+            public void run() {
+                <error descr="'java.lang.Runnable' is not an enclosing class">Runnable.this</error>.run();
+            }
+        };
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/InvalidExpressions.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/InvalidExpressions.java
new file mode 100644
index 0000000..79ab2bd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/InvalidExpressions.java
@@ -0,0 +1,112 @@
+// invalid expressions
+public class a12 {
+  static int i;
+
+  int f(int i) {
+    <error descr="Not a statement">1;</error>
+    <error descr="Not a statement">1==2;</error>
+    <error descr="Not a statement">1==2 ? 1 : 3;</error>
+    <error descr="Not a statement">f(1) == 3;</error>
+    <error descr="Not a statement">1,2;</error>
+    <error descr="Not a statement">~1;</error>
+    <error descr="Not a statement">!(1==2);</error>
+    <error descr="Not a statement">new int[0];</error>
+    <error descr="Not a statement">new a12[10];</error>
+    <error descr="Not a statement">new a12[]{};</error>
+    <error descr="Not a statement">new int[]{1};</error>
+    <error descr="Not a statement">new String[]{new String()};</error>
+    if (i==1)
+      <error descr="Not a statement">String s00 = "";</error>
+    for (;;)
+      <error descr="Not a statement">String s01 = "";</error>
+
+    
+    for (<error descr="Not a statement">1==2,i=3;</error> i<3; <error descr="Not a statement">!(1==2)</error>);
+
+    label2:
+        <error descr="Not a statement">int ksdfgdf;</error>
+
+
+    int i1=3, g=5;
+    g++;
+    ++g;
+    for (int k=1,l=3; k<3; k++,l--) {;};
+    class s {}
+    new s() { void f(){}};
+    return 3;
+  }
+
+
+
+  //////////////////////////
+  void f() {
+    a12 a[] = new a12[4];
+    int[] ai = null;
+
+    <error descr="Variable expected">5</error> = 5;
+    <error descr="Variable expected">5</error>++;
+    ++<error descr="Variable expected">5</error>;
+    <error descr="Variable expected">5</error> += 5;
+
+    <error descr="Cannot resolve method 'foo123Unresolved(?)'">foo123Unresolved</error>(<error descr="Expression expected">String</error>);
+    <error descr="Cannot resolve method 'foo123Unresolved(?)'">foo123Unresolved</error>(<error descr="Cannot resolve symbol 'xxxx'">xxxx</error>);
+
+    <error descr="Cannot resolve method 'xxxxxx(?)'">xxxxxx</error>(<error descr="Cannot resolve symbol 'xxxxxx'">xxxxxx</error>);
+
+    // incomplete code should not cause 'expr expected'
+    Object<error descr="';' expected"> </error>
+
+
+    <error descr="Array type expected; found: 'int'">4</error>[1] = 5;
+    a[<error descr="Incompatible types. Found: 'java.lang.String', required: 'int'">"d"</error>] = null;
+
+    <error descr="Array type expected; found: 'a12'">a[0]</error>[1] = 5;
+    <error descr="Array type expected; found: 'int'">i</error>[0] = 5;
+    i = ai[<error descr="Incompatible types. Found: 'a12', required: 'int'">a[1]</error>];
+
+    final a12[] a12a = new a12[<error descr="Incompatible types. Found: 'null', required: 'int'">{null}</error>];
+    int[] iarr = new int[<error descr="Incompatible types. Found: 'null', required: 'int'">{0}</error>];
+
+
+    new String[<error descr="Incompatible types. Found: 'java.lang.String', required: 'int'">"d"</error>];
+    new String[<error descr="Incompatible types. Found: 'double', required: 'int'">1.1</error>]
+              [<error descr="Incompatible types. Found: 'a12', required: 'int'">this</error>];
+
+    a[0] = null;
+    (a)[(1)].i = 3;
+    (( i) ) = (5);
+    a12.i = 0;
+    arr()[0] = 1;
+    new int[] { 1,3} [0] = 2;
+    Object[] var = null;
+    i = var.length;
+
+    // array initializers
+    var = <error descr="Array initializer is not allowed here">{ null, null }</error>;
+    Object var1 = <error descr="Array initializer is not allowed here">{ null, null }</error>;
+    int[] var2 = { 1,2 };
+    var2 = new int[] { 2, 4};
+    int[][] ii2 = { { 1,2}, {4} };
+
+  }
+  <error descr="Illegal type: 'void'">void</error>[] fv() {
+     if (1==2) return new <error descr="Illegal type: 'void'">void</error>[0];
+     return null;
+  }
+
+  int[] arr() { return new int[0]; }
+
+  public <error descr="Invalid method declaration; return type required">foo</error>() {
+  }
+
+  {
+    new Object() {
+      <error descr="Invalid method declaration; return type required">Object</error>() {}
+    };
+  }
+
+  // do not warn about illegal type in incomplete declarations (http://www.intellij.net/tracker/idea/viewSCR?publicId=9586)
+  void foo<EOLError descr="';' expected"></EOLError>
+}
+
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/Javadoc.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/Javadoc.java
new file mode 100644
index 0000000..4a73ec2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/Javadoc.java
@@ -0,0 +1,39 @@
+class a  {
+  /**period.
+  * @return x
+  */
+  int f() {
+    return 0;
+  }
+  /**period.
+  * @return <tt>x</tt> wtf ?
+  */
+  int f2() {
+    return 0;
+  }
+
+  /**period.
+  * @return
+  *   true if someone wants
+  */
+  int f3() {
+    return 0;
+  }
+
+
+  /**period.
+  * @param i description goes here
+  * <warning>@return</warning>
+  */
+  int f(int i) {
+     return i;
+  }
+
+  
+      /**
+        * @see localVar
+        */
+       static String KEY_FOR_VAR="index.localVar";
+       String localVar;
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/Labels.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/Labels.java
new file mode 100644
index 0000000..b98824c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/Labels.java
@@ -0,0 +1,69 @@
+// labels
+import java.io.*;
+import java.net.*;
+
+class a {
+ void f() {
+   <error descr="Label without statement">a:</error>
+ }
+ void f1() {
+   a:
+   <error descr="Label without statement">b:</error>
+ }
+ void f2() {
+   a: return;
+ }
+ void f3() {
+   a: return;
+ }
+ void f4() {
+   a: 
+   b:
+    return;
+ }
+ void f5() {
+   a: 
+    if (4==5) return;
+   b: ;
+ }
+ void f6() {
+   a: ;
+ }
+} 	
+
+
+class AlreadyInUse {
+ void f0() {
+   a: {
+       f0();
+       <error descr="Label 'a' already in use">a</error>: f0();
+   }
+
+ }
+ void f1() {
+   a:
+   try {
+     f1();
+     <error descr="Label 'a' already in use">a</error>:
+     f1();
+   }
+   finally {
+   }
+ }
+ void f2() {
+  {
+    a:;
+  }
+  {
+    a:;
+  }
+ }
+ void f3() {
+   a:
+   new Object() {
+     void f() {
+      a:;
+     }
+   };
+ }
+}       
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/LocalVariableInitialization.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/LocalVariableInitialization.java
new file mode 100644
index 0000000..dddaa1d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/LocalVariableInitialization.java
@@ -0,0 +1,418 @@
+import java.io.*;
+import java.net.*;
+import java.util.*;
+
+public class a  {
+  static final a ai;
+  int ii;
+
+  static {
+    <error descr="Variable 'ai' might not have been initialized">ai</error>.ii = 4;
+    ai = null;
+  }
+
+  void f1(int i) {
+    int j;
+    i = <error descr="Variable 'j' might not have been initialized">j</error>;
+  }
+  void f2(int i) {
+    int j;
+    if (i ==2) j = 4;
+    i = <error descr="Variable 'j' might not have been initialized">j</error>;
+  }
+  void f3(int i) {
+    int j;
+    if (i==3 && (j=i) != 9) {
+      i = j+2;
+    }
+    else {
+      i -= -1 - <error descr="Variable 'j' might not have been initialized">j</error>;
+    }
+  }
+  void f4(int i) {
+
+   final int dd;
+
+   Runnable r = new Runnable() {
+    public void run() {
+     int j = <error descr="Variable 'dd' might not have been initialized">dd</error>;
+    }
+   };
+
+   if (i == 3) dd = 5;
+   else dd = 6;
+  }
+  void f5(int i) {
+   final int k;
+   class inner { 
+     void f() {
+       int j = <error descr="Variable 'k' might not have been initialized">k</error>;
+     }
+   }
+
+  }
+    void f6(int a){
+      Object[] var;
+      if (a > 0){
+      }
+      else{
+        var = new Object[1];
+      }
+      System.out.println(<error descr="Variable 'var' might not have been initialized">var</error>);
+    }
+
+
+    void f7() {
+        int k;
+        try {
+            k=0;
+        } finally {
+            if (<error descr="Variable 'k' might not have been initialized">k</error>==0) {
+            }
+        }
+    }
+
+    void f8(int n)
+    {
+        int k;
+        while (n < 4) {
+            k = n;
+            break;
+        }
+        // k is not "definitely assigned" before this
+        System.out.println(<error descr="Variable 'k' might not have been initialized">k</error>);  
+    }
+
+    void f9() {
+        final int k;
+        <error descr="Variable 'k' might not have been initialized">k</error>+=1;
+    }
+    void f10() {
+        final int k;
+        <error descr="Variable 'k' might not have been initialized">k</error>++;
+        int i = <error descr="Variable 'i' might not have been initialized">i</error> + 1;
+        int j = (j=2) == 1 || j==0 ? 1 : j;
+    }
+
+    void f11() {
+        int x = 0;
+        switch (x) {
+            case 0:
+                int y = 1;
+                System.out.println(y);
+                break;
+            case 1:
+                int z = <error descr="Variable 'y' might not have been initialized">y</error>;
+                System.out.println(z);
+                break;
+        }
+    }
+    void f12() {
+        switch (0) {
+        case 0:
+            int k=0;
+        case 1:
+            System.out.println(<error descr="Variable 'k' might not have been initialized">k</error>);
+        }
+    }
+
+    public class AInner {
+      class AI2 {}
+      private AI2 myTitleRenderer = new AI2() {
+        private String myLabel = "";
+
+        public String getTreeCellRendererComponent(String value) {
+            if (value instanceof String) {
+                int i = myLabel.length();
+            }
+            return null;
+        }
+      };
+    }
+
+    void f13() {
+        int i ;
+        try {
+            i = 0;
+            if (i==0) throw new IOException();
+        }
+        catch (IOException e) {
+            if (<error descr="Variable 'i' might not have been initialized">i</error>==0) return;
+        }
+    }
+
+    abstract class X {
+        class XException extends Exception{}
+        class YException extends Exception{}
+        class ZException extends Exception{}
+        public void test() throws XException {
+            final Object obj;
+            try {
+                obj = test1();
+            }
+            catch (YException fnf) {
+            }
+            finally {
+                try {
+                    test2();
+                }
+                catch (ZException eof) {
+                }
+            }
+            <error descr="Variable 'obj' might not have been initialized">obj</error>.hashCode(); //can stay uninitialized
+        }
+
+        public abstract Object test1() throws YException, XException;
+
+        public abstract void test2() throws XException, ZException;
+    }
+
+    public static int test(List aList) {
+        List list2;
+        int counter = 0;
+        for (int i=0; i<aList.size(); i++) {
+            while (counter != 0) {
+                counter++;
+                list2 = new ArrayList();
+            }
+            <error descr="Variable 'list2' might not have been initialized">list2</error>.add(aList.get(i));
+        }
+        return counter;
+    }
+
+    void forEachParam(java.io.File x) {
+        for (java.io.File f: <error descr="Variable 'f' might not have been initialized">f</error>.listFiles()) {
+           forEachParam(f);
+        }
+    }
+
+  // all code below is correct
+  int cf1(int i) {
+    return i;
+  }
+
+  void cf2(int i) {
+    int j;
+    if (i == 0 && (j=i) != 2) {
+      i = j;
+    }
+    if (i == 0 || (j=i) != 2 || j>3) {
+      i = 2;
+    }
+  }
+
+  boolean cf3(int i) {
+    final int j;
+    if (i<3 || i>33) j = i;
+    else j = 4;
+    i = j;
+
+    return i==3 && i==5;
+  }
+  void cf33(int i) {
+    final int j2;
+    while (true) {
+      j2 = 5;
+      break;
+    }
+    i = j2;
+  }
+
+  void cf4() {
+    final int i1;
+    int i2;
+    final Object o1;
+  }
+  void cf5() {
+   final int dialog = 3;
+
+   final int dd;
+   if (dialog == 3) dd = 5;
+   else dd = 6;
+
+   Runnable r = new Runnable() {
+    public void run() {
+     int i = dialog;
+     int j = dd;
+    }
+   };
+
+  }
+  void cf6() {
+    class inner extends a {
+      void fi() {
+       int i = ii;
+      }
+    }
+    a ainst = new a() {
+      void fi() {
+        int i = ii;
+      }
+    };
+  }
+  a() {
+    int i = ai.ii;
+  }
+  void cf7() {
+      for(int i = 0; i < 3; i++){
+        Object element;
+        if (i==0){
+          element = null;
+        }
+        else if (i==3){
+          element = null;
+        }
+        else{
+          continue;
+        }
+        Object newe = element;
+      }
+  }
+  void cf8(int n)
+   {
+        int i;
+        while (true) {
+            if (false) {
+              i = 0;
+              break;
+            }
+        }
+        i++;
+
+    }
+  final boolean FB = true;
+
+  void cf9() {
+      int k;
+      if (FB) {
+        k = 4;
+      }
+      int j = k;
+  }
+
+
+  void cf10() {
+    for (String line; (line = "") != null; ) {
+      line.indexOf(" ");
+    }
+  }
+
+  void cf11(boolean d) {
+        boolean b;
+        boolean c = true;
+        if (c && (false && true)) {
+            c = b;
+        }
+  }
+  void cf12() {
+        boolean booleanVar = true;
+        boolean stringVar;
+        if (!(booleanVar && (stringVar = true))) {
+            stringVar = false;
+        }
+        if (stringVar) {
+
+        }
+  }
+  
+    void cfxx(boolean a, boolean b) {
+        int n;
+        if ((a || b) && (n = 0) >= 2) {
+            n++;   //
+        }
+    }
+    void cfxx1(boolean a, int b) {
+        final int i;
+        if ((true || false) && (i = b) != 0) {
+            System.out.println(i); // i gets highlighted }
+        }
+    }
+    void cfx3() {
+      boolean b;
+      boolean c;// = true;
+      if (<error descr="Variable 'c' might not have been initialized">c</error> && false) {
+          c = b;
+      }
+    }
+    void cfx4()
+    {
+        final int k;
+        if (false) {
+            k = 0;
+            k = 1;
+            System.out.println(k);
+        }
+    }
+}
+
+
+class Main {
+     void f() {
+         final int x;
+         x = 0;
+         class C {
+             void m () {
+                 int y = x;
+             }
+         }
+     }
+}
+
+
+// continue in finally
+class QuartzSchedulerThread {
+    public void run() throws IOException {
+        while (true) {
+            try {
+            } finally {
+                try {
+                    run();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+                continue;
+            }
+        }
+    }
+
+}
+class ExceptionProblems {
+
+	private boolean bad() {
+		final boolean succeeded;
+		try {
+            new FileInputStream("test");
+            succeeded = true;
+		} catch (IOException e) {
+			<error descr="Variable 'succeeded' might already have been assigned to">succeeded</error> = false; // should warn here
+		}
+		return succeeded;
+	}
+}
+class ImGood {
+        int foo() {    //IDEADEV-7446 
+            int foo;
+            if (true) {
+                foo = 42;
+            }
+            return foo;
+        }
+    }
+
+class SwitchTest
+{
+    public static String method()
+    {
+        int a = 0;
+        switch (a)
+        {
+            case 0:
+                return null;
+            case 4:
+                String description;
+                return <error descr="Variable 'description' might not have been initialized">description</error>;
+            default:
+                return "";
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/Loop.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/Loop.java
new file mode 100644
index 0000000..600bae3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/Loop.java
@@ -0,0 +1,67 @@
+// continue outside of.../loop label
+public class a {
+
+  void f() {
+    <error descr="Continue outside of loop">continue;</error>
+    while (true) {
+      continue;
+    }
+    do { continue; } while (true);
+    switch (1) {
+      case 1: <error descr="Continue outside of loop">continue;</error>
+    }
+    for (;;) {
+      continue;
+    }
+
+    for (;;) {
+      new ff() {
+        void f() { 
+          <error descr="Continue outside of loop">continue;</error>
+        }
+      };
+      continue;
+    }
+
+
+    while (true) {
+      class s {
+       {
+         <error descr="Continue outside of loop">continue;</error>
+       }
+      }
+      continue;
+    }
+
+    do {
+      class s {
+       {
+         <error descr="Continue outside of loop">continue;</error>
+       }
+      }
+      continue;
+    } while (true);
+
+
+
+    a:
+    if (2==4) {
+    for (;;) {
+      <error descr="Not a loop label: 'a'">continue a;</error>
+    }
+    }
+
+    a:
+    b:
+    for (;;) {
+      <error descr="Not a loop label: 'a'">continue a;</error>
+    }
+    
+
+
+  }
+}
+
+class ff {
+
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/MethodCalls.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/MethodCalls.java
new file mode 100644
index 0000000..183e8d0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/MethodCalls.java
@@ -0,0 +1,121 @@
+/*
+ * 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.
+ */
+
+// illegal method calls
+
+class A {
+    private class B {
+      Object o = super<error descr="'.' expected">;</error>
+    }
+    private B b = null;
+    A(A a)
+    {
+        new A(a).new B();
+        B b = new A(a).b;
+        AA aa = (AA) a;
+        AA.SAA saa = aa.new SAA();
+        AA.SAA saa1 = <error descr="'AA' is not an enclosing class">new AA.SAA()</error>;
+    }
+}
+
+class AA extends A {
+    private AA aa;
+    AA(A a) {
+        super(a);
+    }
+    class SAA {}
+
+    void f() {
+      new AA.SAA();
+      new SAA();
+      AA.this.aa.new SAA();
+
+      class MyAA extends AA {
+        public MyAA(A a) {
+          super(a);
+        }
+      }
+    }
+}
+
+class AX {
+    class B {
+    }
+}
+class CX {
+    {
+        <error descr="'AX' is not an enclosing class">new AX.B()</error>;
+    }
+}
+
+
+
+class c {
+    c() {}
+
+    class inner {
+        class ininner {}
+    }
+
+    static void f() {
+        <error descr="'c.this' cannot be referenced from a static context">new inner()</error>;
+    }
+
+    static {
+        <error descr="'c.this' cannot be referenced from a static context">new inner()</error>;
+    }
+}
+
+
+class A1 {
+  void f() {}
+}
+class B1 {
+  void f() {
+    A1.<error descr="Non-static method 'f()' cannot be referenced from a static context">f</error>();
+  }
+}
+
+class AAAA implements java.io.Serializable
+{
+    public AAAA ()
+    {
+        super(); // here
+    }
+}
+
+class DCC {
+    public DCC(int i) {
+    }
+
+    public DCC(int i, int z) {
+        <error descr="Method call expected">DCC(i)</error>;
+    }
+    void f() {
+        <error descr="Method call expected">DCC(1)</error>;
+        new DCC(1);
+    }
+    {
+        <error descr="Qualifier must be an expression">java</error>.toString();
+    }
+}
+
+class ThisExpression {
+    static String foo() {
+        System.out.println(<error descr="'ThisExpression.this' cannot be referenced from a static context">this</error>);
+        return <error descr="'ThisExpression.super' cannot be referenced from a static context">super</error>.toString();
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/MethodCannotBeApplied.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/MethodCannotBeApplied.java
new file mode 100644
index 0000000..6191dc9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/MethodCannotBeApplied.java
@@ -0,0 +1,7 @@
+class A {{
+  String.valueOf(<error descr="Cannot resolve symbol 'chars'">chars</error>, 0, 10); // all arguments are highlighted when only chars has a problemij
+  new String(<error descr="Cannot resolve symbol 'chars'">chars</error>, 0, 10); // highlighting is good here.
+
+  String.valueOf<error descr="'valueOf(char[], int, int)' in 'java.lang.String' cannot be applied to '(int, int, int)'">(0, 0, 10)</error>;
+  new String<error descr="Cannot resolve constructor 'String(int, int, int)'">(0, 0, 10)</error>;
+}}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/MissingReturn.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/MissingReturn.java
new file mode 100644
index 0000000..5a3b705
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/MissingReturn.java
@@ -0,0 +1,1059 @@
+//Missing return statement
+import java.io.*;
+import java.net.*;
+public class a  {
+interface ii {}
+
+
+
+ int f1() throws Exception {
+ <error descr="Missing return statement">}</error>
+ 
+ Object f2(int i) throws Exception {
+   if (i == 0) return null;
+ <error descr="Missing return statement">}</error>
+
+ Object f3(int i) throws Exception {
+   while (i == 0) return null;
+ <error descr="Missing return statement">}</error>
+
+ Object f4(int i) throws Exception {
+   switch (i) {
+     case 1: return null;
+   }
+ <error descr="Missing return statement">}</error>
+
+ Object f5(int i) throws Exception {
+   if (i==2) return null;
+   else if (i != 2) return null;
+ <error descr="Missing return statement">}</error>
+
+ Object f6(int i) throws Exception {
+   if (true) return null;
+ <error descr="Missing return statement">}</error>
+
+ int f7(int i) {
+  try {
+   if (i==2) return 4;
+   else throw new IllegalArgumentException();
+  } catch (Exception e) {
+  }
+ <error descr="Missing return statement">}</error>
+
+  int f8(int i) {
+    try {
+      //throw new Error();
+    }
+    finally {
+      try {
+        //throw new Exception();
+      }
+      catch (Exception e) {
+        return 5;
+      }
+    }
+ <error descr="Missing return statement">}</error>
+
+ int cf1(int i) {
+   return 0;
+ }
+ int cf2(int i) {
+   if (i==2) return 0;
+   else if (i==4) return -1;
+   else return 2;
+ }
+ int cf3(int i) {
+   return i==2 ? 3 : 5;
+ }
+ int cf4(int i) {
+   switch (i) {
+    case 1: return 4;
+    case 3: return 6;
+    default: return 5;
+   }
+ }
+ int cf5(int i) {
+   if (i>1) {
+    if (i==4) return 0;
+    else return i==3 ? 2 : 0;
+   }
+   else return 2;
+ }
+ int cf6(int i) {
+   return cf4(i+1);
+ }
+
+ int cf7(int i) throws Exception {
+   try {
+     throw new Exception();
+   } catch(Error e) {
+     return 3;
+   } finally {
+     return 2;
+   }
+
+ }
+
+ int cf8(int i) throws Exception {
+   try {
+     return 2;
+   } finally {
+     return 4;
+   }
+ }
+ int cf9(int i) throws Exception {
+   try {
+     i = 5;
+   } finally {
+     throw new Exception();
+   }
+ }
+
+ int cf10(int i) {
+
+   while (true)
+     return 0;
+ }
+ int cf11(int i) {
+
+  // commented out reference
+  // does not work when running under JRE
+
+   while (a.co != 2 && 1+3/2-1 + (int)1.5 + 2%2 == 2 /* && 0x7fffffff == Integer.MAX_VALUE */ && ('c' & 0x00) == 0)
+     return 0;
+ }
+ private static final int co = 1/2 + 1;
+ int cf12(int i) {
+
+   for (int k=0; (0xf0 | 0x0f) == 0xff && false != true && co == 1;k++)
+     return 0;
+ }
+
+
+ int cf13() {
+ try {
+  try {
+   throw new IllegalArgumentException();
+   //throw new java.io.IOException();
+  } catch (IllegalArgumentException e) {
+   return 3;
+  }
+  finally {
+   throw new java.io.IOException();
+  }
+
+ } catch (java.io.IOException ee) {
+   return 88;
+ }
+ }
+
+ int cf14() {
+   try {
+     cf13();
+     return 13;
+   } finally {
+     cf13();
+   }
+ }
+ 
+ int cf15() {
+  try {
+   int i=0;
+   return i;
+  } catch (Exception e) {
+  } finally {
+  }
+  return 0;
+ }
+ int cf16() {
+    try {
+      if ( ! (1==3)) {
+          return 0;
+      }
+    } finally {
+        // Restore the current position of the other DynAny
+    }
+    return 1;
+ }
+
+ int cf17() {
+        try {
+            try {
+                return 0;
+            } finally {
+            }
+        } finally {
+        }
+  }
+ int cf18(int i) {
+   int k;
+   try {
+      if (i==4) return 0;
+      k = 4;
+   } finally {
+   }
+   return k;
+  }
+
+
+ void cf19() {
+
+      try {
+
+        try {
+        }
+        finally {
+        }
+          return ;
+      }
+      catch (Exception e) {
+      }
+ }
+
+}
+
+ class a2  {
+interface ii {}
+
+
+
+ int f1() throws Exception {
+ <error descr="Missing return statement">}</error>
+ 
+ Object f2(int i) throws Exception {
+   if (i == 0) return null;
+ <error descr="Missing return statement">}</error>
+
+ Object f3(int i) throws Exception {
+   while (i == 0) return null;
+ <error descr="Missing return statement">}</error>
+
+ Object f4(int i) throws Exception {
+   switch (i) {
+     case 1: return null;
+   }
+ <error descr="Missing return statement">}</error>
+
+ Object f5(int i) throws Exception {
+   if (i==2) return null;
+   else if (i != 2) return null;
+ <error descr="Missing return statement">}</error>
+
+ Object f6(int i) throws Exception {
+   if (true) return null;
+ <error descr="Missing return statement">}</error>
+
+ int f7(int i) {
+  try {
+   if (i==2) return 4;
+   else throw new IllegalArgumentException();
+  } catch (Exception e) {
+  }
+ <error descr="Missing return statement">}</error>
+
+  int f8(int i) {
+    try {
+      //throw new Error();
+    }
+    finally {
+      try {
+        //throw new Exception();
+      }
+      catch (Exception e) {
+        return 5;
+      }
+    }
+ <error descr="Missing return statement">}</error>
+
+ int cf1(int i) {
+   return 0;
+ }
+ int cf2(int i) {
+   if (i==2) return 0;
+   else if (i==4) return -1;
+   else return 2;
+ }
+ int cf3(int i) {
+   return i==2 ? 3 : 5;
+ }
+ int cf4(int i) {
+   switch (i) {
+    case 1: return 4;
+    case 3: return 6;
+    default: return 5;
+   }
+ }
+ int cf5(int i) {
+   if (i>1) {
+    if (i==4) return 0;
+    else return i==3 ? 2 : 0;
+   }
+   else return 2;
+ }
+ int cf6(int i) {
+   return cf4(i+1);
+ }
+
+ int cf7(int i) throws Exception {
+   try {
+     throw new Exception();
+   } catch(Error e) {
+     return 3;
+   } finally {
+     return 2;
+   }
+
+ }
+
+ int cf8(int i) throws Exception {
+   try {
+     return 2;
+   } finally {
+     return 4;
+   }
+ }
+ int cf9(int i) throws Exception {
+   try {
+     i = 5;
+   } finally {
+     throw new Exception();
+   }
+ }
+
+ int cf10(int i) {
+
+   while (true)
+     return 0;
+ }
+ private static final int co = 1/2 + 1;
+ int cf12(int i) {
+
+   for (int k=0; (0xf0 | 0x0f) == 0xff && false != true && co == 1;k++)
+     return 0;
+ }
+
+
+ int cf13() {
+ try {
+  try {
+   throw new IllegalArgumentException();
+   //throw new java.io.IOException();
+  } catch (IllegalArgumentException e) {
+   return 3;
+  }
+  finally {
+   throw new java.io.IOException();
+  }
+
+ } catch (java.io.IOException ee) {
+   return 88;
+ }
+ }
+
+ int cf14() {
+   try {
+     cf13();
+     return 13;
+   } finally {
+     cf13();
+   }
+ }
+ 
+ int cf15() {
+  try {
+   int i=0;
+   return i;
+  } catch (Exception e) {
+  } finally {
+  }
+  return 0;
+ }
+ int cf16() {
+    try {
+      if ( ! (1==3)) {
+          return 0;
+      }
+    } finally {
+        // Restore the current position of the other DynAny
+    }
+    return 1;
+ }
+
+ int cf17() {
+        try {
+            try {
+                return 0;
+            } finally {
+            }
+        } finally {
+        }
+  }
+ int cf18(int i) {
+   int k;
+   try {
+      if (i==4) return 0;
+      k = 4;
+   } finally {
+   }
+   return k;
+  }
+
+
+ void cf19() {
+
+      try {
+
+        try {
+        }
+        finally {
+        }
+          return ;
+      }
+      catch (Exception e) {
+      }
+ }
+
+}
+
+
+ class a3  {
+interface ii {}
+
+
+
+ int f1() throws Exception {
+ <error descr="Missing return statement">}</error>
+ 
+ Object f2(int i) throws Exception {
+   if (i == 0) return null;
+ <error descr="Missing return statement">}</error>
+
+ Object f3(int i) throws Exception {
+   while (i == 0) return null;
+ <error descr="Missing return statement">}</error>
+
+ Object f4(int i) throws Exception {
+   switch (i) {
+     case 1: return null;
+   }
+ <error descr="Missing return statement">}</error>
+
+ Object f5(int i) throws Exception {
+   if (i==2) return null;
+   else if (i != 2) return null;
+ <error descr="Missing return statement">}</error>
+
+ Object f6(int i) throws Exception {
+   if (true) return null;
+ <error descr="Missing return statement">}</error>
+
+ int f7(int i) {
+  try {
+   if (i==2) return 4;
+   else throw new IllegalArgumentException();
+  } catch (Exception e) {
+  }
+ <error descr="Missing return statement">}</error>
+
+  int f8(int i) {
+    try {
+      //throw new Error();
+    }
+    finally {
+      try {
+        //throw new Exception();
+      }
+      catch (Exception e) {
+        return 5;
+      }
+    }
+ <error descr="Missing return statement">}</error>
+
+ int cf1(int i) {
+   return 0;
+ }
+ int cf2(int i) {
+   if (i==2) return 0;
+   else if (i==4) return -1;
+   else return 2;
+ }
+ int cf3(int i) {
+   return i==2 ? 3 : 5;
+ }
+ int cf4(int i) {
+   switch (i) {
+    case 1: return 4;
+    case 3: return 6;
+    default: return 5;
+   }
+ }
+ int cf5(int i) {
+   if (i>1) {
+    if (i==4) return 0;
+    else return i==3 ? 2 : 0;
+   }
+   else return 2;
+ }
+ int cf6(int i) {
+   return cf4(i+1);
+ }
+
+ int cf7(int i) throws Exception {
+   try {
+     throw new Exception();
+   } catch(Error e) {
+     return 3;
+   } finally {
+     return 2;
+   }
+
+ }
+
+ int cf8(int i) throws Exception {
+   try {
+     return 2;
+   } finally {
+     return 4;
+   }
+ }
+ int cf9(int i) throws Exception {
+   try {
+     i = 5;
+   } finally {
+     throw new Exception();
+   }
+ }
+
+ int cf10(int i) {
+
+   while (true)
+     return 0;
+ }
+ private static final int co = 1/2 + 1;
+ int cf12(int i) {
+
+   for (int k=0; (0xf0 | 0x0f) == 0xff && false != true && co == 1;k++)
+     return 0;
+ }
+
+
+ int cf13() {
+ try {
+  try {
+   throw new IllegalArgumentException();
+   //throw new java.io.IOException();
+  } catch (IllegalArgumentException e) {
+   return 3;
+  }
+  finally {
+   throw new java.io.IOException();
+  }
+
+ } catch (java.io.IOException ee) {
+   return 88;
+ }
+ }
+
+ int cf14() {
+   try {
+     cf13();
+     return 13;
+   } finally {
+     cf13();
+   }
+ }
+ 
+ int cf15() {
+  try {
+   int i=0;
+   return i;
+  } catch (Exception e) {
+  } finally {
+  }
+  return 0;
+ }
+ int cf16() {
+    try {
+      if ( ! (1==3)) {
+          return 0;
+      }
+    } finally {
+        // Restore the current position of the other DynAny
+    }
+    return 1;
+ }
+
+ int cf17() {
+        try {
+            try {
+                return 0;
+            } finally {
+            }
+        } finally {
+        }
+  }
+ int cf18(int i) {
+   int k;
+   try {
+      if (i==4) return 0;
+      k = 4;
+   } finally {
+   }
+   return k;
+  }
+
+
+ void cf19() {
+
+      try {
+
+        try {
+        }
+        finally {
+        }
+          return ;
+      }
+      catch (Exception e) {
+      }
+ }
+
+}
+
+
+
+ class a4  {
+interface ii {}
+
+
+
+ int f1() throws Exception {
+ <error descr="Missing return statement">}</error>
+ 
+ Object f2(int i) throws Exception {
+   if (i == 0) return null;
+ <error descr="Missing return statement">}</error>
+
+ Object f3(int i) throws Exception {
+   while (i == 0) return null;
+ <error descr="Missing return statement">}</error>
+
+ Object f4(int i) throws Exception {
+   switch (i) {
+     case 1: return null;
+   }
+ <error descr="Missing return statement">}</error>
+
+ Object f5(int i) throws Exception {
+   if (i==2) return null;
+   else if (i != 2) return null;
+ <error descr="Missing return statement">}</error>
+
+ Object f6(int i) throws Exception {
+   if (true) return null;
+ <error descr="Missing return statement">}</error>
+
+ int f7(int i) {
+  try {
+   if (i==2) return 4;
+   else throw new IllegalArgumentException();
+  } catch (Exception e) {
+  }
+ <error descr="Missing return statement">}</error>
+
+  int f8(int i) {
+    try {
+      //throw new Error();
+    }
+    finally {
+      try {
+        //throw new Exception();
+      }
+      catch (Exception e) {
+        return 5;
+      }
+    }
+ <error descr="Missing return statement">}</error>
+
+ int cf1(int i) {
+   return 0;
+ }
+ int cf2(int i) {
+   if (i==2) return 0;
+   else if (i==4) return -1;
+   else return 2;
+ }
+ int cf3(int i) {
+   return i==2 ? 3 : 5;
+ }
+ int cf4(int i) {
+   switch (i) {
+    case 1: return 4;
+    case 3: return 6;
+    default: return 5;
+   }
+ }
+ int cf5(int i) {
+   if (i>1) {
+    if (i==4) return 0;
+    else return i==3 ? 2 : 0;
+   }
+   else return 2;
+ }
+ int cf6(int i) {
+   return cf4(i+1);
+ }
+
+ int cf7(int i) throws Exception {
+   try {
+     throw new Exception();
+   } catch(Error e) {
+     return 3;
+   } finally {
+     return 2;
+   }
+
+ }
+
+ int cf8(int i) throws Exception {
+   try {
+     return 2;
+   } finally {
+     return 4;
+   }
+ }
+ int cf9(int i) throws Exception {
+   try {
+     i = 5;
+   } finally {
+     throw new Exception();
+   }
+ }
+
+ int cf10(int i) {
+
+   while (true)
+     return 0;
+ }
+ private static final int co = 1/2 + 1;
+ int cf12(int i) {
+
+   for (int k=0; (0xf0 | 0x0f) == 0xff && false != true && co == 1;k++)
+     return 0;
+ }
+
+
+ int cf13() {
+ try {
+  try {
+   throw new IllegalArgumentException();
+   //throw new java.io.IOException();
+  } catch (IllegalArgumentException e) {
+   return 3;
+  }
+  finally {
+   throw new java.io.IOException();
+  }
+
+ } catch (java.io.IOException ee) {
+   return 88;
+ }
+ }
+
+ int cf14() {
+   try {
+     cf13();
+     return 13;
+   } finally {
+     cf13();
+   }
+ }
+ 
+ int cf15() {
+  try {
+   int i=0;
+   return i;
+  } catch (Exception e) {
+  } finally {
+  }
+  return 0;
+ }
+ int cf16() {
+    try {
+      if ( ! (1==3)) {
+          return 0;
+      }
+    } finally {
+        // Restore the current position of the other DynAny
+    }
+    return 1;
+ }
+
+ int cf17() {
+        try {
+            try {
+                return 0;
+            } finally {
+            }
+        } finally {
+        }
+  }
+ int cf18(int i) {
+   int k;
+   try {
+      if (i==4) return 0;
+      k = 4;
+   } finally {
+   }
+   return k;
+  }
+
+
+ void cf19() {
+
+      try {
+
+        try {
+        }
+        finally {
+        }
+          return ;
+      }
+      catch (Exception e) {
+      }
+ }
+
+}
+
+ class a5  {
+interface ii {}
+
+
+
+ int f1() throws Exception {
+ <error descr="Missing return statement">}</error>
+ 
+ Object f2(int i) throws Exception {
+   if (i == 0) return null;
+ <error descr="Missing return statement">}</error>
+
+ Object f3(int i) throws Exception {
+   while (i == 0) return null;
+ <error descr="Missing return statement">}</error>
+
+ Object f4(int i) throws Exception {
+   switch (i) {
+     case 1: return null;
+   }
+ <error descr="Missing return statement">}</error>
+
+ Object f5(int i) throws Exception {
+   if (i==2) return null;
+   else if (i != 2) return null;
+ <error descr="Missing return statement">}</error>
+
+ Object f6(int i) throws Exception {
+   if (true) return null;
+ <error descr="Missing return statement">}</error>
+
+ int f7(int i) {
+  try {
+   if (i==2) return 4;
+   else throw new IllegalArgumentException();
+  } catch (Exception e) {
+  }
+ <error descr="Missing return statement">}</error>
+
+  int f8(int i) {
+    try {
+      //throw new Error();
+    }
+    finally {
+      try {
+        //throw new Exception();
+      }
+      catch (Exception e) {
+        return 5;
+      }
+    }
+ <error descr="Missing return statement">}</error>
+
+  int f9(int i) {
+    if (i==1) return 0;
+    else assert false;
+ <error descr="Missing return statement">}</error>
+
+
+
+ int cf1(int i) {
+   return 0;
+ }
+ int cf2(int i) {
+   if (i==2) return 0;
+   else if (i==4) return -1;
+   else return 2;
+ }
+ int cf3(int i) {
+   return i==2 ? 3 : 5;
+ }
+ int cf4(int i) {
+   switch (i) {
+    case 1: return 4;
+    case 3: return 6;
+    default: return 5;
+   }
+ }
+ int cf5(int i) {
+   if (i>1) {
+    if (i==4) return 0;
+    else return i==3 ? 2 : 0;
+   }
+   else return 2;
+ }
+ int cf6(int i) {
+   return cf4(i+1);
+ }
+
+ int cf7(int i) throws Exception {
+   try {
+     throw new Exception();
+   } catch(Error e) {
+     return 3;
+   } finally {
+     return 2;
+   }
+
+ }
+
+ int cf8(int i) throws Exception {
+   try {
+     return 2;
+   } finally {
+     return 4;
+   }
+ }
+ int cf9(int i) throws Exception {
+   try {
+     i = 5;
+   } finally {
+     throw new Exception();
+   }
+ }
+
+ int cf10(int i) {
+
+   while (true)
+     return 0;
+ }
+ private static final int co = 1/2 + 1;
+ int cf12(int i) {
+
+   for (int k=0; (0xf0 | 0x0f) == 0xff && false != true && co == 1;k++)
+     return 0;
+ }
+
+
+ int cf13() {
+ try {
+  try {
+   throw new IllegalArgumentException();
+   //throw new java.io.IOException();
+  } catch (IllegalArgumentException e) {
+   return 3;
+  }
+  finally {
+   throw new java.io.IOException();
+  }
+
+ } catch (java.io.IOException ee) {
+   return 88;
+ }
+ }
+
+ int cf14() {
+   try {
+     cf13();
+     return 13;
+   } finally {
+     cf13();
+   }
+ }
+ 
+ int cf15() {
+  try {
+   int i=0;
+   return i;
+  } catch (Exception e) {
+  } finally {
+  }
+  return 0;
+ }
+ int cf16() {
+    try {
+      if ( ! (1==3)) {
+          return 0;
+      }
+    } finally {
+        // Restore the current position of the other DynAny
+    }
+    return 1;
+ }
+
+ int cf17() {
+        try {
+            try {
+                return 0;
+            } finally {
+            }
+        } finally {
+        }
+  }
+ int cf18(int i) {
+   int k;
+   try {
+      if (i==4) return 0;
+      k = 4;
+   } finally {
+   }
+   return k;
+  }
+
+
+ void cf19() {
+
+      try {
+
+        try {
+        }
+        finally {
+        }
+          return ;
+      }
+      catch (Exception e) {
+      }
+ }
+ int cf20(boolean b1, boolean b2) {
+    do {
+    } while (b1 || b2);
+    return 0;
+ }
+
+ public boolean cf21() throws IOException {
+    try {
+      return geta();
+    }
+    catch(IOException e) {
+      throw new RuntimeException();
+    }
+    finally {
+      geta();
+    }
+ }
+ private boolean geta() throws IOException {
+    return true;
+ }
+
+ String complexAss(Object o, Object p) {
+   assert o != null && p != null;
+   return null;
+ }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ModifierAllowed.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ModifierAllowed.java
new file mode 100644
index 0000000..7ca27e6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ModifierAllowed.java
@@ -0,0 +1,77 @@
+// not allowed modifiers
+<error descr="Modifier 'private' not allowed here">private</error> 
+<error descr="Modifier 'static' not allowed here">static</error>
+<error descr="Modifier 'volatile' not allowed here">volatile</error>
+class a {
+
+  static 
+  <error descr="Modifier 'private' not allowed here">private</error>
+  <error descr="Modifier 'public' not allowed here">public</error>
+  <error descr="Modifier 'abstract' not allowed here">abstract</error> {
+    int i = 4;
+  }
+  <error descr="Modifier 'synchronized' not allowed here">synchronized</error> Object x;
+
+
+  private class c1 { 
+    private void ff() {}
+  }
+  static strictfp class c2 {}
+
+  private static interface ii {
+    <error descr="Modifier 'private' not allowed here">private</error> int f1 = 2;
+    <error descr="Modifier 'protected' not allowed here">protected</error> int f2 = 2;
+    public int f3 = 3;
+
+
+    <error descr="Modifier 'private' not allowed here">private</error> int f1();
+    <error descr="Modifier 'protected' not allowed here">protected</error> int f2();
+    public int f3();
+    void f4();
+
+  }
+
+  void f1(final String i) {
+    final int ii = 3;
+    <error descr="Modifier 'private' not allowed here">private</error> int i2;
+    <error descr="Modifier 'static' not allowed here">static</error> int i3;
+
+    try {
+     throw new Exception();
+    } catch (final <error descr="Modifier 'static' not allowed here">static</error> Exception e) {
+    }
+  }
+
+}
+
+interface ff {
+  static class cc {}
+}
+
+abstract class c {
+  <error descr="Modifier 'abstract' not allowed here">abstract</error> c();
+  <error descr="Modifier 'static' not allowed here">static</error> c(int i) {}
+  <error descr="Modifier 'native' not allowed here">native</error> c(boolean b);
+  <error descr="Modifier 'final' not allowed here">final</error> c(char c) {}
+  <error descr="Modifier 'strictfp' not allowed here">strictfp</error> c(String s) {}
+  <error descr="Modifier 'synchronized' not allowed here">synchronized</error> c(Object o) {}
+}
+
+interface i3 {
+  <error descr="Modifier 'strictfp' not allowed here">strictfp</error> int f1;
+  <error descr="Modifier 'transient' not allowed here">transient</error> int f2;
+  <error descr="Modifier 'synchronized' not allowed here">synchronized</error>  int f3;
+
+  <error descr="Modifier 'strictfp' not allowed here">strictfp</error> int m1() { return 0; }
+  <error descr="Modifier 'transient' not allowed here">transient</error> int m2() { return 0; }
+  <error descr="Modifier 'synchronized' not allowed here">synchronized</error>  int m3() { return 0; }
+}
+
+class LocalClassWithInner {
+    void foo () {
+          class A {
+             <error descr="Modifier 'private' not allowed here">private</error> class B {}
+             <error descr="Modifier 'public' not allowed here">public</error> class B1 {}
+        }
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/MultiFieldDeclNames.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/MultiFieldDeclNames.java
new file mode 100644
index 0000000..fea0a70
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/MultiFieldDeclNames.java
@@ -0,0 +1,4 @@
+class <symbolName descr="null" type="CLASS_NAME">Test</symbolName>{
+  int <symbolName descr="null" type="INSTANCE_FIELD">field1</symbolName> = 0, <symbolName descr="null" type="INSTANCE_FIELD">field2</symbolName> = 0;
+  int <symbolName descr="null" type="INSTANCE_FIELD">field3</symbolName>, <symbolName descr="null" type="INSTANCE_FIELD">field4</symbolName>;
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/MultipleSingleTypeImports.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/MultipleSingleTypeImports.java
new file mode 100644
index 0000000..38147e9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/MultipleSingleTypeImports.java
@@ -0,0 +1,9 @@
+// multiple single-type import of the same class 
+
+import java.io.IOException;
+<warning descr="Unused import statement">import java.io.IOException;</warning>
+
+
+public class c { 
+  public IOException m;
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/MustBeBoolean.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/MustBeBoolean.java
new file mode 100644
index 0000000..ff5afd5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/MustBeBoolean.java
@@ -0,0 +1,20 @@
+class c {
+  void f() {
+    Object o = null;
+    if (<error descr="Incompatible types. Found: 'java.lang.Object', required: 'boolean'">o</error>) {
+      return;
+    }
+
+    String str1 = "";
+    String str2 = "";
+    do {} 
+    while (<error descr="Incompatible types. Found: 'java.lang.String', required: 'boolean'">str1 = str2</error>);
+
+    int i8 = <error descr="Incompatible types. Found: 'java.lang.String', required: 'boolean'">"ff" + true</error> ? 1 : 2;
+
+    assert <error descr="Incompatible types. Found: 'int', required: 'boolean'">0</error>;
+    assert <error descr="Incompatible types. Found: 'char', required: 'boolean'">'a'</error>;
+    assert <error descr="Incompatible types. Found: 'java.lang.String', required: 'boolean'">""</error>; 
+    assert <error descr="Incompatible types. Found: 'void', required: 'boolean'">f()</error>;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/MustBeFinal.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/MustBeFinal.java
new file mode 100644
index 0000000..f2a914b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/MustBeFinal.java
@@ -0,0 +1,12 @@
+class m {
+  int i;
+  void f() {
+    int r = 0;
+    new Runnable() {
+      public void run() {
+        int k = <error descr="Variable 'r' is accessed from within inner class. Needs to be declared final.">r</error>;
+        int ii = i;
+      }
+    };
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/MustBeThrowable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/MustBeThrowable.java
new file mode 100644
index 0000000..bd4e59b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/MustBeThrowable.java
@@ -0,0 +1,46 @@
+class c {
+    void f1() {
+        try {
+        } catch (<error descr="Incompatible types. Found: 'java.lang.Error[]', required: 'java.lang.Throwable'">Error[] e</error>) {
+        }
+        try {
+        } catch (<error descr="Incompatible types. Found: 'java.lang.Error[]', required: 'java.lang.Throwable'">Error e[]</error>) {
+        }
+        try {
+        } catch (<error descr="Incompatible types. Found: 'java.lang.Error[][][][]', required: 'java.lang.Throwable'">Error[] []e[] []</error>) {
+        }
+        catch(<error descr="Incompatible types. Found: 'int', required: 'java.lang.Throwable'">int e</error>) {
+        }
+
+    }
+
+}
+
+class MyException // does not extend Throwable
+{}
+ 
+class a60
+{
+  public void test() throws <error descr="Incompatible types. Found: 'MyException', required: 'java.lang.Throwable'">MyException</error>
+  {
+    throw <error descr="Incompatible types. Found: 'MyException', required: 'java.lang.Throwable'">new MyException()</error>;
+  }
+  public void test(int i) {
+	switch (i) {
+		case 1: throw <error descr="Incompatible types. Found: 'boolean', required: 'java.lang.Throwable'">false</error>;
+		case 2: throw <error descr="Incompatible types. Found: 'int', required: 'java.lang.Throwable'">1</error>;
+		case 3: throw <error descr="Incompatible types. Found: 'double', required: 'java.lang.Throwable'">1.0</error>;
+		case 4: throw <error descr="Incompatible types. Found: 'char', required: 'java.lang.Throwable'">'a'</error>;
+		case 5: throw <error descr="Incompatible types. Found: 'long', required: 'java.lang.Throwable'">1L</error>;
+		case 6: throw <error descr="Incompatible types. Found: 'float', required: 'java.lang.Throwable'">1.0f</error>;
+	}
+  }
+}
+
+ class Contest {
+    short midget;
+
+    void strongMan() throws <error descr="Class name expected">midget</error> {
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/NamesHighlighting.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/NamesHighlighting.java
new file mode 100644
index 0000000..a92aefa
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/NamesHighlighting.java
@@ -0,0 +1,62 @@
+import <symbolName descr="null" type="CLASS_NAME">java.io</symbolName>.*; // highlight on demand import as class name
+
+class <symbolName descr="null" type="CLASS_NAME">a</symbolName> {
+  void <symbolName descr="null" type="METHOD_DECLARATION">method</symbolName>() {
+    <symbolName descr="null" type="METHOD_CALL">method</symbolName>();
+
+    new <symbolName descr="null" type="CONSTRUCTOR_CALL">Exception</symbolName>();
+    new <symbolName descr="null" type="CONSTRUCTOR_CALL">java.lang.Exception</symbolName>();
+  }
+
+  <symbolName descr="null" type="CONSTRUCTOR_DECLARATION">a</symbolName>() {
+    new <symbolName descr="null" type="CONSTRUCTOR_CALL">a</symbolName>();
+  }
+ 
+  /**
+   * @see <symbolName descr="null" type="INTERFACE_NAME">itf</symbolName>#<symbolName descr="null" type="ABSTRACT_METHOD">method</symbolName>(double)
+   */
+  static void <symbolName descr="null" type="METHOD_DECLARATION">f</symbolName>() {
+    <symbolName descr="null" type="CLASS_NAME">Integer</symbolName>.<symbolName descr="null" type="STATIC_METHOD">parseInt</symbolName>("");
+    <symbolName descr="null" type="CLASS_NAME">java.lang.Integer</symbolName>.<symbolName descr="null" type="STATIC_METHOD">parseInt</symbolName>("");
+    <symbolName descr="null" type="STATIC_METHOD">f</symbolName>();
+  }
+
+  interface <symbolName descr="null" type="INTERFACE_NAME">itf</symbolName> {
+    int <symbolName descr="null" type="STATIC_FINAL_FIELD">CONST</symbolName> = 0;
+
+    /**
+     * @param <symbolName descr="null" type="PARAMETER">d</symbolName> Important param
+     */
+    void <symbolName descr="null" type="METHOD_DECLARATION">method</symbolName>(double <symbolName descr="null" type="PARAMETER">d</symbolName>);
+  }
+
+  void <symbolName descr="null" type="METHOD_DECLARATION">ff</symbolName>(<symbolName descr="null" type="INTERFACE_NAME">Runnable</symbolName> <symbolName descr="null" type="PARAMETER">r</symbolName>) {
+     <symbolName descr="null" type="METHOD_CALL">ff</symbolName>(
+       new <symbolName descr="null" type="ANONYMOUS_CLASS_NAME">java.lang.Runnable</symbolName>() {
+         public void <symbolName descr="null" type="METHOD_DECLARATION">run</symbolName>() {}
+         int <symbolName descr="null" type="INSTANCE_FIELD">instance</symbolName> = 0;
+       }
+     );
+
+    int <symbolName descr="null" type="LOCAL_VARIABLE">i</symbolName> = <symbolName descr="null" type="CLASS_NAME">java.lang.Integer</symbolName>.<symbolName descr="null" type="STATIC_FINAL_FIELD">MIN_VALUE</symbolName>;
+    int <symbolName descr="null" type="LOCAL_VARIABLE">j</symbolName> = <symbolName descr="null" type="INTERFACE_NAME">itf</symbolName>.<symbolName descr="null" type="STATIC_FINAL_FIELD">CONST</symbolName>;
+  }
+}
+
+class <symbolName descr="null" type="CLASS_NAME">NoCtrClass</symbolName> {
+  {
+    // default constructor call looks like class
+    new <symbolName descr="null" type="CLASS_NAME">NoCtrClass</symbolName>();
+  }
+
+  void <symbolName descr="null" type="METHOD_DECLARATION">ff</symbolName>(int <symbolName descr="null" type="REASSIGNED_PARAMETER">param</symbolName>) {
+     int <symbolName descr="null" type="REASSIGNED_LOCAL_VARIABLE">i</symbolName> = 1;
+     <symbolName descr="null" type="REASSIGNED_LOCAL_VARIABLE">i</symbolName> ++;
+
+     <symbolName descr="null" type="REASSIGNED_PARAMETER">param</symbolName> = 0;
+  }
+}
+
+class <symbolName descr="null" type="CLASS_NAME">Generic</symbolName><<symbolName descr="null" type="TYPE_PARAMETER_NAME">TT</symbolName> extends <symbolName descr="null" type="INTERFACE_NAME">Runnable</symbolName>> {
+  <symbolName descr="null" type="TYPE_PARAMETER_NAME">TT</symbolName> <symbolName descr="null" type="INSTANCE_FIELD">field</symbolName>;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/NotAllowedInInterface.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/NotAllowedInInterface.java
new file mode 100644
index 0000000..f9e9a9a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/NotAllowedInInterface.java
@@ -0,0 +1,9 @@
+// Not allowed in interface
+
+
+interface A {
+    <error descr="Not allowed in interface">A();</error>
+    <error descr="Not allowed in interface">static {}</error>
+    <error descr="Not allowed in interface">{}</error>
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/NumericLiterals.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/NumericLiterals.java
new file mode 100644
index 0000000..becdda5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/NumericLiterals.java
@@ -0,0 +1,85 @@
+/*
+ * 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.
+ */
+
+/// assignment compatible types
+import java.io.*;
+import java.net.*;
+
+public class a  {
+  final int FI = 2;
+  final int FIBIG = 200000000;
+
+  void f() {
+    int i1= -<error descr="Integer number too large">2147483649</error>;
+    int i2= <error descr="Integer number too large">2147483648</error>;
+    int i3 = -2147483648;
+    int i4 = -0x7fffffff;
+    int i5 = -017777777777;
+    int i6 = <error descr="Hexadecimal numbers must contain at least one hexadecimal digit">0x</error>;
+    int i7 = 0xdeadbeef;
+    int i8 = 0xffffffff;
+    int i9 = <error descr="Integer number too large">0xffffffff9</error>;
+    int i10 = 0x80000000;
+    int i11 = 0000000000000+0x000000000;
+    int i12 = 0x00000000000000000000000;
+    int i13 = <error descr="Integer number too large">040000000000</error>;
+    int i14 = 020000000000;
+    int i15 = <error descr="Integer number too large">0xf044332211</error>;
+    int octale = 017777777777;  // negative
+    int bi1 = <error descr="Binary literals are not supported at this language level">0b0010</error>;
+    int bi2 = <error descr="Binary literals are not supported at this language level">0B0010</error>;
+    int bi3 = <error descr="Underscores in literals are not supported at this language level">1_2</error>;
+
+    long l1 = -<error descr="Long number too large">9223372036854775809L</error>;
+    long l2 = <error descr="Long number too large">9223372036854775808L</error>;
+    long l3 = -9223372036854775808L;
+    long l4 = -<error descr="Integer number too large">2147483649</error>;
+    long l5 = <error descr="Integer number too large">2147483648</error>;
+    long l6 = <error descr="Hexadecimal numbers must contain at least one hexadecimal digit">0xL</error>;
+    long l7 = 0xdeadbeefffffffffL;
+    long l8 = 0xffffffffffffffffL;
+    long l9 = <error descr="Long number too large">0xffffffffffffffff9L</error>;
+    long l10 = 0x8000000000000000L;
+    long octalValue = 01777777777777777777600L;
+    long octalValua = 01777777777777777777777L;
+    long bl1 = <error descr="Binary literals are not supported at this language level">0b0010l</error>;
+    long bl2 = <error descr="Binary literals are not supported at this language level">0B0010L</error>;
+    long bl3 = <error descr="Underscores in literals are not supported at this language level">10_24L</error>;
+
+    float f1= <error descr="Floating point number too small">1e-46f</error>;
+    float f2 = <error descr="Floating point number too large">1e39f</error>;
+    float f3 = 0E1F;
+    float f4 = <error descr="Hexadecimal floating point literals are not supported at this language level">0xabc.defP2f</error>;
+    float bf1 = <error descr="Underscores in literals are not supported at this language level">3.141_592f</error>;
+
+    double dd1 = <error descr="Floating point number too small">1e-324</error>;
+    double dd2 = <error descr="Floating point number too large">1e309</error>;
+    double dd3 = 0E1;
+    double dd4 = <error descr="Hexadecimal floating point literals are not supported at this language level">0x1.fffffffffffffP1023</error>;
+    double d1 = <error descr="Malformed floating point literal">1.E</error>;
+    double d2 = <error descr="Malformed floating point literal">1.e</error>;
+    double d3 = <error descr="Malformed floating point literal">1.E+</error>;
+    double d4 = <error descr="Malformed floating point literal">1.E-</error>;
+    double d5 = <error descr="Malformed floating point literal">.1eD</error>;
+    double d6 = <error descr="Malformed floating point literal">.1e+D</error>;
+    double d7 = <error descr="Malformed floating point literal">1e+D</error>;
+    double d8 = <error descr="Malformed floating point literal">1e-D</error>;
+    double d9 = <error descr="Malformed floating point literal">1e-d</error>;
+    double d10 = <error descr="Malformed floating point literal">1e-F</error>;
+    double d11 = <error descr="Malformed floating point literal">1e-f</error>;
+    double d12 = <error descr="Underscores in literals are not supported at this language level">3.141_592_653_589_793d</error>;
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/NumericOverflow.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/NumericOverflow.java
new file mode 100644
index 0000000..742d5fe
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/NumericOverflow.java
@@ -0,0 +1,88 @@
+// overflows in const expressions
+
+
+class c {
+ // @*#$& ! references do not work in JRE
+ static final long LONG_MIN_VALUE = 0x8000000000000000L;
+ static final long LONG_MAX_VALUE = 0x7fffffffffffffffL;
+ static final int INTEGER_MIN_VALUE = 0x80000000;
+ static final int INTEGER_MAX_VALUE = 0x7fffffff;
+ static final float FLOAT_MIN_VALUE = 1.4e-45f;
+ static final float FLOAT_MAX_VALUE = 3.4028235e+38f;
+ static final double DOUBLE_MIN_VALUE = 4.9e-324;
+ static final double DOUBLE_MAX_VALUE = 1.7976931348623157e+308;
+
+ void f() {
+   float f1 = <warning descr="Numeric overflow in expression">1.0f / 0.0f</warning>;
+   f1 = <warning descr="Numeric overflow in expression">FLOAT_MAX_VALUE + FLOAT_MAX_VALUE</warning>;
+   f1 = <warning descr="Numeric overflow in expression">FLOAT_MAX_VALUE * 2</warning>;
+   f1 = <warning descr="Numeric overflow in expression">2 / FLOAT_MIN_VALUE</warning>;
+   f1 = FLOAT_MIN_VALUE + 1;
+   f1 = - FLOAT_MIN_VALUE;
+   f1 = -FLOAT_MAX_VALUE;
+   System.out.println(f1);
+
+   double d1 = <warning descr="Numeric overflow in expression">DOUBLE_MAX_VALUE - -DOUBLE_MAX_VALUE</warning>;
+   d1 = DOUBLE_MAX_VALUE + 1;
+   d1 = <warning descr="Numeric overflow in expression">2 * DOUBLE_MAX_VALUE</warning>;
+   d1 = <warning descr="Numeric overflow in expression">2 / DOUBLE_MIN_VALUE</warning>;
+   d1 = <warning descr="Numeric overflow in expression">2 / 0.0d</warning>;
+   d1 = <warning descr="Numeric overflow in expression">2 / 0.0</warning>;
+   System.out.println(d1);
+
+
+   int i1 = <warning descr="Numeric overflow in expression">INTEGER_MAX_VALUE + 1</warning>;
+   i1 = <warning descr="Numeric overflow in expression">INTEGER_MAX_VALUE - 1 + 2</warning>;
+   i1 = <warning descr="Numeric overflow in expression">INTEGER_MAX_VALUE - INTEGER_MIN_VALUE</warning>;
+   i1 = <warning descr="Numeric overflow in expression">-INTEGER_MIN_VALUE</warning>;
+   i1 = <warning descr="Numeric overflow in expression">INTEGER_MIN_VALUE - 1</warning>;
+   i1 = <warning descr="Numeric overflow in expression">INTEGER_MIN_VALUE - INTEGER_MAX_VALUE</warning>;
+   i1 = INTEGER_MIN_VALUE + INTEGER_MAX_VALUE;
+   i1 = - INTEGER_MAX_VALUE;
+   i1 = - -INTEGER_MAX_VALUE;
+   i1 = <warning descr="Numeric overflow in expression">INTEGER_MIN_VALUE * -1</warning>;
+   i1 = <warning descr="Numeric overflow in expression">INTEGER_MIN_VALUE * 2</warning>;
+   i1 = <warning descr="Numeric overflow in expression">INTEGER_MAX_VALUE * -2</warning>;
+   i1 = INTEGER_MAX_VALUE * -1;
+   i1 = <warning descr="Numeric overflow in expression">2 / 0</warning>;
+   i1 = <warning descr="Numeric overflow in expression">INTEGER_MIN_VALUE / -1</warning>;
+   System.out.println(i1);
+
+   long l1 = <warning descr="Numeric overflow in expression">LONG_MAX_VALUE + 1</warning>;
+   l1 = <warning descr="Numeric overflow in expression">LONG_MAX_VALUE - 1 + 2</warning>;
+   l1 = <warning descr="Numeric overflow in expression">LONG_MAX_VALUE - LONG_MIN_VALUE</warning>;
+   l1 = <warning descr="Numeric overflow in expression">-LONG_MIN_VALUE</warning>;
+   l1 = <warning descr="Numeric overflow in expression">LONG_MIN_VALUE - 1</warning>;
+   l1 = <warning descr="Numeric overflow in expression">LONG_MIN_VALUE - LONG_MAX_VALUE</warning>;
+   l1 = LONG_MIN_VALUE + LONG_MAX_VALUE;
+   l1 = - LONG_MAX_VALUE;
+   l1 = - -LONG_MAX_VALUE;
+   l1 = <warning descr="Numeric overflow in expression">-INTEGER_MIN_VALUE</warning>;
+   l1 =  -1L + INTEGER_MIN_VALUE;
+   l1 = <warning descr="Numeric overflow in expression">LONG_MIN_VALUE * INTEGER_MIN_VALUE</warning>;
+   l1 = <warning descr="Numeric overflow in expression">LONG_MIN_VALUE * -1</warning>;
+   l1 = <warning descr="Numeric overflow in expression">LONG_MIN_VALUE * 2</warning>;
+   l1 = <warning descr="Numeric overflow in expression">LONG_MAX_VALUE * -2</warning>;
+   l1 = INTEGER_MIN_VALUE * -1L;
+   l1 = <warning descr="Numeric overflow in expression">2 / 0L</warning>;
+   l1 = <warning descr="Numeric overflow in expression">2 % 0L</warning>;
+   l1 = <warning descr="Numeric overflow in expression">LONG_MIN_VALUE / -1</warning>;
+
+   l1 = <warning descr="Numeric overflow in expression">30 * 24 * 60 * 60 * 1000</warning>; 
+   l1 = <warning descr="Numeric overflow in expression">30000000 * 243232323</warning> 
+        * (<warning descr="Numeric overflow in expression">LONG_MAX_VALUE +3</warning>) / 5; 
+   System.out.println(l1);
+
+
+   
+   }
+   
+    private static final long MILLIS_PER_DAY = 24 * 3600 * 1000;
+    private static final long _7DAYS = 7 * MILLIS_PER_DAY;
+    private static final long _30DAYS = 30 * MILLIS_PER_DAY;
+    private static final long _1000DAYS = 1000 * MILLIS_PER_DAY;
+    {
+       System.out.println(_1000DAYS + _30DAYS + _7DAYS);
+    }
+    int iii = <warning descr="Numeric overflow in expression">2 % 0</warning>;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/OperatorApplicability.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/OperatorApplicability.java
new file mode 100644
index 0000000..e60c440
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/OperatorApplicability.java
@@ -0,0 +1,70 @@
+// operators applicability
+public class a {
+
+  int f(int ik) {
+    if (<error descr="Operator '<' cannot be applied to 'int', 'null'">1 < null</error>) {}
+    if (<error descr="Operator '==' cannot be applied to 'null', 'char'">null == 'c'</error>) {}
+    Object o = null;
+    if (<error descr="Operator '>=' cannot be applied to 'double', 'java.lang.Object'">1.2 >= o</error>) {}
+    if (<error descr="Operator '!=' cannot be applied to 'long', 'java.lang.String'">1L != "null"</error>) {}
+    if (<error descr="Operator '==' cannot be applied to 'boolean', 'int'">(1==2) == 3</error>) {}
+
+    int i = (<error descr="Operator '+' cannot be applied to 'int', 'null'">1 + null</error>);
+    i = <error descr="Operator '/' cannot be applied to 'java.lang.Object', 'java.lang.Object'">o/o</error>;
+    i = <error descr="Operator '-' cannot be applied to 'null', 'double'">null - 1.2</error>;
+    i = <error descr="Operator '%' cannot be applied to 'boolean', 'int'">true % 4</error>;
+
+    i = <error descr="Operator '<<' cannot be applied to 'int', 'java.lang.Object'">i << o</error>;
+    i = <error descr="Operator '>>' cannot be applied to 'boolean', 'null'">(i==2) >> null</error>;
+    i = <error descr="Operator '>>>' cannot be applied to 'int', 'double'">i >>> 2.2</error>;
+
+    i = <error descr="Operator '&' cannot be applied to 'int', 'java.lang.Object'">i & o</error>;
+    i = <error descr="Operator '|' cannot be applied to 'boolean', 'double'">true | 2.1</error>;
+    i = <error descr="Operator '&&' cannot be applied to 'int', 'int'">2 && 3</error>;
+    i = <error descr="Operator '||' cannot be applied to 'double', 'long'">3.8 || 2L</error>;
+    i = <error descr="Operator '||' cannot be applied to 'null', 'java.lang.Object'">null || o</error>;
+
+    <error descr="Operator '|' cannot be applied to 'int', 'null'">i |= null</error>;
+    double d = 0;
+    <error descr="Operator '&' cannot be applied to 'double', 'int'">d &= i</error>;
+    <error descr="Operator '/' cannot be applied to 'java.lang.Object', 'int'">o /= 3</error>;
+
+
+    String sss2 = <error descr="Operator '+' cannot be applied to 'java.lang.String', 'void'">"" + fvoid()</error>;
+    int sss1 = <error descr="Operator '+' cannot be applied to 'void', 'int'">fvoid() + 2</error>;
+
+    int ia[] = null;
+    boolean b = 1==3 || 3 < '4' && (1>3.5) == (o == null) || false || (o == "d");
+    b = (1 != 'f') == (3.4 >= 'x') && o!=null & (b | (3<4));
+    i = i & 2 | i>>i ^ 15>>>4 & ~ia[i-- + (int)d] - (int)d;
+
+    b |= (i &= 7) == 5 | (null == null);
+    d *= (i -= 3) / 13.4;
+    ia[0]++;
+    ia[~i | (i+=(!b?2:i))] -= i + 3.3;
+    
+    // Object += String
+    <error descr="Operator '+' cannot be applied to 'java.lang.Object', 'java.lang.String'">o += o + "string"</error>;
+
+    return 0;
+  }
+
+  void fvoid() {}
+
+}
+
+class Test
+{
+   public void test(TestB a)
+   {
+     if(a == this)
+     {
+       System.out.println("a is equals to this");
+     }
+   }
+
+   public static interface TestB
+   {
+     public void bla();
+   }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/OverriddenMethodIsFinal.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/OverriddenMethodIsFinal.java
new file mode 100644
index 0000000..b1c3dd4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/OverriddenMethodIsFinal.java
@@ -0,0 +1,14 @@
+
+interface ConflictWithObject {
+    <error descr="'notify()' cannot override 'notify()' in 'java.lang.Object'; overridden method is final">public void notify()</error>;
+}
+
+//--override final-------------------------------------------------------------------------
+class base {
+ final void f() {}
+}
+class derived extends base {
+
+ <error descr="'f()' cannot override 'f()' in 'base'; overridden method is final">void f()</error> {}
+               
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/OverrideConflicts.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/OverrideConflicts.java
new file mode 100644
index 0000000..ef7cc75
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/OverrideConflicts.java
@@ -0,0 +1,106 @@
+// throws conflicts on overriding/ override final
+import java.io.*;
+import java.net.*;
+public class a extends c3 {
+ public void f() throws <error descr="'f()' in 'a' clashes with 'f()' in 'c3'; overridden method does not throw 'java.lang.Exception'">Exception</error> {
+ }
+}
+
+interface i {
+ void f() throws java.net.SocketException;
+}
+class c2 implements i {
+ public void f() throws <error descr="'f()' in 'c2' clashes with 'f()' in 'i'; overridden method does not throw 'java.io.IOException'">java.io.IOException</error> {}
+}
+class c2i implements i {
+ public void f() throws <error descr="'f()' in 'c2i' clashes with 'f()' in 'i'; overridden method does not throw 'java.lang.Exception'">Exception</error> {}
+}
+
+class c3 implements i {
+ public void f() throws java.net.ConnectException {}
+}
+
+class c4 extends c3 {
+ public void f() throws java.net.ConnectException {}
+}
+
+interface MethodsFromObject {
+  Object clone();
+}
+interface im extends MethodsFromObject {
+}
+<error descr="'clone()' in 'java.lang.Object' clashes with 'clone()' in 'MethodsFromObject'; overridden method does not throw 'java.lang.CloneNotSupportedException'">class cm implements MethodsFromObject</error> {
+}
+
+// sibling inheritance
+class c5 { public void f() throws Exception {} }
+interface i5 { void f(); }
+<error descr="'f()' in 'c5' clashes with 'f()' in 'i5'; overridden method does not throw 'java.lang.Exception'">class c6 extends c5 implements i5</error> {
+}
+
+// overriding method does not throw exception, its OK
+class c {
+    protected Object clone() {
+        return null;
+    }
+}
+interface i6 {
+
+}
+class b extends c implements i6 {
+
+}
+
+
+//-------------- methods with same signature
+interface AContract
+{
+  void invoke () throws Exception;
+}
+
+class A implements AContract
+{
+  public void invoke () throws Exception { }
+}
+
+interface BContract
+{
+  void invoke ();
+}
+
+class B extends A implements BContract
+{
+  public void invoke () { }
+}
+
+class C extends B 
+{
+}
+
+
+//////////////////////
+class Bug extends AbstrColl implements java.io.Serializable {
+}
+interface Coll  {
+    boolean equals(Object f);
+}
+class AbstrColl implements Coll {}
+
+interface InterfaceOverridesObject {
+    Object clone() throws java.io.IOException;
+}
+
+////////////multiple interface inheritance///////
+class sqlExcept extends Exception {}
+class sqlInheritorException extends sqlExcept {}
+class timeoutEx extends Exception{}
+
+interface AMultiple {
+  void m() throws java.io.IOException, sqlInheritorException;
+}
+
+interface BMultiple {
+  void m() throws java.io.EOFException, sqlExcept, timeoutEx;
+}
+
+interface DMultiple extends AMultiple, BMultiple {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/QualifiedNew.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/QualifiedNew.java
new file mode 100644
index 0000000..b832b91
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/QualifiedNew.java
@@ -0,0 +1,32 @@
+// Qualified new of static class
+
+class A {
+    b b;
+    A() {
+      <error descr="Qualified new of static class">b.new c()</error>;
+      b.new inner();
+    }
+    class inner {}
+
+    void f() {
+      char[] c = <error descr="Invalid qualified new">b.new char[0]</error>;
+    }
+}
+
+class b extends A {
+  static class c {}
+}
+
+
+class WithAnonym {
+  interface I {
+  }
+  class Inner{}
+}
+
+class WithAnonymInheritor extends WithAnonym {
+  {
+    <error descr="Anonymous class implements interface; cannot have qualifier for new">this.new I() {}</error>;
+    this.new Inner() {};
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/QualifiedSuper.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/QualifiedSuper.java
new file mode 100644
index 0000000..24c3444
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/QualifiedSuper.java
@@ -0,0 +1,48 @@
+class Outer {
+            class Inner1 extends Outer {
+              Inner1() {}
+              Inner1(Outer o) {}
+            }
+
+            class Inner2 extends Inner1 {
+                public Inner2(Object o) {
+                    <error descr="Incompatible types. Found: 'java.lang.Object', required: 'Outer'">o</error>.super();
+                }
+                public Inner2(int o) {
+                  Outer.this.super();
+                }
+                public Inner2(Outer o) {
+                  o.super(Outer.this);
+                }
+                public Inner2(Outer o, int par) {
+                  o.super(<error descr="Cannot reference 'this' before supertype constructor has been called">this</error>);
+                }
+                public Inner2(Outer o, Object par) {
+                  <error descr="Cannot reference 'this' before supertype constructor has been called">this</error>.super(o);
+                }
+            }
+
+            class BadInner extends Inner1 {
+              <error descr="Cannot reference 'BadInner.this' before supertype constructor has been called">BadInner()</error> {}
+            }
+            <error descr="Cannot reference 'BadInner2.this' before supertype constructor has been called">class BadInner2 extends Inner1</error> {
+            }
+
+            class s {
+                void f(Object o) {
+                    new s();
+                    Outer.this.new s();
+                }
+            }
+}
+
+class Outer2 {
+  class Inner {}
+}
+class Ext extends Outer2 {
+   class ExtInner extends Inner {
+       ExtInner() {
+         super();
+       }
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/QualifiedThisSuper.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/QualifiedThisSuper.java
new file mode 100644
index 0000000..cba08cd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/QualifiedThisSuper.java
@@ -0,0 +1,17 @@
+class Y {
+    int size = 4;
+}
+
+class Z extends Y {
+    class I {
+        void foo() {
+             System.out.println("size = " + <error descr="'Y' is not an enclosing class">Y.this</error>.size); // illegal construct
+        }
+    }
+}
+
+class R {
+    public void smu() {
+        System.out.println(<error descr="'Z' is not an enclosing class">Z.super</error>.toString());
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/QualifierBeforeClassName.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/QualifierBeforeClassName.java
new file mode 100644
index 0000000..ef81044
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/QualifierBeforeClassName.java
@@ -0,0 +1,21 @@
+class E {
+  class Outer {
+    class S {
+      public static final int SS = 0;
+    }
+  }
+
+  Outer f() {
+    int s = <error descr="Expected class or package">f()</error>.S.SS;
+    int s1 = <error descr="Expected class or package">this</error>.Outer.S.SS;
+    int s2 = Outer.S.SS;
+    return null;
+  }
+
+  class opopo {
+    public void main(String[] args) {
+      String java = "bla";
+      java.<error descr="Cannot resolve symbol 'lang'">lang</error>.String.valueOf("");
+    }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/RecursiveConstructorInvocation.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/RecursiveConstructorInvocation.java
new file mode 100644
index 0000000..9605da3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/RecursiveConstructorInvocation.java
@@ -0,0 +1,37 @@
+// recusrsive ctr call
+
+
+class s  {
+    <error descr="Recursive constructor invocation">s()</error> {
+        this();
+    }
+
+    <error descr="Recursive constructor invocation">s(int i)</error> {
+        this(2);
+    }
+}
+
+class c {
+  c() {
+    this(2);
+  }
+
+  <error descr="Recursive constructor invocation">c(int i)</error> {
+    this(1,1);
+  }
+  <error descr="Recursive constructor invocation">c(int i, int k)</error> {
+    this(1);
+  }
+}
+
+class cv {
+  cv() {
+    this(1);
+  }
+
+  cv(int i) {
+    this(1,2);
+  }
+
+  cv(int i,int j) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ReferenceMemberBeforeCtrCalled.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ReferenceMemberBeforeCtrCalled.java
new file mode 100644
index 0000000..fec91bc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ReferenceMemberBeforeCtrCalled.java
@@ -0,0 +1,174 @@
+// reference before ctr called
+import java.io.*;
+import java.net.*;
+
+class A {
+ A(int i) {}
+ A(A a) {}
+ int f() { return 0; }
+ int fi;
+} 	
+
+class B extends A {
+  int bi;
+  B(int h) {
+    super(<error descr="Cannot reference 'B.bi' before supertype constructor has been called">bi</error>);
+  }
+  B() {
+    this(<error descr="Cannot reference 'B.bi' before supertype constructor has been called">bi</error>);
+  }
+
+  B(String s) {
+    super(<error descr="Cannot reference 'B.db' before supertype constructor has been called">db</error>(1) );
+  }
+
+  B(int i, int j) {
+    super(<error descr="Cannot reference 'A.f' before supertype constructor has been called">f</error>());
+  }
+  B(int i, int j, int k) {
+    super(<error descr="Cannot reference 'A.f' before supertype constructor has been called">super.f</error>());
+  }
+
+  B(String s, int i) {
+    super(s.length());
+  }
+
+  B(int s, int i, char j) {
+    super(<error descr="Cannot reference 'A.fi' before supertype constructor has been called">super.fi</error> );
+  }
+
+  B(double d) {
+    super(new <error descr="Cannot reference 'Inner' before supertype constructor has been called">Inner</error>() );
+  }
+  class Inner extends A {
+    Inner(){
+      super(1);
+    }
+  }
+
+  int db(int j) { 
+   return 0;
+  }
+}
+
+
+class Enc {
+  int ienc;
+  class Bb extends A {
+    int ibb;
+    Bb() { super(ienc); }
+    Bb(int i) {
+      super(i);
+    }
+
+    Bb(int i, int j) {
+      super(<error descr="Cannot reference 'Bb.this' before supertype constructor has been called">Enc.Bb.this</error>.ibb );
+    }
+
+    Bb(int i, String s) {
+      super(Enc.this.ienc);
+    }
+
+    Bb(int i, char j) {
+      super(<error descr="Cannot reference 'this' before supertype constructor has been called">this</error> );
+    }
+  }
+
+  Enc() {
+    this(new <error descr="Cannot reference 'Bb' before supertype constructor has been called">Bb</error>());
+  }
+  Enc(Bb b) {}
+}
+
+// static are OK
+class C2 extends A {
+  static final int fi = 4;
+  C2() {
+    super(fi);
+  }
+  C2(int i) {
+    super(sf());
+  }
+  static int sf() { return 0; }
+
+  C2(int i, int j) {
+    super(new Sc().i);
+  }
+  static class Sc {
+    int i;
+  }
+}
+
+interface Callback {
+    void call();
+}
+
+class Base {
+    Callback callback;
+
+    public Base(final Callback callback) {
+        this.callback = callback;
+    }
+}
+
+class YellinBug extends Base {
+    public YellinBug() {
+        super(new Callback() {
+
+            public void call() {
+               <error descr="Cannot reference 'YellinBug.this' before supertype constructor has been called">YellinBug.this</error>.f();
+            }
+        });
+    }
+
+    private void f() {}
+
+    {
+        new Callback() {
+
+            public void call() {
+                YellinBug.this.f();
+            }
+        };
+    }
+}
+
+class Outer {
+  class Inner extends Outer{}
+  class UseIt extends Inner{
+    Outer o;
+    UseIt() {
+      <error descr="Cannot reference 'UseIt.o' before supertype constructor has been called">o</error>.super();
+    }
+
+    Outer geto() {
+     return null;
+    }
+    UseIt(int x) {
+      <error descr="Cannot reference 'UseIt.geto' before supertype constructor has been called">geto</error>().super();
+    }
+    UseIt(Outer x) {
+      <error descr="Cannot reference 'this' before supertype constructor has been called">this</error>.super();
+    }
+  }
+}
+
+class WithAnonymous {
+  static class SuperClass {
+      public void foo() {}
+  } 
+  class ChildClass extends SuperClass {
+  
+      public ChildClass(final String title) {
+          this(new SuperClass(){
+              {
+                  foo();
+              }
+          });
+      }
+  
+      public ChildClass(SuperClass child) {
+      }
+  
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/Regexp.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/Regexp.java
new file mode 100644
index 0000000..6269ee8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/Regexp.java
@@ -0,0 +1,6 @@
+class C {
+  void foo() {
+    "".replaceAll("\\Q\r\n\\E", "");
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/Return.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/Return.java
new file mode 100644
index 0000000..f75c602
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/Return.java
@@ -0,0 +1,20 @@
+class s {
+  void f() {
+    <error descr="Cannot return a value from a method with void result type">return 0;</error>
+  }
+  void f2() {
+    return;
+  }
+
+  int f3() {
+    <error descr="Missing return value">return;</error>
+  }
+  int f4() {
+    return 0;
+  }
+
+  {
+    <error descr="Return outside method">return;</error>
+
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/SerializableStuff.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/SerializableStuff.java
new file mode 100644
index 0000000..2eb209f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/SerializableStuff.java
@@ -0,0 +1,62 @@
+// Serializable/externalizable specific
+
+import java.io.*;
+class a implements Serializable {
+   private void readObject(ObjectInputStream stream)
+        throws IOException, ClassNotFoundException {
+       if (stream == null) throw new IOException();
+       if (stream == null) throw new ClassNotFoundException();
+   }
+
+   private void readObjectNoData() throws ObjectStreamException {
+       if (this == null) throw new ObjectStreamException(){};
+   }
+
+
+   private Object readResolve()
+                    throws ObjectStreamException {
+       if (this == null) throw new ObjectStreamException(){};
+       return null;
+   }
+
+   private Object writeReplace() { return null; }
+   private void writeObject(ObjectOutputStream stream) { if (stream==null) return; }
+
+  
+}
+
+class b  {
+   private void <warning descr="Private method 'readObject(java.io.ObjectInputStream)' is never used">readObject</warning>(ObjectInputStream stream)
+        throws IOException, ClassNotFoundException {
+       if (stream == null) throw new IOException();
+       if (stream == null) throw new ClassNotFoundException();
+   }
+
+   private void <warning descr="Private method 'readObjectNoData()' is never used">readObjectNoData</warning>() throws ObjectStreamException {
+       if (this == null) throw new ObjectStreamException(){};
+   }
+
+
+   private Object <warning descr="Private method 'readResolve()' is never used">readResolve</warning>()
+                    throws ObjectStreamException {
+       if (this == null) throw new ObjectStreamException(){};
+       return null;
+   }
+
+   private Object <warning descr="Private method 'writeReplace()' is never used">writeReplace</warning>() { return null; }
+   private void <warning descr="Private method 'writeObject(java.io.ObjectOutputStream)' is never used">writeObject</warning>(ObjectOutputStream stream) { if (stream==null) return; }
+}
+
+////////////////////////////
+
+abstract class abstractNoSerializable {
+  protected Object readResolve() throws ObjectStreamException {
+    return null;
+  }
+}
+
+class serializableSubclassOfAbstractNoSerializable extends abstractNoSerializable implements Serializable {
+  public static void main(String[] args) {
+    System.out.println(new serializableSubclassOfAbstractNoSerializable().toString());
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/SillyAssignment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/SillyAssignment.java
new file mode 100644
index 0000000..60bdb4f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/SillyAssignment.java
@@ -0,0 +1,37 @@
+// silly asignment
+import javax.swing.*;
+
+class a {
+  int f;
+  JPanel fpanel;
+
+  void f(int i) {
+
+   <warning descr="Variable 'i' is assigned to itself">i = i</warning>;
+  }
+
+  void f2() {
+    <warning descr="Variable 'f' is assigned to itself">this.f = f</warning>;
+    <warning descr="Variable 'f' is assigned to itself">a.this.f = f</warning>;
+    <warning descr="Variable 'f' is assigned to itself">f = this.f</warning>;
+  }
+
+  void f3(Object o) {
+    int i = 0;
+    <warning descr="Variable 'i' is assigned to itself">i = i</warning>;
+    <warning descr="Variable 'i' is assigned to itself">i = (int)i</warning>;
+    <warning descr="Variable 'o' is assigned to itself">o = ((Object)(o))</warning>;
+  }
+  void f4() {
+    fpanel.getSize().height = this.fpanel.getSize().height; // not silly. Are you sure you can bet getSize() has no side effects? 
+  }
+
+  void cf1() {
+    JPanel a = new JPanel(), b = new JPanel();
+    a.getSize().height = b.getSize().height; // not silly!
+  }
+
+  void cf2(a aa) {
+    aa.f = f;
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/SingleTypeImportConflicts.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/SingleTypeImportConflicts.java
new file mode 100644
index 0000000..7a7c9df
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/SingleTypeImportConflicts.java
@@ -0,0 +1,11 @@
+// single import conflict
+import java.sql.Date;
+<error descr="'java.sql.Date' is already defined in a single-type import">import java.util.Date;</error>
+import java.sql.*;
+import java.util.*;
+// multiple single-type import of the same class is fine
+import java.io.IOException;
+import java.io.IOException;
+
+
+public class c {}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/StaticInInner.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/StaticInInner.java
new file mode 100644
index 0000000..a8c82f3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/StaticInInner.java
@@ -0,0 +1,114 @@
+//statics in inner
+public class a {
+
+  static final Number x = null;
+  static final int ix = x== null ? 4 : 3;
+
+  class ic {
+    <error descr="Inner classes cannot have static declarations">static</error>
+      int i;
+
+    <error descr="Inner classes cannot have static declarations">static</error>
+      final int f1 = 3 < 4 ? (a.ix==5 ?  1 : 3) / 4 + 18 : 0;
+
+    <error descr="Inner classes cannot have static declarations">static</error> 
+      final int f2 = x instanceof Integer ? 1 : 0;
+
+    <error descr="Inner classes cannot have static declarations">static</error> 
+      class a_ic_c {}
+
+    <error descr="Inner classes cannot have static declarations">interface a_ic_i</error> {}
+    <error descr="Inner classes cannot have static declarations">static</error>  interface a_ic_i2 {}
+
+    <error descr="Inner classes cannot have static declarations">static</error> 
+      int a_ic_m(String s) { return 0; }
+
+    // static initializer
+    <error descr="Inner classes cannot have static declarations">static</error>
+    {}
+  }
+
+
+  interface ii {
+    static int i = 9;
+    void f();
+    // since nested interface is implicitly static:
+    static class ii_c {}
+  }
+
+  // static inside class inside code block
+  void f() {
+  class ic2 {
+    <error descr="Inner classes cannot have static declarations">static</error>
+      int i;
+
+    <error descr="Inner classes cannot have static declarations">static</error>
+      final int f1 = 3 < 4 ? (a.ix==5 ?  1 : 3) / 4 + 18 : 0;
+
+    <error descr="Inner classes cannot have static declarations">static</error> 
+      final int f2 = x instanceof Integer ? 1 : 0;
+
+    <error descr="Modifier 'static' not allowed here">static</error> 
+      class a_ic_c2 {}
+
+    <error descr="Inner classes cannot have static declarations">static</error> 
+      int a_ic_m2(String s) { return 0; }
+    // static initializer
+    <error descr="Inner classes cannot have static declarations">static</error>
+    {}
+  }
+  }
+
+  void f1() 
+  {
+    new a() {
+    <error descr="Inner classes cannot have static declarations">static</error>
+      int i;
+
+    <error descr="Inner classes cannot have static declarations">static</error>
+    final int f1 = 3 < 4 ? (a.ix==5 ?  1 : 3) / 4 + 18 : 0;
+
+    // its not a compile time constant
+    <error descr="Inner classes cannot have static declarations">static</error> 
+      final Object o = null;
+
+    <error descr="Inner classes cannot have static declarations">static</error> 
+      final int f2 = x instanceof Integer ? 1 : 0;
+
+    <error descr="Modifier 'static' not allowed here">static</error> 
+      class a_ic_c2 {}
+
+    <error descr="Inner classes cannot have static declarations">static</error> 
+      int a_ic_m2(String s) { return 0; }
+    // static initializer
+    <error descr="Inner classes cannot have static declarations">static</error>
+    {}
+    };
+  }
+
+  // local interface
+  class cc {
+    void f() {
+      <error descr="Modifier 'interface' not allowed here">interface i</error> {}
+    }
+    void ff() {
+      class inn {
+        <error descr="Inner classes cannot have static declarations">interface i</error> {}
+      }
+    }
+
+    Object o = new Runnable() {
+      <error descr="Inner classes cannot have static declarations">interface i</error> {}
+      public void run() {}
+    };
+  }
+
+  void withanonymous() {
+    new Object() {
+      <error descr="Modifier 'private' not allowed here">private</error> class RT {}
+      private void method() {}
+      private int myI;
+    };
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/StaticOverride.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/StaticOverride.java
new file mode 100644
index 0000000..2229311
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/StaticOverride.java
@@ -0,0 +1,132 @@
+// method override
+import java.io.*;
+import java.net.*;
+
+public class a extends a1 {
+ <error descr="Static method 'f()' in 'a' cannot override instance method 'f()' in 'a1'">public static void f()</error> { }
+ <error descr="Instance method 'f1()' in 'a' cannot override static method 'f1()' in 'a1'">public void f1()</error> { }
+}
+class a1 {
+ public void f() {}
+ public static void f1() {}
+}
+
+interface i {
+ void f1();
+}
+
+<error descr="Static method 'f1()' in 'a1' cannot override instance method 'f1()' in 'i'">class c_a1_i extends a1 implements i</error> {
+}
+
+interface ii {
+ int f();
+}
+
+<error descr="'f()' in 'a1' clashes with 'f()' in 'ii'; attempting to use incompatible return type">abstract class c_a1_ii extends a1 implements ii</error> {
+}
+
+interface i2 {
+ int f1();
+}
+<error descr="'f1()' in 'i2' clashes with 'f1()' in 'i'; methods have unrelated return types">interface i3 extends i, i2</error> {
+}
+
+class weak {
+  void f1() {}
+}
+<error descr="'f1()' in 'weak' clashes with 'f1()' in 'i'; attempting to assign weaker access privileges ('packageLocal'); was 'public'">class a2 extends weak implements i</error> {
+}
+
+class a3 {
+  protected void f1() {}
+}
+<error descr="'f1()' in 'a3' clashes with 'f1()' in 'i'; attempting to assign weaker access privileges ('protected'); was 'public'">class a4 extends a3 implements i</error> {
+//  public void f1() {}
+}
+class a5 extends a3 implements i {
+  // if we override suspicious method, its OK
+  public void f1() {}
+}
+
+
+
+// deep inherit
+class da1 { void f() {} }
+class da2 extends da1 { void f() {} }
+class da3 extends da2 {}
+
+
+
+
+interface MyInterface
+{
+    public void myMethod();
+}
+class MyInterfaceImpl implements MyInterface 
+{
+    <error descr="Static method 'myMethod()' in 'MyInterfaceImpl' cannot override instance method 'myMethod()' in 'MyInterface'">public static void myMethod()</error> { /* implementation goes here */ }
+
+    <error descr="Static method 'toString()' in 'MyInterfaceImpl' cannot override instance method 'toString()' in 'java.lang.Object'">private static String toString()</error> {
+        return null;
+    }
+
+}
+
+
+
+// Sun-style inheritance
+public class Sunc {
+  protected void f() {}
+}
+public class Suncc extends Sunc  {
+  public void f() {}
+}
+public interface Suni {
+  public void f();
+}
+class Sunccc extends Suncc implements Suni {
+}
+
+// override static
+class StA {
+  public static StA createInstance() {
+    return new StA();
+  }
+}
+class StB extends StA {
+  public static <error descr="'createInstance()' in 'StB' clashes with 'createInstance()' in 'StA'; attempting to use incompatible return type">String</error> createInstance() {
+    return null;
+  }
+}
+
+////////
+class Foo {
+    protected static void foo(String s) {}
+}
+public class Bar extends Foo{
+    <error descr="'foo(String)' in 'Bar' clashes with 'foo(String)' in 'Foo'; attempting to assign weaker access privileges ('private'); was 'protected'">private</error> static void foo(String s) {}
+}
+
+
+/////////////  IDEADEV-41779
+class A {
+    public static C C() { return new C(); }
+}
+class B extends A {
+}
+class C extends B {
+    public C() {}
+}
+///////////////////////////
+class Z1 {
+    public static final void doItBaby() {
+        System.out.println("Hello, diar A");
+    }
+}
+
+class Z2 extends Z1 {
+    <error descr="'doItBaby()' cannot override 'doItBaby()' in 'Z1'; overridden method is final">public static void doItBaby()</error> {
+        System.out.println("Hello, diar B");
+    }
+}
+///////////////////
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/StaticViaInstance.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/StaticViaInstance.java
new file mode 100644
index 0000000..ceeea4d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/StaticViaInstance.java
@@ -0,0 +1,31 @@
+// access static via instance
+class AClass
+{
+    public int get() {
+        int i = <warning descr="Static member 'AClass.fff' accessed via instance reference">this.fff</warning>;
+        return i;
+    }
+    public static AClass getA() {
+        return null;
+    }
+
+    Object gg()
+    {
+      return <warning descr="Static member 'AClass.getA()' accessed via instance reference">this.getA</warning>();
+    }
+    static int fff;
+
+    protected static class R {
+        static int rr = 0;
+    }
+    public R getR() {
+        return null;
+    }
+}
+
+class anotherclass {
+    int f(AClass d){
+        int i = <warning descr="Static member 'AClass.R.rr' accessed via instance reference">d.getR().rr</warning>;
+        return i;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/StringLiterals.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/StringLiterals.java
new file mode 100644
index 0000000..50f7e9d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/StringLiterals.java
@@ -0,0 +1,52 @@
+/*
+ * 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.
+ */
+
+// string literal
+public class a {
+  char c1 =  <error descr="Empty character literal">''</error>;
+  char c2 =  <error descr="Illegal escape character in character literal">'\dd'</error>;
+  char c4 =  <error descr="Too many characters in character literal">'xxx'</error>;
+  char c5 =  <error descr="Too many characters in character literal">'\78'</error>;
+  char c6 =  <error descr="Too many characters in character literal">'\78'</error>;
+
+  char[] cA = new char[] { 'd','\b','\f','\n','\r'
+             ,'\t','"','\\',' ','\u1234','\uFFFF'
+             , '\7', '\77', '\345', '\0', <error descr="Unclosed character literal">'x</error>
+  };
+
+  String s1 =  <error descr="Illegal escape character in string literal">"\xd"</error>;
+  String s11=  <error descr="Illegal escape character in string literal">"\udX"</error>;
+  String s12=  <error descr="Illegal escape character in string literal">"c:\TEMP\test.jar"</error>;
+  String s3 = "";
+  String s4 = "\u0000";
+
+  String s5 = <error descr="Illegal escape character in string literal">"\u000d"</error>;
+  String s6 = <error descr="Illegal escape character in string literal">"\u000a"</error>;
+  char c7 = <error descr="Illegal escape character in character literal">'\u000d'</error>;
+  char c8  = <error descr="Illegal escape character in character literal">'\u000a'</error>;
+
+  String perverts = "\uuuuuuuuuuuu1234";
+  char perv2 = '\uu3264';
+
+  void foo(String a) {
+     foo(<error descr="Illegal line end in string literal">"aaa</error>
+     );
+  }
+
+  String[] s = {
+    <error descr="Illegal line end in string literal">"unclosed</error>
+  };
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/StringSwitchLabels.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/StringSwitchLabels.java
new file mode 100644
index 0000000..9b8f99b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/StringSwitchLabels.java
@@ -0,0 +1,23 @@
+public class Test {
+  private static final String BAZ = "baz";
+
+  private void stringSwitch() {
+      final String bar = "bar";
+      String key = "key";
+      switch (<error>key</error>) {
+          case "": {
+              System.out.println("Nothing");
+              break;
+          }
+          case "foo":
+          case bar:
+          case BAZ: {
+              System.out.println("Matched key");
+              break;
+          }
+          default:
+              break;
+      }
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/Suppressed.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/Suppressed.java
new file mode 100644
index 0000000..9ee533f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/Suppressed.java
@@ -0,0 +1,8 @@
+public class Suppressed {
+  private static final String UNUSED_DECLARATION = "UnusedDeclaration";
+
+  @java.lang.SuppressWarnings(UNUSED_DECLARATION)
+  public static void main(String[] args) {
+    int i = 0;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/SwitchStatement.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/SwitchStatement.java
new file mode 100644
index 0000000..a768aac
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/SwitchStatement.java
@@ -0,0 +1,35 @@
+// switch statement
+
+class a {
+    {
+        <error descr="Case statement outside switch">case 0:</error>
+    }
+    {
+        <error descr="Case statement outside switch">default:</error>
+    }
+
+    {
+        switch (0) {
+         case 0<error descr="':' expected">;</error>
+        }
+
+        switch (0) {
+         default<error descr="':' expected">;</error>
+        }
+
+        switch (0) {
+        ////////////////
+        /** 
+        */
+        <error descr="Statement must be prepended with case label">System.out.println();</error>
+        
+
+        default<error descr="':' expected">;</error>
+        }
+
+        switch (0) {
+          <error descr="Statement must be prepended with case label">break;</error>
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/SynchronizedExpression.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/SynchronizedExpression.java
new file mode 100644
index 0000000..6f7edfb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/SynchronizedExpression.java
@@ -0,0 +1,20 @@
+// sync statement
+
+class a {
+  void f() {
+
+        synchronized (<error descr="Incompatible types. Found: 'null', required: 'java.lang.Object'">null</error>) {
+        }
+        synchronized (<error descr="Incompatible types. Found: 'int', required: 'java.lang.Object'">0</error>) {
+        }
+        synchronized (<error descr="Incompatible types. Found: 'char', required: 'java.lang.Object'">'a'</error>) {
+        }
+        synchronized (<error descr="Incompatible types. Found: 'boolean', required: 'java.lang.Object'">true</error>) {
+        }
+        synchronized (<error descr="Incompatible types. Found: 'void', required: 'java.lang.Object'">System.out.println()</error> ) {
+        }
+
+
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/Ternary.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/Ternary.java
new file mode 100644
index 0000000..c34b5e9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/Ternary.java
@@ -0,0 +1,31 @@
+// ternary operator
+
+class a {
+ void f1() {
+    byte b = 4;
+    int i = 2;
+    boolean bo = false;
+    long l = 5;
+    float f = 5;
+    double d = 45;
+
+    String s;
+    <error descr="Incompatible types. Found: 'int', required: 'java.lang.String'">s = bo ? 1 : 2</error>;
+    <error descr="Incompatible types. Found: 'long', required: 'java.lang.String'">s = bo ? 1L: 2</error>;
+    <error descr="Incompatible types. Found: 'byte', required: 'java.lang.String'">s = bo ? b : 2</error>;
+    <error descr="Incompatible types. Found: 'int', required: 'java.lang.String'">s = bo ? b : b+2</error>;
+    <error descr="Incompatible types. Found: 'long', required: 'java.lang.String'">s = bo ? b+1L : 2</error>;
+    <error descr="Incompatible types. Found: 'float', required: 'java.lang.String'">s = bo ? f : f+2</error>;
+    <error descr="Incompatible types. Found: 'double', required: 'java.lang.String'">s = bo ? d : 2</error>;
+
+ }
+
+ void cf1() {
+
+        byte[] byteArr = new byte[10];
+        boolean bool = true;
+        byte i = bool ? byteArr[0] : 0;
+ }
+
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ThisBeforeSuper.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ThisBeforeSuper.java
new file mode 100644
index 0000000..adb1fda
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ThisBeforeSuper.java
@@ -0,0 +1,26 @@
+class A
+{
+    class B
+    {
+    }
+}
+
+
+class C extends A
+{
+    class D extends B
+    {
+        D(){
+            C.this.super();
+        }
+    }
+}
+
+class C1 {
+    class B1 {}
+    class D1 extends C1.B1 {
+        D1() {
+            C1.this.super();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ThisInInterface.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ThisInInterface.java
new file mode 100644
index 0000000..4f1b9b3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ThisInInterface.java
@@ -0,0 +1,24 @@
+class C implements A {
+    C(A a) {}
+}
+
+interface A {
+    A a = new C(<error descr="Cannot find symbol variable this">this</error>);
+    A a1 = new C(<error descr="Cannot find symbol variable this">this</error>){};
+
+    class B  {
+        A foo() {
+            return <error descr="Cannot find symbol variable this">A.this</error>;
+        }
+
+        B foo1() {
+            return B.this;
+        }
+
+        class D {
+            B f() {
+                return B.this;
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/UnclosedBlockComment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/UnclosedBlockComment.java
new file mode 100644
index 0000000..9060718
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/UnclosedBlockComment.java
@@ -0,0 +1,8 @@
+// unclosed comment
+/*
+
+import java.io.*;
+import java.net.*;
+
+class a {
+<error descr="Unclosed comment">}</error>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/UnclosedComment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/UnclosedComment.java
new file mode 100644
index 0000000..24870ee
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/UnclosedComment.java
@@ -0,0 +1,9 @@
+// unclosed comment
+
+
+import java.io.*;
+import java.net.*;
+
+/**
+class a {
+  int i<error descr="Unclosed comment">;</error>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/UnclosedDecl.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/UnclosedDecl.java
new file mode 100644
index 0000000..92d457bb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/UnclosedDecl.java
@@ -0,0 +1,3 @@
+// unclosed decl
+
+class a {<EOLError/>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/UndefinedLabel.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/UndefinedLabel.java
new file mode 100644
index 0000000..f4630d2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/UndefinedLabel.java
@@ -0,0 +1,42 @@
+/// labels
+import java.io.*;
+import java.net.*;
+
+public class a  {
+
+  void f(final boolean b) {
+    while (b) break <error descr="Undefined label: 'lab1'">lab1</error>;
+    while (b) continue <error descr="Undefined label: 'lab1'">lab1</error>;
+
+    for (;;) {
+      lab2: ;
+      break <error descr="Undefined label: 'lab2'">lab2</error>;
+      continue <error descr="Undefined label: 'lab2'">lab2</error>;
+    }
+
+    lab3:
+    new Runnable() {
+      public void run() {
+        while (true) {
+          if (b) break <error descr="Undefined label: 'lab3'">lab3</error>;
+          if (b) continue <error descr="Undefined label: 'lab3'">lab3</error>;
+        }
+      }
+    };
+  }
+
+  void cf() {
+     boolean b = false;
+     while (b) {
+       lab0: break lab0;
+     }
+
+     lab1: try {
+       lab2: for (;b;) if (1==3) continue lab2;
+       break lab1;
+     }
+     finally {
+       break lab1;
+     }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/UnhandledExceptionsInSuperclass.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/UnhandledExceptionsInSuperclass.java
new file mode 100644
index 0000000..721be46
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/UnhandledExceptionsInSuperclass.java
@@ -0,0 +1,178 @@
+// unhandled exceptions from superclases/etc
+import java.io.*;
+import java.net.*;
+public class a  {
+ a(int i) {}
+}
+
+// super ctr
+
+<error descr="There is no default constructor available in 'a'">class b extends a</error> {
+}
+
+class c extends a {
+  <error descr="There is no default constructor available in 'a'">c()</error> {
+  }
+
+  c(String s) {
+    this(1);
+  }
+  c(int i) {
+    super(i);
+  }
+}
+
+class A {
+    private A() {}
+    class B extends A {}
+}
+
+class A1 {
+    A1() throws Exception {}
+}
+
+<error descr="Unhandled exception: java.lang.Exception">class B1 extends A1</error>
+{}
+
+class A2 extends A1 {
+  <error descr="Unhandled exception: java.lang.Exception">A2()</error> {}
+}
+
+
+// exception thrown from within anonymous
+class A3 {
+    void f() throws Exception {
+        new A3() {
+            int g() throws Exception {
+                return 0;
+            }
+            int k=g();
+        };
+    }
+}
+
+
+// in initializer
+class Test{
+  final String s = <error descr="Unhandled exception: java.lang.Exception">makeString();</error>
+  String makeString() throws Exception {throw new Exception();}
+}
+
+
+class C1 {
+  public C1() throws IllegalArgumentException {}
+}
+class C2 extends C1 {
+  public C2() {
+  }
+}
+
+// private but accessible base ctr
+class D1 {
+    private D1() {}
+    static class D2 extends D1 {
+        D2() {
+            System.out.println("!");
+        }
+    }
+
+    public static void main(String[] args) {
+        new D2();
+        new D1();
+    }
+}
+
+
+///////////////
+class MyClass
+{
+    public MyClass() throws Exception
+    {
+        //default ctor throws exc
+    }
+    
+    public MyClass(Object anObject)
+    {
+        //other ctor does not
+    }
+}
+
+class MyClass2 extends MyClass 
+{
+    //HERE good code is marked red
+    public MyClass2 (Object anObject)
+    {
+        super(anObject);
+    }
+}
+
+class ThrowCC  {
+    public void test3() throws Exception {
+      Throwable exception = null;
+      <error descr="Unhandled exception: java.lang.Throwable">throw exception;</error>
+    }
+}
+
+
+//Inaccessible field
+class J {
+    int t = new I1().i; //access object class is OK
+    int v = new I2().<error descr="'i' has private access in 'J.I1'">i</error>; //bad access object class
+
+    class I1 {
+        class I3 {
+            int t = i; //visibility OK
+        }
+
+        private int i;
+    }
+
+    class I2 extends I1 {
+        int j = <error descr="'i' has private access in 'J.I1'">i</error>; //We don't see i from baser class
+    }
+
+    static I1 i1;
+    class I4 {
+        int u = i1.i; //OK, i is visible since the toplevel class is the same
+    }
+}
+class Test3 {
+
+    private class Child extends Parent {
+    }
+
+    private class Parent extends SuperParent {
+    }
+
+    private class SuperParent {
+        private int field = 1;
+    }
+
+    public void foo() {
+        Child child = new Child();
+        int i = child.<error descr="'field' has private access in 'Test3.SuperParent'">field</error>;
+    }
+}
+
+//IDEADEV-4455: this code is OK
+class XYZ {
+    private class Inner extends XYZ {
+        private final String s;
+        Inner(String _s) {
+            this.s = _s;
+        }
+
+
+        public boolean equals(Object o) {
+            if (this == o) return true;
+            if (o == null || getClass() != o.getClass()) return false;
+
+            final Inner y = (Inner) o;
+
+            if (s != null ? !s.equals(y.s) : y.s != null) return false;
+
+            return true;
+        }
+    }
+}
+//end of IDEADEV-4455
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/UnhandledMessingWithFinally.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/UnhandledMessingWithFinally.java
new file mode 100644
index 0000000..de650277
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/UnhandledMessingWithFinally.java
@@ -0,0 +1,84 @@
+// unhandled exception when messing with finally block
+
+import java.io.*;
+class a  {
+  void f1(int i) {
+    try {
+      new FileReader("");
+    }
+    finally {
+      <error descr="Unhandled exception: java.lang.ClassNotFoundException">throw new ClassNotFoundException();</error>
+    }
+  }
+
+  void f2(int i) {
+    try {
+      <error descr="Unhandled exception: java.io.FileNotFoundException">new FileReader("")</error>;
+    }
+    finally {
+      if (i==4) <error descr="Unhandled exception: java.lang.ClassNotFoundException">throw new ClassNotFoundException();</error>
+    }
+  }
+
+  void f3(int i) {
+    try {
+      <error descr="Unhandled exception: java.io.FileNotFoundException">new FileReader("")</error>;
+    }
+    finally {
+      if (i==1) return;
+    }
+  }
+
+  void f4(int i) {
+    try {
+      <error descr="Unhandled exception: java.io.FileNotFoundException">new FileReader("")</error>;
+    }
+    finally {
+      if (i==1) <error descr="Unhandled exception: java.io.FileNotFoundException">throw new FileNotFoundException();</error>
+    }
+  }
+
+  void cf1(int i) {
+    try {
+      new FileReader("");
+    }
+    catch (FileNotFoundException e) {
+    }
+    finally {
+      if (1==1) return;
+    }
+  }
+
+  void cf2(int i) {
+    try {
+      new FileReader("");
+    }
+    finally {
+      while (1==1) return;
+    }
+  }
+  void foo(OutputStream out, byte[] data) throws IOException {
+    out.write(data);
+  }
+
+    public void swallow() {
+        try {
+            throw new Exception("Hello World! I'm Checked Exception and must be declared!");
+        } catch (Exception e) {
+            throw e;
+        } finally {
+            return;
+        }
+    }
+    public void spitout() {
+        try {
+            throw new Exception("Hello World! I'm Checked Exception and must be declared!");
+        } catch (Exception e) {
+             <error descr="Unhandled exception: java.lang.Exception">throw e;</error>
+        } finally {
+            //return;
+        }
+    }
+
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/Unreachable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/Unreachable.java
new file mode 100644
index 0000000..9b419b3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/Unreachable.java
@@ -0,0 +1,359 @@
+// unreachables
+import java.io.*;
+import java.net.*;
+public class a  {
+interface ii {}
+
+ { // initializer
+   try {
+     throw new Exception();
+     <error descr="Unreachable statement">int i = 5;</error>
+   }
+   catch (Exception e) {
+   }
+ }
+
+
+ int f1() throws Exception {
+   return 2;
+   <error descr="Unreachable statement">return 5;</error>
+ }
+ int f2(int i) throws Exception {
+   if (i==2) return 2;
+   throw new Exception();
+   <error descr="Unreachable statement">return 5;</error>
+ }
+ int f3(int i) throws Exception {
+   for (;;) return 2;
+   <error descr="Unreachable statement">return 5;</error>
+ }
+ int f4(int i) throws Exception {
+   try {
+     if (i==3) throw new Exception();
+     return 4;
+   } finally {
+     if (i==6) return 9;
+   }
+   <error descr="Unreachable statement">return 5;</error>
+ }
+
+ void f5()
+    {
+        try {
+        } catch (Error e) {
+            throw e;
+            <error descr="Unreachable statement">;</error>
+        }
+    }
+
+ void f6() {
+    try {
+    }
+    finally {
+      return;
+      <error descr="Unreachable statement">;</error>
+    }
+ }
+
+  void f7(RuntimeException e) {
+    for (;;) {
+      if (e==null) {
+        return;
+        <error descr="Unreachable statement">break;</error>
+      }
+    }
+  }
+  void f8(RuntimeException e,int i,int j,int k,int l) {
+    for (;;) {
+      if (e==null) {
+        return;
+        <error descr="Unreachable statement">f8(e,i,j,k,l);</error>
+      }
+    }
+  }
+  void f9(RuntimeException e,int i,int j,int k,int l) {
+    for (;;) {
+      if (e==null) {
+        return;
+        <error descr="Unreachable statement">throw e;</error>
+      }
+    }
+  }
+  class Af10 {
+    int f() {
+        return 0;
+        <error descr="Unreachable statement">new Af10();</error>
+    }
+
+  }
+  class Af11 {
+    int f() {
+        return 0;
+        <error descr="Unreachable statement">int k;</error>
+    }
+    void test() {
+        int i;
+        return;
+        <error descr="Unreachable statement">assert i == i;</error>
+    }
+  }
+
+
+
+ int cf1(int i) throws Exception {
+   if (i==2) return 2;
+   for (int k=0;1==1;k++) break;
+   try {
+    i = 5;
+   } 
+   catch (Error e) {
+     if (i==5) return 2;
+   }
+   catch (RuntimeException e) {
+   }
+   catch (Throwable e) {
+   }
+
+   return 5;
+ }
+
+ int cf2(int i) throws Exception {
+   switch (i) {
+     case 1: return 4;
+   }
+   return 5;
+ }
+ void cf3() {
+   if (false) {
+     int i = 5;
+   }
+   while (true) { break; }
+   if (true) {
+     int i = 4;
+   }
+   else {
+     int i = 6;
+   }
+ }
+ void cf4() throws java.net.SocketException {
+  try {
+    bind();
+  } catch (java.net.SocketException se) {
+    throw se;
+  } catch(java.io.IOException e) {
+    throw new java.net.SocketException(e.getMessage());
+  }
+ }
+ void bind() throws java.net.SocketException {}
+
+
+ void cf5() {
+  try {
+  } catch(Exception e) {
+    
+  }
+ }
+
+ void cf6() {
+        if (true || true) {
+        } else {
+            System.out.println("hi");
+        }
+ }
+
+
+    static boolean g() {
+        return true;
+    }
+    public static void main(String[] args) {
+        boolean b=false && g();
+        System.out.println("b = "+b);
+    }
+
+
+
+ void cf7() {
+        try {
+        } finally {
+            try {
+            } finally {
+            }
+            try {
+            } finally {
+                try {
+                } finally {
+                }
+                try {
+                } finally {
+                    try {
+                    } finally {
+                        try {
+                        } finally {
+                            try {
+                            } finally {
+                                try {
+                                } finally {
+                                }
+                            }
+                        }
+                    }
+                    try {
+                        try {
+                        } finally {
+                        }
+                    } finally {
+                    }
+                }
+            }
+        }
+        ;
+ }
+
+ void cf8() {
+  class Test01
+  {
+ 
+  public int testMethod()
+  {
+    try
+    {
+      throw new Exception("test");
+    }
+    catch(Exception e)
+    {
+      try
+      {
+        throw new Exception("test");
+      }
+      catch(Exception ee)
+      {}
+      finally
+      {}
+    }
+    finally
+    {
+ 
+      try
+      {
+        throw new Exception("test");
+      }
+      catch(Exception e)
+      {}
+      finally
+      {}
+    }
+    return 0;
+  }
+  }
+ }
+
+ void cf9() {
+      // should not try to compute constant expression within assert
+      // since assertions can be disabled/enabled at any moment via JVM flags
+   assert true;
+   assert false;
+   final int i;
+   if (0==1) {
+     i = 9;
+   }
+   else {
+     i = 0;
+   }
+ }
+
+ void cf10() {
+   int k = 0;
+   switch (k) {
+   }
+ }
+
+
+  private Exception getException()
+  {
+    return new java.io.IOException();
+  }
+
+  public void cf11()
+  {
+    try {
+      throw getException();
+    }
+    catch (java.io.IOException e) {
+      e.printStackTrace();  // IDEA claims this to be "Unreachable statement"//
+    }
+    catch (Exception e) {
+      e.printStackTrace();
+    }
+  }
+
+  //////////////////////////
+    public void cf12() {
+        try {
+            try {
+            } finally {
+                doit();
+            }
+        } catch (Excep1 e) {
+            String error = "RollbackException";
+        } catch (Excep2 e) {
+            String error = "HeuristicRollbackException";
+        } catch (Excep3 e) {
+            String error = "SystemException";
+        } catch (IllegalStateException e) {
+            String error = "IllegalStateException";
+        } catch (RuntimeException e) {
+            String error = "RuntimeException";
+        }
+    }
+
+    private void doit() throws Excep1, Excep2, Excep3{
+        //To change body of created methods use Options | File Templates.
+    }
+
+   class Excep1 extends Exception {}
+   class Excep2 extends Exception {}
+   class Excep3 extends Exception {}
+
+
+
+
+    public void cf13() throws Exception {
+        while (true) {
+            try {
+                cf13();
+            } finally {
+                continue;
+            } 
+        }
+    }
+
+}
+
+
+class NestedFinallyTest {
+    void ftest4() {
+        try {
+        }
+        finally {
+            try {
+            }
+            finally {
+                try {
+                }
+                finally {
+                    try {
+                    }
+                    catch (Throwable t4) {
+                    }
+                }
+            }
+        }
+        ftest4();
+    }
+}
+
+
+
+
+
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/UnsupportedFeatures.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/UnsupportedFeatures.java
new file mode 100644
index 0000000..d2635c2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/UnsupportedFeatures.java
@@ -0,0 +1,49 @@
+/*
+ * 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.
+ */
+
+import java.io.*;
+import java.util.*;
+
+<error descr="Static imports are not supported at this language level">import static java.lang.Math.*;</error>
+
+@interface <error descr="Annotations are not supported at this language level">Anno</error> { }
+
+<error descr="Annotations are not supported at this language level">@Anno</error>
+class UnsupportedFeatures {
+  void m(<error descr="Variable arity methods are not supported at this language level">String... args</error>) throws Exception {
+    <error descr="For-each loops are not supported at this language level">for (String s : args) { System.out.println(s); }</error>
+
+    List<error descr="Generics are not supported at this language level"><String></error> list =
+      new ArrayList<error descr="Diamond types are not supported at this language level"><></error>();
+
+    for (<error descr="Incompatible types. Found: 'java.lang.Object', required: 'java.lang.String'">String s : list</error>) {}
+    Arrays.asList<error descr="'asList(java.lang.String...)' in 'java.util.Arrays' cannot be applied to '(java.lang.String)'">("")</error>;
+    <error descr="Incompatible types. Found: 'boolean', required: 'java.lang.Boolean'">Boolean b = true;</error>
+    <error descr="Incompatible types. Found: 'java.lang.Boolean', required: 'boolean'">boolean b1 = Boolean.TRUE;</error>
+
+    try { Reader r = new FileReader("/dev/null"); }
+    catch (<error descr="Multi-catches are not supported at this language level">FileNotFoundException | IOException e</error>) { e.printStackTrace(); }
+
+    try <error descr="Try-with-resources are not supported at this language level">(Reader r = new FileReader("/dev/null"))</error> { }
+
+    I i1 = <error descr="Method references are not supported at this language level">UnsupportedFeatures::m</error>;
+    I i2 = <error descr="Lambda expressions are not supported at this language level">() -> { }</error>;
+  }
+
+  interface I {
+    <error descr="Extension methods are not supported at this language level">void m() default { }</error>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/Unused.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/Unused.java
new file mode 100644
index 0000000..bcbcd27
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/Unused.java
@@ -0,0 +1,46 @@
+public class a extends Exception {
+  private <warning descr="Private constructor 'a(java.lang.String)' is never used">a</warning>(String s) {
+    super(s);
+  }
+}
+
+class s extends Exception {
+  private s(String s) {
+    super(s);
+  }
+  public s create() {
+    return new s("");
+  }
+}
+
+class PrivateClassTest {
+	private static class Test1 {
+		// Complains that this constructor is never used
+		private Test1 () {}
+
+		private Test1 (String s) {
+            System.out.println(s);
+        }
+	}
+
+	private static class Test2 extends Test1 {
+		// Complains that no default constructor is available
+		public Test2 () {
+        }
+
+		// Complains that the relevant constructor has private access
+		public Test2 (String s) {
+			super (s);
+		}
+	}
+    public static void main(String[] args) {
+        System.out.println(new Test2());
+    }
+
+    private void <warning descr="Private method 'f(boolean, int)' is never used">f</warning>(boolean b,
+               int <warning descr="Parameter 'param' is never used">param</warning>) {
+       if (b) {
+         f(b, param);
+       }
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/UnusedNonPrivateMembers.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/UnusedNonPrivateMembers.java
new file mode 100644
index 0000000..9f3a7b4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/UnusedNonPrivateMembers.java
@@ -0,0 +1,19 @@
+public class <warning descr="Class 'XXX' is never used">XXX</warning> {
+  void <warning descr="Method 'fffff()' is never used">fffff</warning>(){}
+  public void <warning descr="Method 'asdfaffffff()' is never used">asdfaffffff</warning>(){}
+  protected void <warning descr="Method 'dasklfjhsad()' is never used">dasklfjhsad</warning>(){}
+
+  String <warning descr="Field 'asdfadsf' is never used">asdfadsf</warning>;
+  public String <warning descr="Field 'asdasdfadsf' is never used">asdasdfadsf</warning>;
+  static class <warning descr="Class 'sasdfasdfasd' is never used">sasdfasdfasd</warning> {}
+  
+  public <warning descr="Constructor 'XXX()' is never used">XXX</warning>() {}
+
+
+  // overloaded
+  void fffff(String i){i.hashCode();}
+  {
+     fffff(null);
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/UnusedNonPrivateMembers2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/UnusedNonPrivateMembers2.java
new file mode 100644
index 0000000..b7ae475
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/UnusedNonPrivateMembers2.java
@@ -0,0 +1,9 @@
+public class WithMain {
+
+  public static void main(String[] args){
+
+  }
+
+  public void myTestMethod(){}
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/UnusedNonPrivateMembersReferencedFromText.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/UnusedNonPrivateMembersReferencedFromText.java
new file mode 100644
index 0000000..15c0b2a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/UnusedNonPrivateMembersReferencedFromText.java
@@ -0,0 +1,3 @@
+public class <warning descr="Class 'XXX' is never used">XXX</warning> {
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/UnusedParamsOfPublicMethod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/UnusedParamsOfPublicMethod.java
new file mode 100644
index 0000000..2af80d1f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/UnusedParamsOfPublicMethod.java
@@ -0,0 +1,19 @@
+class Sup {
+  protected void f(int i){}
+}
+class Foo extends Sup {
+  public void foo(int <warning descr="Parameter 'i' is never used">i</warning>){}
+  public void g(int i){}
+  protected void f(int i){}
+}
+class Sub extends Foo {
+  public void g(int i){}
+}
+
+
+interface fff {
+  void f(int ggggg);//
+}
+abstract class ab {
+  public abstract void f(int ggggg);//
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/UnusedParamsOfPublicMethodDisabled.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/UnusedParamsOfPublicMethodDisabled.java
new file mode 100644
index 0000000..994ccba
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/UnusedParamsOfPublicMethodDisabled.java
@@ -0,0 +1,19 @@
+class Sup {
+  protected void f(int i){}
+}
+class Foo extends Sup {
+  public void foo(int i){}
+  public void g(int i){}
+  protected void f(int i){}
+}
+class Sub extends Foo {
+  public void g(int i){}
+}
+
+
+interface fff {
+  void f(int ggggg);//
+}
+abstract class ab {
+  public abstract void f(int ggggg);//
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/VarDoubleInitialization.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/VarDoubleInitialization.java
new file mode 100644
index 0000000..de0f4f0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/VarDoubleInitialization.java
@@ -0,0 +1,150 @@
+// vars double initialization
+import java.io.*;
+import java.net.*;
+public class a21  {
+
+  void f1(int i) {
+    final int j;
+    j = 2;
+    <error descr="Variable 'j' might already have been assigned to">j</error> = 2;
+  }
+  void f2(int i) {
+    final int j;
+    if (i==3) j = 2;
+    else j = 5;
+    <error descr="Variable 'j' might already have been assigned to">j</error> = 2;
+  }
+  void f3(int i) {
+    final int j;
+    if (i==4) j = 2;
+    <error descr="Variable 'j' might already have been assigned to">j</error> = 2;
+  }
+  void f5(int i) {
+    final int j;
+    j = 2;
+    if (i==3) return;
+    <error descr="Variable 'j' might already have been assigned to">j</error> = 2;
+  }
+  void f6(int i) {
+    final int j;
+    switch (i) {
+    case 1: j = 2;
+    }
+    <error descr="Variable 'j' might already have been assigned to">j</error> = 2;
+  }
+  void f7(int i) {
+    final int j;
+    while (i < 4) {
+      <error descr="Variable 'j' might be assigned in loop">j</error> = 2;
+      final int ii = 4;
+      i+=ii;
+    }
+    
+  }
+  void f8(String k) {
+        if (k != null) {
+        final String i;
+        if (k.equals("!")) i = "3";
+        if (k.equals("!")) <error descr="Variable 'i' might already have been assigned to">i</error> = "2";
+        }
+
+  }
+
+  void f9() {
+    final Object type;
+    try {
+      type = null;    
+    }
+    catch (Exception e) {
+      <error descr="Variable 'type' might already have been assigned to">type</error> = null;
+    }
+  }
+
+  void f10() {
+        final int k;
+        if (false) {
+            k=0;
+            //< error descr="Variable 'k' might already have been assigned to">k< /error>=0;
+        }
+  }
+
+class Foo {
+    final int k;
+    Foo() {
+        k=0;
+        <error descr="Variable 'k' might already have been assigned to">k</error>=0;
+    }
+}
+
+
+
+
+  void cf1(int i) {
+    final int j;
+    final int j1 = 3;
+    j = 5;
+    final int unused;
+    final int j2;
+    if (j == 3) j2 = 4;
+    final int j3;
+    if (j==4) j3 = 5;
+    else j3 = 6;
+    final int j4 = j3 + 6;
+    final int j5;
+    while (i != 9) {
+      if (j == 8) {
+        j5 = 9;
+        break;
+      }
+    }
+  }
+
+  final boolean FB = true;
+
+  void cf2() {
+      final int k;
+      if (!FB) {
+        k = 4;
+      }
+      // < error descr="Variable 'k' might already have been assigned to">k< /error>=0;
+  }
+
+
+    // todo:
+    // in IDEA Variable 'b' might not have been initialized
+    // in javac: OK
+    /*
+    void f2() {
+        boolean b;
+        boolean c = true;
+        if (c && false) {
+            c = b;
+        }
+    }
+    */
+
+}
+
+
+class A {
+    final int k;
+    A() {
+        for (;;) {
+            <error descr="Variable 'k' might be assigned in loop">k</error>=0;
+        }
+    }
+}
+
+class Example {
+    public int method(boolean b) {
+        if (b) {
+          final int indent;
+          indent = 0;
+
+          return 0;
+        }
+        else {
+          new <error>Runnable</error>(){}<EOLError/>
+        }
+    <error>}</error>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/VariableAlreadyDefined.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/VariableAlreadyDefined.java
new file mode 100644
index 0000000..f549f26
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/VariableAlreadyDefined.java
@@ -0,0 +1,34 @@
+class s {
+  void f() {
+    int i;
+    int <error descr="Variable 'i' is already defined in the scope">i</error>;
+  }
+  void f1() {
+    int i;
+    {
+      int <error descr="Variable 'i' is already defined in the scope">i</error>;
+    }
+  }
+  void f2() {
+    int i;
+    class ss
+    {
+      int i;
+    }
+  }
+
+  int <error descr="Variable 'f' is already defined in the scope">f</error>;
+  int <error descr="Variable 'f' is already defined in the scope">f</error>;
+  void f3() {
+    int f;
+  }
+
+  public void tutu(String e) {
+    try {
+      Integer.parseInt("3");
+    } catch (NumberFormatException <error descr="Variable 'e' is already defined in the scope">e</error>) {
+      e.printStackTrace();
+    }
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/VariableAlreadyDefinedTop.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/VariableAlreadyDefinedTop.java
new file mode 100644
index 0000000..e50eb1d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/VariableAlreadyDefinedTop.java
@@ -0,0 +1,25 @@
+class s {
+  void f() {
+    int i;
+    int <error descr="Variable 'i' is already defined in the scope">i</error>;
+  }
+  void f1() {
+    int i;
+    {
+      int <error descr="Variable 'i' is already defined in the scope">i</error>;
+    }
+  }
+  void f2() {
+    int i;
+    class ss
+    {
+      int i;
+    }
+  }
+
+  int f;
+  int <error descr="Variable 'f' is already defined in the scope">f</error>;
+  void f3() {
+    int f;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/XXX.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/XXX.java
new file mode 100644
index 0000000..0a9a173
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/XXX.java
@@ -0,0 +1,5 @@
+import java.io.*;
+
+public class x {
+ static {int i;}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/aClassLoader.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/aClassLoader.java
new file mode 100644
index 0000000..dbe35ea
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/aClassLoader.java
@@ -0,0 +1,1731 @@
+/*
+ * @(#)ClassLoader.java	1.162 02/03/19
+ *
+ * Copyright 2002 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+import java.io.InputStream;
+import java.io.IOException;
+import java.io.StringWriter;
+import java.io.PrintWriter;
+import java.io.File;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.util.Hashtable;
+import java.util.Enumeration;
+import java.util.Vector;
+import java.util.Stack;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.Set;
+import java.util.jar.Manifest;
+import java.net.URL;
+import java.net.MalformedURLException;
+import java.security.AccessController;
+import java.security.AccessControlContext;
+import java.security.PrivilegedAction;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
+import java.security.ProtectionDomain;
+import java.security.Permissions;
+import java.security.CodeSource;
+import java.security.Policy;
+import sun.misc.URLClassPath;
+import sun.misc.Resource;
+import sun.misc.CompoundEnumeration;
+import sun.misc.ClassFileTransformer;
+//import sun.misc.Launcher;
+import sun.reflect.Reflection;
+import sun.security.action.GetPropertyAction;
+
+/**
+ * A class loader is an object that is responsible for loading
+ * classes. The class <code>ClassLoader</code> is an abstract class.
+ * Given the name of a class, a class loader should attempt to locate
+ * or generate data that constitutes a definition for the class. A
+ * typical strategy is to transform the name into a file
+ * name and then read a "class file" of that name from a file system.
+ * <p>
+ * Every <code>Class</code> object contains a
+ * {@link Class#getClassLoader() reference} to the
+ * <code>ClassLoader</code> that defined it.
+ * <p>
+ * Class objects for array classes are not created by class loaders, but
+ * are created automatically as required by the Java runtime. The class
+ * loader for an array class, as returned by {@link Class#getClassLoader()}
+ * is the same as the class loader for its element type; if the element
+ * type is a primitive type, then the array class has no class loader.
+ * <p>
+ * Applications implement subclasses of <code>ClassLoader</code> in
+ * order to extend the manner in which the Java virtual machine
+ * dynamically loads classes.
+ * <p>
+ * Class loaders may typically be used by security managers to
+ * indicate security domains.
+ * <p>
+ * The <code>ClassLoader</code> class uses a delegation model to
+ * search for classes and resources. Each instance of
+ * <code>ClassLoader</code> has an associated parent class loader.
+ * When called upon to find a class or resource, a
+ * <code>ClassLoader</code> instance will delegate the search for
+ * the class or resource to its parent class loader before
+ * attempting to find the class or resource itself.  The virtual
+ * machine's built-in class loader, called the bootstrap class loader,
+ * does not itself have a parent but may serve as the parent of a
+ * <code>ClassLoader</code> instance.
+ * <p>
+ * Normally, the Java virtual machine loads classes from the local
+ * file system in a platform-dependent manner. For example, on UNIX
+ * systems, the virtual machine loads classes from the directory
+ * defined by the <code>CLASSPATH</code> environment variable.
+ * <p>
+ * However, some classes may not originate from a file; they may
+ * originate from other sources, such as the network, or they could
+ * be constructed by an application. The method
+ * <code>defineClass</code> converts an array of bytes into an
+ * instance of class <code>Class</code>. Instances of this newly
+ * defined class can be created using the <code>newInstance</code>
+ * method in class <code>Class</code>.
+ * <p>
+ * The methods and constructors of objects created by a class loader
+ * may reference other classes. To determine the class(es) referred
+ * to, the Java virtual machine calls the <code>loadClass</code>
+ * method of the class loader that originally created the class.
+ * <p>
+ * For example, an application could create a network class loader
+ * to download class files from a server. Sample code might look like:
+ * <blockquote><pre>
+ *   ClassLoader loader&nbsp;= new NetworkClassLoader(host,&nbsp;port);
+ *   Object main&nbsp;= loader.loadClass("Main", true).newInstance();
+ *	 &nbsp;.&nbsp;.&nbsp;.
+ * </pre></blockquote>
+ * <p>
+ * The network class loader subclass must define the methods
+ * <code>findClass</code> and <code>loadClassData</code>
+ * to load a class from the network. Once it
+ * has downloaded the bytes that make up the class, it should use the
+ * method <code>defineClass</code> to create a class instance. A
+ * sample implementation is:
+ * <p><hr><blockquote><pre>
+ *     class NetworkClassLoader extends ClassLoader {
+ *         String host;
+ *         int port;
+ *
+ *         public Class findClass(String name) {
+ *             byte[] b = loadClassData(name);
+ *             return defineClass(name, b, 0, b.length);
+ *         }
+ *
+ *         private byte[] loadClassData(String name) {
+ *             // load the class data from the connection
+ *             &nbsp;.&nbsp;.&nbsp;.
+ *         }
+ *     }
+ * </pre></blockquote><hr>
+ *
+ * @version 1.162, 03/19/02
+ * @see     java.lang.Class
+ * @see     java.lang.Class#newInstance()
+ * @see     java.lang.ClassLoader#defineClass(byte[], int, int)
+ * @see     java.lang.ClassLoader#loadClass(java.lang.String, boolean)
+ * @see     java.lang.ClassLoader#resolveClass(java.lang.Class)
+ * @since   JDK1.0
+ */
+public abstract class ClassLoader {
+
+    private static native void registerNatives();
+    static {
+        registerNatives();
+    }
+
+    /*
+     * If initialization succeed this is set to true and security checks will
+     * succeed. Otherwise the object is not initialized and the object is
+     * useless.
+     */
+    private boolean initialized = false;
+
+    /*
+     * The parent class loader for delegation.
+     */
+    private ClassLoader parent;
+
+    /*
+     * Hashtable that maps packages to certs
+     */
+    private Hashtable package2certs = new Hashtable(11);
+
+    /*
+     * shared among all packages with unsigned classes
+     */
+    java.security.cert.Certificate[] nocerts;
+
+    /*
+     * The classes loaded by this class loader. The only purpose of this
+     * table is to keep the classes from being GC'ed until the loader
+     * is GC'ed.
+     */
+    private Vector classes = new Vector();
+
+    /*
+     * The initiating protection domains for all classes
+     * loaded by this loader.
+     */
+    private Set domains = new HashSet();
+
+    /*
+     * Called by the VM to record every loaded class with this loader.
+     */
+    void addClass(Class c) {
+        classes.addElement(c);
+    }
+
+    /*
+     * The packages defined in this class loader. Each package name is
+     * mapped to its corresponding Package object.
+     */
+    private HashMap packages = new HashMap();
+
+    /**
+     * Creates a new class loader using the specified parent class loader
+     * for delegation.
+     * <p>
+     * If there is a security manager, its <code>checkCreateClassLoader</code>
+     * method is called. This may result in a security exception.
+     *
+     * @param parent the parent class loader
+     *
+     * @throws  SecurityException if a security manager exists and its
+     * <code>checkCreateClassLoader</code> method doesn't allow creation of a
+     * new class loader.
+     * @see       java.lang.SecurityException
+     * @see       java.lang.SecurityManager#checkCreateClassLoader()
+     * @since     1.2
+     */
+    protected ClassLoader(ClassLoader parent) {
+	SecurityManager security = System.getSecurityManager();
+	if (security != null) {
+	    security.checkCreateClassLoader();
+	}
+	this.parent = parent;
+	initialized = true;
+    }
+
+    /**
+     * Creates a new class loader using the <code>ClassLoader</code>
+     * returned by the method <code>getSystemClassLoader()</code> as the
+     * parent class loader.
+     * <p>
+     * If there is a security manager, its <code>checkCreateClassLoader</code>
+     * method is called. This may result in a security exception.
+     *
+     * @throws  SecurityException
+     *    if a security manager exists and its <code>checkCreateClassLoader</code>
+     *    method doesn't allow creation of a new class loader.
+     *
+     * @see       java.lang.SecurityException
+     * @see       java.lang.SecurityManager#checkCreateClassLoader()
+     */
+    protected ClassLoader() {
+	SecurityManager security = System.getSecurityManager();
+	if (security != null) {
+	    security.checkCreateClassLoader();
+	}
+	this.parent = getSystemClassLoader();
+	initialized = true;
+    }
+
+    /**
+     * Loads the class with the specified name. This method searches for
+     * classes in the same manner as the {@link #loadClass(String, boolean)}
+     * method. It is called by the Java virtual machine to resolve class
+     * references. Calling this method is equivalent to calling
+     * <code>loadClass(name, false)</code>.
+     *
+     * @param     name the name of the class
+     * @return    the resulting <code>Class</code> object
+     * @exception ClassNotFoundException if the class was not found
+     */
+    public Class loadClass(String name) throws ClassNotFoundException
+    {
+	return loadClass(name, false);
+    }
+
+    /**
+     * Loads the class with the specified name.  The default implementation of
+     * this method searches for classes in the following order:<p>
+     *
+     * <ol>
+     * <li> Call {@link #findLoadedClass(String)} to check if the class has
+     *      already been loaded. <p>
+     * <li> Call the <code>loadClass</code> method on the parent class
+     *      loader.  If the parent is <code>null</code> the class loader
+     *      built-in to the virtual machine is used, instead. <p>
+     * <li> Call the {@link #findClass(String)} method to find the class. <p>
+     * </ol>
+     *
+     * If the class was found using the above steps, and the
+     * <code>resolve</code> flag is true, this method will then call the
+     * {@link #resolveClass(Class)} method on the resulting class object.
+     * <p>
+     * From the Java 2 SDK, v1.2, subclasses of ClassLoader are
+     * encouraged to override
+     * {@link #findClass(String)}, rather than this method.<p>
+     *
+     * @param     name the name of the class
+     * @param     resolve if <code>true</code> then resolve the class
+     * @return	  the resulting <code>Class</code> object
+     * @exception ClassNotFoundException if the class could not be found
+     */
+    protected synchronized Class loadClass(String name, boolean resolve)
+	throws ClassNotFoundException
+    {
+	// First, check if the class has already been loaded
+	Class c = findLoadedClass(name);
+	if (c == null) {
+	    try {
+		if (parent != null) {
+		    c = parent.loadClass(name, false);
+		} else {
+		    c = findBootstrapClass0(name);
+		}
+	    } catch (ClassNotFoundException e) {
+	        // If still not found, then call findClass in order
+	        // to find the class.
+	        c = findClass(name);
+	    }
+	}
+	if (resolve) {
+	    resolveClass(c);
+	}
+	return c;
+    }
+
+    /*
+     * This method is called by the virtual machine to load
+     * a class.
+     */
+    private synchronized Class loadClassInternal(String name)
+	throws ClassNotFoundException {
+
+	return loadClass(name);
+    }
+
+    private void checkPackageAccess(Class cls, ProtectionDomain pd) {
+	final SecurityManager sm = System.getSecurityManager();
+	if (sm != null) {
+	    final String name = cls.getName();
+            final int i = name.lastIndexOf('.');
+	    if (i != -1) {
+                AccessController.doPrivileged(new PrivilegedAction() {
+                    public Object run() {
+		        sm.checkPackageAccess(name.substring(0, i));
+		        return null;
+                    }
+                }, new AccessControlContext(new ProtectionDomain[] {pd}));
+	    }
+	}
+	domains.add(pd);
+    }
+
+    /**
+     * Finds the specified class. This method should be overridden
+     * by class loader implementations that follow the new delegation model
+     * for loading classes, and will be called by the <code>loadClass</code>
+     * method after checking the parent class loader for the requested class.
+     * The default implementation throws <code>ClassNotFoundException</code>.
+     *
+     * @param  name the name of the class
+     * @return the resulting <code>Class</code> object
+     * @exception ClassNotFoundException if the class could not be found
+     * @since  1.2
+     */
+    protected Class findClass(String name) throws ClassNotFoundException {
+	throw new ClassNotFoundException(name);
+    }
+
+    /**
+     * Converts an array of bytes into an instance of class
+     * <code>Class</code>.  Before the Class can be used it must be
+     * resolved. This method is deprecated in favor of the version
+     * that takes the class name as its first argument, and is more
+     * secure.
+     *
+     * @param      b   the bytes that make up the class data. The bytes in
+     *             positions <code>off</code> through <code>off+len-1</code>
+     *             should have the format of a valid class file as defined
+     *             by the
+     *             <a href="http://java.sun.com/docs/books/vmspec/">Java
+     *             Virtual Machine Specification</a>.
+     * @param      off  the start offset in <code>b</code> of the class data
+     * @param      len the length of the class data
+     * @return     the <code>Class</code> object that was created from the
+     *             specified class data
+     * @exception  ClassFormatError if the data did not contain a valid class
+     * @exception  IndexOutOfBoundsException if either <code>off</code> or
+     *             <code>len</code> is negative, or if
+     *             <code>off+len</code> is greater than <code>b.length</code>.
+     * @see        ClassLoader#loadClass(java.lang.String, boolean)
+     * @see        ClassLoader#resolveClass(java.lang.Class)
+     * @deprecated Replaced by defineClass(java.lang.String, byte[], int, int)
+     */
+    protected final Class defineClass(byte[] b, int off, int len)
+	throws ClassFormatError
+    {
+	return defineClass(null, b, off, len, null);
+    }
+
+    /**
+     * Converts an array of bytes into an instance of class <code>Class</code>.
+     * Before the Class can be used it must be resolved.
+     * <p>
+     * This method assigns a default <code>ProtectionDomain</code> to
+     * the newly defined class. The <code>ProtectionDomain</code>
+     * contains the set of permissions granted when
+     * a call to <code>Policy.getPolicy().getPermissions()</code> is made with
+     * a code source of <code>null,null</code>. The default domain is
+     * created on the first invocation of <code>defineClass</code>, and
+     * re-used on subsequent calls.
+     * <p>
+     * To assign a specific <code>ProtectionDomain</code> to the class,
+     * use the <code>defineClass</code> method that takes a
+     * <code>ProtectionDomain</code> as one of its arguments.
+     *
+     * @param      name the expected name of the class, or <code>null</code>
+     *                  if not known, using '.' and not '/' as the separator
+     *                  and without a trailing ".class" suffix.
+     * @param      b    the bytes that make up the class data. The bytes in
+     *             positions <code>off</code> through <code>off+len-1</code>
+     *             should have the format of a valid class file as defined
+     *             by the
+     *             <a href="http://java.sun.com/docs/books/vmspec/">Java
+     *             Virtual Machine Specification</a>.
+     * @param      off  the start offset in <code>b</code> of the class data
+     * @param      len  the length of the class data
+     * @return     the <code>Class</code> object that was created from the
+     *             specified class data
+     * @exception  ClassFormatError if the data did not contain a valid class
+     * @exception  IndexOutOfBoundsException if either <code>off</code> or
+     *             <code>len</code> is negative, or if
+     *             <code>off+len</code> is greater than <code>b.length</code>.
+     * @exception  SecurityException if an attempt is made to add this class
+     *             to a package that contains classes that were signed by
+     *             a different set of certificates than this class (which
+     *             is unsigned), or if the class name begins with "java.".
+     *
+     * @see        ClassLoader#loadClass(java.lang.String, boolean)
+     * @see        ClassLoader#resolveClass(java.lang.Class)
+     * @see        java.security.ProtectionDomain
+     * @see        java.security.Policy
+     * @see        java.security.CodeSource
+     * @see        java.security.SecureClassLoader
+     * @since      JDK1.1
+     */
+    protected final Class defineClass(String name, byte[] b, int off, int len)
+	throws ClassFormatError
+    {
+	return defineClass(name, b, off, len, null);
+    }
+
+    /**
+     * Converts an array of bytes into an instance of class Class,
+     * with an optional ProtectionDomain. If the domain is <code>null</code>,
+     * then a default domain will be assigned to the class as specified
+     * in the documentation for {@link #defineClass(String,byte[],int,int)}.
+     * Before the class can be used it must be resolved.
+     *
+     * <p>The first class defined in a package determines the exact set of
+     * certificates that all subsequent classes defined in that package must
+     * contain. The set of certificates for a class is obtained from the
+     * <code>CodeSource</code> within the <code>ProtectionDomain</code> of
+     * the class. Any classes added to that package must contain
+     * the same set of certificates or a <code>SecurityException</code>
+     * will be thrown. Note that if the <code>name</code> argument is
+     * null, this check is not performed. You should always pass in the
+     * name of the class you are defining as well as the bytes. This
+     * ensures that the class you are defining is indeed the class
+     * you think it is.
+     *
+     * <p>The specified class name cannot begin with "java.", since all
+     * classes in the java.* packages can only be defined by the bootstrap
+     * class loader. If the name parameter is not <TT>null</TT>, it
+     * must be equal to the name of the class specified by the byte
+     * array b, otherwise a <TT>ClassFormatError</TT> is raised.
+     *
+     * @param      name the expected name of the class, or <code>null</code>
+     *                  if not known, using '.' and not '/' as the separator
+     *                  and without a trailing ".class" suffix.
+     * @param      b    the bytes that make up the class data. The bytes in
+     *             positions <code>off</code> through <code>off+len-1</code>
+     *             should have the format of a valid class file as defined
+     *             by the
+     *             <a href="http://java.sun.com/docs/books/vmspec/">Java
+     *             Virtual Machine Specification</a>.
+     * @param      off  the start offset in <code>b</code> of the class data
+     * @param      len  the length of the class data
+     * @param protectionDomain the ProtectionDomain of the class
+     * @return the <code>Class</code> object created from the data,
+     *         and optional ProtectionDomain.
+     * @exception  ClassFormatError if the data did not contain a valid class
+     * @exception  IndexOutOfBoundsException if either <code>off</code> or
+     *             <code>len</code> is negative, or if
+     *             <code>off+len</code> is greater than <code>b.length</code>.
+     * @exception  SecurityException if an attempt is made to add this class
+     *             to a package that contains classes that were signed by
+     *             a different set of certificates than this class, or if
+     *             the class name begins with "java.".
+     */
+    protected final Class defineClass(String name, byte[] b, int off, int len,
+				      ProtectionDomain protectionDomain)
+	throws ClassFormatError
+    {
+	check();
+        if ((name != null) && name.startsWith("java.")) {
+            throw new SecurityException("Prohibited package name: " +
+                                        name.substring(0, name.lastIndexOf('.')));
+        }
+	if (protectionDomain == null) {
+	    protectionDomain = getDefaultDomain();
+	}
+
+	if (name != null)
+	    checkCerts(name, protectionDomain.getCodeSource());
+
+	Class c = null;
+
+	try
+	{
+	    c = defineClass0(name, b, off, len, protectionDomain);
+	}
+	catch (ClassFormatError cfe)
+	{
+	    // Class format error - try to transform the bytecode and
+	    // define the class again
+	    //
+	    Object[] transformers = ClassFileTransformer.getTransformers();
+
+	    for (int i=0; transformers != null && i < transformers.length; i++)
+	    {
+		try
+		{
+		    // Transform byte code using transformer
+		    byte[] tb = ((ClassFileTransformer) transformers[i]).transform(b, off, len);
+		    c = defineClass0(name, tb, 0, tb.length, protectionDomain);
+		    break;
+		}
+		catch (ClassFormatError cfe2)
+		{
+		    // If ClassFormatError occurs, try next transformer
+		}
+	    }
+
+	    // Rethrow original ClassFormatError if unable to transform
+	    // bytecode to well-formed
+	    //
+	    if (c == null)
+		throw cfe;
+	}
+
+	if (protectionDomain.getCodeSource() != null) {
+	    java.security.cert.Certificate certs[] =
+		protectionDomain.getCodeSource().getCertificates();
+	    if (certs != null)
+		setSigners(c, certs);
+	}
+	return c;
+    }
+
+    private synchronized void checkCerts(String name, CodeSource cs)
+    {
+	int i = name.lastIndexOf('.');
+	String pname = (i == -1) ? "" : name.substring(0,i);
+	java.security.cert.Certificate[] pcerts =
+	    (java.security.cert.Certificate[]) package2certs.get(pname);
+        if (pcerts == null) {
+	    // first class in this package gets to define which
+	    // certificates must be the same for all other classes
+	    // in this package
+	    if (cs != null) {
+		pcerts = cs.getCertificates();
+	    }
+	    if (pcerts == null) {
+		if (nocerts == null)
+		    nocerts = new java.security.cert.Certificate[0];
+		pcerts = nocerts;
+	    }
+	    package2certs.put(pname, pcerts);
+	} else {
+	    java.security.cert.Certificate[] certs = null;
+	    if (cs != null) {
+		certs = cs.getCertificates();
+	    }
+
+	    if (!compareCerts(pcerts,certs)) {
+		throw new SecurityException("class \""+ name+
+					    "\"'s signer information does not match signer information of other classes in the same package");
+	    }
+	}
+    }
+
+    /**
+     * check to make sure the certs for the new class (certs) are
+     * the same as the certs for the first class inserted
+     * in the package (pcerts)
+     */
+    private boolean compareCerts(java.security.cert.Certificate[] pcerts,
+				 java.security.cert.Certificate[] certs)
+    {
+	// certs can be null, indicating no certs.
+	if ((certs == null) || (certs.length == 0)) {
+	    return pcerts.length == 0;
+	}
+
+	// the length must be the same at this point
+	if (certs.length != pcerts.length)
+	    return false;
+
+	// go through and make sure all the certs in one array
+	// are in the other and vice-versa.
+	boolean match;
+	for (int i=0; i < certs.length; i++) {
+	    match = false;
+	    for (int j=0; j < pcerts.length; j++) {
+		if (certs[i].equals(pcerts[j])) {
+		    match = true;
+		    break;
+		}
+	    }
+	    if (!match) return false;
+	}
+
+	// now do the same for pcerts
+	for (int i=0; i < pcerts.length; i++) {
+	    match = false;
+	    for (int j=0; j < certs.length; j++) {
+		if (pcerts[i].equals(certs[j])) {
+		    match = true;
+		    break;
+		}
+	    }
+	    if (!match) return false;
+	}
+
+	return true;
+    }
+
+    /**
+     * Links the specified class.
+     * This (misleadingly named) method may be used by a class loader to
+     * link a class. If the class <code>c</code> has already been linked,
+     * then this method simply returns. Otherwise, the class is linked
+     * as described in the "Execution" chapter of the <i>Java Language
+     * Specification</i>.
+     *
+     * @param c the class to link
+     * @exception NullPointerException if <code>c</code> is <code>null</code>.
+     * @see   java.lang.ClassLoader#defineClass(java.lang.String,byte[],int,int)
+     */
+    protected final void resolveClass(Class c) {
+	check();
+	resolveClass0(c);
+    }
+
+    /**
+     * Finds a class with the specified name, loading it if necessary.<p>
+     *
+     * Prior to the Java 2 SDK, this method loads a class from the local file
+     * system in a platform-dependent manner, and returns a class object
+     * that has no associated class loader.<p>
+     *
+     * Since the Java 2 SDK v1.2, this method loads the class through the
+     * system class loader(see {@link #getSystemClassLoader()}).  Class objects
+     * returned might have <code>ClassLoader</code>s associated with them.
+     * Subclasses of <code>ClassLoader</code> need not usually call this
+     * method, because most class loaders need to override just {@link
+     * #findClass(String)}.<p>
+     *
+     * @param     name the name of the class that is to be found
+     * @return the <code>Class</code> object for the specified
+     * <code>name</code>
+     * @exception ClassNotFoundException if the class could not be found
+     * @see       #ClassLoader(ClassLoader)
+     * @see       #getParent()
+     */
+    protected final Class findSystemClass(String name)
+	throws ClassNotFoundException
+    {
+	check();
+	ClassLoader system = getSystemClassLoader();
+	if (system == null) {
+	    return findBootstrapClass(name);
+	}
+	return system.loadClass(name);
+    }
+
+    /**
+     * Returns the parent class loader for delegation. Some implementations
+     * may use <code>null</code> to represent the bootstrap class
+     * loader. This method will return <code>null</code> in such
+     * implementations if this class loader's parent is the bootstrap
+     * class loader.
+     * <p>
+     * If a security manager is present, and the caller's class loader is
+     * not null and is not an ancestor of this class loader, then
+     * this method calls the security manager's <code>checkPermission</code>
+     * method with a <code>RuntimePermission("getClassLoader")</code>
+     * permission to ensure it's ok to access the parent class loader.
+     * If not, a <code>SecurityException</code> will be thrown.
+     *
+     * @return the parent <code>ClassLoader</code>
+     * @throws SecurityException
+     *    if a security manager exists and its
+     *    <code>checkPermission</code> method doesn't allow
+     *    access to this class loader's parent class loader.
+     *
+     * @see SecurityManager#checkPermission
+     * @see java.lang.RuntimePermission
+     *
+     * @since 1.2
+     */
+    public final ClassLoader getParent() {
+	if (parent == null)
+	    return null;
+	SecurityManager sm = System.getSecurityManager();
+	if (sm != null) {
+	    ClassLoader ccl = getCallerClassLoader();
+	    if (ccl != null && !isAncestor(ccl)) {
+		sm.checkPermission(getGetClassLoaderPerm());
+	    }
+	}
+	return parent;
+    }
+
+    /**
+     * Sets the signers of a class. This should be called after defining a
+     * class.
+     *
+     * @param c the <code>Class</code> object
+     * @param signers the signers for the class
+     * @since JDK1.1
+     */
+    protected final void setSigners(Class c, Object[] signers) {
+        check();
+	c.setSigners(signers);
+    }
+
+    private Class findBootstrapClass0(String name)
+	throws ClassNotFoundException {
+	check();
+	return findBootstrapClass(name);
+    }
+
+    private native Class defineClass0(String name, byte[] b, int off, int len,
+	ProtectionDomain pd);
+    private native void resolveClass0(Class c);
+    private native Class findBootstrapClass(String name)
+	throws ClassNotFoundException;
+
+    /*
+     * Check to make sure the class loader has been initialized.
+     */
+    private void check() {
+	if (!initialized) {
+	    throw new SecurityException("ClassLoader object not initialized");
+	}
+    }
+
+    /**
+     * Finds the class with the given name if it had been previously loaded
+     * through this class loader.
+     *
+     * @param  name the class name
+     * @return the <code>Class</code> object, or <code>null</code> if
+     *         the class has not been loaded
+     * @since  JDK1.1
+     */
+    protected native final Class findLoadedClass(String name);
+
+    /**
+     * Finds the resource with the given name. A resource is some data
+     * (images, audio, text, etc) that can be accessed by class code in a way
+     * that is independent of the location of the code.<p>
+     *
+     * The name of a resource is a "/"-separated path name that identifies
+     * the resource.<p>
+     *
+     * This method will first search the parent class loader for the resource;
+     * if the parent is <code>null</code> the path of the class loader
+     * built-in to the virtual machine is searched.  That failing, this method
+     * will call <code>findResource</code> to find the resource.<p>
+     *
+     * @param  name resource name
+     * @return a URL for reading the resource, or <code>null</code> if
+     *         the resource could not be found or the caller doesn't have
+     *         adequate privileges to get the resource.
+     * @since  JDK1.1
+     * @see #findResource(String)
+     */
+    public URL getResource(String name) {
+	URL url;
+	if (parent != null) {
+	    url = parent.getResource(name);
+	} else {
+	    url = getBootstrapResource(name);
+	}
+	if (url == null) {
+	    url = findResource(name);
+	}
+	return url;
+    }
+
+    /**
+     * Finds all the resources with the given name. A resource is some data
+     * (images, audio, text, etc) that can be accessed by class code in a way
+     * that is independent of the location of the code.<p>
+     *
+     * The name of a resource is a "/"-separated path name that identifies the
+     * resource.<p>
+     *
+     * The search order is described in the documentation for {@link
+     * #getResource(String)}.<p>
+     *
+     * @param  name resource name
+     * @return an enumeration of URL to the resource. If no resources could
+     *         be found, the enumeration will be empty. Resources that the
+     *         doesn't have access to will not be in the enumeration.
+     * @throws IOException if I/O errors occur
+     * @since  1.2
+     * @see    #getResource
+     * @see #findResources
+     */
+    public final Enumeration getResources(String name) throws IOException {
+	Enumeration[] tmp = new Enumeration[2];
+	if (parent != null) {
+	    tmp[0] = parent.getResources(name);
+	} else {
+	    tmp[0] = getBootstrapResources(name);
+	}
+	tmp[1] = findResources(name);
+
+	return new CompoundEnumeration(tmp);
+    }
+
+    /**
+     * Returns an Enumeration of URLs representing all the resources with
+     * the given name. Class loader implementations should override this
+     * method to specify where to load resources from.
+     *
+     * @param  name the resource name
+     * @return an Enumeration of URLs for the resources
+     * @throws IOException if I/O errors occur
+     * @since  1.2
+     */
+    protected Enumeration findResources(String name) throws IOException {
+	return new CompoundEnumeration(new Enumeration[0]);
+    }
+
+    /**
+     * Finds the resource with the given name. Class loader
+     * implementations should override this method to specify where to
+     * find resources.
+     *
+     * @param  name the resource name
+     * @return a URL for reading the resource, or <code>null</code>
+     *         if the resource could not be found
+     * @since  1.2
+     */
+    protected URL findResource(String name) {
+	return null;
+    }
+
+    /**
+     * Find a resource of the specified name from the search path used to load
+     * classes.<p>
+     *
+     * In JDK1.1, the search path used is that of the virtual machine's
+     * built-in class loader.<p>
+     *
+     * Since the Java 2 SDK v1.2, this method locates the resource through the system class
+     * loader (see {@link #getSystemClassLoader()}).
+     *
+     * @param  name the resource name
+     * @return a URL for reading the resource, or <code>null</code> if
+     *         the resource could not be found
+     * @since JDK1.1
+     */
+    public static URL getSystemResource(String name) {
+	ClassLoader system = getSystemClassLoader();
+	if (system == null) {
+	    return getBootstrapResource(name);
+	}
+	return system.getResource(name);
+    }
+
+    /**
+     * Find resources from the VM's built-in classloader.
+     */
+    private static URL getBootstrapResource(String name) {
+	URLClassPath ucp = getBootstrapClassPath();
+	Resource res = ucp.getResource(name);
+	return res != null ? res.getURL() : null;
+    }
+
+    /**
+     * Finds all resources of the specified name from the search path used to
+     * load classes. The resources thus found are returned as an
+     * <code>Enumeration</code> of <code>URL</code> objects. <p>
+     *
+     * The search order is described in the documentation for {@link
+     * #getSystemResource(String)}. <p>
+     *
+     * @param  name the resource name
+     * @return an enumeration of resource URLs
+     * @throws IOException if I/O errors occur
+     * @since 1.2
+     */
+    public static Enumeration getSystemResources(String name)
+	throws IOException
+    {
+	ClassLoader system = getSystemClassLoader();
+	if (system == null) {
+	    return getBootstrapResources(name);
+	}
+	return system.getResources(name);
+    }
+
+    /**
+     * Find resources from the VM's built-in classloader.
+     */
+    private static Enumeration getBootstrapResources(String name)
+	throws IOException
+    {
+	final Enumeration e = getBootstrapClassPath().getResources(name);
+	return new Enumeration () {
+	    public Object nextElement() {
+		return ((Resource)e.nextElement()).getURL();
+	    }
+	    public boolean hasMoreElements() {
+		return e.hasMoreElements();
+	    }
+	};
+    }
+
+    /*
+     * Returns the URLClassPath that is used for finding system resources.
+     */
+    static URLClassPath getBootstrapClassPath() {
+	if (bootstrapClassPath == null) {
+	    bootstrapClassPath = sun.misc.Launcher.getBootstrapClassPath();
+	}
+	return bootstrapClassPath;
+    }
+
+    private static URLClassPath bootstrapClassPath;
+
+    /**
+     * Returns an input stream for reading the specified resource.
+     *
+     * The search order is described in the documentation for {@link
+     * #getResource(String)}.<p>
+     *
+     * @param  name the resource name
+     * @return an input stream for reading the resource, or <code>null</code>
+     *         if the resource could not be found
+     * @since  JDK1.1
+     */
+    public InputStream getResourceAsStream(String name) {
+	URL url = getResource(name);
+	try {
+	    return url != null ? url.openStream() : null;
+	} catch (IOException e) {
+	    return null;
+	}
+    }
+
+    /**
+     * Open for reading, a resource of the specified name from the search path
+     * used to load classes.<p>
+     *
+     * The search order is described in the documentation for {@link
+     * #getSystemResource(String)}. <p>
+     *
+     * @param  name the resource name
+     * @return an input stream for reading the resource, or <code>null</code>
+     * 	       if the resource could not be found
+     * @since JDK1.1
+     */
+    public static InputStream getSystemResourceAsStream(String name) {
+	URL url = getSystemResource(name);
+	try {
+	    return url != null ? url.openStream() : null;
+	} catch (IOException e) {
+	    return null;
+	}
+    }
+
+    /**
+     * Returns the system class loader for delegation. This is the default
+     * delegation parent for new <code>ClassLoader</code> instances, and
+     * is typically the class loader used to start the application.
+     * <p>
+     * This method is first invoked early in the runtime's startup
+     * sequence, at which point it creates the system class loader
+     * and sets it as the context class loader of the invoking
+     * <tt>Thread</tt>.
+     * <p>
+     * The default system class loader is an implementation-dependent
+     * instance of this class.
+     * <p>
+     * If the system property <tt>java.system.class.loader</tt> is
+     * defined when this method is first invoked then the value of that
+     * property is taken to be the name of a class that will be returned as
+     * the system class loader. The class is loaded using the default system
+     * class loader and must define a public constructor that takes a single
+     * parameter of type <tt>ClassLoader</tt> which is used
+     * as the delegation parent. An instance is then created using this
+     * constructor with the default system class loader as the parameter.
+     * The resulting class loader is defined to be the system class loader.
+     * <p>
+     * If a security manager is present, and the caller's class loader is
+     * not null and the caller's class loader is not the same as or an ancestor of
+     * the system class loader, then
+     * this method calls the security manager's <code>checkPermission</code>
+     * method with a <code>RuntimePermission("getClassLoader")</code>
+     * permission to ensure it's ok to access the system class loader.
+     * If not, a <code>SecurityException</code> will be thrown.
+     *
+     * @return the system <code>ClassLoader</code> for delegation, or
+     *         <code>null</code> if none
+     * @throws SecurityException
+     *        if a security manager exists and its
+     *        <code>checkPermission</code> method doesn't allow
+     *        access to the system class loader.
+     * @throws IllegalStateException
+     *        if invoked recursively during the construction
+     *        of the class loader specified by the
+     *        <code>java.system.class.loader</code> property.
+     * @throws Error
+     *        if the system property <tt>java.system.class.loader</tt>
+     *        is defined but the named class could not be loaded, the
+     *        provider class does not define the required constructor, or an
+     *        exception is thrown by that constructor when it is invoked. The
+     *        underlying cause of the error can be retrieved via the
+     *        {@link Throwable#getCause()} method.
+     * @see SecurityManager#checkPermission
+     * @see java.lang.RuntimePermission
+     * @revised 1.4
+     */
+    public static ClassLoader getSystemClassLoader() {
+	initSystemClassLoader();
+	if (scl == null) {
+	    return null;
+	}
+	SecurityManager sm = System.getSecurityManager();
+	if (sm != null) {
+	    ClassLoader ccl = getCallerClassLoader();
+	    if (ccl != null && ccl != scl && !scl.isAncestor(ccl)) {
+		sm.checkPermission(getGetClassLoaderPerm());
+	    }
+	}
+	return scl;
+    }
+
+    private static synchronized void initSystemClassLoader() {
+	if (!sclSet) {
+	    if (scl != null)
+		throw new IllegalStateException("recursive call");
+            sun.misc.Launcher l = sun.misc.Launcher.getLauncher();
+	    if (l != null) {
+		Throwable oops = null;
+		scl = l.getClassLoader();
+	        try {
+		    PrivilegedExceptionAction a;
+		    a = new SystemClassLoaderAction(scl);
+                    scl = (ClassLoader) AccessController.doPrivileged(a);
+	        } catch (PrivilegedActionException pae) {
+		    oops = pae.getCause();
+	            if (oops instanceof InvocationTargetException) {
+		        oops = oops.getCause();
+		    }
+	        }
+		if (oops != null) {
+		    if (oops instanceof Error) {
+			throw (Error) oops;
+		    } else {
+		        // wrap the exception
+		        throw new Error(oops);
+		    }
+		}
+	    }
+	    sclSet = true;
+	}
+    }
+
+    // Returns true if the specified class loader can be found
+    // in this class loader's delegation chain.
+    boolean isAncestor(ClassLoader cl) {
+	ClassLoader acl = this;
+	do {
+	    acl = acl.parent;
+	    if (cl == acl) {
+		return true;
+	    }
+	} while (acl != null);
+	return false;
+    }
+
+    // Returns the caller's class loader, or null if none.
+    // NOTE this must always be called when there is exactly one
+    // intervening frame from the core libraries on the stack between
+    // this method's invocation and the desired caller.
+    static ClassLoader getCallerClassLoader() {
+        // NOTE use of more generic Reflection.getCallerClass()
+        Class caller = Reflection.getCallerClass(3);
+        // This can be null if the VM is requesting it
+        if (caller == null) {
+            return null;
+        }
+        // Circumvent security check since this is package-private
+        return caller.getClassLoader0();
+    }
+
+    // The class loader for the system
+    private static ClassLoader scl;
+
+    // Set to true once the system class loader has been set
+    private static boolean sclSet;
+
+    // Permission to access system or parent class loader
+    private static RuntimePermission getClassLoaderPerm = null;
+
+    static RuntimePermission getGetClassLoaderPerm()
+    {
+	if (getClassLoaderPerm == null)
+	    getClassLoaderPerm = new RuntimePermission("getClassLoader");
+	return getClassLoaderPerm;
+    }
+
+    /**
+     * Defines a package by name in this ClassLoader. This allows class
+     * loaders to define the packages for their classes. Packages must be
+     * created before the class is defined, and package names must be
+     * unique within a class loader and cannot be redefined or changed
+     * once created.
+     *
+     * @param name        the package name
+     * @param specTitle   the specification title
+     * @param specVersion the specification version
+     * @param specVendor  the specification vendor
+     * @param implTitle   the implementation title
+     * @param implVersion the implementation version
+     * @param implVendor  the implementation vendor
+     * @param sealBase    If not null, then this package is sealed with
+     *                    respect to the given code source URL. Otherwise,
+     *			  the package is not sealed.
+     * @return the newly defined <code>Package</code> object
+     * @exception IllegalArgumentException if package name duplicates an
+     *            existing package either in this class loader or one of
+     *            its ancestors
+     * @since 1.2
+     */
+    protected Package definePackage(String name, String specTitle,
+				    String specVersion, String specVendor,
+				    String implTitle, String implVersion,
+				    String implVendor, URL sealBase)
+	throws IllegalArgumentException
+    {
+	synchronized (packages) {
+	    Package pkg = getPackage(name);
+	    if (pkg != null) {
+		throw new IllegalArgumentException(name);
+	    }
+	    pkg = new Package(name, specTitle, specVersion, specVendor,
+			      implTitle, implVersion, implVendor,
+			      sealBase);
+	    packages.put(name, pkg);
+	    return pkg;
+	}
+    }
+
+    /**
+     * Returns a Package that has been defined by this class loader or any
+     * of its ancestors.
+     *
+     * @param  name the package name
+     * @return the Package corresponding to the given name, or null if not
+     *         found
+     * @since  1.2
+     */
+    protected Package getPackage(String name) {
+	synchronized (packages) {
+	    Package pkg = (Package)packages.get(name);
+	    if (pkg == null) {
+		if (parent != null) {
+		    pkg = parent.getPackage(name);
+		} else {
+		    pkg = Package.getSystemPackage(name);
+		}
+		if (pkg != null) {
+		    packages.put(name, pkg);
+		}
+	    }
+	    return pkg;
+	}
+    }
+
+    /**
+     * Returns all of the Packages defined by this class loader and its
+     * ancestors.
+     *
+     * @return the array of <code>Package</code> objects defined by this
+     * <code>ClassLoader</code>
+     * @since 1.2
+     */
+    protected Package[] getPackages() {
+	Map map;
+	synchronized (packages) {
+	    map = (Map)packages.clone();
+	}
+	Package[] pkgs;
+	if (parent != null) {
+	    pkgs = parent.getPackages();
+	} else {
+	    pkgs = Package.getSystemPackages();
+	}
+	if (pkgs != null) {
+	    for (int i = 0; i < pkgs.length; i++) {
+                String pkgName = pkgs[i].getName();
+                if (map.get(pkgName) == null) {
+                    map.put(pkgName, pkgs[i]);
+                }
+	    }
+	}
+	return (Package[])map.values().toArray(new Package[map.size()]);
+    }
+
+    /**
+     * Returns the absolute path name of a native library. The VM
+     * invokes this method to locate the native libraries that belong
+     * to classes loaded with this class loader. If this method returns
+     * <code>null</code>, the VM searches the library along the path
+     * specified as the <code>java.library.path</code> property.
+     *
+     * @param      libname   the library name
+     * @return     the absolute path of the native library
+     * @see        java.lang.System#loadLibrary(java.lang.String)
+     * @see        java.lang.System#mapLibraryName(java.lang.String)
+     * @since      1.2
+     */
+    protected String findLibrary(String libname) {
+        return null;
+    }
+
+    /**
+     * The inner class NativeLibrary denotes a loaded native library
+     * instance. Every classloader contains a vector of loaded native
+     * libraries in the private field <code>nativeLibraries</code>.
+     * The native libraries loaded into the system are entered into
+     * the <code>systemNativeLibraries</code> vector.
+     *
+     * Every native library reuqires a particular version of JNI. This
+     * is denoted by the private jniVersion field. This field is set
+     * by the VM when it loads the library, and used by the VM to pass
+     * the correct version of JNI to the native methods.
+     *
+     * @version 1.162, 03/19/02
+     * @see     java.lang.ClassLoader
+     * @since   1.2
+     */
+    static class NativeLibrary {
+        /* opaque handle to native library, used in native code. */
+        long handle;
+        /* the version of JNI environment the native library requires. */
+        private int jniVersion;
+        /* the class from which the library is loaded, also indicates
+	   the loader this native library belongs. */
+        private Class fromClass;
+        /* the canonicalized name of the native library. */
+        String name;
+
+        native void load(String name);
+        native long find(String name);
+        native void unload();
+
+        public NativeLibrary(Class fromClass, String name) {
+            this.name = name;
+	    this.fromClass = fromClass;
+	}
+
+        protected void finalize() {
+	    synchronized (loadedLibraryNames) {
+	        if (fromClass.getClassLoader() != null && handle != 0) {
+		    /* remove the native library name */
+		    int size = loadedLibraryNames.size();
+		    for (int i = 0; i < size; i++) {
+		        if (name.equals(loadedLibraryNames.elementAt(i))) {
+			    loadedLibraryNames.removeElementAt(i);
+			    break;
+			}
+		    }
+		    /* unload the library. */
+		    ClassLoader.nativeLibraryContext.push(this);
+		    try {
+			unload();
+		    } finally {
+		        ClassLoader.nativeLibraryContext.pop();
+		    }
+		}
+	    }
+	}
+        /* Called in the VM to determine the context class in
+	   JNI_Load/JNI_Unload */
+        static Class getFromClass() {
+            return ((NativeLibrary)
+		    (ClassLoader.nativeLibraryContext.peek())).fromClass;
+	}
+    }
+
+    /* the "default" domain. Set as the default ProtectionDomain
+     * on newly created classses.
+     */
+    private ProtectionDomain defaultDomain = null;
+
+    /*
+     * returns (and initializes) the default domain.
+     */
+
+    private synchronized ProtectionDomain getDefaultDomain() {
+	if (defaultDomain == null) {
+	    CodeSource cs = new CodeSource(null, null);
+	    defaultDomain = new ProtectionDomain(cs, null, this, null);
+	}
+	return defaultDomain;
+    }
+
+    /* All native library names we've loaded. */
+    private static Vector loadedLibraryNames = new Vector();
+    /* Native libraries belonging to system classes. */
+    private static Vector systemNativeLibraries = new Vector();
+    /* Native libraries associated with the class loader. */
+    private Vector nativeLibraries = new Vector();
+
+    /* native libraries being loaded/unloaded. */
+    private static Stack nativeLibraryContext = new Stack();
+
+    /* The paths searched for libraries */
+    static private String usr_paths[];
+    static private String sys_paths[];
+
+    private static String[] initializePath(String propname) {
+        String ldpath = System.getProperty(propname, "");
+	String ps = File.pathSeparator;
+	int ldlen = ldpath.length();
+	int i, j, n;
+	// Count the separators in the path
+	i = ldpath.indexOf(ps);
+	n = 0;
+	while (i >= 0) {
+	    n++;
+	    i = ldpath.indexOf(ps, i+1);
+	}
+
+	// allocate the array of paths - n :'s = n + 1 path elements
+	String[] paths = new String[n + 1];
+
+	// Fill the array with paths from the ldpath
+	n = i = 0;
+	j = ldpath.indexOf(ps);
+	while (j >= 0) {
+	    if (j - i > 0) {
+	        paths[n++] = ldpath.substring(i, j);
+	    } else if (j - i == 0) {
+	        paths[n++] = ".";
+	    }
+	    i = j + 1;
+	    j = ldpath.indexOf(ps, i);
+	}
+	paths[n] = ldpath.substring(i, ldlen);
+	return paths;
+    }
+
+
+    /* Called in the java.lang.Runtime class to implement load
+     * and loadLibrary.
+     */
+    static void loadLibrary(Class fromClass, String name,
+			    boolean isAbsolute) {
+        ClassLoader loader =
+	    (fromClass == null) ? null : fromClass.getClassLoader();
+        if (sys_paths == null) {
+	    usr_paths = initializePath("java.library.path");
+	    sys_paths = initializePath("sun.boot.library.path");
+        }
+        if (isAbsolute) {
+	    if (loadLibrary0(fromClass, new File(name))) {
+	        return;
+	    }
+	    throw new UnsatisfiedLinkError("Can't load library: " + name);
+	}
+	if (loader != null) {
+	    String libfilename = loader.findLibrary(name);
+	    if (libfilename != null) {
+	        File libfile = new File(libfilename);
+	        if (!libfile.isAbsolute()) {
+		    throw new UnsatisfiedLinkError(
+    "ClassLoader.findLibrary failed to return an absolute path: " + libfilename);
+		}
+		if (loadLibrary0(fromClass, libfile)) {
+		    return;
+		}
+		throw new UnsatisfiedLinkError ("Can't load " + libfilename);
+	    }
+	}
+	for (int i = 0 ; i < sys_paths.length ; i++) {
+	    File libfile = new File(sys_paths[i], System.mapLibraryName(name));
+	    if (loadLibrary0(fromClass, libfile)) {
+	        return;
+	    }
+	}
+	if (loader != null) {
+	    for (int i = 0 ; i < usr_paths.length ; i++) {
+	        File libfile = new File(usr_paths[i],
+					System.mapLibraryName(name));
+		if (loadLibrary0(fromClass, libfile)) {
+		    return;
+		}
+	    }
+	}
+	// Oops, it failed
+        throw new UnsatisfiedLinkError("no " + name + " in java.library.path");
+    }
+
+    private static boolean loadLibrary0(Class fromClass, final File file) {
+	Boolean exists = (Boolean)
+	    AccessController.doPrivileged(new PrivilegedAction() {
+		public Object run() {
+		    return new Boolean(file.exists());
+		}
+	    });
+	if (!exists.booleanValue()) {
+	    return false;
+	}
+        String name;
+	try {
+	    name = file.getCanonicalPath();
+	} catch (IOException e) {
+	    return false;
+	}
+        ClassLoader loader =
+	    (fromClass == null) ? null : fromClass.getClassLoader();
+        Vector libs =
+	    loader != null ? loader.nativeLibraries : systemNativeLibraries;
+	synchronized (libs) {
+	    int size = libs.size();
+	    for (int i = 0; i < size; i++) {
+	        NativeLibrary lib = (NativeLibrary)libs.elementAt(i);
+		if (name.equals(lib.name)) {
+		    return true;
+		}
+	    }
+
+	    synchronized (loadedLibraryNames) {
+	        if (loadedLibraryNames.contains(name)) {
+		    throw new UnsatisfiedLinkError
+		        ("Native Library " +
+			 name +
+			 " already loaded in another classloader");
+		}
+		/* If the library is being loaded (must be by
+		 * the same thread, because Runtime.load and
+		 * Runtime.loadLibrary are synchronous). The
+		 * reason is can occur is that the JNI_OnLoad
+		 * function can cause another loadLibrary call.
+		 *
+		 * Thus we can use a static stack to hold the list
+		 * of libraries we are loading.
+		 *
+		 * If there is a pending load operation for the
+		 * library, we immediately return success; otherwise,
+		 * we raise UnsatisfiedLinkError.
+		 */
+		int n = nativeLibraryContext.size();
+		for (int i = 0; i < n; i++) {
+		    NativeLibrary lib = (NativeLibrary)
+		        nativeLibraryContext.elementAt(i);
+		    if (name.equals(lib.name)) {
+		        if (loader == lib.fromClass.getClassLoader()) {
+			    return true;
+			} else {
+			    throw new UnsatisfiedLinkError
+			        ("Native Library " +
+				 name +
+				 " is being loaded in another classloader");
+			}
+		    }
+		}
+		NativeLibrary lib = new NativeLibrary(fromClass, name);
+		nativeLibraryContext.push(lib);
+		try {
+		    lib.load(name);
+		} finally {
+		    nativeLibraryContext.pop();
+		}
+		if (lib.handle != 0) {
+		    loadedLibraryNames.addElement(name);
+		    libs.addElement(lib);
+		    return true;
+		}
+		return false;
+	    }
+	}
+    }
+
+    /* Called in the VM class linking code. */
+    static long findNative(ClassLoader loader, String name) {
+        Vector libs =
+	    loader != null ? loader.nativeLibraries : systemNativeLibraries;
+	synchronized (libs) {
+	    int size = libs.size();
+	    for (int i = 0; i < size; i++) {
+	        NativeLibrary lib = (NativeLibrary)libs.elementAt(i);
+		long entry = lib.find(name);
+		if (entry != 0)
+		    return entry;
+	    }
+	}
+	return 0;
+    }
+
+    /*
+     * The default toggle for assertion checking.
+     */
+    private boolean defaultAssertionStatus = false;
+
+    /*
+     * Maps String packageName to Boolean package default assertion status
+     * Note that the default package is placed under a null map key.
+     * If this field is null then we are delegating assertion status queries
+     * to the VM, i.e., none of this ClassLoader's assertion status
+     * modification methods have been called.
+     */
+    private Map packageAssertionStatus = null;
+
+    /*
+     * Maps String fullyQualifiedClassName to Boolean assertionStatus
+     * If this field is null then we are delegating assertion status queries
+     * to the VM, i.e., none of this ClassLoader's assertion status
+     * modification methods have been called.
+     */
+    Map classAssertionStatus = null;
+
+    /**
+     * Sets the default assertion status for this class loader.  This setting
+     * determines whether classes loaded by this class loader and initialized
+     * in the future will have assertions enabled or disabled by default.
+     * This setting may be overridden on a per-package or per-class basis by
+     * invoking {@link #setPackageAssertionStatus(String,boolean)} or {@link
+     * #setClassAssertionStatus(String,boolean)}.
+     *
+     * @param enabled <tt>true</tt> if classes loaded by this class loader
+     *        will henceforth have assertions enabled by default,
+     *        <tt>false</tt> if they will have assertions disabled by default.
+     * @since 1.4
+     */
+    public synchronized void setDefaultAssertionStatus(boolean enabled) {
+        if (classAssertionStatus == null)
+            initializeJavaAssertionMaps();
+
+        defaultAssertionStatus = enabled;
+    }
+
+    /**
+     * Sets the package default assertion status for the named
+     * package.  The package default assertion status determines the
+     * assertion status for classes initialized in the future that belong
+     * to the named package or any of its "subpackages."
+     * <p>
+     * A subpackage of a package named p is any package whose name
+     * begins with "p." .  For example, <tt>javax.swing.text</tt> is
+     * a subpackage of <tt>javax.swing</tt>, and both <tt>java.util</tt>
+     * and <tt>java.lang.reflect</tt> are subpackages of <tt>java</tt>.
+     * <p>
+     * In the event that multiple package defaults apply to a given
+     * class, the package default pertaining to the most specific package
+     * takes precedence over the others.  For example, if
+     * <tt>javax.lang</tt> and <tt>javax.lang.reflect</tt> both have
+     * package defaults associated with them, the latter package
+     * default applies to classes in <tt>javax.lang.reflect</tt>.
+     * <p>
+     * Package defaults take precedence over the class loader's default
+     * assertion status, and may be overridden on a per-class basis by
+     * invoking {@link #setClassAssertionStatus(String,boolean)}.
+     *
+     * @param packageName the name of the package whose package default
+     *        assertion status is to be set. A null value
+     *        indicates the unnamed package that is "current"
+     *        (JLS 7.4.2).
+     * @param enabled <tt>true</tt> if classes loaded by this classloader
+     *        and belonging to the named package or any of its subpackages
+     *        will have assertions enabled by default, <tt>false</tt> if they
+     *        will have assertions disabled by default.
+     * @since 1.4
+     */
+    public synchronized void setPackageAssertionStatus(String packageName,
+                                                       boolean enabled)
+    {
+        if (packageAssertionStatus == null)
+            initializeJavaAssertionMaps();
+
+        packageAssertionStatus.put(packageName, Boolean.valueOf(enabled));
+    }
+
+    /**
+     * Sets the desired assertion status for the named top-level class in
+     * this class loader and any nested classes contained therein.
+     * This setting takes precedence over the  class loader's default
+     * assertion status, and over any applicable per-package default.
+     * This method has no effect if the named class has already been
+     * initialized.  (Once a class is initialized, its assertion status cannot
+     * change.)
+     * <p>
+     * If the named class is not a top-level class, this call will have no
+     * effect on the actual assertion status of any class, and its return
+     * value is undefined.
+     *
+     * @param className the fully qualified class name of the top-level class
+     *        whose assertion status is to be set.
+     * @param enabled <tt>true</tt> if the named class is to have assertions
+     *        enabled when (and if) it is initialized, <tt>false</tt> if the
+     *        class is to have assertions disabled.
+     * @since 1.4
+     */
+    public synchronized void setClassAssertionStatus(String className,
+                                                     boolean enabled)
+    {
+        if (classAssertionStatus == null)
+            initializeJavaAssertionMaps();
+
+        classAssertionStatus.put(className, Boolean.valueOf(enabled));
+    }
+
+    /**
+     * Sets the default assertion status for this class loader to
+     * <tt>false</tt> and discards any package defaults or class assertion
+     * status settings associated with the class loader.  This call is
+     * provided so that class loaders can be made to ignore any command line
+     * or persistent assertion status settings and "start with a clean slate."
+     *
+     * @since 1.4
+     */
+    public synchronized void clearAssertionStatus() {
+        /*
+         * Whether or not "Java assertion maps" are initialized, set
+         * them to empty maps, effectively ignoring any present settings.
+         */
+        classAssertionStatus = new HashMap();
+        packageAssertionStatus = new HashMap();
+
+        defaultAssertionStatus = false;
+    }
+
+    /**
+     * Returns the assertion status that would be assigned to the specified
+     * class if it were to be initialized at the time this method is invoked.
+     * If the named class has had its assertion status set, the most recent
+     * setting will be returned; otherwise, if any package default assertion
+     * status pertains to this class, the most recent setting for the most
+     * specific pertinent package default assertion status is returned;
+     * otherwise, this class loader's default assertion status is returned.
+     *
+     * @param  className the fully qualified class name of the class whose
+     *         desired assertion status is being queried.
+     * @return the desired assertion status of the specified class.
+     * @see    #setClassAssertionStatus(String,boolean)
+     * @see    #setPackageAssertionStatus(String,boolean)
+     * @see    #setDefaultAssertionStatus(boolean)
+     * @since  1.4
+     */
+    synchronized boolean desiredAssertionStatus(String className) {
+        Boolean result;
+
+        // assert classAssertionStatus   != null;
+        // assert packageAssertionStatus != null;
+
+        // Check for a class entry
+        result = (Boolean)classAssertionStatus.get(className);
+        if (result != null)
+            return result.booleanValue();
+
+        // Check for most specific package entry
+        int dotIndex = className.lastIndexOf(".");
+        if (dotIndex < 0) { // default package
+            result = (Boolean)packageAssertionStatus.get(null);
+            if (result != null)
+                return result.booleanValue();
+        }
+        while(dotIndex > 0) {
+            className = className.substring(0, dotIndex);
+            result = (Boolean)packageAssertionStatus.get(className);
+            if (result != null)
+                return result.booleanValue();
+            dotIndex = className.lastIndexOf(".", dotIndex-1);
+        }
+
+        // Return the classloader default
+        return defaultAssertionStatus;
+    }
+
+    // Set up the assertions with information provided by the VM.
+    private void initializeJavaAssertionMaps() {
+        // assert Thread.holdsLock(this);
+
+        classAssertionStatus = new HashMap();
+        packageAssertionStatus = new HashMap();
+        AssertionStatusDirectives directives = retrieveDirectives();
+
+        for(int i=0; i<directives.classes.length; i++)
+            classAssertionStatus.put(directives.classes[i],
+                              Boolean.valueOf(directives.classEnabled[i]));
+
+        for(int i=0; i<directives.packages.length; i++)
+            packageAssertionStatus.put(directives.packages[i],
+                              Boolean.valueOf(directives.packageEnabled[i]));
+
+        defaultAssertionStatus = directives.deflt;
+    }
+
+    // Retrieves the assertion directives from the VM.
+    private static native AssertionStatusDirectives retrieveDirectives();
+
+}
+
+
+class SystemClassLoaderAction implements PrivilegedExceptionAction {
+    private ClassLoader parent;
+
+    SystemClassLoaderAction(ClassLoader parent) {
+	this.parent = parent;
+    }
+
+    public Object run() throws Exception {
+	ClassLoader sys;
+	Constructor ctor;
+	Class c;
+	Class cp[] = { ClassLoader.class };
+	Object params[] = { parent };
+
+        String cls = System.getProperty("java.system.class.loader");
+	if (cls == null) {
+	    return parent;
+	}
+
+	c = Class.forName(cls, true, parent);
+	ctor = c.getDeclaredConstructor(cp);
+	sys = (ClassLoader) ctor.newInstance(params);
+	Thread.currentThread().setContextClassLoader(sys);
+	return sys;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/aClassLoader_hl.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/aClassLoader_hl.java
new file mode 100644
index 0000000..c7f959b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/aClassLoader_hl.java
@@ -0,0 +1,1731 @@
+/*
+ * @(#)ClassLoader.java	1.162 02/03/19
+ *
+ * Copyright 2002 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+import java.io.InputStream;
+import java.io.IOException;
+import java.io.<error descr="Cannot resolve symbol 'StringWriter'">StringWriter</error>;
+import java.io.<error descr="Cannot resolve symbol 'PrintWriter'">PrintWriter</error>;
+import java.io.File;
+import java.lang.reflect.<error descr="Cannot resolve symbol 'Constructor'">Constructor</error>;
+import java.lang.reflect.<error descr="Cannot resolve symbol 'InvocationTargetException'">InvocationTargetException</error>;
+import java.util.Hashtable;
+import java.util.Enumeration;
+import java.util.<error descr="Cannot resolve symbol 'Vector'">Vector</error>;
+import java.util.<error descr="Cannot resolve symbol 'Stack'">Stack</error>;
+import java.util.HashMap;
+import java.util.<error descr="Cannot resolve symbol 'HashSet'">HashSet</error>;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.Set;
+import java.util.<error descr="Cannot resolve symbol 'jar'">jar</error>.Manifest;
+import java.net.URL;
+import java.net.MalformedURLException;
+import java.security.<error descr="Cannot resolve symbol 'AccessController'">AccessController</error>;
+import java.security.<error descr="Cannot resolve symbol 'AccessControlContext'">AccessControlContext</error>;
+import java.security.<error descr="Cannot resolve symbol 'PrivilegedAction'">PrivilegedAction</error>;
+import java.security.<error descr="Cannot resolve symbol 'PrivilegedActionException'">PrivilegedActionException</error>;
+import java.security.<error descr="Cannot resolve symbol 'PrivilegedExceptionAction'">PrivilegedExceptionAction</error>;
+import java.security.<error descr="Cannot resolve symbol 'ProtectionDomain'">ProtectionDomain</error>;
+import java.security.<error descr="Cannot resolve symbol 'Permissions'">Permissions</error>;
+import java.security.<error descr="Cannot resolve symbol 'CodeSource'">CodeSource</error>;
+import java.security.Policy;
+import <error descr="Cannot resolve symbol 'sun'">sun</error>.misc.URLClassPath;
+import <error descr="Cannot resolve symbol 'sun'">sun</error>.misc.Resource;
+import <error descr="Cannot resolve symbol 'sun'">sun</error>.misc.CompoundEnumeration;
+import <error descr="Cannot resolve symbol 'sun'">sun</error>.misc.ClassFileTransformer;
+//import sun.misc.Launcher;
+import <error descr="Cannot resolve symbol 'sun'">sun</error>.reflect.Reflection;
+import <error descr="Cannot resolve symbol 'sun'">sun</error>.security.action.GetPropertyAction;
+
+/**
+ * A class loader is an object that is responsible for loading
+ * classes. The class <code>ClassLoader</code> is an abstract class.
+ * Given the name of a class, a class loader should attempt to locate
+ * or generate data that constitutes a definition for the class. A
+ * typical strategy is to transform the name into a file
+ * name and then read a "class file" of that name from a file system.
+ * <p>
+ * Every <code>Class</code> object contains a
+ * {@link Class#getClassLoader() reference} to the
+ * <code>ClassLoader</code> that defined it.
+ * <p>
+ * Class objects for array classes are not created by class loaders, but
+ * are created automatically as required by the Java runtime. The class
+ * loader for an array class, as returned by {@link Class#getClassLoader()}
+ * is the same as the class loader for its element type; if the element
+ * type is a primitive type, then the array class has no class loader.
+ * <p>
+ * Applications implement subclasses of <code>ClassLoader</code> in
+ * order to extend the manner in which the Java virtual machine
+ * dynamically loads classes.
+ * <p>
+ * Class loaders may typically be used by security managers to
+ * indicate security domains.
+ * <p>
+ * The <code>ClassLoader</code> class uses a delegation model to
+ * search for classes and resources. Each instance of
+ * <code>ClassLoader</code> has an associated parent class loader.
+ * When called upon to find a class or resource, a
+ * <code>ClassLoader</code> instance will delegate the search for
+ * the class or resource to its parent class loader before
+ * attempting to find the class or resource itself.  The virtual
+ * machine's built-in class loader, called the bootstrap class loader,
+ * does not itself have a parent but may serve as the parent of a
+ * <code>ClassLoader</code> instance.
+ * <p>
+ * Normally, the Java virtual machine loads classes from the local
+ * file system in a platform-dependent manner. For example, on UNIX
+ * systems, the virtual machine loads classes from the directory
+ * defined by the <code>CLASSPATH</code> environment variable.
+ * <p>
+ * However, some classes may not originate from a file; they may
+ * originate from other sources, such as the network, or they could
+ * be constructed by an application. The method
+ * <code>defineClass</code> converts an array of bytes into an
+ * instance of class <code>Class</code>. Instances of this newly
+ * defined class can be created using the <code>newInstance</code>
+ * method in class <code>Class</code>.
+ * <p>
+ * The methods and constructors of objects created by a class loader
+ * may reference other classes. To determine the class(es) referred
+ * to, the Java virtual machine calls the <code>loadClass</code>
+ * method of the class loader that originally created the class.
+ * <p>
+ * For example, an application could create a network class loader
+ * to download class files from a server. Sample code might look like:
+ * <blockquote><pre>
+ *   ClassLoader loader&nbsp;= new NetworkClassLoader(host,&nbsp;port);
+ *   Object main&nbsp;= loader.loadClass("Main", true).newInstance();
+ *	 &nbsp;.&nbsp;.&nbsp;.
+ * </pre></blockquote>
+ * <p>
+ * The network class loader subclass must define the methods
+ * <code>findClass</code> and <code>loadClassData</code>
+ * to load a class from the network. Once it
+ * has downloaded the bytes that make up the class, it should use the
+ * method <code>defineClass</code> to create a class instance. A
+ * sample implementation is:
+ * <p><hr><blockquote><pre>
+ *     class NetworkClassLoader extends ClassLoader {
+ *         String host;
+ *         int port;
+ *
+ *         public Class findClass(String name) {
+ *             byte[] b = loadClassData(name);
+ *             return defineClass(name, b, 0, b.length);
+ *         }
+ *
+ *         private byte[] loadClassData(String name) {
+ *             // load the class data from the connection
+ *             &nbsp;.&nbsp;.&nbsp;.
+ *         }
+ *     }
+ * </pre></blockquote><hr>
+ *
+ * @version 1.162, 03/19/02
+ * @see     java.lang.Class
+ * @see     java.lang.Class#newInstance()
+ * @see     java.lang.ClassLoader#defineClass(byte[], int, int)
+ * @see     java.lang.ClassLoader#loadClass(java.lang.String, boolean)
+ * @see     java.lang.ClassLoader#resolveClass(java.lang.Class)
+ * @since   JDK1.0
+ */
+public abstract class ClassLoader {
+
+    private static native void registerNatives();
+    static {
+        registerNatives();
+    }
+
+    /*
+     * If initialization succeed this is set to true and security checks will
+     * succeed. Otherwise the object is not initialized and the object is
+     * useless.
+     */
+    private boolean initialized = false;
+
+    /*
+     * The parent class loader for delegation.
+     */
+    private ClassLoader parent;
+
+    /*
+     * Hashtable that maps packages to certs
+     */
+    private Hashtable package2certs = new Hashtable(11);
+
+    /*
+     * shared among all packages with unsigned classes
+     */
+    java.security.<error descr="Cannot resolve symbol 'cert'">cert</error>.Certificate[] nocerts;
+
+    /*
+     * The classes loaded by this class loader. The only purpose of this
+     * table is to keep the classes from being GC'ed until the loader
+     * is GC'ed.
+     */
+    private <error descr="Cannot resolve symbol 'Vector'">Vector</error> classes = new <error descr="Cannot resolve symbol 'Vector'">Vector</error>();
+
+    /*
+     * The initiating protection domains for all classes
+     * loaded by this loader.
+     */
+    private Set domains = new <error descr="Cannot resolve symbol 'HashSet'">HashSet</error>();
+
+    /*
+     * Called by the VM to record every loaded class with this loader.
+     */
+    void addClass(Class c) {
+        classes.<error descr="Cannot resolve method 'addElement(java.lang.Class)'">addElement</error>(c);
+    }
+
+    /*
+     * The packages defined in this class loader. Each package name is
+     * mapped to its corresponding Package object.
+     */
+    private HashMap packages = new HashMap();
+
+    /**
+     * Creates a new class loader using the specified parent class loader
+     * for delegation.
+     * <p>
+     * If there is a security manager, its <code>checkCreateClassLoader</code>
+     * method is called. This may result in a security exception.
+     *
+     * @param parent the parent class loader
+     *
+     * @throws  SecurityException if a security manager exists and its
+     * <code>checkCreateClassLoader</code> method doesn't allow creation of a
+     * new class loader.
+     * @see       java.lang.SecurityException
+     * @see       java.lang.SecurityManager#checkCreateClassLoader()
+     * @since     1.2
+     */
+    protected ClassLoader(ClassLoader parent) {
+	<error descr="Cannot resolve symbol 'SecurityManager'">SecurityManager</error> security = System.getSecurityManager();
+	if (security != null) {
+	    security.<error descr="Cannot resolve method 'checkCreateClassLoader()'">checkCreateClassLoader</error>();
+	}
+	this.parent = parent;
+	initialized = true;
+    }
+
+    /**
+     * Creates a new class loader using the <code>ClassLoader</code>
+     * returned by the method <code>getSystemClassLoader()</code> as the
+     * parent class loader.
+     * <p>
+     * If there is a security manager, its <code>checkCreateClassLoader</code>
+     * method is called. This may result in a security exception.
+     *
+     * @throws  SecurityException
+     *    if a security manager exists and its <code>checkCreateClassLoader</code>
+     *    method doesn't allow creation of a new class loader.
+     *
+     * @see       java.lang.SecurityException
+     * @see       java.lang.SecurityManager#checkCreateClassLoader()
+     */
+    protected ClassLoader() {
+	<error descr="Cannot resolve symbol 'SecurityManager'">SecurityManager</error> security = System.getSecurityManager();
+	if (security != null) {
+	    security.<error descr="Cannot resolve method 'checkCreateClassLoader()'">checkCreateClassLoader</error>();
+	}
+	this.parent = getSystemClassLoader();
+	initialized = true;
+    }
+
+    /**
+     * Loads the class with the specified name. This method searches for
+     * classes in the same manner as the {@link #loadClass(String, boolean)}
+     * method. It is called by the Java virtual machine to resolve class
+     * references. Calling this method is equivalent to calling
+     * <code>loadClass(name, false)</code>.
+     *
+     * @param     name the name of the class
+     * @return    the resulting <code>Class</code> object
+     * @exception ClassNotFoundException if the class was not found
+     */
+    public Class loadClass(String name) throws ClassNotFoundException
+    {
+	return loadClass(name, false);
+    }
+
+    /**
+     * Loads the class with the specified name.  The default implementation of
+     * this method searches for classes in the following order:<p>
+     *
+     * <ol>
+     * <li> Call {@link #findLoadedClass(String)} to check if the class has
+     *      already been loaded. <p>
+     * <li> Call the <code>loadClass</code> method on the parent class
+     *      loader.  If the parent is <code>null</code> the class loader
+     *      built-in to the virtual machine is used, instead. <p>
+     * <li> Call the {@link #findClass(String)} method to find the class. <p>
+     * </ol>
+     *
+     * If the class was found using the above steps, and the
+     * <code>resolve</code> flag is true, this method will then call the
+     * {@link #resolveClass(Class)} method on the resulting class object.
+     * <p>
+     * From the Java 2 SDK, v1.2, subclasses of ClassLoader are
+     * encouraged to override
+     * {@link #findClass(String)}, rather than this method.<p>
+     *
+     * @param     name the name of the class
+     * @param     resolve if <code>true</code> then resolve the class
+     * @return	  the resulting <code>Class</code> object
+     * @exception ClassNotFoundException if the class could not be found
+     */
+    protected synchronized Class loadClass(String name, boolean resolve)
+	throws ClassNotFoundException
+    {
+	// First, check if the class has already been loaded
+	Class c = findLoadedClass(name);
+	if (c == null) {
+	    try {
+		if (parent != null) {
+		    c = parent.loadClass(name, false);
+		} else {
+		    c = findBootstrapClass0(name);
+		}
+	    } catch (ClassNotFoundException e) {
+	        // If still not found, then call findClass in order
+	        // to find the class.
+	        c = findClass(name);
+	    }
+	}
+	if (resolve) {
+	    resolveClass(c);
+	}
+	return c;
+    }
+
+    /*
+     * This method is called by the virtual machine to load
+     * a class.
+     */
+    private synchronized Class loadClassInternal(String name)
+	throws ClassNotFoundException {
+
+	return loadClass(name);
+    }
+
+    private void checkPackageAccess(Class cls, <error descr="Cannot resolve symbol 'ProtectionDomain'">ProtectionDomain</error> pd) {
+	final <error descr="Cannot resolve symbol 'SecurityManager'">SecurityManager</error> sm = System.getSecurityManager();
+	if (sm != null) {
+	    final String name = cls.getName();
+            final int i = name.lastIndexOf('.');
+	    if (i != -1) {
+                <error descr="Cannot resolve symbol 'AccessController'">AccessController</error>.doPrivileged(new <error descr="Cannot resolve symbol 'PrivilegedAction'">PrivilegedAction</error>() {
+                    public Object run() {
+		        sm.<error descr="Cannot resolve method 'checkPackageAccess(java.lang.String)'">checkPackageAccess</error>(name.substring(0, i));
+		        return null;
+                    }
+                }, new <error descr="Cannot resolve symbol 'AccessControlContext'">AccessControlContext</error>(new <error descr="Cannot resolve symbol 'ProtectionDomain'">ProtectionDomain</error>[] {pd}));
+	    }
+	}
+	domains.add<error descr="'add(java.lang.Object)' in 'java.util.Set' cannot be applied to '(ProtectionDomain)'">(pd)</error>;
+    }
+
+    /**
+     * Finds the specified class. This method should be overridden
+     * by class loader implementations that follow the new delegation model
+     * for loading classes, and will be called by the <code>loadClass</code>
+     * method after checking the parent class loader for the requested class.
+     * The default implementation throws <code>ClassNotFoundException</code>.
+     *
+     * @param  name the name of the class
+     * @return the resulting <code>Class</code> object
+     * @exception ClassNotFoundException if the class could not be found
+     * @since  1.2
+     */
+    protected Class findClass(String name) throws ClassNotFoundException {
+	throw new ClassNotFoundException(name);
+    }
+
+    /**
+     * Converts an array of bytes into an instance of class
+     * <code>Class</code>.  Before the Class can be used it must be
+     * resolved. This method is deprecated in favor of the version
+     * that takes the class name as its first argument, and is more
+     * secure.
+     *
+     * @param      b   the bytes that make up the class data. The bytes in
+     *             positions <code>off</code> through <code>off+len-1</code>
+     *             should have the format of a valid class file as defined
+     *             by the
+     *             <a href="http://java.sun.com/docs/books/vmspec/">Java
+     *             Virtual Machine Specification</a>.
+     * @param      off  the start offset in <code>b</code> of the class data
+     * @param      len the length of the class data
+     * @return     the <code>Class</code> object that was created from the
+     *             specified class data
+     * @exception  ClassFormatError if the data did not contain a valid class
+     * @exception  IndexOutOfBoundsException if either <code>off</code> or
+     *             <code>len</code> is negative, or if
+     *             <code>off+len</code> is greater than <code>b.length</code>.
+     * @see        ClassLoader#loadClass(java.lang.String, boolean)
+     * @see        ClassLoader#resolveClass(java.lang.Class)
+     * @deprecated Replaced by defineClass(java.lang.String, byte[], int, int)
+     */
+    protected final Class defineClass(byte[] b, int off, int len)
+	throws <error descr="Cannot resolve symbol 'ClassFormatError'">ClassFormatError</error>
+    {
+	return defineClass(null, b, off, len, null);
+    }
+
+    /**
+     * Converts an array of bytes into an instance of class <code>Class</code>.
+     * Before the Class can be used it must be resolved.
+     * <p>
+     * This method assigns a default <code>ProtectionDomain</code> to
+     * the newly defined class. The <code>ProtectionDomain</code>
+     * contains the set of permissions granted when
+     * a call to <code>Policy.getPolicy().getPermissions()</code> is made with
+     * a code source of <code>null,null</code>. The default domain is
+     * created on the first invocation of <code>defineClass</code>, and
+     * re-used on subsequent calls.
+     * <p>
+     * To assign a specific <code>ProtectionDomain</code> to the class,
+     * use the <code>defineClass</code> method that takes a
+     * <code>ProtectionDomain</code> as one of its arguments.
+     *
+     * @param      name the expected name of the class, or <code>null</code>
+     *                  if not known, using '.' and not '/' as the separator
+     *                  and without a trailing ".class" suffix.
+     * @param      b    the bytes that make up the class data. The bytes in
+     *             positions <code>off</code> through <code>off+len-1</code>
+     *             should have the format of a valid class file as defined
+     *             by the
+     *             <a href="http://java.sun.com/docs/books/vmspec/">Java
+     *             Virtual Machine Specification</a>.
+     * @param      off  the start offset in <code>b</code> of the class data
+     * @param      len  the length of the class data
+     * @return     the <code>Class</code> object that was created from the
+     *             specified class data
+     * @exception  ClassFormatError if the data did not contain a valid class
+     * @exception  IndexOutOfBoundsException if either <code>off</code> or
+     *             <code>len</code> is negative, or if
+     *             <code>off+len</code> is greater than <code>b.length</code>.
+     * @exception  SecurityException if an attempt is made to add this class
+     *             to a package that contains classes that were signed by
+     *             a different set of certificates than this class (which
+     *             is unsigned), or if the class name begins with "java.".
+     *
+     * @see        ClassLoader#loadClass(java.lang.String, boolean)
+     * @see        ClassLoader#resolveClass(java.lang.Class)
+     * @see        java.security.ProtectionDomain
+     * @see        java.security.Policy
+     * @see        java.security.CodeSource
+     * @see        java.security.SecureClassLoader
+     * @since      JDK1.1
+     */
+    protected final Class defineClass(String name, byte[] b, int off, int len)
+	throws <error descr="Cannot resolve symbol 'ClassFormatError'">ClassFormatError</error>
+    {
+	return defineClass(name, b, off, len, null);
+    }
+
+    /**
+     * Converts an array of bytes into an instance of class Class,
+     * with an optional ProtectionDomain. If the domain is <code>null</code>,
+     * then a default domain will be assigned to the class as specified
+     * in the documentation for {@link #defineClass(String,byte[],int,int)}.
+     * Before the class can be used it must be resolved.
+     *
+     * <p>The first class defined in a package determines the exact set of
+     * certificates that all subsequent classes defined in that package must
+     * contain. The set of certificates for a class is obtained from the
+     * <code>CodeSource</code> within the <code>ProtectionDomain</code> of
+     * the class. Any classes added to that package must contain
+     * the same set of certificates or a <code>SecurityException</code>
+     * will be thrown. Note that if the <code>name</code> argument is
+     * null, this check is not performed. You should always pass in the
+     * name of the class you are defining as well as the bytes. This
+     * ensures that the class you are defining is indeed the class
+     * you think it is.
+     *
+     * <p>The specified class name cannot begin with "java.", since all
+     * classes in the java.* packages can only be defined by the bootstrap
+     * class loader. If the name parameter is not <TT>null</TT>, it
+     * must be equal to the name of the class specified by the byte
+     * array b, otherwise a <TT>ClassFormatError</TT> is raised.
+     *
+     * @param      name the expected name of the class, or <code>null</code>
+     *                  if not known, using '.' and not '/' as the separator
+     *                  and without a trailing ".class" suffix.
+     * @param      b    the bytes that make up the class data. The bytes in
+     *             positions <code>off</code> through <code>off+len-1</code>
+     *             should have the format of a valid class file as defined
+     *             by the
+     *             <a href="http://java.sun.com/docs/books/vmspec/">Java
+     *             Virtual Machine Specification</a>.
+     * @param      off  the start offset in <code>b</code> of the class data
+     * @param      len  the length of the class data
+     * @param protectionDomain the ProtectionDomain of the class
+     * @return the <code>Class</code> object created from the data,
+     *         and optional ProtectionDomain.
+     * @exception  ClassFormatError if the data did not contain a valid class
+     * @exception  IndexOutOfBoundsException if either <code>off</code> or
+     *             <code>len</code> is negative, or if
+     *             <code>off+len</code> is greater than <code>b.length</code>.
+     * @exception  SecurityException if an attempt is made to add this class
+     *             to a package that contains classes that were signed by
+     *             a different set of certificates than this class, or if
+     *             the class name begins with "java.".
+     */
+    protected final Class defineClass(String name, byte[] b, int off, int len,
+				      <error descr="Cannot resolve symbol 'ProtectionDomain'">ProtectionDomain</error> protectionDomain)
+	throws <error descr="Cannot resolve symbol 'ClassFormatError'">ClassFormatError</error>
+    {
+	check();
+        if ((name != null) && name.startsWith("java.")) {
+            throw new <error descr="Cannot resolve symbol 'SecurityException'">SecurityException</error>("Prohibited package name: " +
+                                        name.substring(0, name.lastIndexOf('.')));
+        }
+	if (protectionDomain == null) {
+	    protectionDomain = getDefaultDomain();
+	}
+
+	if (name != null)
+	    checkCerts(name, protectionDomain.<error descr="Cannot resolve method 'getCodeSource()'">getCodeSource</error>());
+
+	Class c = null;
+
+	try
+	{
+	    c = defineClass0(name, b, off, len, protectionDomain);
+	}
+	catch (<error descr="Cannot resolve symbol 'ClassFormatError'">ClassFormatError</error> cfe)
+	{
+	    // Class format error - try to transform the bytecode and
+	    // define the class again
+	    //
+	    Object[] transformers = <error descr="Cannot resolve symbol 'ClassFileTransformer'">ClassFileTransformer</error>.getTransformers();
+
+	    for (int i=0; transformers != null && i < transformers.length; i++)
+	    {
+		try
+		{
+		    // Transform byte code using transformer
+		    byte[] tb = ((<error descr="Cannot resolve symbol 'ClassFileTransformer'">ClassFileTransformer</error>) transformers[i]).transform(b, off, len);
+		    c = defineClass0(name, tb, 0, tb.length, protectionDomain);
+		    break;
+		}
+		catch (<error descr="Cannot resolve symbol 'ClassFormatError'">ClassFormatError</error> cfe2)
+		{
+		    // If ClassFormatError occurs, try next transformer
+		}
+	    }
+
+	    // Rethrow original ClassFormatError if unable to transform
+	    // bytecode to well-formed
+	    //
+	    if (c == null)
+		throw <error descr="Incompatible types. Found: 'ClassFormatError', required: 'java.lang.Throwable'">cfe</error>;
+	}
+
+	if (protectionDomain.<error descr="Cannot resolve method 'getCodeSource()'">getCodeSource</error>() != null) {
+	    java.security.<error descr="Cannot resolve symbol 'cert'">cert</error>.Certificate certs[] =
+		protectionDomain.<error descr="Cannot resolve method 'getCodeSource()'">getCodeSource</error>().getCertificates();
+	    if (certs != null)
+		setSigners<error descr="'setSigners(java.lang.Class, java.lang.Object[])' in 'ClassLoader' cannot be applied to '(java.lang.Class, java.security.cert.Certificate[])'">(c, certs)</error>;
+	}
+	return c;
+    }
+
+    private synchronized void checkCerts(String name, <error descr="Cannot resolve symbol 'CodeSource'">CodeSource</error> cs)
+    {
+	int i = name.lastIndexOf('.');
+	String pname = (i == -1) ? "" : name.substring(0,i);
+	java.security.<error descr="Cannot resolve symbol 'cert'">cert</error>.Certificate[] pcerts =
+	    (java.security.<error descr="Cannot resolve symbol 'cert'">cert</error>.Certificate[]) package2certs.get(pname);
+        if (pcerts == null) {
+	    // first class in this package gets to define which
+	    // certificates must be the same for all other classes
+	    // in this package
+	    if (cs != null) {
+		pcerts = cs.<error descr="Cannot resolve method 'getCertificates()'">getCertificates</error>();
+	    }
+	    if (pcerts == null) {
+		if (nocerts == null)
+		    nocerts = new java.security.<error descr="Cannot resolve symbol 'cert'">cert</error>.Certificate[0];
+		pcerts = nocerts;
+	    }
+	    package2certs.put(pname, pcerts);
+	} else {
+	    java.security.<error descr="Cannot resolve symbol 'cert'">cert</error>.Certificate[] certs = null;
+	    if (cs != null) {
+		certs = cs.<error descr="Cannot resolve method 'getCertificates()'">getCertificates</error>();
+	    }
+
+	    if (!compareCerts(pcerts,certs)) {
+		throw new <error descr="Cannot resolve symbol 'SecurityException'">SecurityException</error>("class \""+ name+
+					    "\"'s signer information does not match signer information of other classes in the same package");
+	    }
+	}
+    }
+
+    /**
+     * check to make sure the certs for the new class (certs) are
+     * the same as the certs for the first class inserted
+     * in the package (pcerts)
+     */
+    private boolean compareCerts(java.security.<error descr="Cannot resolve symbol 'cert'">cert</error>.Certificate[] pcerts,
+				 java.security.<error descr="Cannot resolve symbol 'cert'">cert</error>.Certificate[] certs)
+    {
+	// certs can be null, indicating no certs.
+	if ((certs == null) || (certs.length == 0)) {
+	    return pcerts.length == 0;
+	}
+
+	// the length must be the same at this point
+	if (certs.length != pcerts.length)
+	    return false;
+
+	// go through and make sure all the certs in one array
+	// are in the other and vice-versa.
+	boolean match;
+	for (int i=0; i < certs.length; i++) {
+	    match = false;
+	    for (int j=0; j < pcerts.length; j++) {
+		if (certs[i].<error descr="Cannot resolve method 'equals(java.security.cert.Certificate)'">equals</error>(pcerts[j])) {
+		    match = true;
+		    break;
+		}
+	    }
+	    if (!match) return false;
+	}
+
+	// now do the same for pcerts
+	for (int i=0; i < pcerts.length; i++) {
+	    match = false;
+	    for (int j=0; j < certs.length; j++) {
+		if (pcerts[i].<error descr="Cannot resolve method 'equals(java.security.cert.Certificate)'">equals</error>(certs[j])) {
+		    match = true;
+		    break;
+		}
+	    }
+	    if (!match) return false;
+	}
+
+	return true;
+    }
+
+    /**
+     * Links the specified class.
+     * This (misleadingly named) method may be used by a class loader to
+     * link a class. If the class <code>c</code> has already been linked,
+     * then this method simply returns. Otherwise, the class is linked
+     * as described in the "Execution" chapter of the <i>Java Language
+     * Specification</i>.
+     *
+     * @param c the class to link
+     * @exception NullPointerException if <code>c</code> is <code>null</code>.
+     * @see   java.lang.ClassLoader#defineClass(java.lang.String,byte[],int,int)
+     */
+    protected final void resolveClass(Class c) {
+	check();
+	resolveClass0(c);
+    }
+
+    /**
+     * Finds a class with the specified name, loading it if necessary.<p>
+     *
+     * Prior to the Java 2 SDK, this method loads a class from the local file
+     * system in a platform-dependent manner, and returns a class object
+     * that has no associated class loader.<p>
+     *
+     * Since the Java 2 SDK v1.2, this method loads the class through the
+     * system class loader(see {@link #getSystemClassLoader()}).  Class objects
+     * returned might have <code>ClassLoader</code>s associated with them.
+     * Subclasses of <code>ClassLoader</code> need not usually call this
+     * method, because most class loaders need to override just {@link
+     * #findClass(String)}.<p>
+     *
+     * @param     name the name of the class that is to be found
+     * @return the <code>Class</code> object for the specified
+     * <code>name</code>
+     * @exception ClassNotFoundException if the class could not be found
+     * @see       #ClassLoader(ClassLoader)
+     * @see       #getParent()
+     */
+    protected final Class findSystemClass(String name)
+	throws ClassNotFoundException
+    {
+	check();
+	ClassLoader system = getSystemClassLoader();
+	if (system == null) {
+	    return findBootstrapClass(name);
+	}
+	return system.loadClass(name);
+    }
+
+    /**
+     * Returns the parent class loader for delegation. Some implementations
+     * may use <code>null</code> to represent the bootstrap class
+     * loader. This method will return <code>null</code> in such
+     * implementations if this class loader's parent is the bootstrap
+     * class loader.
+     * <p>
+     * If a security manager is present, and the caller's class loader is
+     * not null and is not an ancestor of this class loader, then
+     * this method calls the security manager's <code>checkPermission</code>
+     * method with a <code>RuntimePermission("getClassLoader")</code>
+     * permission to ensure it's ok to access the parent class loader.
+     * If not, a <code>SecurityException</code> will be thrown.
+     *
+     * @return the parent <code>ClassLoader</code>
+     * @throws SecurityException
+     *    if a security manager exists and its
+     *    <code>checkPermission</code> method doesn't allow
+     *    access to this class loader's parent class loader.
+     *
+     * @see SecurityManager#checkPermission
+     * @see java.lang.RuntimePermission
+     *
+     * @since 1.2
+     */
+    public final ClassLoader getParent() {
+	if (parent == null)
+	    return null;
+	<error descr="Cannot resolve symbol 'SecurityManager'">SecurityManager</error> sm = System.getSecurityManager();
+	if (sm != null) {
+	    ClassLoader ccl = getCallerClassLoader();
+	    if (ccl != null && !isAncestor(ccl)) {
+		sm.<error descr="Cannot resolve method 'checkPermission(RuntimePermission)'">checkPermission</error>(getGetClassLoaderPerm());
+	    }
+	}
+	return parent;
+    }
+
+    /**
+     * Sets the signers of a class. This should be called after defining a
+     * class.
+     *
+     * @param c the <code>Class</code> object
+     * @param signers the signers for the class
+     * @since JDK1.1
+     */
+    protected final void setSigners(Class c, Object[] signers) {
+        check();
+	c.<error descr="'setSigners(java.lang.Object[])' is not public in 'java.lang.Class'. Cannot be accessed from outside package">setSigners</error>(signers);
+    }
+
+    private Class findBootstrapClass0(String name)
+	throws ClassNotFoundException {
+	check();
+	return findBootstrapClass(name);
+    }
+
+    private native Class defineClass0(String name, byte[] b, int off, int len,
+	<error descr="Cannot resolve symbol 'ProtectionDomain'">ProtectionDomain</error> pd);
+    private native void resolveClass0(Class c);
+    private native Class findBootstrapClass(String name)
+	throws ClassNotFoundException;
+
+    /*
+     * Check to make sure the class loader has been initialized.
+     */
+    private void check() {
+	if (!initialized) {
+	    throw new <error descr="Cannot resolve symbol 'SecurityException'">SecurityException</error>("ClassLoader object not initialized");
+	}
+    }
+
+    /**
+     * Finds the class with the given name if it had been previously loaded
+     * through this class loader.
+     *
+     * @param  name the class name
+     * @return the <code>Class</code> object, or <code>null</code> if
+     *         the class has not been loaded
+     * @since  JDK1.1
+     */
+    protected native final Class findLoadedClass(String name);
+
+    /**
+     * Finds the resource with the given name. A resource is some data
+     * (images, audio, text, etc) that can be accessed by class code in a way
+     * that is independent of the location of the code.<p>
+     *
+     * The name of a resource is a "/"-separated path name that identifies
+     * the resource.<p>
+     *
+     * This method will first search the parent class loader for the resource;
+     * if the parent is <code>null</code> the path of the class loader
+     * built-in to the virtual machine is searched.  That failing, this method
+     * will call <code>findResource</code> to find the resource.<p>
+     *
+     * @param  name resource name
+     * @return a URL for reading the resource, or <code>null</code> if
+     *         the resource could not be found or the caller doesn't have
+     *         adequate privileges to get the resource.
+     * @since  JDK1.1
+     * @see #findResource(String)
+     */
+    public URL getResource(String name) {
+	URL url;
+	if (parent != null) {
+	    url = parent.getResource(name);
+	} else {
+	    url = getBootstrapResource(name);
+	}
+	if (url == null) {
+	    url = findResource(name);
+	}
+	return url;
+    }
+
+    /**
+     * Finds all the resources with the given name. A resource is some data
+     * (images, audio, text, etc) that can be accessed by class code in a way
+     * that is independent of the location of the code.<p>
+     *
+     * The name of a resource is a "/"-separated path name that identifies the
+     * resource.<p>
+     *
+     * The search order is described in the documentation for {@link
+     * #getResource(String)}.<p>
+     *
+     * @param  name resource name
+     * @return an enumeration of URL to the resource. If no resources could
+     *         be found, the enumeration will be empty. Resources that the
+     *         doesn't have access to will not be in the enumeration.
+     * @throws IOException if I/O errors occur
+     * @since  1.2
+     * @see    #getResource
+     * @see #findResources
+     */
+    public final Enumeration getResources(String name) throws IOException {
+	Enumeration[] tmp = new Enumeration[2];
+	if (parent != null) {
+	    tmp[0] = parent.getResources(name);
+	} else {
+	    tmp[0] = getBootstrapResources(name);
+	}
+	tmp[1] = findResources(name);
+
+	return new <error descr="Cannot resolve symbol 'CompoundEnumeration'">CompoundEnumeration</error>(tmp);
+    }
+
+    /**
+     * Returns an Enumeration of URLs representing all the resources with
+     * the given name. Class loader implementations should override this
+     * method to specify where to load resources from.
+     *
+     * @param  name the resource name
+     * @return an Enumeration of URLs for the resources
+     * @throws IOException if I/O errors occur
+     * @since  1.2
+     */
+    protected Enumeration findResources(String name) throws IOException {
+	return new <error descr="Cannot resolve symbol 'CompoundEnumeration'">CompoundEnumeration</error>(new Enumeration[0]);
+    }
+
+    /**
+     * Finds the resource with the given name. Class loader
+     * implementations should override this method to specify where to
+     * find resources.
+     *
+     * @param  name the resource name
+     * @return a URL for reading the resource, or <code>null</code>
+     *         if the resource could not be found
+     * @since  1.2
+     */
+    protected URL findResource(String name) {
+	return null;
+    }
+
+    /**
+     * Find a resource of the specified name from the search path used to load
+     * classes.<p>
+     *
+     * In JDK1.1, the search path used is that of the virtual machine's
+     * built-in class loader.<p>
+     *
+     * Since the Java 2 SDK v1.2, this method locates the resource through the system class
+     * loader (see {@link #getSystemClassLoader()}).
+     *
+     * @param  name the resource name
+     * @return a URL for reading the resource, or <code>null</code> if
+     *         the resource could not be found
+     * @since JDK1.1
+     */
+    public static URL getSystemResource(String name) {
+	ClassLoader system = getSystemClassLoader();
+	if (system == null) {
+	    return getBootstrapResource(name);
+	}
+	return system.getResource(name);
+    }
+
+    /**
+     * Find resources from the VM's built-in classloader.
+     */
+    private static URL getBootstrapResource(String name) {
+	<error descr="Cannot resolve symbol 'URLClassPath'">URLClassPath</error> ucp = getBootstrapClassPath();
+	<error descr="Cannot resolve symbol 'Resource'">Resource</error> res = ucp.<error descr="Cannot resolve method 'getResource(java.lang.String)'">getResource</error>(name);
+	return res != null ? res.<error descr="Cannot resolve method 'getURL()'">getURL</error>() : null;
+    }
+
+    /**
+     * Finds all resources of the specified name from the search path used to
+     * load classes. The resources thus found are returned as an
+     * <code>Enumeration</code> of <code>URL</code> objects. <p>
+     *
+     * The search order is described in the documentation for {@link
+     * #getSystemResource(String)}. <p>
+     *
+     * @param  name the resource name
+     * @return an enumeration of resource URLs
+     * @throws IOException if I/O errors occur
+     * @since 1.2
+     */
+    public static Enumeration getSystemResources(String name)
+	throws IOException
+    {
+	ClassLoader system = getSystemClassLoader();
+	if (system == null) {
+	    return getBootstrapResources(name);
+	}
+	return system.getResources(name);
+    }
+
+    /**
+     * Find resources from the VM's built-in classloader.
+     */
+    private static Enumeration getBootstrapResources(String name)
+	throws IOException
+    {
+	final Enumeration e = getBootstrapClassPath().<error descr="Cannot resolve method 'getResources(java.lang.String)'">getResources</error>(name);
+	return new Enumeration () {
+	    public Object nextElement() {
+		return ((<error descr="Cannot resolve symbol 'Resource'">Resource</error>)e.nextElement()).getURL();
+	    }
+	    public boolean hasMoreElements() {
+		return e.hasMoreElements();
+	    }
+	};
+    }
+
+    /*
+     * Returns the URLClassPath that is used for finding system resources.
+     */
+    static <error descr="Cannot resolve symbol 'URLClassPath'">URLClassPath</error> getBootstrapClassPath() {
+	if (bootstrapClassPath == null) {
+	    bootstrapClassPath = <error descr="Cannot resolve symbol 'sun'">sun</error>.misc.Launcher.getBootstrapClassPath();
+	}
+	return bootstrapClassPath;
+    }
+
+    private static <error descr="Cannot resolve symbol 'URLClassPath'">URLClassPath</error> bootstrapClassPath;
+
+    /**
+     * Returns an input stream for reading the specified resource.
+     *
+     * The search order is described in the documentation for {@link
+     * #getResource(String)}.<p>
+     *
+     * @param  name the resource name
+     * @return an input stream for reading the resource, or <code>null</code>
+     *         if the resource could not be found
+     * @since  JDK1.1
+     */
+    public InputStream getResourceAsStream(String name) {
+	URL url = getResource(name);
+	try {
+	    return url != null ? url.openStream() : null;
+	} catch (IOException e) {
+	    return null;
+	}
+    }
+
+    /**
+     * Open for reading, a resource of the specified name from the search path
+     * used to load classes.<p>
+     *
+     * The search order is described in the documentation for {@link
+     * #getSystemResource(String)}. <p>
+     *
+     * @param  name the resource name
+     * @return an input stream for reading the resource, or <code>null</code>
+     * 	       if the resource could not be found
+     * @since JDK1.1
+     */
+    public static InputStream getSystemResourceAsStream(String name) {
+	URL url = getSystemResource(name);
+	try {
+	    return url != null ? url.openStream() : null;
+	} catch (IOException e) {
+	    return null;
+	}
+    }
+
+    /**
+     * Returns the system class loader for delegation. This is the default
+     * delegation parent for new <code>ClassLoader</code> instances, and
+     * is typically the class loader used to start the application.
+     * <p>
+     * This method is first invoked early in the runtime's startup
+     * sequence, at which point it creates the system class loader
+     * and sets it as the context class loader of the invoking
+     * <tt>Thread</tt>.
+     * <p>
+     * The default system class loader is an implementation-dependent
+     * instance of this class.
+     * <p>
+     * If the system property <tt>java.system.class.loader</tt> is
+     * defined when this method is first invoked then the value of that
+     * property is taken to be the name of a class that will be returned as
+     * the system class loader. The class is loaded using the default system
+     * class loader and must define a public constructor that takes a single
+     * parameter of type <tt>ClassLoader</tt> which is used
+     * as the delegation parent. An instance is then created using this
+     * constructor with the default system class loader as the parameter.
+     * The resulting class loader is defined to be the system class loader.
+     * <p>
+     * If a security manager is present, and the caller's class loader is
+     * not null and the caller's class loader is not the same as or an ancestor of
+     * the system class loader, then
+     * this method calls the security manager's <code>checkPermission</code>
+     * method with a <code>RuntimePermission("getClassLoader")</code>
+     * permission to ensure it's ok to access the system class loader.
+     * If not, a <code>SecurityException</code> will be thrown.
+     *
+     * @return the system <code>ClassLoader</code> for delegation, or
+     *         <code>null</code> if none
+     * @throws SecurityException
+     *        if a security manager exists and its
+     *        <code>checkPermission</code> method doesn't allow
+     *        access to the system class loader.
+     * @throws IllegalStateException
+     *        if invoked recursively during the construction
+     *        of the class loader specified by the
+     *        <code>java.system.class.loader</code> property.
+     * @throws Error
+     *        if the system property <tt>java.system.class.loader</tt>
+     *        is defined but the named class could not be loaded, the
+     *        provider class does not define the required constructor, or an
+     *        exception is thrown by that constructor when it is invoked. The
+     *        underlying cause of the error can be retrieved via the
+     *        {@link Throwable#getCause()} method.
+     * @see SecurityManager#checkPermission
+     * @see java.lang.RuntimePermission
+     * @revised 1.4
+     */
+    public static ClassLoader getSystemClassLoader() {
+	initSystemClassLoader();
+	if (scl == null) {
+	    return null;
+	}
+	<error descr="Cannot resolve symbol 'SecurityManager'">SecurityManager</error> sm = System.getSecurityManager();
+	if (sm != null) {
+	    ClassLoader ccl = getCallerClassLoader();
+	    if (ccl != null && ccl != scl && !scl.isAncestor(ccl)) {
+		sm.<error descr="Cannot resolve method 'checkPermission(RuntimePermission)'">checkPermission</error>(getGetClassLoaderPerm());
+	    }
+	}
+	return scl;
+    }
+
+    private static synchronized void initSystemClassLoader() {
+	if (!sclSet) {
+	    if (scl != null)
+		throw new IllegalStateException("recursive call");
+            <error descr="Cannot resolve symbol 'sun'">sun</error>.misc.Launcher l = <error descr="Cannot resolve symbol 'sun'">sun</error>.misc.Launcher.getLauncher();
+	    if (l != null) {
+		Throwable oops = null;
+		scl = l.<error descr="Cannot resolve method 'getClassLoader()'">getClassLoader</error>();
+	        try {
+		    <error descr="Cannot resolve symbol 'PrivilegedExceptionAction'">PrivilegedExceptionAction</error> a;
+		    <error descr="Incompatible types. Found: 'SystemClassLoaderAction', required: 'PrivilegedExceptionAction'">a = new SystemClassLoaderAction(scl)</error>;
+                    scl = (ClassLoader) <error descr="Cannot resolve symbol 'AccessController'">AccessController</error>.doPrivileged(a);
+	        } catch (<error descr="Cannot resolve symbol 'PrivilegedActionException'">PrivilegedActionException</error> pae) {
+		    oops = pae.<error descr="Cannot resolve method 'getCause()'">getCause</error>();
+	            if (oops instanceof <error descr="Cannot resolve symbol 'InvocationTargetException'">InvocationTargetException</error>) {
+		        oops = oops.getCause();
+		    }
+	        }
+		if (oops != null) {
+		    if (oops instanceof Error) {
+			throw (Error) oops;
+		    } else {
+		        // wrap the exception
+		        throw new Error(oops);
+		    }
+		}
+	    }
+	    sclSet = true;
+	}
+    }
+
+    // Returns true if the specified class loader can be found
+    // in this class loader's delegation chain.
+    boolean isAncestor(ClassLoader cl) {
+	ClassLoader acl = this;
+	do {
+	    acl = acl.parent;
+	    if (cl == acl) {
+		return true;
+	    }
+	} while (acl != null);
+	return false;
+    }
+
+    // Returns the caller's class loader, or null if none.
+    // NOTE this must always be called when there is exactly one
+    // intervening frame from the core libraries on the stack between
+    // this method's invocation and the desired caller.
+    static ClassLoader getCallerClassLoader() {
+        // NOTE use of more generic Reflection.getCallerClass()
+        Class caller = <error descr="Cannot resolve symbol 'Reflection'">Reflection</error>.getCallerClass(3);
+        // This can be null if the VM is requesting it
+        if (caller == null) {
+            return null;
+        }
+        // Circumvent security check since this is package-private
+        return caller.<error descr="'getClassLoader0()' is not public in 'java.lang.Class'. Cannot be accessed from outside package">getClassLoader0</error>();
+    }
+
+    // The class loader for the system
+    private static ClassLoader scl;
+
+    // Set to true once the system class loader has been set
+    private static boolean sclSet;
+
+    // Permission to access system or parent class loader
+    private static <error descr="Cannot resolve symbol 'RuntimePermission'">RuntimePermission</error> getClassLoaderPerm = null;
+
+    static <error descr="Cannot resolve symbol 'RuntimePermission'">RuntimePermission</error> getGetClassLoaderPerm()
+    {
+	if (getClassLoaderPerm == null)
+	    getClassLoaderPerm = new <error descr="Cannot resolve symbol 'RuntimePermission'">RuntimePermission</error>("getClassLoader");
+	return getClassLoaderPerm;
+    }
+
+    /**
+     * Defines a package by name in this ClassLoader. This allows class
+     * loaders to define the packages for their classes. Packages must be
+     * created before the class is defined, and package names must be
+     * unique within a class loader and cannot be redefined or changed
+     * once created.
+     *
+     * @param name        the package name
+     * @param specTitle   the specification title
+     * @param specVersion the specification version
+     * @param specVendor  the specification vendor
+     * @param implTitle   the implementation title
+     * @param implVersion the implementation version
+     * @param implVendor  the implementation vendor
+     * @param sealBase    If not null, then this package is sealed with
+     *                    respect to the given code source URL. Otherwise,
+     *			  the package is not sealed.
+     * @return the newly defined <code>Package</code> object
+     * @exception IllegalArgumentException if package name duplicates an
+     *            existing package either in this class loader or one of
+     *            its ancestors
+     * @since 1.2
+     */
+    protected <error descr="Cannot resolve symbol 'Package'">Package</error> definePackage(String name, String specTitle,
+				    String specVersion, String specVendor,
+				    String implTitle, String implVersion,
+				    String implVendor, URL sealBase)
+	throws IllegalArgumentException
+    {
+	synchronized (packages) {
+	    <error descr="Cannot resolve symbol 'Package'">Package</error> pkg = getPackage(name);
+	    if (pkg != null) {
+		throw new IllegalArgumentException(name);
+	    }
+	    pkg = new <error descr="Cannot resolve symbol 'Package'">Package</error>(name, specTitle, specVersion, specVendor,
+			      implTitle, implVersion, implVendor,
+			      sealBase);
+	    packages.put<error descr="'put(java.lang.Object, java.lang.Object)' in 'java.util.HashMap' cannot be applied to '(java.lang.String, Package)'">(name, pkg)</error>;
+	    return pkg;
+	}
+    }
+
+    /**
+     * Returns a Package that has been defined by this class loader or any
+     * of its ancestors.
+     *
+     * @param  name the package name
+     * @return the Package corresponding to the given name, or null if not
+     *         found
+     * @since  1.2
+     */
+    protected <error descr="Cannot resolve symbol 'Package'">Package</error> getPackage(String name) {
+	synchronized (packages) {
+	    <error descr="Cannot resolve symbol 'Package'">Package</error> pkg = (<error descr="Cannot resolve symbol 'Package'">Package</error>)packages.get(name);
+	    if (pkg == null) {
+		if (parent != null) {
+		    pkg = parent.getPackage(name);
+		} else {
+		    pkg = <error descr="Cannot resolve symbol 'Package'">Package</error>.getSystemPackage(name);
+		}
+		if (pkg != null) {
+		    packages.put<error descr="'put(java.lang.Object, java.lang.Object)' in 'java.util.HashMap' cannot be applied to '(java.lang.String, Package)'">(name, pkg)</error>;
+		}
+	    }
+	    return pkg;
+	}
+    }
+
+    /**
+     * Returns all of the Packages defined by this class loader and its
+     * ancestors.
+     *
+     * @return the array of <code>Package</code> objects defined by this
+     * <code>ClassLoader</code>
+     * @since 1.2
+     */
+    protected <error descr="Cannot resolve symbol 'Package'">Package</error>[] getPackages() {
+	Map map;
+	synchronized (packages) {
+	    map = (Map)packages.clone();
+	}
+	<error descr="Cannot resolve symbol 'Package'">Package</error>[] pkgs;
+	if (parent != null) {
+	    pkgs = parent.getPackages();
+	} else {
+	    pkgs = <error descr="Cannot resolve symbol 'Package'">Package</error>.getSystemPackages();
+	}
+	if (pkgs != null) {
+	    for (int i = 0; i < pkgs.length; i++) {
+                String pkgName = pkgs[i].<error descr="Cannot resolve method 'getName()'">getName</error>();
+                if (map.get(pkgName) == null) {
+                    map.put<error descr="'put(java.lang.Object, java.lang.Object)' in 'java.util.Map' cannot be applied to '(java.lang.String, Package)'">(pkgName, pkgs[i])</error>;
+                }
+	    }
+	}
+	return (<error descr="Cannot resolve symbol 'Package'">Package</error>[])map.values().toArray(new <error descr="Cannot resolve symbol 'Package'">Package</error>[map.size()]);
+    }
+
+    /**
+     * Returns the absolute path name of a native library. The VM
+     * invokes this method to locate the native libraries that belong
+     * to classes loaded with this class loader. If this method returns
+     * <code>null</code>, the VM searches the library along the path
+     * specified as the <code>java.library.path</code> property.
+     *
+     * @param      libname   the library name
+     * @return     the absolute path of the native library
+     * @see        java.lang.System#loadLibrary(java.lang.String)
+     * @see        java.lang.System#mapLibraryName(java.lang.String)
+     * @since      1.2
+     */
+    protected String findLibrary(String libname) {
+        return null;
+    }
+
+    /**
+     * The inner class NativeLibrary denotes a loaded native library
+     * instance. Every classloader contains a vector of loaded native
+     * libraries in the private field <code>nativeLibraries</code>.
+     * The native libraries loaded into the system are entered into
+     * the <code>systemNativeLibraries</code> vector.
+     *
+     * Every native library reuqires a particular version of JNI. This
+     * is denoted by the private jniVersion field. This field is set
+     * by the VM when it loads the library, and used by the VM to pass
+     * the correct version of JNI to the native methods.
+     *
+     * @version 1.162, 03/19/02
+     * @see     java.lang.ClassLoader
+     * @since   1.2
+     */
+    static class NativeLibrary {
+        /* opaque handle to native library, used in native code. */
+        long handle;
+        /* the version of JNI environment the native library requires. */
+        private int jniVersion;
+        /* the class from which the library is loaded, also indicates
+	   the loader this native library belongs. */
+        private Class fromClass;
+        /* the canonicalized name of the native library. */
+        String name;
+
+        native void load(String name);
+        native long find(String name);
+        native void unload();
+
+        public NativeLibrary(Class fromClass, String name) {
+            this.name = name;
+	    this.fromClass = fromClass;
+	}
+
+        protected void finalize() {
+	    synchronized (loadedLibraryNames) {
+	        if (fromClass.getClassLoader() != null && handle != 0) {
+		    /* remove the native library name */
+		    int size = loadedLibraryNames.<error descr="Cannot resolve method 'size()'">size</error>();
+		    for (int i = 0; i < size; i++) {
+		        if (name.equals(loadedLibraryNames.<error descr="Cannot resolve method 'elementAt(int)'">elementAt</error>(i))) {
+			    loadedLibraryNames.<error descr="Cannot resolve method 'removeElementAt(int)'">removeElementAt</error>(i);
+			    break;
+			}
+		    }
+		    /* unload the library. */
+		    ClassLoader.nativeLibraryContext.<error descr="Cannot resolve method 'push(ClassLoader.NativeLibrary)'">push</error>(this);
+		    try {
+			unload();
+		    } finally {
+		        ClassLoader.nativeLibraryContext.<error descr="Cannot resolve method 'pop()'">pop</error>();
+		    }
+		}
+	    }
+	}
+        /* Called in the VM to determine the context class in
+	   JNI_Load/JNI_Unload */
+        static Class getFromClass() {
+            return ((NativeLibrary)
+		    (ClassLoader.nativeLibraryContext.<error descr="Cannot resolve method 'peek()'">peek</error>())).fromClass;
+	}
+    }
+
+    /* the "default" domain. Set as the default ProtectionDomain
+     * on newly created classses.
+     */
+    private <error descr="Cannot resolve symbol 'ProtectionDomain'">ProtectionDomain</error> defaultDomain = null;
+
+    /*
+     * returns (and initializes) the default domain.
+     */
+
+    private synchronized <error descr="Cannot resolve symbol 'ProtectionDomain'">ProtectionDomain</error> getDefaultDomain() {
+	if (defaultDomain == null) {
+	    <error descr="Cannot resolve symbol 'CodeSource'">CodeSource</error> cs = new <error descr="Cannot resolve symbol 'CodeSource'">CodeSource</error>(null, null);
+	    defaultDomain = new <error descr="Cannot resolve symbol 'ProtectionDomain'">ProtectionDomain</error>(cs, null, this, null);
+	}
+	return defaultDomain;
+    }
+
+    /* All native library names we've loaded. */
+    private static <error descr="Cannot resolve symbol 'Vector'">Vector</error> loadedLibraryNames = new <error descr="Cannot resolve symbol 'Vector'">Vector</error>();
+    /* Native libraries belonging to system classes. */
+    private static <error descr="Cannot resolve symbol 'Vector'">Vector</error> systemNativeLibraries = new <error descr="Cannot resolve symbol 'Vector'">Vector</error>();
+    /* Native libraries associated with the class loader. */
+    private <error descr="Cannot resolve symbol 'Vector'">Vector</error> nativeLibraries = new <error descr="Cannot resolve symbol 'Vector'">Vector</error>();
+
+    /* native libraries being loaded/unloaded. */
+    private static <error descr="Cannot resolve symbol 'Stack'">Stack</error> nativeLibraryContext = new <error descr="Cannot resolve symbol 'Stack'">Stack</error>();
+
+    /* The paths searched for libraries */
+    static private String usr_paths[];
+    static private String sys_paths[];
+
+    private static String[] initializePath(String propname) {
+        String ldpath = System.getProperty(propname, "");
+	String ps = File.pathSeparator;
+	int ldlen = ldpath.length();
+	int i, j, n;
+	// Count the separators in the path
+	i = ldpath.indexOf(ps);
+	n = 0;
+	while (i >= 0) {
+	    n++;
+	    i = ldpath.indexOf(ps, i+1);
+	}
+
+	// allocate the array of paths - n :'s = n + 1 path elements
+	String[] paths = new String[n + 1];
+
+	// Fill the array with paths from the ldpath
+	n = i = 0;
+	j = ldpath.indexOf(ps);
+	while (j >= 0) {
+	    if (j - i > 0) {
+	        paths[n++] = ldpath.substring(i, j);
+	    } else if (j - i == 0) {
+	        paths[n++] = ".";
+	    }
+	    i = j + 1;
+	    j = ldpath.indexOf(ps, i);
+	}
+	paths[n] = ldpath.substring(i, ldlen);
+	return paths;
+    }
+
+
+    /* Called in the java.lang.Runtime class to implement load
+     * and loadLibrary.
+     */
+    static void loadLibrary(Class fromClass, String name,
+			    boolean isAbsolute) {
+        <error descr="Incompatible types. Found: 'java.lang.ClassLoader', required: 'ClassLoader'">ClassLoader loader =
+	    (fromClass == null) ? null : fromClass.getClassLoader();</error>
+        if (sys_paths == null) {
+	    usr_paths = initializePath("java.library.path");
+	    sys_paths = initializePath("sun.boot.library.path");
+        }
+        if (isAbsolute) {
+	    if (loadLibrary0(fromClass, new File(name))) {
+	        return;
+	    }
+	    throw new <error descr="Cannot resolve symbol 'UnsatisfiedLinkError'">UnsatisfiedLinkError</error>("Can't load library: " + name);
+	}
+	if (loader != null) {
+	    String libfilename = loader.findLibrary(name);
+	    if (libfilename != null) {
+	        File libfile = new File(libfilename);
+	        if (!libfile.isAbsolute()) {
+		    throw new <error descr="Cannot resolve symbol 'UnsatisfiedLinkError'">UnsatisfiedLinkError</error>(
+    "ClassLoader.findLibrary failed to return an absolute path: " + libfilename);
+		}
+		if (loadLibrary0(fromClass, libfile)) {
+		    return;
+		}
+		throw new <error descr="Cannot resolve symbol 'UnsatisfiedLinkError'">UnsatisfiedLinkError</error> ("Can't load " + libfilename);
+	    }
+	}
+	for (int i = 0 ; i < sys_paths.length ; i++) {
+	    File libfile = new File(sys_paths[i], System.mapLibraryName(name));
+	    if (loadLibrary0(fromClass, libfile)) {
+	        return;
+	    }
+	}
+	if (loader != null) {
+	    for (int i = 0 ; i < usr_paths.length ; i++) {
+	        File libfile = new File(usr_paths[i],
+					System.mapLibraryName(name));
+		if (loadLibrary0(fromClass, libfile)) {
+		    return;
+		}
+	    }
+	}
+	// Oops, it failed
+        throw new <error descr="Cannot resolve symbol 'UnsatisfiedLinkError'">UnsatisfiedLinkError</error>("no " + name + " in java.library.path");
+    }
+
+    private static boolean loadLibrary0(Class fromClass, final File file) {
+	Boolean exists = (Boolean)
+	    <error descr="Cannot resolve symbol 'AccessController'">AccessController</error>.doPrivileged(new <error descr="Cannot resolve symbol 'PrivilegedAction'">PrivilegedAction</error>() {
+		public Object run() {
+		    return new Boolean(file.exists());
+		}
+	    });
+	if (!exists.booleanValue()) {
+	    return false;
+	}
+        String name;
+	try {
+	    name = file.getCanonicalPath();
+	} catch (IOException e) {
+	    return false;
+	}
+        <error descr="Incompatible types. Found: 'java.lang.ClassLoader', required: 'ClassLoader'">ClassLoader loader =
+	    (fromClass == null) ? null : fromClass.getClassLoader();</error>
+        <error descr="Cannot resolve symbol 'Vector'">Vector</error> libs =
+	    loader != null ? loader.nativeLibraries : systemNativeLibraries;
+	synchronized (libs) {
+	    int size = libs.<error descr="Cannot resolve method 'size()'">size</error>();
+	    for (int i = 0; i < size; i++) {
+	        NativeLibrary lib = (NativeLibrary)libs.<error descr="Cannot resolve method 'elementAt(int)'">elementAt</error>(i);
+		if (name.equals(lib.name)) {
+		    return true;
+		}
+	    }
+
+	    synchronized (loadedLibraryNames) {
+	        if (loadedLibraryNames.<error descr="Cannot resolve method 'contains(java.lang.String)'">contains</error>(name)) {
+		    throw new <error descr="Cannot resolve symbol 'UnsatisfiedLinkError'">UnsatisfiedLinkError</error>
+		        ("Native Library " +
+			 name +
+			 " already loaded in another classloader");
+		}
+		/* If the library is being loaded (must be by
+		 * the same thread, because Runtime.load and
+		 * Runtime.loadLibrary are synchronous). The
+		 * reason is can occur is that the JNI_OnLoad
+		 * function can cause another loadLibrary call.
+		 *
+		 * Thus we can use a static stack to hold the list
+		 * of libraries we are loading.
+		 *
+		 * If there is a pending load operation for the
+		 * library, we immediately return success; otherwise,
+		 * we raise UnsatisfiedLinkError.
+		 */
+		int n = nativeLibraryContext.<error descr="Cannot resolve method 'size()'">size</error>();
+		for (int i = 0; i < n; i++) {
+		    NativeLibrary lib = (NativeLibrary)
+		        nativeLibraryContext.<error descr="Cannot resolve method 'elementAt(int)'">elementAt</error>(i);
+		    if (name.equals(lib.name)) {
+		        if (<error descr="Operator '==' cannot be applied to 'ClassLoader', 'java.lang.ClassLoader'">loader == lib.fromClass.getClassLoader()</error>) {
+			    return true;
+			} else {
+			    throw new <error descr="Cannot resolve symbol 'UnsatisfiedLinkError'">UnsatisfiedLinkError</error>
+			        ("Native Library " +
+				 name +
+				 " is being loaded in another classloader");
+			}
+		    }
+		}
+		NativeLibrary lib = new NativeLibrary(fromClass, name);
+		nativeLibraryContext.<error descr="Cannot resolve method 'push(ClassLoader.NativeLibrary)'">push</error>(lib);
+		try {
+		    lib.load(name);
+		} finally {
+		    nativeLibraryContext.<error descr="Cannot resolve method 'pop()'">pop</error>();
+		}
+		if (lib.handle != 0) {
+		    loadedLibraryNames.<error descr="Cannot resolve method 'addElement(java.lang.String)'">addElement</error>(name);
+		    libs.<error descr="Cannot resolve method 'addElement(ClassLoader.NativeLibrary)'">addElement</error>(lib);
+		    return true;
+		}
+		return false;
+	    }
+	}
+    }
+
+    /* Called in the VM class linking code. */
+    static long findNative(ClassLoader loader, String name) {
+        <error descr="Cannot resolve symbol 'Vector'">Vector</error> libs =
+	    loader != null ? loader.nativeLibraries : systemNativeLibraries;
+	synchronized (libs) {
+	    int size = libs.<error descr="Cannot resolve method 'size()'">size</error>();
+	    for (int i = 0; i < size; i++) {
+	        NativeLibrary lib = (NativeLibrary)libs.<error descr="Cannot resolve method 'elementAt(int)'">elementAt</error>(i);
+		long entry = lib.find(name);
+		if (entry != 0)
+		    return entry;
+	    }
+	}
+	return 0;
+    }
+
+    /*
+     * The default toggle for assertion checking.
+     */
+    private boolean defaultAssertionStatus = false;
+
+    /*
+     * Maps String packageName to Boolean package default assertion status
+     * Note that the default package is placed under a null map key.
+     * If this field is null then we are delegating assertion status queries
+     * to the VM, i.e., none of this ClassLoader's assertion status
+     * modification methods have been called.
+     */
+    private Map packageAssertionStatus = null;
+
+    /*
+     * Maps String fullyQualifiedClassName to Boolean assertionStatus
+     * If this field is null then we are delegating assertion status queries
+     * to the VM, i.e., none of this ClassLoader's assertion status
+     * modification methods have been called.
+     */
+    Map classAssertionStatus = null;
+
+    /**
+     * Sets the default assertion status for this class loader.  This setting
+     * determines whether classes loaded by this class loader and initialized
+     * in the future will have assertions enabled or disabled by default.
+     * This setting may be overridden on a per-package or per-class basis by
+     * invoking {@link #setPackageAssertionStatus(String,boolean)} or {@link
+     * #setClassAssertionStatus(String,boolean)}.
+     *
+     * @param enabled <tt>true</tt> if classes loaded by this class loader
+     *        will henceforth have assertions enabled by default,
+     *        <tt>false</tt> if they will have assertions disabled by default.
+     * @since 1.4
+     */
+    public synchronized void setDefaultAssertionStatus(boolean enabled) {
+        if (classAssertionStatus == null)
+            initializeJavaAssertionMaps();
+
+        defaultAssertionStatus = enabled;
+    }
+
+    /**
+     * Sets the package default assertion status for the named
+     * package.  The package default assertion status determines the
+     * assertion status for classes initialized in the future that belong
+     * to the named package or any of its "subpackages."
+     * <p>
+     * A subpackage of a package named p is any package whose name
+     * begins with "p." .  For example, <tt>javax.swing.text</tt> is
+     * a subpackage of <tt>javax.swing</tt>, and both <tt>java.util</tt>
+     * and <tt>java.lang.reflect</tt> are subpackages of <tt>java</tt>.
+     * <p>
+     * In the event that multiple package defaults apply to a given
+     * class, the package default pertaining to the most specific package
+     * takes precedence over the others.  For example, if
+     * <tt>javax.lang</tt> and <tt>javax.lang.reflect</tt> both have
+     * package defaults associated with them, the latter package
+     * default applies to classes in <tt>javax.lang.reflect</tt>.
+     * <p>
+     * Package defaults take precedence over the class loader's default
+     * assertion status, and may be overridden on a per-class basis by
+     * invoking {@link #setClassAssertionStatus(String,boolean)}.
+     *
+     * @param packageName the name of the package whose package default
+     *        assertion status is to be set. A null value
+     *        indicates the unnamed package that is "current"
+     *        (JLS 7.4.2).
+     * @param enabled <tt>true</tt> if classes loaded by this classloader
+     *        and belonging to the named package or any of its subpackages
+     *        will have assertions enabled by default, <tt>false</tt> if they
+     *        will have assertions disabled by default.
+     * @since 1.4
+     */
+    public synchronized void setPackageAssertionStatus(String packageName,
+                                                       boolean enabled)
+    {
+        if (packageAssertionStatus == null)
+            initializeJavaAssertionMaps();
+
+        packageAssertionStatus.put(packageName, Boolean.valueOf(enabled));
+    }
+
+    /**
+     * Sets the desired assertion status for the named top-level class in
+     * this class loader and any nested classes contained therein.
+     * This setting takes precedence over the  class loader's default
+     * assertion status, and over any applicable per-package default.
+     * This method has no effect if the named class has already been
+     * initialized.  (Once a class is initialized, its assertion status cannot
+     * change.)
+     * <p>
+     * If the named class is not a top-level class, this call will have no
+     * effect on the actual assertion status of any class, and its return
+     * value is undefined.
+     *
+     * @param className the fully qualified class name of the top-level class
+     *        whose assertion status is to be set.
+     * @param enabled <tt>true</tt> if the named class is to have assertions
+     *        enabled when (and if) it is initialized, <tt>false</tt> if the
+     *        class is to have assertions disabled.
+     * @since 1.4
+     */
+    public synchronized void setClassAssertionStatus(String className,
+                                                     boolean enabled)
+    {
+        if (classAssertionStatus == null)
+            initializeJavaAssertionMaps();
+
+        classAssertionStatus.put(className, Boolean.valueOf(enabled));
+    }
+
+    /**
+     * Sets the default assertion status for this class loader to
+     * <tt>false</tt> and discards any package defaults or class assertion
+     * status settings associated with the class loader.  This call is
+     * provided so that class loaders can be made to ignore any command line
+     * or persistent assertion status settings and "start with a clean slate."
+     *
+     * @since 1.4
+     */
+    public synchronized void clearAssertionStatus() {
+        /*
+         * Whether or not "Java assertion maps" are initialized, set
+         * them to empty maps, effectively ignoring any present settings.
+         */
+        classAssertionStatus = new HashMap();
+        packageAssertionStatus = new HashMap();
+
+        defaultAssertionStatus = false;
+    }
+
+    /**
+     * Returns the assertion status that would be assigned to the specified
+     * class if it were to be initialized at the time this method is invoked.
+     * If the named class has had its assertion status set, the most recent
+     * setting will be returned; otherwise, if any package default assertion
+     * status pertains to this class, the most recent setting for the most
+     * specific pertinent package default assertion status is returned;
+     * otherwise, this class loader's default assertion status is returned.
+     *
+     * @param  className the fully qualified class name of the class whose
+     *         desired assertion status is being queried.
+     * @return the desired assertion status of the specified class.
+     * @see    #setClassAssertionStatus(String,boolean)
+     * @see    #setPackageAssertionStatus(String,boolean)
+     * @see    #setDefaultAssertionStatus(boolean)
+     * @since  1.4
+     */
+    synchronized boolean desiredAssertionStatus(String className) {
+        Boolean result;
+
+        // assert classAssertionStatus   != null;
+        // assert packageAssertionStatus != null;
+
+        // Check for a class entry
+        result = (Boolean)classAssertionStatus.get(className);
+        if (result != null)
+            return result.booleanValue();
+
+        // Check for most specific package entry
+        int dotIndex = className.lastIndexOf(".");
+        if (dotIndex < 0) { // default package
+            result = (Boolean)packageAssertionStatus.get(null);
+            if (result != null)
+                return result.booleanValue();
+        }
+        while(dotIndex > 0) {
+            className = className.substring(0, dotIndex);
+            result = (Boolean)packageAssertionStatus.get(className);
+            if (result != null)
+                return result.booleanValue();
+            dotIndex = className.lastIndexOf(".", dotIndex-1);
+        }
+
+        // Return the classloader default
+        return defaultAssertionStatus;
+    }
+
+    // Set up the assertions with information provided by the VM.
+    private void initializeJavaAssertionMaps() {
+        // assert Thread.holdsLock(this);
+
+        classAssertionStatus = new HashMap();
+        packageAssertionStatus = new HashMap();
+        <error descr="Cannot resolve symbol 'AssertionStatusDirectives'">AssertionStatusDirectives</error> directives = retrieveDirectives();
+
+        for(int i=0; i<directives.<error descr="Cannot resolve symbol 'classes'">classes</error>.length; i++)
+            classAssertionStatus.put(directives.<error descr="Cannot resolve symbol 'classes'">classes</error>[i],
+                              Boolean.valueOf<error descr="Cannot resolve method 'valueOf(?)'">(directives.<error descr="Cannot resolve symbol 'classEnabled'">classEnabled</error>[i])</error>);
+
+        for(int i=0; i<directives.<error descr="Cannot resolve symbol 'packages'">packages</error>.length; i++)
+            packageAssertionStatus.put(directives.<error descr="Cannot resolve symbol 'packages'">packages</error>[i],
+                              Boolean.valueOf<error descr="Cannot resolve method 'valueOf(?)'">(directives.<error descr="Cannot resolve symbol 'packageEnabled'">packageEnabled</error>[i])</error>);
+
+        defaultAssertionStatus = directives.<error descr="Cannot resolve symbol 'deflt'">deflt</error>;
+    }
+
+    // Retrieves the assertion directives from the VM.
+    private static native <error descr="Cannot resolve symbol 'AssertionStatusDirectives'">AssertionStatusDirectives</error> retrieveDirectives();
+
+}
+
+
+class SystemClassLoaderAction implements <error descr="Cannot resolve symbol 'PrivilegedExceptionAction'">PrivilegedExceptionAction</error> {
+    private ClassLoader parent;
+
+    SystemClassLoaderAction(ClassLoader parent) {
+	this.parent = parent;
+    }
+
+    public Object run() throws Exception {
+	ClassLoader sys;
+	<error descr="Cannot resolve symbol 'Constructor'">Constructor</error> ctor;
+	Class c;
+	Class cp[] = { ClassLoader.class };
+	Object params[] = { parent };
+
+        String cls = System.getProperty("java.system.class.loader");
+	if (cls == null) {
+	    return parent;
+	}
+
+	c = Class.forName<error descr="'forName(java.lang.String, boolean, java.lang.ClassLoader)' in 'java.lang.Class' cannot be applied to '(java.lang.String, boolean, ClassLoader)'">(cls, true, parent)</error>;
+	ctor = c.getDeclaredConstructor(cp);
+	sys = (ClassLoader) ctor.<error descr="Cannot resolve method 'newInstance(java.lang.Object[])'">newInstance</error>(params);
+	Thread.currentThread().setContextClassLoader<error descr="'setContextClassLoader(java.lang.ClassLoader)' in 'java.lang.Thread' cannot be applied to '(ClassLoader)'">(sys)</error>;
+	return sys;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/aMethods.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/aMethods.java
new file mode 100644
index 0000000..379a1a8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/aMethods.java
@@ -0,0 +1,3002 @@
+class a_Me { 
+  void method0 () { }
+  void method1 () { }
+  void method2 () { }
+  void method3 () { }
+  void method4 () { }
+  void method5 () { }
+  void method6 () { }
+  void method7 () { }
+  void method8 () { }
+  void method9 () { }
+  void method10 () { }
+  void method11 () { }
+  void method12 () { }
+  void method13 () { }
+  void method14 () { }
+  void method15 () { }
+  void method16 () { }
+  void method17 () { }
+  void method18 () { }
+  void method19 () { }
+  void method20 () { }
+  void method21 () { }
+  void method22 () { }
+  void method23 () { }
+  void method24 () { }
+  void method25 () { }
+  void method26 () { }
+  void method27 () { }
+  void method28 () { }
+  void method29 () { }
+  void method30 () { }
+  void method31 () { }
+  void method32 () { }
+  void method33 () { }
+  void method34 () { }
+  void method35 () { }
+  void method36 () { }
+  void method37 () { }
+  void method38 () { }
+  void method39 () { }
+  void method40 () { }
+  void method41 () { }
+  void method42 () { }
+  void method43 () { }
+  void method44 () { }
+  void method45 () { }
+  void method46 () { }
+  void method47 () { }
+  void method48 () { }
+  void method49 () { }
+  void method50 () { }
+  void method51 () { }
+  void method52 () { }
+  void method53 () { }
+  void method54 () { }
+  void method55 () { }
+  void method56 () { }
+  void method57 () { }
+  void method58 () { }
+  void method59 () { }
+  void method60 () { }
+  void method61 () { }
+  void method62 () { }
+  void method63 () { }
+  void method64 () { }
+  void method65 () { }
+  void method66 () { }
+  void method67 () { }
+  void method68 () { }
+  void method69 () { }
+  void method70 () { }
+  void method71 () { }
+  void method72 () { }
+  void method73 () { }
+  void method74 () { }
+  void method75 () { }
+  void method76 () { }
+  void method77 () { }
+  void method78 () { }
+  void method79 () { }
+  void method80 () { }
+  void method81 () { }
+  void method82 () { }
+  void method83 () { }
+  void method84 () { }
+  void method85 () { }
+  void method86 () { }
+  void method87 () { }
+  void method88 () { }
+  void method89 () { }
+  void method90 () { }
+  void method91 () { }
+  void method92 () { }
+  void method93 () { }
+  void method94 () { }
+  void method95 () { }
+  void method96 () { }
+  void method97 () { }
+  void method98 () { }
+  void method99 () { }
+  void method100 () { }
+  void method101 () { }
+  void method102 () { }
+  void method103 () { }
+  void method104 () { }
+  void method105 () { }
+  void method106 () { }
+  void method107 () { }
+  void method108 () { }
+  void method109 () { }
+  void method110 () { }
+  void method111 () { }
+  void method112 () { }
+  void method113 () { }
+  void method114 () { }
+  void method115 () { }
+  void method116 () { }
+  void method117 () { }
+  void method118 () { }
+  void method119 () { }
+  void method120 () { }
+  void method121 () { }
+  void method122 () { }
+  void method123 () { }
+  void method124 () { }
+  void method125 () { }
+  void method126 () { }
+  void method127 () { }
+  void method128 () { }
+  void method129 () { }
+  void method130 () { }
+  void method131 () { }
+  void method132 () { }
+  void method133 () { }
+  void method134 () { }
+  void method135 () { }
+  void method136 () { }
+  void method137 () { }
+  void method138 () { }
+  void method139 () { }
+  void method140 () { }
+  void method141 () { }
+  void method142 () { }
+  void method143 () { }
+  void method144 () { }
+  void method145 () { }
+  void method146 () { }
+  void method147 () { }
+  void method148 () { }
+  void method149 () { }
+  void method150 () { }
+  void method151 () { }
+  void method152 () { }
+  void method153 () { }
+  void method154 () { }
+  void method155 () { }
+  void method156 () { }
+  void method157 () { }
+  void method158 () { }
+  void method159 () { }
+  void method160 () { }
+  void method161 () { }
+  void method162 () { }
+  void method163 () { }
+  void method164 () { }
+  void method165 () { }
+  void method166 () { }
+  void method167 () { }
+  void method168 () { }
+  void method169 () { }
+  void method170 () { }
+  void method171 () { }
+  void method172 () { }
+  void method173 () { }
+  void method174 () { }
+  void method175 () { }
+  void method176 () { }
+  void method177 () { }
+  void method178 () { }
+  void method179 () { }
+  void method180 () { }
+  void method181 () { }
+  void method182 () { }
+  void method183 () { }
+  void method184 () { }
+  void method185 () { }
+  void method186 () { }
+  void method187 () { }
+  void method188 () { }
+  void method189 () { }
+  void method190 () { }
+  void method191 () { }
+  void method192 () { }
+  void method193 () { }
+  void method194 () { }
+  void method195 () { }
+  void method196 () { }
+  void method197 () { }
+  void method198 () { }
+  void method199 () { }
+  void method200 () { }
+  void method201 () { }
+  void method202 () { }
+  void method203 () { }
+  void method204 () { }
+  void method205 () { }
+  void method206 () { }
+  void method207 () { }
+  void method208 () { }
+  void method209 () { }
+  void method210 () { }
+  void method211 () { }
+  void method212 () { }
+  void method213 () { }
+  void method214 () { }
+  void method215 () { }
+  void method216 () { }
+  void method217 () { }
+  void method218 () { }
+  void method219 () { }
+  void method220 () { }
+  void method221 () { }
+  void method222 () { }
+  void method223 () { }
+  void method224 () { }
+  void method225 () { }
+  void method226 () { }
+  void method227 () { }
+  void method228 () { }
+  void method229 () { }
+  void method230 () { }
+  void method231 () { }
+  void method232 () { }
+  void method233 () { }
+  void method234 () { }
+  void method235 () { }
+  void method236 () { }
+  void method237 () { }
+  void method238 () { }
+  void method239 () { }
+  void method240 () { }
+  void method241 () { }
+  void method242 () { }
+  void method243 () { }
+  void method244 () { }
+  void method245 () { }
+  void method246 () { }
+  void method247 () { }
+  void method248 () { }
+  void method249 () { }
+  void method250 () { }
+  void method251 () { }
+  void method252 () { }
+  void method253 () { }
+  void method254 () { }
+  void method255 () { }
+  void method256 () { }
+  void method257 () { }
+  void method258 () { }
+  void method259 () { }
+  void method260 () { }
+  void method261 () { }
+  void method262 () { }
+  void method263 () { }
+  void method264 () { }
+  void method265 () { }
+  void method266 () { }
+  void method267 () { }
+  void method268 () { }
+  void method269 () { }
+  void method270 () { }
+  void method271 () { }
+  void method272 () { }
+  void method273 () { }
+  void method274 () { }
+  void method275 () { }
+  void method276 () { }
+  void method277 () { }
+  void method278 () { }
+  void method279 () { }
+  void method280 () { }
+  void method281 () { }
+  void method282 () { }
+  void method283 () { }
+  void method284 () { }
+  void method285 () { }
+  void method286 () { }
+  void method287 () { }
+  void method288 () { }
+  void method289 () { }
+  void method290 () { }
+  void method291 () { }
+  void method292 () { }
+  void method293 () { }
+  void method294 () { }
+  void method295 () { }
+  void method296 () { }
+  void method297 () { }
+  void method298 () { }
+  void method299 () { }
+  void method300 () { }
+  void method301 () { }
+  void method302 () { }
+  void method303 () { }
+  void method304 () { }
+  void method305 () { }
+  void method306 () { }
+  void method307 () { }
+  void method308 () { }
+  void method309 () { }
+  void method310 () { }
+  void method311 () { }
+  void method312 () { }
+  void method313 () { }
+  void method314 () { }
+  void method315 () { }
+  void method316 () { }
+  void method317 () { }
+  void method318 () { }
+  void method319 () { }
+  void method320 () { }
+  void method321 () { }
+  void method322 () { }
+  void method323 () { }
+  void method324 () { }
+  void method325 () { }
+  void method326 () { }
+  void method327 () { }
+  void method328 () { }
+  void method329 () { }
+  void method330 () { }
+  void method331 () { }
+  void method332 () { }
+  void method333 () { }
+  void method334 () { }
+  void method335 () { }
+  void method336 () { }
+  void method337 () { }
+  void method338 () { }
+  void method339 () { }
+  void method340 () { }
+  void method341 () { }
+  void method342 () { }
+  void method343 () { }
+  void method344 () { }
+  void method345 () { }
+  void method346 () { }
+  void method347 () { }
+  void method348 () { }
+  void method349 () { }
+  void method350 () { }
+  void method351 () { }
+  void method352 () { }
+  void method353 () { }
+  void method354 () { }
+  void method355 () { }
+  void method356 () { }
+  void method357 () { }
+  void method358 () { }
+  void method359 () { }
+  void method360 () { }
+  void method361 () { }
+  void method362 () { }
+  void method363 () { }
+  void method364 () { }
+  void method365 () { }
+  void method366 () { }
+  void method367 () { }
+  void method368 () { }
+  void method369 () { }
+  void method370 () { }
+  void method371 () { }
+  void method372 () { }
+  void method373 () { }
+  void method374 () { }
+  void method375 () { }
+  void method376 () { }
+  void method377 () { }
+  void method378 () { }
+  void method379 () { }
+  void method380 () { }
+  void method381 () { }
+  void method382 () { }
+  void method383 () { }
+  void method384 () { }
+  void method385 () { }
+  void method386 () { }
+  void method387 () { }
+  void method388 () { }
+  void method389 () { }
+  void method390 () { }
+  void method391 () { }
+  void method392 () { }
+  void method393 () { }
+  void method394 () { }
+  void method395 () { }
+  void method396 () { }
+  void method397 () { }
+  void method398 () { }
+  void method399 () { }
+  void method400 () { }
+  void method401 () { }
+  void method402 () { }
+  void method403 () { }
+  void method404 () { }
+  void method405 () { }
+  void method406 () { }
+  void method407 () { }
+  void method408 () { }
+  void method409 () { }
+  void method410 () { }
+  void method411 () { }
+  void method412 () { }
+  void method413 () { }
+  void method414 () { }
+  void method415 () { }
+  void method416 () { }
+  void method417 () { }
+  void method418 () { }
+  void method419 () { }
+  void method420 () { }
+  void method421 () { }
+  void method422 () { }
+  void method423 () { }
+  void method424 () { }
+  void method425 () { }
+  void method426 () { }
+  void method427 () { }
+  void method428 () { }
+  void method429 () { }
+  void method430 () { }
+  void method431 () { }
+  void method432 () { }
+  void method433 () { }
+  void method434 () { }
+  void method435 () { }
+  void method436 () { }
+  void method437 () { }
+  void method438 () { }
+  void method439 () { }
+  void method440 () { }
+  void method441 () { }
+  void method442 () { }
+  void method443 () { }
+  void method444 () { }
+  void method445 () { }
+  void method446 () { }
+  void method447 () { }
+  void method448 () { }
+  void method449 () { }
+  void method450 () { }
+  void method451 () { }
+  void method452 () { }
+  void method453 () { }
+  void method454 () { }
+  void method455 () { }
+  void method456 () { }
+  void method457 () { }
+  void method458 () { }
+  void method459 () { }
+  void method460 () { }
+  void method461 () { }
+  void method462 () { }
+  void method463 () { }
+  void method464 () { }
+  void method465 () { }
+  void method466 () { }
+  void method467 () { }
+  void method468 () { }
+  void method469 () { }
+  void method470 () { }
+  void method471 () { }
+  void method472 () { }
+  void method473 () { }
+  void method474 () { }
+  void method475 () { }
+  void method476 () { }
+  void method477 () { }
+  void method478 () { }
+  void method479 () { }
+  void method480 () { }
+  void method481 () { }
+  void method482 () { }
+  void method483 () { }
+  void method484 () { }
+  void method485 () { }
+  void method486 () { }
+  void method487 () { }
+  void method488 () { }
+  void method489 () { }
+  void method490 () { }
+  void method491 () { }
+  void method492 () { }
+  void method493 () { }
+  void method494 () { }
+  void method495 () { }
+  void method496 () { }
+  void method497 () { }
+  void method498 () { }
+  void method499 () { }
+  void method500 () { }
+  void method501 () { }
+  void method502 () { }
+  void method503 () { }
+  void method504 () { }
+  void method505 () { }
+  void method506 () { }
+  void method507 () { }
+  void method508 () { }
+  void method509 () { }
+  void method510 () { }
+  void method511 () { }
+  void method512 () { }
+  void method513 () { }
+  void method514 () { }
+  void method515 () { }
+  void method516 () { }
+  void method517 () { }
+  void method518 () { }
+  void method519 () { }
+  void method520 () { }
+  void method521 () { }
+  void method522 () { }
+  void method523 () { }
+  void method524 () { }
+  void method525 () { }
+  void method526 () { }
+  void method527 () { }
+  void method528 () { }
+  void method529 () { }
+  void method530 () { }
+  void method531 () { }
+  void method532 () { }
+  void method533 () { }
+  void method534 () { }
+  void method535 () { }
+  void method536 () { }
+  void method537 () { }
+  void method538 () { }
+  void method539 () { }
+  void method540 () { }
+  void method541 () { }
+  void method542 () { }
+  void method543 () { }
+  void method544 () { }
+  void method545 () { }
+  void method546 () { }
+  void method547 () { }
+  void method548 () { }
+  void method549 () { }
+  void method550 () { }
+  void method551 () { }
+  void method552 () { }
+  void method553 () { }
+  void method554 () { }
+  void method555 () { }
+  void method556 () { }
+  void method557 () { }
+  void method558 () { }
+  void method559 () { }
+  void method560 () { }
+  void method561 () { }
+  void method562 () { }
+  void method563 () { }
+  void method564 () { }
+  void method565 () { }
+  void method566 () { }
+  void method567 () { }
+  void method568 () { }
+  void method569 () { }
+  void method570 () { }
+  void method571 () { }
+  void method572 () { }
+  void method573 () { }
+  void method574 () { }
+  void method575 () { }
+  void method576 () { }
+  void method577 () { }
+  void method578 () { }
+  void method579 () { }
+  void method580 () { }
+  void method581 () { }
+  void method582 () { }
+  void method583 () { }
+  void method584 () { }
+  void method585 () { }
+  void method586 () { }
+  void method587 () { }
+  void method588 () { }
+  void method589 () { }
+  void method590 () { }
+  void method591 () { }
+  void method592 () { }
+  void method593 () { }
+  void method594 () { }
+  void method595 () { }
+  void method596 () { }
+  void method597 () { }
+  void method598 () { }
+  void method599 () { }
+  void method600 () { }
+  void method601 () { }
+  void method602 () { }
+  void method603 () { }
+  void method604 () { }
+  void method605 () { }
+  void method606 () { }
+  void method607 () { }
+  void method608 () { }
+  void method609 () { }
+  void method610 () { }
+  void method611 () { }
+  void method612 () { }
+  void method613 () { }
+  void method614 () { }
+  void method615 () { }
+  void method616 () { }
+  void method617 () { }
+  void method618 () { }
+  void method619 () { }
+  void method620 () { }
+  void method621 () { }
+  void method622 () { }
+  void method623 () { }
+  void method624 () { }
+  void method625 () { }
+  void method626 () { }
+  void method627 () { }
+  void method628 () { }
+  void method629 () { }
+  void method630 () { }
+  void method631 () { }
+  void method632 () { }
+  void method633 () { }
+  void method634 () { }
+  void method635 () { }
+  void method636 () { }
+  void method637 () { }
+  void method638 () { }
+  void method639 () { }
+  void method640 () { }
+  void method641 () { }
+  void method642 () { }
+  void method643 () { }
+  void method644 () { }
+  void method645 () { }
+  void method646 () { }
+  void method647 () { }
+  void method648 () { }
+  void method649 () { }
+  void method650 () { }
+  void method651 () { }
+  void method652 () { }
+  void method653 () { }
+  void method654 () { }
+  void method655 () { }
+  void method656 () { }
+  void method657 () { }
+  void method658 () { }
+  void method659 () { }
+  void method660 () { }
+  void method661 () { }
+  void method662 () { }
+  void method663 () { }
+  void method664 () { }
+  void method665 () { }
+  void method666 () { }
+  void method667 () { }
+  void method668 () { }
+  void method669 () { }
+  void method670 () { }
+  void method671 () { }
+  void method672 () { }
+  void method673 () { }
+  void method674 () { }
+  void method675 () { }
+  void method676 () { }
+  void method677 () { }
+  void method678 () { }
+  void method679 () { }
+  void method680 () { }
+  void method681 () { }
+  void method682 () { }
+  void method683 () { }
+  void method684 () { }
+  void method685 () { }
+  void method686 () { }
+  void method687 () { }
+  void method688 () { }
+  void method689 () { }
+  void method690 () { }
+  void method691 () { }
+  void method692 () { }
+  void method693 () { }
+  void method694 () { }
+  void method695 () { }
+  void method696 () { }
+  void method697 () { }
+  void method698 () { }
+  void method699 () { }
+  void method700 () { }
+  void method701 () { }
+  void method702 () { }
+  void method703 () { }
+  void method704 () { }
+  void method705 () { }
+  void method706 () { }
+  void method707 () { }
+  void method708 () { }
+  void method709 () { }
+  void method710 () { }
+  void method711 () { }
+  void method712 () { }
+  void method713 () { }
+  void method714 () { }
+  void method715 () { }
+  void method716 () { }
+  void method717 () { }
+  void method718 () { }
+  void method719 () { }
+  void method720 () { }
+  void method721 () { }
+  void method722 () { }
+  void method723 () { }
+  void method724 () { }
+  void method725 () { }
+  void method726 () { }
+  void method727 () { }
+  void method728 () { }
+  void method729 () { }
+  void method730 () { }
+  void method731 () { }
+  void method732 () { }
+  void method733 () { }
+  void method734 () { }
+  void method735 () { }
+  void method736 () { }
+  void method737 () { }
+  void method738 () { }
+  void method739 () { }
+  void method740 () { }
+  void method741 () { }
+  void method742 () { }
+  void method743 () { }
+  void method744 () { }
+  void method745 () { }
+  void method746 () { }
+  void method747 () { }
+  void method748 () { }
+  void method749 () { }
+  void method750 () { }
+  void method751 () { }
+  void method752 () { }
+  void method753 () { }
+  void method754 () { }
+  void method755 () { }
+  void method756 () { }
+  void method757 () { }
+  void method758 () { }
+  void method759 () { }
+  void method760 () { }
+  void method761 () { }
+  void method762 () { }
+  void method763 () { }
+  void method764 () { }
+  void method765 () { }
+  void method766 () { }
+  void method767 () { }
+  void method768 () { }
+  void method769 () { }
+  void method770 () { }
+  void method771 () { }
+  void method772 () { }
+  void method773 () { }
+  void method774 () { }
+  void method775 () { }
+  void method776 () { }
+  void method777 () { }
+  void method778 () { }
+  void method779 () { }
+  void method780 () { }
+  void method781 () { }
+  void method782 () { }
+  void method783 () { }
+  void method784 () { }
+  void method785 () { }
+  void method786 () { }
+  void method787 () { }
+  void method788 () { }
+  void method789 () { }
+  void method790 () { }
+  void method791 () { }
+  void method792 () { }
+  void method793 () { }
+  void method794 () { }
+  void method795 () { }
+  void method796 () { }
+  void method797 () { }
+  void method798 () { }
+  void method799 () { }
+  void method800 () { }
+  void method801 () { }
+  void method802 () { }
+  void method803 () { }
+  void method804 () { }
+  void method805 () { }
+  void method806 () { }
+  void method807 () { }
+  void method808 () { }
+  void method809 () { }
+  void method810 () { }
+  void method811 () { }
+  void method812 () { }
+  void method813 () { }
+  void method814 () { }
+  void method815 () { }
+  void method816 () { }
+  void method817 () { }
+  void method818 () { }
+  void method819 () { }
+  void method820 () { }
+  void method821 () { }
+  void method822 () { }
+  void method823 () { }
+  void method824 () { }
+  void method825 () { }
+  void method826 () { }
+  void method827 () { }
+  void method828 () { }
+  void method829 () { }
+  void method830 () { }
+  void method831 () { }
+  void method832 () { }
+  void method833 () { }
+  void method834 () { }
+  void method835 () { }
+  void method836 () { }
+  void method837 () { }
+  void method838 () { }
+  void method839 () { }
+  void method840 () { }
+  void method841 () { }
+  void method842 () { }
+  void method843 () { }
+  void method844 () { }
+  void method845 () { }
+  void method846 () { }
+  void method847 () { }
+  void method848 () { }
+  void method849 () { }
+  void method850 () { }
+  void method851 () { }
+  void method852 () { }
+  void method853 () { }
+  void method854 () { }
+  void method855 () { }
+  void method856 () { }
+  void method857 () { }
+  void method858 () { }
+  void method859 () { }
+  void method860 () { }
+  void method861 () { }
+  void method862 () { }
+  void method863 () { }
+  void method864 () { }
+  void method865 () { }
+  void method866 () { }
+  void method867 () { }
+  void method868 () { }
+  void method869 () { }
+  void method870 () { }
+  void method871 () { }
+  void method872 () { }
+  void method873 () { }
+  void method874 () { }
+  void method875 () { }
+  void method876 () { }
+  void method877 () { }
+  void method878 () { }
+  void method879 () { }
+  void method880 () { }
+  void method881 () { }
+  void method882 () { }
+  void method883 () { }
+  void method884 () { }
+  void method885 () { }
+  void method886 () { }
+  void method887 () { }
+  void method888 () { }
+  void method889 () { }
+  void method890 () { }
+  void method891 () { }
+  void method892 () { }
+  void method893 () { }
+  void method894 () { }
+  void method895 () { }
+  void method896 () { }
+  void method897 () { }
+  void method898 () { }
+  void method899 () { }
+  void method900 () { }
+  void method901 () { }
+  void method902 () { }
+  void method903 () { }
+  void method904 () { }
+  void method905 () { }
+  void method906 () { }
+  void method907 () { }
+  void method908 () { }
+  void method909 () { }
+  void method910 () { }
+  void method911 () { }
+  void method912 () { }
+  void method913 () { }
+  void method914 () { }
+  void method915 () { }
+  void method916 () { }
+  void method917 () { }
+  void method918 () { }
+  void method919 () { }
+  void method920 () { }
+  void method921 () { }
+  void method922 () { }
+  void method923 () { }
+  void method924 () { }
+  void method925 () { }
+  void method926 () { }
+  void method927 () { }
+  void method928 () { }
+  void method929 () { }
+  void method930 () { }
+  void method931 () { }
+  void method932 () { }
+  void method933 () { }
+  void method934 () { }
+  void method935 () { }
+  void method936 () { }
+  void method937 () { }
+  void method938 () { }
+  void method939 () { }
+  void method940 () { }
+  void method941 () { }
+  void method942 () { }
+  void method943 () { }
+  void method944 () { }
+  void method945 () { }
+  void method946 () { }
+  void method947 () { }
+  void method948 () { }
+  void method949 () { }
+  void method950 () { }
+  void method951 () { }
+  void method952 () { }
+  void method953 () { }
+  void method954 () { }
+  void method955 () { }
+  void method956 () { }
+  void method957 () { }
+  void method958 () { }
+  void method959 () { }
+  void method960 () { }
+  void method961 () { }
+  void method962 () { }
+  void method963 () { }
+  void method964 () { }
+  void method965 () { }
+  void method966 () { }
+  void method967 () { }
+  void method968 () { }
+  void method969 () { }
+  void method970 () { }
+  void method971 () { }
+  void method972 () { }
+  void method973 () { }
+  void method974 () { }
+  void method975 () { }
+  void method976 () { }
+  void method977 () { }
+  void method978 () { }
+  void method979 () { }
+  void method980 () { }
+  void method981 () { }
+  void method982 () { }
+  void method983 () { }
+  void method984 () { }
+  void method985 () { }
+  void method986 () { }
+  void method987 () { }
+  void method988 () { }
+  void method989 () { }
+  void method990 () { }
+  void method991 () { }
+  void method992 () { }
+  void method993 () { }
+  void method994 () { }
+  void method995 () { }
+  void method996 () { }
+  void method997 () { }
+  void method998 () { }
+  void method999 () { }
+  void method1000 () { }
+  void method1001 () { }
+  void method1002 () { }
+  void method1003 () { }
+  void method1004 () { }
+  void method1005 () { }
+  void method1006 () { }
+  void method1007 () { }
+  void method1008 () { }
+  void method1009 () { }
+  void method1010 () { }
+  void method1011 () { }
+  void method1012 () { }
+  void method1013 () { }
+  void method1014 () { }
+  void method1015 () { }
+  void method1016 () { }
+  void method1017 () { }
+  void method1018 () { }
+  void method1019 () { }
+  void method1020 () { }
+  void method1021 () { }
+  void method1022 () { }
+  void method1023 () { }
+  void method1024 () { }
+  void method1025 () { }
+  void method1026 () { }
+  void method1027 () { }
+  void method1028 () { }
+  void method1029 () { }
+  void method1030 () { }
+  void method1031 () { }
+  void method1032 () { }
+  void method1033 () { }
+  void method1034 () { }
+  void method1035 () { }
+  void method1036 () { }
+  void method1037 () { }
+  void method1038 () { }
+  void method1039 () { }
+  void method1040 () { }
+  void method1041 () { }
+  void method1042 () { }
+  void method1043 () { }
+  void method1044 () { }
+  void method1045 () { }
+  void method1046 () { }
+  void method1047 () { }
+  void method1048 () { }
+  void method1049 () { }
+  void method1050 () { }
+  void method1051 () { }
+  void method1052 () { }
+  void method1053 () { }
+  void method1054 () { }
+  void method1055 () { }
+  void method1056 () { }
+  void method1057 () { }
+  void method1058 () { }
+  void method1059 () { }
+  void method1060 () { }
+  void method1061 () { }
+  void method1062 () { }
+  void method1063 () { }
+  void method1064 () { }
+  void method1065 () { }
+  void method1066 () { }
+  void method1067 () { }
+  void method1068 () { }
+  void method1069 () { }
+  void method1070 () { }
+  void method1071 () { }
+  void method1072 () { }
+  void method1073 () { }
+  void method1074 () { }
+  void method1075 () { }
+  void method1076 () { }
+  void method1077 () { }
+  void method1078 () { }
+  void method1079 () { }
+  void method1080 () { }
+  void method1081 () { }
+  void method1082 () { }
+  void method1083 () { }
+  void method1084 () { }
+  void method1085 () { }
+  void method1086 () { }
+  void method1087 () { }
+  void method1088 () { }
+  void method1089 () { }
+  void method1090 () { }
+  void method1091 () { }
+  void method1092 () { }
+  void method1093 () { }
+  void method1094 () { }
+  void method1095 () { }
+  void method1096 () { }
+  void method1097 () { }
+  void method1098 () { }
+  void method1099 () { }
+  void method1100 () { }
+  void method1101 () { }
+  void method1102 () { }
+  void method1103 () { }
+  void method1104 () { }
+  void method1105 () { }
+  void method1106 () { }
+  void method1107 () { }
+  void method1108 () { }
+  void method1109 () { }
+  void method1110 () { }
+  void method1111 () { }
+  void method1112 () { }
+  void method1113 () { }
+  void method1114 () { }
+  void method1115 () { }
+  void method1116 () { }
+  void method1117 () { }
+  void method1118 () { }
+  void method1119 () { }
+  void method1120 () { }
+  void method1121 () { }
+  void method1122 () { }
+  void method1123 () { }
+  void method1124 () { }
+  void method1125 () { }
+  void method1126 () { }
+  void method1127 () { }
+  void method1128 () { }
+  void method1129 () { }
+  void method1130 () { }
+  void method1131 () { }
+  void method1132 () { }
+  void method1133 () { }
+  void method1134 () { }
+  void method1135 () { }
+  void method1136 () { }
+  void method1137 () { }
+  void method1138 () { }
+  void method1139 () { }
+  void method1140 () { }
+  void method1141 () { }
+  void method1142 () { }
+  void method1143 () { }
+  void method1144 () { }
+  void method1145 () { }
+  void method1146 () { }
+  void method1147 () { }
+  void method1148 () { }
+  void method1149 () { }
+  void method1150 () { }
+  void method1151 () { }
+  void method1152 () { }
+  void method1153 () { }
+  void method1154 () { }
+  void method1155 () { }
+  void method1156 () { }
+  void method1157 () { }
+  void method1158 () { }
+  void method1159 () { }
+  void method1160 () { }
+  void method1161 () { }
+  void method1162 () { }
+  void method1163 () { }
+  void method1164 () { }
+  void method1165 () { }
+  void method1166 () { }
+  void method1167 () { }
+  void method1168 () { }
+  void method1169 () { }
+  void method1170 () { }
+  void method1171 () { }
+  void method1172 () { }
+  void method1173 () { }
+  void method1174 () { }
+  void method1175 () { }
+  void method1176 () { }
+  void method1177 () { }
+  void method1178 () { }
+  void method1179 () { }
+  void method1180 () { }
+  void method1181 () { }
+  void method1182 () { }
+  void method1183 () { }
+  void method1184 () { }
+  void method1185 () { }
+  void method1186 () { }
+  void method1187 () { }
+  void method1188 () { }
+  void method1189 () { }
+  void method1190 () { }
+  void method1191 () { }
+  void method1192 () { }
+  void method1193 () { }
+  void method1194 () { }
+  void method1195 () { }
+  void method1196 () { }
+  void method1197 () { }
+  void method1198 () { }
+  void method1199 () { }
+  void method1200 () { }
+  void method1201 () { }
+  void method1202 () { }
+  void method1203 () { }
+  void method1204 () { }
+  void method1205 () { }
+  void method1206 () { }
+  void method1207 () { }
+  void method1208 () { }
+  void method1209 () { }
+  void method1210 () { }
+  void method1211 () { }
+  void method1212 () { }
+  void method1213 () { }
+  void method1214 () { }
+  void method1215 () { }
+  void method1216 () { }
+  void method1217 () { }
+  void method1218 () { }
+  void method1219 () { }
+  void method1220 () { }
+  void method1221 () { }
+  void method1222 () { }
+  void method1223 () { }
+  void method1224 () { }
+  void method1225 () { }
+  void method1226 () { }
+  void method1227 () { }
+  void method1228 () { }
+  void method1229 () { }
+  void method1230 () { }
+  void method1231 () { }
+  void method1232 () { }
+  void method1233 () { }
+  void method1234 () { }
+  void method1235 () { }
+  void method1236 () { }
+  void method1237 () { }
+  void method1238 () { }
+  void method1239 () { }
+  void method1240 () { }
+  void method1241 () { }
+  void method1242 () { }
+  void method1243 () { }
+  void method1244 () { }
+  void method1245 () { }
+  void method1246 () { }
+  void method1247 () { }
+  void method1248 () { }
+  void method1249 () { }
+  void method1250 () { }
+  void method1251 () { }
+  void method1252 () { }
+  void method1253 () { }
+  void method1254 () { }
+  void method1255 () { }
+  void method1256 () { }
+  void method1257 () { }
+  void method1258 () { }
+  void method1259 () { }
+  void method1260 () { }
+  void method1261 () { }
+  void method1262 () { }
+  void method1263 () { }
+  void method1264 () { }
+  void method1265 () { }
+  void method1266 () { }
+  void method1267 () { }
+  void method1268 () { }
+  void method1269 () { }
+  void method1270 () { }
+  void method1271 () { }
+  void method1272 () { }
+  void method1273 () { }
+  void method1274 () { }
+  void method1275 () { }
+  void method1276 () { }
+  void method1277 () { }
+  void method1278 () { }
+  void method1279 () { }
+  void method1280 () { }
+  void method1281 () { }
+  void method1282 () { }
+  void method1283 () { }
+  void method1284 () { }
+  void method1285 () { }
+  void method1286 () { }
+  void method1287 () { }
+  void method1288 () { }
+  void method1289 () { }
+  void method1290 () { }
+  void method1291 () { }
+  void method1292 () { }
+  void method1293 () { }
+  void method1294 () { }
+  void method1295 () { }
+  void method1296 () { }
+  void method1297 () { }
+  void method1298 () { }
+  void method1299 () { }
+  void method1300 () { }
+  void method1301 () { }
+  void method1302 () { }
+  void method1303 () { }
+  void method1304 () { }
+  void method1305 () { }
+  void method1306 () { }
+  void method1307 () { }
+  void method1308 () { }
+  void method1309 () { }
+  void method1310 () { }
+  void method1311 () { }
+  void method1312 () { }
+  void method1313 () { }
+  void method1314 () { }
+  void method1315 () { }
+  void method1316 () { }
+  void method1317 () { }
+  void method1318 () { }
+  void method1319 () { }
+  void method1320 () { }
+  void method1321 () { }
+  void method1322 () { }
+  void method1323 () { }
+  void method1324 () { }
+  void method1325 () { }
+  void method1326 () { }
+  void method1327 () { }
+  void method1328 () { }
+  void method1329 () { }
+  void method1330 () { }
+  void method1331 () { }
+  void method1332 () { }
+  void method1333 () { }
+  void method1334 () { }
+  void method1335 () { }
+  void method1336 () { }
+  void method1337 () { }
+  void method1338 () { }
+  void method1339 () { }
+  void method1340 () { }
+  void method1341 () { }
+  void method1342 () { }
+  void method1343 () { }
+  void method1344 () { }
+  void method1345 () { }
+  void method1346 () { }
+  void method1347 () { }
+  void method1348 () { }
+  void method1349 () { }
+  void method1350 () { }
+  void method1351 () { }
+  void method1352 () { }
+  void method1353 () { }
+  void method1354 () { }
+  void method1355 () { }
+  void method1356 () { }
+  void method1357 () { }
+  void method1358 () { }
+  void method1359 () { }
+  void method1360 () { }
+  void method1361 () { }
+  void method1362 () { }
+  void method1363 () { }
+  void method1364 () { }
+  void method1365 () { }
+  void method1366 () { }
+  void method1367 () { }
+  void method1368 () { }
+  void method1369 () { }
+  void method1370 () { }
+  void method1371 () { }
+  void method1372 () { }
+  void method1373 () { }
+  void method1374 () { }
+  void method1375 () { }
+  void method1376 () { }
+  void method1377 () { }
+  void method1378 () { }
+  void method1379 () { }
+  void method1380 () { }
+  void method1381 () { }
+  void method1382 () { }
+  void method1383 () { }
+  void method1384 () { }
+  void method1385 () { }
+  void method1386 () { }
+  void method1387 () { }
+  void method1388 () { }
+  void method1389 () { }
+  void method1390 () { }
+  void method1391 () { }
+  void method1392 () { }
+  void method1393 () { }
+  void method1394 () { }
+  void method1395 () { }
+  void method1396 () { }
+  void method1397 () { }
+  void method1398 () { }
+  void method1399 () { }
+  void method1400 () { }
+  void method1401 () { }
+  void method1402 () { }
+  void method1403 () { }
+  void method1404 () { }
+  void method1405 () { }
+  void method1406 () { }
+  void method1407 () { }
+  void method1408 () { }
+  void method1409 () { }
+  void method1410 () { }
+  void method1411 () { }
+  void method1412 () { }
+  void method1413 () { }
+  void method1414 () { }
+  void method1415 () { }
+  void method1416 () { }
+  void method1417 () { }
+  void method1418 () { }
+  void method1419 () { }
+  void method1420 () { }
+  void method1421 () { }
+  void method1422 () { }
+  void method1423 () { }
+  void method1424 () { }
+  void method1425 () { }
+  void method1426 () { }
+  void method1427 () { }
+  void method1428 () { }
+  void method1429 () { }
+  void method1430 () { }
+  void method1431 () { }
+  void method1432 () { }
+  void method1433 () { }
+  void method1434 () { }
+  void method1435 () { }
+  void method1436 () { }
+  void method1437 () { }
+  void method1438 () { }
+  void method1439 () { }
+  void method1440 () { }
+  void method1441 () { }
+  void method1442 () { }
+  void method1443 () { }
+  void method1444 () { }
+  void method1445 () { }
+  void method1446 () { }
+  void method1447 () { }
+  void method1448 () { }
+  void method1449 () { }
+  void method1450 () { }
+  void method1451 () { }
+  void method1452 () { }
+  void method1453 () { }
+  void method1454 () { }
+  void method1455 () { }
+  void method1456 () { }
+  void method1457 () { }
+  void method1458 () { }
+  void method1459 () { }
+  void method1460 () { }
+  void method1461 () { }
+  void method1462 () { }
+  void method1463 () { }
+  void method1464 () { }
+  void method1465 () { }
+  void method1466 () { }
+  void method1467 () { }
+  void method1468 () { }
+  void method1469 () { }
+  void method1470 () { }
+  void method1471 () { }
+  void method1472 () { }
+  void method1473 () { }
+  void method1474 () { }
+  void method1475 () { }
+  void method1476 () { }
+  void method1477 () { }
+  void method1478 () { }
+  void method1479 () { }
+  void method1480 () { }
+  void method1481 () { }
+  void method1482 () { }
+  void method1483 () { }
+  void method1484 () { }
+  void method1485 () { }
+  void method1486 () { }
+  void method1487 () { }
+  void method1488 () { }
+  void method1489 () { }
+  void method1490 () { }
+  void method1491 () { }
+  void method1492 () { }
+  void method1493 () { }
+  void method1494 () { }
+  void method1495 () { }
+  void method1496 () { }
+  void method1497 () { }
+  void method1498 () { }
+  void method1499 () { }
+  void method1500 () { }
+  void method1501 () { }
+  void method1502 () { }
+  void method1503 () { }
+  void method1504 () { }
+  void method1505 () { }
+  void method1506 () { }
+  void method1507 () { }
+  void method1508 () { }
+  void method1509 () { }
+  void method1510 () { }
+  void method1511 () { }
+  void method1512 () { }
+  void method1513 () { }
+  void method1514 () { }
+  void method1515 () { }
+  void method1516 () { }
+  void method1517 () { }
+  void method1518 () { }
+  void method1519 () { }
+  void method1520 () { }
+  void method1521 () { }
+  void method1522 () { }
+  void method1523 () { }
+  void method1524 () { }
+  void method1525 () { }
+  void method1526 () { }
+  void method1527 () { }
+  void method1528 () { }
+  void method1529 () { }
+  void method1530 () { }
+  void method1531 () { }
+  void method1532 () { }
+  void method1533 () { }
+  void method1534 () { }
+  void method1535 () { }
+  void method1536 () { }
+  void method1537 () { }
+  void method1538 () { }
+  void method1539 () { }
+  void method1540 () { }
+  void method1541 () { }
+  void method1542 () { }
+  void method1543 () { }
+  void method1544 () { }
+  void method1545 () { }
+  void method1546 () { }
+  void method1547 () { }
+  void method1548 () { }
+  void method1549 () { }
+  void method1550 () { }
+  void method1551 () { }
+  void method1552 () { }
+  void method1553 () { }
+  void method1554 () { }
+  void method1555 () { }
+  void method1556 () { }
+  void method1557 () { }
+  void method1558 () { }
+  void method1559 () { }
+  void method1560 () { }
+  void method1561 () { }
+  void method1562 () { }
+  void method1563 () { }
+  void method1564 () { }
+  void method1565 () { }
+  void method1566 () { }
+  void method1567 () { }
+  void method1568 () { }
+  void method1569 () { }
+  void method1570 () { }
+  void method1571 () { }
+  void method1572 () { }
+  void method1573 () { }
+  void method1574 () { }
+  void method1575 () { }
+  void method1576 () { }
+  void method1577 () { }
+  void method1578 () { }
+  void method1579 () { }
+  void method1580 () { }
+  void method1581 () { }
+  void method1582 () { }
+  void method1583 () { }
+  void method1584 () { }
+  void method1585 () { }
+  void method1586 () { }
+  void method1587 () { }
+  void method1588 () { }
+  void method1589 () { }
+  void method1590 () { }
+  void method1591 () { }
+  void method1592 () { }
+  void method1593 () { }
+  void method1594 () { }
+  void method1595 () { }
+  void method1596 () { }
+  void method1597 () { }
+  void method1598 () { }
+  void method1599 () { }
+  void method1600 () { }
+  void method1601 () { }
+  void method1602 () { }
+  void method1603 () { }
+  void method1604 () { }
+  void method1605 () { }
+  void method1606 () { }
+  void method1607 () { }
+  void method1608 () { }
+  void method1609 () { }
+  void method1610 () { }
+  void method1611 () { }
+  void method1612 () { }
+  void method1613 () { }
+  void method1614 () { }
+  void method1615 () { }
+  void method1616 () { }
+  void method1617 () { }
+  void method1618 () { }
+  void method1619 () { }
+  void method1620 () { }
+  void method1621 () { }
+  void method1622 () { }
+  void method1623 () { }
+  void method1624 () { }
+  void method1625 () { }
+  void method1626 () { }
+  void method1627 () { }
+  void method1628 () { }
+  void method1629 () { }
+  void method1630 () { }
+  void method1631 () { }
+  void method1632 () { }
+  void method1633 () { }
+  void method1634 () { }
+  void method1635 () { }
+  void method1636 () { }
+  void method1637 () { }
+  void method1638 () { }
+  void method1639 () { }
+  void method1640 () { }
+  void method1641 () { }
+  void method1642 () { }
+  void method1643 () { }
+  void method1644 () { }
+  void method1645 () { }
+  void method1646 () { }
+  void method1647 () { }
+  void method1648 () { }
+  void method1649 () { }
+  void method1650 () { }
+  void method1651 () { }
+  void method1652 () { }
+  void method1653 () { }
+  void method1654 () { }
+  void method1655 () { }
+  void method1656 () { }
+  void method1657 () { }
+  void method1658 () { }
+  void method1659 () { }
+  void method1660 () { }
+  void method1661 () { }
+  void method1662 () { }
+  void method1663 () { }
+  void method1664 () { }
+  void method1665 () { }
+  void method1666 () { }
+  void method1667 () { }
+  void method1668 () { }
+  void method1669 () { }
+  void method1670 () { }
+  void method1671 () { }
+  void method1672 () { }
+  void method1673 () { }
+  void method1674 () { }
+  void method1675 () { }
+  void method1676 () { }
+  void method1677 () { }
+  void method1678 () { }
+  void method1679 () { }
+  void method1680 () { }
+  void method1681 () { }
+  void method1682 () { }
+  void method1683 () { }
+  void method1684 () { }
+  void method1685 () { }
+  void method1686 () { }
+  void method1687 () { }
+  void method1688 () { }
+  void method1689 () { }
+  void method1690 () { }
+  void method1691 () { }
+  void method1692 () { }
+  void method1693 () { }
+  void method1694 () { }
+  void method1695 () { }
+  void method1696 () { }
+  void method1697 () { }
+  void method1698 () { }
+  void method1699 () { }
+  void method1700 () { }
+  void method1701 () { }
+  void method1702 () { }
+  void method1703 () { }
+  void method1704 () { }
+  void method1705 () { }
+  void method1706 () { }
+  void method1707 () { }
+  void method1708 () { }
+  void method1709 () { }
+  void method1710 () { }
+  void method1711 () { }
+  void method1712 () { }
+  void method1713 () { }
+  void method1714 () { }
+  void method1715 () { }
+  void method1716 () { }
+  void method1717 () { }
+  void method1718 () { }
+  void method1719 () { }
+  void method1720 () { }
+  void method1721 () { }
+  void method1722 () { }
+  void method1723 () { }
+  void method1724 () { }
+  void method1725 () { }
+  void method1726 () { }
+  void method1727 () { }
+  void method1728 () { }
+  void method1729 () { }
+  void method1730 () { }
+  void method1731 () { }
+  void method1732 () { }
+  void method1733 () { }
+  void method1734 () { }
+  void method1735 () { }
+  void method1736 () { }
+  void method1737 () { }
+  void method1738 () { }
+  void method1739 () { }
+  void method1740 () { }
+  void method1741 () { }
+  void method1742 () { }
+  void method1743 () { }
+  void method1744 () { }
+  void method1745 () { }
+  void method1746 () { }
+  void method1747 () { }
+  void method1748 () { }
+  void method1749 () { }
+  void method1750 () { }
+  void method1751 () { }
+  void method1752 () { }
+  void method1753 () { }
+  void method1754 () { }
+  void method1755 () { }
+  void method1756 () { }
+  void method1757 () { }
+  void method1758 () { }
+  void method1759 () { }
+  void method1760 () { }
+  void method1761 () { }
+  void method1762 () { }
+  void method1763 () { }
+  void method1764 () { }
+  void method1765 () { }
+  void method1766 () { }
+  void method1767 () { }
+  void method1768 () { }
+  void method1769 () { }
+  void method1770 () { }
+  void method1771 () { }
+  void method1772 () { }
+  void method1773 () { }
+  void method1774 () { }
+  void method1775 () { }
+  void method1776 () { }
+  void method1777 () { }
+  void method1778 () { }
+  void method1779 () { }
+  void method1780 () { }
+  void method1781 () { }
+  void method1782 () { }
+  void method1783 () { }
+  void method1784 () { }
+  void method1785 () { }
+  void method1786 () { }
+  void method1787 () { }
+  void method1788 () { }
+  void method1789 () { }
+  void method1790 () { }
+  void method1791 () { }
+  void method1792 () { }
+  void method1793 () { }
+  void method1794 () { }
+  void method1795 () { }
+  void method1796 () { }
+  void method1797 () { }
+  void method1798 () { }
+  void method1799 () { }
+  void method1800 () { }
+  void method1801 () { }
+  void method1802 () { }
+  void method1803 () { }
+  void method1804 () { }
+  void method1805 () { }
+  void method1806 () { }
+  void method1807 () { }
+  void method1808 () { }
+  void method1809 () { }
+  void method1810 () { }
+  void method1811 () { }
+  void method1812 () { }
+  void method1813 () { }
+  void method1814 () { }
+  void method1815 () { }
+  void method1816 () { }
+  void method1817 () { }
+  void method1818 () { }
+  void method1819 () { }
+  void method1820 () { }
+  void method1821 () { }
+  void method1822 () { }
+  void method1823 () { }
+  void method1824 () { }
+  void method1825 () { }
+  void method1826 () { }
+  void method1827 () { }
+  void method1828 () { }
+  void method1829 () { }
+  void method1830 () { }
+  void method1831 () { }
+  void method1832 () { }
+  void method1833 () { }
+  void method1834 () { }
+  void method1835 () { }
+  void method1836 () { }
+  void method1837 () { }
+  void method1838 () { }
+  void method1839 () { }
+  void method1840 () { }
+  void method1841 () { }
+  void method1842 () { }
+  void method1843 () { }
+  void method1844 () { }
+  void method1845 () { }
+  void method1846 () { }
+  void method1847 () { }
+  void method1848 () { }
+  void method1849 () { }
+  void method1850 () { }
+  void method1851 () { }
+  void method1852 () { }
+  void method1853 () { }
+  void method1854 () { }
+  void method1855 () { }
+  void method1856 () { }
+  void method1857 () { }
+  void method1858 () { }
+  void method1859 () { }
+  void method1860 () { }
+  void method1861 () { }
+  void method1862 () { }
+  void method1863 () { }
+  void method1864 () { }
+  void method1865 () { }
+  void method1866 () { }
+  void method1867 () { }
+  void method1868 () { }
+  void method1869 () { }
+  void method1870 () { }
+  void method1871 () { }
+  void method1872 () { }
+  void method1873 () { }
+  void method1874 () { }
+  void method1875 () { }
+  void method1876 () { }
+  void method1877 () { }
+  void method1878 () { }
+  void method1879 () { }
+  void method1880 () { }
+  void method1881 () { }
+  void method1882 () { }
+  void method1883 () { }
+  void method1884 () { }
+  void method1885 () { }
+  void method1886 () { }
+  void method1887 () { }
+  void method1888 () { }
+  void method1889 () { }
+  void method1890 () { }
+  void method1891 () { }
+  void method1892 () { }
+  void method1893 () { }
+  void method1894 () { }
+  void method1895 () { }
+  void method1896 () { }
+  void method1897 () { }
+  void method1898 () { }
+  void method1899 () { }
+  void method1900 () { }
+  void method1901 () { }
+  void method1902 () { }
+  void method1903 () { }
+  void method1904 () { }
+  void method1905 () { }
+  void method1906 () { }
+  void method1907 () { }
+  void method1908 () { }
+  void method1909 () { }
+  void method1910 () { }
+  void method1911 () { }
+  void method1912 () { }
+  void method1913 () { }
+  void method1914 () { }
+  void method1915 () { }
+  void method1916 () { }
+  void method1917 () { }
+  void method1918 () { }
+  void method1919 () { }
+  void method1920 () { }
+  void method1921 () { }
+  void method1922 () { }
+  void method1923 () { }
+  void method1924 () { }
+  void method1925 () { }
+  void method1926 () { }
+  void method1927 () { }
+  void method1928 () { }
+  void method1929 () { }
+  void method1930 () { }
+  void method1931 () { }
+  void method1932 () { }
+  void method1933 () { }
+  void method1934 () { }
+  void method1935 () { }
+  void method1936 () { }
+  void method1937 () { }
+  void method1938 () { }
+  void method1939 () { }
+  void method1940 () { }
+  void method1941 () { }
+  void method1942 () { }
+  void method1943 () { }
+  void method1944 () { }
+  void method1945 () { }
+  void method1946 () { }
+  void method1947 () { }
+  void method1948 () { }
+  void method1949 () { }
+  void method1950 () { }
+  void method1951 () { }
+  void method1952 () { }
+  void method1953 () { }
+  void method1954 () { }
+  void method1955 () { }
+  void method1956 () { }
+  void method1957 () { }
+  void method1958 () { }
+  void method1959 () { }
+  void method1960 () { }
+  void method1961 () { }
+  void method1962 () { }
+  void method1963 () { }
+  void method1964 () { }
+  void method1965 () { }
+  void method1966 () { }
+  void method1967 () { }
+  void method1968 () { }
+  void method1969 () { }
+  void method1970 () { }
+  void method1971 () { }
+  void method1972 () { }
+  void method1973 () { }
+  void method1974 () { }
+  void method1975 () { }
+  void method1976 () { }
+  void method1977 () { }
+  void method1978 () { }
+  void method1979 () { }
+  void method1980 () { }
+  void method1981 () { }
+  void method1982 () { }
+  void method1983 () { }
+  void method1984 () { }
+  void method1985 () { }
+  void method1986 () { }
+  void method1987 () { }
+  void method1988 () { }
+  void method1989 () { }
+  void method1990 () { }
+  void method1991 () { }
+  void method1992 () { }
+  void method1993 () { }
+  void method1994 () { }
+  void method1995 () { }
+  void method1996 () { }
+  void method1997 () { }
+  void method1998 () { }
+  void method1999 () { }
+  void method2000 () { }
+  void method2001 () { }
+  void method2002 () { }
+  void method2003 () { }
+  void method2004 () { }
+  void method2005 () { }
+  void method2006 () { }
+  void method2007 () { }
+  void method2008 () { }
+  void method2009 () { }
+  void method2010 () { }
+  void method2011 () { }
+  void method2012 () { }
+  void method2013 () { }
+  void method2014 () { }
+  void method2015 () { }
+  void method2016 () { }
+  void method2017 () { }
+  void method2018 () { }
+  void method2019 () { }
+  void method2020 () { }
+  void method2021 () { }
+  void method2022 () { }
+  void method2023 () { }
+  void method2024 () { }
+  void method2025 () { }
+  void method2026 () { }
+  void method2027 () { }
+  void method2028 () { }
+  void method2029 () { }
+  void method2030 () { }
+  void method2031 () { }
+  void method2032 () { }
+  void method2033 () { }
+  void method2034 () { }
+  void method2035 () { }
+  void method2036 () { }
+  void method2037 () { }
+  void method2038 () { }
+  void method2039 () { }
+  void method2040 () { }
+  void method2041 () { }
+  void method2042 () { }
+  void method2043 () { }
+  void method2044 () { }
+  void method2045 () { }
+  void method2046 () { }
+  void method2047 () { }
+  void method2048 () { }
+  void method2049 () { }
+  void method2050 () { }
+  void method2051 () { }
+  void method2052 () { }
+  void method2053 () { }
+  void method2054 () { }
+  void method2055 () { }
+  void method2056 () { }
+  void method2057 () { }
+  void method2058 () { }
+  void method2059 () { }
+  void method2060 () { }
+  void method2061 () { }
+  void method2062 () { }
+  void method2063 () { }
+  void method2064 () { }
+  void method2065 () { }
+  void method2066 () { }
+  void method2067 () { }
+  void method2068 () { }
+  void method2069 () { }
+  void method2070 () { }
+  void method2071 () { }
+  void method2072 () { }
+  void method2073 () { }
+  void method2074 () { }
+  void method2075 () { }
+  void method2076 () { }
+  void method2077 () { }
+  void method2078 () { }
+  void method2079 () { }
+  void method2080 () { }
+  void method2081 () { }
+  void method2082 () { }
+  void method2083 () { }
+  void method2084 () { }
+  void method2085 () { }
+  void method2086 () { }
+  void method2087 () { }
+  void method2088 () { }
+  void method2089 () { }
+  void method2090 () { }
+  void method2091 () { }
+  void method2092 () { }
+  void method2093 () { }
+  void method2094 () { }
+  void method2095 () { }
+  void method2096 () { }
+  void method2097 () { }
+  void method2098 () { }
+  void method2099 () { }
+  void method2100 () { }
+  void method2101 () { }
+  void method2102 () { }
+  void method2103 () { }
+  void method2104 () { }
+  void method2105 () { }
+  void method2106 () { }
+  void method2107 () { }
+  void method2108 () { }
+  void method2109 () { }
+  void method2110 () { }
+  void method2111 () { }
+  void method2112 () { }
+  void method2113 () { }
+  void method2114 () { }
+  void method2115 () { }
+  void method2116 () { }
+  void method2117 () { }
+  void method2118 () { }
+  void method2119 () { }
+  void method2120 () { }
+  void method2121 () { }
+  void method2122 () { }
+  void method2123 () { }
+  void method2124 () { }
+  void method2125 () { }
+  void method2126 () { }
+  void method2127 () { }
+  void method2128 () { }
+  void method2129 () { }
+  void method2130 () { }
+  void method2131 () { }
+  void method2132 () { }
+  void method2133 () { }
+  void method2134 () { }
+  void method2135 () { }
+  void method2136 () { }
+  void method2137 () { }
+  void method2138 () { }
+  void method2139 () { }
+  void method2140 () { }
+  void method2141 () { }
+  void method2142 () { }
+  void method2143 () { }
+  void method2144 () { }
+  void method2145 () { }
+  void method2146 () { }
+  void method2147 () { }
+  void method2148 () { }
+  void method2149 () { }
+  void method2150 () { }
+  void method2151 () { }
+  void method2152 () { }
+  void method2153 () { }
+  void method2154 () { }
+  void method2155 () { }
+  void method2156 () { }
+  void method2157 () { }
+  void method2158 () { }
+  void method2159 () { }
+  void method2160 () { }
+  void method2161 () { }
+  void method2162 () { }
+  void method2163 () { }
+  void method2164 () { }
+  void method2165 () { }
+  void method2166 () { }
+  void method2167 () { }
+  void method2168 () { }
+  void method2169 () { }
+  void method2170 () { }
+  void method2171 () { }
+  void method2172 () { }
+  void method2173 () { }
+  void method2174 () { }
+  void method2175 () { }
+  void method2176 () { }
+  void method2177 () { }
+  void method2178 () { }
+  void method2179 () { }
+  void method2180 () { }
+  void method2181 () { }
+  void method2182 () { }
+  void method2183 () { }
+  void method2184 () { }
+  void method2185 () { }
+  void method2186 () { }
+  void method2187 () { }
+  void method2188 () { }
+  void method2189 () { }
+  void method2190 () { }
+  void method2191 () { }
+  void method2192 () { }
+  void method2193 () { }
+  void method2194 () { }
+  void method2195 () { }
+  void method2196 () { }
+  void method2197 () { }
+  void method2198 () { }
+  void method2199 () { }
+  void method2200 () { }
+  void method2201 () { }
+  void method2202 () { }
+  void method2203 () { }
+  void method2204 () { }
+  void method2205 () { }
+  void method2206 () { }
+  void method2207 () { }
+  void method2208 () { }
+  void method2209 () { }
+  void method2210 () { }
+  void method2211 () { }
+  void method2212 () { }
+  void method2213 () { }
+  void method2214 () { }
+  void method2215 () { }
+  void method2216 () { }
+  void method2217 () { }
+  void method2218 () { }
+  void method2219 () { }
+  void method2220 () { }
+  void method2221 () { }
+  void method2222 () { }
+  void method2223 () { }
+  void method2224 () { }
+  void method2225 () { }
+  void method2226 () { }
+  void method2227 () { }
+  void method2228 () { }
+  void method2229 () { }
+  void method2230 () { }
+  void method2231 () { }
+  void method2232 () { }
+  void method2233 () { }
+  void method2234 () { }
+  void method2235 () { }
+  void method2236 () { }
+  void method2237 () { }
+  void method2238 () { }
+  void method2239 () { }
+  void method2240 () { }
+  void method2241 () { }
+  void method2242 () { }
+  void method2243 () { }
+  void method2244 () { }
+  void method2245 () { }
+  void method2246 () { }
+  void method2247 () { }
+  void method2248 () { }
+  void method2249 () { }
+  void method2250 () { }
+  void method2251 () { }
+  void method2252 () { }
+  void method2253 () { }
+  void method2254 () { }
+  void method2255 () { }
+  void method2256 () { }
+  void method2257 () { }
+  void method2258 () { }
+  void method2259 () { }
+  void method2260 () { }
+  void method2261 () { }
+  void method2262 () { }
+  void method2263 () { }
+  void method2264 () { }
+  void method2265 () { }
+  void method2266 () { }
+  void method2267 () { }
+  void method2268 () { }
+  void method2269 () { }
+  void method2270 () { }
+  void method2271 () { }
+  void method2272 () { }
+  void method2273 () { }
+  void method2274 () { }
+  void method2275 () { }
+  void method2276 () { }
+  void method2277 () { }
+  void method2278 () { }
+  void method2279 () { }
+  void method2280 () { }
+  void method2281 () { }
+  void method2282 () { }
+  void method2283 () { }
+  void method2284 () { }
+  void method2285 () { }
+  void method2286 () { }
+  void method2287 () { }
+  void method2288 () { }
+  void method2289 () { }
+  void method2290 () { }
+  void method2291 () { }
+  void method2292 () { }
+  void method2293 () { }
+  void method2294 () { }
+  void method2295 () { }
+  void method2296 () { }
+  void method2297 () { }
+  void method2298 () { }
+  void method2299 () { }
+  void method2300 () { }
+  void method2301 () { }
+  void method2302 () { }
+  void method2303 () { }
+  void method2304 () { }
+  void method2305 () { }
+  void method2306 () { }
+  void method2307 () { }
+  void method2308 () { }
+  void method2309 () { }
+  void method2310 () { }
+  void method2311 () { }
+  void method2312 () { }
+  void method2313 () { }
+  void method2314 () { }
+  void method2315 () { }
+  void method2316 () { }
+  void method2317 () { }
+  void method2318 () { }
+  void method2319 () { }
+  void method2320 () { }
+  void method2321 () { }
+  void method2322 () { }
+  void method2323 () { }
+  void method2324 () { }
+  void method2325 () { }
+  void method2326 () { }
+  void method2327 () { }
+  void method2328 () { }
+  void method2329 () { }
+  void method2330 () { }
+  void method2331 () { }
+  void method2332 () { }
+  void method2333 () { }
+  void method2334 () { }
+  void method2335 () { }
+  void method2336 () { }
+  void method2337 () { }
+  void method2338 () { }
+  void method2339 () { }
+  void method2340 () { }
+  void method2341 () { }
+  void method2342 () { }
+  void method2343 () { }
+  void method2344 () { }
+  void method2345 () { }
+  void method2346 () { }
+  void method2347 () { }
+  void method2348 () { }
+  void method2349 () { }
+  void method2350 () { }
+  void method2351 () { }
+  void method2352 () { }
+  void method2353 () { }
+  void method2354 () { }
+  void method2355 () { }
+  void method2356 () { }
+  void method2357 () { }
+  void method2358 () { }
+  void method2359 () { }
+  void method2360 () { }
+  void method2361 () { }
+  void method2362 () { }
+  void method2363 () { }
+  void method2364 () { }
+  void method2365 () { }
+  void method2366 () { }
+  void method2367 () { }
+  void method2368 () { }
+  void method2369 () { }
+  void method2370 () { }
+  void method2371 () { }
+  void method2372 () { }
+  void method2373 () { }
+  void method2374 () { }
+  void method2375 () { }
+  void method2376 () { }
+  void method2377 () { }
+  void method2378 () { }
+  void method2379 () { }
+  void method2380 () { }
+  void method2381 () { }
+  void method2382 () { }
+  void method2383 () { }
+  void method2384 () { }
+  void method2385 () { }
+  void method2386 () { }
+  void method2387 () { }
+  void method2388 () { }
+  void method2389 () { }
+  void method2390 () { }
+  void method2391 () { }
+  void method2392 () { }
+  void method2393 () { }
+  void method2394 () { }
+  void method2395 () { }
+  void method2396 () { }
+  void method2397 () { }
+  void method2398 () { }
+  void method2399 () { }
+  void method2400 () { }
+  void method2401 () { }
+  void method2402 () { }
+  void method2403 () { }
+  void method2404 () { }
+  void method2405 () { }
+  void method2406 () { }
+  void method2407 () { }
+  void method2408 () { }
+  void method2409 () { }
+  void method2410 () { }
+  void method2411 () { }
+  void method2412 () { }
+  void method2413 () { }
+  void method2414 () { }
+  void method2415 () { }
+  void method2416 () { }
+  void method2417 () { }
+  void method2418 () { }
+  void method2419 () { }
+  void method2420 () { }
+  void method2421 () { }
+  void method2422 () { }
+  void method2423 () { }
+  void method2424 () { }
+  void method2425 () { }
+  void method2426 () { }
+  void method2427 () { }
+  void method2428 () { }
+  void method2429 () { }
+  void method2430 () { }
+  void method2431 () { }
+  void method2432 () { }
+  void method2433 () { }
+  void method2434 () { }
+  void method2435 () { }
+  void method2436 () { }
+  void method2437 () { }
+  void method2438 () { }
+  void method2439 () { }
+  void method2440 () { }
+  void method2441 () { }
+  void method2442 () { }
+  void method2443 () { }
+  void method2444 () { }
+  void method2445 () { }
+  void method2446 () { }
+  void method2447 () { }
+  void method2448 () { }
+  void method2449 () { }
+  void method2450 () { }
+  void method2451 () { }
+  void method2452 () { }
+  void method2453 () { }
+  void method2454 () { }
+  void method2455 () { }
+  void method2456 () { }
+  void method2457 () { }
+  void method2458 () { }
+  void method2459 () { }
+  void method2460 () { }
+  void method2461 () { }
+  void method2462 () { }
+  void method2463 () { }
+  void method2464 () { }
+  void method2465 () { }
+  void method2466 () { }
+  void method2467 () { }
+  void method2468 () { }
+  void method2469 () { }
+  void method2470 () { }
+  void method2471 () { }
+  void method2472 () { }
+  void method2473 () { }
+  void method2474 () { }
+  void method2475 () { }
+  void method2476 () { }
+  void method2477 () { }
+  void method2478 () { }
+  void method2479 () { }
+  void method2480 () { }
+  void method2481 () { }
+  void method2482 () { }
+  void method2483 () { }
+  void method2484 () { }
+  void method2485 () { }
+  void method2486 () { }
+  void method2487 () { }
+  void method2488 () { }
+  void method2489 () { }
+  void method2490 () { }
+  void method2491 () { }
+  void method2492 () { }
+  void method2493 () { }
+  void method2494 () { }
+  void method2495 () { }
+  void method2496 () { }
+  void method2497 () { }
+  void method2498 () { }
+  void method2499 () { }
+  void method2500 () { }
+  void method2501 () { }
+  void method2502 () { }
+  void method2503 () { }
+  void method2504 () { }
+  void method2505 () { }
+  void method2506 () { }
+  void method2507 () { }
+  void method2508 () { }
+  void method2509 () { }
+  void method2510 () { }
+  void method2511 () { }
+  void method2512 () { }
+  void method2513 () { }
+  void method2514 () { }
+  void method2515 () { }
+  void method2516 () { }
+  void method2517 () { }
+  void method2518 () { }
+  void method2519 () { }
+  void method2520 () { }
+  void method2521 () { }
+  void method2522 () { }
+  void method2523 () { }
+  void method2524 () { }
+  void method2525 () { }
+  void method2526 () { }
+  void method2527 () { }
+  void method2528 () { }
+  void method2529 () { }
+  void method2530 () { }
+  void method2531 () { }
+  void method2532 () { }
+  void method2533 () { }
+  void method2534 () { }
+  void method2535 () { }
+  void method2536 () { }
+  void method2537 () { }
+  void method2538 () { }
+  void method2539 () { }
+  void method2540 () { }
+  void method2541 () { }
+  void method2542 () { }
+  void method2543 () { }
+  void method2544 () { }
+  void method2545 () { }
+  void method2546 () { }
+  void method2547 () { }
+  void method2548 () { }
+  void method2549 () { }
+  void method2550 () { }
+  void method2551 () { }
+  void method2552 () { }
+  void method2553 () { }
+  void method2554 () { }
+  void method2555 () { }
+  void method2556 () { }
+  void method2557 () { }
+  void method2558 () { }
+  void method2559 () { }
+  void method2560 () { }
+  void method2561 () { }
+  void method2562 () { }
+  void method2563 () { }
+  void method2564 () { }
+  void method2565 () { }
+  void method2566 () { }
+  void method2567 () { }
+  void method2568 () { }
+  void method2569 () { }
+  void method2570 () { }
+  void method2571 () { }
+  void method2572 () { }
+  void method2573 () { }
+  void method2574 () { }
+  void method2575 () { }
+  void method2576 () { }
+  void method2577 () { }
+  void method2578 () { }
+  void method2579 () { }
+  void method2580 () { }
+  void method2581 () { }
+  void method2582 () { }
+  void method2583 () { }
+  void method2584 () { }
+  void method2585 () { }
+  void method2586 () { }
+  void method2587 () { }
+  void method2588 () { }
+  void method2589 () { }
+  void method2590 () { }
+  void method2591 () { }
+  void method2592 () { }
+  void method2593 () { }
+  void method2594 () { }
+  void method2595 () { }
+  void method2596 () { }
+  void method2597 () { }
+  void method2598 () { }
+  void method2599 () { }
+  void method2600 () { }
+  void method2601 () { }
+  void method2602 () { }
+  void method2603 () { }
+  void method2604 () { }
+  void method2605 () { }
+  void method2606 () { }
+  void method2607 () { }
+  void method2608 () { }
+  void method2609 () { }
+  void method2610 () { }
+  void method2611 () { }
+  void method2612 () { }
+  void method2613 () { }
+  void method2614 () { }
+  void method2615 () { }
+  void method2616 () { }
+  void method2617 () { }
+  void method2618 () { }
+  void method2619 () { }
+  void method2620 () { }
+  void method2621 () { }
+  void method2622 () { }
+  void method2623 () { }
+  void method2624 () { }
+  void method2625 () { }
+  void method2626 () { }
+  void method2627 () { }
+  void method2628 () { }
+  void method2629 () { }
+  void method2630 () { }
+  void method2631 () { }
+  void method2632 () { }
+  void method2633 () { }
+  void method2634 () { }
+  void method2635 () { }
+  void method2636 () { }
+  void method2637 () { }
+  void method2638 () { }
+  void method2639 () { }
+  void method2640 () { }
+  void method2641 () { }
+  void method2642 () { }
+  void method2643 () { }
+  void method2644 () { }
+  void method2645 () { }
+  void method2646 () { }
+  void method2647 () { }
+  void method2648 () { }
+  void method2649 () { }
+  void method2650 () { }
+  void method2651 () { }
+  void method2652 () { }
+  void method2653 () { }
+  void method2654 () { }
+  void method2655 () { }
+  void method2656 () { }
+  void method2657 () { }
+  void method2658 () { }
+  void method2659 () { }
+  void method2660 () { }
+  void method2661 () { }
+  void method2662 () { }
+  void method2663 () { }
+  void method2664 () { }
+  void method2665 () { }
+  void method2666 () { }
+  void method2667 () { }
+  void method2668 () { }
+  void method2669 () { }
+  void method2670 () { }
+  void method2671 () { }
+  void method2672 () { }
+  void method2673 () { }
+  void method2674 () { }
+  void method2675 () { }
+  void method2676 () { }
+  void method2677 () { }
+  void method2678 () { }
+  void method2679 () { }
+  void method2680 () { }
+  void method2681 () { }
+  void method2682 () { }
+  void method2683 () { }
+  void method2684 () { }
+  void method2685 () { }
+  void method2686 () { }
+  void method2687 () { }
+  void method2688 () { }
+  void method2689 () { }
+  void method2690 () { }
+  void method2691 () { }
+  void method2692 () { }
+  void method2693 () { }
+  void method2694 () { }
+  void method2695 () { }
+  void method2696 () { }
+  void method2697 () { }
+  void method2698 () { }
+  void method2699 () { }
+  void method2700 () { }
+  void method2701 () { }
+  void method2702 () { }
+  void method2703 () { }
+  void method2704 () { }
+  void method2705 () { }
+  void method2706 () { }
+  void method2707 () { }
+  void method2708 () { }
+  void method2709 () { }
+  void method2710 () { }
+  void method2711 () { }
+  void method2712 () { }
+  void method2713 () { }
+  void method2714 () { }
+  void method2715 () { }
+  void method2716 () { }
+  void method2717 () { }
+  void method2718 () { }
+  void method2719 () { }
+  void method2720 () { }
+  void method2721 () { }
+  void method2722 () { }
+  void method2723 () { }
+  void method2724 () { }
+  void method2725 () { }
+  void method2726 () { }
+  void method2727 () { }
+  void method2728 () { }
+  void method2729 () { }
+  void method2730 () { }
+  void method2731 () { }
+  void method2732 () { }
+  void method2733 () { }
+  void method2734 () { }
+  void method2735 () { }
+  void method2736 () { }
+  void method2737 () { }
+  void method2738 () { }
+  void method2739 () { }
+  void method2740 () { }
+  void method2741 () { }
+  void method2742 () { }
+  void method2743 () { }
+  void method2744 () { }
+  void method2745 () { }
+  void method2746 () { }
+  void method2747 () { }
+  void method2748 () { }
+  void method2749 () { }
+  void method2750 () { }
+  void method2751 () { }
+  void method2752 () { }
+  void method2753 () { }
+  void method2754 () { }
+  void method2755 () { }
+  void method2756 () { }
+  void method2757 () { }
+  void method2758 () { }
+  void method2759 () { }
+  void method2760 () { }
+  void method2761 () { }
+  void method2762 () { }
+  void method2763 () { }
+  void method2764 () { }
+  void method2765 () { }
+  void method2766 () { }
+  void method2767 () { }
+  void method2768 () { }
+  void method2769 () { }
+  void method2770 () { }
+  void method2771 () { }
+  void method2772 () { }
+  void method2773 () { }
+  void method2774 () { }
+  void method2775 () { }
+  void method2776 () { }
+  void method2777 () { }
+  void method2778 () { }
+  void method2779 () { }
+  void method2780 () { }
+  void method2781 () { }
+  void method2782 () { }
+  void method2783 () { }
+  void method2784 () { }
+  void method2785 () { }
+  void method2786 () { }
+  void method2787 () { }
+  void method2788 () { }
+  void method2789 () { }
+  void method2790 () { }
+  void method2791 () { }
+  void method2792 () { }
+  void method2793 () { }
+  void method2794 () { }
+  void method2795 () { }
+  void method2796 () { }
+  void method2797 () { }
+  void method2798 () { }
+  void method2799 () { }
+  void method2800 () { }
+  void method2801 () { }
+  void method2802 () { }
+  void method2803 () { }
+  void method2804 () { }
+  void method2805 () { }
+  void method2806 () { }
+  void method2807 () { }
+  void method2808 () { }
+  void method2809 () { }
+  void method2810 () { }
+  void method2811 () { }
+  void method2812 () { }
+  void method2813 () { }
+  void method2814 () { }
+  void method2815 () { }
+  void method2816 () { }
+  void method2817 () { }
+  void method2818 () { }
+  void method2819 () { }
+  void method2820 () { }
+  void method2821 () { }
+  void method2822 () { }
+  void method2823 () { }
+  void method2824 () { }
+  void method2825 () { }
+  void method2826 () { }
+  void method2827 () { }
+  void method2828 () { }
+  void method2829 () { }
+  void method2830 () { }
+  void method2831 () { }
+  void method2832 () { }
+  void method2833 () { }
+  void method2834 () { }
+  void method2835 () { }
+  void method2836 () { }
+  void method2837 () { }
+  void method2838 () { }
+  void method2839 () { }
+  void method2840 () { }
+  void method2841 () { }
+  void method2842 () { }
+  void method2843 () { }
+  void method2844 () { }
+  void method2845 () { }
+  void method2846 () { }
+  void method2847 () { }
+  void method2848 () { }
+  void method2849 () { }
+  void method2850 () { }
+  void method2851 () { }
+  void method2852 () { }
+  void method2853 () { }
+  void method2854 () { }
+  void method2855 () { }
+  void method2856 () { }
+  void method2857 () { }
+  void method2858 () { }
+  void method2859 () { }
+  void method2860 () { }
+  void method2861 () { }
+  void method2862 () { }
+  void method2863 () { }
+  void method2864 () { }
+  void method2865 () { }
+  void method2866 () { }
+  void method2867 () { }
+  void method2868 () { }
+  void method2869 () { }
+  void method2870 () { }
+  void method2871 () { }
+  void method2872 () { }
+  void method2873 () { }
+  void method2874 () { }
+  void method2875 () { }
+  void method2876 () { }
+  void method2877 () { }
+  void method2878 () { }
+  void method2879 () { }
+  void method2880 () { }
+  void method2881 () { }
+  void method2882 () { }
+  void method2883 () { }
+  void method2884 () { }
+  void method2885 () { }
+  void method2886 () { }
+  void method2887 () { }
+  void method2888 () { }
+  void method2889 () { }
+  void method2890 () { }
+  void method2891 () { }
+  void method2892 () { }
+  void method2893 () { }
+  void method2894 () { }
+  void method2895 () { }
+  void method2896 () { }
+  void method2897 () { }
+  void method2898 () { }
+  void method2899 () { }
+  void method2900 () { }
+  void method2901 () { }
+  void method2902 () { }
+  void method2903 () { }
+  void method2904 () { }
+  void method2905 () { }
+  void method2906 () { }
+  void method2907 () { }
+  void method2908 () { }
+  void method2909 () { }
+  void method2910 () { }
+  void method2911 () { }
+  void method2912 () { }
+  void method2913 () { }
+  void method2914 () { }
+  void method2915 () { }
+  void method2916 () { }
+  void method2917 () { }
+  void method2918 () { }
+  void method2919 () { }
+  void method2920 () { }
+  void method2921 () { }
+  void method2922 () { }
+  void method2923 () { }
+  void method2924 () { }
+  void method2925 () { }
+  void method2926 () { }
+  void method2927 () { }
+  void method2928 () { }
+  void method2929 () { }
+  void method2930 () { }
+  void method2931 () { }
+  void method2932 () { }
+  void method2933 () { }
+  void method2934 () { }
+  void method2935 () { }
+  void method2936 () { }
+  void method2937 () { }
+  void method2938 () { }
+  void method2939 () { }
+  void method2940 () { }
+  void method2941 () { }
+  void method2942 () { }
+  void method2943 () { }
+  void method2944 () { }
+  void method2945 () { }
+  void method2946 () { }
+  void method2947 () { }
+  void method2948 () { }
+  void method2949 () { }
+  void method2950 () { }
+  void method2951 () { }
+  void method2952 () { }
+  void method2953 () { }
+  void method2954 () { }
+  void method2955 () { }
+  void method2956 () { }
+  void method2957 () { }
+  void method2958 () { }
+  void method2959 () { }
+  void method2960 () { }
+  void method2961 () { }
+  void method2962 () { }
+  void method2963 () { }
+  void method2964 () { }
+  void method2965 () { }
+  void method2966 () { }
+  void method2967 () { }
+  void method2968 () { }
+  void method2969 () { }
+  void method2970 () { }
+  void method2971 () { }
+  void method2972 () { }
+  void method2973 () { }
+  void method2974 () { }
+  void method2975 () { }
+  void method2976 () { }
+  void method2977 () { }
+  void method2978 () { }
+  void method2979 () { }
+  void method2980 () { }
+  void method2981 () { }
+  void method2982 () { }
+  void method2983 () { }
+  void method2984 () { }
+  void method2985 () { }
+  void method2986 () { }
+  void method2987 () { }
+  void method2988 () { }
+  void method2989 () { }
+  void method2990 () { }
+  void method2991 () { }
+  void method2992 () { }
+  void method2993 () { }
+  void method2994 () { }
+  void method2995 () { }
+  void method2996 () { }
+  void method2997 () { }
+  void method2998 () { }
+  void method2999 () { }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/aThinlet.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/aThinlet.java
new file mode 100644
index 0000000..2a0e773
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/aThinlet.java
@@ -0,0 +1,5393 @@
+/*
+	Thinlet GUI toolkit - www.thinlet.com
+	Copyright (C) 2002 Robert Bajzat ([email protected])
+	
+	This library is free software; you can redistribute it and/or
+	modify it under the terms of the GNU Lesser General Public
+	License as published by the Free Software Foundation; either
+	version 2.1 of the License, or (at your option) any later version.
+	
+	This library is distributed in the hope that it will be useful,
+	but WITHOUT ANY WARRANTY; without even the implied warranty of
+	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+	Lesser General Public License for more details.
+	
+	You should have received a copy of the GNU Lesser General Public
+	License along with this library; if not, write to the Free Software
+	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*/
+
+//package thinlet; //java
+//midp package thinlet.midp;
+
+import java.applet.*; //java
+import java.awt.*; //java
+import java.awt.datatransfer.*; //java
+import java.awt.image.*; //java
+import java.awt.event.*; //java
+import java.lang.reflect.*; //java
+import java.io.*;
+import java.net.*; //java
+import java.util.*;
+//midp import javax.microedition.lcdui.*;
+//midp import javax.microedition.midlet.*;
+
+/**
+ *
+ */
+public class Thinlet extends Container //java
+	implements Runnable, Serializable { //java
+//midp public class Thinlet extends Canvas implements CommandListener {
+
+	//midp private static final Boolean TRUE = new Boolean(true);
+	//midp private static final Boolean FALSE = new Boolean(false);
+
+	//midp private transient Font font;
+	private transient Color c_bg;
+	private transient Color c_text;
+	private transient Color c_textbg;
+	private transient Color c_border;
+	private transient Color c_disable;
+	private transient Color c_hover;
+	private transient Color c_press;
+	private transient Color c_focus;
+	private transient Color c_select;
+	private transient Color c_ctrl = null; //java
+	//midp private transient Color c_ctrl;
+	private transient int block;
+	private transient Image gradient; //java
+	{
+		setFont(new Font("SansSerif", Font.PLAIN, 12)); //java
+		//midp setFont(Font.getDefaultFont());
+		setColors(0xe6e6e6, 0x000000, 0xffffff,
+			0x909090, 0xb0b0b0, 0xededed, 0xb9b9b9, 0x89899a, 0xc5c5dd); // f99237 eac16a // e68b2c ffc73c
+	}
+
+	private transient Thread timer;
+	private transient long watchdelay;
+	private transient long watch;
+	private transient String clipboard;
+
+	private Object content = createImpl("desktop");
+	private transient Object mouseinside;
+	private transient Object insidepart;
+	private transient Object mousepressed;
+	private transient Object pressedpart;
+	private transient int referencex, referencey;
+	private transient int mousex, mousey;
+	private transient Object focusowner;
+	private transient boolean focusinside; //midp { focusinside = true; }
+	private transient Object popupowner;
+	private transient Object tooltipowner;
+	//private transient int pressedkey;
+
+	//java>	
+	private static final int DRAG_ENTERED = AWTEvent.RESERVED_ID_MAX + 1;
+	private static final int DRAG_EXITED = AWTEvent.RESERVED_ID_MAX + 2;
+	
+	private static long WHEEL_MASK = 0;
+	private static int MOUSE_WHEEL = 0;
+	private static Method wheelrotation = null;
+	static {
+		try {
+			WHEEL_MASK = AWTEvent.class.getField("MOUSE_WHEEL_EVENT_MASK").getLong(null);
+			MOUSE_WHEEL = MouseEvent.class.getField("MOUSE_WHEEL").getInt(null);
+		} catch (Exception exc) { /* not 1.4 */ }
+	}
+	{
+		if (MOUSE_WHEEL != 0) { // disable global focus-manager for this component in 1.4
+			try {
+				getClass().getMethod("setFocusTraversalKeysEnabled", new Class[] { Boolean.TYPE }).
+					invoke(this, new Object[] { Boolean.FALSE });
+			} catch (Exception exc) { /* never */ }
+		}
+		enableEvents(AWTEvent.COMPONENT_EVENT_MASK |
+			AWTEvent.FOCUS_EVENT_MASK | AWTEvent.KEY_EVENT_MASK |
+			AWTEvent.MOUSE_EVENT_MASK | AWTEvent.MOUSE_MOTION_EVENT_MASK | WHEEL_MASK);
+	}
+	//<java
+
+	/**
+	 *
+	 */
+	public void setColors(int background, int text, int textbackground,
+			int border, int disable, int hover, int press,
+			int focus, int select) {
+		c_bg = new Color(background); c_text = new Color(text);
+		c_textbg = new Color(textbackground); c_border = new Color(border);
+		c_disable = new Color(disable); c_hover = new Color(hover);
+		c_press = new Color(press); c_focus = new Color(focus);
+		c_select = new Color(select);
+		//midp c_ctrl = c_hover;
+		//java>
+		int[] pix = new int[block * block];
+		int r1 = c_bg.getRed(); int r2 = c_press.getRed();
+		int g1 = c_bg.getGreen(); int g2 = c_press.getGreen();
+		int b1 = c_bg.getBlue(); int b2 = c_press.getBlue();
+		for (int i = 0; i < block; i++) {
+			int r = r1 - (r1 - r2) * i / block;
+			int g = g1 - (g1 - g2) * i / block;
+			int b = b1 - (b1 - b2) * i / block;
+			int color = (255 << 24) | (r << 16) | (g << 8) | b;
+			for (int j = 0; j < block; j++) {
+				pix[i * block + j] = color;
+				//pix[j * block + i] = color;
+			}
+		}
+		gradient = createImage(new MemoryImageSource(block, block, pix, 0, block));
+		//<java
+	}
+
+	/**
+	 *
+	 */
+	public void setFont(Font font) {
+		block = getFontMetrics(font).getHeight(); //java
+		super.setFont(font); //java
+		//midp block = font.getHeight();
+		//midp this.font = font;
+	}
+
+	/**
+	 *
+	 */
+	private void doLayout(Object component) {
+		String classname = getClass(component);
+		if ("combobox" == classname) {
+			if (getBoolean(component, "editable", true)) {
+				Image icon = getIcon(component, "icon", null);
+				layoutField(component, block, false,
+					(icon != null) ? icon.getWidth(this) : 0);
+			} // set editable -> validate (overwrite textfield repaint)
+			else {
+				int selected = getInteger(component, "selected", -1);
+				if (selected != -1) {
+					Object choice = getItem(component, "choice", selected);
+					set(component, "text", get(choice, "text"));
+					set(component, "icon", get(choice, "icon"));
+				}
+			}
+		}
+		else if (("textfield" == classname) || ("passwordfield" == classname)) {
+			layoutField(component, 0, ("passwordfield" == classname), 0);
+		}
+		else if ("textarea" == classname) {
+			String text = getString(component, "text", "");
+			int start = getInteger(component, "start", 0);
+			if (start > text.length()) { setInteger(component, "start", start = text.length(), 0); }
+			int end = getInteger(component, "end", 0);
+			if (end > text.length()) { setInteger(component, "end", end = text.length(), 0); }
+			int caretx = 0; int carety = 0;
+			FontMetrics fm = getFontMetrics(getFont()); //java
+			int width = 0, height = 0;
+			for (int i = 0, j = 0; j != -1; i = j + 1) {
+				j = text.indexOf('\n', i);
+				if (i != j) { // && i != text.length()
+					String line = (j != -1) ? text.substring(i, j) : text.substring(i); //java
+					width = Math.max(width, fm.stringWidth(line)); //java
+					//midp width = font.substringWidth(text, i, ((j != -1) ? j : text.length()) - i);
+				}
+				if ((end >= i) && ((j == -1) || (end <= j))) {
+					caretx = fm.stringWidth(text.substring(i, end)); //java
+					//midp caretx = font.substringWidth(text, i, end - i);
+					carety = height;
+				}
+				height += fm.getHeight();
+			}
+			layoutScrollPane(component, width + 2,
+				height - fm.getLeading() + 2, 0, 0);
+			scrollToVisible(component, caretx, carety,
+				2, fm.getAscent() + fm.getDescent() + 2);
+		} 
+		else if ("tabbedpane" == classname) {
+			Rectangle bounds = getRectangle(component, "bounds");
+			String placement = getString(component, "placement", "top");
+			boolean horizontal = ((placement == "top") || (placement == "bottom"));
+			int tabd = 0;
+			int tabsize = 0;
+			for (Object comp = get(component, "tab");
+					comp != null; comp = get(comp, ":next")) {
+				Dimension d = getSize(comp, 8, 4, "left");
+				setRectangle(comp, "bounds",
+					horizontal ? tabd : 0, horizontal ? 0 : tabd, d.width, d.height);
+				tabd += horizontal ? d.width : d.height;
+				tabsize = Math.max(tabsize, horizontal ? d.height : d.width);
+			}
+			for (Object comp = get(component, "tab");
+					comp != null; comp = get(comp, ":next")) {
+				Rectangle r = getRectangle(comp, "bounds");
+				if (horizontal) {
+					if (placement == "bottom") { r.y = bounds.height - tabsize; }
+					r.height = tabsize;
+				} else {
+					if (placement == "right") { r.x = bounds.width - tabsize; }
+					r.width = tabsize;
+				}
+			}
+			int cx = (placement == "left") ? (tabsize + 1) : 2;
+			int cy = (placement == "top") ? (tabsize + 1) : 2;
+			int cwidth = bounds.width - (horizontal ? 4 : (tabsize + 3));
+			int cheight = bounds.height - (horizontal ? (tabsize + 3) : 4);
+			for (Object comp = get(component, "component");
+					comp != null; comp = get(comp, ":next")) {
+				if (!getBoolean(comp, "visible", true)) { continue; }
+				setRectangle(comp, "bounds", cx, cy, cwidth, cheight);
+				doLayout(comp);
+			}
+		}
+		else if (("panel" == classname) || (classname == "dialog")) {
+			int gap = getInteger(component, "gap", 0);
+			int[][] grid = getGrid(component, gap);
+			if (grid != null) {
+				int top = getInteger(component, "top", 0);
+				int left = getInteger(component, "left", 0);
+				int bottom = getInteger(component, "bottom", 0);
+				int right = getInteger(component, "right", 0);
+				if (classname == "dialog") {
+					int titleheight = getInteger(component, "titleheight", 0);
+					top += 4 + titleheight; left += 4; bottom += 4; right += 4;
+				}
+
+				Rectangle bounds = getRectangle(component, "bounds");
+				for (int i = 0; i < 2; i++) {
+					int d = ((i == 0) ? (bounds.width - left - right) :
+						(bounds.height - top - bottom)) -
+						getSum(grid[i], 0, grid[i].length, gap, false);
+					if (d != 0) {
+						int w = getSum(grid[2 + i], 0, grid[2 + i].length, 0, false);
+						if (w > 0) {
+							for (int j = 0; j < grid[i].length; j++) {
+								if (grid[2 + i][j] != 0) {
+									grid[i][j] += d * grid[2 + i][j] / w;
+								}
+							}
+						}
+					}
+				}
+
+				int i = 0;
+				for (Object comp = get(component, "component");
+						comp != null; comp = get(comp, ":next")) {
+					if (!getBoolean(comp, "visible", true)) { continue; }
+					int ix = left + getSum(grid[0], 0, grid[4][i], gap, true);
+					int iy = top + getSum(grid[1], 0, grid[5][i], gap, true);
+					int iwidth = getSum(grid[0], grid[4][i], grid[6][i], gap, false);
+					int iheight = getSum(grid[1], grid[5][i], grid[7][i], gap, false);
+					String halign = getString(comp, "halign", "fill");
+					String valign = getString(comp, "valign", "fill");
+					if ((halign != "fill") || (valign != "fill")) {
+						Dimension d = getPreferredSize(comp);
+						if (halign != "fill") {
+							int dw = Math.max(0, iwidth - d.width);
+							if (halign == "center") { ix += dw / 2; }
+								else if (halign == "right") { ix += dw; }
+							iwidth -= dw;
+						}
+						if (valign != "fill") {
+							int dh = Math.max(0, iheight - d.height);
+							if (valign == "center") { iy += dh / 2; }
+								else if (valign == "bottom") { iy += dh; }
+							iheight -= dh;
+						}
+					}
+					setRectangle(comp, "bounds", ix, iy, iwidth, iheight);
+					doLayout(comp);
+					i++;
+				}
+			}
+		}
+		else if ("desktop" == classname) {
+			Rectangle bounds = getRectangle(component, "bounds");
+			for (Object comp = get(component, "component");
+					comp != null; comp = get(comp, ":next")) {
+				String iclass = getClass(comp);
+				if (iclass == "dialog") {
+					Dimension d = getPreferredSize(comp);
+					if (get(comp, "bounds") == null)
+					setRectangle(comp, "bounds",
+						Math.max(0, (bounds.width - d.width) / 2),
+						Math.max(0, (bounds.height - d.height) / 2),
+						Math.min(d.width, bounds.width), Math.min(d.height, bounds.height));
+				} else if ((iclass == "combolist") || (iclass == "popupmenu")) {
+						iclass = iclass; //compiler bug
+				} else {
+					setRectangle(comp, "bounds", 0, 0, bounds.width, bounds.height);
+				}
+				doLayout(comp);
+			}
+		}
+		else if ("spinbox" == classname) {
+			layoutField(component, block, false, 0);
+		}
+		else if ("splitpane" == classname) {
+			Rectangle bounds = getRectangle(component, "bounds");
+			boolean horizontal = ("vertical" != get(component, "orientation"));
+			int divider = getInteger(component, "divider", -1);
+			int maxdiv = (horizontal ? bounds.width : bounds.height) - 5;
+
+			Object comp1 = get(component, "component");
+			boolean visible1 = (comp1 != null) && getBoolean(comp1, "visible", true);
+			if (divider == -1) {
+				int d1 = 0;
+				if (visible1) {
+					Dimension d = getPreferredSize(comp1);
+					d1 = horizontal ? d.width : d.height;
+				}
+				divider = Math.min(d1, maxdiv);
+				setInteger(component, "divider", divider, -1);
+			}
+			else if (divider > maxdiv) {
+				setInteger(component, "divider", divider = maxdiv, -1);
+			}
+
+			if (visible1) {
+				setRectangle(comp1, "bounds", 0, 0, horizontal ? divider : bounds.width,
+					horizontal ? bounds.height : divider);
+				doLayout(comp1);
+			}
+			Object comp2 = (comp1 != null) ? get(comp1, ":next") : null;
+			if ((comp2 != null) && getBoolean(comp2, "visible", true)) {
+				setRectangle(comp2, "bounds", horizontal ? (divider + 5) : 0,
+					horizontal ? 0 : (divider + 5),
+					horizontal ? (bounds.width - 5 - divider) : bounds.width,
+					horizontal ? bounds.height : (bounds.height - 5 - divider));
+				doLayout(comp2);
+			}
+		} 
+		else if (("list" == classname) ||
+				("table" == classname) || ("tree" == classname)) {
+			int width = 0;
+			int columnheight = 0;
+			if ("table" == classname) {
+				for (Object column = get(component, "column");
+						column != null; column = get(column, ":next")) {
+					width += getInteger(column, "width", 80);
+					Dimension d = getSize(column, 2, 2, "left");
+					columnheight = Math.max(columnheight, d.height);
+				}
+			}
+			String itemname = ("list" == classname) ? "item" :
+				(("table" == classname) ? "row" : "node");
+			int y = 0;
+			int level = 0;
+			for (Object item = get(component, itemname); item != null;) {
+				int x = 0;
+				int iwidth = 0; int iheight = 0;
+				if ("table" == classname) {
+					iwidth = width;
+					for (Object cell = get(item, "cell");
+							cell != null; cell = get(cell, ":next")) {
+						Dimension d = getSize(cell, 2, 3, "left");
+						iheight = Math.max(iheight, d.height);
+					}
+				}
+				else {
+					if ("tree" == classname) {
+						x = (level + 1) * block;
+					}
+					Dimension d = getSize(item, 2, 3, "left");
+					iwidth = d.width; iheight = d.height;
+					width = Math.max(width, x + d.width);
+				}
+				setRectangle(item, "bounds", x, y, iwidth, iheight);
+				y += iheight;
+				if ("tree" == classname) {
+					Object next = get(item, "node");
+					if ((next != null) && getBoolean(item, "expanded", true)) {
+						level++;
+					} else {
+						while (((next = get(item, ":next")) == null) && (level > 0)) {
+							item = getParent(item);
+							level--;
+						}
+					}
+					item = next;
+				} else {
+					item = get(item, ":next");
+				}
+			}
+			layoutScrollPane(component, width, y - 1, 0, columnheight);
+		}
+		else if ("menubar" == classname) { 
+			Rectangle bounds = getRectangle(component, "bounds");
+			int x = 0;
+			for (Object menu = get(component, "menu");
+					menu != null; menu = get(menu, ":next")) {
+				Dimension d = getSize(menu, 8, 4, "left");
+				setRectangle(menu, "bounds", x, 0, d.width, bounds.height);
+				x += d.width;
+			}
+		}
+		else if (("combolist" == classname) || ("popupmenu" == classname)) {
+			boolean combo = ("combolist" == classname);
+			int pw = 0; int ph = 0; int pxy = combo ? 0 : 1;
+			for (Object item = get(get(component, combo ? "combobox" : "menu"),
+					combo ? "choice" : "menu"); item != null; item = get(item, ":next")) {
+				String itemclass = combo ? null : getClass(item);
+				Dimension d = (itemclass == "separator") ? new Dimension(1, 1) :
+					getSize(item, 8 , 4, "left");
+				if (itemclass == "checkboxmenuitem") {
+					d.width = d.width + block + 3;
+					d.height = Math.max(block, d.height);
+				}
+				else if (itemclass == "menu") {
+					d.width += block;
+				}
+				setRectangle(item, "bounds", pxy, pxy + ph, d.width, d.height);
+				pw = Math.max(pw, d.width);
+				ph += d.height;
+			}
+			Rectangle r = getRectangle(component, "bounds");
+			r.width = pw + 2; r.height = ph + 2;
+			if (combo) {
+				Rectangle db = getRectangle(content, "bounds");
+				if (r.y + ph + 2 > db.height) {
+					r.width = pw + 2 + block;
+					r.height = db.height - r.y;
+				}
+				else {
+					r.height = Math.min(r.height, db.height - r.y);
+				}
+				r.width = Math.min(r.width, db.width - r.x);
+				layoutScrollPane(component, pw, ph, 0, 0);//~
+			}
+		}
+		//java>
+		else if ("bean" == classname) {
+				Rectangle r = getRectangle(component, "bounds");
+				((Component) get(component, "bean")).setBounds(r);
+		}
+		//<java
+	}
+
+	/**
+	 *
+	 */
+	private Object popup(Object component, Object classname) {
+		Object popup = null;
+		int px = 0; int py = 0;
+		if (("menubar" == classname) || ("popupmenu" == classname)) {
+			Object popupmenu = get(component, "popupmenu");
+			Object selected = get(component, "selected");
+			if (popupmenu != null) {
+				if (get(popupmenu, "menu") == selected) { return null; }
+				set(popupmenu, "selected", null);
+				set(popupmenu, "menu", null);
+				removeItemImpl(content, "component", popupmenu);
+				repaint(popupmenu);
+				set(popupmenu, ":parent", null);
+				set(component, "popupmenu", null);
+				if (mouseinside == popupmenu) {
+					findComponent(content, mousex, mousey);
+					handleMouseEvent(mousex, mousex, 1, false, false, false, //java
+						MouseEvent.MOUSE_ENTERED, mouseinside, insidepart); //java
+				}
+				popup(popupmenu, "popupmenu");
+			}
+			if ((selected == null) || (getClass(selected) != "menu")) { return null; }
+			popup = createImpl("popupmenu");
+			set(popup, "menu", selected);
+			set(component, "popupmenu", popup);
+
+			Rectangle bounds = getRectangle(selected, "bounds");
+			if ("menubar" == classname) {
+				px = bounds.x; py = bounds.y + bounds.height - 1;
+			} else {
+				px = bounds.x + getRectangle(component, "bounds").width - 4;
+				py = bounds.y;
+			}
+		}
+		else { //if ("combobox" == classname) {
+			popup = createImpl("combolist");
+			set(popup, "combobox", component);
+			set(component, "combolist", popup);
+
+			py = getRectangle(component, "bounds").height + 1;
+		}
+		if (("menubar" == classname) || ("combobox" == classname)) {
+			popupowner = component;
+		}
+		insertItem(content, "component", popup, 0);
+		set(popup, ":parent", content);
+		while (component != content) {
+			Rectangle r = getRectangle(component, "bounds");
+			px += r.x; py += r.y;
+			component = getParent(component);
+		}
+		setRectangle(popup, "bounds", px, py, 0, 0);
+		doLayout(popup); repaint(popup);
+		return popup;
+	}
+
+	/**
+	 *
+	 */
+	private void closeup(Object combobox, Object combolist, Object item) {
+		if ((item != null) && getBoolean(item, "enabled", true)) {
+			String text = getString(item, "text", "");
+			set(combobox, "text", text); // if editable
+			setInteger(combobox, "start", text.length(), 0);
+			setInteger(combobox, "end", 0, 0);
+			set(combobox, "icon", get(item, "icon"));
+			validate(combobox);
+			setInteger(combobox, "selected", getIndex(combobox, "choice", item), -1);
+			invoke(combobox, "action");
+		}
+		set(combolist, "combobox", null);
+		set(combobox, "combolist", null);
+		removeItemImpl(content, "component", combolist);
+		repaint(combolist);
+		set(combolist, ":parent", null);
+		popupowner = null;
+		if (mouseinside == combolist) {
+			findComponent(content, mousex, mousey);
+			handleMouseEvent(mousex, mousex, 1, false, false, false, //java
+				MouseEvent.MOUSE_ENTERED, mouseinside, insidepart); //java
+		}
+	}
+
+	/**
+	 *
+	 */
+	private void closeup(Object menubar) {
+		set(menubar, "selected", null);
+		popup(menubar, "menubar");
+		repaint(menubar); // , selected
+		popupowner = null;
+	}
+
+	/**
+	 *
+	 */
+	private void closeup() {
+		if (popupowner != null) {
+			String classname = getClass(popupowner);
+			if ("menubar" == classname) {
+				closeup(popupowner);
+			}
+			else if ("combobox" == classname) {
+				closeup(popupowner, get(popupowner, "combolist"), null);
+			}
+		}
+	}
+
+	/**
+	 *
+	 */
+	private void showTip() {
+		String text = null;
+		tooltipowner = null;
+		String classname = getClass(mouseinside);
+		if ((classname == "tabbedpane") || (classname == "menubar") || (classname == "popupmenu")) {
+			if (insidepart != null) {
+				text = getString(insidepart, "tooltip", null);
+			}
+		}
+		else if (classname == "combolist") {
+			if (insidepart instanceof Object[]) {
+				text = getString(insidepart, "tooltip", null);
+			}
+		}
+		//list table tree
+		if (text == null) { text = getString(mouseinside, "tooltip", null); }
+			else { tooltipowner = insidepart; }
+		if (text != null) {
+			FontMetrics fm = getFontMetrics(getFont());
+			int width = fm.stringWidth(text) + 4;
+			int height = fm.getAscent() + fm.getDescent() + 4;
+			if (tooltipowner == null) { tooltipowner = mouseinside; }
+			setRectangle(tooltipowner, "tooltipbounds", mousex + 10, mousey + 10, width, height);
+			repaint(mousex + 10, mousey + 10, width, height);
+		}
+	}
+
+	/**
+	 *
+	 */
+	private void hideTip() {
+		if (tooltipowner != null) {
+			Rectangle bounds = getRectangle(tooltipowner, "tooltipbounds");
+			set(tooltipowner, "tooltipbounds", null);
+			tooltipowner = null;
+			repaint(bounds.x, bounds.y, bounds.width, bounds.height);
+		}
+	}
+
+	/**
+	 *
+	 */
+	private void layoutField(Object component, int dw, boolean hidden, int left) {
+		int width = getRectangle(component, "bounds").width - left -dw;
+		String text = getString(component, "text", "");
+		int start = getInteger(component, "start", 0);
+		if (start > text.length()) { setInteger(component, "start", start = text.length(), 0); }
+		int end = getInteger(component, "end", 0);
+		if (end > text.length()) { setInteger(component, "end", end = text.length(), 0); }
+		int offset = getInteger(component, "offset", 0);
+		int off = offset;
+		FontMetrics fm = getFontMetrics(getFont());
+		int caret = hidden ? (fm.charWidth('*') * end) :
+			fm.stringWidth(text.substring(0, end)); //java
+			//midp font.substringWidth(text, 0, end);
+		if (off > caret) {
+			off = caret;
+		}
+		else if (off < caret - width + 4) {
+			off = caret - width + 4;
+		}
+		off = Math.max(0, Math.min(off, (hidden ? (fm.charWidth('*') *
+			text.length()) : fm.stringWidth(text)) - width + 4)); 
+		if (off != offset) {
+			setInteger(component, "offset", off, 0);
+		}
+	}
+
+	/**
+	 *
+	 */
+	private void layoutScrollPane(Object component,
+			int contentwidth, int contentheight, int rowwidth, int columnheight) {
+		Rectangle bounds = getRectangle(component, "bounds");
+		boolean hneed = false; boolean vneed = false;
+		if (contentwidth > bounds.width - rowwidth - 2) {
+			hneed = true;
+			vneed = (contentheight > bounds.height - columnheight - 2 - block);
+		}
+		if (vneed || (contentheight > bounds.height - columnheight - 2)) {
+			vneed = true;
+			hneed = hneed || (contentwidth > bounds.width - rowwidth - 2 - block);
+		}
+		int viewportwidth = bounds.width - rowwidth - (vneed ? block : 0);
+		int viewportheight = bounds.height - columnheight - (hneed ? block : 0);
+		setRectangle(component, ":port",
+			rowwidth, columnheight, viewportwidth, viewportheight); //?rowwidth
+
+		Rectangle view = getRectangle(component, ":view");
+		setRectangle(component, ":view",
+			(view != null) ? Math.max(0,
+				Math.min(view.x, contentwidth - viewportwidth + 2)) : 0,
+			(view != null) ? Math.max(0,
+				Math.min(view.y, contentheight - viewportheight + 2)) : 0,
+			Math.max(viewportwidth - 2, contentwidth),
+			Math.max(viewportheight - 2, contentheight));
+	}
+
+	/**
+	 *
+	 */
+	private void scrollToVisible(Object component,
+			int x, int y, int width, int height) {
+		Rectangle view = getRectangle(component, ":view");
+		Rectangle port = getRectangle(component, ":port");
+		int vx = Math.max(x + width - port.width + 2, Math.min(view.x, x));
+		int vy = Math.max(y + height - port.height + 2, Math.min(view.y, y));
+		if ((view.x != vx) || (view.y != vy)) {
+			repaint(component); // horizontal | vertical
+			view.x = vx; view.y = vy;
+		}
+	}
+	
+	/**
+	 *
+	 */
+	public Dimension getPreferredSize() {
+		return getPreferredSize(content);
+	}
+
+	/**
+	 *
+	 */
+	private Dimension getPreferredSize(Object component) {
+		int width = getInteger(component, "width", 0);
+		int height = getInteger(component, "height", 0);
+		if ((width > 0) && (height > 0)) {
+			return new Dimension(width, height);
+		}
+		String classname = getClass(component);
+		//System.out.println("classname: " + classname);
+		if ("label" == classname) {
+			return getSize(component, 0, 0, "left");
+		} 
+		if ("button" == classname) {
+			return getSize(component, 12, 6, "center");
+		} 
+		if ("checkbox" == classname) {
+			Dimension d = getSize(component, 0, 0, "left");
+			d.width = d.width + block + 3;
+			d.height = Math.max(block, d.height);
+			return d;
+		}
+		if ("combobox" == classname) {
+			if (getBoolean(component, "editable", true)) {
+				Dimension size = getFieldSize(component);
+				Image icon = getIcon(component, "icon", null);
+				if (icon != null) {
+					size.width += icon.getWidth(this);
+					size.height = Math.max(size.height, icon.getHeight(this) + 2);
+				}
+				size.width += block;
+				return size;
+			} else {
+				int selected = getInteger(component, "selected", -1);
+				return getSize((selected != -1) ?
+					getItemImpl(component, "choice", selected) :
+					get(component, "choice"), 4 + block, 4, "left");
+			}
+		}
+		if (("textfield" == classname) || ("passwordfield" == classname)) {
+			return getFieldSize(component);
+		}
+		if ("textarea" == classname) {
+			int columns = getInteger(component, "columns", 0);
+			int rows = getInteger(component, "rows", 0); // 'e' -> 'm' ?
+			FontMetrics fm = getFontMetrics(getFont()); //java
+			return new Dimension(
+				((columns > 0) ? (columns * fm.charWidth('e') + 2) : 76) + 2 + block,
+				((rows > 0) ? (rows * fm.getHeight() - fm.getLeading() + 2) : 76) + 2 + block);
+		}
+		if ("tabbedpane" == classname) {
+			String placement = getString(component, "placement", "top");
+			boolean horizontal = ((placement == "top") || (placement == "bottom"));
+			int tabsize = 0;	
+			int contentwidth = 0; int contentheight = 0;
+			for (Object comp = get(component, "tab");
+					comp != null; comp = get(comp, ":next")) {
+				Dimension d = getSize(comp, 8, 4, "left");
+				tabsize = Math.max(tabsize, horizontal ? d.height : d.width);
+			}
+			for (Object comp = get(component, "component");
+					comp != null; comp = get(comp, ":next")) {
+				if (!getBoolean(comp, "visible", true)) { continue; }
+				Dimension d = getPreferredSize(comp);
+				contentwidth = Math.max(contentwidth, d.width);
+				contentheight = Math.max(contentheight, d.height);
+			}
+			return new Dimension(contentwidth + (horizontal ? 4 : (tabsize + 3)),
+				contentheight + (horizontal ? (tabsize + 3) : 4));
+		}
+		if (("panel" == classname) || (classname == "dialog")) {
+			Dimension size = new Dimension(
+				getInteger(component, "left", 0) + getInteger(component, "right", 0),
+				getInteger(component, "top", 0) + getInteger(component, "bottom", 0));
+			if (classname == "dialog") {
+				int titleheight = getSize(component, 0, 0, "left").height;
+				setInteger(component, "titleheight", titleheight, 0);
+				size.width += 8; size.height += 8 + titleheight;
+			}
+			int gap = getInteger(component, "gap", 0);
+			int[][] grid = getGrid(component, gap);
+			if (grid != null) {
+				size.width += getSum(grid[0], 0, grid[0].length, gap, false);
+				size.height += getSum(grid[1], 0, grid[1].length, gap, false);
+			}
+			return size;
+		}
+		else if ("desktop" == classname) {
+			Dimension size = new Dimension();
+			for (Object comp = get(component, "component");
+					comp != null; comp = get(comp, ":next")) {
+				String iclass = getClass(comp);
+				if ((iclass != "dialog") && (iclass != "popupmenu") &&
+						(iclass != "combolist")) {
+					Dimension d = getPreferredSize(comp);
+					size.width = Math.max(d.width, size.width);
+					size.height = Math.max(d.height, size.height);
+				}
+			}
+			return size;
+		}
+		if ("spinbox" == classname) {
+			Dimension size = getFieldSize(component);
+			size.width += block;
+			return size;
+		}
+		if ("progressbar" == classname) {
+			boolean horizontal = ("vertical" != get(component, "orientation"));
+			return new Dimension(horizontal ? 76 : 6, horizontal ? 6 : 76);
+		}
+		if ("slider" == classname) {
+			boolean horizontal = ("vertical" != get(component, "orientation"));
+			return new Dimension(horizontal ? 76 : 10, horizontal ? 10 : 76);
+		}
+		if ("splitpane" == classname) {
+			boolean horizontal = ("vertical" != get(component, "orientation"));
+			Object comp1 = get(component, "component");
+			Dimension size = ((comp1 == null) || !getBoolean(comp1, "visible", true)) ?
+				new Dimension() : getPreferredSize(comp1);
+			Object comp2 = get(comp1, ":next");
+			if ((comp2 != null) && getBoolean(comp2, "visible", true)) {
+				Dimension d = getPreferredSize(comp2);
+				size.width = horizontal ? (size.width + d.width) :
+					Math.max(size.width, d.width);
+				size.height = horizontal ? Math.max(size.height, d.height) :
+					(size.height + d.height);
+			}
+			if (horizontal) { size.width += 5; } else { size.height += 5; }
+			return size;
+		}
+		if (("list" == classname) ||
+				("table" == classname) || ("tree" == classname)) {
+			return new Dimension(76 + 2 + block, 76 + 2 + block);
+		}
+		if ("separator" == classname) {
+			return new Dimension(1, 1);
+		}
+		if ("menubar" == classname) { 
+			Dimension size = new Dimension(0, 0);
+			for (Object menu = get(component, "menu");
+					menu != null; menu = get(menu, ":next")) {
+				Dimension d = getSize(menu, 8, 4, "left");
+				size.width += d.width;
+				size.height = Math.max(size.height, d.height);
+			}
+			return size;
+		}
+		//java>
+		if ("bean" == classname) {
+				return ((Component) get(component, "bean")).getPreferredSize();
+		}
+		//<java
+		throw new IllegalArgumentException((String) classname);
+	}
+
+	/**
+	 *
+	 */
+	private int[][] getGrid(Object component, int gap) {
+		int count = 0;
+		for (Object comp = get(component, "component"); comp != null;
+				comp = get(comp, ":next")) {
+			if (getBoolean(comp, "visible", true)) { count++; }
+		}
+		if (count == 0) { return null; }
+		int columns = getInteger(component, "columns", 0);
+		int icols = (columns != 0) ? columns : count;
+		int irows = (columns != 0) ? ((count + columns - 1) / columns) : 1;
+		int[][] grid = {
+			new int[icols], new int[irows], // columnwidths, rowheights
+			new int[icols], new int[irows], // columnweights, rowweights
+			new int[count], new int[count], // gridx, gridy
+			new int[count], new int[count] }; // gridwidth, gridheight
+		int[] columnheight = new int[icols];
+		int[][] cache = null; // preferredwidth, height, columnweight, rowweight
+
+		int i = 0; int x = 0; int y = 0;
+		int nextsize = 0;
+		for (Object comp = get(component, "component");
+				comp != null; comp = get(comp, ":next")) {
+			if (!getBoolean(comp, "visible", true)) { continue; }
+			int colspan = ((columns != 0) && (columns < count)) ?
+				Math.min(getInteger(comp, "colspan", 1), columns) : 1;
+			int rowspan = (columns != 1) ? getInteger(comp, "rowspan", 1) : 1;
+			
+			for (int j = 0; j < colspan; j++) {
+				if ((columns != 0) && (x + colspan > columns)) {
+					x = 0; y++; j = -1;
+				}
+				else if (columnheight[x + j] > y) {
+					x += (j + 1); j = -1;
+				}
+			}
+			if (y + rowspan > grid[1].length) {
+				int[] rowheights = new int[y + rowspan];
+				System.arraycopy(grid[1], 0, rowheights, 0, grid[1].length);
+				grid[1] = rowheights;
+				int[] rowweights = new int[y + rowspan];
+				System.arraycopy(grid[3], 0, rowweights, 0, grid[3].length);
+				grid[3] = rowweights;
+			}
+			for (int j = 0; j < colspan; j++) {
+				columnheight[x + j] = y + rowspan;
+			}
+
+			int weightx = getInteger(comp, "weightx", 0);
+			int weighty = getInteger(comp, "weighty", 0);
+			Dimension d = getPreferredSize(comp);
+
+			if (colspan == 1) {
+				grid[0][x] = Math.max(grid[0][x], d.width); // columnwidths
+				grid[2][x] = Math.max(grid[2][x], weightx); // columnweights
+			}
+			else {
+				if (cache == null) { cache = new int[4][count]; }
+				cache[0][i] = d.width;
+				cache[2][i] = weightx;
+				if ((nextsize == 0) || (colspan < nextsize)) { nextsize = colspan; }
+			}
+			if (rowspan == 1) {
+				grid[1][y] = Math.max(grid[1][y], d.height); // rowheights 
+				grid[3][y] = Math.max(grid[3][y], weighty); // rowweights
+			}
+			else {
+				if (cache == null) { cache = new int[4][count]; }
+				cache[1][i] = d.height;
+				cache[3][i] = weighty;
+				if ((nextsize == 0) || (rowspan < nextsize)) { nextsize = rowspan; }
+			}
+			grid[4][i] = x; //gridx
+			grid[5][i] = y; //gridy
+			grid[6][i] = colspan; //gridwidth
+			grid[7][i] = rowspan; //gridheight
+			
+			x += colspan;
+			i++;
+		}
+
+		while (nextsize != 0) {
+			int size = nextsize; nextsize = 0;
+			for (int j = 0; j < 2; j++) { // horizontal, vertical
+				for (int k = 0; k < count; k++) {
+					if (grid[6 + j][k] == size) { // gridwidth, gridheight
+						int gridpoint = grid[4 + j][k]; // gridx, gridy
+
+						int weightdiff = cache[2 + j][k];
+						for (int m = 0; (weightdiff > 0) && (m < size); m++) {
+							weightdiff -= grid[2 + j][gridpoint + m];
+						}
+						if (weightdiff > 0) {
+							int weightsum = cache[2 + j][k] - weightdiff;
+							for (int m = 0; (weightsum > 0) && (m < size); m++) {
+								int weight = grid[2 + j][gridpoint + m];
+								if (weight > 0) {
+									int weightinc = weight * weightdiff / weightsum;
+									grid[2 + j][gridpoint + m] += weightinc;
+									weightdiff -= weightinc;
+									weightsum -= weightinc;
+								}
+							}
+							grid[2 + j][gridpoint + size - 1] += weightdiff;
+						}
+
+						int sizediff = cache[j][k];
+						int weightsum = 0;
+						for (int m = 0; (sizediff > 0) && (m < size); m++) {
+							sizediff -= grid[j][gridpoint + m];
+							weightsum += grid[2 + j][gridpoint + m];
+						}
+						if (sizediff > 0) {
+							for (int m = 0; (weightsum > 0) && (m < size); m++) {
+								int weight = grid[2 + j][gridpoint + m];
+								if (weight > 0) {
+									int sizeinc = weight * sizediff / weightsum;
+									grid[j][gridpoint + m] += sizeinc;
+									sizediff -= sizeinc;
+									weightsum -= weight;
+								}
+							}
+							grid[j][gridpoint + size - 1] += sizediff;
+						}
+					}
+					else if ((grid[6 + j][k] > size) &&
+							((nextsize == 0) || (grid[6 + j][k] < nextsize))) {
+						nextsize = grid[6 + j][k];
+					}
+				}
+			}
+		}
+		return grid;
+	}
+
+	/**
+	 *
+	 */
+	private int getSum(int[] values,
+			int from, int length, int gap, boolean last) {
+		if (length <= 0) { return 0; }
+		int value = 0;
+		for (int i = 0; i < length; i++) {
+			value += values[from + i];
+		}
+		return value + (length - (last ? 0 : 1)) * gap;
+	}
+
+	/**
+	 *
+	 */
+	private Dimension getFieldSize(Object component) {
+		String text = getString(component, "text", "");
+		int columns = getInteger(component, "columns", 0);
+		FontMetrics fm = getFontMetrics(getFont());
+		return new Dimension(((columns > 0) ?
+			(columns * fm.charWidth('e')) : 76) + 4,
+			fm.getAscent() + fm.getDescent() + 4); // fm.stringWidth(text)
+	}
+
+	/**
+	 *
+	 */
+	private Dimension getSize(Object component,
+			int dx, int dy, String defaultalignment) {
+		String text = getString(component, "text", null);
+		int tw = 0; int th = 0;
+		if (text != null) {
+			FontMetrics fm = getFontMetrics(getFont());
+			tw = fm.stringWidth(text);
+			th = fm.getAscent() + fm.getDescent();
+		}
+		Image icon = getIcon(component, "icon", null);
+		int iw = 0; int ih = 0;
+		if (icon != null) {
+			iw = icon.getWidth(this);
+			ih = icon.getHeight(this);
+		}
+		return new Dimension(tw + iw + dx, Math.max(th, ih) + dy);
+	}
+	//java>
+
+	/**
+	 *
+	 */
+	public void update(Graphics g) {
+		paint(g);
+	}
+
+	/**
+	 *~
+	 */
+	public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height) {
+		if (infoflags == ImageObserver.ALLBITS) {
+			validate(content);
+			return super.imageUpdate(img, infoflags, x, y, width, height);
+		}
+		return true;
+	}
+
+	/**
+	 *
+	 */
+	public void paint(Graphics g) { 
+		//g.setColor(Color.orange);
+		//g.fillRect(0, 0, getSize().width, getSize().height);
+		//long time = System.currentTimeMillis();
+		Rectangle clip = g.getClipBounds();
+		///dg.setClip(r.x, r.y, r.width, r.height);
+		paint(g, clip.x, clip.y, clip.width, clip.height, content, isEnabled());
+		//System.out.println(System.currentTimeMillis() - time);
+		///g.setClip(0, 0, getSize().width, getSize().height);
+		//g.setColor(Color.red); g.drawRect(clip.x, clip.y, clip.width - 1, clip.height - 1);
+	}
+
+	//<java
+	/*midp
+	protected void paint(Graphics g) {
+		paint(g, g.getClipX(), g.getClipY(),
+			g.getClipWidth(), g.getClipHeight(), content, true);
+	}
+
+	protected void showNotify() {
+		setRectangle(content, "bounds", 0, 0, getWidth(), getHeight());
+		doLayout(content);
+	}
+	midp*/
+
+	/**
+	 *
+	 */
+	private void paint(Graphics g,
+			int clipx, int clipy, int clipwidth, int clipheight,
+			Object component, boolean enabled) {
+		if (!getBoolean(component, "visible", true)) { return; }
+		Rectangle bounds = getRectangle(component, "bounds");
+		if (bounds == null) { return; }
+		if (bounds.width < 0) {
+			bounds.width = Math.abs(bounds.width);
+			doLayout(component);
+		}
+		if ((clipx + clipwidth < bounds.x) ||
+				(clipx > bounds.x + bounds.width) ||
+				(clipy + clipheight < bounds.y) ||
+				(clipy > bounds.y + bounds.height)) {
+			return;
+		}
+		clipx -= bounds.x; clipy -= bounds.y;
+		String classname = getClass(component);
+		boolean pressed = (mousepressed == component);
+		boolean inside = (mouseinside == component) &&
+			((mousepressed == null) || pressed);
+		boolean focus = focusinside && (focusowner == component);
+		enabled = getBoolean(component, "enabled", true); //enabled &&
+		g.translate(bounds.x, bounds.y); 
+		//g.setClip(0, 0, bounds.width, bounds.height);
+
+		if ("label" == classname) {
+			paintContent(component, g, clipx, clipy, clipwidth, clipheight,
+				0, 0, bounds.width, bounds.height,
+				enabled ? c_text : c_disable, "left", true);
+		}
+		else if ("button" == classname) {
+			paintRect(g, 0, 0, bounds.width, bounds.height,
+				enabled ? c_border : c_disable,
+				enabled ? ((inside != pressed) ? c_hover :
+					(pressed ? c_press : c_ctrl)) : c_bg, true, true, true, true);
+			if (focus) {
+				g.setColor(c_focus);
+				g.drawRect(2, 2, bounds.width - 5, bounds.height - 5);
+			}
+			paintContent(component, g, clipx, clipy, clipwidth, clipheight,
+				6, 3, bounds.width - 12, bounds.height - 6,
+				enabled ? c_text : c_disable, "center", true);
+		}
+		else if ("checkbox" == classname) {
+			boolean selected = getBoolean(component, "selected", false);
+			String group = getString(component, "group", null);
+			Color border = enabled ? c_border : c_disable;
+			Color foreground = enabled ? ((inside != pressed) ? c_hover :
+				(pressed ? c_press : c_ctrl)) : c_bg;
+			int dy = (bounds.height - block + 2) / 2;
+			if (group == null) {
+				paintRect(g, 1, dy + 1, block - 2, block - 2,
+					border, foreground, true, true, true, true);
+			} else {
+				g.setColor((foreground != c_ctrl) ? foreground : c_bg);
+				g.fillOval(1, dy + 1, block - 3, block - 3); //java
+				g.setColor(border);
+				g.drawOval(1, dy + 1, block - 3, block - 3); //java
+			}
+			if (focus) {
+				g.setColor(c_focus);
+				if (group == null) {
+					g.drawRect(3, dy + 3, block - 7, block - 7);
+				} else {
+					g.drawOval(3, dy + 3, block - 7, block - 7); //java
+				}
+			}
+			if((!selected && inside && pressed) ||
+					(selected && (!inside || !pressed))) {
+				g.setColor(enabled ? c_text : c_disable);
+				if (group == null) {
+					g.fillRect(3, dy + block - 9, 2, 6);
+					g.drawLine(3, dy + block - 4, block - 4, dy + 3);
+					g.drawLine(4, dy + block - 4, block - 4, dy + 4);
+				} else {
+					g.fillOval(5, dy + 5, block - 10, block - 10); //java
+					g.drawOval(4, dy + 4, block - 9, block - 9); //java
+				}
+			}
+			paintContent(component, g, clipx, clipy, clipwidth, clipheight,
+				block + 3, 0, bounds.width - block - 3, bounds.height,
+				enabled ? c_text : c_disable, "left", true);
+		}
+		else if ("combobox" == classname) {
+			if (getBoolean(component, "editable", true)) {
+				Image icon = getIcon(component, "icon", null);
+				int left = (icon != null) ? icon.getWidth(this) : 0;
+				paintField(g, clipx, clipy, clipwidth, clipheight, component,
+					bounds.width - block, bounds.height,
+					inside, pressed, focus, enabled, false, left);
+				if (icon != null) {
+					g.drawImage(icon, 2, (bounds.height - icon.getHeight(this)) / 2, this); //java
+					//midp g.drawImage(icon, 2, bounds.height / 2, Graphics.LEFT | Graphics.VCENTER);
+				}
+				paintArrow(g, bounds.width - block, 0, block, bounds.height,
+					'S', enabled, inside, pressed, "down", true, false, true, true);
+			} else {
+				paintRect(g, 0, 0, bounds.width, bounds.height,
+					enabled ? c_border : c_disable,
+					enabled ? ((inside != pressed) ? c_hover :
+						(pressed ? c_press : c_ctrl)) : c_bg, true, true, true, true);
+				paintContent(component, g, clipx, clipy, clipwidth, clipheight,
+					2, 2, bounds.width - block - 4, bounds.height - 4,
+					enabled ? c_text : c_disable, "left", false);
+				paintArrow(g, bounds.width - block, 0, block, bounds.height, 'S');
+				if (focus) {
+					g.setColor(c_focus);
+					g.drawRect(2, 2, bounds.width - block - 5, bounds.height - 5);
+				}
+			}
+		}
+		else if ("combolist" == classname) {
+			Rectangle view = getRectangle(component, ":view");
+			Rectangle viewport = getRectangle(component, ":port");
+			g.setColor(c_border);
+			g.drawRect(viewport.x, viewport.y, viewport.width - 1, viewport.height - 1);
+			if (paintScrollPane(g, clipx, clipy, clipwidth, clipheight,
+					bounds, view, viewport, enabled, inside, pressed)) {
+				Object selected = get(component, "inside");
+				int ly = clipy - viewport.y - 1;
+				int yfrom = view.y + Math.max(0, ly);
+				int yto = view.y + Math.min(viewport.height - 2, ly + clipheight);
+				for (Object choice = get(get(component, "combobox"), "choice");
+						choice != null; choice = get(choice, ":next")) {
+					Rectangle r = getRectangle(choice, "bounds");
+					if (yto <= r.y) { break; }
+					if (yfrom >= r.y + r.height) { continue; }
+					boolean armed = (selected == choice);
+					paintRect(g, r.x, r.y, bounds.width - 2, r.height, c_border,
+						armed ? c_select : c_bg, false, false, false, false);
+					paintContent(choice, g, clipx, yfrom, clipwidth, yto - yfrom,
+						r.x + 4, r.y + 2, bounds.width - 10, r.height - 4,
+						getBoolean(choice, "enabled", true) ? c_text : c_disable, "left", false);
+				}
+				resetScrollPane(g, clipx, clipy, clipwidth, clipheight, view, viewport);
+			}
+			//paintRect(g, 0, 0, bounds.width, bounds.height,
+			//	secondary1, c_ctrl, true, true, true, true);
+		}
+		else if (("textfield" == classname) || ("passwordfield" == classname)) {
+			paintField(g, clipx, clipy, clipwidth, clipheight, component,
+				bounds.width, bounds.height,
+				inside, pressed, focus, enabled, ("passwordfield" == classname), 0);
+		}
+		else if ("textarea" == classname) {
+			Rectangle view = getRectangle(component, ":view");
+			Rectangle viewport = getRectangle(component, ":port");
+			boolean editable = getBoolean(component, "editable", true);
+			paintRect(g, viewport.x, viewport.y, viewport.width, viewport.height,
+				enabled ? c_border : c_disable, editable ? c_textbg : c_bg,
+				true, true, true, true);
+			if (paintScrollPane(g, clipx, clipy, clipwidth, clipheight,
+					bounds, view, viewport, enabled, inside, pressed)) {
+				String text = getString(component, "text", "");
+				int start = focus ? getInteger(component, "start", 0) : 0;
+				int end = focus ? getInteger(component, "end", 0) : 0;
+				int is = Math.min(start, end); int ie = Math.max(start, end);
+				boolean wrap = getBoolean(component, "wrap", false);
+				FontMetrics fm = g.getFontMetrics(); //java
+				int fontascent = fm.getAscent(); int fontheight = fm.getHeight(); //java
+				//midp int fontheight = fm.getHeight();
+				int ascent = 1;
+				int ly = clipy - viewport.y - 1;
+				int yfrom = view.y + Math.max(0, ly);
+				int yto = view.y + Math.min(viewport.height - 2, ly + clipheight);
+				//g.setColor(Color.pink); g.fillRect(0, yfrom - 1, 75, 2); g.fillRect(0, yto - 1, 75, 2);
+
+				boolean prevletter = false; int n = text.length(); char c = 0;
+				for (int i = 0, j = -1, k = 0; k <= n; k++) { // j is the last space index (before k)
+					if (yto <= ascent) { break; }
+					if (wrap) {
+						if (((k == n) || ((c = text.charAt(k)) == '\n') || (c == ' ')) &&
+								(j  > i) && (fm.stringWidth(text.substring(i, k)) > viewport.width - 4)) {
+							k--; // draw line to the begin of the current word (+ spaces) if it is out of width
+						}
+						else if ((k == n) || (c == '\n')) { // draw line to the text/line end
+							j = k; prevletter = false;
+						}
+						else {
+							if ((c == ' ') && (prevletter || (j > i))) { j = k; } // keep spaces starting the line
+							prevletter = (c != ' ');
+							continue;
+						}
+					}
+					else {
+						if ((k == n) || ((c = text.charAt(k)) == '\n')) { j = k; } else { continue; }
+					}
+					if (yfrom < ascent + fontheight) {
+						String line = (j != -1) ? text.substring(i, j) : text.substring(i); //java
+						if (focus && (is != ie) && (ie >= i) && ((j == -1) || (is <= j))) {
+							int xs = (is < i) ? -1 : (((j != -1) && (is > j)) ? (view.width - 1) :
+								fm.stringWidth(text.substring(i, is))); //java
+								//midp font.substringWidth(text, i, is - i));
+							int xe = ((j != -1) && (ie > j)) ? (view.width - 1) :
+								fm.stringWidth(text.substring(i, ie)); //java
+								//midp font.substringWidth(text, i, ie - i);
+							g.setColor(c_select);
+							g.fillRect(1 + xs, ascent, xe - xs, fontheight);
+						}
+						g.setColor(enabled ? c_text : c_disable);
+						g.drawString(line, 1, ascent + fontascent); //java
+						//midp g.drawSubstring(text, i, ((j != -1) ? j : text.length()) - i, 1, ascent, Graphics.LEFT | Graphics.TOP);
+						if (focus && (end >= i) && ((j == -1) || (end <= j))) {
+							int caret = fm.stringWidth(text.substring(i, end)); //java
+							//midp int caret = font.substringWidth(text, i, end - i);
+							g.setColor(c_focus);
+							g.fillRect(caret, ascent, 1, fontheight);
+						}
+					}
+					ascent += fontheight;
+					i = j + 1;
+				}
+				resetScrollPane(g, clipx, clipy, clipwidth, clipheight, view, viewport);
+			}
+		}
+		else if ("tabbedpane" == classname) {
+			int i = 0; Rectangle last = null;
+			int selected = getInteger(component, "selected", 0);
+			String placement = getString(component, "placement", "top");
+			for (Object comp = get(component, "tab");
+					comp != null; comp = get(comp, ":next")) {
+				Rectangle r = getRectangle(comp, "bounds");
+				boolean hover = !(selected == i) && inside &&
+					(mousepressed == null) && (insidepart == comp);
+				boolean sel = (selected == i);
+				boolean tabenabled = enabled && getBoolean(comp, "enabled", true);
+				paintRect(g, r.x, r.y, r.width, r.height,
+					enabled ? c_border : c_disable,
+					tabenabled ? (sel ? c_bg : (hover ? c_hover : c_ctrl)) : c_ctrl,
+					(placement != "bottom") || !sel, (placement != "right") || !sel,
+					(placement == "bottom") || ((placement == "top") && !sel),
+					(placement == "right") || ((placement == "left") && !sel));
+				if (focus && sel) {
+					g.setColor(c_focus);
+					g.drawRect(r.x + 2, r.y + 2, r.width - 4, r.height - 4);
+				}
+				paintContent(comp, g, clipx, clipy, clipwidth, clipheight,
+					r.x + 4, r.y + 2, r.width - 8, r.height - 4,
+					tabenabled ? c_text : c_disable, "left", true);
+				i++; last = r;
+			}
+			if (last != null) {
+				boolean horizontal = ((placement == "top") || (placement == "bottom"));
+				paintRect(g, horizontal ? (last.x + last.width) : last.x,
+					horizontal ? last.y : (last.y + last.height),
+					horizontal ? (bounds.width - last.x - last.width) : last.width,
+					horizontal ? last.height : (bounds.height - last.y - last.height),
+					enabled ? c_border : c_disable, c_bg,
+					(placement != "top"), (placement != "left"),
+					(placement == "top"), (placement == "left"));
+				paintRect(g, (placement == "left") ? last.width : 0,
+					(placement == "top") ? last.height : 0,
+					horizontal ? bounds.width : (bounds.width - last.width),
+					horizontal ? (bounds.height - last.height) : bounds.height,
+					enabled ? c_border : c_disable, c_bg,
+					(placement != "top"), (placement != "left"),
+					(placement != "bottom"), (placement != "right"));					
+			}
+			Object tabcontent = getItemImpl(component, "component", selected);
+			if (tabcontent != null) {
+				paint(g, clipx, clipy, clipwidth, clipheight, tabcontent, enabled);
+			}
+		}
+		else if (("panel" == classname) || ("dialog" == classname)) {
+			if ("dialog" == classname) {
+				int titleheight = getInteger(component, "titleheight", 0);
+				paintRect(g, 0, 0, bounds.width, 3 + titleheight,
+					c_border, c_ctrl, true, true, false, true);
+				paintRect(g, 0, 3 + titleheight, bounds.width, bounds.height - 3 - titleheight,
+					c_border, c_press, false, true, true, true);
+				paintContent(component, g, clipx, clipy, clipwidth, clipheight,
+					3, 2, bounds.width - 6, titleheight, c_text, "left", false);
+				paintRect(g, 3, 3 + titleheight, bounds.width - 6, bounds.height - 6 - titleheight,
+					c_border, c_bg, true, true, true, true);
+			} else {
+				paintRect(g, 0, 0, bounds.width, bounds.height,
+					c_border, c_bg, false, false, false, false);
+			}
+			for (Object comp = get(component, "component");
+					comp != null; comp = get(comp, ":next")) {
+				paint(g, clipx, clipy, clipwidth, clipheight, comp, enabled);
+			}
+		}
+		else if ("desktop" == classname) {
+			paintReverse(g, clipx, clipy, clipwidth, clipheight,
+				get(component, "component"), enabled);
+			//g.setColor(Color.red); if (clip != null) g.drawRect(clipx, clipy, clipwidth, clipheight);
+			if (tooltipowner != null) {
+				Rectangle r = getRectangle(tooltipowner, "tooltipbounds");
+				paintRect(g, r.x, r.y, r.width, r.height,
+					c_border, c_bg, true, true, true, true);
+				String text = getString(tooltipowner, "tooltip", null);
+				g.setColor(c_text);
+				g.drawString(text, r.x + 2, r.y + g.getFontMetrics().getAscent() + 2); //java
+				//midp g.drawString(text, r.x + 2, r.y + (r.height - font.getHeight()) / 2, Graphics.LEFT | Graphics.TOP);
+			}			
+		}
+		else if ("spinbox" == classname) {
+			paintField(g, clipx, clipy, clipwidth, clipheight, component,
+				bounds.width - block, bounds.height,
+				inside, pressed, focus, enabled, false, 0);
+			paintArrow(g, bounds.width - block, 0, block, bounds.height / 2,
+					'N', enabled, inside, pressed, "up", true, false, false, true);
+			paintArrow(g, bounds.width - block, bounds.height / 2,
+				block, bounds.height - (bounds.height / 2),
+				'S', enabled, inside, pressed, "down", true, false, true, true);
+		}
+		else if ("progressbar" == classname) {
+			int minimum = getInteger(component, "minimum", 0);
+			int maximum = getInteger(component, "maximum", 100);
+			int value = getInteger(component, "value", 0);
+			boolean horizontal = ("vertical" != get(component, "orientation"));
+			int length = (value - minimum) *
+				((horizontal ? bounds.width : bounds.height) - 1) / (maximum - minimum);
+			paintRect(g, 0, 0, horizontal ? length : bounds.width,
+				horizontal ? bounds.height : length, enabled ? c_border : c_disable,
+				c_select, true, true, horizontal, !horizontal);
+			paintRect(g, horizontal ? length : 0, horizontal ? 0 : length,
+				horizontal ? (bounds.width - length) : bounds.width	,
+				horizontal ? bounds.height : (bounds.height - length),
+				enabled ? c_border : c_disable, c_bg, true, true, true, true);
+		}
+		else if ("slider" == classname) {
+			int minimum = getInteger(component, "minimum", 0);
+			int maximum = getInteger(component, "maximum", 100);
+			int value = getInteger(component, "value", 0);
+			boolean horizontal = ("vertical" != get(component, "orientation"));
+			int length = (value - minimum) *
+				((horizontal ? bounds.width : bounds.height) - block) /
+				(maximum - minimum);
+			paintRect(g, horizontal ? 0 : 3, horizontal ? 3 : 0,
+				horizontal ? length : (bounds.width - 6),
+				horizontal ? (bounds.height - 6) : length,
+				enabled ? c_border : c_disable,
+				c_bg, true, true, horizontal, !horizontal);
+			paintRect(g, horizontal ? length : 0, horizontal ? 0 : length,
+				horizontal ? block : bounds.width, horizontal ? bounds.height : block,
+				enabled ? c_border : c_disable,
+				enabled ? c_ctrl : c_bg, true, true, true, true);
+			if (focus) {
+				g.setColor(c_focus);
+				g.drawRect(horizontal ? (length + 2) : 2, horizontal ? 2 : (length + 2),
+					(horizontal ? block : bounds.width) - 5,
+					(horizontal ? bounds.height : block) - 5);
+				//g.drawRect(length + 1, 1, block - 3, bounds.height - 3);
+			}
+			paintRect(g, horizontal ? (block + length) : 3,
+				horizontal ? 3 : (block + length),
+				bounds.width - (horizontal ? (block + length) : 6),
+				bounds.height - (horizontal ? 6 : (block + length)),
+				enabled ? c_border : c_disable,
+				c_bg, horizontal, !horizontal, true, true);
+		}
+		else if ("splitpane" == classname) {
+			boolean horizontal = ("vertical" != get(component, "orientation"));
+			int divider = getInteger(component, "divider", -1);
+			paintRect(g, horizontal ? divider : 0, horizontal ? 0 : divider,
+				horizontal ? 5 : bounds.width, horizontal ? bounds.height : 5,
+				c_border, c_bg, false, false, false, false);
+			g.setColor(enabled ? (focus ? c_focus : c_border) : c_disable);
+			int xy = horizontal ? bounds.height : bounds.width;
+			int xy1 = Math.max(0, xy / 2 - 12);
+			int xy2 = Math.min(xy / 2 + 12, xy - 1);
+			for (int i = divider + 1; i < divider + 4; i += 2) {
+				if (horizontal) { g.drawLine(i, xy1, i, xy2); }
+					else { g.drawLine(xy1, i, xy2, i); }
+			}
+			Object comp1 = get(component, "component");
+			if (comp1 != null) {
+				paint(g, clipx, clipy, clipwidth, clipheight, comp1, enabled);
+				Object comp2 = get(comp1, ":next");
+				if (comp2 != null) {
+					paint(g, clipx, clipy, clipwidth, clipheight, comp2, enabled);
+				}
+			}
+		}
+		else if (("list" == classname) ||
+				("table" == classname) || ("tree" == classname)) {
+			Rectangle view = getRectangle(component, ":view");
+			Rectangle viewport = getRectangle(component, ":port");
+			int[] columnwidths = null;
+			int lx = clipx - viewport.x - 1;
+			int xfrom = view.x + Math.max(0, lx);
+			int xto = view.x + Math.min(viewport.width - 2, lx + clipwidth);
+			if ("table" == classname) {
+				columnwidths = new int[getItemCountImpl(component, "column")];
+				int i = 0; int x = 0; boolean drawheader = (clipy < viewport.y);
+				if (drawheader) { g.setClip(viewport.x, 0, viewport.width, viewport.y); }
+				for (Object column = get(component, "column");
+						column != null; column = get(column, ":next")) {
+					boolean lastcolumn = (i == columnwidths.length - 1);
+					int width = getInteger(column, "width", 80);
+					if (lastcolumn) { width = Math.max(width, viewport.width - x); }
+					columnwidths[i] = width;
+					if (drawheader && (xfrom < x + width) && (xto > x)) {
+						paintRect(g, x - view.x, 0, width, viewport.y,
+							enabled ? c_border : c_disable, enabled ? c_ctrl : c_bg,
+							true, true, false, lastcolumn);
+						paintContent(column, g, clipx, clipy, clipwidth, clipheight,
+							x + 2 - view.x, 1, width - 2,
+							viewport.y - 2, enabled ? c_text : c_disable, "left", false);
+					}
+					i++; x += width;
+				}
+				if (drawheader) { g.setClip(clipx, clipy, clipwidth, clipheight); }
+			}
+			paintRect(g, viewport.x, viewport.y, viewport.width, viewport.height,
+				enabled ? c_border : c_disable, c_textbg, true, true, true, true);
+			if (paintScrollPane(g, clipx, clipy, clipwidth, clipheight, bounds,
+					view, viewport, enabled, inside, pressed)) {
+				Object lead = get(component, "lead");
+				int ly = clipy - viewport.y - 1;
+				int yfrom = view.y + Math.max(0, ly);
+				int yto = view.y + Math.min(viewport.height - 2, ly + clipheight);
+				for (Object item = get(component, ("list" == classname) ? "item" :
+						(("table" == classname) ? "row" : "node")); item != null;) {
+					Rectangle r = getRectangle(item, "bounds");
+					if (lead == null) {
+						set(component, "lead", lead = item); // draw first item focused when lead is null
+					}
+					if (yto <= r.y) { break; } // the clip bounds are above
+
+					Object next = ("tree" == classname) ? get(item, "node") : null;
+					boolean expanded = (next != null) &&
+							getBoolean(item, "expanded", true);
+					if (yfrom < r.y + r.height) { // the clip rectangle is not bellow the current item
+						boolean selected = getBoolean(item, "selected", false);
+						paintRect(g, 0, r.y, view.width, r.height,
+							c_bg, selected ? c_select : c_textbg, false, false, true, false);
+						if (focus && (lead == item)) {
+							g.setColor(c_focus);
+							g.drawRect(0, r.y, view.width - 1, r.height - 2);
+						}
+						if ("table" == classname) {
+							int x = 0; int i = 0;
+							for (Object cell = get(item, "cell");
+									cell != null; cell = get(cell, ":next")) {
+								if (xto <= x) { break; }
+								int iwidth = (i < columnwidths.length) ? columnwidths[i] : 80;
+								if (xfrom < x + iwidth) {
+									boolean cellenabled = enabled && getBoolean(cell, "enabled", true);
+									paintContent(cell, g, xfrom, yfrom, xto - xfrom, yto - yfrom,
+										r.x + x + 1, r.y + 1, iwidth - 2, r.height - 3,
+										cellenabled ? c_text : c_disable, "left", false);
+								}
+								x += iwidth; i++;
+							}
+						} else {
+							boolean itemenabled = enabled && getBoolean(item, "enabled", true);
+							paintContent(item, g, xfrom, yfrom, xto - xfrom, yto - yfrom,
+								r.x + 1, r.y + 1, view.width - r.x - 2,
+								r.height - 3, itemenabled ? c_text : c_disable, "left", false);
+
+							if (next != null) {
+								int x = r.x - block / 2;
+								int y = r.y + (r.height - 1) / 2;
+								//g.drawRect(x - 4, y - 4, 8, 8);
+								paintRect(g, x - 4, y - 4, 9, 9, itemenabled ? c_border : c_disable,
+									itemenabled ? c_ctrl : c_bg, true, true, true, true);
+								g.setColor(itemenabled ? c_text : c_disable);
+								g.drawLine(x - 2, y, x + 2, y);
+								if (!expanded) {
+									g.drawLine(x, y - 2, x, y + 2);
+								}
+							}
+						}
+					}
+					if ("tree" == classname) {
+						if ((next == null) || !expanded) {
+							while ((item != component) && ((next = get(item, ":next")) == null)) {
+								item = getParent(item);
+							}
+						}
+						item = next;
+					} else {
+						item = get(item, ":next");
+					}
+				}
+				/*if (columnwidths != null) {
+					g.setColor(c_bg);
+					for (int i = 0, cx = -1; i < columnwidths.length - 1; i++) {
+						cx += columnwidths[i];
+						g.drawLine(cx, 0, cx, view.height);
+					}
+				}*/
+				resetScrollPane(g, clipx, clipy, clipwidth, clipheight, view, viewport);
+			}
+		}
+		else if ("separator" == classname) {
+			g.setColor(enabled ? c_border : c_disable);
+			g.fillRect(0, 0, bounds.width, bounds.height);
+		}
+		else if ("menubar" == classname) {
+			Object selected = get(component, "selected");
+			int lastx = 0;
+			for (Object menu = get(component, "menu");
+					menu != null; menu = get(menu, ":next")) {
+				Rectangle mb = getRectangle(menu, "bounds");
+				if (clipx + clipwidth <= mb.x) { break; }
+				if (clipx >= mb.x + mb.width) { continue; }
+				boolean armed = (selected == menu);
+				boolean hoover = (selected == null) && (insidepart == menu);
+				paintRect(g, mb.x, 0, mb.width, bounds.height, enabled ? c_border : c_disable,
+					enabled ? (armed ? c_select : (hoover ? c_hover : c_ctrl)) : c_bg,
+					armed, armed, true, armed);
+				paintContent(menu, g, clipx, clipy, clipwidth, clipheight,
+					mb.x + 4, 1, mb.width, bounds.height,
+					(enabled && getBoolean(menu, "enabled", true)) ? c_text : c_disable,
+					"left", true);
+				lastx = mb.x + mb.width;
+			}
+			paintRect(g, lastx, 0, bounds.width - lastx, bounds.height,
+				enabled ? c_border : c_disable, enabled ? c_ctrl : c_bg,
+				false, false, true, false);
+		}
+		else if ("popupmenu" == classname) {
+			paintRect(g, 0, 0, bounds.width, bounds.height,
+				c_border, c_bg, true, true, true, true);
+			Object selected = get(component, "selected");
+			for (Object menu = get(get(component, "menu"), "menu");
+					menu != null; menu = get(menu, ":next")) {
+				Rectangle r = getRectangle(menu, "bounds");
+				if (clipy + clipheight <= r.y) { break; }
+				if (clipy >= r.y + r.height) { continue; }
+				String itemclass = getClass(menu);
+				if (itemclass == "separator") {
+					g.setColor(c_border);
+					g.fillRect(r.x, r.y, bounds.width - 2, r.height);
+				} else {
+					boolean armed = (selected == menu);
+					boolean menuenabled = getBoolean(menu, "enabled", true);
+					paintRect(g, r.x, r.y, bounds.width - 2, r.height, c_border,
+						armed ? c_select : c_bg, false, false, false, false);
+					int tx = r.x;
+					if (itemclass == "checkboxmenuitem") {
+						tx += block + 3;
+						boolean checked = getBoolean(menu, "selected", false);
+						String group = getString(menu, "group", null);
+						g.translate(r.x + 4, r.y + 2);
+						g.setColor(menuenabled ? c_border : c_disable);
+						if (group == null) {
+							g.drawRect(1, 1, block - 3, block - 3);
+						} else {
+							g.drawOval(1, 1, block - 3, block - 3); //java
+						}
+						if (checked) {
+							g.setColor(menuenabled ? c_text : c_disable);
+							if (group == null) {
+								g.fillRect(3, block - 9, 2, 6);
+								g.drawLine(3, block - 4, block - 4, 3);
+								g.drawLine(4, block - 4, block - 4, 4);
+							} else {
+								g.fillOval(5, 5, block - 10, block - 10); //java
+								g.drawOval(4, 4, block - 9, block - 9); //java
+							}
+						}
+						g.translate(-r.x - 4, -r.y - 2);
+					}
+					paintContent(menu, g, clipx, clipy, clipwidth, clipheight,
+						tx + 4, r.y + 2, bounds.width - 10,
+						r.height - 4, menuenabled ? c_text : c_disable, "left", true);
+					if (itemclass == "menu") {
+						paintArrow(g, r.x + bounds.width - block, r.y, block, r.height, 'E');
+					}
+				}
+			}
+		}
+		//java>
+		else if ("bean" == classname) {
+				g.clipRect(0, 0, bounds.width, bounds.height);
+				((Component) get(component, "bean")).paint(g);
+				g.setClip(clipx, clipy, clipwidth, clipheight);
+		}
+		//<java
+		else throw new IllegalArgumentException((String) classname);
+		g.translate(-bounds.x, -bounds.y);
+		clipx += bounds.x; clipy += bounds.y;
+	}
+
+	/**
+	 *
+	 */
+	private void paintReverse(Graphics g,
+			int clipx, int clipy, int clipwidth, int clipheight,
+			Object component, boolean enabled) {
+		if (component != null) {
+			Rectangle bounds = getRectangle(component, "bounds");
+			if ((clipx < bounds.x) ||
+					(clipx + clipwidth > bounds.x + bounds.width) ||
+					(clipy < bounds.y) ||
+					(clipy + clipheight > bounds.y + bounds.height)) {
+				paintReverse(g, clipx, clipy, clipwidth, clipheight,
+					get(component, ":next"), enabled);
+			}
+			paint(g, clipx, clipy, clipwidth, clipheight, component, enabled);
+		}
+	}
+
+	/**
+	 *
+	 */
+	private void paintField(Graphics g,
+			int clipx, int clipy, int clipwidth, int clipheight, Object component,
+			int width, int height, boolean inside, boolean pressed,
+			boolean focus, boolean enabled, boolean hidden, int left) {
+		boolean editable = getBoolean(component, "editable", true);
+		paintRect(g, 0, 0, width, height, enabled ? c_border : c_disable,
+			editable ? c_textbg : c_bg, true, true, true, true);
+		g.clipRect(1 + left, 1, width - left - 2, height - 2);
+
+		String text = getString(component, "text", "");
+		int offset = getInteger(component, "offset", 0);
+		FontMetrics fm = g.getFontMetrics(); //java
+
+		int caret = 0;
+		if (focus) { 
+			int start = getInteger(component, "start", 0); 
+			int end = getInteger(component, "end", 0);
+			caret = hidden ? (fm.charWidth('*') * end) :
+				fm.stringWidth(text.substring(0, end)); //java
+				//midp font.substringWidth(text, 0, end);
+			if (start != end) {
+				int is = hidden ? (fm.charWidth('*') * start) :
+					fm.stringWidth(text.substring(0, start)); //java
+					//midp font.substringWidth(text, 0, start);
+				g.setColor(c_select);
+				g.fillRect(2 + left - offset + Math.min(is, caret), 1,
+					Math.abs(caret - is), height - 2);
+			}
+		}
+
+		if (focus) {
+			g.setColor(c_focus);
+			g.fillRect(1 + left - offset + caret, 1, 1, height - 2);
+		}
+
+		g.setColor(enabled ? c_text : c_disable);
+		int fx = 2 + left - offset;
+		int fy = (height + fm.getAscent() - fm.getDescent()) / 2; //java
+		//midp int fy = (height - font.getHeight()) / 2;
+		if (hidden) {
+			int fh = fm.charWidth('*');
+			for (int i = text.length(); i > 0; i--) {
+				g.drawString("*", fx, fy); //java
+				//midp g.drawChar('*', fx, fy, Graphics.LEFT | Graphics.TOP);
+				fx += fh;
+			}
+		} else {
+			g.drawString(text, fx, fy); //java
+			//midp g.drawString(text, fx, fy, Graphics.LEFT | Graphics.TOP);
+		}
+		g.setClip(clipx, clipy, clipwidth, clipheight);
+	}
+
+	/**
+	 *
+	 */
+	private boolean paintScrollPane(Graphics g,
+			int clipx, int clipy, int clipwidth, int clipheight, Rectangle bounds,
+			Rectangle view, Rectangle viewport,
+			boolean enabled, boolean inside, boolean pressed) {
+		if ((viewport.y + viewport.height < bounds.height) &&
+				(clipy + clipheight > viewport.y + viewport.height)) { // need horizontal
+			int x = viewport.x;
+			int y = viewport.y + viewport.height;
+			int height = bounds.height - y;
+			int button = Math.min(block, viewport.width / 2);
+			int track = viewport.width - (2 * button); //max 10
+			int knob = Math.min(track, Math.max(track * (viewport.width - 2) / view.width, 6));
+			int decrease = view.x * (track - knob) /
+				(view.width - viewport.width + 2);
+			int increase = track - decrease - knob;
+			paintArrow(g, x, y, button, height,
+				'W', enabled, inside, pressed, "left", false, true, true, false);
+			paintRect(g, x + button, y, decrease, height,
+				enabled ? c_border : c_disable, c_bg, false, true, true, false);
+			paintRect(g, x + button + decrease, y, knob, height,
+				enabled ? c_border : c_disable, enabled ? c_ctrl : c_bg, false, true, true, true);
+			int n = Math.min(5, (knob - 4) / 3);
+			g.setColor(enabled ? c_border : c_disable);
+			int cx = (x + button + decrease) + (knob + 2 - n * 3) / 2;
+			for (int i = 0; i < n; i++ ) {
+				g.drawLine(cx + i * 3, y + 2, cx + i * 3, y + height - 4);
+			}
+			paintRect(g, x + button + decrease + knob, y, increase, height,
+				enabled ? c_border : c_disable, c_bg, false, false, true, true);
+			paintArrow(g, x + button + track, y, button, height,
+				'E', enabled, inside, pressed, "right", false, false, true, true);
+		}
+		if ((viewport.x + viewport.width < bounds.width) &&
+				(clipx + clipwidth > viewport.x + viewport.width)) { // need vertical
+			int x = viewport.x + viewport.width;
+			int y = viewport.y;
+			int width = bounds.width - x;
+			//if (y > 0) {
+			//	paintRect(g, x - 1, 0, width + 1, y,
+			//		enabled ? c_border : c_disable, c_bg, false, true, false, false);
+			//}
+			int track = viewport.height - (2 * block);
+			int knob = track * (viewport.height - 2) / view.height;
+			int decrease = view.y * (track - knob) /
+				(view.height - viewport.height + 2);
+			int increase = track - decrease - knob;
+			paintArrow(g, x, y, width, block,
+				'N', enabled, inside, pressed, "up", true, false, false, true);
+			paintRect(g, x, y + block, width, decrease,
+				enabled ? c_border : c_disable, c_bg, true, false, false, true);
+			paintRect(g, x, y + block + decrease, width, knob,
+				enabled ? c_border : c_disable, enabled ? c_ctrl : c_bg, true, false, true, true);
+			int n = Math.min(5, (knob - 4) / 3);
+			g.setColor(enabled ? c_border : c_disable);
+			int cy = (y + block + decrease) + (knob + 2 - n * 3) / 2;
+			for (int i = 0; i < n; i++ ) {
+				g.drawLine(x + 2, cy + i * 3, x + width - 4, cy + i * 3);
+			}
+			paintRect(g, x, y + block + decrease + knob, width, increase,
+				enabled ? c_border : c_disable, c_bg, false, false, true, true);
+			paintArrow(g, x, y + block + track, width, block,
+			'S', enabled, inside, pressed, "down", false, false, true, true);
+		}
+		if ((clipx + clipwidth > viewport.x) && (clipy + clipheight > viewport.y) &&
+				(clipx < viewport.x + viewport.width) && (clipy < viewport.y + viewport.height)) {
+			g.clipRect(viewport.x + 1, viewport.y + 1, viewport.width - 2, viewport.height - 2);
+			g.translate(viewport.x + 1 - view.x, viewport.y + 1 - view.y);
+	 		return true;
+		}
+		return false;
+	}
+		
+	/**
+	 *
+	 */
+	private void resetScrollPane(Graphics g,
+			int clipx, int clipy, int clipwidth, int clipheight,
+			Rectangle view, Rectangle viewport) {
+		g.translate(view.x - viewport.x - 1, view.y - viewport.y - 1);
+		g.setClip(clipx, clipy, clipwidth, clipheight);
+	}
+
+	/**
+	 *
+	 */
+	private void paintRect(Graphics g, int x, int y, int width, int height,
+			Color border, Color bg,
+			boolean top, boolean left, boolean bottom, boolean right) {
+		if ((width <= 0) || (height <= 0)) return;
+		g.setColor(border);
+		if (top) {
+			g.drawLine(x + width - 1, y, x, y);
+			y++; height--; if (height <= 0) return;
+		}
+		if (left) {
+			g.drawLine(x, y, x, y + height - 1);
+			x++; width--; if (width <= 0) return;
+		}
+		if (bottom) {
+			g.drawLine(x, y + height - 1, x + width - 1, y + height - 1);
+			height--; if (height <= 0) return;
+		}
+		if (right) {
+			g.drawLine(x + width - 1, y + height - 1, x + width - 1, y);
+			width--; if (width <= 0) return;
+		}
+
+		//java>
+		if (bg == c_ctrl) {
+			if (height > block) {
+				g.setColor(c_bg);
+				g.fillRect(x, y, width, height - block);
+			}
+			for (int i = 0; i < width; i += block) {
+				g.drawImage(gradient, x + i, (height > block) ? (y + height - block) : y,
+					x + Math.min(i + block, width), y + height,
+					0, 0, Math.min(block, width - i), Math.min(block, height), null);
+			}
+			/*if (width > block) {
+				g.setColor(c_bg);
+				g.fillRect(x, y, width - block, height);
+			}
+			for (int i = 0; i < height; i += block) {
+				g.drawImage(gradient, (width > block) ? (x + width - block) : x, y + i,
+					x + width, y + Math.min(i + block, height),
+					0, 0, Math.min(block, width), Math.min(block, height - i), null);
+			}*/
+		}
+		else {
+			g.setColor(bg);
+			g.fillRect(x, y, width, height);
+		}
+		//<java
+		//midp g.setColor(bg);
+		//midp g.fillRect(x, y, width, height);
+	}
+
+	/**
+	 *
+	 */
+	private void paintArrow(Graphics g, int x, int y, int width, int height,
+			char dir, boolean enabled, boolean inside, boolean pressed, String part,
+			boolean top, boolean left, boolean bottom, boolean right) {
+		inside = inside && (insidepart == part);
+		pressed = pressed && (pressedpart == part);
+		paintRect(g, x, y, width, height, enabled ? c_border : c_disable,
+			enabled ? ((inside != pressed) ? c_hover :
+				(pressed ? c_press : c_ctrl)) : c_bg,
+			top, left, bottom, right);
+		g.setColor(enabled ? c_text : c_disable);
+		paintArrow(g, x, y, width, height, dir);
+	}
+
+	/**
+	 *
+	 */
+	private void paintArrow(Graphics g,
+			int x, int y, int width, int height, char dir) {
+		int cx = x + width / 2 - 2;
+		int cy = y + height / 2 - 2;
+		for (int i = 0; i < 4; i++) {
+			if (dir == 'N') { // north
+				g.drawLine(cx + 1 - i, cy + i, cx + 1/*2*/ + i, cy + i);
+			}
+			else if (dir == 'W') { // west
+				g.drawLine(cx + i, cy + 1 - i, cx + i, cy + 1/*2*/ + i);
+			}
+			else if (dir == 'S') { // south
+				g.drawLine(cx + 1 - i, cy + 4 - i, cx + 1/*2*/ + i, cy + 4 - i);
+			}
+			else { // east
+				g.drawLine(cx + 4 - i, cy + 1 - i, cx + 4 - i, cy + 1/*2*/ + i);
+			}
+		}
+	}
+
+	/**
+	 *
+	 */
+	private void paintContent(Object component, Graphics g,
+			int clipx, int clipy, int clipwidth, int clipheight,
+			int x, int y, int width, int height, Color fg, String defaultalignment,
+			boolean checkmnemonic) {
+		String text = getString(component, "text", null);
+		Image icon = getIcon(component, "icon", null);
+		if ((text == null) && (icon == null)) { return; }
+		String alignment = getString(component, "alignment", defaultalignment);
+
+		FontMetrics fm = null; //java
+		int tw = 0, th = 0;
+		int ta = 0; //java
+		if (text != null) {
+			fm = g.getFontMetrics(); //java
+			tw = fm.stringWidth(text);
+			ta = fm.getAscent(); //java
+			th = fm.getDescent() + ta; //java
+			//midp th = font.getHeight();
+			g.setColor(fg);
+		}
+		int iw = 0, ih = 0;
+		if (icon != null) {
+			iw = icon.getWidth(this);
+			ih = icon.getHeight(this); //java
+		}
+
+		boolean clipped = (tw + iw > width) || (th > height) || (ih > height);
+		int cx = x;
+		if ("center" == alignment) { cx += (width - tw - iw) / 2; }
+			else if ("right" == alignment) { cx += width - tw - iw; }
+
+		if (clipped) { g.clipRect(x, y, width, height); }
+		if (icon != null) {
+			g.drawImage(icon, cx, y + (height - ih) / 2, this); //java
+			//midp g.drawImage(icon, cx, y + height / 2, Graphics.LEFT | Graphics.VCENTER);
+			cx += iw;
+		}
+		if (text != null) {
+			int ty = y + (height - th) / 2 + ta; //java
+			g.drawString(text, cx, ty); //java
+			//midp g.drawString(text, cx, y + (height - th) / 2, Graphics.LEFT | Graphics.TOP);
+			if (checkmnemonic) {
+				int mnemonic = getInteger(component, "mnemonic", -1);
+				if ((mnemonic != -1) && (mnemonic < text.length())) {
+					int mx = cx + fm.stringWidth(text.substring(0, mnemonic)); //java
+					//midp int mx = cx + font.substringWidth(text, 0, mnemonic);
+					//midp int ty = (height + th) / 2;
+					g.drawLine(mx, ty + 1, mx + fm.charWidth(text.charAt(mnemonic)), ty + 1);
+				}
+			}
+		}
+		if (clipped) { g.setClip(clipx, clipy, clipwidth, clipheight); }
+	}
+	//midp private void setTimer(long delay) {}
+	//java>
+
+	/**
+	 *
+	 */
+	public synchronized void run() {
+		while (timer == Thread.currentThread()) {
+			try {
+				if (watch == 0) {
+					wait(0);
+				} else {
+					long current = System.currentTimeMillis();
+					if (watch > current) {
+						wait(watch - current);
+					} else {
+						watch = 0;
+						if ((watchdelay == 300L) || (watchdelay == 60L)) {
+							if (processScroll(mousepressed, pressedpart)) { setTimer(60L); }
+						} else if ((watchdelay == 375L) || (watchdelay == 75L)) {
+							if (processSpin(mousepressed, pressedpart)) { setTimer(75L); }
+						} else if (watchdelay == 750L) {
+							//System.out.println("> tip: " + getClass(mouseinside) + " : " + ((insidepart instanceof Object[]) ? getClass(insidepart) : insidepart));
+							showTip();
+						}
+					}
+				}
+			} catch (InterruptedException ie) {} //ie.printStackTrace();
+		}
+	}
+
+	/**
+	 *
+	 */
+	private void setTimer(long delay) {
+		watchdelay = delay;
+		if (delay == 0) {
+			watch = 0;
+		} else {
+			long prev = watch;
+			watch = System.currentTimeMillis() + delay;
+			if (timer == null) {
+				timer = new Thread(this);
+				timer.setPriority(Thread.MIN_PRIORITY);
+				timer.setDaemon(true);
+				timer.start();
+			}
+			if ((prev == 0) || (watch < prev)) {
+				synchronized (this) { notify(); } //try {}catch (IllegalMonitorStateException imse) {}
+			}
+		}
+	}
+
+	/**
+	 *
+	 */
+	public boolean isFocusTraversable() {
+		return true;
+	}
+
+	//<java
+	/*midp
+	private static final int MOUSE_ENTERED = 1;
+	private static final int MOUSE_EXITED = 2; //
+	private static final int MOUSE_PRESSED = 3;
+	private static final int MOUSE_DRAGGED = 4;
+	private static final int MOUSE_RELEASED = 5;
+	private static final int DRAG_ENTERED = 6;
+	private static final int DRAG_EXITED = 7;
+
+	protected void pointerPressed(int x, int y) {
+		findComponent(content, x, y);
+		if (popupowner != null) {
+			String classname = getClass(mouseinside);
+			if ((popupowner != mouseinside) &&
+					(classname != "popupmenu") && (classname != "combolist")) {
+				closeup();
+			}
+		}
+		handleMouseEvent(x, y, 1, false, false, false,
+			MouseEvent.MOUSE_ENTERED, mouseinside, insidepart);
+		mousepressed = mouseinside;
+		pressedpart = insidepart;
+		handleMouseEvent(x, y, 1, false, false, false,
+			MouseEvent.MOUSE_PRESSED, mousepressed, pressedpart);
+	}
+
+	protected void pointerReleased(int x, int y) {
+		Object mouserelease = mousepressed;
+		Object releasepart = pressedpart;
+		mousepressed = pressedpart = null;
+		handleMouseEvent(x, y, 1, false, false, false,
+			MouseEvent.MOUSE_RELEASED, mouserelease, releasepart);
+	}
+
+	protected void pointerDragged(int x, int y) {
+		Object previnside = mouseinside;
+		Object prevpart = insidepart;
+		findComponent(content, x, y);
+		boolean same = (previnside == mouseinside) && (prevpart == insidepart);
+		boolean isin = (mousepressed == mouseinside) && (pressedpart == insidepart);
+		boolean wasin = (mousepressed == previnside) && (pressedpart == prevpart);
+		
+		if (wasin && !isin) {
+			handleMouseEvent(x, y, 1, false, false, false,
+				MouseEvent.MOUSE_EXITED, mousepressed, pressedpart);
+		}
+		else if (!same && (popupowner != null) && !wasin) {
+			handleMouseEvent(x, y, 1, false, false, false,
+				DRAG_EXITED, previnside, prevpart);
+		}
+		if (isin && !wasin) {
+			handleMouseEvent(x, y, 1, false, false, false,
+				MouseEvent.MOUSE_ENTERED, mousepressed, pressedpart);
+		}
+		else if (!same && (popupowner != null) && !isin) {
+			handleMouseEvent(x, y, 1, false, false, false,
+				DRAG_ENTERED, mouseinside, insidepart);
+		}
+		if (isin == wasin) {
+			handleMouseEvent(x, y, 1, false, false, false,
+				MouseEvent.MOUSE_DRAGGED, mousepressed, pressedpart);
+		}
+	}
+
+	protected void keyPressed(int keyCode) {
+		if ((popupowner != null) || (focusowner != null)) {
+			hideTip();
+			if (keyCode > 0) {
+				processKeyPress((popupowner != null) ? popupowner : focusowner,
+					false, false, 1, keyCode, 0);
+			}
+			else {
+				int keychar = 0, key = 0;
+				switch (getGameAction(keyCode)) {
+					case UP: key = KeyEvent.VK_UP; break;
+					case LEFT: key = KeyEvent.VK_LEFT; break;
+					case DOWN: key = KeyEvent.VK_DOWN; break;
+					case RIGHT: key = KeyEvent.VK_RIGHT; break;
+					case FIRE: key = KeyEvent.VK_ENTER; keychar = KeyEvent.VK_SPACE; break;
+					case GAME_A: key = KeyEvent.VK_ESCAPE; break;
+				}
+				if (key != 0) {
+					processKeyPress((popupowner != null) ? popupowner : focusowner,
+						false, false, 1, keychar, key);
+				}
+				//if (keyCode == getKeyCode(LEFT)) {
+			}
+		}
+	}
+
+	protected void keyRepeated(int keyCode) {
+		keyPressed(keyCode);
+	}
+	
+	private static final Command nextcommand = new Command("Next", Command.SCREEN, 0);
+	//private static final Command prevcommand = new Command("Previous", Command.SCREEN, 0);
+	{
+		addCommand(nextcommand);
+		//addCommand(prevcommand);
+		setCommandListener(this);
+	}
+	
+	public void commandAction(Command command, Displayable displayable) {
+		if (command == nextcommand) {
+			setNextFocusable(focusowner, false);
+			repaint(focusowner);
+			closeup();
+		}
+		//else if (command == prevcommand) {
+			//setPreviousFocusable(focusowner, null, true, true, false);
+			//repaint(focusowner);
+			//closeup();
+		//}
+	}
+	midp*/
+	//java>
+
+	/**
+	 *
+	 */
+	protected void processEvent(AWTEvent e) {
+		int id = e.getID();
+		if ((id >= MouseEvent.MOUSE_FIRST) && (id <= MouseEvent.MOUSE_LAST)) {
+			MouseEvent me = (MouseEvent) e;
+			int x = me.getX();
+			int y = me.getY();
+			int clickcount = me.getClickCount();
+			boolean shiftdown = me.isShiftDown();
+			boolean controldown = me.isControlDown();
+			boolean popuptrigger = me.isPopupTrigger();
+			if (id == MouseEvent.MOUSE_ENTERED) {
+				if (mousepressed == null) {
+					findComponent(content, x, y);
+					handleMouseEvent(x, y, clickcount, shiftdown, controldown, popuptrigger,
+						MouseEvent.MOUSE_ENTERED, mouseinside, insidepart);
+				}
+			}
+			else if (id == MouseEvent.MOUSE_MOVED) {
+				Object previnside = mouseinside;
+				Object prevpart = insidepart;
+				findComponent(content, x, y);
+				if ((previnside == mouseinside) && (prevpart == insidepart)) {
+					handleMouseEvent(x, y, clickcount, shiftdown, controldown, popuptrigger,
+						MouseEvent.MOUSE_MOVED, mouseinside, insidepart);
+				}
+				else {
+					handleMouseEvent(x, y, clickcount, shiftdown, controldown, popuptrigger,
+						MouseEvent.MOUSE_EXITED, previnside, prevpart);
+					handleMouseEvent(x, y, clickcount, shiftdown, controldown, popuptrigger,
+						MouseEvent.MOUSE_ENTERED, mouseinside, insidepart);
+				}
+			}
+			else if (id == MouseEvent.MOUSE_EXITED) {
+				if (mousepressed == null) {
+					Object mouseexit = mouseinside;
+					Object exitpart = insidepart;
+					mouseinside = insidepart = null;
+					handleMouseEvent(x, y, clickcount, shiftdown, controldown, popuptrigger,
+						MouseEvent.MOUSE_EXITED, mouseexit, exitpart);
+				}
+			}
+			else if (id == MouseEvent.MOUSE_PRESSED) {
+				if (popupowner != null) {
+					String classname = getClass(mouseinside);
+					if ((popupowner != mouseinside) &&
+							(classname != "popupmenu") && (classname != "combolist")) {
+						closeup();
+					}
+				}
+				mousepressed = mouseinside;
+				pressedpart = insidepart;
+				handleMouseEvent(x, y, clickcount, shiftdown, controldown, popuptrigger,
+					MouseEvent.MOUSE_PRESSED, mousepressed, pressedpart);
+			}
+			else if (id == MouseEvent.MOUSE_DRAGGED) {
+				Object previnside = mouseinside;
+				Object prevpart = insidepart;
+				findComponent(content, x, y);
+				boolean same = (previnside == mouseinside) && (prevpart == insidepart);
+				boolean isin = (mousepressed == mouseinside) && (pressedpart == insidepart);
+				boolean wasin = (mousepressed == previnside) && (pressedpart == prevpart);
+				
+				if (wasin && !isin) {
+					handleMouseEvent(x, y, clickcount, shiftdown, controldown, popuptrigger,
+						MouseEvent.MOUSE_EXITED, mousepressed, pressedpart);
+				}
+				else if (!same && (popupowner != null) && !wasin) {
+					handleMouseEvent(x, y, clickcount, shiftdown, controldown, popuptrigger,
+						DRAG_EXITED, previnside, prevpart);
+				}
+				if (isin && !wasin) {
+					handleMouseEvent(x, y, clickcount, shiftdown, controldown, popuptrigger,
+						MouseEvent.MOUSE_ENTERED, mousepressed, pressedpart);
+				}
+				else if (!same && (popupowner != null) && !isin) {
+					handleMouseEvent(x, y, clickcount, shiftdown, controldown, popuptrigger,
+						DRAG_ENTERED, mouseinside, insidepart);
+				}
+				if (isin == wasin) {
+					handleMouseEvent(x, y, clickcount, shiftdown, controldown, popuptrigger,
+						MouseEvent.MOUSE_DRAGGED, mousepressed, pressedpart);
+				}
+			}
+			else if (id == MouseEvent.MOUSE_RELEASED) {
+				Object mouserelease = mousepressed;
+				Object releasepart = pressedpart;
+				mousepressed = pressedpart = null;
+				handleMouseEvent(x, y, clickcount, shiftdown, controldown, popuptrigger,
+					MouseEvent.MOUSE_RELEASED, mouserelease, releasepart);
+				if ((mouseinside != null) &&
+						((mouserelease != mouseinside) || (releasepart != insidepart))) {
+					handleMouseEvent(x, y, clickcount, shiftdown, controldown, popuptrigger,
+						MouseEvent.MOUSE_ENTERED, mouseinside, insidepart);
+				}
+			}
+		}
+		else if (id == MOUSE_WHEEL) {
+			Rectangle port = getRectangle(mouseinside, ":port");
+			if (port != null) { // is scrollable
+				Rectangle bounds = getRectangle(mouseinside, "bounds");	
+				try { // mouse wheel is supported since 1.4 thus it use reflection
+					if (wheelrotation == null) {
+						wheelrotation = e.getClass().getMethod("getWheelRotation", null);
+					}
+					int rotation = ((Integer) wheelrotation.invoke(e, null)).intValue();
+					
+					if (port.x + port.width < bounds.width) { // has vertical scrollbar
+						processScroll(mouseinside, (rotation > 0) ? "down" : "up");
+					}
+					else if (port.y + port.height < bounds.height) { // has horizontal scrollbar
+						processScroll(mouseinside, (rotation > 0) ? "right" : "left");
+					}
+				} catch (Exception exc) { /* never */ }
+			}
+		}
+		else if ((id == KeyEvent.KEY_PRESSED) || (id == KeyEvent.KEY_TYPED)) {
+			if (focusinside && ((popupowner != null) || (focusowner != null))) {
+				hideTip();
+				KeyEvent ke = (KeyEvent) e;
+				int keychar = ke.getKeyChar();
+				boolean control = (keychar <= 0x1f) ||
+					((keychar >= 0x7f) && (keychar <= 0x9f)) ||
+					(keychar >= 0xffff) || ke.isControlDown();
+				if (control == (id == KeyEvent.KEY_PRESSED)) {
+					int keycode = control ? ke.getKeyCode() : 0;
+					if (!processKeyPress((popupowner != null) ? popupowner : focusowner,
+							ke.isShiftDown(), ke.isControlDown(), ke.getModifiers(),
+							control ? 0 : keychar, keycode)) {
+						if ((keycode == KeyEvent.VK_TAB) ||
+								((keycode == KeyEvent.VK_F6) && (ke.isAltDown() || ke.isControlDown()))) {
+							boolean outgo = (keycode == KeyEvent.VK_F6);
+							if (!ke.isShiftDown() ? setNextFocusable(focusowner, outgo) :
+									setPreviousFocusable(focusowner, outgo)) {
+								ke.consume();
+							} else if (MOUSE_WHEEL != 0) { // 1.4
+								if (!ke.isShiftDown()) {
+									transferFocus();
+								}
+								else { try {
+										getClass().getMethod("transferFocusBackward", null). invoke(this, null);
+								} catch (Exception exc) { /* never */ } }
+							}
+							repaint(focusowner);
+							closeup();
+						}
+						else if (keycode == KeyEvent.VK_F8) {
+							for (Object splitpane = focusowner;
+									splitpane != null; splitpane = getParent(splitpane)) {
+								if (getClass(splitpane) == "splitpane") {
+									setFocus(splitpane); repaint(splitpane); break; //middle
+								}
+							}
+						}
+					}
+					else ke.consume();
+					/*else if (keycode == KeyEvent.VK_F10) {
+						Object menubar = null; // find("class", "menubar")
+						if ((menubar != null) && (get(menubar, "selected") == null)) {
+							set(menubar, "selected", getMenu(menubar, null, true, false));
+							Object popup = popup(menubar, "menubar");
+							set(popup, "selected", getMenu(popup, null, true, true));
+							repaint(menubar); // , selected
+						}
+					}*/
+				}
+			}
+		}
+		/*else if (id == KeyEvent.KEY_RELEASED) {
+			if (focusinside && (focusowner != null)) {
+				KeyEvent ke = (KeyEvent) e;
+				//pressedkey = 0;
+				processKeyRelease(focusowner, ke, ke.getKeyCode());
+			}
+		}*/
+		else if (id == FocusEvent.FOCUS_LOST) {
+			focusinside = false;
+			if (focusowner != null) { repaint(focusowner); }
+			closeup();
+		}
+		else if (id == FocusEvent.FOCUS_GAINED) {
+			focusinside = true;
+			if (focusowner == null) { setFocus(content); }
+				else { repaint(focusowner); }
+		}
+		else if ((id == ComponentEvent.COMPONENT_RESIZED) ||
+				(id == ComponentEvent.COMPONENT_SHOWN)) {
+			Dimension d = getSize();
+			//System.out.println(id + ": " + d.width + ", " + d.height);
+			setRectangle(content, "bounds", 0, 0, d.width, d.height);
+			validate(content);
+			closeup();
+			if (!focusinside)  { requestFocus(); }
+		}
+	}
+
+	/**
+	 *
+	 */
+	/*private boolean processKeyPress(Object component,
+			KeyEvent e, int keycode, Object invoker) {
+		if (processKeyPress(component, e, keycode)) { return true; }
+		for (Object comp = get(component, "component");
+				comp != null; comp = get(comp, ":next")) {
+			if ((comp != invoker) && processKeyPress(comp, e, keycode, null)) {
+				return true;
+			}
+		}
+		if ((invoker != null) && (component != content)) {
+			Object parent = getParent(component);
+			if (parent != null) {
+				return processKeyPress(parent, e, keycode, component);
+			}
+		}
+		return false;
+	}*/
+	//<java
+
+	/**
+	 *
+	 */
+	private boolean processKeyPress(Object component,
+			boolean shiftdown, boolean controldown, int modifiers, int keychar, int keycode) {
+		String classname = getClass(component);
+		if ("button" == classname) {
+			if (keychar == KeyEvent.VK_SPACE ||
+					((keycode == KeyEvent.VK_ENTER) &&
+						(getString(component, "type", null) == "default")) ||
+					((keycode == KeyEvent.VK_ESCAPE) && //...
+						(getString(component, "type", null) == "cancel"))) {
+				//pressedkey = keychar;
+				invoke(component, "action");
+				repaint(component);
+				return true;
+			}
+		}
+		else if ("checkbox" == classname) {
+			if (keychar == KeyEvent.VK_SPACE) {
+				changeCheck(component, true);
+				repaint(component);
+				return true;
+			}
+		}
+		else if ("combobox" == classname) {
+			Object combolist = get(component, "combolist");
+			if (combolist == null) {
+				if (getBoolean(component, "editable", true) &&
+						processField(component, shiftdown, controldown, modifiers,
+							keychar, keycode, false, false)) {
+					setInteger(component, "selected", -1, -1);
+					return true;
+				}
+				if ((keychar == KeyEvent.VK_SPACE) || (keycode == KeyEvent.VK_DOWN)) {
+					combolist = popup(component, classname);
+					int selected = getInteger(component, "selected", -1);
+					set(combolist, "inside", (selected != -1) ?
+						getItemImpl(component, "choice", selected) :
+						get(component, "choice")); //scroll to it!
+				}
+				else return false;
+			} else {
+				if ((keycode == KeyEvent.VK_UP) ||
+						(keycode == KeyEvent.VK_DOWN) || (keycode == KeyEvent.VK_PAGE_UP) ||
+						(keycode == KeyEvent.VK_PAGE_DOWN) ||
+						(keycode == KeyEvent.VK_HOME) || (keycode == KeyEvent.VK_END)) {
+					Object selected = get(combolist, "inside");
+					Object next = getListItem(component, combolist,
+						keycode, selected, "choice", null);
+					if (next != null) {
+						set(combolist, "inside", next);
+						Rectangle r = getRectangle(next, "bounds");
+						scrollToVisible(combolist, r.x, r.y, 0, r.height);
+						if (selected != null) { repaint(combolist, "combolist", selected); } 
+						repaint(combolist, "combolist", next);
+					}
+				}
+				else if ((keycode == KeyEvent.VK_ENTER) || (keychar == KeyEvent.VK_SPACE)) {
+					closeup(component, combolist, get(combolist, "inside")); //Alt+Up
+				}
+				else if (keycode == KeyEvent.VK_ESCAPE) {
+					closeup(component, combolist, null);
+				}
+				else return processField(component, shiftdown, controldown, modifiers,
+					keychar, keycode, false, false);
+			}
+			return true;
+		}
+		else if (("textfield" == classname) || ("passwordfield" == classname)) {
+			return processField(component, shiftdown, controldown, modifiers,
+				keychar, keycode, false, ("passwordfield" == classname));
+		}
+		else if ("textarea" == classname) {
+			String text = getString(component, "text", ""); 
+			int start = getInteger(component, "start", 0);
+			int end = getInteger(component, "end", 0);
+
+			int istart = start;
+			int iend = end;
+			String insert = null;
+			if ((keycode == KeyEvent.VK_HOME) && !controldown) {
+				while ((iend > 0) && (text.charAt(iend - 1) != '\n')) { iend--; }
+				if (!shiftdown) { istart = iend; }
+			}
+			else if ((keycode == KeyEvent.VK_END) && !controldown) {
+				iend = text.indexOf('\n', end);
+				if (iend == -1) { iend = text.length(); }
+				if (!shiftdown) { istart = iend; }
+			}
+			else if ((keycode == KeyEvent.VK_UP) ||
+					(keycode == KeyEvent.VK_PAGE_UP)) {
+				int prev = end;
+				while ((prev > 0) && (text.charAt(prev - 1) != '\n')) { prev--; }
+				if (prev != 0) {
+					int dx = end - prev;
+					int lines = (keycode == KeyEvent.VK_PAGE_UP) ?
+						(getRectangle(component, ":port").height /
+							getFontMetrics(getFont()).getHeight()) : 1;
+					int first = prev;
+					do {
+						prev = first; first--; lines--;
+						while ((first > 0) && (text.charAt(first - 1) != '\n')) { first--; }
+					} while ((first > 0) && (lines > 0));
+					iend = Math.min(first + dx, prev - 1);
+					if (!shiftdown) { istart = iend; }
+				}
+			}
+			else if ((keycode == KeyEvent.VK_DOWN) ||
+					(keycode == KeyEvent.VK_PAGE_DOWN)) {
+				int next = text.indexOf('\n', end);
+				if (next != -1) {
+					int prev = end;
+					while ((prev > 0) && (text.charAt(prev - 1) != '\n')) { prev--; }
+					if (keycode == KeyEvent.VK_PAGE_DOWN) {
+						int lines = getRectangle(component, ":port").height /
+							getFontMetrics(getFont()).getHeight();
+						for (int more = 0; (lines > 1) &&
+								((more = text.indexOf('\n', next + 1)) != -1); next = more) {
+							lines--;
+						}
+					}
+					int last = text.indexOf('\n', next + 1);
+					iend = Math.min(next + 1 + end - prev,
+						(last == -1) ? (text.length() + 1) : last);
+					if (!shiftdown) { istart = iend; }
+				}
+			}
+			return changeField(component, text, insert, istart, iend, start, end) ?
+				true : processField(component, shiftdown, controldown, modifiers,
+					keychar, keycode, true, false);
+		}
+		else if ("tabbedpane" == classname) {
+			if ((keycode == KeyEvent.VK_RIGHT) || (keycode == KeyEvent.VK_DOWN) ||
+					(keycode == KeyEvent.VK_LEFT) || (keycode == KeyEvent.VK_UP)) {
+				int selected = getInteger(component, "selected", 0);
+				boolean increase = (keycode == KeyEvent.VK_RIGHT) || (keycode == KeyEvent.VK_DOWN);
+				int newvalue = selected;
+				int n = increase ? getItemCountImpl(component, "tab") : 0;
+				int d = (increase ? 1 : -1);						
+				for (int i = selected + d; increase ? (i < n)  : (i >= 0); i += d) {
+					if (getBoolean(getItemImpl(component, "tab", i), "enabled", true)) {
+						newvalue = i; break;
+					}	
+				}
+				if (newvalue != selected) {
+					setInteger(component, "selected", newvalue, 0);
+					repaint(component);
+					invoke(component, "action");
+				}
+			}
+		}
+		else if ("spinbox" == classname) {
+			if ((keycode == KeyEvent.VK_UP) || (keycode == KeyEvent.VK_DOWN)) {
+				processSpin(component, (keycode == KeyEvent.VK_UP)? "up" : "down");
+				return true;
+			}
+			return processField(component, shiftdown, controldown, modifiers,
+				keychar, keycode, false, false);
+		}
+		else if ("slider" == classname) {
+			int value = getInteger(component, "value", 0);
+			int d = 0;
+			if ((keycode == KeyEvent.VK_HOME) || (keycode == KeyEvent.VK_LEFT) ||
+					(keycode == KeyEvent.VK_UP) || (keycode == KeyEvent.VK_PAGE_UP)) {
+				d = getInteger(component, "minimum", 0) - value;
+				if ((keycode == KeyEvent.VK_LEFT) || (keycode == KeyEvent.VK_UP)) {
+					d = Math.max(d, -getInteger(component, "unit", 5));
+				}
+				else if (keycode == KeyEvent.VK_PAGE_UP) {
+					d = Math.max(d, -getInteger(component, "block", 25));
+				}
+			}
+			else if ((keycode == KeyEvent.VK_END) || (keycode == KeyEvent.VK_RIGHT) ||
+					(keycode == KeyEvent.VK_DOWN) || (keycode == KeyEvent.VK_PAGE_DOWN)) {
+				d = getInteger(component, "maximum", 100) - value;
+				if ((keycode == KeyEvent.VK_RIGHT) || (keycode == KeyEvent.VK_DOWN)) {
+					d = Math.min(d, getInteger(component, "unit", 5));
+				}
+				else if (keycode == KeyEvent.VK_PAGE_DOWN) {
+					d = Math.min(d, getInteger(component, "block", 25));
+				}
+			}
+			if (d != 0) {
+				setInteger(component, "value", value + d, 0);
+				repaint(component);
+				invoke(component, "action");
+			}
+		}
+		else if ("splitpane" == classname) {
+			int divider = getInteger(component, "divider", -1);
+			int d = 0;
+			if (keycode == KeyEvent.VK_HOME) {
+				d = -divider;
+			}
+			else if ((keycode == KeyEvent.VK_LEFT) || (keycode == KeyEvent.VK_UP)) {
+				d = Math.max(-10, -divider);
+			}
+			else if ((keycode == KeyEvent.VK_END) ||
+					(keycode == KeyEvent.VK_RIGHT) || (keycode == KeyEvent.VK_DOWN)) {
+				boolean horizontal = ("vertical" != get(component, "orientation"));
+				Rectangle bounds = getRectangle(component, "bounds");
+				int max = (horizontal ? bounds.width : bounds.height) - 5;				
+				d = max - divider;
+				if (keycode != KeyEvent.VK_END) {
+					d = Math.min(d, 10);
+				}
+			}
+			if (d != 0) {
+				setInteger(component, "divider", divider + d, -1);
+				validate(component);
+			}
+		}
+		else if ("list" == classname) {
+			return processList(component, shiftdown, controldown, keychar, keycode, "item", null);
+		}
+		else if ("table" == classname) {
+			return processList(component, shiftdown, controldown, keychar, keycode, "row", null);
+		}
+		else if ("tree" == classname) {
+			//? clear childs' selection, select this is its 	subnode was selected
+			if (keycode == KeyEvent.VK_LEFT) {
+				Object lead = get(component, "lead");
+				if ((get(lead, "node") != null) && getBoolean(lead, "expanded", true)) {
+					setBoolean(lead, "expanded", false, true);
+					selectItem(component, lead, "node", "node");
+					validate(component);
+					invoke(component, "collapse"); //lead
+					return true;
+				}
+				else {
+					Object parent = getParent(lead);
+					if (parent != component) {
+						selectItem(component, parent, "node", "node");
+						setLead(component, lead, parent);
+						return true;
+					}
+				}
+			}
+			//? for interval mode select its all subnode or deselect all after
+			else if (keycode == KeyEvent.VK_RIGHT) {
+				Object lead = get(component, "lead");
+				Object node = get(lead, "node");
+				if (node != null) {
+					if (getBoolean(lead, "expanded", true)) {
+						selectItem(component, node, "node", "node");
+						setLead(component, lead, node);
+					}
+					else {
+						setBoolean(lead, "expanded", true, true);
+						selectItem(component, lead, "node", "node");
+						validate(component);
+						invoke(component, "expand"); //lead
+					}
+					return true;
+				}
+			}
+			return processList(component, shiftdown, controldown, keychar, keycode, "node", "node");
+		}
+		else if ("menubar" == classname) {
+			Object previous = null; Object last = null;
+			for (Object i = get(component, "popupmenu");
+					i != null; i = get(i, "popupmenu")) {
+				previous = last; last = i;
+			}
+			Object selected = get(last, "selected");
+			Object hotpopup = ((selected != null) || (previous == null)) ?
+				last : previous;
+			if ((selected == null) && (previous != null)) {
+				selected = get(previous, "selected");
+			}
+
+			if ((keycode == KeyEvent.VK_UP) || (keycode == KeyEvent.VK_DOWN)) {
+				set(hotpopup, "selected", null);
+				popup(hotpopup, "popupmenu");
+				selected = getMenu(hotpopup,
+					selected, keycode == KeyEvent.VK_DOWN, true);
+				set(hotpopup, "selected", selected);
+				repaint(hotpopup);
+			}
+			else if (keycode == KeyEvent.VK_LEFT) {
+				if (previous != null) {
+					selected = get(previous, "selected");
+					set(previous, "selected", null);
+					popup(previous, "popupmenu");
+					set(previous, "selected", selected);
+					repaint(previous); // , selected
+				}
+				else {
+					selected = getMenu(component, get(component, "selected"), false, false);
+					set(component, "selected", selected);
+					Object popup = popup(component, "menubar");
+					set(popup, "selected", getMenu(popup, null, true, true));
+					repaint(component); // , selected
+				}
+			}
+			else if (keycode == KeyEvent.VK_RIGHT) {
+				if ((previous != null) && (selected == null)) {
+					set(last, "selected", get(get(last, "menu"), "menu"));
+					repaint(last); // , selected
+				}
+				else if ((selected != null) && (getClass(selected) == "menu")) {
+					Object popup = popup(last, "popupmenu");
+					set(popup, "selected", get(get(popup, "menu"), "menu"));
+				}
+				else {
+					selected = getMenu(component, get(component, "selected"), true, false);
+					set(component, "selected", selected);
+					Object popup = popup(component, "menubar");
+					set(popup, "selected", getMenu(popup, null, true, true));
+					repaint(component); // , selected
+				}
+			}
+			else if ((keycode == KeyEvent.VK_ENTER) ||
+					(keychar == KeyEvent.VK_SPACE) || (keycode == KeyEvent.VK_ESCAPE)) {
+				if ((keycode != KeyEvent.VK_ESCAPE) &&
+						getBoolean(selected, "enabled", true)) {
+					if ((selected != null) && (getClass(selected) == "checkboxmenuitem")) {
+						changeCheck(selected, false);
+					}
+					else invoke(selected, "action");
+				}
+				closeup(component);
+			}
+			else return false;
+			return true;
+		}
+		return false;
+	}
+
+	/**
+	 *
+	 */
+	private boolean changeCheck(Object component, boolean box) {
+		String group = getString(component, "group", null);
+		if (group != null) {
+			if (getBoolean(component, "selected", false)) { return false; }
+			for (Object comp = get(getParent(component),
+					box ? "component" : "menu"); comp != null; comp = get(comp, ":next")) {
+				if (comp == component) {
+					setBoolean(component, "selected", true);
+				}
+				else if (group.equals(get(comp, "group")) &&
+						getBoolean(comp, "selected", false)) {
+					setBoolean(comp, "selected", false);
+					if (box) { repaint(comp); } //checkbox only
+				}
+			}
+		}
+		else {
+			setBoolean(component, "selected",
+				!getBoolean(component, "selected", false), false);
+		}
+		invoke(component, "action");
+		return true;
+	}
+
+	/**
+	 *
+	 */
+	private Object getMenu(Object component, Object part,
+			boolean forward, boolean popup) {
+		if (forward) {
+			if (part != null) { part = get(part, ":next"); }
+			if (part == null) {
+				part = get(popup ? get(component, "menu") : component, "menu");
+			}
+		}
+		else {
+			Object prev = get(popup ? get(component, "menu") : component, "menu");
+			for (Object next = get(prev, ":next");
+					(next != null) && (next != part); next = get(next, ":next")) {
+				prev = next;
+			}
+			part = prev;
+		}
+		return (getClass(part) == "separator") ?
+			getMenu(component, part, forward, popup) : part;
+	}
+
+	/**
+	 *
+	 */
+	/*private boolean processKeyRelease(Object component, KeyEvent e, int keycode) {
+		return true;
+	}*/
+
+	/**
+	 *
+	 */
+	private boolean processField(Object component,
+			boolean shiftdown, boolean controldown, int modifiers,
+			int keychar, int keycode, boolean multiline, boolean hidden) {
+		String text = getString(component, "text", ""); 
+		int start = getInteger(component, "start", 0);
+		int end = getInteger(component, "end", 0);
+		boolean editable = getBoolean(component, "editable", true);
+
+		int istart = start;
+		int iend = end;
+		String insert = null;
+		//midp if (editable && (keychar != 0)) {
+		if (editable && (keychar != 0) && //java
+			((modifiers == 0) || (modifiers == InputEvent.SHIFT_MASK))) { //java
+			insert = String.valueOf((char) keychar);
+		}
+		else if (multiline && editable && (keycode == KeyEvent.VK_ENTER)) {
+			insert = "\n";
+		}
+		else if (editable && (keycode == KeyEvent.VK_BACK_SPACE)) {
+			insert = "";
+			if (start == end) { istart -= 1; }
+		}
+		else if (keycode == KeyEvent.VK_END) {
+			iend = text.length();
+			if (!shiftdown) { istart = iend; }
+		}
+		else if (keycode == KeyEvent.VK_HOME) {
+			iend = 0;
+			if (!shiftdown) { istart = iend; }
+		}
+		else if (keycode == KeyEvent.VK_LEFT) {
+			//java>
+			if (controldown) {
+				for (int i = 0; i < 2; i++) {
+					while ((iend > 0) && ((i != 0) ==
+						Character.isLetterOrDigit(text.charAt(iend - 1)))) { iend--; }	
+				}
+			} else {
+				iend -= 1;
+			}
+			//<java
+			//midp iend -= 1;
+			if (!shiftdown) { istart = iend; }
+		}
+		else if (keycode == KeyEvent.VK_RIGHT) {
+			//java>
+			if (controldown) {
+				for (int i = 0; i < 2; i++) {
+					while ((iend < text.length()) && ((i == 0) ==
+						Character.isLetterOrDigit(text.charAt(iend)))) { iend++; }
+				}
+			} else {
+				iend += 1;
+			}
+			//<java
+			//midp iend += 1;
+			if (!shiftdown) { istart = iend; }
+		}
+		else if (editable && (keycode == KeyEvent.VK_DELETE)) {
+			insert = "";
+			if (start == end) { iend += 1; }
+		}
+		else if (controldown &&
+				((keycode == KeyEvent.VK_A) || (keycode == 0xBF))) {
+			istart = 0; // KeyEvent.VK_SLASH
+			iend = text.length();
+		}
+		else if (controldown && (keycode == 0xDC)) {
+			istart = iend = text.length(); // KeyEvent.VK_BACK_SLASH
+		}
+		else if ((editable && !hidden && controldown && (keycode == KeyEvent.VK_X)) ||
+				(!hidden && controldown && (keycode == KeyEvent.VK_C))) {
+			if (start != end) {
+				clipboard = text.substring(
+					Math.min(start, end), Math.max(start, end));
+				//java>
+				try {
+					/* Personal Basis Profile doesn't contain datatransfer package
+					Toolkit toolkit = getToolkit();
+					Object systemclipboard = toolkit.getClass().getMethod("getSystemClipboard", null).invoke(toolkit, null);
+					Class selectionclass = Class.forName("java.awt.datatransfer." + "StringSelection");
+					Object selection = selectionclass.getConstructor(new Class[] { String.class }).
+						newInstance(new Object[] { clipboard });
+					systemclipboard.getClass().getMethod("setContents", new Class[] {
+							Class.forName("java.awt.datatransfer." + "Transferable"),
+							Class.forName("java.awt.datatransfer." + "ClipboardOwner") }).
+						invoke(systemclipboard, new Object[] { selection, null });*/					
+					getToolkit().getSystemClipboard().setContents(
+						new StringSelection(clipboard), null);
+				} catch (Exception exc) {}
+				//<java
+				if (keycode == KeyEvent.VK_X) { insert = ""; }
+			}
+		}
+		else if (editable && controldown && (keycode == KeyEvent.VK_V)) {
+			//java>
+			try {
+				/* no datatransfer package in PBP
+				Toolkit toolkit = getToolkit();
+				Object systemclipboard = toolkit.getClass().getMethod("getSystemClipboard", null).invoke(toolkit, null);
+				Object contents = systemclipboard.getClass().getMethod("getContents", new Class[] { Object.class }).
+					invoke(systemclipboard, new Object[] { this });
+				Class dataflavor = Class.forName("java.awt.datatransfer." + "DataFlavor");
+				insert = (String) (contents.getClass().getMethod("getTransferData", new Class[] { dataflavor }).
+					invoke(contents, new Object[] { dataflavor.getField("stringFlavor").get(null) }));*/
+				insert = (String) getToolkit().getSystemClipboard().
+					getContents(this).getTransferData(DataFlavor.stringFlavor);
+			} catch (Exception exc) {
+				insert = clipboard;
+			}
+			//<java
+			//midp insert = clipboard;
+			StringBuffer filtered = new StringBuffer(insert.length());
+			for (int i = 0; i < insert.length(); i++) {
+				char ckey = insert.charAt(i);
+				if (((ckey > 0x1f) && (ckey < 0x7f)) ||
+						((ckey > 0x9f) && (ckey < 0xffff)) ||
+						(multiline && (ckey == '\n'))) {
+					filtered.append(ckey);
+				}
+			}
+			if (filtered.length() != insert.length()) {
+				insert = filtered.toString();
+			}
+		}
+		return changeField(component, text, insert, istart, iend, start, end);
+	}
+
+	/**
+	 *
+	 */
+	private boolean changeField(Object component, String text, String insert,
+			int movestart, int moveend, int start, int end) {
+		if ((insert == null) && (start == movestart) && (end == moveend)) {
+			return false;
+		}
+		movestart = Math.max(0, Math.min(movestart, text.length()));
+		moveend = Math.max(0, Math.min(moveend, text.length()));
+		if (insert != null) {
+			int min = Math.min(movestart, moveend);
+			set(component, "text", text.substring(0, min) + insert +
+				text.substring(Math.max(movestart, moveend)));
+			movestart = moveend = min + insert.length();
+			invoke(component, "action");
+		}
+		if (start != movestart) { setInteger(component, "start", movestart, 0); }
+		if (end != moveend) { setInteger(component, "end", moveend, 0); }
+		if ((insert != null) || (start != movestart) || (end != moveend)) {
+			validate(component);
+		}
+		return true;
+	}
+
+	/**
+	 *
+	 */
+	private boolean processList(Object component, boolean shiftdown, boolean controldown,
+			int keychar, int keycode, String itemname, String leafname) {
+		if ((keycode == KeyEvent.VK_UP) ||
+				(keycode == KeyEvent.VK_DOWN) || (keycode == KeyEvent.VK_PAGE_UP) ||
+				(keycode == KeyEvent.VK_PAGE_DOWN) ||
+				(keycode == KeyEvent.VK_HOME) || (keycode == KeyEvent.VK_END)) {
+			Object lead = get(component, "lead");
+			Object row = getListItem(component, component,
+				keycode, lead, itemname, leafname);
+			if (row != null) {
+				String selection = getString(component, "selection", "single");
+				if (shiftdown && (selection != "single") && (lead != null)) {
+					extend(component, lead, row, itemname, leafname);
+				}
+				else if (!controldown) {
+					selectItem(component, row, itemname, leafname);
+				}
+				setLead(component, lead, row);
+				Rectangle r = getRectangle(row, "bounds");
+				scrollToVisible(component, r.x, r.y, 0, r.height - 1);
+				return true;
+			}
+		}
+		else if (keychar == KeyEvent.VK_SPACE) {
+			select(component, get(component, "lead"),
+				itemname, leafname, shiftdown, controldown); //...
+			return true;
+		}
+		else if (controldown) {
+			if (((keycode == KeyEvent.VK_A) || (keycode == 0xBF)) && //KeyEvent.VK_SLASH
+					(getString(component, "selection", "single") != "single")) {
+				selectAll(component, true, itemname, leafname);
+				return true;
+			}
+			else if (keycode == 0xDC) { //KeyEvent.VK_BACK_SLASH
+				selectAll(component, false, itemname, leafname);
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 *
+	 */
+	private Object getListItem(Object component, Object scrollpane,
+			int keycode, Object lead, String itemname, String leafname) {
+		Object row = null;
+		if (keycode == KeyEvent.VK_UP) {
+			for (Object prev = get(component, itemname); prev != lead;
+					prev = getNextItem(component, prev, leafname)) {
+				row = prev; // component -> getParent(lead)
+			}
+		}
+		else if (keycode == KeyEvent.VK_DOWN) {
+			row = (lead == null) ? get(component, itemname) :
+				getNextItem(component, lead, leafname);
+		}
+		else if ((keycode == KeyEvent.VK_PAGE_UP) ||
+				(keycode == KeyEvent.VK_PAGE_DOWN)) {
+			Rectangle view = getRectangle(scrollpane, ":view");
+			Rectangle port = getRectangle(scrollpane, ":port");
+			Rectangle rl = (lead != null) ? getRectangle(lead, "bounds") : null;
+			int vy = (keycode == KeyEvent.VK_PAGE_UP) ?
+				view.y : (view.y + port.height - 2);
+			if ((keycode == KeyEvent.VK_PAGE_UP) &&
+					(rl != null) && (rl.y <= view.y)) {
+				vy -= port.height - 2;
+			}
+			if ((keycode == KeyEvent.VK_PAGE_DOWN) &&
+					(rl != null) && (rl.y + rl.height >= view.y + port.height - 2)) {
+				vy += port.height - 2;
+			}
+			for (Object item = get(component, itemname); item != null;
+					item = getNextItem(component, item, leafname)) {
+				Rectangle r = getRectangle(item, "bounds");
+				if (keycode == KeyEvent.VK_PAGE_UP) {
+					row = item;
+					if (r.y + r.height > vy) { break; }
+				} else {
+					if (r.y > vy) { break; }
+					row = item;
+				}
+			}
+		}
+		else if (keycode == KeyEvent.VK_HOME) {
+			row = get(component, itemname);
+		}
+		else if (keycode == KeyEvent.VK_END) {
+			for (Object last = lead; last != null;
+					last = getNextItem(component, last, leafname)) {
+				row = last;
+			}
+		}
+		return row;
+	}
+
+	/**
+	 *
+	 */
+	private void selectAll(Object component,
+			boolean selected, String itemname, String leafname) {
+		boolean changed = false;
+		for (Object item = get(component, itemname);
+				item != null; item = getNextItem(component, item, leafname)) {
+			if (setBoolean(item, "selected", selected, false)) {
+				repaint(component, null, item); changed = true;
+			}
+		}
+		set(component, "anchor", null);
+		if (changed) {invoke(component, "action"); }
+	}
+
+	/**
+	 *
+	 */
+	private void selectItem(Object component,
+			Object row, String itemname, String leafname) {
+		boolean changed = false;
+		for (Object item = get(component, itemname);
+				item != null; item = getNextItem(component, item, leafname)) {
+			if (setBoolean(item, "selected", (item == row), false)) {
+				repaint(component, null, item); changed = true;
+			}
+		}
+		set(component, "anchor", null);
+		if (changed) { invoke(component, "action"); }
+	}
+
+	/**
+	 *
+	 */
+	private void extend(Object component, Object lead,
+			Object row, String itemname, String leafname) {
+		Object anchor = get(component, "anchor");
+		if (anchor == null) { set(component, "anchor", anchor = lead); }
+		char select = 'n'; boolean changed = false;
+		for (Object item = get(component, itemname); // anchor - row
+				item != null; item = getNextItem(component, item, leafname)) {
+			if (item == anchor) select = (select == 'n') ? 'y' : 'r';
+			if (item == row) select = (select == 'n') ? 'y' : 'r';
+			if (setBoolean(item, "selected", (select != 'n'), false)) {
+				repaint(component, null, item); changed = true;
+			}
+			if (select == 'r') select = 'n';
+		}
+		if (changed) { invoke(component, "action"); }
+	}
+
+	/**
+	 *
+	 */
+	private void setLead(Object component, Object oldlead, Object lead) {
+		if (oldlead != lead) { //?
+			if (oldlead != null) { repaint(component, null, oldlead); }
+			set(component, "lead", lead);
+			repaint(component, null, lead);
+		}
+	}
+
+	/*public void repaint(int x, int y, int width, int height) {
+		System.out.println("repaint(" + x + ", " + y + ", " + width + ", " + height + ")");
+		super.repaint(x, y, width, height);
+	}*/
+			
+	/**
+	 *
+	 */
+	private void handleMouseEvent(int x, int y, int clickcount,
+			boolean shiftdown, boolean controldown, boolean popuptrigger,
+			int id, Object component, Object part) {
+		if (id == MouseEvent.MOUSE_ENTERED) {
+			setTimer(750L);
+		}
+		else if (id == MouseEvent.MOUSE_EXITED) {
+			hideTip();
+		}
+		if (!getBoolean(component, "enabled", true)) { return; }
+		String classname = getClass(component);
+		if (("button" == classname) || ("checkbox" == classname)) {
+			if ((id == MouseEvent.MOUSE_ENTERED) ||
+					(id == MouseEvent.MOUSE_EXITED) ||
+					(id == MouseEvent.MOUSE_PRESSED) ||
+					(id == MouseEvent.MOUSE_RELEASED)) {
+				if (id == MouseEvent.MOUSE_PRESSED) {
+					setFocus(component);
+				}
+				else if ((id == MouseEvent.MOUSE_RELEASED) &&
+						(mouseinside == component)) {
+					if ("checkbox" == classname) {
+						changeCheck(component, true);
+					}
+					else invoke(component, "action");
+				}
+				repaint(component);
+			}
+		}
+		else if ("combobox" == classname) {
+			boolean editable = getBoolean(component, "editable", true);
+			if (editable && (part == null)) {
+				Image icon = null;
+				int left = ((id == MouseEvent.MOUSE_PRESSED) &&
+					((icon = getIcon(component, "icon", null)) != null)) ?
+						icon.getWidth(this) : 0;
+				processField(x, y, clickcount, id, component, part, false, false, left);
+			}
+			else if (part != "icon") { // part = "down"
+				if (((id == MouseEvent.MOUSE_ENTERED) ||
+						(id == MouseEvent.MOUSE_EXITED)) && (mousepressed == null)) {
+					if (editable) { repaint(component, "combobox", part); }
+						else { repaint(component); }
+				}
+				else if (id == MouseEvent.MOUSE_PRESSED) {
+					Object combolist = get(component, "combolist");
+					if (combolist == null) {
+						setFocus(component);
+						repaint(component);
+						popup(component, classname);
+					} else {
+						closeup(component, combolist, null);
+					}
+				}
+				else if (id == MouseEvent.MOUSE_RELEASED) {
+					if (mouseinside != component) {
+						Object combolist = get(component, "combolist");
+						closeup(component, combolist,
+							(mouseinside == combolist) ? insidepart : null);
+					} else {
+						repaint(component);
+					}
+				}
+			}
+		}
+		else if ("combolist" == classname) {
+			if (!processScroll(x, y, id, component, part)) {
+				if ((id == MouseEvent.MOUSE_ENTERED) || (id == DRAG_ENTERED)) {
+					if (part != null) {
+						// repaint previous inside
+						set(component, "inside", part);
+						repaint(component, classname, part);
+					}
+				}
+				else if ((id == MouseEvent.MOUSE_EXITED) || (id == DRAG_EXITED)) {
+					if (part != null) {
+						set(component, "inside", null);
+						repaint(component, classname, part);
+					}
+				}
+				else if (id == MouseEvent.MOUSE_RELEASED) {
+					closeup(get(component, "combobox"), component, part);
+				}
+			}
+		}
+		else if (("textfield" == classname) || ("passwordfield" == classname)) {
+			processField(x, y, clickcount, id, component, part,
+				false, ("passwordfield" == classname), 0);
+		}
+		else if ("textarea" == classname) {
+			if (!processScroll(x, y, id, component, part)) {
+				processField(x, y, clickcount, id, component, part, true, false, 0);
+			}
+		}
+		//java>
+		else if ("desktop" == classname) {
+			if (id == MouseEvent.MOUSE_ENTERED) {
+				setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
+			}
+			else if (id == MouseEvent.MOUSE_EXITED) {
+				setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
+			}
+		}
+		//<java
+		else if ("spinbox" == classname) {
+			if (part == null) {
+				processField(x, y, clickcount, id, component, part, false, false, 0);
+			}
+			else { // part = "up" || "down"
+				if ((id == MouseEvent.MOUSE_ENTERED) ||
+						(id == MouseEvent.MOUSE_EXITED) ||
+						(id == MouseEvent.MOUSE_PRESSED) ||
+						(id == MouseEvent.MOUSE_RELEASED)) {
+					if (id == MouseEvent.MOUSE_PRESSED) {
+						setFocus(component);
+						if (processSpin(component, part)) { setTimer(375L); }
+						//settext: start end selection, parse exception...
+					}
+					else {
+						if (id == MouseEvent.MOUSE_RELEASED) {
+							setTimer(0L);
+						}
+					}
+					repaint(component, classname, part);
+				}
+			}
+		}
+		else if ("tabbedpane" == classname) {
+			if ((id == MouseEvent.MOUSE_ENTERED) ||
+					(id == MouseEvent.MOUSE_EXITED)) {
+				if ((part != null) && getBoolean(part, "enabled", true) &&
+						(getInteger(component, "selected", 0) != getIndex(component, "tab", part))) {
+					repaint(component, "tabbedpane", part);
+				}
+			}
+			else if ((part != null) && (id == MouseEvent.MOUSE_PRESSED) &&
+					getBoolean(part, "enabled", true)) {
+				int selected = getInteger(component, "selected", 0);
+				int current = getIndex(component, "tab", part);
+				if (selected == current) {
+					setFocus(component);
+					repaint(component, "tabbedpane", part);
+				}
+				else {
+					setInteger(component, "selected", current, 0);
+					//Object tabcontent = getItemImpl(component, "component", current);
+					//setFocus((tabcontent != null) ? tabcontent : component);
+					setNextFocusable(component, false);
+					repaint(component);
+					invoke(component, "action");
+				}
+			}
+		}
+		else if ("slider" == classname) {
+			if ((id == MouseEvent.MOUSE_PRESSED) ||
+					(id == MouseEvent.MOUSE_DRAGGED)) {
+				if (id == MouseEvent.MOUSE_PRESSED) {
+					setReference(component, block / 2, block / 2);
+					setFocus(component);
+				}
+				int minimum = getInteger(component, "minimum", 0);
+				int maximum = getInteger(component, "maximum", 100);
+				int value = getInteger(component, "value", 50);
+				Rectangle bounds = getRectangle(component, "bounds");
+				boolean horizontal = ("vertical" != get(component, "orientation"));
+				int newvalue = minimum +
+					(horizontal ? (mousex - referencex) : (mousey - referencey)) *
+					(maximum - minimum) /
+					((horizontal ? bounds.width : bounds.height) - block); //... +0.5
+				newvalue = Math.max(minimum, Math.min(newvalue, maximum));
+				if (value != newvalue) {
+					setInteger(component, "value", newvalue, 50);
+					invoke(component, "action");
+				}
+				if ((value != newvalue) || (id == MouseEvent.MOUSE_PRESSED)) {
+					repaint(component);
+				}
+			}
+		}
+		else if ("splitpane" == classname) {
+			if (id == MouseEvent.MOUSE_PRESSED) {
+				setReference(component, 2, 2);
+			}
+			else if (id == MouseEvent.MOUSE_DRAGGED) {
+				int divider = getInteger(component, "divider", -1);
+				boolean horizontal = ("vertical" != get(component, "orientation"));
+				int moveto = horizontal ? (mousex - referencex) :
+					(mousey - referencey);
+				Rectangle bounds = getRectangle(component, "bounds");
+				moveto = Math.max(0, Math.min(moveto,
+					Math.abs(horizontal ? bounds.width : bounds.height) - 5));
+				if (divider != moveto) {
+					setInteger(component, "divider", moveto, -1);
+					validate(component);
+				}
+			}
+			//java>
+			else if ((id == MouseEvent.MOUSE_ENTERED) && (mousepressed == null)) {
+				boolean horizontal = ("vertical" != get(component, "orientation"));
+				setCursor(Cursor.getPredefinedCursor(horizontal ?
+					Cursor.E_RESIZE_CURSOR : Cursor.S_RESIZE_CURSOR));
+			}
+			else if (((id == MouseEvent.MOUSE_EXITED) && (mousepressed == null)) ||
+					((id == MouseEvent.MOUSE_RELEASED) && (mouseinside != component))) {
+				setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
+			}
+			//<java
+		}
+		else if (("list" == classname) ||
+				("table" == classname) || ("tree" == classname)) {
+			if (!processScroll(x, y, id, component, part)) {
+				if (((id == MouseEvent.MOUSE_PRESSED)||
+						((id == MouseEvent.MOUSE_DRAGGED) &&
+							!shiftdown && !controldown)) &&
+						!popuptrigger) { // e.getClickCount() 
+					Rectangle view = getRectangle(component, ":view");
+					Rectangle viewport = getRectangle(component, ":port");
+					int my = mousey + view.y - referencey;
+					String itemname = ("list" == classname) ? "item" :
+						(("table" == classname) ? "row" : "node");
+					String subitem = ("tree" == classname) ? "node" : null;
+					for (Object item = get(component, itemname); item != null;) {
+						Rectangle r = getRectangle(item, "bounds");
+						if (my < r.y + r.height) {
+							if (id == MouseEvent.MOUSE_DRAGGED) { //!!!
+								scrollToVisible(component, r.x, r.y, 0, r.height - 1);
+							}
+							else if ("tree" == classname) {
+								int mx = mousex + view.x - referencex;
+								if (mx < r.x) {
+									if ((mx >= r.x - block) && (get(item, "node") != null)) {
+										boolean expanded = getBoolean(item, "expanded", true);
+										setBoolean(item, "expanded", !expanded, 	true);
+										selectItem(component, item, "node", "node");
+										setLead(component, get(component, "lead"), item);
+										setFocus(component);
+										validate(component);
+										invoke(component, expanded ? "collapse" : "expand"); //item
+									}
+									break;
+								}
+							}
+							if ((id != MouseEvent.MOUSE_DRAGGED) ||
+									!getBoolean(item, "selected", false)) {
+								select(component, item, itemname, subitem, shiftdown, controldown);
+								if (id != MouseEvent.MOUSE_DRAGGED) {
+									if (setFocus(component)) { repaint(component, classname, item); } //?
+								}
+							}
+							break;
+						}
+						item = getNextItem(component, item, subitem);
+					}
+				}
+		 	}
+		}
+		else if ("menubar" == classname) {
+			Object selected = get(component, "selected");
+			if (((id == MouseEvent.MOUSE_ENTERED) || (id == MouseEvent.MOUSE_EXITED)) &&
+					(part != null) && (selected == null)) {
+				repaint(component, classname, part);
+			}
+			else if ((part != null) && ((selected == null) ?
+				(id == MouseEvent.MOUSE_PRESSED) :
+					((id == MouseEvent.MOUSE_ENTERED) || (id == DRAG_ENTERED)))) {
+				set(component, "selected", part);
+				popup(component, classname);
+				repaint(component, classname, part);
+			}
+			else if ((id == MouseEvent.MOUSE_PRESSED) && (selected != null)) {
+				closeup(component);
+			}
+			else if (id == MouseEvent.MOUSE_RELEASED) {
+				if ((part != insidepart) &&
+						((insidepart == null) || (getClass(insidepart) != "menu"))) {
+					if ((insidepart != null) && getBoolean(insidepart, "enabled", true)) {
+						if (getClass(insidepart) == "checkboxmenuitem") {
+							changeCheck(insidepart, false);
+						}
+						else invoke(insidepart, "action");
+					}
+					closeup(component);
+				}
+			}
+		}
+		else if ("popupmenu" == classname) {
+			if (part != null) {
+				if ((id == MouseEvent.MOUSE_ENTERED) || (id == DRAG_ENTERED)) {
+					set(component, "selected", part);
+					popup(component, classname);
+					repaint(component, classname, part);
+				}
+				else if (id == MouseEvent.MOUSE_RELEASED) {
+					if ((insidepart == null) || (getClass(insidepart) != "menu")) {
+						Object menubar = part;
+						do {
+							menubar = getParent(menubar);
+						} while (getClass(menubar) != "menubar");
+						if ((insidepart != null) && getBoolean(insidepart, "enabled", true)) {
+							if (getClass(insidepart) == "checkboxmenuitem") {
+								changeCheck(insidepart, false);
+							}
+							else invoke(insidepart, "action");
+						}
+						closeup(menubar);
+					}
+				}
+				else if ((id == MouseEvent.MOUSE_EXITED) || (id == DRAG_EXITED)) {
+					if (getClass(part) != "menu") {
+						set(component, "selected", null);
+					}
+					repaint(component, classname, part);
+				}
+			}
+		}
+		else if ("dialog" == classname) {
+			if (part == "header") {
+				if (id == MouseEvent.MOUSE_PRESSED) {
+					referencex = mousex; referencey = mousey;
+					if (!getBoolean(component, "modal", false) &&
+							(get(content, "component") != component)) {
+						removeItemImpl(content, "component", component);
+						insertItem(content, "component", component, 0);
+						set(component, ":parent", content);
+						repaint(component);
+					}
+				}
+				else if (id == MouseEvent.MOUSE_DRAGGED) {
+					Rectangle bounds = getRectangle(component, "bounds");
+					int dx = mousex - referencex; int dy = mousey - referencey;
+					repaint(component,
+						bounds.x + Math.min(0, dx), bounds.y + Math.min(0, dy),
+						bounds.width + Math.abs(dx), bounds.height + Math.abs(dy));
+					bounds.x += dx; bounds.y += dy;
+					referencex = mousex; referencey = mousey;
+				}
+			}
+		}
+	}
+
+	/**
+	 *
+	 */
+	private void setReference(Object component, int x, int y) {
+		referencex = x; referencey = y;
+		for (; component != null; component = getParent(component)) {
+			Rectangle bounds = getRectangle(component, "bounds");
+			referencex += bounds.x; referencey += bounds.y;
+		}
+	}
+
+	/**
+	 *
+	 */
+	private void select(Object component, Object row, String first,
+			String child, boolean shiftdown, boolean controldown) {
+		String selection = getString(component, "selection", "single");
+		Object lead = null;
+		if (shiftdown && (selection != "single") &&
+				((lead = get(component, "lead")) != null)) {
+			extend(component, lead, row, first, child);
+		}
+		else {
+			if (controldown && (selection == "multiple")) {
+				setBoolean(row, "selected",
+					!getBoolean(row, "selected", false), false);
+				repaint(component, null, row);
+				invoke(component, "action");
+				set(component, "anchor", null);
+			}
+			else if (controldown && getBoolean(row, "selected", false)) {
+				for (Object item = row;
+						item != null; item = getNextItem(component, item, child)) {
+					if (setBoolean(item, "selected", false, false)) {
+						repaint(component, null, item);
+					}
+				}
+				invoke(component, "action");
+				set(component, "anchor", null);
+			}
+			else {
+				selectItem(component, row, first, child);
+			}
+		}
+		setLead(component, (lead != null) ? lead : get(component, "lead"), row);
+	}
+
+	/**
+	 *
+	 */
+	private Object getNextItem(Object component,
+			Object item, String subitem) {
+		if (subitem == null) { return get(item, ":next"); }
+		Object next = get(item, subitem);
+		if ((next == null) || !getBoolean(item, "expanded", true)) {
+			while ((item != component) && ((next = get(item, ":next")) == null)) {
+				item = getParent(item);
+			}
+		}
+		return next;
+	}
+	
+	/**
+	 *
+	 */
+	private void processField(int x, int y, int clickcount,
+			int id, Object component,
+			Object part, boolean multiline, boolean hidden, int left) {
+		if (id == MouseEvent.MOUSE_PRESSED) {
+			setReference(component, 2 + left, 2);
+			int mx = x - referencex;
+			int my = 0;
+			if (!multiline) {
+				mx += getInteger(component, "offset", 0);
+			} else {
+				Rectangle view = getRectangle(component, ":view");
+				mx += view.x - 1;
+				my = y - referencey + view.y - 1;
+			}
+			int caretstart = getCaretLocation(component, mx, my, hidden);
+			int caretend = caretstart;
+			//java>
+			if (clickcount > 1) {
+				String text = getString(component, "text", "");
+				while ((caretstart > 0) && ((clickcount == 2) ?
+					Character.isLetterOrDigit(text.charAt(caretstart - 1)) :
+						(text.charAt(caretstart - 1) != '\n'))) { caretstart--; }
+				while ((caretend < text.length()) && ((clickcount == 2) ?
+					Character.isLetterOrDigit(text.charAt(caretend)) :
+						(text.charAt(caretend) != '\n'))) { caretend++; }
+			}
+			//<java
+			setInteger(component, "start", caretstart, 0);
+			setInteger(component, "end", caretend, 0);
+			setFocus(component);
+			validate(component); // caret check only
+		}
+		else if (id == MouseEvent.MOUSE_DRAGGED) {
+			int mx = x - referencex;
+			int my = 0;
+			if (!multiline) {
+				mx += getInteger(component, "offset", 0);
+			} else {
+				Rectangle view = getRectangle(component, ":view");
+				mx += view.x - 1;
+				my = y - referencey + view.y - 1;
+			}
+			int dragcaret = getCaretLocation(component, mx, my, hidden);
+			if (dragcaret != getInteger(component, "end", 0)) {
+				setInteger(component, "end", dragcaret, 0);
+				validate(component); // caret check only
+			}
+		}
+		//java>
+		else if ((id == MouseEvent.MOUSE_ENTERED) && (mousepressed == null)) {
+			setCursor(Cursor.getPredefinedCursor(Cursor.TEXT_CURSOR));
+		}
+		else if (((id == MouseEvent.MOUSE_EXITED) && (mousepressed == null)) ||
+			((id == MouseEvent.MOUSE_RELEASED) &&
+				((mouseinside != component) || (insidepart != null)))) {
+			setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
+		}
+		//<java
+	}
+
+	/**
+	 *
+	 */
+	private int getCaretLocation(Object component, int x, int y, boolean hidden) {
+		String text = getString(component, "text", "");
+		FontMetrics fm = getFontMetrics(getFont());
+		for (int i = 0, j = 0; true; i = j + 1) {
+			j = text.indexOf('\n', i);
+			if ((j == -1) || y < fm.getHeight()) {
+				if (j == -1) { j = text.length(); }
+				for (int k = i; k < j; k++) {
+					int charwidth = fm.charWidth(hidden ? '*' : text.charAt(k));
+					if (x <= (charwidth / 2)) {
+						return k;
+					}
+					x -= charwidth;
+				}
+				return j;
+			}
+			y -= fm.getHeight();
+		}
+	}
+	
+	/**
+	 *
+	 */
+	private boolean processScroll(int x, int y,
+			int id, Object component, Object part) {
+		if ((part == "up") || (part == "down") ||
+				(part == "left") || (part == "right")) {
+			if ((id == MouseEvent.MOUSE_ENTERED) ||
+					(id == MouseEvent.MOUSE_EXITED) ||
+					(id == MouseEvent.MOUSE_PRESSED) ||
+					(id == MouseEvent.MOUSE_RELEASED)) {
+				if (id == MouseEvent.MOUSE_PRESSED) {
+					if (processScroll(component, part)) {
+						setTimer(300L); return true;
+					}
+				}
+				else {
+					if (id == MouseEvent.MOUSE_RELEASED) { setTimer(0L); }
+					repaint(component, null, part);
+				}
+			}
+		}
+		else if ((part == "uptrack") || (part == "downtrack") ||
+				(part == "lefttrack") || (part == "righttrack")) {
+			if (id == MouseEvent.MOUSE_PRESSED) {
+				if (processScroll(component, part)) {
+					setTimer(300L);
+				}
+			}
+			else if (id == MouseEvent.MOUSE_RELEASED) {
+				setTimer(0L);
+			}
+		}
+		else if ((part == "vknob") || (part == "hknob")) {
+			if (id == MouseEvent.MOUSE_PRESSED) {
+				Rectangle port = getRectangle(component, ":port");
+				Rectangle view = getRectangle(component, ":view");
+				if (part == "hknob") {
+					referencex = x -
+						view.x * (port.width - 2 * block) / view.width;
+				} else {
+					referencey = y -
+						view.y * (port.height - 2 * block) / view.height;
+				}
+			}
+			else if (id == MouseEvent.MOUSE_DRAGGED) {
+				Rectangle port = getRectangle(component, ":port");
+				Rectangle view = getRectangle(component, ":view");
+				if (part == "hknob") {
+					int viewx = (x - referencex) *
+						view.width / (port.width - 2 * block);
+					viewx = Math.max(0, Math.min(viewx, view.width - port.width + 2));
+					if (view.x != viewx) {
+						view.x = viewx;
+						repaint(component, null, "horizontal");
+					}
+				} else {
+					int viewy = (y - referencey) *
+						view.height / (port.height - 2 * block);
+					viewy = Math.max(0, Math.min(viewy, view.height - port.height + 2));
+					if (view.y != viewy) {
+						view.y = viewy;
+						repaint(component, null, "vertical");
+					}
+				}
+			}
+		}
+		else if (part == "corner") {
+				part = "corner"; // compiler bug
+		}
+		else {
+			if (id == MouseEvent.MOUSE_PRESSED) {
+				Rectangle port = getRectangle(component, ":port");
+				setReference(component, port.x + 1, port.y + 1);
+			}
+			return false;
+		}
+		return true;
+	}
+
+	/**
+	 *
+	 */
+	private boolean processScroll(Object component, Object part) {
+		Rectangle view = getRectangle(component, ":view");
+		Rectangle port = ((part == "left") || (part == "up")) ? null :
+			getRectangle(component, ":port");
+		int dx = 0; int dy = 0;
+		if (part == "left") { dx = -10; }
+		else if (part == "lefttrack") { dx = -port.width; }
+		else if (part == "right") { dx = 10; }
+		else if (part == "righttrack") { dx = port.width; }
+		else if (part == "up") { dy = -10; }
+		else if (part == "uptrack") { dy = -port.height; }
+		else if (part == "down") { dy = 10; }
+		else if (part == "downtrack") { dy = port.height; }
+		if (dx != 0) {
+			dx = (dx < 0) ? Math.max(-view.x, dx) :
+				Math.min(dx, view.width - port.width + 2 - view.x);
+		}
+		else if (dy != 0) {
+			dy = (dy < 0) ? Math.max(-view.y, dy) :
+				Math.min(dy, view.height - port.height + 2 - view.y);
+		}
+		else return false;
+		view.x += dx; view.y += dy;
+		repaint(component, null, (dx != 0) ? "horizontal" : "vertical");
+		return (((part == "left") || (part == "lefttrack")) && (view.x > 0)) ||
+			(((part == "right") || (part == "righttrack")) &&
+				(view.x < view.width - port.width + 2)) ||
+			(((part == "up") || (part == "uptrack")) && (view.y > 0)) ||
+			(((part == "down") || (part == "downtrack")) &&
+				(view.y < view.height - port.height + 2));
+	}
+
+	/**
+	 *
+	 */
+	private boolean processSpin(Object component, Object part) {
+		String text = getString(component, "text", null);
+		if (text != null) {
+			try {
+				String value = String.valueOf(
+					Integer.parseInt(text) + ((part == "up") ? 1 : -1));
+				setString(component, "text", value, null);
+				setInteger(component, "start", value.length(), 0);
+				setInteger(component, "end", 0, 0);
+				repaint(component, "spinbox", null);
+				invoke(component, "action");
+				return true;
+			} catch (NumberFormatException nfe) {}
+		}
+		return false;
+	}
+
+	//java>
+	/*public void setEventHandler(Object component, Object eventhandler) {
+		set(component, ":handler", eventhandler);
+	}*/
+	
+	/**
+	 *
+	 */
+	private void invoke(Object component, String event) {
+		Method method = (Method) get(component, event);
+		if (method != null) {
+			try {
+				method.invoke(this, null);
+			} catch (InvocationTargetException ite) {
+				ite.getTargetException().printStackTrace();
+			} catch (Exception exc) {
+				exc.printStackTrace();
+			}
+		}
+	}
+	//<java
+	/*midp
+	private void invoke(Object component, String event) {
+			String action = (String) get(component, event);
+			if (action != null) { handle(component, action); }
+	}
+	protected void handle(Object source, String action) {
+	}
+	midp*/
+
+	/**
+	 *
+	 */
+	private boolean findComponent(Object component, int x, int y) {
+		if (component == content) {
+			mouseinside = insidepart = null;
+			mousex = x; mousey = y;
+		}
+		if (!getBoolean(component, "visible", true)) { return false; }
+		Rectangle bounds = getRectangle(component, "bounds");
+		if ((bounds == null) || !(bounds.contains(x, y))) { return false; } //java
+		//midp if ((bounds == null) || (x < bounds.x) || (x - bounds.x >= bounds.width) ||
+		//midp 	(y < bounds.y) || (y - bounds.y >= bounds.height)) { return false; }
+		mouseinside = component;
+		x -= bounds.x; y -= bounds.y;
+		String classname = getClass(component);
+
+		if ("combobox" == classname) {
+			if (getBoolean(component, "editable", true) && (x <= bounds.width - block)) {
+				Image icon = getIcon(component, "icon", null);
+				insidepart = ((icon != null) && (x <= 2 + icon.getWidth(this))) ?
+					"icon" : null;
+			} else {
+				insidepart = "down";
+			}
+		}
+		else if ("combolist" == classname) {
+			if (!findScrollPane(component, x, y, bounds)) {
+				y += getRectangle(component, ":view").y;
+				for (Object choice = get(get(component, "combobox"), "choice");
+						choice != null; choice = get(choice, ":next")) {
+					Rectangle r = getRectangle(choice, "bounds");
+					if ((y >= r.y) && (y < r.y + r.height)) {
+						insidepart = choice; break;
+					}
+				}
+			}
+		}
+		else if ("textarea" == classname) {
+			findScrollPane(component, x, y, bounds);
+		}
+		else if ("tabbedpane" == classname) {
+			Object tabcontent = getItemImpl(component,
+				"component", getInteger(component, "selected", 0));
+			if ((tabcontent == null) || !findComponent(tabcontent, x, y)) {
+				for (Object comp = get(component, "tab");
+						comp != null; comp = get(comp, ":next")) {
+					Rectangle r = getRectangle(comp, "bounds");
+					if (r.contains(x, y)) { //java
+					//midp if ((x >= r.x) && (x - r.x < r.width) && (y >= r.y) && (y - r.y < r.height)) {
+						insidepart = comp; break;
+					}
+				}
+			}
+		}
+		else if (("panel" == classname) || ("desktop" == classname) ||
+				("dialog" == classname)) {
+			if (("dialog" == classname) &&
+					(y < 4 + getInteger(component, "titleheight", 0))) {
+				insidepart = "header";
+			} else {
+				for (Object comp = get(component, "component");
+						comp != null; comp = get(comp, ":next")) {
+					if (findComponent(comp, x, y)) { break; }
+					if (("desktop" == classname) &&
+							getBoolean(comp, "modal", false)) { break; } // && dialog
+				}
+			}
+		}
+		else if ("spinbox" == classname) {
+			insidepart = (x <= bounds.width - block) ? null :
+				((y <= bounds.height / 2) ? "up" : "down");
+		}
+		else if ("splitpane" == classname) { 
+			Object comp1 = get(component, "component");
+			if (comp1 != null) {
+				if (!findComponent(comp1, x, y)) {
+					Object comp2 = get(comp1, ":next");
+					if (comp2 != null) {
+						findComponent(comp2, x, y);
+					}
+				}
+			}
+		}
+		else if ("list" == classname) {
+			findScrollPane(component, x, y, bounds);
+		}
+		else if ("table" == classname) {
+			findScrollPane(component, x, y, bounds);
+		}
+		else if ("tree" == classname) {
+			findScrollPane(component, x, y, bounds);
+		}
+		else if ("menubar" == classname) {
+			for (Object menu = get(component, "menu");
+					menu != null; menu = get(menu, ":next")) {
+				Rectangle r = getRectangle(menu, "bounds");
+				if ((x >= r.x) && (x < r.x + r.width)) {
+					insidepart = menu; break;
+				}
+			}
+		}
+		else if ("popupmenu" == classname) {
+			for (Object menu = get(get(component, "menu"), "menu");
+					menu != null; menu = get(menu, ":next")) {
+				Rectangle r = getRectangle(menu, "bounds");
+				if ((y >= r.y) && (y < r.y + r.height)) {
+					insidepart = menu; break;
+				}
+			}
+		}
+		return true;
+	}
+
+	/**
+	 *
+	 */
+	private boolean findScrollPane(Object component,
+			int x, int y, Rectangle bounds) {
+		Rectangle port = getRectangle(component, ":port");
+		if ((x < port.x) || (y < port.y) ||
+				((x >= port.x + port.width) && (y >= port.y + port.height))) {
+			insidepart = "corner";
+		}
+		else if ((x >= port.x + port.width) || (y >= port.y + port.height)) {
+			boolean horizontal = (y >= port.y + port.height);
+			int p = horizontal ? (x - port.x) : (y - port.y);
+			int portsize = horizontal ? port.width : port.height;
+			int button = Math.min(block, portsize / 2);
+			if (p < button) {
+				insidepart = horizontal ? "left" : "up";
+			}
+			else if (p >= portsize - button) {
+				insidepart = horizontal ? "right" : "down";
+			}
+			else {
+				Rectangle view = getRectangle(component, ":view");
+				int viewp = horizontal ? view.x : view.y;
+				int viewsize = horizontal ? view.width : view.height;
+				int track = portsize - (2 * button);
+				int knob = Math.min(track,
+					Math.max(track * (portsize - 2) / viewsize, 6));
+				int decrease = viewp * (track - knob) / (viewsize - portsize + 2);
+				if (p < button + decrease) {
+					insidepart = horizontal ? "lefttrack" : "uptrack";
+				}
+				else if (p < button + decrease + knob) {
+					insidepart = horizontal ? "hknob" : "vknob";
+				}
+				else {
+					insidepart = horizontal ? "righttrack" : "downtrack";
+				}
+			}
+		}
+		else { return false; }
+		return true;
+	}
+
+	/**
+	 *
+	 */
+	private void repaint(Object component, Object classname, Object part) {
+		Rectangle b = getRectangle(component, "bounds");
+		if ((classname == "combobox") || (classname == "spinbox")) {
+			boolean down = (part == "up") || (part == "down"); // else text
+			repaint(component, down ? (b.x + b.width - block) : b.x, b.y,
+				down ? block : (b.width - block), b.height);
+		}
+		//else if (classname == "dialog") {}
+			//int titleheight = getInteger(component, "titleheight", 0);
+		//else if (classname == "splitpane") {}
+		else if ((classname == "tabbedpane") ||
+				(classname == "menubar") || (classname == "popupmenu")) {
+			Rectangle r = getRectangle(part, "bounds");
+			repaint(component, b.x + r.x, b.y + r.y,
+				(classname == "popupmenu") ? b.width : r.width, r.height);
+		}
+		else //if ((classname == "combolist") || (classname == "textarea") ||
+				{//(classname == "list") || (classname == "table") || (classname == "tree")) {
+			Rectangle port = getRectangle(component, ":port");
+			if (part == "left") {
+				repaint(component, b.x + port.x, b.y + b.height - block, block, block);
+			}
+			else if (part == "right") {
+				repaint(component, b.x + port.x + port.width - block, b.y + b.height - block, block, block);
+			}
+			else if (part == "up") {
+				repaint(component, b.x + b.width - block, b.y + port.y, block, block);
+			}
+			else if (part == "down") {
+				repaint(component, b.x + b.width - block, b.y + port.y + port.height - block, block, block);
+			}
+			else if (part == "horizontal") { // horizontaly center part
+				repaint(component, b.x + port.x, b.y, port.width, b.height);
+			}
+			else if (part == "vertical") {
+				repaint(component, b.x, b.y + port.y, b.width, port.height);
+			}
+			else if (part == "text") { //textarea
+				repaint(component, b.x + port.x, b.y + port.y, port.width, port.height);
+			}
+			else {
+				Rectangle view = getRectangle(component, ":view");
+				Rectangle r = getRectangle(part, "bounds");
+				if ((r.y + r.height >= view.y) && (r.y <= view.y + port.height)) {
+					repaint(component, b.x + port.x, b.y + port.y - view.y + 1 + r.y,
+						port.width, r.height);
+					//? need cut item rectangle above/bellow viewport
+				}
+			}
+		}
+	}
+	
+	/**
+	 *
+	 */
+	private void validate(Object component) {
+		repaint(component);
+		Rectangle bounds = getRectangle(component, "bounds");
+		bounds.width = -1 * Math.abs(bounds.width);
+	}
+	
+	/**
+	 *
+	 */
+	private void repaint(Object component) {
+		Rectangle bounds = getRectangle(component, "bounds");
+		if (bounds != null) {
+			repaint(component, bounds.x, bounds.y, bounds.width, bounds.height);
+		}
+	}
+
+	/**
+	 *
+	 */
+	private void repaint(Object component, int x, int y, int width, int height) {
+		while ((component = getParent(component)) != null) {
+			Rectangle bounds = getRectangle(component, "bounds");
+			x += bounds.x;
+			y += bounds.y;
+		}
+		repaint(x, y, width, height);
+	}
+
+	/*private void clip(Graphics g,
+			Rectangle clip, int x, int y, int width, int height) {
+		int x1 = Math.max(clip.x, x); 
+		int y1 = Math.max(clip.y, y);
+		int x2 = Math.min(clip.x + clip.width, x + width);
+		int y2 = Math.min(clip.y + clip.height, y + height);
+		g.setClip(x1, y1, x2 - x1, y2 - y1);
+	}*/
+
+	/**
+	 *
+	 */
+	public boolean requestFocus(Object component) {
+		if (checkFocusable(component, true)) {
+			setFocus(component); return true;
+		}
+		return false;
+	}
+
+	/**
+	 *
+	 */
+	private boolean setFocus(Object component) {
+		if (!focusinside) { //java
+			requestFocus(); //java
+		} //java
+		if (focusowner != component) {
+			Object focused = focusowner;
+			focusowner = component;
+			if (focused != null) {
+				//mouseEvent(null, FocusEvent.FOCUS_LOST, focused, null, null);
+				repaint(focused);
+				//focusGained(component);
+			}
+			return true;
+		}
+		return false;
+	}
+	
+	/**
+	 * @return next focusable component is found (not the first of the desktop/dialog)
+	 */
+	private boolean setNextFocusable(Object current, boolean outgo) {
+		boolean consumed = true;
+		for (Object next = null, component = current; true; component = next) {
+			next = get(component, "component"); // check first subcomponent
+			if (next == null) { next = get(component, ":next"); } // check next component
+			while (next == null) { // find the next of the parents, or the topmost
+				component = getParent(component); // current is not on the desktop
+				if (component == null) { return false; }
+				if ((component == content) || ((getClass(component) == "dialog") &&
+						(!outgo  || getBoolean(component, "modal", false)))) {
+					consumed = false; // find next focusable but does not consume event
+					next = component; // the topmost (desktop or modal dialog)
+				}
+				else {
+					next = get(component, ":next");
+				}
+			}
+			if (next == current) { return false; } // one fucusable, no loop
+			if (checkFocusable(next, false)) {
+				setFocus(next);
+				return consumed;
+			}
+		}
+	}
+
+	//java>
+	/**
+	 * @return previous focusable component is found (not the last of the desktop/dialog)
+	 */
+	private boolean setPreviousFocusable(Object component, boolean outgo) {
+		for (int i = 0; i < 2; i++) { // 0 is backward direction
+			Object previous = getPreviousFocusable(component, null, true, false, (i == 0), outgo);
+			if (previous != null) {
+				setFocus(previous);
+				return (i == 0);
+			}
+		}
+		return false;
+	}
+	
+	/**
+	 * For the starting component search its parent direction for a focusable component, and then
+	 * its next component (if not search backward from the component).<br>
+	 * For its parent components check its first component, the current one, and its parent direction
+	 * (backward search), or its parent, then next component (forward direction).<br>
+	 * For the rest components check the next, then the first subcomponent direction, and finally
+	 * check whether the component is focusable.
+	 */
+	private Object getPreviousFocusable(Object component,
+			Object block, boolean start, boolean upward, boolean backward, boolean outgo) {
+		Object previous = null;
+		if ((component != null) && (component != block)) {
+			boolean go = ((getClass(component) != "dialog") ||
+				(outgo && !getBoolean(component, "modal", false)));
+			if (!start && !upward && go) {
+				previous = getPreviousFocusable(get(component, ":next"), block, false, false, backward, outgo);
+			}
+			if ((previous == null) && ((upward && backward) || (!start && !upward))) {
+				previous = getPreviousFocusable(get(component, "component"), block, false, false, backward, outgo);
+				if ((previous == null) && checkFocusable(component, false)) {
+					previous = component;
+				}
+			}
+			if ((previous == null) && (start || upward) && go) {
+				previous = getPreviousFocusable(getParent(component), component, false, true, backward, outgo);
+			}
+			if ((previous == null) && (start || upward) && !backward && go) {
+				previous = getPreviousFocusable(get(component, ":next"), block, false, false, backward, outgo);
+			}
+		}
+		return previous;
+	}
+	//<java
+	
+	/**
+	 *
+	 */
+	private boolean checkFocusable(Object component, boolean forced) {
+		String classname = getClass(component);
+		//midp forced=true;
+		if ((classname == "button") || (classname == "checkbox") ||
+				(classname == "combobox") || (classname == "textfield") ||
+				(classname == "passwordfield") || (classname == "textarea") ||
+				(classname == "spinbox") || (classname == "slider") ||
+				(classname == "list") || (classname == "table") || (classname == "tree") ||
+				(classname == "tabbedpane") || (forced && (classname == "splitpane"))) {
+			for (Object comp = component; comp != null;) {
+				if (!getBoolean(comp, "enabled", true) || !getBoolean(comp, "visible", true)) {
+					return false;
+				}
+				Object parent = getParent(comp);
+				if ((getClass(parent) == "tabbedpane") && (getItemImpl(parent,
+					"component", getInteger(parent, "selected", 0)) != comp)) { return false; }
+				comp = parent;
+			}
+			return true;
+		}
+		return false;
+	}
+
+	/*if (cliparea == null) { add(cliparea = new TextArea()); }
+	cliparea.setText(content);
+	cliparea.selectAll();
+	cliparea.dispatchEvent(new KeyEvent(this, KeyEvent.KEY_TYPED, 0L, KeyEvent.CTRL_MASK, 0, (char) 3));
+	cliparea.selectAll();
+
+	if (cliparea == null) { add(cliparea = new TextArea()); }
+	cliparea.dispatchEvent(new KeyEvent(this, KeyEvent.KEY_TYPED, 0L, KeyEvent.CTRL_MASK, 0, (char) 22));
+	cliparea.getText(); return cliparea.getText();*/
+
+	// ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
+
+	/**
+	 *
+	 */
+	public Object create(String classname) {
+		for (int i = 0; i < dtd.length; i += 3) {
+			if (dtd[i].equals(classname)) {
+				return createImpl((String) dtd[i]);
+			}
+		}
+		throw new IllegalArgumentException("unknown " + classname);
+	}
+	
+	/**
+	 * @return classname
+	 */
+	public String getClass(Object component) {
+		return (String) get(component, ":class");
+	}
+
+	/**
+	 *
+	 */
+	public Object getDesktop() {
+		return content;
+	}
+
+	/**
+	 *
+	 */
+	private Object createImpl(String classname) {
+		return new Object[] { ":class", classname, null };
+	}
+	
+	/**
+	 *
+	 */
+	private boolean set(Object component, Object key, Object value) {
+		Object[] previous = (Object[]) component;
+		for (Object[] entry = previous; entry != null;
+				entry = (Object[]) entry[2]) {
+			if (entry[0] == key) {
+				if (value != null) { // set the row's value
+					Object oldvalue = entry[1];
+					entry[1] = value;
+					return !value.equals(oldvalue);
+				}
+				else { // remove the row
+					previous[2] = entry[2];
+					entry[2] = null;
+					return true;
+				}
+			}
+			previous = entry;
+		}
+		if (value != null) { // append a new row
+			previous[2] = new Object[] { key, value, null };
+			return true;
+		}
+		return false;
+	}
+
+	/**
+	 *
+	 */
+	private Object get(Object component, Object key) {
+		for (Object[] entry = (Object[]) component; entry != null;
+				entry = (Object[]) entry[2]) {
+			if (entry[0] == key) {
+				return entry[1];
+			}
+		}
+		return null;
+	}
+
+	/**
+	 *
+	 */
+	public int getCount(Object component) {
+		return getCount(component, null);
+	}
+
+	/**
+	 *
+	 */
+	public int getCount(Object component, String key) {
+		return getItemCountImpl(component, getComponentName(component, key));
+	}
+	
+	/**
+	 *
+	 */
+	public Object getParent(Object component) {
+		return get(component, ":parent");
+	}
+
+	/**
+	 * @return the first selected index or -1
+	 */
+	public int getSelectedIndex(Object component) {
+		int i = 0;
+		for (Object item = get(component, getComponentName(component, null));
+				item != null; item = get(item, ":next")) {
+			if (getBoolean(item, "selected", false)) { return i; }
+			i++;
+		}
+		return -1;
+	}
+
+	/**
+	 *
+	 */
+	public void removeAll(Object component) {
+		removeAll(component, null);
+	}
+
+	/**
+	 *
+	 */
+	public void removeAll(Object component, String key) {
+		String list = getComponentName(component, key);
+		if (get(component, list) != null) {
+			set(component, list, null);
+			update(component, "validate");
+		}
+	}
+
+	/**
+	 *
+	 */
+	private int getItemCountImpl(Object component, Object key) {
+		int i = 0;
+		for (component = get(component, key); component != null;
+				component = get(component, ":next")) {
+			i++;
+		}
+		return i;
+	}
+
+	/**
+	 *
+	 */
+	public Object getItem(Object component, int index) {
+		return getItem(component, null, index);
+	}
+	
+	/**
+	 *
+	 */
+	public Object[] getItems(Object component) {
+		return getItems(component, null);
+	}
+
+	/**
+	 *
+	 */
+	public Object getItem(Object component, String key, int index) {
+		return getItemImpl(component, getComponentName(component, key), index);
+	}
+
+	/**
+	 *
+	 */
+	public Object[] getItems(Object component, String key) {
+		key = getComponentName(component, key);
+		Object[] items = new Object[getItemCountImpl(component, key)];
+		component = get(component, key);
+		for (int i = 0; i < items.length; i++) {
+			items[i] = component;
+			component = get(component, ":next");
+		}
+		return items;
+	}
+
+	/**
+	 *
+	 */
+	private Object getItemImpl(Object component, Object key, int index) {
+		int i = 0;
+		for (Object item = get(component, key);
+				item != null; item = get(item, ":next")) {
+			if (i == index) { return item; }
+			i++;
+		}
+		return null;
+	}
+
+	/**
+	 *
+	 */
+	private int getIndex(Object component, Object key, Object value) {
+		int index = 0;
+		for (Object item = get(component, key);
+				item != null; item = get(item, ":next")) {
+			if (value == item) { return index; }
+			index++;
+		}
+		return -1;
+	}
+
+	/**
+	 *
+	 */
+	public void add(Object component) {
+		add(content, component, 0);
+	}
+
+	/**
+	 *
+	 */
+	public void add(Object parent, Object component) {
+		add(parent, component, -1);
+	}
+
+	/**
+	 *
+	 */
+	public void add(Object parent, Object component, int index) {
+		addImpl(parent, component, index);
+		update(component, "validate");
+		if (parent == content) {
+			setNextFocusable(component, false);
+		}
+	}
+
+	/**
+	 *
+	 */
+	private void addItem(Object parent, Object key, Object component) {
+		insertItem(parent, key, component, -1);
+	}
+
+	/**
+	 *
+	 */
+	private void insertItem(Object parent,
+			Object key, Object component, int index) {
+		Object target = get(parent, key);
+		if (index == -1) {
+			while (target != null) {
+				target = get(parent = target, key = ":next");
+			}
+		}
+		else {
+			for (int i = 0; i < index; i++) {
+				target = get(parent = target, key = ":next");
+			}
+			set(component, ":next", get(parent, key));
+		}
+		set(parent, key, component);
+	}
+
+	/**
+	 *
+	 */
+	public void remove(Object component) {
+		Object parent = getParent(component);
+		String parentclass = getClass(parent);
+		String classname = getClass(component);
+		String listkey = ("combobox" == parentclass) ? "choice" :
+			(("tabbedpane" == parentclass) && ("tab" == classname)) ? "tab" :
+			("list" == parentclass) ? "item" :
+			(("table" == parentclass) && ("column" == classname)) ? "column" :
+			(("table" == parentclass) && ("row" == classname)) ? "row" :
+			("row" == parentclass) ? "cell" :
+			(("tree" == parentclass) || ("node" == parentclass)) ? "node" :
+			(("menubar" == parentclass) || ("menu" == parentclass)) ? "menu" :
+			(("panel" == parentclass) || ("desktop" == parentclass) ||
+				("splitpane" == parentclass) || ("dialog" == parentclass) ||
+				("tabbedpane" == parentclass)) ? "component" : null;
+		if (listkey == null) { throw new IllegalArgumentException("unknown " + classname); }
+		update(component, "validate");
+		removeItemImpl(parent, listkey, component);
+		// reuest focus for its parent if the component (or subcomponent) is currently focused
+		for (Object comp = focusowner; comp != null; comp = getParent(comp)) {
+			if (comp == component) {
+				setNextFocusable(parent, false); break;
+			}
+		}
+	}
+
+	/**
+	 *
+	 */
+	private void removeItemImpl(Object parent, Object key, Object component) {
+		Object target = get(parent, key);
+		while (target != component) {
+			target = get(parent = target, key = ":next"); // (target != null)
+		}
+		set(parent, key, get(target, ":next"));
+		set(target, ":next", null);
+		set(target, ":parent", null);
+	}
+
+	/*
+	private void removeItemImpl(Object parent, String key, int index) {
+		Object target = get(parent, key);
+		for (int i = 0; i < index; i++) {
+			target = get(parent = target, key = ":next");
+		}
+		set(parent, key, get(target, ":next"));
+		set(target, ":next", null);
+	}*/
+
+	/**
+	 *
+	 */
+	private String getComponentName(Object parent, Object classname) {
+		String parentclass = getClass(parent);
+		String compname = ("combobox" == parentclass) ? "choice" :
+			("list" == parentclass) ? "item" :
+			("row" == parentclass) ? "cell" :
+			(("tree" == parentclass) || ("node" == parentclass)) ? "node" :
+			(("menubar" == parentclass) || ("menu" == parentclass)) ? "menu" :
+			(("panel" == parentclass) || ("desktop" == parentclass) ||
+				("splitpane" == parentclass) || ("dialog" == parentclass)) ?
+				"component" : null;
+		if ((compname != null) && ((classname == null) ||
+				compname.equals(classname))) { return compname; }
+		if ("tabbedpane" == parentclass) {
+			if ("tab".equals(classname)) { return "tab"; }
+			if ((classname == null) || "component".equals(classname)) { return "component"; }
+		}
+		else if ("table" == parentclass) {
+			if ("column".equals(classname)) { return "column"; }
+			if ((classname == null) || "row".equals(classname)) { return "row"; }
+		}
+		throw new IllegalArgumentException("unknown " + classname);
+	}
+
+	/**
+	 *
+	 */
+	public Object find(String name) {
+		return find(content, name);
+	}
+
+	/**
+	 *
+	 */
+	public Object find(Object component, String name) {
+		if (name.equals(get(component, "name"))) { return component; }
+		String classname = getClass(component);
+		String childname = null; String childname2 = null;
+		if (("panel" == classname) || ("desktop" == classname) ||
+				("splitpane" == classname) || ("dialog" == classname)) { childname = "component"; }
+		else if ("combobox" == classname) { childname = "choice"; }
+		else if ("tabbedpane" == classname) { childname = "tab"; childname2 = "component"; }
+		else if ("list" == classname) { childname = "item"; }
+		else if ("table" == classname) { childname = "column"; childname2 = "row"; }
+		else if ("row" == classname) { childname = "cell"; }
+		else if (("tree" == classname) || ("node" == classname)) { childname = "node"; }
+		else if (("menubar" == classname) || ("menu" == classname)) { childname = "menu"; }
+		while (childname != null) {
+			for (Object comp = get(component, childname);
+					comp != null; comp = get(comp, ":next")) {
+				Object found = find(comp, name);
+				if (found != null) { return found; }
+			}
+			childname = childname2; childname2 = null;
+		}
+		return null;
+	}
+
+	// ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
+
+	/*public String toXML(Object component) {
+		StringBuffer xml = new StringBuffer();
+		Object[] entry = (Object[]) component;
+		String classname = (String) entry[1];
+		while ((entry = (Object[]) entry[2]) != null) {
+			try {
+				Object[] definition = getDefinition(component, (String) entry[0], null);
+				if (definition != null) {
+					xml.append(" " + entry[0] + "=\"" + entry[1] + "\"");
+				}
+			} catch (IllegalArgumentException exc) {}
+		}
+		return xml.toString();
+	}*/	
+
+	/**
+	 *
+	 */
+	public Object parse(String path) throws Exception {
+		InputStream inputstream = null;
+		try { //java
+			//midp inputstream = getClass().getResourceAsStream(path);
+			inputstream = getClass().getResourceAsStream(path); //java
+			//System.out.println("> " + path + " " + inputstream);
+		} catch (Throwable e) {} //java
+		//if (inputstream == null) { // applet code
+		//	inputstream = new URL(getCodeBase(), path).openStream();
+		//}
+		return parse(inputstream); //, Object handler
+	}
+
+	/**
+	 *
+	 */
+	public Object parse(InputStream inputstream) throws Exception {
+		return parse(inputstream, true);
+	}
+
+	/**
+	 *
+	 */
+	protected void parseXML(InputStream inputstream) throws Exception {
+		parse(inputstream, false);
+	}
+
+	/**
+	 *
+	 */
+	protected void startElement(String name, Hashtable attributelist) {}
+
+	/**
+	 *
+	 */
+	protected void characters(String text) {}
+
+	/**
+	 *
+	 */
+	protected void endElement() {}
+
+	/**
+	 *
+	 */
+	private Object parse(InputStream inputstream, boolean validate) throws Exception {
+		BufferedReader reader = new BufferedReader(new InputStreamReader(inputstream)); //java
+		//midp InputStreamReader reader = new InputStreamReader(inputstream);
+		Object[] parentlist = null;
+		Object current = null;
+		Hashtable attributelist = null;
+		StringBuffer text = new StringBuffer();
+		for (int c = reader.read(); c != -1;) {
+			if (c == '<') {
+				if ((c = reader.read()) == '/') { //endtag
+					if (text.length() > 0) {
+						if (text.charAt(text.length() - 1) == ' ') {
+							text.setLength(text.length() - 1);
+						}
+						if (!validate) {
+							characters(text.toString());
+						}// else {
+							//addContent(current, text.toString());
+						//}
+						text.setLength(0);
+					}
+					String tagname = (String) parentlist[2]; //getClass(current);
+					for (int i = 0; i < tagname.length(); i++) { // current-tag
+						if ((c = reader.read()) != tagname.charAt(i)) {
+							throw new IllegalArgumentException(tagname);
+						}
+					}
+					while (" \t\n\r".indexOf(c = reader.read()) != -1); // whitespace
+					if (c != '>') throw new IllegalArgumentException(); // '>'
+					c = reader.read();
+					if (!validate) { endElement(); }
+					if (parentlist[0] == null) {
+						reader.close();
+						return current;
+					}
+					current = parentlist[0];
+					parentlist = (Object[]) parentlist[1];
+				}
+				else { //start or standalone tag
+					boolean instruction = (c == '?'); // Processing Instructions
+					if (c == '!') { while ((c = reader.read()) != '>'); continue; } // DOCTYPE
+					if (instruction) { c = reader.read(); }
+					text.setLength(0);
+					boolean iscomment = false;
+					while (">/ \t\n\r".indexOf(c) == -1) {
+						text.append((char) c);
+						if ((text.length() == 3) && (text.charAt(0) == '!') &&
+								(text.charAt(1) == '-') && (text.charAt(2) == '-')) {
+							int m = 0;
+							while (true) {
+								c = reader.read();
+								if (c == '-') { m++; }
+								else if ((c == '>') && (m >= 2)) { break; }
+								else { m = 0; }
+							}
+							iscomment = true;
+						}
+						c = reader.read();
+					}
+					if (iscomment) { continue; }
+					if (!instruction) {
+						String tagname = text.toString();
+						parentlist = new Object[] { current, parentlist, tagname };
+						if (validate) {
+							current = (current != null) ?
+								addElement(current, tagname) : create(tagname);
+						} else {
+							current = tagname;
+						}
+					}
+					text.setLength(0);
+					while (true) {
+						boolean whitespace = false;
+						while (" \t\n\r".indexOf(c) != -1) {
+							c = reader.read();
+							whitespace = true;
+						}
+						if (c == '>') {
+							if (instruction) throw new IllegalArgumentException(); // '?>'
+							if (!validate) {
+								startElement((String) current, attributelist); attributelist = null;
+							}
+							c = reader.read();
+							break;
+						}
+						else if (c == '/') {
+							if (instruction) throw new IllegalArgumentException(); // '?>'
+							if ((c = reader.read()) != '>') {
+								throw new IllegalArgumentException(); // '>'
+							}
+							if (!validate) {
+								startElement((String) current, attributelist); attributelist = null;
+								endElement();
+							}
+							if (parentlist[0] == null) {
+								reader.close();
+								return current;
+							}
+							current = parentlist[0];
+							parentlist = (Object[]) parentlist[1];
+							c = reader.read();
+							break;
+						}
+						else if (instruction && (c == '?')) {
+							if ((c = reader.read()) != '>') {
+								throw new IllegalArgumentException(); // '>'
+							}
+							c = reader.read();
+							break;
+						}
+						else if (whitespace) {
+							while ("= \t\n\r".indexOf(c) == -1) {
+								text.append((char) c);
+								c = reader.read();
+							}
+							String key = text.toString();
+							text.setLength(0);
+							while (" \t\n\r".indexOf(c) != -1) c = reader.read();
+							if (c != '=') throw new IllegalArgumentException();
+							while (" \t\n\r".indexOf(c = reader.read()) != -1);
+							char quote = (char) c;
+							if ((c != '\"') && (c != '\'')) throw new IllegalArgumentException();
+							while (quote != (c = reader.read())) {
+								if (c == '&') {
+									StringBuffer eb = new StringBuffer();
+									while (';' != (c = reader.read())) { eb.append((char) c); }
+									String entity = eb.toString();
+									if ("lt".equals(entity)) { text.append('<'); }
+									else if ("gt".equals(entity)) { text.append('>'); }
+									else if ("amp".equals(entity)) { text.append('&'); }
+									else if ("quot".equals(entity)) { text.append('"'); }
+									else if ("apos".equals(entity)) { text.append('\''); }
+									else if (entity.startsWith("#")) {
+										text.append((char) Integer.parseInt(entity.substring(1)));
+									}
+									else throw new IllegalArgumentException("unknown " + "entity " + entity);
+								}
+								else text.append((char) c);
+							}
+							if (!instruction) {
+								if (validate) {
+									addAttribute(current, key, text.toString());
+								} else {
+									if (attributelist == null) { attributelist = new Hashtable(); }
+									attributelist.put(key, text.toString());
+								}
+							}
+							text.setLength(0);
+							c = reader.read();
+						}
+						else throw new IllegalArgumentException();
+					}
+				}
+			}
+			else {
+				if (" \t\n\r".indexOf(c) != -1) {
+					if ((text.length() > 0) && (text.charAt(text.length() - 1) != ' ')) {
+						text.append(' ');
+					}
+				}
+				else {
+					text.append((char) c);
+				}
+				c = reader.read();
+			} 
+		}
+		throw new IllegalArgumentException();
+	}
+	
+	/**
+	 * Convert entities.
+	 */
+	private static String convert(StringBuffer text) {
+		return null;
+	}
+
+	/*private InputStream inputreader;
+	private byte[] data;
+	private int inputfrom = 0, inputto = 0;
+	private int read() throws Exception {
+		if (data == null) { data = new byte[1024]; }
+		if (inputfrom >= inputto) {
+			inputfrom = 0;
+			inputto = inputreader.read(data);
+		}
+		inputfrom++;
+		return data[inputfrom - 1];
+	}*/
+
+	/**
+	 *
+	 */
+	private void addImpl(Object parent, Object component, int index) {
+		String parentclass = getClass(parent);
+		String classname = getClass(component);
+		//System.out.println("add " + classname + " -> " + parentclass);
+		if ((("combobox" == parentclass) && ("choice" == classname)) ||
+					(("tabbedpane" == parentclass) && ("tab" == classname)) ||
+					(("list" == parentclass) && ("item" == classname)) ||
+					(("table" == parentclass) && (("column" == classname) || ("row" == classname))) ||
+					(("row" == parentclass) && ("cell" == classname)) ||
+					((("tree" == parentclass) || ("node" == parentclass)) && ("node" == classname)) ||
+					(("menubar" == parentclass) && ("menu" == classname))) {
+				classname = classname; // compiler bug
+		}
+		else if (("menu" == parentclass) && (("menu" == classname) || ("menuitem" == classname) ||
+				("checkboxmenuitem" == classname) || ("separator" == classname))) {
+			classname = "menu";
+		}
+		else if (("panel" == parentclass) || ("desktop" == parentclass) ||
+				("splitpane" == parentclass) || ("dialog" == parentclass) ||
+				("tabbedpane" == parentclass)) {
+			while ("component" != classname) {
+				String extendclass = null;
+				for (int i = 0; i < dtd.length; i += 3) {
+					if (classname == dtd[i]) {
+						extendclass = (String) dtd[i + 1]; break;
+					}
+				}
+				if (extendclass == null) throw new IllegalArgumentException(classname + " not component");
+				classname = extendclass;
+			}
+		}
+		else throw new IllegalArgumentException(classname + " add " + parentclass);
+		insertItem(parent, (String) classname, component, index);
+		set(component, ":parent", parent);
+		//if (parent == content) System.out.println(getClass(parent) + ".add(" + getClass(component) + ") : " + classname);
+	}
+
+	/**
+	 *
+	 */
+	private Object addElement(Object parent, String name) {
+		//System.out.println("create '" + name + "'");
+		Object component = create(name);
+		addImpl(parent, component, -1);
+		return component;
+	}
+
+	/**
+	 *
+	 */
+	private void addAttribute(Object component, String key, String value) {
+		//System.out.println("attribute '" + key + "'='" + value + "'");
+		Object[] definition = getDefinition(component, key, null);
+		key = (String) definition[1];
+		if ("string" == definition[0]) {
+			setString(component, key, value, (String) definition[3]);
+		}
+		else if ("choice" == definition[0]) {
+			String[] values = (String[]) definition[3];
+			setChoice(component, key, value, values, values[0]);
+		}
+		else if ("boolean" == definition[0]) {
+			if ("true".equals(value)) {
+				if (definition[3] == Boolean.FALSE) {
+					set(component, key, Boolean.TRUE);
+			 	}
+			}
+			else if ("false".equals(value)) {
+				if (definition[3] == Boolean.TRUE) {
+					set(component, key, Boolean.FALSE);
+			 	}
+			}
+			else throw new IllegalArgumentException(value);
+		}
+		else if ("integer" == definition[0]) {
+			set(component, key, Integer.valueOf(value));
+		}
+		else if ("icon" == definition[0]) {
+			set(component, key, getIcon(value));
+		}
+		else if ("method" == definition[0]) {
+			try { //java
+				set(component, key, getClass().getMethod(value, null)); //java
+			} catch (Exception exc) { System.err.println(value); exc.printStackTrace(); } //java
+			//midp setMethod(component, key, value);
+		}
+		//java>
+		else if ("bean" == definition[0]) {
+			try {
+				set(component, key, (Component) Class.forName(value).newInstance());
+			} catch (Exception exc) { System.err.println(value); exc.printStackTrace(); }
+		}
+		//<java
+		else throw new IllegalArgumentException((String) definition[0]);
+	}
+
+	/**
+	 *
+	 */
+	private Object[] getDefinition(Object component, String key, String type) {
+		Object classname = getClass(component);
+		Object currentname = classname;
+		while (classname != null) {
+			for (int i = 0; i < dtd.length; i += 3) {
+				if (dtd[i] == classname) {
+					Object[][] attributes = (Object[][]) dtd[i + 2];
+					for (int j = 0; j < attributes.length; j++) {
+						if (attributes[j][1].equals(key)) {
+							if ((type != null) && (type != attributes[j][0])) {
+								throw new IllegalArgumentException(attributes[j][0].toString());
+							}
+							return attributes[j];
+						}
+					}
+					classname = dtd[i + 1];
+					break;
+				}
+			}
+		}
+		throw new IllegalArgumentException("unknown " + key + " " + type +
+			" for " + currentname);
+	}
+
+	/**
+	 *
+	 */
+	//private void addContent(Object component, String content) {
+		//set(component, "content", content);
+	//}
+
+	// ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
+
+	/**
+	 *
+	 */
+	public void setString(Object component, String key, String value) {
+		Object[] definition = getDefinition(component, key, "string");
+		if (setString(component, (String) definition[1],
+				value, (String) definition[3])) {
+			update(component, definition[2]);
+		}
+	}
+
+	/**
+	 *
+	 */
+	public String getString(Object component, String key) {
+		Object[] definition = getDefinition(component, key, "string");
+		return getString(component, (String) definition[1],
+			(String) definition[3]);
+	}
+
+	/**
+	 *
+	 */
+	public void setChoice(Object component, String key, String value) {
+		Object[] definition = getDefinition(component, key, "choice");
+		String[] values = (String[]) definition[3];
+		if (setChoice(component, (String) definition[1],
+				value, values, values[0])) {
+			update(component, definition[2]);
+		}
+	}
+
+	/**
+	 *
+	 */
+	public String getChoice(Object component, String key) {
+		Object[] definition = getDefinition(component, key, "choice");
+		return getString(component, (String) definition[1],
+			((String[]) definition[3])[0]);
+	}
+
+	/**
+	 *
+	 */
+	public void setBoolean(Object component, String key, boolean value) {
+		Object[] definition = getDefinition(component, key, "boolean");
+		if (setBoolean(component, (String) definition[1],
+				value, (definition[3] == Boolean.TRUE))) {
+			update(component, definition[2]);
+		}
+	}
+
+	/**
+	 *
+	 */
+	public boolean getBoolean(Object component, String key) {
+		Object[] definition = getDefinition(component, key, "boolean");
+		return getBoolean(component, (String) definition[1],
+			(definition[3] == Boolean.TRUE));
+	}
+
+	/**
+	 *
+	 */
+	public void setInteger(Object component, String key, int value) {
+		Object[] definition = getDefinition(component, key, "integer");
+		if (setInteger(component, (String) definition[1],
+				value, ((Integer) definition[3]).intValue())) {
+			update(component, definition[2]);
+		}
+	}
+
+	/**
+	 *
+	 */
+	public int getInteger(Object component, String key) {
+		Object[] definition = getDefinition(component, key, "integer");
+		return getInteger(component, (String) definition[1],
+			((Integer) definition[3]).intValue());
+	}
+
+	/**
+	 *
+	 */
+	public void setIcon(Object component, String key, Image icon) {
+		Object[] definition = getDefinition(component, key, "icon");
+		if (set(component, (String) definition[1], icon)) {
+			update(component, definition[2]);
+		}
+	}
+
+	/**
+	 *
+	 */
+	public Image getIcon(Object component, String key) {
+		Object[] definition = getDefinition(component, key, "icon");
+		return getIcon(component, (String) definition[1], (Image) definition[3]);
+	}
+
+	/**
+	 *
+	 */
+	public void setMethod(Object component, String key, Method method) { //java
+	//midp public void setMethod(Object component, String key, String method) {
+		Object[] definition = getDefinition(component, key, "method");
+		if (set(component, (String) definition[1], method)) {
+			update(component, definition[2]);
+		}
+	}
+
+	/**
+	 *
+	 */
+	public Method getMethod(Object component, String key) { //java
+	//midp public String getMethod(Object component, String key) {
+		Object[] definition = getDefinition(component, key, "method");
+		return (Method) get(component, (String) definition[1]); //java
+		//midp return (String) get(component, (String) definition[1]);
+	}
+
+	/**
+	 *
+	 */
+	private void update(Object component, Object mode) {
+		if ("parent" == mode) {
+			component = getParent(component);
+			mode = "validate";
+		}
+		boolean firstpaint = true;
+		int x = 0; int y = 0; int width = 0; int height = 0;
+		while (component != null) {
+			if (!getBoolean(component, "visible", true)) { break; }
+			if ("paint" == mode) {//|| (firstpaint && (component == content))
+				Rectangle bounds = getRectangle(component, "bounds");
+				if (bounds == null) { return; }
+				if (firstpaint) {
+					x = bounds.x; y = bounds.y;
+					width = Math.abs(bounds.width); height = bounds.height;
+					firstpaint = false;
+				} else {
+					x += bounds.x; y += bounds.y;
+				}
+				if (component == content) {
+					repaint(x, y, width, height);
+				}
+			}
+			Object parent = getParent(component);
+			String classname = getClass(parent);
+			if ("combobox" == classname) {
+				parent = get(parent, "combolist");
+			}
+			else if ("menu" == classname) {
+				parent = get(parent, "popupmenu");
+			}
+			else if (("paint" == mode) && ("tabbedpane" == classname)) {
+				if (getItemImpl(parent, "component",
+						getInteger(parent, "selected", 0)) != component) { break; }
+			}
+			if (("layout" == mode) || (("validate" == mode) &&
+					(("list" == classname) || ("table" == classname) ||
+					("tree" == classname) || ("dialog" == classname) || (parent == content)))) {
+				Rectangle bounds = getRectangle(parent, "bounds");
+				if (bounds == null) { return; }
+				bounds.width = -1 * Math.abs(bounds.width);
+				mode = "paint";
+			}
+			component = parent;
+		}
+	}
+
+	// ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
+
+	/**
+	 *
+	 */
+	private boolean setString(Object component,
+			String key, String value, String defaultvalue) {
+		/*boolean changed = set(component, key, value);
+		if (changed && ("name" == key)) {
+			//for (Class cls = getClass(); cls != null; cls = cls.getSuperclass()) {
+			Field[] fields = getClass().getDeclaredFields();
+			for (int i = 0; i < fields.length; i++) {
+				if ((fields[i].getType() == Object.class) &&
+						fields[i].getName().equals(value)) {
+					try {
+						fields[i].set(this, component);
+						return true;
+					} catch (IllegalAccessException iae) {}
+				}
+			}
+			//}
+			try {
+				getClass().getField(value).set(this, component);
+			} catch (Exception exc) {}
+		}
+		return changed;*/
+		return set(component, key, value);
+	}
+
+	/**
+	 *
+	 */
+	private String getString(Object component,
+			String key, String defaultvalue) {
+		Object value = get(component, key);
+		return (value == null) ? defaultvalue : (String) value;
+	}
+
+	/**
+	 *
+	 */
+	private boolean setChoice(Object component,
+			String key, String value, String[] values, String defaultvalue) {
+		if (value == null) {
+			return set(component, key, defaultvalue);
+		}
+		for (int i = 0; i < values.length; i++) {
+			if (value.equals(values[i])) {
+				return set(component, key, values[i]);
+			}
+		}
+		throw new IllegalArgumentException("unknown " + value + " for " + key);
+	}
+
+	/**
+	 *
+	 */
+	private boolean setIcon(Object component,
+			String key, String path, Image defaultvalue) {
+		return set(component, key, (path != null) ? getIcon(path) : defaultvalue);
+	}
+
+	/**
+	 *
+	 */
+	private Image getIcon(Object component, String key, Image defaultvalue) {
+		Object value = get(component, key);
+		return (value == null) ? defaultvalue : (Image) value;
+	}
+
+	/**
+	 *
+	 */
+	private boolean setBoolean(Object component,
+			String key, boolean value, boolean defaultvalue) {
+		return set(component, key, (value == defaultvalue) ? null :
+			(value ? Boolean.TRUE : Boolean.FALSE));
+	}
+
+	/**
+	 *
+	 */
+	private boolean getBoolean(Object component, 
+			String key, boolean defaultvalue) {
+		Object value = get(component, key);
+		return (value == null) ? defaultvalue : ((Boolean) value).booleanValue();
+	}
+
+	/**
+	 *
+	 */
+	private boolean setInteger(Object component,
+			String key, int value, int defaultvalue) {
+		return set(component, key, (value == defaultvalue) ? null : new Integer(value));
+	}
+
+	/**
+	 *
+	 */
+	private int getInteger(Object component, String key, int defaultvalue) {
+		Object value = get(component, key);
+		return (value == null) ? defaultvalue : ((Integer) value).intValue();
+	}
+
+	/**
+	 *
+	 */
+	private void setRectangle(Object component,
+			String key, int x, int y, int width, int height) {
+		Rectangle rectangle = getRectangle(component, key);
+		if (rectangle != null) {
+			rectangle.x = x; rectangle.y = y;
+			rectangle.width = width; rectangle.height = height;
+		}
+		else {
+			set(component, key, new Rectangle(x, y, width, height)); //java
+			//midp set(component, key, new int[] { width, height, x, y });
+		}
+	}
+
+	/**
+	 *
+	 */
+	private Rectangle getRectangle(Object component, String key) {
+		return (Rectangle) get(component, key); //java
+		//midp return (int[]) get(component, key);
+	}
+
+	// ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
+
+	/**
+	 *
+	 */
+	public Image getIcon(String path) {
+		return getIcon(path, true);
+	}
+
+	/**
+	 *
+	 */
+	public Image getIcon(String path, boolean preload) {
+		if ((path == null) || (path.length() == 0)) {
+			return null;
+		}
+		Image image = null; //(Image) imagepool.get(path);
+		//midp try {
+		//midp 	image = Image.createImage(path);
+		//midp } catch (IOException ioe) {}
+		//java>
+		try {
+			image = Toolkit.getDefaultToolkit().getImage(getClass().getResource(path));
+			//image = Toolkit.getDefaultToolkit().getImage(ClassLoader.getSystemResource(path));
+		} catch (Throwable e) {}
+		if (image == null) {
+			try {
+				InputStream is = getClass().getResourceAsStream(path);
+				//InputStream is = ClassLoader.getSystemResourceAsStream(path);
+				if (is != null) {
+					byte[] data = new byte[is.available()];
+					is.read(data, 0, data.length);
+					image = getToolkit().createImage(data);
+					is.close();
+				}
+			} catch (Throwable e) {}
+		}
+		//if (image == null) { // applet code
+		//	try {
+		//		image = getImage(getCodeBase(), path);
+		//	} catch (Throwable e) {}
+		//}
+		if (preload && (image != null)) {
+			MediaTracker mediatracker = new MediaTracker(this);
+			mediatracker.addImage(image, 1);
+			try {
+				mediatracker.waitForID(1, 50);
+			} catch (InterruptedException ie) { }
+			//imagepool.put(path, image);
+		} 
+		//<java
+		return image;
+	}
+
+	/**
+	 *
+	 */
+	public boolean destroy() {
+		return true;
+	}
+
+	private static Object[] dtd;
+	static {
+		Integer integer_1 = new Integer(-1);
+		Integer integer0 = new Integer(0);
+		Integer integer1 = new Integer(1);
+		String[] orientation = { "horizontal", "vertical" };
+		String[] leftcenterright = { "left", "center", "right" };
+		String[] selections = { "single", "interval", "multiple" };
+		dtd = new Object[] {
+			"component", null, new Object[][] {
+				{ "string", "name", "", null },
+				{ "boolean", "enabled", "paint", Boolean.TRUE },
+				{ "boolean", "visible", "parent", Boolean.TRUE },
+				{ "string", "tooltip", "", null },
+				{ "integer", "width", "validate", integer0 },
+				{ "integer", "height", "validate", integer0 },
+				{ "integer", "colspan", "validate", integer1 },
+				{ "integer", "rowspan", "validate", integer1 },
+				{ "integer", "weightx", "validate", integer0 },
+				{ "integer", "weighty", "validate", integer0 },
+				{ "choice", "halign", "validate",
+					new String[] { "fill", "center", "left", "right" } },
+				{ "choice", "valign", "validate",
+					new String[] { "fill", "center", "top", "bottom" } }
+				// component class String null*
+				// parent Object null
+				// (bounds) Rectangle 0 0 0 0
+			},
+			"label", "component", new Object[][] {
+				{ "string", "text", "validate", null },
+				{ "icon", "icon", "validate", null },
+			 	{ "choice", "alignment", "validate", leftcenterright },
+			 	{ "integer", "mnemonic", "paint", integer_1 } },
+			"button", "label", new Object[][] {
+			 	{ "choice", "alignment", "validate", new String[] { "center", "left", "right" } },
+				{ "method", "action", "", null },
+				//{ "choice", "type", "", new String[] { "normal", "default", "cancel" } }
+				},//...
+			"checkbox", "label", new Object[][] {
+				{ "boolean", "selected", "paint", Boolean.FALSE }, //...group
+				{ "string", "group", "paint", null }, //...group
+				{ "method", "action", "", null } },
+			"combobox", "textfield", new Object[][] {
+				{ "icon", "icon", "validate", null },
+				{ "integer", "selected", "layout", integer_1 } },
+			"choice", null, new Object[][] {
+				{ "string", "name", "", null },
+				{ "boolean", "enabled", "paint", Boolean.TRUE },
+				{ "string", "text", "", null },
+				{ "icon", "icon", "", null },
+				{ "choice", "alignment", "", leftcenterright },
+				{ "string", "tooltip", "", null } },
+			"textfield", "component", new Object[][] {
+				{ "string", "text", "layout", "" },
+				{ "integer", "columns", "validate", integer0 },
+				{ "boolean", "editable", "paint", Boolean.TRUE },
+				{ "integer", "start", "layout", integer0 },
+				{ "integer", "end", "layout", integer0 },
+				{ "method", "action", "", null } },
+			"passwordfield", "textfield", new Object[][] {},
+			"textarea", "textfield", new Object[][] {
+				{ "integer", "rows", "validate", integer0 },
+				{ "boolean", "wrap", "layout", Boolean.FALSE } },
+			"tabbedpane", "component", new Object[][] {
+				{ "choice", "placement", "validate",
+					new String[] { "top", "left", "bottom", "right" } },
+				{ "integer", "selected", "paint", integer0 },
+				{ "method", "action", "", null } }, //...focus
+			"tab", "choice", new Object[][] {
+				{ "integer", "mnemonic", "paint", integer_1 } },
+			"panel", "component", new Object[][] {
+				{ "integer", "columns", "validate", integer0 },
+				{ "integer", "top", "validate", integer0 },
+				{ "integer", "left", "validate", integer0 },
+				{ "integer", "bottom", "validate", integer0 },
+				{ "integer", "right", "validate", integer0 },
+				{ "integer", "gap", "validate", integer0 } },
+			"desktop", "component", new Object[][] {},
+			"dialog", "panel", new Object[][] {
+				{ "string", "text", "", null },
+				{ "icon", "icon", "", null },
+				{ "boolean", "modal", "", Boolean.FALSE } },
+			"spinbox", "textfield", new Object[][] {}, //...
+			"progressbar", "component", new Object[][] {
+				{ "choice", "orientation", "validate", orientation },
+				{ "integer", "minimum", "paint", integer0 }, //...checkvalue
+				{ "integer", "maximum", "paint", new Integer(100) },
+				{ "integer", "value", "paint", integer0 } },
+				// change stringpainted
+			"slider", "progressbar", new Object[][] {
+				{ "integer", "unit", "", new Integer(5) },
+				{ "integer", "block", "", new Integer(25) },
+				{ "method", "action", "", null } },
+				// minor/majortickspacing
+				// inverted
+				// labelincrement labelstart
+			"splitpane", "component", new Object[][] {
+				{ "choice", "orientation", "validate", orientation },
+				{ "integer", "divider", "layout", integer_1 } },
+			"list", "component", new Object[][] {
+				{ "choice", "selection", "paint", selections },
+				{ "method", "action", "", null } }, //...?
+			"item", "choice", new Object[][] {
+				{ "boolean", "selected", "", Boolean.FALSE } },
+			"table", "component", new Object[][] {
+				{ "choice", "selection", "paint", selections },
+				{ "method", "action", "", null }
+				/*{ "choice", "selection",
+					new String[] { "singlerow", "rowinterval", "multiplerow",
+						"cell", "cellinterval",
+						"singlecolumn", "columninterval", "multiplecolumn" } }*/ },
+			"column", "choice", new Object[][] {
+				{ "integer", "width", "", new Integer(80) }},
+			"row", null, new Object[][] {
+				{ "boolean", "selected", "", Boolean.FALSE } },
+			"cell", "choice", new Object[][] {},
+			"tree", "component", new Object[][] {
+				{ "choice", "selection", "paint", selections },
+				{ "method", "action", "", null },
+				{ "method", "expand", "", null },
+				{ "method", "collapse", "", null } },
+			"node", "choice", new Object[][] {
+				{ "boolean", "selected", "", Boolean.FALSE },
+				{ "boolean", "expanded", "", Boolean.TRUE } },
+			"separator", "component", new Object[][] {},
+			"menubar", "component", new Object[][] {},
+			"menu", "choice", new Object[][] {
+				{ "integer", "mnemonic", "paint", integer_1 } },
+			"menuitem", "choice", new Object[][] {
+				{ "string", "accelerator", "", null },
+				{ "method", "action", "", null },
+				{ "integer", "mnemonic", "paint", integer_1 }
+				//... KeyStroke=keyCode+modifiers(SHIFT CTRL META ALT_MASK)
+			},
+			"checkboxmenuitem", "menuitem", new Object[][] {
+				{ "boolean", "selected", "paint", Boolean.FALSE }, //...group
+				{ "string", "group", "paint", null } }, //...group
+			"bean", "component", new Object[][] {
+				{ "bean", "bean", "", null }
+			}
+		};
+	}	
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/aThinlet_hl.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/aThinlet_hl.java
new file mode 100644
index 0000000..8aca05a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/aThinlet_hl.java
@@ -0,0 +1,5393 @@
+/*
+	Thinlet GUI toolkit - www.thinlet.com
+	Copyright (C) 2002 Robert Bajzat ([email protected])
+
+	This library is free software; you can redistribute it and/or
+	modify it under the terms of the GNU Lesser General Public
+	License as published by the Free Software Foundation; either
+	version 2.1 of the License, or (at your option) any later version.
+
+	This library is distributed in the hope that it will be useful,
+	but WITHOUT ANY WARRANTY; without even the implied warranty of
+	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+	Lesser General Public License for more details.
+
+	You should have received a copy of the GNU Lesser General Public
+	License along with this library; if not, write to the Free Software
+	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*/
+
+//package thinlet; //java
+//midp package thinlet.midp;
+
+import java.<error descr="Cannot resolve symbol 'applet'">applet</error>.*; //java
+import java.awt.*; //java
+import java.awt.<error descr="Cannot resolve symbol 'datatransfer'">datatransfer</error>.*; //java
+import java.awt.<error descr="Cannot resolve symbol 'image'">image</error>.*; //java
+import java.awt.event.*; //java
+import java.lang.reflect.*; //java
+import java.io.*;
+import java.net.*; //java
+import java.util.*;
+//midp import javax.microedition.lcdui.*;
+//midp import javax.microedition.midlet.*;
+
+/**
+ *
+ */
+public class Thinlet extends Container //java
+	implements Runnable, Serializable { //java
+//midp public class Thinlet extends Canvas implements CommandListener {
+
+	//midp private static final Boolean TRUE = new Boolean(true);
+	//midp private static final Boolean FALSE = new Boolean(false);
+
+	//midp private transient Font font;
+	private transient <error descr="Cannot resolve symbol 'Color'">Color</error> c_bg;
+	private transient <error descr="Cannot resolve symbol 'Color'">Color</error> c_text;
+	private transient <error descr="Cannot resolve symbol 'Color'">Color</error> c_textbg;
+	private transient <error descr="Cannot resolve symbol 'Color'">Color</error> c_border;
+	private transient <error descr="Cannot resolve symbol 'Color'">Color</error> c_disable;
+	private transient <error descr="Cannot resolve symbol 'Color'">Color</error> c_hover;
+	private transient <error descr="Cannot resolve symbol 'Color'">Color</error> c_press;
+	private transient <error descr="Cannot resolve symbol 'Color'">Color</error> c_focus;
+	private transient <error descr="Cannot resolve symbol 'Color'">Color</error> c_select;
+	private transient <error descr="Cannot resolve symbol 'Color'">Color</error> c_ctrl = null; //java
+	//midp private transient Color c_ctrl;
+	private transient int block;
+	private transient <error descr="Cannot resolve symbol 'Image'">Image</error> gradient; //java
+	{
+		setFont(new <error descr="Cannot resolve symbol 'Font'">Font</error>("SansSerif", <error descr="Cannot resolve symbol 'Font'">Font</error>.PLAIN, 12)); //java
+		//midp setFont(Font.getDefaultFont());
+		setColors(0xe6e6e6, 0x000000, 0xffffff,
+			0x909090, 0xb0b0b0, 0xededed, 0xb9b9b9, 0x89899a, 0xc5c5dd); // f99237 eac16a // e68b2c ffc73c
+	}
+
+	private transient Thread timer;
+	private transient long watchdelay;
+	private transient long watch;
+	private transient String clipboard;
+
+	private Object content = createImpl("desktop");
+	private transient Object mouseinside;
+	private transient Object insidepart;
+	private transient Object mousepressed;
+	private transient Object pressedpart;
+	private transient int referencex, referencey;
+	private transient int mousex, mousey;
+	private transient Object focusowner;
+	private transient boolean focusinside; //midp { focusinside = true; }
+	private transient Object popupowner;
+	private transient Object tooltipowner;
+	//private transient int pressedkey;
+
+	//java>
+	private static final int DRAG_ENTERED = <error descr="Cannot resolve symbol 'AWTEvent'">AWTEvent</error>.RESERVED_ID_MAX + 1;
+	private static final int DRAG_EXITED = <error descr="Cannot resolve symbol 'AWTEvent'">AWTEvent</error>.RESERVED_ID_MAX + 2;
+
+	private static long WHEEL_MASK = 0;
+	private static int MOUSE_WHEEL = 0;
+	private static <error descr="Cannot resolve symbol 'Method'">Method</error> wheelrotation = null;
+	static {
+		try {
+			WHEEL_MASK = <error descr="Cannot resolve symbol 'AWTEvent'">AWTEvent</error>.class.getField("MOUSE_WHEEL_EVENT_MASK").getLong(null);
+			MOUSE_WHEEL = <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.class.getField("MOUSE_WHEEL").getInt(null);
+		} catch (Exception exc) { /* not 1.4 */ }
+	}
+	{
+		if (MOUSE_WHEEL != 0) { // disable global focus-manager for this component in 1.4
+			try {
+				getClass().getMethod("setFocusTraversalKeysEnabled", new Class[] { Boolean.TYPE }).
+					<error descr="Cannot resolve method 'invoke(Thinlet, java.lang.Object[])'">invoke</error>(this, new Object[] { Boolean.FALSE });
+			} catch (Exception exc) { /* never */ }
+		}
+		enableEvents(<error descr="Cannot resolve symbol 'AWTEvent'">AWTEvent</error>.COMPONENT_EVENT_MASK |
+			<error descr="Cannot resolve symbol 'AWTEvent'">AWTEvent</error>.FOCUS_EVENT_MASK | <error descr="Cannot resolve symbol 'AWTEvent'">AWTEvent</error>.KEY_EVENT_MASK |
+			<error descr="Cannot resolve symbol 'AWTEvent'">AWTEvent</error>.MOUSE_EVENT_MASK | <error descr="Cannot resolve symbol 'AWTEvent'">AWTEvent</error>.MOUSE_MOTION_EVENT_MASK | WHEEL_MASK);
+	}
+	//<java
+
+	/**
+	 *
+	 */
+	public void setColors(int background, int text, int textbackground,
+			int border, int disable, int hover, int press,
+			int focus, int select) {
+		c_bg = new <error descr="Cannot resolve symbol 'Color'">Color</error>(background); c_text = new <error descr="Cannot resolve symbol 'Color'">Color</error>(text);
+		c_textbg = new <error descr="Cannot resolve symbol 'Color'">Color</error>(textbackground); c_border = new <error descr="Cannot resolve symbol 'Color'">Color</error>(border);
+		c_disable = new <error descr="Cannot resolve symbol 'Color'">Color</error>(disable); c_hover = new <error descr="Cannot resolve symbol 'Color'">Color</error>(hover);
+		c_press = new <error descr="Cannot resolve symbol 'Color'">Color</error>(press); c_focus = new <error descr="Cannot resolve symbol 'Color'">Color</error>(focus);
+		c_select = new <error descr="Cannot resolve symbol 'Color'">Color</error>(select);
+		//midp c_ctrl = c_hover;
+		//java>
+		int[] pix = new int[block * block];
+		int r1 = c_bg.<error descr="Cannot resolve method 'getRed()'">getRed</error>(); int r2 = c_press.<error descr="Cannot resolve method 'getRed()'">getRed</error>();
+		int g1 = c_bg.<error descr="Cannot resolve method 'getGreen()'">getGreen</error>(); int g2 = c_press.<error descr="Cannot resolve method 'getGreen()'">getGreen</error>();
+		int b1 = c_bg.<error descr="Cannot resolve method 'getBlue()'">getBlue</error>(); int b2 = c_press.<error descr="Cannot resolve method 'getBlue()'">getBlue</error>();
+		for (int i = 0; i < block; i++) {
+			int r = r1 - (r1 - r2) * i / block;
+			int g = g1 - (g1 - g2) * i / block;
+			int b = b1 - (b1 - b2) * i / block;
+			int color = (255 << 24) | (r << 16) | (g << 8) | b;
+			for (int j = 0; j < block; j++) {
+				pix[i * block + j] = color;
+				//pix[j * block + i] = color;
+			}
+		}
+		gradient = createImage(new <error descr="Cannot resolve symbol 'MemoryImageSource'">MemoryImageSource</error>(block, block, pix, 0, block));
+		//<java
+	}
+
+	/**
+	 *
+	 */
+	public void setFont(<error descr="Cannot resolve symbol 'Font'">Font</error> font) {
+		block = getFontMetrics(font).<error descr="Cannot resolve method 'getHeight()'">getHeight</error>(); //java
+		super.setFont(font); //java
+		//midp block = font.getHeight();
+		//midp this.font = font;
+	}
+
+	/**
+	 *
+	 */
+	private void doLayout(Object component) {
+		String classname = getClass(component);
+		if ("combobox" == classname) {
+			if (getBoolean(component, "editable", true)) {
+				<error descr="Cannot resolve symbol 'Image'">Image</error> icon = getIcon(component, "icon", null);
+				layoutField(component, block, false,
+					(icon != null) ? icon.<error descr="Cannot resolve method 'getWidth(Thinlet)'">getWidth</error>(this) : 0);
+			} // set editable -> validate (overwrite textfield repaint)
+			else {
+				int selected = getInteger(component, "selected", -1);
+				if (selected != -1) {
+					Object choice = getItem(component, "choice", selected);
+					set(component, "text", get(choice, "text"));
+					set(component, "icon", get(choice, "icon"));
+				}
+			}
+		}
+		else if (("textfield" == classname) || ("passwordfield" == classname)) {
+			layoutField(component, 0, ("passwordfield" == classname), 0);
+		}
+		else if ("textarea" == classname) {
+			String text = getString(component, "text", "");
+			int start = getInteger(component, "start", 0);
+			if (start > text.length()) { setInteger(component, "start", start = text.length(), 0); }
+			int end = getInteger(component, "end", 0);
+			if (end > text.length()) { setInteger(component, "end", end = text.length(), 0); }
+			int caretx = 0; int carety = 0;
+			<error descr="Cannot resolve symbol 'FontMetrics'">FontMetrics</error> fm = getFontMetrics(getFont()); //java
+			int width = 0, height = 0;
+			for (int i = 0, j = 0; j != -1; i = j + 1) {
+				j = text.indexOf('\n', i);
+				if (i != j) { // && i != text.length()
+					String line = (j != -1) ? text.substring(i, j) : text.substring(i); //java
+					width = Math.max<error descr="Cannot resolve method 'max(int, ?)'">(width, fm.<error descr="Cannot resolve method 'stringWidth(java.lang.String)'">stringWidth</error>(line))</error>; //java
+					//midp width = font.substringWidth(text, i, ((j != -1) ? j : text.length()) - i);
+				}
+				if ((end >= i) && ((j == -1) || (end <= j))) {
+					caretx = fm.<error descr="Cannot resolve method 'stringWidth(java.lang.String)'">stringWidth</error>(text.substring(i, end)); //java
+					//midp caretx = font.substringWidth(text, i, end - i);
+					carety = height;
+				}
+				height += fm.<error descr="Cannot resolve method 'getHeight()'">getHeight</error>();
+			}
+			layoutScrollPane(component, width + 2,
+				height - fm.<error descr="Cannot resolve method 'getLeading()'">getLeading</error>() + 2, 0, 0);
+			scrollToVisible(component, caretx, carety,
+				2, fm.<error descr="Cannot resolve method 'getAscent()'">getAscent</error>() + fm.<error descr="Cannot resolve method 'getDescent()'">getDescent</error>() + 2);
+		}
+		else if ("tabbedpane" == classname) {
+			<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> bounds = getRectangle(component, "bounds");
+			String placement = getString(component, "placement", "top");
+			boolean horizontal = ((placement == "top") || (placement == "bottom"));
+			int tabd = 0;
+			int tabsize = 0;
+			for (Object comp = get(component, "tab");
+					comp != null; comp = get(comp, ":next")) {
+				Dimension d = getSize(comp, 8, 4, "left");
+				setRectangle(comp, "bounds",
+					horizontal ? tabd : 0, horizontal ? 0 : tabd, d.width, d.height);
+				tabd += horizontal ? d.width : d.height;
+				tabsize = Math.max(tabsize, horizontal ? d.height : d.width);
+			}
+			for (Object comp = get(component, "tab");
+					comp != null; comp = get(comp, ":next")) {
+				<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> r = getRectangle(comp, "bounds");
+				if (horizontal) {
+					if (placement == "bottom") { r.<error descr="Cannot resolve symbol 'y'">y</error> = bounds.<error descr="Cannot resolve symbol 'height'">height</error> - tabsize; }
+					r.<error descr="Cannot resolve symbol 'height'">height</error> = tabsize;
+				} else {
+					if (placement == "right") { r.<error descr="Cannot resolve symbol 'x'">x</error> = bounds.<error descr="Cannot resolve symbol 'width'">width</error> - tabsize; }
+					r.<error descr="Cannot resolve symbol 'width'">width</error> = tabsize;
+				}
+			}
+			int cx = (placement == "left") ? (tabsize + 1) : 2;
+			int cy = (placement == "top") ? (tabsize + 1) : 2;
+			int cwidth = bounds.<error descr="Cannot resolve symbol 'width'">width</error> - (horizontal ? 4 : (tabsize + 3));
+			int cheight = bounds.<error descr="Cannot resolve symbol 'height'">height</error> - (horizontal ? (tabsize + 3) : 4);
+			for (Object comp = get(component, "component");
+					comp != null; comp = get(comp, ":next")) {
+				if (!getBoolean(comp, "visible", true)) { continue; }
+				setRectangle(comp, "bounds", cx, cy, cwidth, cheight);
+				doLayout(comp);
+			}
+		}
+		else if (("panel" == classname) || (classname == "dialog")) {
+			int gap = getInteger(component, "gap", 0);
+			int[][] grid = getGrid(component, gap);
+			if (grid != null) {
+				int top = getInteger(component, "top", 0);
+				int left = getInteger(component, "left", 0);
+				int bottom = getInteger(component, "bottom", 0);
+				int right = getInteger(component, "right", 0);
+				if (classname == "dialog") {
+					int titleheight = getInteger(component, "titleheight", 0);
+					top += 4 + titleheight; left += 4; bottom += 4; right += 4;
+				}
+
+				<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> bounds = getRectangle(component, "bounds");
+				for (int i = 0; i < 2; i++) {
+					int d = ((i == 0) ? (bounds.<error descr="Cannot resolve symbol 'width'">width</error> - left - right) :
+						(bounds.<error descr="Cannot resolve symbol 'height'">height</error> - top - bottom)) -
+						getSum(grid[i], 0, grid[i].length, gap, false);
+					if (d != 0) {
+						int w = getSum(grid[2 + i], 0, grid[2 + i].length, 0, false);
+						if (w > 0) {
+							for (int j = 0; j < grid[i].length; j++) {
+								if (grid[2 + i][j] != 0) {
+									grid[i][j] += d * grid[2 + i][j] / w;
+								}
+							}
+						}
+					}
+				}
+
+				int i = 0;
+				for (Object comp = get(component, "component");
+						comp != null; comp = get(comp, ":next")) {
+					if (!getBoolean(comp, "visible", true)) { continue; }
+					int ix = left + getSum(grid[0], 0, grid[4][i], gap, true);
+					int iy = top + getSum(grid[1], 0, grid[5][i], gap, true);
+					int iwidth = getSum(grid[0], grid[4][i], grid[6][i], gap, false);
+					int iheight = getSum(grid[1], grid[5][i], grid[7][i], gap, false);
+					String halign = getString(comp, "halign", "fill");
+					String valign = getString(comp, "valign", "fill");
+					if ((halign != "fill") || (valign != "fill")) {
+						Dimension d = getPreferredSize(comp);
+						if (halign != "fill") {
+							int dw = Math.max(0, iwidth - d.width);
+							if (halign == "center") { ix += dw / 2; }
+								else if (halign == "right") { ix += dw; }
+							iwidth -= dw;
+						}
+						if (valign != "fill") {
+							int dh = Math.max(0, iheight - d.height);
+							if (valign == "center") { iy += dh / 2; }
+								else if (valign == "bottom") { iy += dh; }
+							iheight -= dh;
+						}
+					}
+					setRectangle(comp, "bounds", ix, iy, iwidth, iheight);
+					doLayout(comp);
+					i++;
+				}
+			}
+		}
+		else if ("desktop" == classname) {
+			<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> bounds = getRectangle(component, "bounds");
+			for (Object comp = get(component, "component");
+					comp != null; comp = get(comp, ":next")) {
+				String iclass = getClass(comp);
+				if (iclass == "dialog") {
+					Dimension d = getPreferredSize(comp);
+					if (get(comp, "bounds") == null)
+					setRectangle(comp, "bounds",
+						Math.max<error descr="Cannot resolve method 'max(int, ?)'">(0, (bounds.<error descr="Cannot resolve symbol 'width'">width</error> - d.width) / 2)</error>,
+						Math.max<error descr="Cannot resolve method 'max(int, ?)'">(0, (bounds.<error descr="Cannot resolve symbol 'height'">height</error> - d.height) / 2)</error>,
+						Math.min<error descr="Cannot resolve method 'min(int, ?)'">(d.width, bounds.<error descr="Cannot resolve symbol 'width'">width</error>)</error>, Math.min<error descr="Cannot resolve method 'min(int, ?)'">(d.height, bounds.<error descr="Cannot resolve symbol 'height'">height</error>)</error>);
+				} else if ((iclass == "combolist") || (iclass == "popupmenu")) {
+						iclass = iclass; //compiler bug
+				} else {
+					setRectangle(comp, "bounds", 0, 0, bounds.<error descr="Cannot resolve symbol 'width'">width</error>, bounds.<error descr="Cannot resolve symbol 'height'">height</error>);
+				}
+				doLayout(comp);
+			}
+		}
+		else if ("spinbox" == classname) {
+			layoutField(component, block, false, 0);
+		}
+		else if ("splitpane" == classname) {
+			<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> bounds = getRectangle(component, "bounds");
+			boolean horizontal = ("vertical" != get(component, "orientation"));
+			int divider = getInteger(component, "divider", -1);
+			int maxdiv = (horizontal ? bounds.<error descr="Cannot resolve symbol 'width'">width</error> : bounds.<error descr="Cannot resolve symbol 'height'">height</error>) - 5;
+
+			Object comp1 = get(component, "component");
+			boolean visible1 = (comp1 != null) && getBoolean(comp1, "visible", true);
+			if (divider == -1) {
+				int d1 = 0;
+				if (visible1) {
+					Dimension d = getPreferredSize(comp1);
+					d1 = horizontal ? d.width : d.height;
+				}
+				divider = Math.min(d1, maxdiv);
+				setInteger(component, "divider", divider, -1);
+			}
+			else if (divider > maxdiv) {
+				setInteger(component, "divider", divider = maxdiv, -1);
+			}
+
+			if (visible1) {
+				setRectangle(comp1, "bounds", 0, 0, horizontal ? divider : bounds.<error descr="Cannot resolve symbol 'width'">width</error>,
+					horizontal ? bounds.<error descr="Cannot resolve symbol 'height'">height</error> : divider);
+				doLayout(comp1);
+			}
+			Object comp2 = (comp1 != null) ? get(comp1, ":next") : null;
+			if ((comp2 != null) && getBoolean(comp2, "visible", true)) {
+				setRectangle(comp2, "bounds", horizontal ? (divider + 5) : 0,
+					horizontal ? 0 : (divider + 5),
+					horizontal ? (bounds.<error descr="Cannot resolve symbol 'width'">width</error> - 5 - divider) : bounds.<error descr="Cannot resolve symbol 'width'">width</error>,
+					horizontal ? bounds.<error descr="Cannot resolve symbol 'height'">height</error> : (bounds.<error descr="Cannot resolve symbol 'height'">height</error> - 5 - divider));
+				doLayout(comp2);
+			}
+		}
+		else if (("list" == classname) ||
+				("table" == classname) || ("tree" == classname)) {
+			int width = 0;
+			int columnheight = 0;
+			if ("table" == classname) {
+				for (Object column = get(component, "column");
+						column != null; column = get(column, ":next")) {
+					width += getInteger(column, "width", 80);
+					Dimension d = getSize(column, 2, 2, "left");
+					columnheight = Math.max(columnheight, d.height);
+				}
+			}
+			String itemname = ("list" == classname) ? "item" :
+				(("table" == classname) ? "row" : "node");
+			int y = 0;
+			int level = 0;
+			for (Object item = get(component, itemname); item != null;) {
+				int x = 0;
+				int iwidth = 0; int iheight = 0;
+				if ("table" == classname) {
+					iwidth = width;
+					for (Object cell = get(item, "cell");
+							cell != null; cell = get(cell, ":next")) {
+						Dimension d = getSize(cell, 2, 3, "left");
+						iheight = Math.max(iheight, d.height);
+					}
+				}
+				else {
+					if ("tree" == classname) {
+						x = (level + 1) * block;
+					}
+					Dimension d = getSize(item, 2, 3, "left");
+					iwidth = d.width; iheight = d.height;
+					width = Math.max(width, x + d.width);
+				}
+				setRectangle(item, "bounds", x, y, iwidth, iheight);
+				y += iheight;
+				if ("tree" == classname) {
+					Object next = get(item, "node");
+					if ((next != null) && getBoolean(item, "expanded", true)) {
+						level++;
+					} else {
+						while (((next = get(item, ":next")) == null) && (level > 0)) {
+							item = getParent(item);
+							level--;
+						}
+					}
+					item = next;
+				} else {
+					item = get(item, ":next");
+				}
+			}
+			layoutScrollPane(component, width, y - 1, 0, columnheight);
+		}
+		else if ("menubar" == classname) {
+			<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> bounds = getRectangle(component, "bounds");
+			int x = 0;
+			for (Object menu = get(component, "menu");
+					menu != null; menu = get(menu, ":next")) {
+				Dimension d = getSize(menu, 8, 4, "left");
+				setRectangle(menu, "bounds", x, 0, d.width, bounds.<error descr="Cannot resolve symbol 'height'">height</error>);
+				x += d.width;
+			}
+		}
+		else if (("combolist" == classname) || ("popupmenu" == classname)) {
+			boolean combo = ("combolist" == classname);
+			int pw = 0; int ph = 0; int pxy = combo ? 0 : 1;
+			for (Object item = get(get(component, combo ? "combobox" : "menu"),
+					combo ? "choice" : "menu"); item != null; item = get(item, ":next")) {
+				String itemclass = combo ? null : getClass(item);
+				Dimension d = (itemclass == "separator") ? new Dimension(1, 1) :
+					getSize(item, 8 , 4, "left");
+				if (itemclass == "checkboxmenuitem") {
+					d.width = d.width + block + 3;
+					d.height = Math.max(block, d.height);
+				}
+				else if (itemclass == "menu") {
+					d.width += block;
+				}
+				setRectangle(item, "bounds", pxy, pxy + ph, d.width, d.height);
+				pw = Math.max(pw, d.width);
+				ph += d.height;
+			}
+			<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> r = getRectangle(component, "bounds");
+			r.<error descr="Cannot resolve symbol 'width'">width</error> = pw + 2; r.<error descr="Cannot resolve symbol 'height'">height</error> = ph + 2;
+			if (combo) {
+				<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> db = getRectangle(content, "bounds");
+				if (r.<error descr="Cannot resolve symbol 'y'">y</error> + ph + 2 > db.<error descr="Cannot resolve symbol 'height'">height</error>) {
+					r.<error descr="Cannot resolve symbol 'width'">width</error> = pw + 2 + block;
+					r.<error descr="Cannot resolve symbol 'height'">height</error> = db.<error descr="Cannot resolve symbol 'height'">height</error> - r.<error descr="Cannot resolve symbol 'y'">y</error>;
+				}
+				else {
+					r.<error descr="Cannot resolve symbol 'height'">height</error> = Math.min<error descr="Cannot resolve method 'min(?, ?)'">(r.<error descr="Cannot resolve symbol 'height'">height</error>, db.<error descr="Cannot resolve symbol 'height'">height</error> - r.<error descr="Cannot resolve symbol 'y'">y</error>)</error>;
+				}
+				r.<error descr="Cannot resolve symbol 'width'">width</error> = Math.min<error descr="Cannot resolve method 'min(?, ?)'">(r.<error descr="Cannot resolve symbol 'width'">width</error>, db.<error descr="Cannot resolve symbol 'width'">width</error> - r.<error descr="Cannot resolve symbol 'x'">x</error>)</error>;
+				layoutScrollPane(component, pw, ph, 0, 0);//~
+			}
+		}
+		//java>
+		else if ("bean" == classname) {
+				<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> r = getRectangle(component, "bounds");
+				((Component) get(component, "bean")).setBounds(r);
+		}
+		//<java
+	}
+
+	/**
+	 *
+	 */
+	private Object popup(Object component, Object classname) {
+		Object popup = null;
+		int px = 0; int py = 0;
+		if (("menubar" == classname) || ("popupmenu" == classname)) {
+			Object popupmenu = get(component, "popupmenu");
+			Object selected = get(component, "selected");
+			if (popupmenu != null) {
+				if (get(popupmenu, "menu") == selected) { return null; }
+				set(popupmenu, "selected", null);
+				set(popupmenu, "menu", null);
+				removeItemImpl(content, "component", popupmenu);
+				repaint(popupmenu);
+				set(popupmenu, ":parent", null);
+				set(component, "popupmenu", null);
+				if (mouseinside == popupmenu) {
+					findComponent(content, mousex, mousey);
+					handleMouseEvent(mousex, mousex, 1, false, false, false, //java
+						<error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_ENTERED, mouseinside, insidepart); //java
+				}
+				popup(popupmenu, "popupmenu");
+			}
+			if ((selected == null) || (getClass(selected) != "menu")) { return null; }
+			popup = createImpl("popupmenu");
+			set(popup, "menu", selected);
+			set(component, "popupmenu", popup);
+
+			<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> bounds = getRectangle(selected, "bounds");
+			if ("menubar" == classname) {
+				px = bounds.<error descr="Cannot resolve symbol 'x'">x</error>; py = bounds.<error descr="Cannot resolve symbol 'y'">y</error> + bounds.<error descr="Cannot resolve symbol 'height'">height</error> - 1;
+			} else {
+				px = bounds.<error descr="Cannot resolve symbol 'x'">x</error> + getRectangle(component, "bounds").<error descr="Cannot resolve symbol 'width'">width</error> - 4;
+				py = bounds.<error descr="Cannot resolve symbol 'y'">y</error>;
+			}
+		}
+		else { //if ("combobox" == classname) {
+			popup = createImpl("combolist");
+			set(popup, "combobox", component);
+			set(component, "combolist", popup);
+
+			py = getRectangle(component, "bounds").<error descr="Cannot resolve symbol 'height'">height</error> + 1;
+		}
+		if (("menubar" == classname) || ("combobox" == classname)) {
+			popupowner = component;
+		}
+		insertItem(content, "component", popup, 0);
+		set(popup, ":parent", content);
+		while (component != content) {
+			<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> r = getRectangle(component, "bounds");
+			px += r.<error descr="Cannot resolve symbol 'x'">x</error>; py += r.<error descr="Cannot resolve symbol 'y'">y</error>;
+			component = getParent(component);
+		}
+		setRectangle(popup, "bounds", px, py, 0, 0);
+		doLayout(popup); repaint(popup);
+		return popup;
+	}
+
+	/**
+	 *
+	 */
+	private void closeup(Object combobox, Object combolist, Object item) {
+		if ((item != null) && getBoolean(item, "enabled", true)) {
+			String text = getString(item, "text", "");
+			set(combobox, "text", text); // if editable
+			setInteger(combobox, "start", text.length(), 0);
+			setInteger(combobox, "end", 0, 0);
+			set(combobox, "icon", get(item, "icon"));
+			validate(combobox);
+			setInteger(combobox, "selected", getIndex(combobox, "choice", item), -1);
+			invoke(combobox, "action");
+		}
+		set(combolist, "combobox", null);
+		set(combobox, "combolist", null);
+		removeItemImpl(content, "component", combolist);
+		repaint(combolist);
+		set(combolist, ":parent", null);
+		popupowner = null;
+		if (mouseinside == combolist) {
+			findComponent(content, mousex, mousey);
+			handleMouseEvent(mousex, mousex, 1, false, false, false, //java
+				<error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_ENTERED, mouseinside, insidepart); //java
+		}
+	}
+
+	/**
+	 *
+	 */
+	private void closeup(Object menubar) {
+		set(menubar, "selected", null);
+		popup(menubar, "menubar");
+		repaint(menubar); // , selected
+		popupowner = null;
+	}
+
+	/**
+	 *
+	 */
+	private void closeup() {
+		if (popupowner != null) {
+			String classname = getClass(popupowner);
+			if ("menubar" == classname) {
+				closeup(popupowner);
+			}
+			else if ("combobox" == classname) {
+				closeup(popupowner, get(popupowner, "combolist"), null);
+			}
+		}
+	}
+
+	/**
+	 *
+	 */
+	private void showTip() {
+		String text = null;
+		tooltipowner = null;
+		String classname = getClass(mouseinside);
+		if ((classname == "tabbedpane") || (classname == "menubar") || (classname == "popupmenu")) {
+			if (insidepart != null) {
+				text = getString(insidepart, "tooltip", null);
+			}
+		}
+		else if (classname == "combolist") {
+			if (insidepart instanceof Object[]) {
+				text = getString(insidepart, "tooltip", null);
+			}
+		}
+		//list table tree
+		if (text == null) { text = getString(mouseinside, "tooltip", null); }
+			else { tooltipowner = insidepart; }
+		if (text != null) {
+			<error descr="Cannot resolve symbol 'FontMetrics'">FontMetrics</error> fm = getFontMetrics(getFont());
+			int width = fm.<error descr="Cannot resolve method 'stringWidth(java.lang.String)'">stringWidth</error>(text) + 4;
+			int height = fm.<error descr="Cannot resolve method 'getAscent()'">getAscent</error>() + fm.<error descr="Cannot resolve method 'getDescent()'">getDescent</error>() + 4;
+			if (tooltipowner == null) { tooltipowner = mouseinside; }
+			setRectangle(tooltipowner, "tooltipbounds", mousex + 10, mousey + 10, width, height);
+			repaint(mousex + 10, mousey + 10, width, height);
+		}
+	}
+
+	/**
+	 *
+	 */
+	private void hideTip() {
+		if (tooltipowner != null) {
+			<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> bounds = getRectangle(tooltipowner, "tooltipbounds");
+			set(tooltipowner, "tooltipbounds", null);
+			tooltipowner = null;
+			repaint(bounds.<error descr="Cannot resolve symbol 'x'">x</error>, bounds.<error descr="Cannot resolve symbol 'y'">y</error>, bounds.<error descr="Cannot resolve symbol 'width'">width</error>, bounds.<error descr="Cannot resolve symbol 'height'">height</error>);
+		}
+	}
+
+	/**
+	 *
+	 */
+	private void layoutField(Object component, int dw, boolean hidden, int left) {
+		int width = getRectangle(component, "bounds").<error descr="Cannot resolve symbol 'width'">width</error> - left -dw;
+		String text = getString(component, "text", "");
+		int start = getInteger(component, "start", 0);
+		if (start > text.length()) { setInteger(component, "start", start = text.length(), 0); }
+		int end = getInteger(component, "end", 0);
+		if (end > text.length()) { setInteger(component, "end", end = text.length(), 0); }
+		int offset = getInteger(component, "offset", 0);
+		int off = offset;
+		<error descr="Cannot resolve symbol 'FontMetrics'">FontMetrics</error> fm = getFontMetrics(getFont());
+		int caret = hidden ? (fm.<error descr="Cannot resolve method 'charWidth(char)'">charWidth</error>('*') * end) :
+			fm.<error descr="Cannot resolve method 'stringWidth(java.lang.String)'">stringWidth</error>(text.substring(0, end)); //java
+			//midp font.substringWidth(text, 0, end);
+		if (off > caret) {
+			off = caret;
+		}
+		else if (off < caret - width + 4) {
+			off = caret - width + 4;
+		}
+		off = Math.max<error descr="Cannot resolve method 'max(int, ?)'">(0, Math.min<error descr="Cannot resolve method 'min(int, ?)'">(off, (hidden ? (fm.<error descr="Cannot resolve method 'charWidth(char)'">charWidth</error>('*') *
+			text.length()) : fm.<error descr="Cannot resolve method 'stringWidth(java.lang.String)'">stringWidth</error>(text)) - width + 4)</error>)</error>;
+		if (off != offset) {
+			setInteger(component, "offset", off, 0);
+		}
+	}
+
+	/**
+	 *
+	 */
+	private void layoutScrollPane(Object component,
+			int contentwidth, int contentheight, int rowwidth, int columnheight) {
+		<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> bounds = getRectangle(component, "bounds");
+		boolean hneed = false; boolean vneed = false;
+		if (contentwidth > bounds.<error descr="Cannot resolve symbol 'width'">width</error> - rowwidth - 2) {
+			hneed = true;
+			vneed = (contentheight > bounds.<error descr="Cannot resolve symbol 'height'">height</error> - columnheight - 2 - block);
+		}
+		if (vneed || (contentheight > bounds.<error descr="Cannot resolve symbol 'height'">height</error> - columnheight - 2)) {
+			vneed = true;
+			hneed = hneed || (contentwidth > bounds.<error descr="Cannot resolve symbol 'width'">width</error> - rowwidth - 2 - block);
+		}
+		int viewportwidth = bounds.<error descr="Cannot resolve symbol 'width'">width</error> - rowwidth - (vneed ? block : 0);
+		int viewportheight = bounds.<error descr="Cannot resolve symbol 'height'">height</error> - columnheight - (hneed ? block : 0);
+		setRectangle(component, ":port",
+			rowwidth, columnheight, viewportwidth, viewportheight); //?rowwidth
+
+		<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> view = getRectangle(component, ":view");
+		setRectangle(component, ":view",
+			(view != null) ? Math.max<error descr="Cannot resolve method 'max(int, ?)'">(0,
+				Math.min<error descr="Cannot resolve method 'min(?, int)'">(view.<error descr="Cannot resolve symbol 'x'">x</error>, contentwidth - viewportwidth + 2)</error>)</error> : 0,
+			(view != null) ? Math.max<error descr="Cannot resolve method 'max(int, ?)'">(0,
+				Math.min<error descr="Cannot resolve method 'min(?, int)'">(view.<error descr="Cannot resolve symbol 'y'">y</error>, contentheight - viewportheight + 2)</error>)</error> : 0,
+			Math.max(viewportwidth - 2, contentwidth),
+			Math.max(viewportheight - 2, contentheight));
+	}
+
+	/**
+	 *
+	 */
+	private void scrollToVisible(Object component,
+			int x, int y, int width, int height) {
+		<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> view = getRectangle(component, ":view");
+		<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> port = getRectangle(component, ":port");
+		int vx = Math.max<error descr="Cannot resolve method 'max(?, ?)'">(x + width - port.<error descr="Cannot resolve symbol 'width'">width</error> + 2, Math.min<error descr="Cannot resolve method 'min(?, int)'">(view.<error descr="Cannot resolve symbol 'x'">x</error>, x)</error>)</error>;
+		int vy = Math.max<error descr="Cannot resolve method 'max(?, ?)'">(y + height - port.<error descr="Cannot resolve symbol 'height'">height</error> + 2, Math.min<error descr="Cannot resolve method 'min(?, int)'">(view.<error descr="Cannot resolve symbol 'y'">y</error>, y)</error>)</error>;
+		if ((view.<error descr="Cannot resolve symbol 'x'">x</error> != vx) || (view.<error descr="Cannot resolve symbol 'y'">y</error> != vy)) {
+			repaint(component); // horizontal | vertical
+			view.<error descr="Cannot resolve symbol 'x'">x</error> = vx; view.<error descr="Cannot resolve symbol 'y'">y</error> = vy;
+		}
+	}
+
+	/**
+	 *
+	 */
+	public Dimension getPreferredSize() {
+		return getPreferredSize(content);
+	}
+
+	/**
+	 *
+	 */
+	private Dimension getPreferredSize(Object component) {
+		int width = getInteger(component, "width", 0);
+		int height = getInteger(component, "height", 0);
+		if ((width > 0) && (height > 0)) {
+			return new Dimension(width, height);
+		}
+		String classname = getClass(component);
+		//System.out.println("classname: " + classname);
+		if ("label" == classname) {
+			return getSize(component, 0, 0, "left");
+		}
+		if ("button" == classname) {
+			return getSize(component, 12, 6, "center");
+		}
+		if ("checkbox" == classname) {
+			Dimension d = getSize(component, 0, 0, "left");
+			d.width = d.width + block + 3;
+			d.height = Math.max(block, d.height);
+			return d;
+		}
+		if ("combobox" == classname) {
+			if (getBoolean(component, "editable", true)) {
+				Dimension size = getFieldSize(component);
+				<error descr="Cannot resolve symbol 'Image'">Image</error> icon = getIcon(component, "icon", null);
+				if (icon != null) {
+					size.width += icon.<error descr="Cannot resolve method 'getWidth(Thinlet)'">getWidth</error>(this);
+					size.height = Math.max<error descr="Cannot resolve method 'max(int, ?)'">(size.height, icon.<error descr="Cannot resolve method 'getHeight(Thinlet)'">getHeight</error>(this) + 2)</error>;
+				}
+				size.width += block;
+				return size;
+			} else {
+				int selected = getInteger(component, "selected", -1);
+				return getSize((selected != -1) ?
+					getItemImpl(component, "choice", selected) :
+					get(component, "choice"), 4 + block, 4, "left");
+			}
+		}
+		if (("textfield" == classname) || ("passwordfield" == classname)) {
+			return getFieldSize(component);
+		}
+		if ("textarea" == classname) {
+			int columns = getInteger(component, "columns", 0);
+			int rows = getInteger(component, "rows", 0); // 'e' -> 'm' ?
+			<error descr="Cannot resolve symbol 'FontMetrics'">FontMetrics</error> fm = getFontMetrics(getFont()); //java
+			return new Dimension(
+				((columns > 0) ? (columns * fm.<error descr="Cannot resolve method 'charWidth(char)'">charWidth</error>('e') + 2) : 76) + 2 + block,
+				((rows > 0) ? (rows * fm.<error descr="Cannot resolve method 'getHeight()'">getHeight</error>() - fm.<error descr="Cannot resolve method 'getLeading()'">getLeading</error>() + 2) : 76) + 2 + block);
+		}
+		if ("tabbedpane" == classname) {
+			String placement = getString(component, "placement", "top");
+			boolean horizontal = ((placement == "top") || (placement == "bottom"));
+			int tabsize = 0;
+			int contentwidth = 0; int contentheight = 0;
+			for (Object comp = get(component, "tab");
+					comp != null; comp = get(comp, ":next")) {
+				Dimension d = getSize(comp, 8, 4, "left");
+				tabsize = Math.max(tabsize, horizontal ? d.height : d.width);
+			}
+			for (Object comp = get(component, "component");
+					comp != null; comp = get(comp, ":next")) {
+				if (!getBoolean(comp, "visible", true)) { continue; }
+				Dimension d = getPreferredSize(comp);
+				contentwidth = Math.max(contentwidth, d.width);
+				contentheight = Math.max(contentheight, d.height);
+			}
+			return new Dimension(contentwidth + (horizontal ? 4 : (tabsize + 3)),
+				contentheight + (horizontal ? (tabsize + 3) : 4));
+		}
+		if (("panel" == classname) || (classname == "dialog")) {
+			Dimension size = new Dimension(
+				getInteger(component, "left", 0) + getInteger(component, "right", 0),
+				getInteger(component, "top", 0) + getInteger(component, "bottom", 0));
+			if (classname == "dialog") {
+				int titleheight = getSize(component, 0, 0, "left").height;
+				setInteger(component, "titleheight", titleheight, 0);
+				size.width += 8; size.height += 8 + titleheight;
+			}
+			int gap = getInteger(component, "gap", 0);
+			int[][] grid = getGrid(component, gap);
+			if (grid != null) {
+				size.width += getSum(grid[0], 0, grid[0].length, gap, false);
+				size.height += getSum(grid[1], 0, grid[1].length, gap, false);
+			}
+			return size;
+		}
+		else if ("desktop" == classname) {
+			Dimension size = new Dimension();
+			for (Object comp = get(component, "component");
+					comp != null; comp = get(comp, ":next")) {
+				String iclass = getClass(comp);
+				if ((iclass != "dialog") && (iclass != "popupmenu") &&
+						(iclass != "combolist")) {
+					Dimension d = getPreferredSize(comp);
+					size.width = Math.max(d.width, size.width);
+					size.height = Math.max(d.height, size.height);
+				}
+			}
+			return size;
+		}
+		if ("spinbox" == classname) {
+			Dimension size = getFieldSize(component);
+			size.width += block;
+			return size;
+		}
+		if ("progressbar" == classname) {
+			boolean horizontal = ("vertical" != get(component, "orientation"));
+			return new Dimension(horizontal ? 76 : 6, horizontal ? 6 : 76);
+		}
+		if ("slider" == classname) {
+			boolean horizontal = ("vertical" != get(component, "orientation"));
+			return new Dimension(horizontal ? 76 : 10, horizontal ? 10 : 76);
+		}
+		if ("splitpane" == classname) {
+			boolean horizontal = ("vertical" != get(component, "orientation"));
+			Object comp1 = get(component, "component");
+			Dimension size = ((comp1 == null) || !getBoolean(comp1, "visible", true)) ?
+				new Dimension() : getPreferredSize(comp1);
+			Object comp2 = get(comp1, ":next");
+			if ((comp2 != null) && getBoolean(comp2, "visible", true)) {
+				Dimension d = getPreferredSize(comp2);
+				size.width = horizontal ? (size.width + d.width) :
+					Math.max(size.width, d.width);
+				size.height = horizontal ? Math.max(size.height, d.height) :
+					(size.height + d.height);
+			}
+			if (horizontal) { size.width += 5; } else { size.height += 5; }
+			return size;
+		}
+		if (("list" == classname) ||
+				("table" == classname) || ("tree" == classname)) {
+			return new Dimension(76 + 2 + block, 76 + 2 + block);
+		}
+		if ("separator" == classname) {
+			return new Dimension(1, 1);
+		}
+		if ("menubar" == classname) {
+			Dimension size = new Dimension(0, 0);
+			for (Object menu = get(component, "menu");
+					menu != null; menu = get(menu, ":next")) {
+				Dimension d = getSize(menu, 8, 4, "left");
+				size.width += d.width;
+				size.height = Math.max(size.height, d.height);
+			}
+			return size;
+		}
+		//java>
+		if ("bean" == classname) {
+				return ((Component) get(component, "bean")).getPreferredSize();
+		}
+		//<java
+		throw new IllegalArgumentException((String) classname);
+	}
+
+	/**
+	 *
+	 */
+	private int[][] getGrid(Object component, int gap) {
+		int count = 0;
+		for (Object comp = get(component, "component"); comp != null;
+				comp = get(comp, ":next")) {
+			if (getBoolean(comp, "visible", true)) { count++; }
+		}
+		if (count == 0) { return null; }
+		int columns = getInteger(component, "columns", 0);
+		int icols = (columns != 0) ? columns : count;
+		int irows = (columns != 0) ? ((count + columns - 1) / columns) : 1;
+		int[][] grid = {
+			new int[icols], new int[irows], // columnwidths, rowheights
+			new int[icols], new int[irows], // columnweights, rowweights
+			new int[count], new int[count], // gridx, gridy
+			new int[count], new int[count] }; // gridwidth, gridheight
+		int[] columnheight = new int[icols];
+		int[][] cache = null; // preferredwidth, height, columnweight, rowweight
+
+		int i = 0; int x = 0; int y = 0;
+		int nextsize = 0;
+		for (Object comp = get(component, "component");
+				comp != null; comp = get(comp, ":next")) {
+			if (!getBoolean(comp, "visible", true)) { continue; }
+			int colspan = ((columns != 0) && (columns < count)) ?
+				Math.min(getInteger(comp, "colspan", 1), columns) : 1;
+			int rowspan = (columns != 1) ? getInteger(comp, "rowspan", 1) : 1;
+
+			for (int j = 0; j < colspan; j++) {
+				if ((columns != 0) && (x + colspan > columns)) {
+					x = 0; y++; j = -1;
+				}
+				else if (columnheight[x + j] > y) {
+					x += (j + 1); j = -1;
+				}
+			}
+			if (y + rowspan > grid[1].length) {
+				int[] rowheights = new int[y + rowspan];
+				System.arraycopy(grid[1], 0, rowheights, 0, grid[1].length);
+				grid[1] = rowheights;
+				int[] rowweights = new int[y + rowspan];
+				System.arraycopy(grid[3], 0, rowweights, 0, grid[3].length);
+				grid[3] = rowweights;
+			}
+			for (int j = 0; j < colspan; j++) {
+				columnheight[x + j] = y + rowspan;
+			}
+
+			int weightx = getInteger(comp, "weightx", 0);
+			int weighty = getInteger(comp, "weighty", 0);
+			Dimension d = getPreferredSize(comp);
+
+			if (colspan == 1) {
+				grid[0][x] = Math.max(grid[0][x], d.width); // columnwidths
+				grid[2][x] = Math.max(grid[2][x], weightx); // columnweights
+			}
+			else {
+				if (cache == null) { cache = new int[4][count]; }
+				cache[0][i] = d.width;
+				cache[2][i] = weightx;
+				if ((nextsize == 0) || (colspan < nextsize)) { nextsize = colspan; }
+			}
+			if (rowspan == 1) {
+				grid[1][y] = Math.max(grid[1][y], d.height); // rowheights
+				grid[3][y] = Math.max(grid[3][y], weighty); // rowweights
+			}
+			else {
+				if (cache == null) { cache = new int[4][count]; }
+				cache[1][i] = d.height;
+				cache[3][i] = weighty;
+				if ((nextsize == 0) || (rowspan < nextsize)) { nextsize = rowspan; }
+			}
+			grid[4][i] = x; //gridx
+			grid[5][i] = y; //gridy
+			grid[6][i] = colspan; //gridwidth
+			grid[7][i] = rowspan; //gridheight
+
+			x += colspan;
+			i++;
+		}
+
+		while (nextsize != 0) {
+			int size = nextsize; nextsize = 0;
+			for (int j = 0; j < 2; j++) { // horizontal, vertical
+				for (int k = 0; k < count; k++) {
+					if (grid[6 + j][k] == size) { // gridwidth, gridheight
+						int gridpoint = grid[4 + j][k]; // gridx, gridy
+
+						int weightdiff = cache[2 + j][k];
+						for (int m = 0; (weightdiff > 0) && (m < size); m++) {
+							weightdiff -= grid[2 + j][gridpoint + m];
+						}
+						if (weightdiff > 0) {
+							int weightsum = cache[2 + j][k] - weightdiff;
+							for (int m = 0; (weightsum > 0) && (m < size); m++) {
+								int weight = grid[2 + j][gridpoint + m];
+								if (weight > 0) {
+									int weightinc = weight * weightdiff / weightsum;
+									grid[2 + j][gridpoint + m] += weightinc;
+									weightdiff -= weightinc;
+									weightsum -= weightinc;
+								}
+							}
+							grid[2 + j][gridpoint + size - 1] += weightdiff;
+						}
+
+						int sizediff = cache[j][k];
+						int weightsum = 0;
+						for (int m = 0; (sizediff > 0) && (m < size); m++) {
+							sizediff -= grid[j][gridpoint + m];
+							weightsum += grid[2 + j][gridpoint + m];
+						}
+						if (sizediff > 0) {
+							for (int m = 0; (weightsum > 0) && (m < size); m++) {
+								int weight = grid[2 + j][gridpoint + m];
+								if (weight > 0) {
+									int sizeinc = weight * sizediff / weightsum;
+									grid[j][gridpoint + m] += sizeinc;
+									sizediff -= sizeinc;
+									weightsum -= weight;
+								}
+							}
+							grid[j][gridpoint + size - 1] += sizediff;
+						}
+					}
+					else if ((grid[6 + j][k] > size) &&
+							((nextsize == 0) || (grid[6 + j][k] < nextsize))) {
+						nextsize = grid[6 + j][k];
+					}
+				}
+			}
+		}
+		return grid;
+	}
+
+	/**
+	 *
+	 */
+	private int getSum(int[] values,
+			int from, int length, int gap, boolean last) {
+		if (length <= 0) { return 0; }
+		int value = 0;
+		for (int i = 0; i < length; i++) {
+			value += values[from + i];
+		}
+		return value + (length - (last ? 0 : 1)) * gap;
+	}
+
+	/**
+	 *
+	 */
+	private Dimension getFieldSize(Object component) {
+		String text = getString(component, "text", "");
+		int columns = getInteger(component, "columns", 0);
+		<error descr="Cannot resolve symbol 'FontMetrics'">FontMetrics</error> fm = getFontMetrics(getFont());
+		return new Dimension(((columns > 0) ?
+			(columns * fm.<error descr="Cannot resolve method 'charWidth(char)'">charWidth</error>('e')) : 76) + 4,
+			fm.<error descr="Cannot resolve method 'getAscent()'">getAscent</error>() + fm.<error descr="Cannot resolve method 'getDescent()'">getDescent</error>() + 4); // fm.stringWidth(text)
+	}
+
+	/**
+	 *
+	 */
+	private Dimension getSize(Object component,
+			int dx, int dy, String defaultalignment) {
+		String text = getString(component, "text", null);
+		int tw = 0; int th = 0;
+		if (text != null) {
+			<error descr="Cannot resolve symbol 'FontMetrics'">FontMetrics</error> fm = getFontMetrics(getFont());
+			tw = fm.<error descr="Cannot resolve method 'stringWidth(java.lang.String)'">stringWidth</error>(text);
+			th = fm.<error descr="Cannot resolve method 'getAscent()'">getAscent</error>() + fm.<error descr="Cannot resolve method 'getDescent()'">getDescent</error>();
+		}
+		<error descr="Cannot resolve symbol 'Image'">Image</error> icon = getIcon(component, "icon", null);
+		int iw = 0; int ih = 0;
+		if (icon != null) {
+			iw = icon.<error descr="Cannot resolve method 'getWidth(Thinlet)'">getWidth</error>(this);
+			ih = icon.<error descr="Cannot resolve method 'getHeight(Thinlet)'">getHeight</error>(this);
+		}
+		return new Dimension(tw + iw + dx, Math.max(th, ih) + dy);
+	}
+	//java>
+
+	/**
+	 *
+	 */
+	public void update(<error descr="Cannot resolve symbol 'Graphics'">Graphics</error> g) {
+		paint(g);
+	}
+
+	/**
+	 *~
+	 */
+	public boolean imageUpdate(<error descr="Cannot resolve symbol 'Image'">Image</error> img, int infoflags, int x, int y, int width, int height) {
+		if (infoflags == <error descr="Cannot resolve symbol 'ImageObserver'">ImageObserver</error>.ALLBITS) {
+			validate(content);
+			return super.imageUpdate(img, infoflags, x, y, width, height);
+		}
+		return true;
+	}
+
+	/**
+	 *
+	 */
+	public void paint(<error descr="Cannot resolve symbol 'Graphics'">Graphics</error> g) {
+		//g.setColor(Color.orange);
+		//g.fillRect(0, 0, getSize().width, getSize().height);
+		//long time = System.currentTimeMillis();
+		<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> clip = g.<error descr="Cannot resolve method 'getClipBounds()'">getClipBounds</error>();
+		///dg.setClip(r.x, r.y, r.width, r.height);
+		paint(g, clip.<error descr="Cannot resolve symbol 'x'">x</error>, clip.<error descr="Cannot resolve symbol 'y'">y</error>, clip.<error descr="Cannot resolve symbol 'width'">width</error>, clip.<error descr="Cannot resolve symbol 'height'">height</error>, content, isEnabled());
+		//System.out.println(System.currentTimeMillis() - time);
+		///g.setClip(0, 0, getSize().width, getSize().height);
+		//g.setColor(Color.red); g.drawRect(clip.x, clip.y, clip.width - 1, clip.height - 1);
+	}
+
+	//<java
+	/*midp
+	protected void paint(Graphics g) {
+		paint(g, g.getClipX(), g.getClipY(),
+			g.getClipWidth(), g.getClipHeight(), content, true);
+	}
+
+	protected void showNotify() {
+		setRectangle(content, "bounds", 0, 0, getWidth(), getHeight());
+		doLayout(content);
+	}
+	midp*/
+
+	/**
+	 *
+	 */
+	private void paint(<error descr="Cannot resolve symbol 'Graphics'">Graphics</error> g,
+			int clipx, int clipy, int clipwidth, int clipheight,
+			Object component, boolean enabled) {
+		if (!getBoolean(component, "visible", true)) { return; }
+		<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> bounds = getRectangle(component, "bounds");
+		if (bounds == null) { return; }
+		if (bounds.<error descr="Cannot resolve symbol 'width'">width</error> < 0) {
+			bounds.<error descr="Cannot resolve symbol 'width'">width</error> = Math.abs<error descr="Cannot resolve method 'abs(?)'">(bounds.<error descr="Cannot resolve symbol 'width'">width</error>)</error>;
+			doLayout(component);
+		}
+		if ((clipx + clipwidth < bounds.<error descr="Cannot resolve symbol 'x'">x</error>) ||
+				(clipx > bounds.<error descr="Cannot resolve symbol 'x'">x</error> + bounds.<error descr="Cannot resolve symbol 'width'">width</error>) ||
+				(clipy + clipheight < bounds.<error descr="Cannot resolve symbol 'y'">y</error>) ||
+				(clipy > bounds.<error descr="Cannot resolve symbol 'y'">y</error> + bounds.<error descr="Cannot resolve symbol 'height'">height</error>)) {
+			return;
+		}
+		clipx -= bounds.<error descr="Cannot resolve symbol 'x'">x</error>; clipy -= bounds.<error descr="Cannot resolve symbol 'y'">y</error>;
+		String classname = getClass(component);
+		boolean pressed = (mousepressed == component);
+		boolean inside = (mouseinside == component) &&
+			((mousepressed == null) || pressed);
+		boolean focus = focusinside && (focusowner == component);
+		enabled = getBoolean(component, "enabled", true); //enabled &&
+		g.<error descr="Cannot resolve method 'translate(?, ?)'">translate</error>(bounds.<error descr="Cannot resolve symbol 'x'">x</error>, bounds.<error descr="Cannot resolve symbol 'y'">y</error>);
+		//g.setClip(0, 0, bounds.width, bounds.height);
+
+		if ("label" == classname) {
+			paintContent(component, g, clipx, clipy, clipwidth, clipheight,
+				0, 0, bounds.<error descr="Cannot resolve symbol 'width'">width</error>, bounds.<error descr="Cannot resolve symbol 'height'">height</error>,
+				enabled ? c_text : c_disable, "left", true);
+		}
+		else if ("button" == classname) {
+			paintRect(g, 0, 0, bounds.<error descr="Cannot resolve symbol 'width'">width</error>, bounds.<error descr="Cannot resolve symbol 'height'">height</error>,
+				enabled ? c_border : c_disable,
+				enabled ? ((inside != pressed) ? c_hover :
+					(pressed ? c_press : c_ctrl)) : c_bg, true, true, true, true);
+			if (focus) {
+				g.<error descr="Cannot resolve method 'setColor(Color)'">setColor</error>(c_focus);
+				g.<error descr="Cannot resolve method 'drawRect(int, int, ?, ?)'">drawRect</error>(2, 2, bounds.<error descr="Cannot resolve symbol 'width'">width</error> - 5, bounds.<error descr="Cannot resolve symbol 'height'">height</error> - 5);
+			}
+			paintContent(component, g, clipx, clipy, clipwidth, clipheight,
+				6, 3, bounds.<error descr="Cannot resolve symbol 'width'">width</error> - 12, bounds.<error descr="Cannot resolve symbol 'height'">height</error> - 6,
+				enabled ? c_text : c_disable, "center", true);
+		}
+		else if ("checkbox" == classname) {
+			boolean selected = getBoolean(component, "selected", false);
+			String group = getString(component, "group", null);
+			<error descr="Cannot resolve symbol 'Color'">Color</error> border = enabled ? c_border : c_disable;
+			<error descr="Cannot resolve symbol 'Color'">Color</error> foreground = enabled ? ((inside != pressed) ? c_hover :
+				(pressed ? c_press : c_ctrl)) : c_bg;
+			int dy = (bounds.<error descr="Cannot resolve symbol 'height'">height</error> - block + 2) / 2;
+			if (group == null) {
+				paintRect(g, 1, dy + 1, block - 2, block - 2,
+					border, foreground, true, true, true, true);
+			} else {
+				g.<error descr="Cannot resolve method 'setColor(Color)'">setColor</error>((foreground != c_ctrl) ? foreground : c_bg);
+				g.<error descr="Cannot resolve method 'fillOval(int, int, int, int)'">fillOval</error>(1, dy + 1, block - 3, block - 3); //java
+				g.<error descr="Cannot resolve method 'setColor(Color)'">setColor</error>(border);
+				g.<error descr="Cannot resolve method 'drawOval(int, int, int, int)'">drawOval</error>(1, dy + 1, block - 3, block - 3); //java
+			}
+			if (focus) {
+				g.<error descr="Cannot resolve method 'setColor(Color)'">setColor</error>(c_focus);
+				if (group == null) {
+					g.<error descr="Cannot resolve method 'drawRect(int, int, int, int)'">drawRect</error>(3, dy + 3, block - 7, block - 7);
+				} else {
+					g.<error descr="Cannot resolve method 'drawOval(int, int, int, int)'">drawOval</error>(3, dy + 3, block - 7, block - 7); //java
+				}
+			}
+			if((!selected && inside && pressed) ||
+					(selected && (!inside || !pressed))) {
+				g.<error descr="Cannot resolve method 'setColor(Color)'">setColor</error>(enabled ? c_text : c_disable);
+				if (group == null) {
+					g.<error descr="Cannot resolve method 'fillRect(int, int, int, int)'">fillRect</error>(3, dy + block - 9, 2, 6);
+					g.<error descr="Cannot resolve method 'drawLine(int, int, int, int)'">drawLine</error>(3, dy + block - 4, block - 4, dy + 3);
+					g.<error descr="Cannot resolve method 'drawLine(int, int, int, int)'">drawLine</error>(4, dy + block - 4, block - 4, dy + 4);
+				} else {
+					g.<error descr="Cannot resolve method 'fillOval(int, int, int, int)'">fillOval</error>(5, dy + 5, block - 10, block - 10); //java
+					g.<error descr="Cannot resolve method 'drawOval(int, int, int, int)'">drawOval</error>(4, dy + 4, block - 9, block - 9); //java
+				}
+			}
+			paintContent(component, g, clipx, clipy, clipwidth, clipheight,
+				block + 3, 0, bounds.<error descr="Cannot resolve symbol 'width'">width</error> - block - 3, bounds.<error descr="Cannot resolve symbol 'height'">height</error>,
+				enabled ? c_text : c_disable, "left", true);
+		}
+		else if ("combobox" == classname) {
+			if (getBoolean(component, "editable", true)) {
+				<error descr="Cannot resolve symbol 'Image'">Image</error> icon = getIcon(component, "icon", null);
+				int left = (icon != null) ? icon.<error descr="Cannot resolve method 'getWidth(Thinlet)'">getWidth</error>(this) : 0;
+				paintField(g, clipx, clipy, clipwidth, clipheight, component,
+					bounds.<error descr="Cannot resolve symbol 'width'">width</error> - block, bounds.<error descr="Cannot resolve symbol 'height'">height</error>,
+					inside, pressed, focus, enabled, false, left);
+				if (icon != null) {
+					g.<error descr="Cannot resolve method 'drawImage(Image, int, ?, Thinlet)'">drawImage</error>(icon, 2, (bounds.<error descr="Cannot resolve symbol 'height'">height</error> - icon.<error descr="Cannot resolve method 'getHeight(Thinlet)'">getHeight</error>(this)) / 2, this); //java
+					//midp g.drawImage(icon, 2, bounds.height / 2, Graphics.LEFT | Graphics.VCENTER);
+				}
+				paintArrow(g, bounds.<error descr="Cannot resolve symbol 'width'">width</error> - block, 0, block, bounds.<error descr="Cannot resolve symbol 'height'">height</error>,
+					'S', enabled, inside, pressed, "down", true, false, true, true);
+			} else {
+				paintRect(g, 0, 0, bounds.<error descr="Cannot resolve symbol 'width'">width</error>, bounds.<error descr="Cannot resolve symbol 'height'">height</error>,
+					enabled ? c_border : c_disable,
+					enabled ? ((inside != pressed) ? c_hover :
+						(pressed ? c_press : c_ctrl)) : c_bg, true, true, true, true);
+				paintContent(component, g, clipx, clipy, clipwidth, clipheight,
+					2, 2, bounds.<error descr="Cannot resolve symbol 'width'">width</error> - block - 4, bounds.<error descr="Cannot resolve symbol 'height'">height</error> - 4,
+					enabled ? c_text : c_disable, "left", false);
+				paintArrow(g, bounds.<error descr="Cannot resolve symbol 'width'">width</error> - block, 0, block, bounds.<error descr="Cannot resolve symbol 'height'">height</error>, 'S');
+				if (focus) {
+					g.<error descr="Cannot resolve method 'setColor(Color)'">setColor</error>(c_focus);
+					g.<error descr="Cannot resolve method 'drawRect(int, int, ?, ?)'">drawRect</error>(2, 2, bounds.<error descr="Cannot resolve symbol 'width'">width</error> - block - 5, bounds.<error descr="Cannot resolve symbol 'height'">height</error> - 5);
+				}
+			}
+		}
+		else if ("combolist" == classname) {
+			<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> view = getRectangle(component, ":view");
+			<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> viewport = getRectangle(component, ":port");
+			g.<error descr="Cannot resolve method 'setColor(Color)'">setColor</error>(c_border);
+			g.<error descr="Cannot resolve method 'drawRect(?, ?, ?, ?)'">drawRect</error>(viewport.<error descr="Cannot resolve symbol 'x'">x</error>, viewport.<error descr="Cannot resolve symbol 'y'">y</error>, viewport.<error descr="Cannot resolve symbol 'width'">width</error> - 1, viewport.<error descr="Cannot resolve symbol 'height'">height</error> - 1);
+			if (paintScrollPane(g, clipx, clipy, clipwidth, clipheight,
+					bounds, view, viewport, enabled, inside, pressed)) {
+				Object selected = get(component, "inside");
+				int ly = clipy - viewport.<error descr="Cannot resolve symbol 'y'">y</error> - 1;
+				int yfrom = view.<error descr="Cannot resolve symbol 'y'">y</error> + Math.max(0, ly);
+				int yto = view.<error descr="Cannot resolve symbol 'y'">y</error> + Math.min<error descr="Cannot resolve method 'min(?, int)'">(viewport.<error descr="Cannot resolve symbol 'height'">height</error> - 2, ly + clipheight)</error>;
+				for (Object choice = get(get(component, "combobox"), "choice");
+						choice != null; choice = get(choice, ":next")) {
+					<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> r = getRectangle(choice, "bounds");
+					if (yto <= r.<error descr="Cannot resolve symbol 'y'">y</error>) { break; }
+					if (yfrom >= r.<error descr="Cannot resolve symbol 'y'">y</error> + r.<error descr="Cannot resolve symbol 'height'">height</error>) { continue; }
+					boolean armed = (selected == choice);
+					paintRect(g, r.<error descr="Cannot resolve symbol 'x'">x</error>, r.<error descr="Cannot resolve symbol 'y'">y</error>, bounds.<error descr="Cannot resolve symbol 'width'">width</error> - 2, r.<error descr="Cannot resolve symbol 'height'">height</error>, c_border,
+						armed ? c_select : c_bg, false, false, false, false);
+					paintContent(choice, g, clipx, yfrom, clipwidth, yto - yfrom,
+						r.<error descr="Cannot resolve symbol 'x'">x</error> + 4, r.<error descr="Cannot resolve symbol 'y'">y</error> + 2, bounds.<error descr="Cannot resolve symbol 'width'">width</error> - 10, r.<error descr="Cannot resolve symbol 'height'">height</error> - 4,
+						getBoolean(choice, "enabled", true) ? c_text : c_disable, "left", false);
+				}
+				resetScrollPane(g, clipx, clipy, clipwidth, clipheight, view, viewport);
+			}
+			//paintRect(g, 0, 0, bounds.width, bounds.height,
+			//	secondary1, c_ctrl, true, true, true, true);
+		}
+		else if (("textfield" == classname) || ("passwordfield" == classname)) {
+			paintField(g, clipx, clipy, clipwidth, clipheight, component,
+				bounds.<error descr="Cannot resolve symbol 'width'">width</error>, bounds.<error descr="Cannot resolve symbol 'height'">height</error>,
+				inside, pressed, focus, enabled, ("passwordfield" == classname), 0);
+		}
+		else if ("textarea" == classname) {
+			<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> view = getRectangle(component, ":view");
+			<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> viewport = getRectangle(component, ":port");
+			boolean editable = getBoolean(component, "editable", true);
+			paintRect(g, viewport.<error descr="Cannot resolve symbol 'x'">x</error>, viewport.<error descr="Cannot resolve symbol 'y'">y</error>, viewport.<error descr="Cannot resolve symbol 'width'">width</error>, viewport.<error descr="Cannot resolve symbol 'height'">height</error>,
+				enabled ? c_border : c_disable, editable ? c_textbg : c_bg,
+				true, true, true, true);
+			if (paintScrollPane(g, clipx, clipy, clipwidth, clipheight,
+					bounds, view, viewport, enabled, inside, pressed)) {
+				String text = getString(component, "text", "");
+				int start = focus ? getInteger(component, "start", 0) : 0;
+				int end = focus ? getInteger(component, "end", 0) : 0;
+				int is = Math.min(start, end); int ie = Math.max(start, end);
+				boolean wrap = getBoolean(component, "wrap", false);
+				<error descr="Cannot resolve symbol 'FontMetrics'">FontMetrics</error> fm = g.<error descr="Cannot resolve method 'getFontMetrics()'">getFontMetrics</error>(); //java
+				int fontascent = fm.<error descr="Cannot resolve method 'getAscent()'">getAscent</error>(); int fontheight = fm.<error descr="Cannot resolve method 'getHeight()'">getHeight</error>(); //java
+				//midp int fontheight = fm.getHeight();
+				int ascent = 1;
+				int ly = clipy - viewport.<error descr="Cannot resolve symbol 'y'">y</error> - 1;
+				int yfrom = view.<error descr="Cannot resolve symbol 'y'">y</error> + Math.max(0, ly);
+				int yto = view.<error descr="Cannot resolve symbol 'y'">y</error> + Math.min<error descr="Cannot resolve method 'min(?, int)'">(viewport.<error descr="Cannot resolve symbol 'height'">height</error> - 2, ly + clipheight)</error>;
+				//g.setColor(Color.pink); g.fillRect(0, yfrom - 1, 75, 2); g.fillRect(0, yto - 1, 75, 2);
+
+				boolean prevletter = false; int n = text.length(); char c = 0;
+				for (int i = 0, j = -1, k = 0; k <= n; k++) { // j is the last space index (before k)
+					if (yto <= ascent) { break; }
+					if (wrap) {
+						if (((k == n) || ((c = text.charAt(k)) == '\n') || (c == ' ')) &&
+								(j  > i) && (fm.<error descr="Cannot resolve method 'stringWidth(java.lang.String)'">stringWidth</error>(text.substring(i, k)) > viewport.<error descr="Cannot resolve symbol 'width'">width</error> - 4)) {
+							k--; // draw line to the begin of the current word (+ spaces) if it is out of width
+						}
+						else if ((k == n) || (c == '\n')) { // draw line to the text/line end
+							j = k; prevletter = false;
+						}
+						else {
+							if ((c == ' ') && (prevletter || (j > i))) { j = k; } // keep spaces starting the line
+							prevletter = (c != ' ');
+							continue;
+						}
+					}
+					else {
+						if ((k == n) || ((c = text.charAt(k)) == '\n')) { j = k; } else { continue; }
+					}
+					if (yfrom < ascent + fontheight) {
+						String line = (j != -1) ? text.substring(i, j) : text.substring(i); //java
+						if (focus && (is != ie) && (ie >= i) && ((j == -1) || (is <= j))) {
+							int xs = (is < i) ? -1 : (((j != -1) && (is > j)) ? (view.<error descr="Cannot resolve symbol 'width'">width</error> - 1) :
+								fm.<error descr="Cannot resolve method 'stringWidth(java.lang.String)'">stringWidth</error>(text.substring(i, is))); //java
+								//midp font.substringWidth(text, i, is - i));
+							int xe = ((j != -1) && (ie > j)) ? (view.<error descr="Cannot resolve symbol 'width'">width</error> - 1) :
+								fm.<error descr="Cannot resolve method 'stringWidth(java.lang.String)'">stringWidth</error>(text.substring(i, ie)); //java
+								//midp font.substringWidth(text, i, ie - i);
+							g.<error descr="Cannot resolve method 'setColor(Color)'">setColor</error>(c_select);
+							g.<error descr="Cannot resolve method 'fillRect(int, int, int, int)'">fillRect</error>(1 + xs, ascent, xe - xs, fontheight);
+						}
+						g.<error descr="Cannot resolve method 'setColor(Color)'">setColor</error>(enabled ? c_text : c_disable);
+						g.<error descr="Cannot resolve method 'drawString(java.lang.String, int, int)'">drawString</error>(line, 1, ascent + fontascent); //java
+						//midp g.drawSubstring(text, i, ((j != -1) ? j : text.length()) - i, 1, ascent, Graphics.LEFT | Graphics.TOP);
+						if (focus && (end >= i) && ((j == -1) || (end <= j))) {
+							int caret = fm.<error descr="Cannot resolve method 'stringWidth(java.lang.String)'">stringWidth</error>(text.substring(i, end)); //java
+							//midp int caret = font.substringWidth(text, i, end - i);
+							g.<error descr="Cannot resolve method 'setColor(Color)'">setColor</error>(c_focus);
+							g.<error descr="Cannot resolve method 'fillRect(int, int, int, int)'">fillRect</error>(caret, ascent, 1, fontheight);
+						}
+					}
+					ascent += fontheight;
+					i = j + 1;
+				}
+				resetScrollPane(g, clipx, clipy, clipwidth, clipheight, view, viewport);
+			}
+		}
+		else if ("tabbedpane" == classname) {
+			int i = 0; <error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> last = null;
+			int selected = getInteger(component, "selected", 0);
+			String placement = getString(component, "placement", "top");
+			for (Object comp = get(component, "tab");
+					comp != null; comp = get(comp, ":next")) {
+				<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> r = getRectangle(comp, "bounds");
+				boolean hover = !(selected == i) && inside &&
+					(mousepressed == null) && (insidepart == comp);
+				boolean sel = (selected == i);
+				boolean tabenabled = enabled && getBoolean(comp, "enabled", true);
+				paintRect(g, r.<error descr="Cannot resolve symbol 'x'">x</error>, r.<error descr="Cannot resolve symbol 'y'">y</error>, r.<error descr="Cannot resolve symbol 'width'">width</error>, r.<error descr="Cannot resolve symbol 'height'">height</error>,
+					enabled ? c_border : c_disable,
+					tabenabled ? (sel ? c_bg : (hover ? c_hover : c_ctrl)) : c_ctrl,
+					(placement != "bottom") || !sel, (placement != "right") || !sel,
+					(placement == "bottom") || ((placement == "top") && !sel),
+					(placement == "right") || ((placement == "left") && !sel));
+				if (focus && sel) {
+					g.<error descr="Cannot resolve method 'setColor(Color)'">setColor</error>(c_focus);
+					g.<error descr="Cannot resolve method 'drawRect(?, ?, ?, ?)'">drawRect</error>(r.<error descr="Cannot resolve symbol 'x'">x</error> + 2, r.<error descr="Cannot resolve symbol 'y'">y</error> + 2, r.<error descr="Cannot resolve symbol 'width'">width</error> - 4, r.<error descr="Cannot resolve symbol 'height'">height</error> - 4);
+				}
+				paintContent(comp, g, clipx, clipy, clipwidth, clipheight,
+					r.<error descr="Cannot resolve symbol 'x'">x</error> + 4, r.<error descr="Cannot resolve symbol 'y'">y</error> + 2, r.<error descr="Cannot resolve symbol 'width'">width</error> - 8, r.<error descr="Cannot resolve symbol 'height'">height</error> - 4,
+					tabenabled ? c_text : c_disable, "left", true);
+				i++; last = r;
+			}
+			if (last != null) {
+				boolean horizontal = ((placement == "top") || (placement == "bottom"));
+				paintRect(g, horizontal ? (last.<error descr="Cannot resolve symbol 'x'">x</error> + last.<error descr="Cannot resolve symbol 'width'">width</error>) : last.<error descr="Cannot resolve symbol 'x'">x</error>,
+					horizontal ? last.<error descr="Cannot resolve symbol 'y'">y</error> : (last.<error descr="Cannot resolve symbol 'y'">y</error> + last.<error descr="Cannot resolve symbol 'height'">height</error>),
+					horizontal ? (bounds.<error descr="Cannot resolve symbol 'width'">width</error> - last.<error descr="Cannot resolve symbol 'x'">x</error> - last.<error descr="Cannot resolve symbol 'width'">width</error>) : last.<error descr="Cannot resolve symbol 'width'">width</error>,
+					horizontal ? last.<error descr="Cannot resolve symbol 'height'">height</error> : (bounds.<error descr="Cannot resolve symbol 'height'">height</error> - last.<error descr="Cannot resolve symbol 'y'">y</error> - last.<error descr="Cannot resolve symbol 'height'">height</error>),
+					enabled ? c_border : c_disable, c_bg,
+					(placement != "top"), (placement != "left"),
+					(placement == "top"), (placement == "left"));
+				paintRect(g, (placement == "left") ? last.<error descr="Cannot resolve symbol 'width'">width</error> : 0,
+					(placement == "top") ? last.<error descr="Cannot resolve symbol 'height'">height</error> : 0,
+					horizontal ? bounds.<error descr="Cannot resolve symbol 'width'">width</error> : (bounds.<error descr="Cannot resolve symbol 'width'">width</error> - last.<error descr="Cannot resolve symbol 'width'">width</error>),
+					horizontal ? (bounds.<error descr="Cannot resolve symbol 'height'">height</error> - last.<error descr="Cannot resolve symbol 'height'">height</error>) : bounds.<error descr="Cannot resolve symbol 'height'">height</error>,
+					enabled ? c_border : c_disable, c_bg,
+					(placement != "top"), (placement != "left"),
+					(placement != "bottom"), (placement != "right"));
+			}
+			Object tabcontent = getItemImpl(component, "component", selected);
+			if (tabcontent != null) {
+				paint(g, clipx, clipy, clipwidth, clipheight, tabcontent, enabled);
+			}
+		}
+		else if (("panel" == classname) || ("dialog" == classname)) {
+			if ("dialog" == classname) {
+				int titleheight = getInteger(component, "titleheight", 0);
+				paintRect(g, 0, 0, bounds.<error descr="Cannot resolve symbol 'width'">width</error>, 3 + titleheight,
+					c_border, c_ctrl, true, true, false, true);
+				paintRect(g, 0, 3 + titleheight, bounds.<error descr="Cannot resolve symbol 'width'">width</error>, bounds.<error descr="Cannot resolve symbol 'height'">height</error> - 3 - titleheight,
+					c_border, c_press, false, true, true, true);
+				paintContent(component, g, clipx, clipy, clipwidth, clipheight,
+					3, 2, bounds.<error descr="Cannot resolve symbol 'width'">width</error> - 6, titleheight, c_text, "left", false);
+				paintRect(g, 3, 3 + titleheight, bounds.<error descr="Cannot resolve symbol 'width'">width</error> - 6, bounds.<error descr="Cannot resolve symbol 'height'">height</error> - 6 - titleheight,
+					c_border, c_bg, true, true, true, true);
+			} else {
+				paintRect(g, 0, 0, bounds.<error descr="Cannot resolve symbol 'width'">width</error>, bounds.<error descr="Cannot resolve symbol 'height'">height</error>,
+					c_border, c_bg, false, false, false, false);
+			}
+			for (Object comp = get(component, "component");
+					comp != null; comp = get(comp, ":next")) {
+				paint(g, clipx, clipy, clipwidth, clipheight, comp, enabled);
+			}
+		}
+		else if ("desktop" == classname) {
+			paintReverse(g, clipx, clipy, clipwidth, clipheight,
+				get(component, "component"), enabled);
+			//g.setColor(Color.red); if (clip != null) g.drawRect(clipx, clipy, clipwidth, clipheight);
+			if (tooltipowner != null) {
+				<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> r = getRectangle(tooltipowner, "tooltipbounds");
+				paintRect(g, r.<error descr="Cannot resolve symbol 'x'">x</error>, r.<error descr="Cannot resolve symbol 'y'">y</error>, r.<error descr="Cannot resolve symbol 'width'">width</error>, r.<error descr="Cannot resolve symbol 'height'">height</error>,
+					c_border, c_bg, true, true, true, true);
+				String text = getString(tooltipowner, "tooltip", null);
+				g.<error descr="Cannot resolve method 'setColor(Color)'">setColor</error>(c_text);
+				g.<error descr="Cannot resolve method 'drawString(java.lang.String, ?, ?)'">drawString</error>(text, r.<error descr="Cannot resolve symbol 'x'">x</error> + 2, r.<error descr="Cannot resolve symbol 'y'">y</error> + g.<error descr="Cannot resolve method 'getFontMetrics()'">getFontMetrics</error>().getAscent() + 2); //java
+				//midp g.drawString(text, r.x + 2, r.y + (r.height - font.getHeight()) / 2, Graphics.LEFT | Graphics.TOP);
+			}
+		}
+		else if ("spinbox" == classname) {
+			paintField(g, clipx, clipy, clipwidth, clipheight, component,
+				bounds.<error descr="Cannot resolve symbol 'width'">width</error> - block, bounds.<error descr="Cannot resolve symbol 'height'">height</error>,
+				inside, pressed, focus, enabled, false, 0);
+			paintArrow(g, bounds.<error descr="Cannot resolve symbol 'width'">width</error> - block, 0, block, bounds.<error descr="Cannot resolve symbol 'height'">height</error> / 2,
+					'N', enabled, inside, pressed, "up", true, false, false, true);
+			paintArrow(g, bounds.<error descr="Cannot resolve symbol 'width'">width</error> - block, bounds.<error descr="Cannot resolve symbol 'height'">height</error> / 2,
+				block, bounds.<error descr="Cannot resolve symbol 'height'">height</error> - (bounds.<error descr="Cannot resolve symbol 'height'">height</error> / 2),
+				'S', enabled, inside, pressed, "down", true, false, true, true);
+		}
+		else if ("progressbar" == classname) {
+			int minimum = getInteger(component, "minimum", 0);
+			int maximum = getInteger(component, "maximum", 100);
+			int value = getInteger(component, "value", 0);
+			boolean horizontal = ("vertical" != get(component, "orientation"));
+			int length = (value - minimum) *
+				((horizontal ? bounds.<error descr="Cannot resolve symbol 'width'">width</error> : bounds.<error descr="Cannot resolve symbol 'height'">height</error>) - 1) / (maximum - minimum);
+			paintRect(g, 0, 0, horizontal ? length : bounds.<error descr="Cannot resolve symbol 'width'">width</error>,
+				horizontal ? bounds.<error descr="Cannot resolve symbol 'height'">height</error> : length, enabled ? c_border : c_disable,
+				c_select, true, true, horizontal, !horizontal);
+			paintRect(g, horizontal ? length : 0, horizontal ? 0 : length,
+				horizontal ? (bounds.<error descr="Cannot resolve symbol 'width'">width</error> - length) : bounds.<error descr="Cannot resolve symbol 'width'">width</error>	,
+				horizontal ? bounds.<error descr="Cannot resolve symbol 'height'">height</error> : (bounds.<error descr="Cannot resolve symbol 'height'">height</error> - length),
+				enabled ? c_border : c_disable, c_bg, true, true, true, true);
+		}
+		else if ("slider" == classname) {
+			int minimum = getInteger(component, "minimum", 0);
+			int maximum = getInteger(component, "maximum", 100);
+			int value = getInteger(component, "value", 0);
+			boolean horizontal = ("vertical" != get(component, "orientation"));
+			int length = (value - minimum) *
+				((horizontal ? bounds.<error descr="Cannot resolve symbol 'width'">width</error> : bounds.<error descr="Cannot resolve symbol 'height'">height</error>) - block) /
+				(maximum - minimum);
+			paintRect(g, horizontal ? 0 : 3, horizontal ? 3 : 0,
+				horizontal ? length : (bounds.<error descr="Cannot resolve symbol 'width'">width</error> - 6),
+				horizontal ? (bounds.<error descr="Cannot resolve symbol 'height'">height</error> - 6) : length,
+				enabled ? c_border : c_disable,
+				c_bg, true, true, horizontal, !horizontal);
+			paintRect(g, horizontal ? length : 0, horizontal ? 0 : length,
+				horizontal ? block : bounds.<error descr="Cannot resolve symbol 'width'">width</error>, horizontal ? bounds.<error descr="Cannot resolve symbol 'height'">height</error> : block,
+				enabled ? c_border : c_disable,
+				enabled ? c_ctrl : c_bg, true, true, true, true);
+			if (focus) {
+				g.<error descr="Cannot resolve method 'setColor(Color)'">setColor</error>(c_focus);
+				g.<error descr="Cannot resolve method 'drawRect(int, int, int, int)'">drawRect</error>(horizontal ? (length + 2) : 2, horizontal ? 2 : (length + 2),
+					(horizontal ? block : bounds.<error descr="Cannot resolve symbol 'width'">width</error>) - 5,
+					(horizontal ? bounds.<error descr="Cannot resolve symbol 'height'">height</error> : block) - 5);
+				//g.drawRect(length + 1, 1, block - 3, bounds.height - 3);
+			}
+			paintRect(g, horizontal ? (block + length) : 3,
+				horizontal ? 3 : (block + length),
+				bounds.<error descr="Cannot resolve symbol 'width'">width</error> - (horizontal ? (block + length) : 6),
+				bounds.<error descr="Cannot resolve symbol 'height'">height</error> - (horizontal ? 6 : (block + length)),
+				enabled ? c_border : c_disable,
+				c_bg, horizontal, !horizontal, true, true);
+		}
+		else if ("splitpane" == classname) {
+			boolean horizontal = ("vertical" != get(component, "orientation"));
+			int divider = getInteger(component, "divider", -1);
+			paintRect(g, horizontal ? divider : 0, horizontal ? 0 : divider,
+				horizontal ? 5 : bounds.<error descr="Cannot resolve symbol 'width'">width</error>, horizontal ? bounds.<error descr="Cannot resolve symbol 'height'">height</error> : 5,
+				c_border, c_bg, false, false, false, false);
+			g.<error descr="Cannot resolve method 'setColor(Color)'">setColor</error>(enabled ? (focus ? c_focus : c_border) : c_disable);
+			int xy = horizontal ? bounds.<error descr="Cannot resolve symbol 'height'">height</error> : bounds.<error descr="Cannot resolve symbol 'width'">width</error>;
+			int xy1 = Math.max(0, xy / 2 - 12);
+			int xy2 = Math.min(xy / 2 + 12, xy - 1);
+			for (int i = divider + 1; i < divider + 4; i += 2) {
+				if (horizontal) { g.<error descr="Cannot resolve method 'drawLine(int, int, int, int)'">drawLine</error>(i, xy1, i, xy2); }
+					else { g.<error descr="Cannot resolve method 'drawLine(int, int, int, int)'">drawLine</error>(xy1, i, xy2, i); }
+			}
+			Object comp1 = get(component, "component");
+			if (comp1 != null) {
+				paint(g, clipx, clipy, clipwidth, clipheight, comp1, enabled);
+				Object comp2 = get(comp1, ":next");
+				if (comp2 != null) {
+					paint(g, clipx, clipy, clipwidth, clipheight, comp2, enabled);
+				}
+			}
+		}
+		else if (("list" == classname) ||
+				("table" == classname) || ("tree" == classname)) {
+			<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> view = getRectangle(component, ":view");
+			<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> viewport = getRectangle(component, ":port");
+			int[] columnwidths = null;
+			int lx = clipx - viewport.<error descr="Cannot resolve symbol 'x'">x</error> - 1;
+			int xfrom = view.<error descr="Cannot resolve symbol 'x'">x</error> + Math.max(0, lx);
+			int xto = view.<error descr="Cannot resolve symbol 'x'">x</error> + Math.min<error descr="Cannot resolve method 'min(?, int)'">(viewport.<error descr="Cannot resolve symbol 'width'">width</error> - 2, lx + clipwidth)</error>;
+			if ("table" == classname) {
+				columnwidths = new int[getItemCountImpl(component, "column")];
+				int i = 0; int x = 0; boolean drawheader = (clipy < viewport.<error descr="Cannot resolve symbol 'y'">y</error>);
+				if (drawheader) { g.<error descr="Cannot resolve method 'setClip(?, int, ?, ?)'">setClip</error>(viewport.<error descr="Cannot resolve symbol 'x'">x</error>, 0, viewport.<error descr="Cannot resolve symbol 'width'">width</error>, viewport.<error descr="Cannot resolve symbol 'y'">y</error>); }
+				for (Object column = get(component, "column");
+						column != null; column = get(column, ":next")) {
+					boolean lastcolumn = (i == columnwidths.length - 1);
+					int width = getInteger(column, "width", 80);
+					if (lastcolumn) { width = Math.max<error descr="Cannot resolve method 'max(int, ?)'">(width, viewport.<error descr="Cannot resolve symbol 'width'">width</error> - x)</error>; }
+					columnwidths[i] = width;
+					if (drawheader && (xfrom < x + width) && (xto > x)) {
+						paintRect(g, x - view.<error descr="Cannot resolve symbol 'x'">x</error>, 0, width, viewport.<error descr="Cannot resolve symbol 'y'">y</error>,
+							enabled ? c_border : c_disable, enabled ? c_ctrl : c_bg,
+							true, true, false, lastcolumn);
+						paintContent(column, g, clipx, clipy, clipwidth, clipheight,
+							x + 2 - view.<error descr="Cannot resolve symbol 'x'">x</error>, 1, width - 2,
+							viewport.<error descr="Cannot resolve symbol 'y'">y</error> - 2, enabled ? c_text : c_disable, "left", false);
+					}
+					i++; x += width;
+				}
+				if (drawheader) { g.<error descr="Cannot resolve method 'setClip(int, int, int, int)'">setClip</error>(clipx, clipy, clipwidth, clipheight); }
+			}
+			paintRect(g, viewport.<error descr="Cannot resolve symbol 'x'">x</error>, viewport.<error descr="Cannot resolve symbol 'y'">y</error>, viewport.<error descr="Cannot resolve symbol 'width'">width</error>, viewport.<error descr="Cannot resolve symbol 'height'">height</error>,
+				enabled ? c_border : c_disable, c_textbg, true, true, true, true);
+			if (paintScrollPane(g, clipx, clipy, clipwidth, clipheight, bounds,
+					view, viewport, enabled, inside, pressed)) {
+				Object lead = get(component, "lead");
+				int ly = clipy - viewport.<error descr="Cannot resolve symbol 'y'">y</error> - 1;
+				int yfrom = view.<error descr="Cannot resolve symbol 'y'">y</error> + Math.max(0, ly);
+				int yto = view.<error descr="Cannot resolve symbol 'y'">y</error> + Math.min<error descr="Cannot resolve method 'min(?, int)'">(viewport.<error descr="Cannot resolve symbol 'height'">height</error> - 2, ly + clipheight)</error>;
+				for (Object item = get(component, ("list" == classname) ? "item" :
+						(("table" == classname) ? "row" : "node")); item != null;) {
+					<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> r = getRectangle(item, "bounds");
+					if (lead == null) {
+						set(component, "lead", lead = item); // draw first item focused when lead is null
+					}
+					if (yto <= r.<error descr="Cannot resolve symbol 'y'">y</error>) { break; } // the clip bounds are above
+
+					Object next = ("tree" == classname) ? get(item, "node") : null;
+					boolean expanded = (next != null) &&
+							getBoolean(item, "expanded", true);
+					if (yfrom < r.<error descr="Cannot resolve symbol 'y'">y</error> + r.<error descr="Cannot resolve symbol 'height'">height</error>) { // the clip rectangle is not bellow the current item
+						boolean selected = getBoolean(item, "selected", false);
+						paintRect(g, 0, r.<error descr="Cannot resolve symbol 'y'">y</error>, view.<error descr="Cannot resolve symbol 'width'">width</error>, r.<error descr="Cannot resolve symbol 'height'">height</error>,
+							c_bg, selected ? c_select : c_textbg, false, false, true, false);
+						if (focus && (lead == item)) {
+							g.<error descr="Cannot resolve method 'setColor(Color)'">setColor</error>(c_focus);
+							g.<error descr="Cannot resolve method 'drawRect(int, ?, ?, ?)'">drawRect</error>(0, r.<error descr="Cannot resolve symbol 'y'">y</error>, view.<error descr="Cannot resolve symbol 'width'">width</error> - 1, r.<error descr="Cannot resolve symbol 'height'">height</error> - 2);
+						}
+						if ("table" == classname) {
+							int x = 0; int i = 0;
+							for (Object cell = get(item, "cell");
+									cell != null; cell = get(cell, ":next")) {
+								if (xto <= x) { break; }
+								int iwidth = (i < columnwidths.length) ? columnwidths[i] : 80;
+								if (xfrom < x + iwidth) {
+									boolean cellenabled = enabled && getBoolean(cell, "enabled", true);
+									paintContent(cell, g, xfrom, yfrom, xto - xfrom, yto - yfrom,
+										r.<error descr="Cannot resolve symbol 'x'">x</error> + x + 1, r.<error descr="Cannot resolve symbol 'y'">y</error> + 1, iwidth - 2, r.<error descr="Cannot resolve symbol 'height'">height</error> - 3,
+										cellenabled ? c_text : c_disable, "left", false);
+								}
+								x += iwidth; i++;
+							}
+						} else {
+							boolean itemenabled = enabled && getBoolean(item, "enabled", true);
+							paintContent(item, g, xfrom, yfrom, xto - xfrom, yto - yfrom,
+								r.<error descr="Cannot resolve symbol 'x'">x</error> + 1, r.<error descr="Cannot resolve symbol 'y'">y</error> + 1, view.<error descr="Cannot resolve symbol 'width'">width</error> - r.<error descr="Cannot resolve symbol 'x'">x</error> - 2,
+								r.<error descr="Cannot resolve symbol 'height'">height</error> - 3, itemenabled ? c_text : c_disable, "left", false);
+
+							if (next != null) {
+								int x = r.<error descr="Cannot resolve symbol 'x'">x</error> - block / 2;
+								int y = r.<error descr="Cannot resolve symbol 'y'">y</error> + (r.<error descr="Cannot resolve symbol 'height'">height</error> - 1) / 2;
+								//g.drawRect(x - 4, y - 4, 8, 8);
+								paintRect(g, x - 4, y - 4, 9, 9, itemenabled ? c_border : c_disable,
+									itemenabled ? c_ctrl : c_bg, true, true, true, true);
+								g.<error descr="Cannot resolve method 'setColor(Color)'">setColor</error>(itemenabled ? c_text : c_disable);
+								g.<error descr="Cannot resolve method 'drawLine(int, int, int, int)'">drawLine</error>(x - 2, y, x + 2, y);
+								if (!expanded) {
+									g.<error descr="Cannot resolve method 'drawLine(int, int, int, int)'">drawLine</error>(x, y - 2, x, y + 2);
+								}
+							}
+						}
+					}
+					if ("tree" == classname) {
+						if ((next == null) || !expanded) {
+							while ((item != component) && ((next = get(item, ":next")) == null)) {
+								item = getParent(item);
+							}
+						}
+						item = next;
+					} else {
+						item = get(item, ":next");
+					}
+				}
+				/*if (columnwidths != null) {
+					g.setColor(c_bg);
+					for (int i = 0, cx = -1; i < columnwidths.length - 1; i++) {
+						cx += columnwidths[i];
+						g.drawLine(cx, 0, cx, view.height);
+					}
+				}*/
+				resetScrollPane(g, clipx, clipy, clipwidth, clipheight, view, viewport);
+			}
+		}
+		else if ("separator" == classname) {
+			g.<error descr="Cannot resolve method 'setColor(Color)'">setColor</error>(enabled ? c_border : c_disable);
+			g.<error descr="Cannot resolve method 'fillRect(int, int, ?, ?)'">fillRect</error>(0, 0, bounds.<error descr="Cannot resolve symbol 'width'">width</error>, bounds.<error descr="Cannot resolve symbol 'height'">height</error>);
+		}
+		else if ("menubar" == classname) {
+			Object selected = get(component, "selected");
+			int lastx = 0;
+			for (Object menu = get(component, "menu");
+					menu != null; menu = get(menu, ":next")) {
+				<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> mb = getRectangle(menu, "bounds");
+				if (clipx + clipwidth <= mb.<error descr="Cannot resolve symbol 'x'">x</error>) { break; }
+				if (clipx >= mb.<error descr="Cannot resolve symbol 'x'">x</error> + mb.<error descr="Cannot resolve symbol 'width'">width</error>) { continue; }
+				boolean armed = (selected == menu);
+				boolean hoover = (selected == null) && (insidepart == menu);
+				paintRect(g, mb.<error descr="Cannot resolve symbol 'x'">x</error>, 0, mb.<error descr="Cannot resolve symbol 'width'">width</error>, bounds.<error descr="Cannot resolve symbol 'height'">height</error>, enabled ? c_border : c_disable,
+					enabled ? (armed ? c_select : (hoover ? c_hover : c_ctrl)) : c_bg,
+					armed, armed, true, armed);
+				paintContent(menu, g, clipx, clipy, clipwidth, clipheight,
+					mb.<error descr="Cannot resolve symbol 'x'">x</error> + 4, 1, mb.<error descr="Cannot resolve symbol 'width'">width</error>, bounds.<error descr="Cannot resolve symbol 'height'">height</error>,
+					(enabled && getBoolean(menu, "enabled", true)) ? c_text : c_disable,
+					"left", true);
+				lastx = mb.<error descr="Cannot resolve symbol 'x'">x</error> + mb.<error descr="Cannot resolve symbol 'width'">width</error>;
+			}
+			paintRect(g, lastx, 0, bounds.<error descr="Cannot resolve symbol 'width'">width</error> - lastx, bounds.<error descr="Cannot resolve symbol 'height'">height</error>,
+				enabled ? c_border : c_disable, enabled ? c_ctrl : c_bg,
+				false, false, true, false);
+		}
+		else if ("popupmenu" == classname) {
+			paintRect(g, 0, 0, bounds.<error descr="Cannot resolve symbol 'width'">width</error>, bounds.<error descr="Cannot resolve symbol 'height'">height</error>,
+				c_border, c_bg, true, true, true, true);
+			Object selected = get(component, "selected");
+			for (Object menu = get(get(component, "menu"), "menu");
+					menu != null; menu = get(menu, ":next")) {
+				<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> r = getRectangle(menu, "bounds");
+				if (clipy + clipheight <= r.<error descr="Cannot resolve symbol 'y'">y</error>) { break; }
+				if (clipy >= r.<error descr="Cannot resolve symbol 'y'">y</error> + r.<error descr="Cannot resolve symbol 'height'">height</error>) { continue; }
+				String itemclass = getClass(menu);
+				if (itemclass == "separator") {
+					g.<error descr="Cannot resolve method 'setColor(Color)'">setColor</error>(c_border);
+					g.<error descr="Cannot resolve method 'fillRect(?, ?, ?, ?)'">fillRect</error>(r.<error descr="Cannot resolve symbol 'x'">x</error>, r.<error descr="Cannot resolve symbol 'y'">y</error>, bounds.<error descr="Cannot resolve symbol 'width'">width</error> - 2, r.<error descr="Cannot resolve symbol 'height'">height</error>);
+				} else {
+					boolean armed = (selected == menu);
+					boolean menuenabled = getBoolean(menu, "enabled", true);
+					paintRect(g, r.<error descr="Cannot resolve symbol 'x'">x</error>, r.<error descr="Cannot resolve symbol 'y'">y</error>, bounds.<error descr="Cannot resolve symbol 'width'">width</error> - 2, r.<error descr="Cannot resolve symbol 'height'">height</error>, c_border,
+						armed ? c_select : c_bg, false, false, false, false);
+					int tx = r.<error descr="Cannot resolve symbol 'x'">x</error>;
+					if (itemclass == "checkboxmenuitem") {
+						tx += block + 3;
+						boolean checked = getBoolean(menu, "selected", false);
+						String group = getString(menu, "group", null);
+						g.<error descr="Cannot resolve method 'translate(?, ?)'">translate</error>(r.<error descr="Cannot resolve symbol 'x'">x</error> + 4, r.<error descr="Cannot resolve symbol 'y'">y</error> + 2);
+						g.<error descr="Cannot resolve method 'setColor(Color)'">setColor</error>(menuenabled ? c_border : c_disable);
+						if (group == null) {
+							g.<error descr="Cannot resolve method 'drawRect(int, int, int, int)'">drawRect</error>(1, 1, block - 3, block - 3);
+						} else {
+							g.<error descr="Cannot resolve method 'drawOval(int, int, int, int)'">drawOval</error>(1, 1, block - 3, block - 3); //java
+						}
+						if (checked) {
+							g.<error descr="Cannot resolve method 'setColor(Color)'">setColor</error>(menuenabled ? c_text : c_disable);
+							if (group == null) {
+								g.<error descr="Cannot resolve method 'fillRect(int, int, int, int)'">fillRect</error>(3, block - 9, 2, 6);
+								g.<error descr="Cannot resolve method 'drawLine(int, int, int, int)'">drawLine</error>(3, block - 4, block - 4, 3);
+								g.<error descr="Cannot resolve method 'drawLine(int, int, int, int)'">drawLine</error>(4, block - 4, block - 4, 4);
+							} else {
+								g.<error descr="Cannot resolve method 'fillOval(int, int, int, int)'">fillOval</error>(5, 5, block - 10, block - 10); //java
+								g.<error descr="Cannot resolve method 'drawOval(int, int, int, int)'">drawOval</error>(4, 4, block - 9, block - 9); //java
+							}
+						}
+						g.<error descr="Cannot resolve method 'translate(?, ?)'">translate</error>(-r.<error descr="Cannot resolve symbol 'x'">x</error> - 4, -r.<error descr="Cannot resolve symbol 'y'">y</error> - 2);
+					}
+					paintContent(menu, g, clipx, clipy, clipwidth, clipheight,
+						tx + 4, r.<error descr="Cannot resolve symbol 'y'">y</error> + 2, bounds.<error descr="Cannot resolve symbol 'width'">width</error> - 10,
+						r.<error descr="Cannot resolve symbol 'height'">height</error> - 4, menuenabled ? c_text : c_disable, "left", true);
+					if (itemclass == "menu") {
+						paintArrow(g, r.<error descr="Cannot resolve symbol 'x'">x</error> + bounds.<error descr="Cannot resolve symbol 'width'">width</error> - block, r.<error descr="Cannot resolve symbol 'y'">y</error>, block, r.<error descr="Cannot resolve symbol 'height'">height</error>, 'E');
+					}
+				}
+			}
+		}
+		//java>
+		else if ("bean" == classname) {
+				g.<error descr="Cannot resolve method 'clipRect(int, int, ?, ?)'">clipRect</error>(0, 0, bounds.<error descr="Cannot resolve symbol 'width'">width</error>, bounds.<error descr="Cannot resolve symbol 'height'">height</error>);
+				((Component) get(component, "bean")).paint(g);
+				g.<error descr="Cannot resolve method 'setClip(int, int, int, int)'">setClip</error>(clipx, clipy, clipwidth, clipheight);
+		}
+		//<java
+		else throw new IllegalArgumentException((String) classname);
+		g.<error descr="Cannot resolve method 'translate(?, ?)'">translate</error>(-bounds.<error descr="Cannot resolve symbol 'x'">x</error>, -bounds.<error descr="Cannot resolve symbol 'y'">y</error>);
+		clipx += bounds.<error descr="Cannot resolve symbol 'x'">x</error>; clipy += bounds.<error descr="Cannot resolve symbol 'y'">y</error>;
+	}
+
+	/**
+	 *
+	 */
+	private void paintReverse(<error descr="Cannot resolve symbol 'Graphics'">Graphics</error> g,
+			int clipx, int clipy, int clipwidth, int clipheight,
+			Object component, boolean enabled) {
+		if (component != null) {
+			<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> bounds = getRectangle(component, "bounds");
+			if ((clipx < bounds.<error descr="Cannot resolve symbol 'x'">x</error>) ||
+					(clipx + clipwidth > bounds.<error descr="Cannot resolve symbol 'x'">x</error> + bounds.<error descr="Cannot resolve symbol 'width'">width</error>) ||
+					(clipy < bounds.<error descr="Cannot resolve symbol 'y'">y</error>) ||
+					(clipy + clipheight > bounds.<error descr="Cannot resolve symbol 'y'">y</error> + bounds.<error descr="Cannot resolve symbol 'height'">height</error>)) {
+				paintReverse(g, clipx, clipy, clipwidth, clipheight,
+					get(component, ":next"), enabled);
+			}
+			paint(g, clipx, clipy, clipwidth, clipheight, component, enabled);
+		}
+	}
+
+	/**
+	 *
+	 */
+	private void paintField(<error descr="Cannot resolve symbol 'Graphics'">Graphics</error> g,
+			int clipx, int clipy, int clipwidth, int clipheight, Object component,
+			int width, int height, boolean inside, boolean pressed,
+			boolean focus, boolean enabled, boolean hidden, int left) {
+		boolean editable = getBoolean(component, "editable", true);
+		paintRect(g, 0, 0, width, height, enabled ? c_border : c_disable,
+			editable ? c_textbg : c_bg, true, true, true, true);
+		g.<error descr="Cannot resolve method 'clipRect(int, int, int, int)'">clipRect</error>(1 + left, 1, width - left - 2, height - 2);
+
+		String text = getString(component, "text", "");
+		int offset = getInteger(component, "offset", 0);
+		<error descr="Cannot resolve symbol 'FontMetrics'">FontMetrics</error> fm = g.<error descr="Cannot resolve method 'getFontMetrics()'">getFontMetrics</error>(); //java
+
+		int caret = 0;
+		if (focus) {
+			int start = getInteger(component, "start", 0);
+			int end = getInteger(component, "end", 0);
+			caret = hidden ? (fm.<error descr="Cannot resolve method 'charWidth(char)'">charWidth</error>('*') * end) :
+				fm.<error descr="Cannot resolve method 'stringWidth(java.lang.String)'">stringWidth</error>(text.substring(0, end)); //java
+				//midp font.substringWidth(text, 0, end);
+			if (start != end) {
+				int is = hidden ? (fm.<error descr="Cannot resolve method 'charWidth(char)'">charWidth</error>('*') * start) :
+					fm.<error descr="Cannot resolve method 'stringWidth(java.lang.String)'">stringWidth</error>(text.substring(0, start)); //java
+					//midp font.substringWidth(text, 0, start);
+				g.<error descr="Cannot resolve method 'setColor(Color)'">setColor</error>(c_select);
+				g.<error descr="Cannot resolve method 'fillRect(int, int, int, int)'">fillRect</error>(2 + left - offset + Math.min(is, caret), 1,
+					Math.abs(caret - is), height - 2);
+			}
+		}
+
+		if (focus) {
+			g.<error descr="Cannot resolve method 'setColor(Color)'">setColor</error>(c_focus);
+			g.<error descr="Cannot resolve method 'fillRect(int, int, int, int)'">fillRect</error>(1 + left - offset + caret, 1, 1, height - 2);
+		}
+
+		g.<error descr="Cannot resolve method 'setColor(Color)'">setColor</error>(enabled ? c_text : c_disable);
+		int fx = 2 + left - offset;
+		int fy = (height + fm.<error descr="Cannot resolve method 'getAscent()'">getAscent</error>() - fm.<error descr="Cannot resolve method 'getDescent()'">getDescent</error>()) / 2; //java
+		//midp int fy = (height - font.getHeight()) / 2;
+		if (hidden) {
+			int fh = fm.<error descr="Cannot resolve method 'charWidth(char)'">charWidth</error>('*');
+			for (int i = text.length(); i > 0; i--) {
+				g.<error descr="Cannot resolve method 'drawString(java.lang.String, int, int)'">drawString</error>("*", fx, fy); //java
+				//midp g.drawChar('*', fx, fy, Graphics.LEFT | Graphics.TOP);
+				fx += fh;
+			}
+		} else {
+			g.<error descr="Cannot resolve method 'drawString(java.lang.String, int, int)'">drawString</error>(text, fx, fy); //java
+			//midp g.drawString(text, fx, fy, Graphics.LEFT | Graphics.TOP);
+		}
+		g.<error descr="Cannot resolve method 'setClip(int, int, int, int)'">setClip</error>(clipx, clipy, clipwidth, clipheight);
+	}
+
+	/**
+	 *
+	 */
+	private boolean paintScrollPane(<error descr="Cannot resolve symbol 'Graphics'">Graphics</error> g,
+			int clipx, int clipy, int clipwidth, int clipheight, <error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> bounds,
+			<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> view, <error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> viewport,
+			boolean enabled, boolean inside, boolean pressed) {
+		if ((viewport.<error descr="Cannot resolve symbol 'y'">y</error> + viewport.<error descr="Cannot resolve symbol 'height'">height</error> < bounds.<error descr="Cannot resolve symbol 'height'">height</error>) &&
+				(clipy + clipheight > viewport.<error descr="Cannot resolve symbol 'y'">y</error> + viewport.<error descr="Cannot resolve symbol 'height'">height</error>)) { // need horizontal
+			int x = viewport.<error descr="Cannot resolve symbol 'x'">x</error>;
+			int y = viewport.<error descr="Cannot resolve symbol 'y'">y</error> + viewport.<error descr="Cannot resolve symbol 'height'">height</error>;
+			int height = bounds.<error descr="Cannot resolve symbol 'height'">height</error> - y;
+			int button = Math.min<error descr="Cannot resolve method 'min(int, ?)'">(block, viewport.<error descr="Cannot resolve symbol 'width'">width</error> / 2)</error>;
+			int track = viewport.<error descr="Cannot resolve symbol 'width'">width</error> - (2 * button); //max 10
+			int knob = Math.min<error descr="Cannot resolve method 'min(int, ?)'">(track, Math.max<error descr="Cannot resolve method 'max(?, int)'">(track * (viewport.<error descr="Cannot resolve symbol 'width'">width</error> - 2) / view.<error descr="Cannot resolve symbol 'width'">width</error>, 6)</error>)</error>;
+			int decrease = view.<error descr="Cannot resolve symbol 'x'">x</error> * (track - knob) /
+				(view.<error descr="Cannot resolve symbol 'width'">width</error> - viewport.<error descr="Cannot resolve symbol 'width'">width</error> + 2);
+			int increase = track - decrease - knob;
+			paintArrow(g, x, y, button, height,
+				'W', enabled, inside, pressed, "left", false, true, true, false);
+			paintRect(g, x + button, y, decrease, height,
+				enabled ? c_border : c_disable, c_bg, false, true, true, false);
+			paintRect(g, x + button + decrease, y, knob, height,
+				enabled ? c_border : c_disable, enabled ? c_ctrl : c_bg, false, true, true, true);
+			int n = Math.min(5, (knob - 4) / 3);
+			g.<error descr="Cannot resolve method 'setColor(Color)'">setColor</error>(enabled ? c_border : c_disable);
+			int cx = (x + button + decrease) + (knob + 2 - n * 3) / 2;
+			for (int i = 0; i < n; i++ ) {
+				g.<error descr="Cannot resolve method 'drawLine(int, int, int, int)'">drawLine</error>(cx + i * 3, y + 2, cx + i * 3, y + height - 4);
+			}
+			paintRect(g, x + button + decrease + knob, y, increase, height,
+				enabled ? c_border : c_disable, c_bg, false, false, true, true);
+			paintArrow(g, x + button + track, y, button, height,
+				'E', enabled, inside, pressed, "right", false, false, true, true);
+		}
+		if ((viewport.<error descr="Cannot resolve symbol 'x'">x</error> + viewport.<error descr="Cannot resolve symbol 'width'">width</error> < bounds.<error descr="Cannot resolve symbol 'width'">width</error>) &&
+				(clipx + clipwidth > viewport.<error descr="Cannot resolve symbol 'x'">x</error> + viewport.<error descr="Cannot resolve symbol 'width'">width</error>)) { // need vertical
+			int x = viewport.<error descr="Cannot resolve symbol 'x'">x</error> + viewport.<error descr="Cannot resolve symbol 'width'">width</error>;
+			int y = viewport.<error descr="Cannot resolve symbol 'y'">y</error>;
+			int width = bounds.<error descr="Cannot resolve symbol 'width'">width</error> - x;
+			//if (y > 0) {
+			//	paintRect(g, x - 1, 0, width + 1, y,
+			//		enabled ? c_border : c_disable, c_bg, false, true, false, false);
+			//}
+			int track = viewport.<error descr="Cannot resolve symbol 'height'">height</error> - (2 * block);
+			int knob = track * (viewport.<error descr="Cannot resolve symbol 'height'">height</error> - 2) / view.<error descr="Cannot resolve symbol 'height'">height</error>;
+			int decrease = view.<error descr="Cannot resolve symbol 'y'">y</error> * (track - knob) /
+				(view.<error descr="Cannot resolve symbol 'height'">height</error> - viewport.<error descr="Cannot resolve symbol 'height'">height</error> + 2);
+			int increase = track - decrease - knob;
+			paintArrow(g, x, y, width, block,
+				'N', enabled, inside, pressed, "up", true, false, false, true);
+			paintRect(g, x, y + block, width, decrease,
+				enabled ? c_border : c_disable, c_bg, true, false, false, true);
+			paintRect(g, x, y + block + decrease, width, knob,
+				enabled ? c_border : c_disable, enabled ? c_ctrl : c_bg, true, false, true, true);
+			int n = Math.min(5, (knob - 4) / 3);
+			g.<error descr="Cannot resolve method 'setColor(Color)'">setColor</error>(enabled ? c_border : c_disable);
+			int cy = (y + block + decrease) + (knob + 2 - n * 3) / 2;
+			for (int i = 0; i < n; i++ ) {
+				g.<error descr="Cannot resolve method 'drawLine(int, int, int, int)'">drawLine</error>(x + 2, cy + i * 3, x + width - 4, cy + i * 3);
+			}
+			paintRect(g, x, y + block + decrease + knob, width, increase,
+				enabled ? c_border : c_disable, c_bg, false, false, true, true);
+			paintArrow(g, x, y + block + track, width, block,
+			'S', enabled, inside, pressed, "down", false, false, true, true);
+		}
+		if ((clipx + clipwidth > viewport.<error descr="Cannot resolve symbol 'x'">x</error>) && (clipy + clipheight > viewport.<error descr="Cannot resolve symbol 'y'">y</error>) &&
+				(clipx < viewport.<error descr="Cannot resolve symbol 'x'">x</error> + viewport.<error descr="Cannot resolve symbol 'width'">width</error>) && (clipy < viewport.<error descr="Cannot resolve symbol 'y'">y</error> + viewport.<error descr="Cannot resolve symbol 'height'">height</error>)) {
+			g.<error descr="Cannot resolve method 'clipRect(?, ?, ?, ?)'">clipRect</error>(viewport.<error descr="Cannot resolve symbol 'x'">x</error> + 1, viewport.<error descr="Cannot resolve symbol 'y'">y</error> + 1, viewport.<error descr="Cannot resolve symbol 'width'">width</error> - 2, viewport.<error descr="Cannot resolve symbol 'height'">height</error> - 2);
+			g.<error descr="Cannot resolve method 'translate(?, ?)'">translate</error>(viewport.<error descr="Cannot resolve symbol 'x'">x</error> + 1 - view.<error descr="Cannot resolve symbol 'x'">x</error>, viewport.<error descr="Cannot resolve symbol 'y'">y</error> + 1 - view.<error descr="Cannot resolve symbol 'y'">y</error>);
+	 		return true;
+		}
+		return false;
+	}
+
+	/**
+	 *
+	 */
+	private void resetScrollPane(<error descr="Cannot resolve symbol 'Graphics'">Graphics</error> g,
+			int clipx, int clipy, int clipwidth, int clipheight,
+			<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> view, <error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> viewport) {
+		g.<error descr="Cannot resolve method 'translate(?, ?)'">translate</error>(view.<error descr="Cannot resolve symbol 'x'">x</error> - viewport.<error descr="Cannot resolve symbol 'x'">x</error> - 1, view.<error descr="Cannot resolve symbol 'y'">y</error> - viewport.<error descr="Cannot resolve symbol 'y'">y</error> - 1);
+		g.<error descr="Cannot resolve method 'setClip(int, int, int, int)'">setClip</error>(clipx, clipy, clipwidth, clipheight);
+	}
+
+	/**
+	 *
+	 */
+	private void paintRect(<error descr="Cannot resolve symbol 'Graphics'">Graphics</error> g, int x, int y, int width, int height,
+			<error descr="Cannot resolve symbol 'Color'">Color</error> border, <error descr="Cannot resolve symbol 'Color'">Color</error> bg,
+			boolean top, boolean left, boolean bottom, boolean right) {
+		if ((width <= 0) || (height <= 0)) return;
+		g.<error descr="Cannot resolve method 'setColor(Color)'">setColor</error>(border);
+		if (top) {
+			g.<error descr="Cannot resolve method 'drawLine(int, int, int, int)'">drawLine</error>(x + width - 1, y, x, y);
+			y++; height--; if (height <= 0) return;
+		}
+		if (left) {
+			g.<error descr="Cannot resolve method 'drawLine(int, int, int, int)'">drawLine</error>(x, y, x, y + height - 1);
+			x++; width--; if (width <= 0) return;
+		}
+		if (bottom) {
+			g.<error descr="Cannot resolve method 'drawLine(int, int, int, int)'">drawLine</error>(x, y + height - 1, x + width - 1, y + height - 1);
+			height--; if (height <= 0) return;
+		}
+		if (right) {
+			g.<error descr="Cannot resolve method 'drawLine(int, int, int, int)'">drawLine</error>(x + width - 1, y + height - 1, x + width - 1, y);
+			width--; if (width <= 0) return;
+		}
+
+		//java>
+		if (bg == c_ctrl) {
+			if (height > block) {
+				g.<error descr="Cannot resolve method 'setColor(Color)'">setColor</error>(c_bg);
+				g.<error descr="Cannot resolve method 'fillRect(int, int, int, int)'">fillRect</error>(x, y, width, height - block);
+			}
+			for (int i = 0; i < width; i += block) {
+				g.<error descr="Cannot resolve method 'drawImage(Image, int, int, int, int, int, int, int, int, null)'">drawImage</error>(gradient, x + i, (height > block) ? (y + height - block) : y,
+					x + Math.min(i + block, width), y + height,
+					0, 0, Math.min(block, width - i), Math.min(block, height), null);
+			}
+			/*if (width > block) {
+				g.setColor(c_bg);
+				g.fillRect(x, y, width - block, height);
+			}
+			for (int i = 0; i < height; i += block) {
+				g.drawImage(gradient, (width > block) ? (x + width - block) : x, y + i,
+					x + width, y + Math.min(i + block, height),
+					0, 0, Math.min(block, width), Math.min(block, height - i), null);
+			}*/
+		}
+		else {
+			g.<error descr="Cannot resolve method 'setColor(Color)'">setColor</error>(bg);
+			g.<error descr="Cannot resolve method 'fillRect(int, int, int, int)'">fillRect</error>(x, y, width, height);
+		}
+		//<java
+		//midp g.setColor(bg);
+		//midp g.fillRect(x, y, width, height);
+	}
+
+	/**
+	 *
+	 */
+	private void paintArrow(<error descr="Cannot resolve symbol 'Graphics'">Graphics</error> g, int x, int y, int width, int height,
+			char dir, boolean enabled, boolean inside, boolean pressed, String part,
+			boolean top, boolean left, boolean bottom, boolean right) {
+		inside = inside && (insidepart == part);
+		pressed = pressed && (pressedpart == part);
+		paintRect(g, x, y, width, height, enabled ? c_border : c_disable,
+			enabled ? ((inside != pressed) ? c_hover :
+				(pressed ? c_press : c_ctrl)) : c_bg,
+			top, left, bottom, right);
+		g.<error descr="Cannot resolve method 'setColor(Color)'">setColor</error>(enabled ? c_text : c_disable);
+		paintArrow(g, x, y, width, height, dir);
+	}
+
+	/**
+	 *
+	 */
+	private void paintArrow(<error descr="Cannot resolve symbol 'Graphics'">Graphics</error> g,
+			int x, int y, int width, int height, char dir) {
+		int cx = x + width / 2 - 2;
+		int cy = y + height / 2 - 2;
+		for (int i = 0; i < 4; i++) {
+			if (dir == 'N') { // north
+				g.<error descr="Cannot resolve method 'drawLine(int, int, int, int)'">drawLine</error>(cx + 1 - i, cy + i, cx + 1/*2*/ + i, cy + i);
+			}
+			else if (dir == 'W') { // west
+				g.<error descr="Cannot resolve method 'drawLine(int, int, int, int)'">drawLine</error>(cx + i, cy + 1 - i, cx + i, cy + 1/*2*/ + i);
+			}
+			else if (dir == 'S') { // south
+				g.<error descr="Cannot resolve method 'drawLine(int, int, int, int)'">drawLine</error>(cx + 1 - i, cy + 4 - i, cx + 1/*2*/ + i, cy + 4 - i);
+			}
+			else { // east
+				g.<error descr="Cannot resolve method 'drawLine(int, int, int, int)'">drawLine</error>(cx + 4 - i, cy + 1 - i, cx + 4 - i, cy + 1/*2*/ + i);
+			}
+		}
+	}
+
+	/**
+	 *
+	 */
+	private void paintContent(Object component, <error descr="Cannot resolve symbol 'Graphics'">Graphics</error> g,
+			int clipx, int clipy, int clipwidth, int clipheight,
+			int x, int y, int width, int height, <error descr="Cannot resolve symbol 'Color'">Color</error> fg, String defaultalignment,
+			boolean checkmnemonic) {
+		String text = getString(component, "text", null);
+		<error descr="Cannot resolve symbol 'Image'">Image</error> icon = getIcon(component, "icon", null);
+		if ((text == null) && (icon == null)) { return; }
+		String alignment = getString(component, "alignment", defaultalignment);
+
+		<error descr="Cannot resolve symbol 'FontMetrics'">FontMetrics</error> fm = null; //java
+		int tw = 0, th = 0;
+		int ta = 0; //java
+		if (text != null) {
+			fm = g.<error descr="Cannot resolve method 'getFontMetrics()'">getFontMetrics</error>(); //java
+			tw = fm.<error descr="Cannot resolve method 'stringWidth(java.lang.String)'">stringWidth</error>(text);
+			ta = fm.<error descr="Cannot resolve method 'getAscent()'">getAscent</error>(); //java
+			th = fm.<error descr="Cannot resolve method 'getDescent()'">getDescent</error>() + ta; //java
+			//midp th = font.getHeight();
+			g.<error descr="Cannot resolve method 'setColor(Color)'">setColor</error>(fg);
+		}
+		int iw = 0, ih = 0;
+		if (icon != null) {
+			iw = icon.<error descr="Cannot resolve method 'getWidth(Thinlet)'">getWidth</error>(this);
+			ih = icon.<error descr="Cannot resolve method 'getHeight(Thinlet)'">getHeight</error>(this); //java
+		}
+
+		boolean clipped = (tw + iw > width) || (th > height) || (ih > height);
+		int cx = x;
+		if ("center" == alignment) { cx += (width - tw - iw) / 2; }
+			else if ("right" == alignment) { cx += width - tw - iw; }
+
+		if (clipped) { g.<error descr="Cannot resolve method 'clipRect(int, int, int, int)'">clipRect</error>(x, y, width, height); }
+		if (icon != null) {
+			g.<error descr="Cannot resolve method 'drawImage(Image, int, int, Thinlet)'">drawImage</error>(icon, cx, y + (height - ih) / 2, this); //java
+			//midp g.drawImage(icon, cx, y + height / 2, Graphics.LEFT | Graphics.VCENTER);
+			cx += iw;
+		}
+		if (text != null) {
+			int ty = y + (height - th) / 2 + ta; //java
+			g.<error descr="Cannot resolve method 'drawString(java.lang.String, int, int)'">drawString</error>(text, cx, ty); //java
+			//midp g.drawString(text, cx, y + (height - th) / 2, Graphics.LEFT | Graphics.TOP);
+			if (checkmnemonic) {
+				int mnemonic = getInteger(component, "mnemonic", -1);
+				if ((mnemonic != -1) && (mnemonic < text.length())) {
+					int mx = cx + fm.<error descr="Cannot resolve method 'stringWidth(java.lang.String)'">stringWidth</error>(text.substring(0, mnemonic)); //java
+					//midp int mx = cx + font.substringWidth(text, 0, mnemonic);
+					//midp int ty = (height + th) / 2;
+					g.<error descr="Cannot resolve method 'drawLine(int, int, ?, int)'">drawLine</error>(mx, ty + 1, mx + fm.<error descr="Cannot resolve method 'charWidth(char)'">charWidth</error>(text.charAt(mnemonic)), ty + 1);
+				}
+			}
+		}
+		if (clipped) { g.<error descr="Cannot resolve method 'setClip(int, int, int, int)'">setClip</error>(clipx, clipy, clipwidth, clipheight); }
+	}
+	//midp private void setTimer(long delay) {}
+	//java>
+
+	/**
+	 *
+	 */
+	public synchronized void run() {
+		while (timer == Thread.currentThread()) {
+			try {
+				if (watch == 0) {
+					wait(0);
+				} else {
+					long current = System.currentTimeMillis();
+					if (watch > current) {
+						wait(watch - current);
+					} else {
+						watch = 0;
+						if ((watchdelay == 300L) || (watchdelay == 60L)) {
+							if (processScroll(mousepressed, pressedpart)) { setTimer(60L); }
+						} else if ((watchdelay == 375L) || (watchdelay == 75L)) {
+							if (processSpin(mousepressed, pressedpart)) { setTimer(75L); }
+						} else if (watchdelay == 750L) {
+							//System.out.println("> tip: " + getClass(mouseinside) + " : " + ((insidepart instanceof Object[]) ? getClass(insidepart) : insidepart));
+							showTip();
+						}
+					}
+				}
+			} catch (<error descr="Cannot resolve symbol 'InterruptedException'">InterruptedException</error> ie) {} //ie.printStackTrace();
+		}
+	}
+
+	/**
+	 *
+	 */
+	private void setTimer(long delay) {
+		watchdelay = delay;
+		if (delay == 0) {
+			watch = 0;
+		} else {
+			long prev = watch;
+			watch = System.currentTimeMillis() + delay;
+			if (timer == null) {
+				timer = new Thread(this);
+				timer.setPriority(Thread.MIN_PRIORITY);
+				timer.setDaemon(true);
+				timer.start();
+			}
+			if ((prev == 0) || (watch < prev)) {
+				synchronized (this) { notify(); } //try {}catch (IllegalMonitorStateException imse) {}
+			}
+		}
+	}
+
+	/**
+	 *
+	 */
+	public boolean isFocusTraversable() {
+		return true;
+	}
+
+	//<java
+	/*midp
+	private static final int MOUSE_ENTERED = 1;
+	private static final int MOUSE_EXITED = 2; //
+	private static final int MOUSE_PRESSED = 3;
+	private static final int MOUSE_DRAGGED = 4;
+	private static final int MOUSE_RELEASED = 5;
+	private static final int DRAG_ENTERED = 6;
+	private static final int DRAG_EXITED = 7;
+
+	protected void pointerPressed(int x, int y) {
+		findComponent(content, x, y);
+		if (popupowner != null) {
+			String classname = getClass(mouseinside);
+			if ((popupowner != mouseinside) &&
+					(classname != "popupmenu") && (classname != "combolist")) {
+				closeup();
+			}
+		}
+		handleMouseEvent(x, y, 1, false, false, false,
+			MouseEvent.MOUSE_ENTERED, mouseinside, insidepart);
+		mousepressed = mouseinside;
+		pressedpart = insidepart;
+		handleMouseEvent(x, y, 1, false, false, false,
+			MouseEvent.MOUSE_PRESSED, mousepressed, pressedpart);
+	}
+
+	protected void pointerReleased(int x, int y) {
+		Object mouserelease = mousepressed;
+		Object releasepart = pressedpart;
+		mousepressed = pressedpart = null;
+		handleMouseEvent(x, y, 1, false, false, false,
+			MouseEvent.MOUSE_RELEASED, mouserelease, releasepart);
+	}
+
+	protected void pointerDragged(int x, int y) {
+		Object previnside = mouseinside;
+		Object prevpart = insidepart;
+		findComponent(content, x, y);
+		boolean same = (previnside == mouseinside) && (prevpart == insidepart);
+		boolean isin = (mousepressed == mouseinside) && (pressedpart == insidepart);
+		boolean wasin = (mousepressed == previnside) && (pressedpart == prevpart);
+
+		if (wasin && !isin) {
+			handleMouseEvent(x, y, 1, false, false, false,
+				MouseEvent.MOUSE_EXITED, mousepressed, pressedpart);
+		}
+		else if (!same && (popupowner != null) && !wasin) {
+			handleMouseEvent(x, y, 1, false, false, false,
+				DRAG_EXITED, previnside, prevpart);
+		}
+		if (isin && !wasin) {
+			handleMouseEvent(x, y, 1, false, false, false,
+				MouseEvent.MOUSE_ENTERED, mousepressed, pressedpart);
+		}
+		else if (!same && (popupowner != null) && !isin) {
+			handleMouseEvent(x, y, 1, false, false, false,
+				DRAG_ENTERED, mouseinside, insidepart);
+		}
+		if (isin == wasin) {
+			handleMouseEvent(x, y, 1, false, false, false,
+				MouseEvent.MOUSE_DRAGGED, mousepressed, pressedpart);
+		}
+	}
+
+	protected void keyPressed(int keyCode) {
+		if ((popupowner != null) || (focusowner != null)) {
+			hideTip();
+			if (keyCode > 0) {
+				processKeyPress((popupowner != null) ? popupowner : focusowner,
+					false, false, 1, keyCode, 0);
+			}
+			else {
+				int keychar = 0, key = 0;
+				switch (getGameAction(keyCode)) {
+					case UP: key = KeyEvent.VK_UP; break;
+					case LEFT: key = KeyEvent.VK_LEFT; break;
+					case DOWN: key = KeyEvent.VK_DOWN; break;
+					case RIGHT: key = KeyEvent.VK_RIGHT; break;
+					case FIRE: key = KeyEvent.VK_ENTER; keychar = KeyEvent.VK_SPACE; break;
+					case GAME_A: key = KeyEvent.VK_ESCAPE; break;
+				}
+				if (key != 0) {
+					processKeyPress((popupowner != null) ? popupowner : focusowner,
+						false, false, 1, keychar, key);
+				}
+				//if (keyCode == getKeyCode(LEFT)) {
+			}
+		}
+	}
+
+	protected void keyRepeated(int keyCode) {
+		keyPressed(keyCode);
+	}
+
+	private static final Command nextcommand = new Command("Next", Command.SCREEN, 0);
+	//private static final Command prevcommand = new Command("Previous", Command.SCREEN, 0);
+	{
+		addCommand(nextcommand);
+		//addCommand(prevcommand);
+		setCommandListener(this);
+	}
+
+	public void commandAction(Command command, Displayable displayable) {
+		if (command == nextcommand) {
+			setNextFocusable(focusowner, false);
+			repaint(focusowner);
+			closeup();
+		}
+		//else if (command == prevcommand) {
+			//setPreviousFocusable(focusowner, null, true, true, false);
+			//repaint(focusowner);
+			//closeup();
+		//}
+	}
+	midp*/
+	//java>
+
+	/**
+	 *
+	 */
+	protected void processEvent(<error descr="Cannot resolve symbol 'AWTEvent'">AWTEvent</error> e) {
+		int id = e.<error descr="Cannot resolve method 'getID()'">getID</error>();
+		if ((id >= <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_FIRST) && (id <= <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_LAST)) {
+			<error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error> me = (<error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>) e;
+			int x = me.<error descr="Cannot resolve method 'getX()'">getX</error>();
+			int y = me.<error descr="Cannot resolve method 'getY()'">getY</error>();
+			int clickcount = me.<error descr="Cannot resolve method 'getClickCount()'">getClickCount</error>();
+			boolean shiftdown = me.<error descr="Cannot resolve method 'isShiftDown()'">isShiftDown</error>();
+			boolean controldown = me.<error descr="Cannot resolve method 'isControlDown()'">isControlDown</error>();
+			boolean popuptrigger = me.<error descr="Cannot resolve method 'isPopupTrigger()'">isPopupTrigger</error>();
+			if (id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_ENTERED) {
+				if (mousepressed == null) {
+					findComponent(content, x, y);
+					handleMouseEvent(x, y, clickcount, shiftdown, controldown, popuptrigger,
+						<error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_ENTERED, mouseinside, insidepart);
+				}
+			}
+			else if (id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_MOVED) {
+				Object previnside = mouseinside;
+				Object prevpart = insidepart;
+				findComponent(content, x, y);
+				if ((previnside == mouseinside) && (prevpart == insidepart)) {
+					handleMouseEvent(x, y, clickcount, shiftdown, controldown, popuptrigger,
+						<error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_MOVED, mouseinside, insidepart);
+				}
+				else {
+					handleMouseEvent(x, y, clickcount, shiftdown, controldown, popuptrigger,
+						<error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_EXITED, previnside, prevpart);
+					handleMouseEvent(x, y, clickcount, shiftdown, controldown, popuptrigger,
+						<error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_ENTERED, mouseinside, insidepart);
+				}
+			}
+			else if (id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_EXITED) {
+				if (mousepressed == null) {
+					Object mouseexit = mouseinside;
+					Object exitpart = insidepart;
+					mouseinside = insidepart = null;
+					handleMouseEvent(x, y, clickcount, shiftdown, controldown, popuptrigger,
+						<error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_EXITED, mouseexit, exitpart);
+				}
+			}
+			else if (id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_PRESSED) {
+				if (popupowner != null) {
+					String classname = getClass(mouseinside);
+					if ((popupowner != mouseinside) &&
+							(classname != "popupmenu") && (classname != "combolist")) {
+						closeup();
+					}
+				}
+				mousepressed = mouseinside;
+				pressedpart = insidepart;
+				handleMouseEvent(x, y, clickcount, shiftdown, controldown, popuptrigger,
+					<error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_PRESSED, mousepressed, pressedpart);
+			}
+			else if (id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_DRAGGED) {
+				Object previnside = mouseinside;
+				Object prevpart = insidepart;
+				findComponent(content, x, y);
+				boolean same = (previnside == mouseinside) && (prevpart == insidepart);
+				boolean isin = (mousepressed == mouseinside) && (pressedpart == insidepart);
+				boolean wasin = (mousepressed == previnside) && (pressedpart == prevpart);
+
+				if (wasin && !isin) {
+					handleMouseEvent(x, y, clickcount, shiftdown, controldown, popuptrigger,
+						<error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_EXITED, mousepressed, pressedpart);
+				}
+				else if (!same && (popupowner != null) && !wasin) {
+					handleMouseEvent(x, y, clickcount, shiftdown, controldown, popuptrigger,
+						DRAG_EXITED, previnside, prevpart);
+				}
+				if (isin && !wasin) {
+					handleMouseEvent(x, y, clickcount, shiftdown, controldown, popuptrigger,
+						<error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_ENTERED, mousepressed, pressedpart);
+				}
+				else if (!same && (popupowner != null) && !isin) {
+					handleMouseEvent(x, y, clickcount, shiftdown, controldown, popuptrigger,
+						DRAG_ENTERED, mouseinside, insidepart);
+				}
+				if (isin == wasin) {
+					handleMouseEvent(x, y, clickcount, shiftdown, controldown, popuptrigger,
+						<error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_DRAGGED, mousepressed, pressedpart);
+				}
+			}
+			else if (id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_RELEASED) {
+				Object mouserelease = mousepressed;
+				Object releasepart = pressedpart;
+				mousepressed = pressedpart = null;
+				handleMouseEvent(x, y, clickcount, shiftdown, controldown, popuptrigger,
+					<error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_RELEASED, mouserelease, releasepart);
+				if ((mouseinside != null) &&
+						((mouserelease != mouseinside) || (releasepart != insidepart))) {
+					handleMouseEvent(x, y, clickcount, shiftdown, controldown, popuptrigger,
+						<error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_ENTERED, mouseinside, insidepart);
+				}
+			}
+		}
+		else if (id == MOUSE_WHEEL) {
+			<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> port = getRectangle(mouseinside, ":port");
+			if (port != null) { // is scrollable
+				<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> bounds = getRectangle(mouseinside, "bounds");
+				try { // mouse wheel is supported since 1.4 thus it use reflection
+					if (wheelrotation == null) {
+						wheelrotation = e.<error descr="Cannot resolve method 'getClass()'">getClass</error>().getMethod("getWheelRotation", null);
+					}
+					int rotation = ((Integer) wheelrotation.<error descr="Cannot resolve method 'invoke(AWTEvent, null)'">invoke</error>(e, null)).intValue();
+
+					if (port.<error descr="Cannot resolve symbol 'x'">x</error> + port.<error descr="Cannot resolve symbol 'width'">width</error> < bounds.<error descr="Cannot resolve symbol 'width'">width</error>) { // has vertical scrollbar
+						processScroll(mouseinside, (rotation > 0) ? "down" : "up");
+					}
+					else if (port.<error descr="Cannot resolve symbol 'y'">y</error> + port.<error descr="Cannot resolve symbol 'height'">height</error> < bounds.<error descr="Cannot resolve symbol 'height'">height</error>) { // has horizontal scrollbar
+						processScroll(mouseinside, (rotation > 0) ? "right" : "left");
+					}
+				} catch (Exception exc) { /* never */ }
+			}
+		}
+		else if ((id == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.KEY_PRESSED) || (id == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.KEY_TYPED)) {
+			if (focusinside && ((popupowner != null) || (focusowner != null))) {
+				hideTip();
+				<error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error> ke = (<error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>) e;
+				int keychar = ke.<error descr="Cannot resolve method 'getKeyChar()'">getKeyChar</error>();
+				boolean control = (keychar <= 0x1f) ||
+					((keychar >= 0x7f) && (keychar <= 0x9f)) ||
+					(keychar >= 0xffff) || ke.<error descr="Cannot resolve method 'isControlDown()'">isControlDown</error>();
+				if (control == (id == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.KEY_PRESSED)) {
+					int keycode = control ? ke.<error descr="Cannot resolve method 'getKeyCode()'">getKeyCode</error>() : 0;
+					if (!processKeyPress((popupowner != null) ? popupowner : focusowner,
+							ke.<error descr="Cannot resolve method 'isShiftDown()'">isShiftDown</error>(), ke.<error descr="Cannot resolve method 'isControlDown()'">isControlDown</error>(), ke.<error descr="Cannot resolve method 'getModifiers()'">getModifiers</error>(),
+							control ? 0 : keychar, keycode)) {
+						if ((keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_TAB) ||
+								((keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_F6) && (ke.<error descr="Cannot resolve method 'isAltDown()'">isAltDown</error>() || ke.<error descr="Cannot resolve method 'isControlDown()'">isControlDown</error>()))) {
+							boolean outgo = (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_F6);
+							if (!ke.<error descr="Cannot resolve method 'isShiftDown()'">isShiftDown</error>() ? setNextFocusable(focusowner, outgo) :
+									setPreviousFocusable(focusowner, outgo)) {
+								ke.<error descr="Cannot resolve method 'consume()'">consume</error>();
+							} else if (MOUSE_WHEEL != 0) { // 1.4
+								if (!ke.<error descr="Cannot resolve method 'isShiftDown()'">isShiftDown</error>()) {
+									transferFocus();
+								}
+								else { try {
+										getClass().getMethod("transferFocusBackward", null). <error descr="Cannot resolve method 'invoke(Thinlet, null)'">invoke</error>(this, null);
+								} catch (Exception exc) { /* never */ } }
+							}
+							repaint(focusowner);
+							closeup();
+						}
+						else if (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_F8) {
+							for (Object splitpane = focusowner;
+									splitpane != null; splitpane = getParent(splitpane)) {
+								if (getClass(splitpane) == "splitpane") {
+									setFocus(splitpane); repaint(splitpane); break; //middle
+								}
+							}
+						}
+					}
+					else ke.<error descr="Cannot resolve method 'consume()'">consume</error>();
+					/*else if (keycode == KeyEvent.VK_F10) {
+						Object menubar = null; // find("class", "menubar")
+						if ((menubar != null) && (get(menubar, "selected") == null)) {
+							set(menubar, "selected", getMenu(menubar, null, true, false));
+							Object popup = popup(menubar, "menubar");
+							set(popup, "selected", getMenu(popup, null, true, true));
+							repaint(menubar); // , selected
+						}
+					}*/
+				}
+			}
+		}
+		/*else if (id == KeyEvent.KEY_RELEASED) {
+			if (focusinside && (focusowner != null)) {
+				KeyEvent ke = (KeyEvent) e;
+				//pressedkey = 0;
+				processKeyRelease(focusowner, ke, ke.getKeyCode());
+			}
+		}*/
+		else if (id == <error descr="Cannot resolve symbol 'FocusEvent'">FocusEvent</error>.FOCUS_LOST) {
+			focusinside = false;
+			if (focusowner != null) { repaint(focusowner); }
+			closeup();
+		}
+		else if (id == <error descr="Cannot resolve symbol 'FocusEvent'">FocusEvent</error>.FOCUS_GAINED) {
+			focusinside = true;
+			if (focusowner == null) { setFocus(content); }
+				else { repaint(focusowner); }
+		}
+		else if ((id == <error descr="Cannot resolve symbol 'ComponentEvent'">ComponentEvent</error>.COMPONENT_RESIZED) ||
+				(id == <error descr="Cannot resolve symbol 'ComponentEvent'">ComponentEvent</error>.COMPONENT_SHOWN)) {
+			Dimension d = getSize();
+			//System.out.println(id + ": " + d.width + ", " + d.height);
+			setRectangle(content, "bounds", 0, 0, d.width, d.height);
+			validate(content);
+			closeup();
+			if (!focusinside)  { requestFocus(); }
+		}
+	}
+
+	/**
+	 *
+	 */
+	/*private boolean processKeyPress(Object component,
+			KeyEvent e, int keycode, Object invoker) {
+		if (processKeyPress(component, e, keycode)) { return true; }
+		for (Object comp = get(component, "component");
+				comp != null; comp = get(comp, ":next")) {
+			if ((comp != invoker) && processKeyPress(comp, e, keycode, null)) {
+				return true;
+			}
+		}
+		if ((invoker != null) && (component != content)) {
+			Object parent = getParent(component);
+			if (parent != null) {
+				return processKeyPress(parent, e, keycode, component);
+			}
+		}
+		return false;
+	}*/
+	//<java
+
+	/**
+	 *
+	 */
+	private boolean processKeyPress(Object component,
+			boolean shiftdown, boolean controldown, int modifiers, int keychar, int keycode) {
+		String classname = getClass(component);
+		if ("button" == classname) {
+			if (keychar == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_SPACE ||
+					((keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_ENTER) &&
+						(getString(component, "type", null) == "default")) ||
+					((keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_ESCAPE) && //...
+						(getString(component, "type", null) == "cancel"))) {
+				//pressedkey = keychar;
+				invoke(component, "action");
+				repaint(component);
+				return true;
+			}
+		}
+		else if ("checkbox" == classname) {
+			if (keychar == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_SPACE) {
+				changeCheck(component, true);
+				repaint(component);
+				return true;
+			}
+		}
+		else if ("combobox" == classname) {
+			Object combolist = get(component, "combolist");
+			if (combolist == null) {
+				if (getBoolean(component, "editable", true) &&
+						processField(component, shiftdown, controldown, modifiers,
+							keychar, keycode, false, false)) {
+					setInteger(component, "selected", -1, -1);
+					return true;
+				}
+				if ((keychar == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_SPACE) || (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_DOWN)) {
+					combolist = popup(component, classname);
+					int selected = getInteger(component, "selected", -1);
+					set(combolist, "inside", (selected != -1) ?
+						getItemImpl(component, "choice", selected) :
+						get(component, "choice")); //scroll to it!
+				}
+				else return false;
+			} else {
+				if ((keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_UP) ||
+						(keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_DOWN) || (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_PAGE_UP) ||
+						(keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_PAGE_DOWN) ||
+						(keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_HOME) || (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_END)) {
+					Object selected = get(combolist, "inside");
+					Object next = getListItem(component, combolist,
+						keycode, selected, "choice", null);
+					if (next != null) {
+						set(combolist, "inside", next);
+						<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> r = getRectangle(next, "bounds");
+						scrollToVisible(combolist, r.<error descr="Cannot resolve symbol 'x'">x</error>, r.<error descr="Cannot resolve symbol 'y'">y</error>, 0, r.<error descr="Cannot resolve symbol 'height'">height</error>);
+						if (selected != null) { repaint(combolist, "combolist", selected); }
+						repaint(combolist, "combolist", next);
+					}
+				}
+				else if ((keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_ENTER) || (keychar == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_SPACE)) {
+					closeup(component, combolist, get(combolist, "inside")); //Alt+Up
+				}
+				else if (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_ESCAPE) {
+					closeup(component, combolist, null);
+				}
+				else return processField(component, shiftdown, controldown, modifiers,
+					keychar, keycode, false, false);
+			}
+			return true;
+		}
+		else if (("textfield" == classname) || ("passwordfield" == classname)) {
+			return processField(component, shiftdown, controldown, modifiers,
+				keychar, keycode, false, ("passwordfield" == classname));
+		}
+		else if ("textarea" == classname) {
+			String text = getString(component, "text", "");
+			int start = getInteger(component, "start", 0);
+			int end = getInteger(component, "end", 0);
+
+			int istart = start;
+			int iend = end;
+			String insert = null;
+			if ((keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_HOME) && !controldown) {
+				while ((iend > 0) && (text.charAt(iend - 1) != '\n')) { iend--; }
+				if (!shiftdown) { istart = iend; }
+			}
+			else if ((keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_END) && !controldown) {
+				iend = text.indexOf('\n', end);
+				if (iend == -1) { iend = text.length(); }
+				if (!shiftdown) { istart = iend; }
+			}
+			else if ((keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_UP) ||
+					(keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_PAGE_UP)) {
+				int prev = end;
+				while ((prev > 0) && (text.charAt(prev - 1) != '\n')) { prev--; }
+				if (prev != 0) {
+					int dx = end - prev;
+					int lines = (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_PAGE_UP) ?
+						(getRectangle(component, ":port").<error descr="Cannot resolve symbol 'height'">height</error> /
+							getFontMetrics(getFont()).<error descr="Cannot resolve method 'getHeight()'">getHeight</error>()) : 1;
+					int first = prev;
+					do {
+						prev = first; first--; lines--;
+						while ((first > 0) && (text.charAt(first - 1) != '\n')) { first--; }
+					} while ((first > 0) && (lines > 0));
+					iend = Math.min(first + dx, prev - 1);
+					if (!shiftdown) { istart = iend; }
+				}
+			}
+			else if ((keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_DOWN) ||
+					(keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_PAGE_DOWN)) {
+				int next = text.indexOf('\n', end);
+				if (next != -1) {
+					int prev = end;
+					while ((prev > 0) && (text.charAt(prev - 1) != '\n')) { prev--; }
+					if (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_PAGE_DOWN) {
+						int lines = getRectangle(component, ":port").<error descr="Cannot resolve symbol 'height'">height</error> /
+							getFontMetrics(getFont()).<error descr="Cannot resolve method 'getHeight()'">getHeight</error>();
+						for (int more = 0; (lines > 1) &&
+								((more = text.indexOf('\n', next + 1)) != -1); next = more) {
+							lines--;
+						}
+					}
+					int last = text.indexOf('\n', next + 1);
+					iend = Math.min(next + 1 + end - prev,
+						(last == -1) ? (text.length() + 1) : last);
+					if (!shiftdown) { istart = iend; }
+				}
+			}
+			return changeField(component, text, insert, istart, iend, start, end) ?
+				true : processField(component, shiftdown, controldown, modifiers,
+					keychar, keycode, true, false);
+		}
+		else if ("tabbedpane" == classname) {
+			if ((keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_RIGHT) || (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_DOWN) ||
+					(keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_LEFT) || (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_UP)) {
+				int selected = getInteger(component, "selected", 0);
+				boolean increase = (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_RIGHT) || (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_DOWN);
+				int newvalue = selected;
+				int n = increase ? getItemCountImpl(component, "tab") : 0;
+				int d = (increase ? 1 : -1);
+				for (int i = selected + d; increase ? (i < n)  : (i >= 0); i += d) {
+					if (getBoolean(getItemImpl(component, "tab", i), "enabled", true)) {
+						newvalue = i; break;
+					}
+				}
+				if (newvalue != selected) {
+					setInteger(component, "selected", newvalue, 0);
+					repaint(component);
+					invoke(component, "action");
+				}
+			}
+		}
+		else if ("spinbox" == classname) {
+			if ((keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_UP) || (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_DOWN)) {
+				processSpin(component, (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_UP)? "up" : "down");
+				return true;
+			}
+			return processField(component, shiftdown, controldown, modifiers,
+				keychar, keycode, false, false);
+		}
+		else if ("slider" == classname) {
+			int value = getInteger(component, "value", 0);
+			int d = 0;
+			if ((keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_HOME) || (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_LEFT) ||
+					(keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_UP) || (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_PAGE_UP)) {
+				d = getInteger(component, "minimum", 0) - value;
+				if ((keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_LEFT) || (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_UP)) {
+					d = Math.max(d, -getInteger(component, "unit", 5));
+				}
+				else if (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_PAGE_UP) {
+					d = Math.max(d, -getInteger(component, "block", 25));
+				}
+			}
+			else if ((keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_END) || (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_RIGHT) ||
+					(keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_DOWN) || (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_PAGE_DOWN)) {
+				d = getInteger(component, "maximum", 100) - value;
+				if ((keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_RIGHT) || (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_DOWN)) {
+					d = Math.min(d, getInteger(component, "unit", 5));
+				}
+				else if (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_PAGE_DOWN) {
+					d = Math.min(d, getInteger(component, "block", 25));
+				}
+			}
+			if (d != 0) {
+				setInteger(component, "value", value + d, 0);
+				repaint(component);
+				invoke(component, "action");
+			}
+		}
+		else if ("splitpane" == classname) {
+			int divider = getInteger(component, "divider", -1);
+			int d = 0;
+			if (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_HOME) {
+				d = -divider;
+			}
+			else if ((keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_LEFT) || (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_UP)) {
+				d = Math.max(-10, -divider);
+			}
+			else if ((keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_END) ||
+					(keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_RIGHT) || (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_DOWN)) {
+				boolean horizontal = ("vertical" != get(component, "orientation"));
+				<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> bounds = getRectangle(component, "bounds");
+				int max = (horizontal ? bounds.<error descr="Cannot resolve symbol 'width'">width</error> : bounds.<error descr="Cannot resolve symbol 'height'">height</error>) - 5;
+				d = max - divider;
+				if (keycode != <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_END) {
+					d = Math.min(d, 10);
+				}
+			}
+			if (d != 0) {
+				setInteger(component, "divider", divider + d, -1);
+				validate(component);
+			}
+		}
+		else if ("list" == classname) {
+			return processList(component, shiftdown, controldown, keychar, keycode, "item", null);
+		}
+		else if ("table" == classname) {
+			return processList(component, shiftdown, controldown, keychar, keycode, "row", null);
+		}
+		else if ("tree" == classname) {
+			//? clear childs' selection, select this is its 	subnode was selected
+			if (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_LEFT) {
+				Object lead = get(component, "lead");
+				if ((get(lead, "node") != null) && getBoolean(lead, "expanded", true)) {
+					setBoolean(lead, "expanded", false, true);
+					selectItem(component, lead, "node", "node");
+					validate(component);
+					invoke(component, "collapse"); //lead
+					return true;
+				}
+				else {
+					Object parent = getParent(lead);
+					if (parent != component) {
+						selectItem(component, parent, "node", "node");
+						setLead(component, lead, parent);
+						return true;
+					}
+				}
+			}
+			//? for interval mode select its all subnode or deselect all after
+			else if (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_RIGHT) {
+				Object lead = get(component, "lead");
+				Object node = get(lead, "node");
+				if (node != null) {
+					if (getBoolean(lead, "expanded", true)) {
+						selectItem(component, node, "node", "node");
+						setLead(component, lead, node);
+					}
+					else {
+						setBoolean(lead, "expanded", true, true);
+						selectItem(component, lead, "node", "node");
+						validate(component);
+						invoke(component, "expand"); //lead
+					}
+					return true;
+				}
+			}
+			return processList(component, shiftdown, controldown, keychar, keycode, "node", "node");
+		}
+		else if ("menubar" == classname) {
+			Object previous = null; Object last = null;
+			for (Object i = get(component, "popupmenu");
+					i != null; i = get(i, "popupmenu")) {
+				previous = last; last = i;
+			}
+			Object selected = get(last, "selected");
+			Object hotpopup = ((selected != null) || (previous == null)) ?
+				last : previous;
+			if ((selected == null) && (previous != null)) {
+				selected = get(previous, "selected");
+			}
+
+			if ((keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_UP) || (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_DOWN)) {
+				set(hotpopup, "selected", null);
+				popup(hotpopup, "popupmenu");
+				selected = getMenu(hotpopup,
+					selected, keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_DOWN, true);
+				set(hotpopup, "selected", selected);
+				repaint(hotpopup);
+			}
+			else if (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_LEFT) {
+				if (previous != null) {
+					selected = get(previous, "selected");
+					set(previous, "selected", null);
+					popup(previous, "popupmenu");
+					set(previous, "selected", selected);
+					repaint(previous); // , selected
+				}
+				else {
+					selected = getMenu(component, get(component, "selected"), false, false);
+					set(component, "selected", selected);
+					Object popup = popup(component, "menubar");
+					set(popup, "selected", getMenu(popup, null, true, true));
+					repaint(component); // , selected
+				}
+			}
+			else if (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_RIGHT) {
+				if ((previous != null) && (selected == null)) {
+					set(last, "selected", get(get(last, "menu"), "menu"));
+					repaint(last); // , selected
+				}
+				else if ((selected != null) && (getClass(selected) == "menu")) {
+					Object popup = popup(last, "popupmenu");
+					set(popup, "selected", get(get(popup, "menu"), "menu"));
+				}
+				else {
+					selected = getMenu(component, get(component, "selected"), true, false);
+					set(component, "selected", selected);
+					Object popup = popup(component, "menubar");
+					set(popup, "selected", getMenu(popup, null, true, true));
+					repaint(component); // , selected
+				}
+			}
+			else if ((keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_ENTER) ||
+					(keychar == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_SPACE) || (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_ESCAPE)) {
+				if ((keycode != <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_ESCAPE) &&
+						getBoolean(selected, "enabled", true)) {
+					if ((selected != null) && (getClass(selected) == "checkboxmenuitem")) {
+						changeCheck(selected, false);
+					}
+					else invoke(selected, "action");
+				}
+				closeup(component);
+			}
+			else return false;
+			return true;
+		}
+		return false;
+	}
+
+	/**
+	 *
+	 */
+	private boolean changeCheck(Object component, boolean box) {
+		String group = getString(component, "group", null);
+		if (group != null) {
+			if (getBoolean(component, "selected", false)) { return false; }
+			for (Object comp = get(getParent(component),
+					box ? "component" : "menu"); comp != null; comp = get(comp, ":next")) {
+				if (comp == component) {
+					setBoolean(component, "selected", true);
+				}
+				else if (group.equals(get(comp, "group")) &&
+						getBoolean(comp, "selected", false)) {
+					setBoolean(comp, "selected", false);
+					if (box) { repaint(comp); } //checkbox only
+				}
+			}
+		}
+		else {
+			setBoolean(component, "selected",
+				!getBoolean(component, "selected", false), false);
+		}
+		invoke(component, "action");
+		return true;
+	}
+
+	/**
+	 *
+	 */
+	private Object getMenu(Object component, Object part,
+			boolean forward, boolean popup) {
+		if (forward) {
+			if (part != null) { part = get(part, ":next"); }
+			if (part == null) {
+				part = get(popup ? get(component, "menu") : component, "menu");
+			}
+		}
+		else {
+			Object prev = get(popup ? get(component, "menu") : component, "menu");
+			for (Object next = get(prev, ":next");
+					(next != null) && (next != part); next = get(next, ":next")) {
+				prev = next;
+			}
+			part = prev;
+		}
+		return (getClass(part) == "separator") ?
+			getMenu(component, part, forward, popup) : part;
+	}
+
+	/**
+	 *
+	 */
+	/*private boolean processKeyRelease(Object component, KeyEvent e, int keycode) {
+		return true;
+	}*/
+
+	/**
+	 *
+	 */
+	private boolean processField(Object component,
+			boolean shiftdown, boolean controldown, int modifiers,
+			int keychar, int keycode, boolean multiline, boolean hidden) {
+		String text = getString(component, "text", "");
+		int start = getInteger(component, "start", 0);
+		int end = getInteger(component, "end", 0);
+		boolean editable = getBoolean(component, "editable", true);
+
+		int istart = start;
+		int iend = end;
+		String insert = null;
+		//midp if (editable && (keychar != 0)) {
+		if (editable && (keychar != 0) && //java
+			((modifiers == 0) || (modifiers == <error descr="Cannot resolve symbol 'InputEvent'">InputEvent</error>.SHIFT_MASK))) { //java
+			insert = String.valueOf((char) keychar);
+		}
+		else if (multiline && editable && (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_ENTER)) {
+			insert = "\n";
+		}
+		else if (editable && (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_BACK_SPACE)) {
+			insert = "";
+			if (start == end) { istart -= 1; }
+		}
+		else if (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_END) {
+			iend = text.length();
+			if (!shiftdown) { istart = iend; }
+		}
+		else if (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_HOME) {
+			iend = 0;
+			if (!shiftdown) { istart = iend; }
+		}
+		else if (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_LEFT) {
+			//java>
+			if (controldown) {
+				for (int i = 0; i < 2; i++) {
+					while ((iend > 0) && ((i != 0) ==
+						Character.isLetterOrDigit(text.charAt(iend - 1)))) { iend--; }
+				}
+			} else {
+				iend -= 1;
+			}
+			//<java
+			//midp iend -= 1;
+			if (!shiftdown) { istart = iend; }
+		}
+		else if (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_RIGHT) {
+			//java>
+			if (controldown) {
+				for (int i = 0; i < 2; i++) {
+					while ((iend < text.length()) && ((i == 0) ==
+						Character.isLetterOrDigit(text.charAt(iend)))) { iend++; }
+				}
+			} else {
+				iend += 1;
+			}
+			//<java
+			//midp iend += 1;
+			if (!shiftdown) { istart = iend; }
+		}
+		else if (editable && (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_DELETE)) {
+			insert = "";
+			if (start == end) { iend += 1; }
+		}
+		else if (controldown &&
+				((keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_A) || (keycode == 0xBF))) {
+			istart = 0; // KeyEvent.VK_SLASH
+			iend = text.length();
+		}
+		else if (controldown && (keycode == 0xDC)) {
+			istart = iend = text.length(); // KeyEvent.VK_BACK_SLASH
+		}
+		else if ((editable && !hidden && controldown && (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_X)) ||
+				(!hidden && controldown && (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_C))) {
+			if (start != end) {
+				clipboard = text.substring(
+					Math.min(start, end), Math.max(start, end));
+				//java>
+				try {
+					/* Personal Basis Profile doesn't contain datatransfer package
+					Toolkit toolkit = getToolkit();
+					Object systemclipboard = toolkit.getClass().getMethod("getSystemClipboard", null).invoke(toolkit, null);
+					Class selectionclass = Class.forName("java.awt.datatransfer." + "StringSelection");
+					Object selection = selectionclass.getConstructor(new Class[] { String.class }).
+						newInstance(new Object[] { clipboard });
+					systemclipboard.getClass().getMethod("setContents", new Class[] {
+							Class.forName("java.awt.datatransfer." + "Transferable"),
+							Class.forName("java.awt.datatransfer." + "ClipboardOwner") }).
+						invoke(systemclipboard, new Object[] { selection, null });*/
+					getToolkit().<error descr="Cannot resolve method 'getSystemClipboard()'">getSystemClipboard</error>().setContents(
+						new <error descr="Cannot resolve symbol 'StringSelection'">StringSelection</error>(clipboard), null);
+				} catch (Exception exc) {}
+				//<java
+				if (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_X) { insert = ""; }
+			}
+		}
+		else if (editable && controldown && (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_V)) {
+			//java>
+			try {
+				/* no datatransfer package in PBP
+				Toolkit toolkit = getToolkit();
+				Object systemclipboard = toolkit.getClass().getMethod("getSystemClipboard", null).invoke(toolkit, null);
+				Object contents = systemclipboard.getClass().getMethod("getContents", new Class[] { Object.class }).
+					invoke(systemclipboard, new Object[] { this });
+				Class dataflavor = Class.forName("java.awt.datatransfer." + "DataFlavor");
+				insert = (String) (contents.getClass().getMethod("getTransferData", new Class[] { dataflavor }).
+					invoke(contents, new Object[] { dataflavor.getField("stringFlavor").get(null) }));*/
+				insert = (String) getToolkit().<error descr="Cannot resolve method 'getSystemClipboard()'">getSystemClipboard</error>().
+					getContents(this).getTransferData(<error descr="Cannot resolve symbol 'DataFlavor'">DataFlavor</error>.stringFlavor);
+			} catch (Exception exc) {
+				insert = clipboard;
+			}
+			//<java
+			//midp insert = clipboard;
+			StringBuffer filtered = new StringBuffer(insert.length());
+			for (int i = 0; i < insert.length(); i++) {
+				char ckey = insert.charAt(i);
+				if (((ckey > 0x1f) && (ckey < 0x7f)) ||
+						((ckey > 0x9f) && (ckey < 0xffff)) ||
+						(multiline && (ckey == '\n'))) {
+					filtered.append(ckey);
+				}
+			}
+			if (filtered.length() != insert.length()) {
+				insert = filtered.toString();
+			}
+		}
+		return changeField(component, text, insert, istart, iend, start, end);
+	}
+
+	/**
+	 *
+	 */
+	private boolean changeField(Object component, String text, String insert,
+			int movestart, int moveend, int start, int end) {
+		if ((insert == null) && (start == movestart) && (end == moveend)) {
+			return false;
+		}
+		movestart = Math.max(0, Math.min(movestart, text.length()));
+		moveend = Math.max(0, Math.min(moveend, text.length()));
+		if (insert != null) {
+			int min = Math.min(movestart, moveend);
+			set(component, "text", text.substring(0, min) + insert +
+				text.substring(Math.max(movestart, moveend)));
+			movestart = moveend = min + insert.length();
+			invoke(component, "action");
+		}
+		if (start != movestart) { setInteger(component, "start", movestart, 0); }
+		if (end != moveend) { setInteger(component, "end", moveend, 0); }
+		if ((insert != null) || (start != movestart) || (end != moveend)) {
+			validate(component);
+		}
+		return true;
+	}
+
+	/**
+	 *
+	 */
+	private boolean processList(Object component, boolean shiftdown, boolean controldown,
+			int keychar, int keycode, String itemname, String leafname) {
+		if ((keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_UP) ||
+				(keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_DOWN) || (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_PAGE_UP) ||
+				(keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_PAGE_DOWN) ||
+				(keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_HOME) || (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_END)) {
+			Object lead = get(component, "lead");
+			Object row = getListItem(component, component,
+				keycode, lead, itemname, leafname);
+			if (row != null) {
+				String selection = getString(component, "selection", "single");
+				if (shiftdown && (selection != "single") && (lead != null)) {
+					extend(component, lead, row, itemname, leafname);
+				}
+				else if (!controldown) {
+					selectItem(component, row, itemname, leafname);
+				}
+				setLead(component, lead, row);
+				<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> r = getRectangle(row, "bounds");
+				scrollToVisible(component, r.<error descr="Cannot resolve symbol 'x'">x</error>, r.<error descr="Cannot resolve symbol 'y'">y</error>, 0, r.<error descr="Cannot resolve symbol 'height'">height</error> - 1);
+				return true;
+			}
+		}
+		else if (keychar == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_SPACE) {
+			select(component, get(component, "lead"),
+				itemname, leafname, shiftdown, controldown); //...
+			return true;
+		}
+		else if (controldown) {
+			if (((keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_A) || (keycode == 0xBF)) && //KeyEvent.VK_SLASH
+					(getString(component, "selection", "single") != "single")) {
+				selectAll(component, true, itemname, leafname);
+				return true;
+			}
+			else if (keycode == 0xDC) { //KeyEvent.VK_BACK_SLASH
+				selectAll(component, false, itemname, leafname);
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 *
+	 */
+	private Object getListItem(Object component, Object scrollpane,
+			int keycode, Object lead, String itemname, String leafname) {
+		Object row = null;
+		if (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_UP) {
+			for (Object prev = get(component, itemname); prev != lead;
+					prev = getNextItem(component, prev, leafname)) {
+				row = prev; // component -> getParent(lead)
+			}
+		}
+		else if (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_DOWN) {
+			row = (lead == null) ? get(component, itemname) :
+				getNextItem(component, lead, leafname);
+		}
+		else if ((keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_PAGE_UP) ||
+				(keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_PAGE_DOWN)) {
+			<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> view = getRectangle(scrollpane, ":view");
+			<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> port = getRectangle(scrollpane, ":port");
+			<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> rl = (lead != null) ? getRectangle(lead, "bounds") : null;
+			int vy = (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_PAGE_UP) ?
+				view.<error descr="Cannot resolve symbol 'y'">y</error> : (view.<error descr="Cannot resolve symbol 'y'">y</error> + port.<error descr="Cannot resolve symbol 'height'">height</error> - 2);
+			if ((keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_PAGE_UP) &&
+					(rl != null) && (rl.<error descr="Cannot resolve symbol 'y'">y</error> <= view.<error descr="Cannot resolve symbol 'y'">y</error>)) {
+				vy -= port.<error descr="Cannot resolve symbol 'height'">height</error> - 2;
+			}
+			if ((keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_PAGE_DOWN) &&
+					(rl != null) && (rl.<error descr="Cannot resolve symbol 'y'">y</error> + rl.<error descr="Cannot resolve symbol 'height'">height</error> >= view.<error descr="Cannot resolve symbol 'y'">y</error> + port.<error descr="Cannot resolve symbol 'height'">height</error> - 2)) {
+				vy += port.<error descr="Cannot resolve symbol 'height'">height</error> - 2;
+			}
+			for (Object item = get(component, itemname); item != null;
+					item = getNextItem(component, item, leafname)) {
+				<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> r = getRectangle(item, "bounds");
+				if (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_PAGE_UP) {
+					row = item;
+					if (r.<error descr="Cannot resolve symbol 'y'">y</error> + r.<error descr="Cannot resolve symbol 'height'">height</error> > vy) { break; }
+				} else {
+					if (r.<error descr="Cannot resolve symbol 'y'">y</error> > vy) { break; }
+					row = item;
+				}
+			}
+		}
+		else if (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_HOME) {
+			row = get(component, itemname);
+		}
+		else if (keycode == <error descr="Cannot resolve symbol 'KeyEvent'">KeyEvent</error>.VK_END) {
+			for (Object last = lead; last != null;
+					last = getNextItem(component, last, leafname)) {
+				row = last;
+			}
+		}
+		return row;
+	}
+
+	/**
+	 *
+	 */
+	private void selectAll(Object component,
+			boolean selected, String itemname, String leafname) {
+		boolean changed = false;
+		for (Object item = get(component, itemname);
+				item != null; item = getNextItem(component, item, leafname)) {
+			if (setBoolean(item, "selected", selected, false)) {
+				repaint(component, null, item); changed = true;
+			}
+		}
+		set(component, "anchor", null);
+		if (changed) {invoke(component, "action"); }
+	}
+
+	/**
+	 *
+	 */
+	private void selectItem(Object component,
+			Object row, String itemname, String leafname) {
+		boolean changed = false;
+		for (Object item = get(component, itemname);
+				item != null; item = getNextItem(component, item, leafname)) {
+			if (setBoolean(item, "selected", (item == row), false)) {
+				repaint(component, null, item); changed = true;
+			}
+		}
+		set(component, "anchor", null);
+		if (changed) { invoke(component, "action"); }
+	}
+
+	/**
+	 *
+	 */
+	private void extend(Object component, Object lead,
+			Object row, String itemname, String leafname) {
+		Object anchor = get(component, "anchor");
+		if (anchor == null) { set(component, "anchor", anchor = lead); }
+		char select = 'n'; boolean changed = false;
+		for (Object item = get(component, itemname); // anchor - row
+				item != null; item = getNextItem(component, item, leafname)) {
+			if (item == anchor) select = (select == 'n') ? 'y' : 'r';
+			if (item == row) select = (select == 'n') ? 'y' : 'r';
+			if (setBoolean(item, "selected", (select != 'n'), false)) {
+				repaint(component, null, item); changed = true;
+			}
+			if (select == 'r') select = 'n';
+		}
+		if (changed) { invoke(component, "action"); }
+	}
+
+	/**
+	 *
+	 */
+	private void setLead(Object component, Object oldlead, Object lead) {
+		if (oldlead != lead) { //?
+			if (oldlead != null) { repaint(component, null, oldlead); }
+			set(component, "lead", lead);
+			repaint(component, null, lead);
+		}
+	}
+
+	/*public void repaint(int x, int y, int width, int height) {
+		System.out.println("repaint(" + x + ", " + y + ", " + width + ", " + height + ")");
+		super.repaint(x, y, width, height);
+	}*/
+
+	/**
+	 *
+	 */
+	private void handleMouseEvent(int x, int y, int clickcount,
+			boolean shiftdown, boolean controldown, boolean popuptrigger,
+			int id, Object component, Object part) {
+		if (id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_ENTERED) {
+			setTimer(750L);
+		}
+		else if (id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_EXITED) {
+			hideTip();
+		}
+		if (!getBoolean(component, "enabled", true)) { return; }
+		String classname = getClass(component);
+		if (("button" == classname) || ("checkbox" == classname)) {
+			if ((id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_ENTERED) ||
+					(id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_EXITED) ||
+					(id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_PRESSED) ||
+					(id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_RELEASED)) {
+				if (id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_PRESSED) {
+					setFocus(component);
+				}
+				else if ((id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_RELEASED) &&
+						(mouseinside == component)) {
+					if ("checkbox" == classname) {
+						changeCheck(component, true);
+					}
+					else invoke(component, "action");
+				}
+				repaint(component);
+			}
+		}
+		else if ("combobox" == classname) {
+			boolean editable = getBoolean(component, "editable", true);
+			if (editable && (part == null)) {
+				<error descr="Cannot resolve symbol 'Image'">Image</error> icon = null;
+				int left = ((id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_PRESSED) &&
+					((icon = getIcon(component, "icon", null)) != null)) ?
+						icon.<error descr="Cannot resolve method 'getWidth(Thinlet)'">getWidth</error>(this) : 0;
+				processField(x, y, clickcount, id, component, part, false, false, left);
+			}
+			else if (part != "icon") { // part = "down"
+				if (((id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_ENTERED) ||
+						(id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_EXITED)) && (mousepressed == null)) {
+					if (editable) { repaint(component, "combobox", part); }
+						else { repaint(component); }
+				}
+				else if (id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_PRESSED) {
+					Object combolist = get(component, "combolist");
+					if (combolist == null) {
+						setFocus(component);
+						repaint(component);
+						popup(component, classname);
+					} else {
+						closeup(component, combolist, null);
+					}
+				}
+				else if (id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_RELEASED) {
+					if (mouseinside != component) {
+						Object combolist = get(component, "combolist");
+						closeup(component, combolist,
+							(mouseinside == combolist) ? insidepart : null);
+					} else {
+						repaint(component);
+					}
+				}
+			}
+		}
+		else if ("combolist" == classname) {
+			if (!processScroll(x, y, id, component, part)) {
+				if ((id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_ENTERED) || (id == DRAG_ENTERED)) {
+					if (part != null) {
+						// repaint previous inside
+						set(component, "inside", part);
+						repaint(component, classname, part);
+					}
+				}
+				else if ((id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_EXITED) || (id == DRAG_EXITED)) {
+					if (part != null) {
+						set(component, "inside", null);
+						repaint(component, classname, part);
+					}
+				}
+				else if (id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_RELEASED) {
+					closeup(get(component, "combobox"), component, part);
+				}
+			}
+		}
+		else if (("textfield" == classname) || ("passwordfield" == classname)) {
+			processField(x, y, clickcount, id, component, part,
+				false, ("passwordfield" == classname), 0);
+		}
+		else if ("textarea" == classname) {
+			if (!processScroll(x, y, id, component, part)) {
+				processField(x, y, clickcount, id, component, part, true, false, 0);
+			}
+		}
+		//java>
+		else if ("desktop" == classname) {
+			if (id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_ENTERED) {
+				setCursor(<error descr="Cannot resolve symbol 'Cursor'">Cursor</error>.getPredefinedCursor(<error descr="Cannot resolve symbol 'Cursor'">Cursor</error>.WAIT_CURSOR));
+			}
+			else if (id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_EXITED) {
+				setCursor(<error descr="Cannot resolve symbol 'Cursor'">Cursor</error>.getPredefinedCursor(<error descr="Cannot resolve symbol 'Cursor'">Cursor</error>.DEFAULT_CURSOR));
+			}
+		}
+		//<java
+		else if ("spinbox" == classname) {
+			if (part == null) {
+				processField(x, y, clickcount, id, component, part, false, false, 0);
+			}
+			else { // part = "up" || "down"
+				if ((id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_ENTERED) ||
+						(id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_EXITED) ||
+						(id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_PRESSED) ||
+						(id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_RELEASED)) {
+					if (id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_PRESSED) {
+						setFocus(component);
+						if (processSpin(component, part)) { setTimer(375L); }
+						//settext: start end selection, parse exception...
+					}
+					else {
+						if (id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_RELEASED) {
+							setTimer(0L);
+						}
+					}
+					repaint(component, classname, part);
+				}
+			}
+		}
+		else if ("tabbedpane" == classname) {
+			if ((id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_ENTERED) ||
+					(id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_EXITED)) {
+				if ((part != null) && getBoolean(part, "enabled", true) &&
+						(getInteger(component, "selected", 0) != getIndex(component, "tab", part))) {
+					repaint(component, "tabbedpane", part);
+				}
+			}
+			else if ((part != null) && (id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_PRESSED) &&
+					getBoolean(part, "enabled", true)) {
+				int selected = getInteger(component, "selected", 0);
+				int current = getIndex(component, "tab", part);
+				if (selected == current) {
+					setFocus(component);
+					repaint(component, "tabbedpane", part);
+				}
+				else {
+					setInteger(component, "selected", current, 0);
+					//Object tabcontent = getItemImpl(component, "component", current);
+					//setFocus((tabcontent != null) ? tabcontent : component);
+					setNextFocusable(component, false);
+					repaint(component);
+					invoke(component, "action");
+				}
+			}
+		}
+		else if ("slider" == classname) {
+			if ((id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_PRESSED) ||
+					(id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_DRAGGED)) {
+				if (id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_PRESSED) {
+					setReference(component, block / 2, block / 2);
+					setFocus(component);
+				}
+				int minimum = getInteger(component, "minimum", 0);
+				int maximum = getInteger(component, "maximum", 100);
+				int value = getInteger(component, "value", 50);
+				<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> bounds = getRectangle(component, "bounds");
+				boolean horizontal = ("vertical" != get(component, "orientation"));
+				int newvalue = minimum +
+					(horizontal ? (mousex - referencex) : (mousey - referencey)) *
+					(maximum - minimum) /
+					((horizontal ? bounds.<error descr="Cannot resolve symbol 'width'">width</error> : bounds.<error descr="Cannot resolve symbol 'height'">height</error>) - block); //... +0.5
+				newvalue = Math.max(minimum, Math.min(newvalue, maximum));
+				if (value != newvalue) {
+					setInteger(component, "value", newvalue, 50);
+					invoke(component, "action");
+				}
+				if ((value != newvalue) || (id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_PRESSED)) {
+					repaint(component);
+				}
+			}
+		}
+		else if ("splitpane" == classname) {
+			if (id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_PRESSED) {
+				setReference(component, 2, 2);
+			}
+			else if (id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_DRAGGED) {
+				int divider = getInteger(component, "divider", -1);
+				boolean horizontal = ("vertical" != get(component, "orientation"));
+				int moveto = horizontal ? (mousex - referencex) :
+					(mousey - referencey);
+				<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> bounds = getRectangle(component, "bounds");
+				moveto = Math.max<error descr="Cannot resolve method 'max(int, ?)'">(0, Math.min<error descr="Cannot resolve method 'min(int, ?)'">(moveto,
+					Math.abs<error descr="Cannot resolve method 'abs(?)'">(horizontal ? bounds.<error descr="Cannot resolve symbol 'width'">width</error> : bounds.<error descr="Cannot resolve symbol 'height'">height</error>)</error> - 5)</error>)</error>;
+				if (divider != moveto) {
+					setInteger(component, "divider", moveto, -1);
+					validate(component);
+				}
+			}
+			//java>
+			else if ((id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_ENTERED) && (mousepressed == null)) {
+				boolean horizontal = ("vertical" != get(component, "orientation"));
+				setCursor(<error descr="Cannot resolve symbol 'Cursor'">Cursor</error>.getPredefinedCursor(horizontal ?
+					<error descr="Cannot resolve symbol 'Cursor'">Cursor</error>.E_RESIZE_CURSOR : <error descr="Cannot resolve symbol 'Cursor'">Cursor</error>.S_RESIZE_CURSOR));
+			}
+			else if (((id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_EXITED) && (mousepressed == null)) ||
+					((id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_RELEASED) && (mouseinside != component))) {
+				setCursor(<error descr="Cannot resolve symbol 'Cursor'">Cursor</error>.getPredefinedCursor(<error descr="Cannot resolve symbol 'Cursor'">Cursor</error>.DEFAULT_CURSOR));
+			}
+			//<java
+		}
+		else if (("list" == classname) ||
+				("table" == classname) || ("tree" == classname)) {
+			if (!processScroll(x, y, id, component, part)) {
+				if (((id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_PRESSED)||
+						((id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_DRAGGED) &&
+							!shiftdown && !controldown)) &&
+						!popuptrigger) { // e.getClickCount()
+					<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> view = getRectangle(component, ":view");
+					<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> viewport = getRectangle(component, ":port");
+					int my = mousey + view.<error descr="Cannot resolve symbol 'y'">y</error> - referencey;
+					String itemname = ("list" == classname) ? "item" :
+						(("table" == classname) ? "row" : "node");
+					String subitem = ("tree" == classname) ? "node" : null;
+					for (Object item = get(component, itemname); item != null;) {
+						<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> r = getRectangle(item, "bounds");
+						if (my < r.<error descr="Cannot resolve symbol 'y'">y</error> + r.<error descr="Cannot resolve symbol 'height'">height</error>) {
+							if (id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_DRAGGED) { //!!!
+								scrollToVisible(component, r.<error descr="Cannot resolve symbol 'x'">x</error>, r.<error descr="Cannot resolve symbol 'y'">y</error>, 0, r.<error descr="Cannot resolve symbol 'height'">height</error> - 1);
+							}
+							else if ("tree" == classname) {
+								int mx = mousex + view.<error descr="Cannot resolve symbol 'x'">x</error> - referencex;
+								if (mx < r.<error descr="Cannot resolve symbol 'x'">x</error>) {
+									if ((mx >= r.<error descr="Cannot resolve symbol 'x'">x</error> - block) && (get(item, "node") != null)) {
+										boolean expanded = getBoolean(item, "expanded", true);
+										setBoolean(item, "expanded", !expanded, 	true);
+										selectItem(component, item, "node", "node");
+										setLead(component, get(component, "lead"), item);
+										setFocus(component);
+										validate(component);
+										invoke(component, expanded ? "collapse" : "expand"); //item
+									}
+									break;
+								}
+							}
+							if ((id != <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_DRAGGED) ||
+									!getBoolean(item, "selected", false)) {
+								select(component, item, itemname, subitem, shiftdown, controldown);
+								if (id != <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_DRAGGED) {
+									if (setFocus(component)) { repaint(component, classname, item); } //?
+								}
+							}
+							break;
+						}
+						item = getNextItem(component, item, subitem);
+					}
+				}
+		 	}
+		}
+		else if ("menubar" == classname) {
+			Object selected = get(component, "selected");
+			if (((id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_ENTERED) || (id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_EXITED)) &&
+					(part != null) && (selected == null)) {
+				repaint(component, classname, part);
+			}
+			else if ((part != null) && ((selected == null) ?
+				(id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_PRESSED) :
+					((id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_ENTERED) || (id == DRAG_ENTERED)))) {
+				set(component, "selected", part);
+				popup(component, classname);
+				repaint(component, classname, part);
+			}
+			else if ((id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_PRESSED) && (selected != null)) {
+				closeup(component);
+			}
+			else if (id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_RELEASED) {
+				if ((part != insidepart) &&
+						((insidepart == null) || (getClass(insidepart) != "menu"))) {
+					if ((insidepart != null) && getBoolean(insidepart, "enabled", true)) {
+						if (getClass(insidepart) == "checkboxmenuitem") {
+							changeCheck(insidepart, false);
+						}
+						else invoke(insidepart, "action");
+					}
+					closeup(component);
+				}
+			}
+		}
+		else if ("popupmenu" == classname) {
+			if (part != null) {
+				if ((id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_ENTERED) || (id == DRAG_ENTERED)) {
+					set(component, "selected", part);
+					popup(component, classname);
+					repaint(component, classname, part);
+				}
+				else if (id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_RELEASED) {
+					if ((insidepart == null) || (getClass(insidepart) != "menu")) {
+						Object menubar = part;
+						do {
+							menubar = getParent(menubar);
+						} while (getClass(menubar) != "menubar");
+						if ((insidepart != null) && getBoolean(insidepart, "enabled", true)) {
+							if (getClass(insidepart) == "checkboxmenuitem") {
+								changeCheck(insidepart, false);
+							}
+							else invoke(insidepart, "action");
+						}
+						closeup(menubar);
+					}
+				}
+				else if ((id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_EXITED) || (id == DRAG_EXITED)) {
+					if (getClass(part) != "menu") {
+						set(component, "selected", null);
+					}
+					repaint(component, classname, part);
+				}
+			}
+		}
+		else if ("dialog" == classname) {
+			if (part == "header") {
+				if (id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_PRESSED) {
+					referencex = mousex; referencey = mousey;
+					if (!getBoolean(component, "modal", false) &&
+							(get(content, "component") != component)) {
+						removeItemImpl(content, "component", component);
+						insertItem(content, "component", component, 0);
+						set(component, ":parent", content);
+						repaint(component);
+					}
+				}
+				else if (id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_DRAGGED) {
+					<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> bounds = getRectangle(component, "bounds");
+					int dx = mousex - referencex; int dy = mousey - referencey;
+					repaint<error descr="Cannot resolve method 'repaint(java.lang.Object, ?, ?, ?, ?)'">(component,
+						bounds.<error descr="Cannot resolve symbol 'x'">x</error> + Math.min(0, dx), bounds.<error descr="Cannot resolve symbol 'y'">y</error> + Math.min(0, dy),
+						bounds.<error descr="Cannot resolve symbol 'width'">width</error> + Math.abs(dx), bounds.<error descr="Cannot resolve symbol 'height'">height</error> + Math.abs(dy))</error>;
+					bounds.<error descr="Cannot resolve symbol 'x'">x</error> += dx; bounds.<error descr="Cannot resolve symbol 'y'">y</error> += dy;
+					referencex = mousex; referencey = mousey;
+				}
+			}
+		}
+	}
+
+	/**
+	 *
+	 */
+	private void setReference(Object component, int x, int y) {
+		referencex = x; referencey = y;
+		for (; component != null; component = getParent(component)) {
+			<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> bounds = getRectangle(component, "bounds");
+			referencex += bounds.<error descr="Cannot resolve symbol 'x'">x</error>; referencey += bounds.<error descr="Cannot resolve symbol 'y'">y</error>;
+		}
+	}
+
+	/**
+	 *
+	 */
+	private void select(Object component, Object row, String first,
+			String child, boolean shiftdown, boolean controldown) {
+		String selection = getString(component, "selection", "single");
+		Object lead = null;
+		if (shiftdown && (selection != "single") &&
+				((lead = get(component, "lead")) != null)) {
+			extend(component, lead, row, first, child);
+		}
+		else {
+			if (controldown && (selection == "multiple")) {
+				setBoolean(row, "selected",
+					!getBoolean(row, "selected", false), false);
+				repaint(component, null, row);
+				invoke(component, "action");
+				set(component, "anchor", null);
+			}
+			else if (controldown && getBoolean(row, "selected", false)) {
+				for (Object item = row;
+						item != null; item = getNextItem(component, item, child)) {
+					if (setBoolean(item, "selected", false, false)) {
+						repaint(component, null, item);
+					}
+				}
+				invoke(component, "action");
+				set(component, "anchor", null);
+			}
+			else {
+				selectItem(component, row, first, child);
+			}
+		}
+		setLead(component, (lead != null) ? lead : get(component, "lead"), row);
+	}
+
+	/**
+	 *
+	 */
+	private Object getNextItem(Object component,
+			Object item, String subitem) {
+		if (subitem == null) { return get(item, ":next"); }
+		Object next = get(item, subitem);
+		if ((next == null) || !getBoolean(item, "expanded", true)) {
+			while ((item != component) && ((next = get(item, ":next")) == null)) {
+				item = getParent(item);
+			}
+		}
+		return next;
+	}
+
+	/**
+	 *
+	 */
+	private void processField(int x, int y, int clickcount,
+			int id, Object component,
+			Object part, boolean multiline, boolean hidden, int left) {
+		if (id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_PRESSED) {
+			setReference(component, 2 + left, 2);
+			int mx = x - referencex;
+			int my = 0;
+			if (!multiline) {
+				mx += getInteger(component, "offset", 0);
+			} else {
+				<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> view = getRectangle(component, ":view");
+				mx += view.<error descr="Cannot resolve symbol 'x'">x</error> - 1;
+				my = y - referencey + view.<error descr="Cannot resolve symbol 'y'">y</error> - 1;
+			}
+			int caretstart = getCaretLocation(component, mx, my, hidden);
+			int caretend = caretstart;
+			//java>
+			if (clickcount > 1) {
+				String text = getString(component, "text", "");
+				while ((caretstart > 0) && ((clickcount == 2) ?
+					Character.isLetterOrDigit(text.charAt(caretstart - 1)) :
+						(text.charAt(caretstart - 1) != '\n'))) { caretstart--; }
+				while ((caretend < text.length()) && ((clickcount == 2) ?
+					Character.isLetterOrDigit(text.charAt(caretend)) :
+						(text.charAt(caretend) != '\n'))) { caretend++; }
+			}
+			//<java
+			setInteger(component, "start", caretstart, 0);
+			setInteger(component, "end", caretend, 0);
+			setFocus(component);
+			validate(component); // caret check only
+		}
+		else if (id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_DRAGGED) {
+			int mx = x - referencex;
+			int my = 0;
+			if (!multiline) {
+				mx += getInteger(component, "offset", 0);
+			} else {
+				<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> view = getRectangle(component, ":view");
+				mx += view.<error descr="Cannot resolve symbol 'x'">x</error> - 1;
+				my = y - referencey + view.<error descr="Cannot resolve symbol 'y'">y</error> - 1;
+			}
+			int dragcaret = getCaretLocation(component, mx, my, hidden);
+			if (dragcaret != getInteger(component, "end", 0)) {
+				setInteger(component, "end", dragcaret, 0);
+				validate(component); // caret check only
+			}
+		}
+		//java>
+		else if ((id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_ENTERED) && (mousepressed == null)) {
+			setCursor(<error descr="Cannot resolve symbol 'Cursor'">Cursor</error>.getPredefinedCursor(<error descr="Cannot resolve symbol 'Cursor'">Cursor</error>.TEXT_CURSOR));
+		}
+		else if (((id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_EXITED) && (mousepressed == null)) ||
+			((id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_RELEASED) &&
+				((mouseinside != component) || (insidepart != null)))) {
+			setCursor(<error descr="Cannot resolve symbol 'Cursor'">Cursor</error>.getPredefinedCursor(<error descr="Cannot resolve symbol 'Cursor'">Cursor</error>.DEFAULT_CURSOR));
+		}
+		//<java
+	}
+
+	/**
+	 *
+	 */
+	private int getCaretLocation(Object component, int x, int y, boolean hidden) {
+		String text = getString(component, "text", "");
+		<error descr="Cannot resolve symbol 'FontMetrics'">FontMetrics</error> fm = getFontMetrics(getFont());
+		for (int i = 0, j = 0; true; i = j + 1) {
+			j = text.indexOf('\n', i);
+			if ((j == -1) || y < fm.<error descr="Cannot resolve method 'getHeight()'">getHeight</error>()) {
+				if (j == -1) { j = text.length(); }
+				for (int k = i; k < j; k++) {
+					int charwidth = fm.<error descr="Cannot resolve method 'charWidth(char)'">charWidth</error>(hidden ? '*' : text.charAt(k));
+					if (x <= (charwidth / 2)) {
+						return k;
+					}
+					x -= charwidth;
+				}
+				return j;
+			}
+			y -= fm.<error descr="Cannot resolve method 'getHeight()'">getHeight</error>();
+		}
+	}
+
+	/**
+	 *
+	 */
+	private boolean processScroll(int x, int y,
+			int id, Object component, Object part) {
+		if ((part == "up") || (part == "down") ||
+				(part == "left") || (part == "right")) {
+			if ((id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_ENTERED) ||
+					(id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_EXITED) ||
+					(id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_PRESSED) ||
+					(id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_RELEASED)) {
+				if (id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_PRESSED) {
+					if (processScroll(component, part)) {
+						setTimer(300L); return true;
+					}
+				}
+				else {
+					if (id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_RELEASED) { setTimer(0L); }
+					repaint(component, null, part);
+				}
+			}
+		}
+		else if ((part == "uptrack") || (part == "downtrack") ||
+				(part == "lefttrack") || (part == "righttrack")) {
+			if (id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_PRESSED) {
+				if (processScroll(component, part)) {
+					setTimer(300L);
+				}
+			}
+			else if (id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_RELEASED) {
+				setTimer(0L);
+			}
+		}
+		else if ((part == "vknob") || (part == "hknob")) {
+			if (id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_PRESSED) {
+				<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> port = getRectangle(component, ":port");
+				<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> view = getRectangle(component, ":view");
+				if (part == "hknob") {
+					referencex = x -
+						view.<error descr="Cannot resolve symbol 'x'">x</error> * (port.<error descr="Cannot resolve symbol 'width'">width</error> - 2 * block) / view.<error descr="Cannot resolve symbol 'width'">width</error>;
+				} else {
+					referencey = y -
+						view.<error descr="Cannot resolve symbol 'y'">y</error> * (port.<error descr="Cannot resolve symbol 'height'">height</error> - 2 * block) / view.<error descr="Cannot resolve symbol 'height'">height</error>;
+				}
+			}
+			else if (id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_DRAGGED) {
+				<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> port = getRectangle(component, ":port");
+				<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> view = getRectangle(component, ":view");
+				if (part == "hknob") {
+					int viewx = (x - referencex) *
+						view.<error descr="Cannot resolve symbol 'width'">width</error> / (port.<error descr="Cannot resolve symbol 'width'">width</error> - 2 * block);
+					viewx = Math.max<error descr="Cannot resolve method 'max(int, ?)'">(0, Math.min<error descr="Cannot resolve method 'min(int, ?)'">(viewx, view.<error descr="Cannot resolve symbol 'width'">width</error> - port.<error descr="Cannot resolve symbol 'width'">width</error> + 2)</error>)</error>;
+					if (view.<error descr="Cannot resolve symbol 'x'">x</error> != viewx) {
+						view.<error descr="Cannot resolve symbol 'x'">x</error> = viewx;
+						repaint(component, null, "horizontal");
+					}
+				} else {
+					int viewy = (y - referencey) *
+						view.<error descr="Cannot resolve symbol 'height'">height</error> / (port.<error descr="Cannot resolve symbol 'height'">height</error> - 2 * block);
+					viewy = Math.max<error descr="Cannot resolve method 'max(int, ?)'">(0, Math.min<error descr="Cannot resolve method 'min(int, ?)'">(viewy, view.<error descr="Cannot resolve symbol 'height'">height</error> - port.<error descr="Cannot resolve symbol 'height'">height</error> + 2)</error>)</error>;
+					if (view.<error descr="Cannot resolve symbol 'y'">y</error> != viewy) {
+						view.<error descr="Cannot resolve symbol 'y'">y</error> = viewy;
+						repaint(component, null, "vertical");
+					}
+				}
+			}
+		}
+		else if (part == "corner") {
+				part = "corner"; // compiler bug
+		}
+		else {
+			if (id == <error descr="Cannot resolve symbol 'MouseEvent'">MouseEvent</error>.MOUSE_PRESSED) {
+				<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> port = getRectangle(component, ":port");
+				setReference(component, port.<error descr="Cannot resolve symbol 'x'">x</error> + 1, port.<error descr="Cannot resolve symbol 'y'">y</error> + 1);
+			}
+			return false;
+		}
+		return true;
+	}
+
+	/**
+	 *
+	 */
+	private boolean processScroll(Object component, Object part) {
+		<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> view = getRectangle(component, ":view");
+		<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> port = ((part == "left") || (part == "up")) ? null :
+			getRectangle(component, ":port");
+		int dx = 0; int dy = 0;
+		if (part == "left") { dx = -10; }
+		else if (part == "lefttrack") { dx = -port.<error descr="Cannot resolve symbol 'width'">width</error>; }
+		else if (part == "right") { dx = 10; }
+		else if (part == "righttrack") { dx = port.<error descr="Cannot resolve symbol 'width'">width</error>; }
+		else if (part == "up") { dy = -10; }
+		else if (part == "uptrack") { dy = -port.<error descr="Cannot resolve symbol 'height'">height</error>; }
+		else if (part == "down") { dy = 10; }
+		else if (part == "downtrack") { dy = port.<error descr="Cannot resolve symbol 'height'">height</error>; }
+		if (dx != 0) {
+			dx = (dx < 0) ? Math.max<error descr="Cannot resolve method 'max(?, int)'">(-view.<error descr="Cannot resolve symbol 'x'">x</error>, dx)</error> :
+				Math.min<error descr="Cannot resolve method 'min(int, ?)'">(dx, view.<error descr="Cannot resolve symbol 'width'">width</error> - port.<error descr="Cannot resolve symbol 'width'">width</error> + 2 - view.<error descr="Cannot resolve symbol 'x'">x</error>)</error>;
+		}
+		else if (dy != 0) {
+			dy = (dy < 0) ? Math.max<error descr="Cannot resolve method 'max(?, int)'">(-view.<error descr="Cannot resolve symbol 'y'">y</error>, dy)</error> :
+				Math.min<error descr="Cannot resolve method 'min(int, ?)'">(dy, view.<error descr="Cannot resolve symbol 'height'">height</error> - port.<error descr="Cannot resolve symbol 'height'">height</error> + 2 - view.<error descr="Cannot resolve symbol 'y'">y</error>)</error>;
+		}
+		else return false;
+		view.<error descr="Cannot resolve symbol 'x'">x</error> += dx; view.<error descr="Cannot resolve symbol 'y'">y</error> += dy;
+		repaint(component, null, (dx != 0) ? "horizontal" : "vertical");
+		return (((part == "left") || (part == "lefttrack")) && (view.<error descr="Cannot resolve symbol 'x'">x</error> > 0)) ||
+			(((part == "right") || (part == "righttrack")) &&
+				(view.<error descr="Cannot resolve symbol 'x'">x</error> < view.<error descr="Cannot resolve symbol 'width'">width</error> - port.<error descr="Cannot resolve symbol 'width'">width</error> + 2)) ||
+			(((part == "up") || (part == "uptrack")) && (view.<error descr="Cannot resolve symbol 'y'">y</error> > 0)) ||
+			(((part == "down") || (part == "downtrack")) &&
+				(view.<error descr="Cannot resolve symbol 'y'">y</error> < view.<error descr="Cannot resolve symbol 'height'">height</error> - port.<error descr="Cannot resolve symbol 'height'">height</error> + 2));
+	}
+
+	/**
+	 *
+	 */
+	private boolean processSpin(Object component, Object part) {
+		String text = getString(component, "text", null);
+		if (text != null) {
+			try {
+				String value = String.valueOf(
+					Integer.parseInt(text) + ((part == "up") ? 1 : -1));
+				setString(component, "text", value, null);
+				setInteger(component, "start", value.length(), 0);
+				setInteger(component, "end", 0, 0);
+				repaint(component, "spinbox", null);
+				invoke(component, "action");
+				return true;
+			} catch (NumberFormatException nfe) {}
+		}
+		return false;
+	}
+
+	//java>
+	/*public void setEventHandler(Object component, Object eventhandler) {
+		set(component, ":handler", eventhandler);
+	}*/
+
+	/**
+	 *
+	 */
+	private void invoke(Object component, String event) {
+		<error descr="Cannot resolve symbol 'Method'">Method</error> method = (<error descr="Cannot resolve symbol 'Method'">Method</error>) get(component, event);
+		if (method != null) {
+			try {
+				method.<error descr="Cannot resolve method 'invoke(Thinlet, null)'">invoke</error>(this, null);
+			} catch (<error descr="Cannot resolve symbol 'InvocationTargetException'">InvocationTargetException</error> ite) {
+				ite.<error descr="Cannot resolve method 'getTargetException()'">getTargetException</error>().printStackTrace();
+			} catch (Exception exc) {
+				exc.printStackTrace();
+			}
+		}
+	}
+	//<java
+	/*midp
+	private void invoke(Object component, String event) {
+			String action = (String) get(component, event);
+			if (action != null) { handle(component, action); }
+	}
+	protected void handle(Object source, String action) {
+	}
+	midp*/
+
+	/**
+	 *
+	 */
+	private boolean findComponent(Object component, int x, int y) {
+		if (component == content) {
+			mouseinside = insidepart = null;
+			mousex = x; mousey = y;
+		}
+		if (!getBoolean(component, "visible", true)) { return false; }
+		<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> bounds = getRectangle(component, "bounds");
+		if ((bounds == null) || !(bounds.<error descr="Cannot resolve method 'contains(int, int)'">contains</error>(x, y))) { return false; } //java
+		//midp if ((bounds == null) || (x < bounds.x) || (x - bounds.x >= bounds.width) ||
+		//midp 	(y < bounds.y) || (y - bounds.y >= bounds.height)) { return false; }
+		mouseinside = component;
+		x -= bounds.<error descr="Cannot resolve symbol 'x'">x</error>; y -= bounds.<error descr="Cannot resolve symbol 'y'">y</error>;
+		String classname = getClass(component);
+
+		if ("combobox" == classname) {
+			if (getBoolean(component, "editable", true) && (x <= bounds.<error descr="Cannot resolve symbol 'width'">width</error> - block)) {
+				<error descr="Cannot resolve symbol 'Image'">Image</error> icon = getIcon(component, "icon", null);
+				insidepart = ((icon != null) && (x <= 2 + icon.<error descr="Cannot resolve method 'getWidth(Thinlet)'">getWidth</error>(this))) ?
+					"icon" : null;
+			} else {
+				insidepart = "down";
+			}
+		}
+		else if ("combolist" == classname) {
+			if (!findScrollPane(component, x, y, bounds)) {
+				y += getRectangle(component, ":view").<error descr="Cannot resolve symbol 'y'">y</error>;
+				for (Object choice = get(get(component, "combobox"), "choice");
+						choice != null; choice = get(choice, ":next")) {
+					<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> r = getRectangle(choice, "bounds");
+					if ((y >= r.<error descr="Cannot resolve symbol 'y'">y</error>) && (y < r.<error descr="Cannot resolve symbol 'y'">y</error> + r.<error descr="Cannot resolve symbol 'height'">height</error>)) {
+						insidepart = choice; break;
+					}
+				}
+			}
+		}
+		else if ("textarea" == classname) {
+			findScrollPane(component, x, y, bounds);
+		}
+		else if ("tabbedpane" == classname) {
+			Object tabcontent = getItemImpl(component,
+				"component", getInteger(component, "selected", 0));
+			if ((tabcontent == null) || !findComponent(tabcontent, x, y)) {
+				for (Object comp = get(component, "tab");
+						comp != null; comp = get(comp, ":next")) {
+					<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> r = getRectangle(comp, "bounds");
+					if (r.<error descr="Cannot resolve method 'contains(int, int)'">contains</error>(x, y)) { //java
+					//midp if ((x >= r.x) && (x - r.x < r.width) && (y >= r.y) && (y - r.y < r.height)) {
+						insidepart = comp; break;
+					}
+				}
+			}
+		}
+		else if (("panel" == classname) || ("desktop" == classname) ||
+				("dialog" == classname)) {
+			if (("dialog" == classname) &&
+					(y < 4 + getInteger(component, "titleheight", 0))) {
+				insidepart = "header";
+			} else {
+				for (Object comp = get(component, "component");
+						comp != null; comp = get(comp, ":next")) {
+					if (findComponent(comp, x, y)) { break; }
+					if (("desktop" == classname) &&
+							getBoolean(comp, "modal", false)) { break; } // && dialog
+				}
+			}
+		}
+		else if ("spinbox" == classname) {
+			insidepart = (x <= bounds.<error descr="Cannot resolve symbol 'width'">width</error> - block) ? null :
+				((y <= bounds.<error descr="Cannot resolve symbol 'height'">height</error> / 2) ? "up" : "down");
+		}
+		else if ("splitpane" == classname) {
+			Object comp1 = get(component, "component");
+			if (comp1 != null) {
+				if (!findComponent(comp1, x, y)) {
+					Object comp2 = get(comp1, ":next");
+					if (comp2 != null) {
+						findComponent(comp2, x, y);
+					}
+				}
+			}
+		}
+		else if ("list" == classname) {
+			findScrollPane(component, x, y, bounds);
+		}
+		else if ("table" == classname) {
+			findScrollPane(component, x, y, bounds);
+		}
+		else if ("tree" == classname) {
+			findScrollPane(component, x, y, bounds);
+		}
+		else if ("menubar" == classname) {
+			for (Object menu = get(component, "menu");
+					menu != null; menu = get(menu, ":next")) {
+				<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> r = getRectangle(menu, "bounds");
+				if ((x >= r.<error descr="Cannot resolve symbol 'x'">x</error>) && (x < r.<error descr="Cannot resolve symbol 'x'">x</error> + r.<error descr="Cannot resolve symbol 'width'">width</error>)) {
+					insidepart = menu; break;
+				}
+			}
+		}
+		else if ("popupmenu" == classname) {
+			for (Object menu = get(get(component, "menu"), "menu");
+					menu != null; menu = get(menu, ":next")) {
+				<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> r = getRectangle(menu, "bounds");
+				if ((y >= r.<error descr="Cannot resolve symbol 'y'">y</error>) && (y < r.<error descr="Cannot resolve symbol 'y'">y</error> + r.<error descr="Cannot resolve symbol 'height'">height</error>)) {
+					insidepart = menu; break;
+				}
+			}
+		}
+		return true;
+	}
+
+	/**
+	 *
+	 */
+	private boolean findScrollPane(Object component,
+			int x, int y, <error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> bounds) {
+		<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> port = getRectangle(component, ":port");
+		if ((x < port.<error descr="Cannot resolve symbol 'x'">x</error>) || (y < port.<error descr="Cannot resolve symbol 'y'">y</error>) ||
+				((x >= port.<error descr="Cannot resolve symbol 'x'">x</error> + port.<error descr="Cannot resolve symbol 'width'">width</error>) && (y >= port.<error descr="Cannot resolve symbol 'y'">y</error> + port.<error descr="Cannot resolve symbol 'height'">height</error>))) {
+			insidepart = "corner";
+		}
+		else if ((x >= port.<error descr="Cannot resolve symbol 'x'">x</error> + port.<error descr="Cannot resolve symbol 'width'">width</error>) || (y >= port.<error descr="Cannot resolve symbol 'y'">y</error> + port.<error descr="Cannot resolve symbol 'height'">height</error>)) {
+			boolean horizontal = (y >= port.<error descr="Cannot resolve symbol 'y'">y</error> + port.<error descr="Cannot resolve symbol 'height'">height</error>);
+			int p = horizontal ? (x - port.<error descr="Cannot resolve symbol 'x'">x</error>) : (y - port.<error descr="Cannot resolve symbol 'y'">y</error>);
+			int portsize = horizontal ? port.<error descr="Cannot resolve symbol 'width'">width</error> : port.<error descr="Cannot resolve symbol 'height'">height</error>;
+			int button = Math.min(block, portsize / 2);
+			if (p < button) {
+				insidepart = horizontal ? "left" : "up";
+			}
+			else if (p >= portsize - button) {
+				insidepart = horizontal ? "right" : "down";
+			}
+			else {
+				<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> view = getRectangle(component, ":view");
+				int viewp = horizontal ? view.<error descr="Cannot resolve symbol 'x'">x</error> : view.<error descr="Cannot resolve symbol 'y'">y</error>;
+				int viewsize = horizontal ? view.<error descr="Cannot resolve symbol 'width'">width</error> : view.<error descr="Cannot resolve symbol 'height'">height</error>;
+				int track = portsize - (2 * button);
+				int knob = Math.min(track,
+					Math.max(track * (portsize - 2) / viewsize, 6));
+				int decrease = viewp * (track - knob) / (viewsize - portsize + 2);
+				if (p < button + decrease) {
+					insidepart = horizontal ? "lefttrack" : "uptrack";
+				}
+				else if (p < button + decrease + knob) {
+					insidepart = horizontal ? "hknob" : "vknob";
+				}
+				else {
+					insidepart = horizontal ? "righttrack" : "downtrack";
+				}
+			}
+		}
+		else { return false; }
+		return true;
+	}
+
+	/**
+	 *
+	 */
+	private void repaint(Object component, Object classname, Object part) {
+		<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> b = getRectangle(component, "bounds");
+		if ((classname == "combobox") || (classname == "spinbox")) {
+			boolean down = (part == "up") || (part == "down"); // else text
+			repaint<error descr="Cannot resolve method 'repaint(java.lang.Object, ?, ?, int, ?)'">(component, down ? (b.<error descr="Cannot resolve symbol 'x'">x</error> + b.<error descr="Cannot resolve symbol 'width'">width</error> - block) : b.<error descr="Cannot resolve symbol 'x'">x</error>, b.<error descr="Cannot resolve symbol 'y'">y</error>,
+				down ? block : (b.<error descr="Cannot resolve symbol 'width'">width</error> - block), b.<error descr="Cannot resolve symbol 'height'">height</error>)</error>;
+		}
+		//else if (classname == "dialog") {}
+			//int titleheight = getInteger(component, "titleheight", 0);
+		//else if (classname == "splitpane") {}
+		else if ((classname == "tabbedpane") ||
+				(classname == "menubar") || (classname == "popupmenu")) {
+			<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> r = getRectangle(part, "bounds");
+			repaint<error descr="Cannot resolve method 'repaint(java.lang.Object, ?, ?, ?, ?)'">(component, b.<error descr="Cannot resolve symbol 'x'">x</error> + r.<error descr="Cannot resolve symbol 'x'">x</error>, b.<error descr="Cannot resolve symbol 'y'">y</error> + r.<error descr="Cannot resolve symbol 'y'">y</error>,
+				(classname == "popupmenu") ? b.<error descr="Cannot resolve symbol 'width'">width</error> : r.<error descr="Cannot resolve symbol 'width'">width</error>, r.<error descr="Cannot resolve symbol 'height'">height</error>)</error>;
+		}
+		else //if ((classname == "combolist") || (classname == "textarea") ||
+				{//(classname == "list") || (classname == "table") || (classname == "tree")) {
+			<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> port = getRectangle(component, ":port");
+			if (part == "left") {
+				repaint<error descr="Cannot resolve method 'repaint(java.lang.Object, ?, ?, int, int)'">(component, b.<error descr="Cannot resolve symbol 'x'">x</error> + port.<error descr="Cannot resolve symbol 'x'">x</error>, b.<error descr="Cannot resolve symbol 'y'">y</error> + b.<error descr="Cannot resolve symbol 'height'">height</error> - block, block, block)</error>;
+			}
+			else if (part == "right") {
+				repaint<error descr="Cannot resolve method 'repaint(java.lang.Object, ?, ?, int, int)'">(component, b.<error descr="Cannot resolve symbol 'x'">x</error> + port.<error descr="Cannot resolve symbol 'x'">x</error> + port.<error descr="Cannot resolve symbol 'width'">width</error> - block, b.<error descr="Cannot resolve symbol 'y'">y</error> + b.<error descr="Cannot resolve symbol 'height'">height</error> - block, block, block)</error>;
+			}
+			else if (part == "up") {
+				repaint<error descr="Cannot resolve method 'repaint(java.lang.Object, ?, ?, int, int)'">(component, b.<error descr="Cannot resolve symbol 'x'">x</error> + b.<error descr="Cannot resolve symbol 'width'">width</error> - block, b.<error descr="Cannot resolve symbol 'y'">y</error> + port.<error descr="Cannot resolve symbol 'y'">y</error>, block, block)</error>;
+			}
+			else if (part == "down") {
+				repaint<error descr="Cannot resolve method 'repaint(java.lang.Object, ?, ?, int, int)'">(component, b.<error descr="Cannot resolve symbol 'x'">x</error> + b.<error descr="Cannot resolve symbol 'width'">width</error> - block, b.<error descr="Cannot resolve symbol 'y'">y</error> + port.<error descr="Cannot resolve symbol 'y'">y</error> + port.<error descr="Cannot resolve symbol 'height'">height</error> - block, block, block)</error>;
+			}
+			else if (part == "horizontal") { // horizontaly center part
+				repaint<error descr="Cannot resolve method 'repaint(java.lang.Object, ?, ?, ?, ?)'">(component, b.<error descr="Cannot resolve symbol 'x'">x</error> + port.<error descr="Cannot resolve symbol 'x'">x</error>, b.<error descr="Cannot resolve symbol 'y'">y</error>, port.<error descr="Cannot resolve symbol 'width'">width</error>, b.<error descr="Cannot resolve symbol 'height'">height</error>)</error>;
+			}
+			else if (part == "vertical") {
+				repaint<error descr="Cannot resolve method 'repaint(java.lang.Object, ?, ?, ?, ?)'">(component, b.<error descr="Cannot resolve symbol 'x'">x</error>, b.<error descr="Cannot resolve symbol 'y'">y</error> + port.<error descr="Cannot resolve symbol 'y'">y</error>, b.<error descr="Cannot resolve symbol 'width'">width</error>, port.<error descr="Cannot resolve symbol 'height'">height</error>)</error>;
+			}
+			else if (part == "text") { //textarea
+				repaint<error descr="Cannot resolve method 'repaint(java.lang.Object, ?, ?, ?, ?)'">(component, b.<error descr="Cannot resolve symbol 'x'">x</error> + port.<error descr="Cannot resolve symbol 'x'">x</error>, b.<error descr="Cannot resolve symbol 'y'">y</error> + port.<error descr="Cannot resolve symbol 'y'">y</error>, port.<error descr="Cannot resolve symbol 'width'">width</error>, port.<error descr="Cannot resolve symbol 'height'">height</error>)</error>;
+			}
+			else {
+				<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> view = getRectangle(component, ":view");
+				<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> r = getRectangle(part, "bounds");
+				if ((r.<error descr="Cannot resolve symbol 'y'">y</error> + r.<error descr="Cannot resolve symbol 'height'">height</error> >= view.<error descr="Cannot resolve symbol 'y'">y</error>) && (r.<error descr="Cannot resolve symbol 'y'">y</error> <= view.<error descr="Cannot resolve symbol 'y'">y</error> + port.<error descr="Cannot resolve symbol 'height'">height</error>)) {
+					repaint<error descr="Cannot resolve method 'repaint(java.lang.Object, ?, ?, ?, ?)'">(component, b.<error descr="Cannot resolve symbol 'x'">x</error> + port.<error descr="Cannot resolve symbol 'x'">x</error>, b.<error descr="Cannot resolve symbol 'y'">y</error> + port.<error descr="Cannot resolve symbol 'y'">y</error> - view.<error descr="Cannot resolve symbol 'y'">y</error> + 1 + r.<error descr="Cannot resolve symbol 'y'">y</error>,
+						port.<error descr="Cannot resolve symbol 'width'">width</error>, r.<error descr="Cannot resolve symbol 'height'">height</error>)</error>;
+					//? need cut item rectangle above/bellow viewport
+				}
+			}
+		}
+	}
+
+	/**
+	 *
+	 */
+	private void validate(Object component) {
+		repaint(component);
+		<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> bounds = getRectangle(component, "bounds");
+		bounds.<error descr="Cannot resolve symbol 'width'">width</error> = -1 * Math.abs<error descr="Cannot resolve method 'abs(?)'">(bounds.<error descr="Cannot resolve symbol 'width'">width</error>)</error>;
+	}
+
+	/**
+	 *
+	 */
+	private void repaint(Object component) {
+		<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> bounds = getRectangle(component, "bounds");
+		if (bounds != null) {
+			repaint<error descr="Cannot resolve method 'repaint(java.lang.Object, ?, ?, ?, ?)'">(component, bounds.<error descr="Cannot resolve symbol 'x'">x</error>, bounds.<error descr="Cannot resolve symbol 'y'">y</error>, bounds.<error descr="Cannot resolve symbol 'width'">width</error>, bounds.<error descr="Cannot resolve symbol 'height'">height</error>)</error>;
+		}
+	}
+
+	/**
+	 *
+	 */
+	private void repaint(Object component, int x, int y, int width, int height) {
+		while ((component = getParent(component)) != null) {
+			<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> bounds = getRectangle(component, "bounds");
+			x += bounds.<error descr="Cannot resolve symbol 'x'">x</error>;
+			y += bounds.<error descr="Cannot resolve symbol 'y'">y</error>;
+		}
+		repaint(x, y, width, height);
+	}
+
+	/*private void clip(Graphics g,
+			Rectangle clip, int x, int y, int width, int height) {
+		int x1 = Math.max(clip.x, x);
+		int y1 = Math.max(clip.y, y);
+		int x2 = Math.min(clip.x + clip.width, x + width);
+		int y2 = Math.min(clip.y + clip.height, y + height);
+		g.setClip(x1, y1, x2 - x1, y2 - y1);
+	}*/
+
+	/**
+	 *
+	 */
+	public boolean requestFocus(Object component) {
+		if (checkFocusable(component, true)) {
+			setFocus(component); return true;
+		}
+		return false;
+	}
+
+	/**
+	 *
+	 */
+	private boolean setFocus(Object component) {
+		if (!focusinside) { //java
+			requestFocus(); //java
+		} //java
+		if (focusowner != component) {
+			Object focused = focusowner;
+			focusowner = component;
+			if (focused != null) {
+				//mouseEvent(null, FocusEvent.FOCUS_LOST, focused, null, null);
+				repaint(focused);
+				//focusGained(component);
+			}
+			return true;
+		}
+		return false;
+	}
+
+	/**
+	 * @return next focusable component is found (not the first of the desktop/dialog)
+	 */
+	private boolean setNextFocusable(Object current, boolean outgo) {
+		boolean consumed = true;
+		for (Object next = null, component = current; true; component = next) {
+			next = get(component, "component"); // check first subcomponent
+			if (next == null) { next = get(component, ":next"); } // check next component
+			while (next == null) { // find the next of the parents, or the topmost
+				component = getParent(component); // current is not on the desktop
+				if (component == null) { return false; }
+				if ((component == content) || ((getClass(component) == "dialog") &&
+						(!outgo  || getBoolean(component, "modal", false)))) {
+					consumed = false; // find next focusable but does not consume event
+					next = component; // the topmost (desktop or modal dialog)
+				}
+				else {
+					next = get(component, ":next");
+				}
+			}
+			if (next == current) { return false; } // one fucusable, no loop
+			if (checkFocusable(next, false)) {
+				setFocus(next);
+				return consumed;
+			}
+		}
+	}
+
+	//java>
+	/**
+	 * @return previous focusable component is found (not the last of the desktop/dialog)
+	 */
+	private boolean setPreviousFocusable(Object component, boolean outgo) {
+		for (int i = 0; i < 2; i++) { // 0 is backward direction
+			Object previous = getPreviousFocusable(component, null, true, false, (i == 0), outgo);
+			if (previous != null) {
+				setFocus(previous);
+				return (i == 0);
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * For the starting component search its parent direction for a focusable component, and then
+	 * its next component (if not search backward from the component).<br>
+	 * For its parent components check its first component, the current one, and its parent direction
+	 * (backward search), or its parent, then next component (forward direction).<br>
+	 * For the rest components check the next, then the first subcomponent direction, and finally
+	 * check whether the component is focusable.
+	 */
+	private Object getPreviousFocusable(Object component,
+			Object block, boolean start, boolean upward, boolean backward, boolean outgo) {
+		Object previous = null;
+		if ((component != null) && (component != block)) {
+			boolean go = ((getClass(component) != "dialog") ||
+				(outgo && !getBoolean(component, "modal", false)));
+			if (!start && !upward && go) {
+				previous = getPreviousFocusable(get(component, ":next"), block, false, false, backward, outgo);
+			}
+			if ((previous == null) && ((upward && backward) || (!start && !upward))) {
+				previous = getPreviousFocusable(get(component, "component"), block, false, false, backward, outgo);
+				if ((previous == null) && checkFocusable(component, false)) {
+					previous = component;
+				}
+			}
+			if ((previous == null) && (start || upward) && go) {
+				previous = getPreviousFocusable(getParent(component), component, false, true, backward, outgo);
+			}
+			if ((previous == null) && (start || upward) && !backward && go) {
+				previous = getPreviousFocusable(get(component, ":next"), block, false, false, backward, outgo);
+			}
+		}
+		return previous;
+	}
+	//<java
+
+	/**
+	 *
+	 */
+	private boolean checkFocusable(Object component, boolean forced) {
+		String classname = getClass(component);
+		//midp forced=true;
+		if ((classname == "button") || (classname == "checkbox") ||
+				(classname == "combobox") || (classname == "textfield") ||
+				(classname == "passwordfield") || (classname == "textarea") ||
+				(classname == "spinbox") || (classname == "slider") ||
+				(classname == "list") || (classname == "table") || (classname == "tree") ||
+				(classname == "tabbedpane") || (forced && (classname == "splitpane"))) {
+			for (Object comp = component; comp != null;) {
+				if (!getBoolean(comp, "enabled", true) || !getBoolean(comp, "visible", true)) {
+					return false;
+				}
+				Object parent = getParent(comp);
+				if ((getClass(parent) == "tabbedpane") && (getItemImpl(parent,
+					"component", getInteger(parent, "selected", 0)) != comp)) { return false; }
+				comp = parent;
+			}
+			return true;
+		}
+		return false;
+	}
+
+	/*if (cliparea == null) { add(cliparea = new TextArea()); }
+	cliparea.setText(content);
+	cliparea.selectAll();
+	cliparea.dispatchEvent(new KeyEvent(this, KeyEvent.KEY_TYPED, 0L, KeyEvent.CTRL_MASK, 0, (char) 3));
+	cliparea.selectAll();
+
+	if (cliparea == null) { add(cliparea = new TextArea()); }
+	cliparea.dispatchEvent(new KeyEvent(this, KeyEvent.KEY_TYPED, 0L, KeyEvent.CTRL_MASK, 0, (char) 22));
+	cliparea.getText(); return cliparea.getText();*/
+
+	// ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
+
+	/**
+	 *
+	 */
+	public Object create(String classname) {
+		for (int i = 0; i < dtd.length; i += 3) {
+			if (dtd[i].equals(classname)) {
+				return createImpl((String) dtd[i]);
+			}
+		}
+		throw new IllegalArgumentException("unknown " + classname);
+	}
+
+	/**
+	 * @return classname
+	 */
+	public String getClass(Object component) {
+		return (String) get(component, ":class");
+	}
+
+	/**
+	 *
+	 */
+	public Object getDesktop() {
+		return content;
+	}
+
+	/**
+	 *
+	 */
+	private Object createImpl(String classname) {
+		return new Object[] { ":class", classname, null };
+	}
+
+	/**
+	 *
+	 */
+	private boolean set(Object component, Object key, Object value) {
+		Object[] previous = (Object[]) component;
+		for (Object[] entry = previous; entry != null;
+				entry = (Object[]) entry[2]) {
+			if (entry[0] == key) {
+				if (value != null) { // set the row's value
+					Object oldvalue = entry[1];
+					entry[1] = value;
+					return !value.equals(oldvalue);
+				}
+				else { // remove the row
+					previous[2] = entry[2];
+					entry[2] = null;
+					return true;
+				}
+			}
+			previous = entry;
+		}
+		if (value != null) { // append a new row
+			previous[2] = new Object[] { key, value, null };
+			return true;
+		}
+		return false;
+	}
+
+	/**
+	 *
+	 */
+	private Object get(Object component, Object key) {
+		for (Object[] entry = (Object[]) component; entry != null;
+				entry = (Object[]) entry[2]) {
+			if (entry[0] == key) {
+				return entry[1];
+			}
+		}
+		return null;
+	}
+
+	/**
+	 *
+	 */
+	public int getCount(Object component) {
+		return getCount(component, null);
+	}
+
+	/**
+	 *
+	 */
+	public int getCount(Object component, String key) {
+		return getItemCountImpl(component, getComponentName(component, key));
+	}
+
+	/**
+	 *
+	 */
+	public Object getParent(Object component) {
+		return get(component, ":parent");
+	}
+
+	/**
+	 * @return the first selected index or -1
+	 */
+	public int getSelectedIndex(Object component) {
+		int i = 0;
+		for (Object item = get(component, getComponentName(component, null));
+				item != null; item = get(item, ":next")) {
+			if (getBoolean(item, "selected", false)) { return i; }
+			i++;
+		}
+		return -1;
+	}
+
+	/**
+	 *
+	 */
+	public void removeAll(Object component) {
+		removeAll(component, null);
+	}
+
+	/**
+	 *
+	 */
+	public void removeAll(Object component, String key) {
+		String list = getComponentName(component, key);
+		if (get(component, list) != null) {
+			set(component, list, null);
+			update(component, "validate");
+		}
+	}
+
+	/**
+	 *
+	 */
+	private int getItemCountImpl(Object component, Object key) {
+		int i = 0;
+		for (component = get(component, key); component != null;
+				component = get(component, ":next")) {
+			i++;
+		}
+		return i;
+	}
+
+	/**
+	 *
+	 */
+	public Object getItem(Object component, int index) {
+		return getItem(component, null, index);
+	}
+
+	/**
+	 *
+	 */
+	public Object[] getItems(Object component) {
+		return getItems(component, null);
+	}
+
+	/**
+	 *
+	 */
+	public Object getItem(Object component, String key, int index) {
+		return getItemImpl(component, getComponentName(component, key), index);
+	}
+
+	/**
+	 *
+	 */
+	public Object[] getItems(Object component, String key) {
+		key = getComponentName(component, key);
+		Object[] items = new Object[getItemCountImpl(component, key)];
+		component = get(component, key);
+		for (int i = 0; i < items.length; i++) {
+			items[i] = component;
+			component = get(component, ":next");
+		}
+		return items;
+	}
+
+	/**
+	 *
+	 */
+	private Object getItemImpl(Object component, Object key, int index) {
+		int i = 0;
+		for (Object item = get(component, key);
+				item != null; item = get(item, ":next")) {
+			if (i == index) { return item; }
+			i++;
+		}
+		return null;
+	}
+
+	/**
+	 *
+	 */
+	private int getIndex(Object component, Object key, Object value) {
+		int index = 0;
+		for (Object item = get(component, key);
+				item != null; item = get(item, ":next")) {
+			if (value == item) { return index; }
+			index++;
+		}
+		return -1;
+	}
+
+	/**
+	 *
+	 */
+	public void add(Object component) {
+		add(content, component, 0);
+	}
+
+	/**
+	 *
+	 */
+	public void add(Object parent, Object component) {
+		add(parent, component, -1);
+	}
+
+	/**
+	 *
+	 */
+	public void add(Object parent, Object component, int index) {
+		addImpl(parent, component, index);
+		update(component, "validate");
+		if (parent == content) {
+			setNextFocusable(component, false);
+		}
+	}
+
+	/**
+	 *
+	 */
+	private void addItem(Object parent, Object key, Object component) {
+		insertItem(parent, key, component, -1);
+	}
+
+	/**
+	 *
+	 */
+	private void insertItem(Object parent,
+			Object key, Object component, int index) {
+		Object target = get(parent, key);
+		if (index == -1) {
+			while (target != null) {
+				target = get(parent = target, key = ":next");
+			}
+		}
+		else {
+			for (int i = 0; i < index; i++) {
+				target = get(parent = target, key = ":next");
+			}
+			set(component, ":next", get(parent, key));
+		}
+		set(parent, key, component);
+	}
+
+	/**
+	 *
+	 */
+	public void remove(Object component) {
+		Object parent = getParent(component);
+		String parentclass = getClass(parent);
+		String classname = getClass(component);
+		String listkey = ("combobox" == parentclass) ? "choice" :
+			(("tabbedpane" == parentclass) && ("tab" == classname)) ? "tab" :
+			("list" == parentclass) ? "item" :
+			(("table" == parentclass) && ("column" == classname)) ? "column" :
+			(("table" == parentclass) && ("row" == classname)) ? "row" :
+			("row" == parentclass) ? "cell" :
+			(("tree" == parentclass) || ("node" == parentclass)) ? "node" :
+			(("menubar" == parentclass) || ("menu" == parentclass)) ? "menu" :
+			(("panel" == parentclass) || ("desktop" == parentclass) ||
+				("splitpane" == parentclass) || ("dialog" == parentclass) ||
+				("tabbedpane" == parentclass)) ? "component" : null;
+		if (listkey == null) { throw new IllegalArgumentException("unknown " + classname); }
+		update(component, "validate");
+		removeItemImpl(parent, listkey, component);
+		// reuest focus for its parent if the component (or subcomponent) is currently focused
+		for (Object comp = focusowner; comp != null; comp = getParent(comp)) {
+			if (comp == component) {
+				setNextFocusable(parent, false); break;
+			}
+		}
+	}
+
+	/**
+	 *
+	 */
+	private void removeItemImpl(Object parent, Object key, Object component) {
+		Object target = get(parent, key);
+		while (target != component) {
+			target = get(parent = target, key = ":next"); // (target != null)
+		}
+		set(parent, key, get(target, ":next"));
+		set(target, ":next", null);
+		set(target, ":parent", null);
+	}
+
+	/*
+	private void removeItemImpl(Object parent, String key, int index) {
+		Object target = get(parent, key);
+		for (int i = 0; i < index; i++) {
+			target = get(parent = target, key = ":next");
+		}
+		set(parent, key, get(target, ":next"));
+		set(target, ":next", null);
+	}*/
+
+	/**
+	 *
+	 */
+	private String getComponentName(Object parent, Object classname) {
+		String parentclass = getClass(parent);
+		String compname = ("combobox" == parentclass) ? "choice" :
+			("list" == parentclass) ? "item" :
+			("row" == parentclass) ? "cell" :
+			(("tree" == parentclass) || ("node" == parentclass)) ? "node" :
+			(("menubar" == parentclass) || ("menu" == parentclass)) ? "menu" :
+			(("panel" == parentclass) || ("desktop" == parentclass) ||
+				("splitpane" == parentclass) || ("dialog" == parentclass)) ?
+				"component" : null;
+		if ((compname != null) && ((classname == null) ||
+				compname.equals(classname))) { return compname; }
+		if ("tabbedpane" == parentclass) {
+			if ("tab".equals(classname)) { return "tab"; }
+			if ((classname == null) || "component".equals(classname)) { return "component"; }
+		}
+		else if ("table" == parentclass) {
+			if ("column".equals(classname)) { return "column"; }
+			if ((classname == null) || "row".equals(classname)) { return "row"; }
+		}
+		throw new IllegalArgumentException("unknown " + classname);
+	}
+
+	/**
+	 *
+	 */
+	public Object find(String name) {
+		return find(content, name);
+	}
+
+	/**
+	 *
+	 */
+	public Object find(Object component, String name) {
+		if (name.equals(get(component, "name"))) { return component; }
+		String classname = getClass(component);
+		String childname = null; String childname2 = null;
+		if (("panel" == classname) || ("desktop" == classname) ||
+				("splitpane" == classname) || ("dialog" == classname)) { childname = "component"; }
+		else if ("combobox" == classname) { childname = "choice"; }
+		else if ("tabbedpane" == classname) { childname = "tab"; childname2 = "component"; }
+		else if ("list" == classname) { childname = "item"; }
+		else if ("table" == classname) { childname = "column"; childname2 = "row"; }
+		else if ("row" == classname) { childname = "cell"; }
+		else if (("tree" == classname) || ("node" == classname)) { childname = "node"; }
+		else if (("menubar" == classname) || ("menu" == classname)) { childname = "menu"; }
+		while (childname != null) {
+			for (Object comp = get(component, childname);
+					comp != null; comp = get(comp, ":next")) {
+				Object found = find(comp, name);
+				if (found != null) { return found; }
+			}
+			childname = childname2; childname2 = null;
+		}
+		return null;
+	}
+
+	// ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
+
+	/*public String toXML(Object component) {
+		StringBuffer xml = new StringBuffer();
+		Object[] entry = (Object[]) component;
+		String classname = (String) entry[1];
+		while ((entry = (Object[]) entry[2]) != null) {
+			try {
+				Object[] definition = getDefinition(component, (String) entry[0], null);
+				if (definition != null) {
+					xml.append(" " + entry[0] + "=\"" + entry[1] + "\"");
+				}
+			} catch (IllegalArgumentException exc) {}
+		}
+		return xml.toString();
+	}*/
+
+	/**
+	 *
+	 */
+	public Object parse(String path) throws Exception {
+		InputStream inputstream = null;
+		try { //java
+			//midp inputstream = getClass().getResourceAsStream(path);
+			inputstream = getClass().getResourceAsStream(path); //java
+			//System.out.println("> " + path + " " + inputstream);
+		} catch (Throwable e) {} //java
+		//if (inputstream == null) { // applet code
+		//	inputstream = new URL(getCodeBase(), path).openStream();
+		//}
+		return parse(inputstream); //, Object handler
+	}
+
+	/**
+	 *
+	 */
+	public Object parse(InputStream inputstream) throws Exception {
+		return parse(inputstream, true);
+	}
+
+	/**
+	 *
+	 */
+	protected void parseXML(InputStream inputstream) throws Exception {
+		parse(inputstream, false);
+	}
+
+	/**
+	 *
+	 */
+	protected void startElement(String name, Hashtable attributelist) {}
+
+	/**
+	 *
+	 */
+	protected void characters(String text) {}
+
+	/**
+	 *
+	 */
+	protected void endElement() {}
+
+	/**
+	 *
+	 */
+	private Object parse(InputStream inputstream, boolean validate) throws Exception {
+		BufferedReader reader = new BufferedReader(new InputStreamReader(inputstream)); //java
+		//midp InputStreamReader reader = new InputStreamReader(inputstream);
+		Object[] parentlist = null;
+		Object current = null;
+		Hashtable attributelist = null;
+		StringBuffer text = new StringBuffer();
+		for (int c = reader.read(); c != -1;) {
+			if (c == '<') {
+				if ((c = reader.read()) == '/') { //endtag
+					if (text.length() > 0) {
+						if (text.charAt(text.length() - 1) == ' ') {
+							text.setLength(text.length() - 1);
+						}
+						if (!validate) {
+							characters(text.toString());
+						}// else {
+							//addContent(current, text.toString());
+						//}
+						text.setLength(0);
+					}
+					String tagname = (String) parentlist[2]; //getClass(current);
+					for (int i = 0; i < tagname.length(); i++) { // current-tag
+						if ((c = reader.read()) != tagname.charAt(i)) {
+							throw new IllegalArgumentException(tagname);
+						}
+					}
+					while (" \t\n\r".indexOf(c = reader.read()) != -1); // whitespace
+					if (c != '>') throw new IllegalArgumentException(); // '>'
+					c = reader.read();
+					if (!validate) { endElement(); }
+					if (parentlist[0] == null) {
+						reader.close();
+						return current;
+					}
+					current = parentlist[0];
+					parentlist = (Object[]) parentlist[1];
+				}
+				else { //start or standalone tag
+					boolean instruction = (c == '?'); // Processing Instructions
+					if (c == '!') { while ((c = reader.read()) != '>'); continue; } // DOCTYPE
+					if (instruction) { c = reader.read(); }
+					text.setLength(0);
+					boolean iscomment = false;
+					while (">/ \t\n\r".indexOf(c) == -1) {
+						text.append((char) c);
+						if ((text.length() == 3) && (text.charAt(0) == '!') &&
+								(text.charAt(1) == '-') && (text.charAt(2) == '-')) {
+							int m = 0;
+							while (true) {
+								c = reader.read();
+								if (c == '-') { m++; }
+								else if ((c == '>') && (m >= 2)) { break; }
+								else { m = 0; }
+							}
+							iscomment = true;
+						}
+						c = reader.read();
+					}
+					if (iscomment) { continue; }
+					if (!instruction) {
+						String tagname = text.toString();
+						parentlist = new Object[] { current, parentlist, tagname };
+						if (validate) {
+							current = (current != null) ?
+								addElement(current, tagname) : create(tagname);
+						} else {
+							current = tagname;
+						}
+					}
+					text.setLength(0);
+					while (true) {
+						boolean whitespace = false;
+						while (" \t\n\r".indexOf(c) != -1) {
+							c = reader.read();
+							whitespace = true;
+						}
+						if (c == '>') {
+							if (instruction) throw new IllegalArgumentException(); // '?>'
+							if (!validate) {
+								startElement((String) current, attributelist); attributelist = null;
+							}
+							c = reader.read();
+							break;
+						}
+						else if (c == '/') {
+							if (instruction) throw new IllegalArgumentException(); // '?>'
+							if ((c = reader.read()) != '>') {
+								throw new IllegalArgumentException(); // '>'
+							}
+							if (!validate) {
+								startElement((String) current, attributelist); attributelist = null;
+								endElement();
+							}
+							if (parentlist[0] == null) {
+								reader.close();
+								return current;
+							}
+							current = parentlist[0];
+							parentlist = (Object[]) parentlist[1];
+							c = reader.read();
+							break;
+						}
+						else if (instruction && (c == '?')) {
+							if ((c = reader.read()) != '>') {
+								throw new IllegalArgumentException(); // '>'
+							}
+							c = reader.read();
+							break;
+						}
+						else if (whitespace) {
+							while ("= \t\n\r".indexOf(c) == -1) {
+								text.append((char) c);
+								c = reader.read();
+							}
+							String key = text.toString();
+							text.setLength(0);
+							while (" \t\n\r".indexOf(c) != -1) c = reader.read();
+							if (c != '=') throw new IllegalArgumentException();
+							while (" \t\n\r".indexOf(c = reader.read()) != -1);
+							char quote = (char) c;
+							if ((c != '\"') && (c != '\'')) throw new IllegalArgumentException();
+							while (quote != (c = reader.read())) {
+								if (c == '&') {
+									StringBuffer eb = new StringBuffer();
+									while (';' != (c = reader.read())) { eb.append((char) c); }
+									String entity = eb.toString();
+									if ("lt".equals(entity)) { text.append('<'); }
+									else if ("gt".equals(entity)) { text.append('>'); }
+									else if ("amp".equals(entity)) { text.append('&'); }
+									else if ("quot".equals(entity)) { text.append('"'); }
+									else if ("apos".equals(entity)) { text.append('\''); }
+									else if (entity.startsWith("#")) {
+										text.append((char) Integer.parseInt(entity.substring(1)));
+									}
+									else throw new IllegalArgumentException("unknown " + "entity " + entity);
+								}
+								else text.append((char) c);
+							}
+							if (!instruction) {
+								if (validate) {
+									addAttribute(current, key, text.toString());
+								} else {
+									if (attributelist == null) { attributelist = new Hashtable(); }
+									attributelist.put(key, text.toString());
+								}
+							}
+							text.setLength(0);
+							c = reader.read();
+						}
+						else throw new IllegalArgumentException();
+					}
+				}
+			}
+			else {
+				if (" \t\n\r".indexOf(c) != -1) {
+					if ((text.length() > 0) && (text.charAt(text.length() - 1) != ' ')) {
+						text.append(' ');
+					}
+				}
+				else {
+					text.append((char) c);
+				}
+				c = reader.read();
+			}
+		}
+		throw new IllegalArgumentException();
+	}
+
+	/**
+	 * Convert entities.
+	 */
+	private static String convert(StringBuffer text) {
+		return null;
+	}
+
+	/*private InputStream inputreader;
+	private byte[] data;
+	private int inputfrom = 0, inputto = 0;
+	private int read() throws Exception {
+		if (data == null) { data = new byte[1024]; }
+		if (inputfrom >= inputto) {
+			inputfrom = 0;
+			inputto = inputreader.read(data);
+		}
+		inputfrom++;
+		return data[inputfrom - 1];
+	}*/
+
+	/**
+	 *
+	 */
+	private void addImpl(Object parent, Object component, int index) {
+		String parentclass = getClass(parent);
+		String classname = getClass(component);
+		//System.out.println("add " + classname + " -> " + parentclass);
+		if ((("combobox" == parentclass) && ("choice" == classname)) ||
+					(("tabbedpane" == parentclass) && ("tab" == classname)) ||
+					(("list" == parentclass) && ("item" == classname)) ||
+					(("table" == parentclass) && (("column" == classname) || ("row" == classname))) ||
+					(("row" == parentclass) && ("cell" == classname)) ||
+					((("tree" == parentclass) || ("node" == parentclass)) && ("node" == classname)) ||
+					(("menubar" == parentclass) && ("menu" == classname))) {
+				classname = classname; // compiler bug
+		}
+		else if (("menu" == parentclass) && (("menu" == classname) || ("menuitem" == classname) ||
+				("checkboxmenuitem" == classname) || ("separator" == classname))) {
+			classname = "menu";
+		}
+		else if (("panel" == parentclass) || ("desktop" == parentclass) ||
+				("splitpane" == parentclass) || ("dialog" == parentclass) ||
+				("tabbedpane" == parentclass)) {
+			while ("component" != classname) {
+				String extendclass = null;
+				for (int i = 0; i < dtd.length; i += 3) {
+					if (classname == dtd[i]) {
+						extendclass = (String) dtd[i + 1]; break;
+					}
+				}
+				if (extendclass == null) throw new IllegalArgumentException(classname + " not component");
+				classname = extendclass;
+			}
+		}
+		else throw new IllegalArgumentException(classname + " add " + parentclass);
+		insertItem(parent, (String) classname, component, index);
+		set(component, ":parent", parent);
+		//if (parent == content) System.out.println(getClass(parent) + ".add(" + getClass(component) + ") : " + classname);
+	}
+
+	/**
+	 *
+	 */
+	private Object addElement(Object parent, String name) {
+		//System.out.println("create '" + name + "'");
+		Object component = create(name);
+		addImpl(parent, component, -1);
+		return component;
+	}
+
+	/**
+	 *
+	 */
+	private void addAttribute(Object component, String key, String value) {
+		//System.out.println("attribute '" + key + "'='" + value + "'");
+		Object[] definition = getDefinition(component, key, null);
+		key = (String) definition[1];
+		if ("string" == definition[0]) {
+			setString(component, key, value, (String) definition[3]);
+		}
+		else if ("choice" == definition[0]) {
+			String[] values = (String[]) definition[3];
+			setChoice(component, key, value, values, values[0]);
+		}
+		else if ("boolean" == definition[0]) {
+			if ("true".equals(value)) {
+				if (definition[3] == Boolean.FALSE) {
+					set(component, key, Boolean.TRUE);
+			 	}
+			}
+			else if ("false".equals(value)) {
+				if (definition[3] == Boolean.TRUE) {
+					set(component, key, Boolean.FALSE);
+			 	}
+			}
+			else throw new IllegalArgumentException(value);
+		}
+		else if ("integer" == definition[0]) {
+			set(component, key, Integer.valueOf(value));
+		}
+		else if ("icon" == definition[0]) {
+			set<error descr="'set(java.lang.Object, java.lang.Object, java.lang.Object)' in 'Thinlet' cannot be applied to '(java.lang.Object, java.lang.String, Image)'">(component, key, getIcon(value))</error>;
+		}
+		else if ("method" == definition[0]) {
+			try { //java
+				set<error descr="'set(java.lang.Object, java.lang.Object, java.lang.Object)' in 'Thinlet' cannot be applied to '(java.lang.Object, java.lang.String, java.lang.reflect.Method)'">(component, key, getClass().getMethod(value, null))</error>; //java
+			} catch (Exception exc) { System.err.println(value); exc.printStackTrace(); } //java
+			//midp setMethod(component, key, value);
+		}
+		//java>
+		else if ("bean" == definition[0]) {
+			try {
+				set(component, key, (Component) Class.forName(value).newInstance());
+			} catch (Exception exc) { System.err.println(value); exc.printStackTrace(); }
+		}
+		//<java
+		else throw new IllegalArgumentException((String) definition[0]);
+	}
+
+	/**
+	 *
+	 */
+	private Object[] getDefinition(Object component, String key, String type) {
+		Object classname = getClass(component);
+		Object currentname = classname;
+		while (classname != null) {
+			for (int i = 0; i < dtd.length; i += 3) {
+				if (dtd[i] == classname) {
+					Object[][] attributes = (Object[][]) dtd[i + 2];
+					for (int j = 0; j < attributes.length; j++) {
+						if (attributes[j][1].equals(key)) {
+							if ((type != null) && (type != attributes[j][0])) {
+								throw new IllegalArgumentException(attributes[j][0].toString());
+							}
+							return attributes[j];
+						}
+					}
+					classname = dtd[i + 1];
+					break;
+				}
+			}
+		}
+		throw new IllegalArgumentException("unknown " + key + " " + type +
+			" for " + currentname);
+	}
+
+	/**
+	 *
+	 */
+	//private void addContent(Object component, String content) {
+		//set(component, "content", content);
+	//}
+
+	// ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
+
+	/**
+	 *
+	 */
+	public void setString(Object component, String key, String value) {
+		Object[] definition = getDefinition(component, key, "string");
+		if (setString(component, (String) definition[1],
+				value, (String) definition[3])) {
+			update(component, definition[2]);
+		}
+	}
+
+	/**
+	 *
+	 */
+	public String getString(Object component, String key) {
+		Object[] definition = getDefinition(component, key, "string");
+		return getString(component, (String) definition[1],
+			(String) definition[3]);
+	}
+
+	/**
+	 *
+	 */
+	public void setChoice(Object component, String key, String value) {
+		Object[] definition = getDefinition(component, key, "choice");
+		String[] values = (String[]) definition[3];
+		if (setChoice(component, (String) definition[1],
+				value, values, values[0])) {
+			update(component, definition[2]);
+		}
+	}
+
+	/**
+	 *
+	 */
+	public String getChoice(Object component, String key) {
+		Object[] definition = getDefinition(component, key, "choice");
+		return getString(component, (String) definition[1],
+			((String[]) definition[3])[0]);
+	}
+
+	/**
+	 *
+	 */
+	public void setBoolean(Object component, String key, boolean value) {
+		Object[] definition = getDefinition(component, key, "boolean");
+		if (setBoolean(component, (String) definition[1],
+				value, (definition[3] == Boolean.TRUE))) {
+			update(component, definition[2]);
+		}
+	}
+
+	/**
+	 *
+	 */
+	public boolean getBoolean(Object component, String key) {
+		Object[] definition = getDefinition(component, key, "boolean");
+		return getBoolean(component, (String) definition[1],
+			(definition[3] == Boolean.TRUE));
+	}
+
+	/**
+	 *
+	 */
+	public void setInteger(Object component, String key, int value) {
+		Object[] definition = getDefinition(component, key, "integer");
+		if (setInteger(component, (String) definition[1],
+				value, ((Integer) definition[3]).intValue())) {
+			update(component, definition[2]);
+		}
+	}
+
+	/**
+	 *
+	 */
+	public int getInteger(Object component, String key) {
+		Object[] definition = getDefinition(component, key, "integer");
+		return getInteger(component, (String) definition[1],
+			((Integer) definition[3]).intValue());
+	}
+
+	/**
+	 *
+	 */
+	public void setIcon(Object component, String key, <error descr="Cannot resolve symbol 'Image'">Image</error> icon) {
+		Object[] definition = getDefinition(component, key, "icon");
+		if (set<error descr="'set(java.lang.Object, java.lang.Object, java.lang.Object)' in 'Thinlet' cannot be applied to '(java.lang.Object, java.lang.String, Image)'">(component, (String) definition[1], icon)</error>) {
+			update(component, definition[2]);
+		}
+	}
+
+	/**
+	 *
+	 */
+	public <error descr="Cannot resolve symbol 'Image'">Image</error> getIcon(Object component, String key) {
+		Object[] definition = getDefinition(component, key, "icon");
+		return getIcon(component, (String) definition[1], (<error descr="Cannot resolve symbol 'Image'">Image</error>) definition[3]);
+	}
+
+	/**
+	 *
+	 */
+	public void setMethod(Object component, String key, <error descr="Cannot resolve symbol 'Method'">Method</error> method) { //java
+	//midp public void setMethod(Object component, String key, String method) {
+		Object[] definition = getDefinition(component, key, "method");
+		if (set<error descr="'set(java.lang.Object, java.lang.Object, java.lang.Object)' in 'Thinlet' cannot be applied to '(java.lang.Object, java.lang.String, Method)'">(component, (String) definition[1], method)</error>) {
+			update(component, definition[2]);
+		}
+	}
+
+	/**
+	 *
+	 */
+	public <error descr="Cannot resolve symbol 'Method'">Method</error> getMethod(Object component, String key) { //java
+	//midp public String getMethod(Object component, String key) {
+		Object[] definition = getDefinition(component, key, "method");
+		return (<error descr="Cannot resolve symbol 'Method'">Method</error>) get(component, (String) definition[1]); //java
+		//midp return (String) get(component, (String) definition[1]);
+	}
+
+	/**
+	 *
+	 */
+	private void update(Object component, Object mode) {
+		if ("parent" == mode) {
+			component = getParent(component);
+			mode = "validate";
+		}
+		boolean firstpaint = true;
+		int x = 0; int y = 0; int width = 0; int height = 0;
+		while (component != null) {
+			if (!getBoolean(component, "visible", true)) { break; }
+			if ("paint" == mode) {//|| (firstpaint && (component == content))
+				<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> bounds = getRectangle(component, "bounds");
+				if (bounds == null) { return; }
+				if (firstpaint) {
+					x = bounds.<error descr="Cannot resolve symbol 'x'">x</error>; y = bounds.<error descr="Cannot resolve symbol 'y'">y</error>;
+					width = Math.abs<error descr="Cannot resolve method 'abs(?)'">(bounds.<error descr="Cannot resolve symbol 'width'">width</error>)</error>; height = bounds.<error descr="Cannot resolve symbol 'height'">height</error>;
+					firstpaint = false;
+				} else {
+					x += bounds.<error descr="Cannot resolve symbol 'x'">x</error>; y += bounds.<error descr="Cannot resolve symbol 'y'">y</error>;
+				}
+				if (component == content) {
+					repaint(x, y, width, height);
+				}
+			}
+			Object parent = getParent(component);
+			String classname = getClass(parent);
+			if ("combobox" == classname) {
+				parent = get(parent, "combolist");
+			}
+			else if ("menu" == classname) {
+				parent = get(parent, "popupmenu");
+			}
+			else if (("paint" == mode) && ("tabbedpane" == classname)) {
+				if (getItemImpl(parent, "component",
+						getInteger(parent, "selected", 0)) != component) { break; }
+			}
+			if (("layout" == mode) || (("validate" == mode) &&
+					(("list" == classname) || ("table" == classname) ||
+					("tree" == classname) || ("dialog" == classname) || (parent == content)))) {
+				<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> bounds = getRectangle(parent, "bounds");
+				if (bounds == null) { return; }
+				bounds.<error descr="Cannot resolve symbol 'width'">width</error> = -1 * Math.abs<error descr="Cannot resolve method 'abs(?)'">(bounds.<error descr="Cannot resolve symbol 'width'">width</error>)</error>;
+				mode = "paint";
+			}
+			component = parent;
+		}
+	}
+
+	// ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
+
+	/**
+	 *
+	 */
+	private boolean setString(Object component,
+			String key, String value, String defaultvalue) {
+		/*boolean changed = set(component, key, value);
+		if (changed && ("name" == key)) {
+			//for (Class cls = getClass(); cls != null; cls = cls.getSuperclass()) {
+			Field[] fields = getClass().getDeclaredFields();
+			for (int i = 0; i < fields.length; i++) {
+				if ((fields[i].getType() == Object.class) &&
+						fields[i].getName().equals(value)) {
+					try {
+						fields[i].set(this, component);
+						return true;
+					} catch (IllegalAccessException iae) {}
+				}
+			}
+			//}
+			try {
+				getClass().getField(value).set(this, component);
+			} catch (Exception exc) {}
+		}
+		return changed;*/
+		return set(component, key, value);
+	}
+
+	/**
+	 *
+	 */
+	private String getString(Object component,
+			String key, String defaultvalue) {
+		Object value = get(component, key);
+		return (value == null) ? defaultvalue : (String) value;
+	}
+
+	/**
+	 *
+	 */
+	private boolean setChoice(Object component,
+			String key, String value, String[] values, String defaultvalue) {
+		if (value == null) {
+			return set(component, key, defaultvalue);
+		}
+		for (int i = 0; i < values.length; i++) {
+			if (value.equals(values[i])) {
+				return set(component, key, values[i]);
+			}
+		}
+		throw new IllegalArgumentException("unknown " + value + " for " + key);
+	}
+
+	/**
+	 *
+	 */
+	private boolean setIcon(Object component,
+			String key, String path, <error descr="Cannot resolve symbol 'Image'">Image</error> defaultvalue) {
+		return set<error descr="'set(java.lang.Object, java.lang.Object, java.lang.Object)' in 'Thinlet' cannot be applied to '(java.lang.Object, java.lang.String, Image)'">(component, key, (path != null) ? getIcon(path) : defaultvalue)</error>;
+	}
+
+	/**
+	 *
+	 */
+	private <error descr="Cannot resolve symbol 'Image'">Image</error> getIcon(Object component, String key, <error descr="Cannot resolve symbol 'Image'">Image</error> defaultvalue) {
+		Object value = get(component, key);
+		return (value == null) ? defaultvalue : (<error descr="Cannot resolve symbol 'Image'">Image</error>) value;
+	}
+
+	/**
+	 *
+	 */
+	private boolean setBoolean(Object component,
+			String key, boolean value, boolean defaultvalue) {
+		return set(component, key, (value == defaultvalue) ? null :
+			(value ? Boolean.TRUE : Boolean.FALSE));
+	}
+
+	/**
+	 *
+	 */
+	private boolean getBoolean(Object component,
+			String key, boolean defaultvalue) {
+		Object value = get(component, key);
+		return (value == null) ? defaultvalue : ((Boolean) value).booleanValue();
+	}
+
+	/**
+	 *
+	 */
+	private boolean setInteger(Object component,
+			String key, int value, int defaultvalue) {
+		return set(component, key, (value == defaultvalue) ? null : new Integer(value));
+	}
+
+	/**
+	 *
+	 */
+	private int getInteger(Object component, String key, int defaultvalue) {
+		Object value = get(component, key);
+		return (value == null) ? defaultvalue : ((Integer) value).intValue();
+	}
+
+	/**
+	 *
+	 */
+	private void setRectangle(Object component,
+			String key, int x, int y, int width, int height) {
+		<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> rectangle = getRectangle(component, key);
+		if (rectangle != null) {
+			rectangle.<error descr="Cannot resolve symbol 'x'">x</error> = x; rectangle.<error descr="Cannot resolve symbol 'y'">y</error> = y;
+			rectangle.<error descr="Cannot resolve symbol 'width'">width</error> = width; rectangle.<error descr="Cannot resolve symbol 'height'">height</error> = height;
+		}
+		else {
+			set(component, key, new <error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error>(x, y, width, height)); //java
+			//midp set(component, key, new int[] { width, height, x, y });
+		}
+	}
+
+	/**
+	 *
+	 */
+	private <error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error> getRectangle(Object component, String key) {
+		return (<error descr="Cannot resolve symbol 'Rectangle'">Rectangle</error>) get(component, key); //java
+		//midp return (int[]) get(component, key);
+	}
+
+	// ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
+
+	/**
+	 *
+	 */
+	public <error descr="Cannot resolve symbol 'Image'">Image</error> getIcon(String path) {
+		return getIcon(path, true);
+	}
+
+	/**
+	 *
+	 */
+	public <error descr="Cannot resolve symbol 'Image'">Image</error> getIcon(String path, boolean preload) {
+		if ((path == null) || (path.length() == 0)) {
+			return null;
+		}
+		<error descr="Cannot resolve symbol 'Image'">Image</error> image = null; //(Image) imagepool.get(path);
+		//midp try {
+		//midp 	image = Image.createImage(path);
+		//midp } catch (IOException ioe) {}
+		//java>
+		try {
+			image = <error descr="Cannot resolve symbol 'Toolkit'">Toolkit</error>.getDefaultToolkit().getImage(getClass().getResource(path));
+			//image = Toolkit.getDefaultToolkit().getImage(ClassLoader.getSystemResource(path));
+		} catch (Throwable e) {}
+		if (image == null) {
+			try {
+				InputStream is = getClass().getResourceAsStream(path);
+				//InputStream is = ClassLoader.getSystemResourceAsStream(path);
+				if (is != null) {
+					byte[] data = new byte[is.available()];
+					is.read(data, 0, data.length);
+					image = getToolkit().<error descr="Cannot resolve method 'createImage(byte[])'">createImage</error>(data);
+					is.close();
+				}
+			} catch (Throwable e) {}
+		}
+		//if (image == null) { // applet code
+		//	try {
+		//		image = getImage(getCodeBase(), path);
+		//	} catch (Throwable e) {}
+		//}
+		if (preload && (image != null)) {
+			<error descr="Cannot resolve symbol 'MediaTracker'">MediaTracker</error> mediatracker = new <error descr="Cannot resolve symbol 'MediaTracker'">MediaTracker</error>(this);
+			mediatracker.<error descr="Cannot resolve method 'addImage(Image, int)'">addImage</error>(image, 1);
+			try {
+				mediatracker.<error descr="Cannot resolve method 'waitForID(int, int)'">waitForID</error>(1, 50);
+			} catch (<error descr="Cannot resolve symbol 'InterruptedException'">InterruptedException</error> ie) { }
+			//imagepool.put(path, image);
+		}
+		//<java
+		return image;
+	}
+
+	/**
+	 *
+	 */
+	public boolean destroy() {
+		return true;
+	}
+
+	private static Object[] dtd;
+	static {
+		Integer integer_1 = new Integer(-1);
+		Integer integer0 = new Integer(0);
+		Integer integer1 = new Integer(1);
+		String[] orientation = { "horizontal", "vertical" };
+		String[] leftcenterright = { "left", "center", "right" };
+		String[] selections = { "single", "interval", "multiple" };
+		dtd = new Object[] {
+			"component", null, new Object[][] {
+				{ "string", "name", "", null },
+				{ "boolean", "enabled", "paint", Boolean.TRUE },
+				{ "boolean", "visible", "parent", Boolean.TRUE },
+				{ "string", "tooltip", "", null },
+				{ "integer", "width", "validate", integer0 },
+				{ "integer", "height", "validate", integer0 },
+				{ "integer", "colspan", "validate", integer1 },
+				{ "integer", "rowspan", "validate", integer1 },
+				{ "integer", "weightx", "validate", integer0 },
+				{ "integer", "weighty", "validate", integer0 },
+				{ "choice", "halign", "validate",
+					new String[] { "fill", "center", "left", "right" } },
+				{ "choice", "valign", "validate",
+					new String[] { "fill", "center", "top", "bottom" } }
+				// component class String null*
+				// parent Object null
+				// (bounds) Rectangle 0 0 0 0
+			},
+			"label", "component", new Object[][] {
+				{ "string", "text", "validate", null },
+				{ "icon", "icon", "validate", null },
+			 	{ "choice", "alignment", "validate", leftcenterright },
+			 	{ "integer", "mnemonic", "paint", integer_1 } },
+			"button", "label", new Object[][] {
+			 	{ "choice", "alignment", "validate", new String[] { "center", "left", "right" } },
+				{ "method", "action", "", null },
+				//{ "choice", "type", "", new String[] { "normal", "default", "cancel" } }
+				},//...
+			"checkbox", "label", new Object[][] {
+				{ "boolean", "selected", "paint", Boolean.FALSE }, //...group
+				{ "string", "group", "paint", null }, //...group
+				{ "method", "action", "", null } },
+			"combobox", "textfield", new Object[][] {
+				{ "icon", "icon", "validate", null },
+				{ "integer", "selected", "layout", integer_1 } },
+			"choice", null, new Object[][] {
+				{ "string", "name", "", null },
+				{ "boolean", "enabled", "paint", Boolean.TRUE },
+				{ "string", "text", "", null },
+				{ "icon", "icon", "", null },
+				{ "choice", "alignment", "", leftcenterright },
+				{ "string", "tooltip", "", null } },
+			"textfield", "component", new Object[][] {
+				{ "string", "text", "layout", "" },
+				{ "integer", "columns", "validate", integer0 },
+				{ "boolean", "editable", "paint", Boolean.TRUE },
+				{ "integer", "start", "layout", integer0 },
+				{ "integer", "end", "layout", integer0 },
+				{ "method", "action", "", null } },
+			"passwordfield", "textfield", new Object[][] {},
+			"textarea", "textfield", new Object[][] {
+				{ "integer", "rows", "validate", integer0 },
+				{ "boolean", "wrap", "layout", Boolean.FALSE } },
+			"tabbedpane", "component", new Object[][] {
+				{ "choice", "placement", "validate",
+					new String[] { "top", "left", "bottom", "right" } },
+				{ "integer", "selected", "paint", integer0 },
+				{ "method", "action", "", null } }, //...focus
+			"tab", "choice", new Object[][] {
+				{ "integer", "mnemonic", "paint", integer_1 } },
+			"panel", "component", new Object[][] {
+				{ "integer", "columns", "validate", integer0 },
+				{ "integer", "top", "validate", integer0 },
+				{ "integer", "left", "validate", integer0 },
+				{ "integer", "bottom", "validate", integer0 },
+				{ "integer", "right", "validate", integer0 },
+				{ "integer", "gap", "validate", integer0 } },
+			"desktop", "component", new Object[][] {},
+			"dialog", "panel", new Object[][] {
+				{ "string", "text", "", null },
+				{ "icon", "icon", "", null },
+				{ "boolean", "modal", "", Boolean.FALSE } },
+			"spinbox", "textfield", new Object[][] {}, //...
+			"progressbar", "component", new Object[][] {
+				{ "choice", "orientation", "validate", orientation },
+				{ "integer", "minimum", "paint", integer0 }, //...checkvalue
+				{ "integer", "maximum", "paint", new Integer(100) },
+				{ "integer", "value", "paint", integer0 } },
+				// change stringpainted
+			"slider", "progressbar", new Object[][] {
+				{ "integer", "unit", "", new Integer(5) },
+				{ "integer", "block", "", new Integer(25) },
+				{ "method", "action", "", null } },
+				// minor/majortickspacing
+				// inverted
+				// labelincrement labelstart
+			"splitpane", "component", new Object[][] {
+				{ "choice", "orientation", "validate", orientation },
+				{ "integer", "divider", "layout", integer_1 } },
+			"list", "component", new Object[][] {
+				{ "choice", "selection", "paint", selections },
+				{ "method", "action", "", null } }, //...?
+			"item", "choice", new Object[][] {
+				{ "boolean", "selected", "", Boolean.FALSE } },
+			"table", "component", new Object[][] {
+				{ "choice", "selection", "paint", selections },
+				{ "method", "action", "", null }
+				/*{ "choice", "selection",
+					new String[] { "singlerow", "rowinterval", "multiplerow",
+						"cell", "cellinterval",
+						"singlecolumn", "columninterval", "multiplecolumn" } }*/ },
+			"column", "choice", new Object[][] {
+				{ "integer", "width", "", new Integer(80) }},
+			"row", null, new Object[][] {
+				{ "boolean", "selected", "", Boolean.FALSE } },
+			"cell", "choice", new Object[][] {},
+			"tree", "component", new Object[][] {
+				{ "choice", "selection", "paint", selections },
+				{ "method", "action", "", null },
+				{ "method", "expand", "", null },
+				{ "method", "collapse", "", null } },
+			"node", "choice", new Object[][] {
+				{ "boolean", "selected", "", Boolean.FALSE },
+				{ "boolean", "expanded", "", Boolean.TRUE } },
+			"separator", "component", new Object[][] {},
+			"menubar", "component", new Object[][] {},
+			"menu", "choice", new Object[][] {
+				{ "integer", "mnemonic", "paint", integer_1 } },
+			"menuitem", "choice", new Object[][] {
+				{ "string", "accelerator", "", null },
+				{ "method", "action", "", null },
+				{ "integer", "mnemonic", "paint", integer_1 }
+				//... KeyStroke=keyCode+modifiers(SHIFT CTRL META ALT_MASK)
+			},
+			"checkboxmenuitem", "menuitem", new Object[][] {
+				{ "boolean", "selected", "paint", Boolean.FALSE }, //...group
+				{ "string", "group", "paint", null } }, //...group
+			"bean", "component", new Object[][] {
+				{ "bean", "bean", "", null }
+			}
+		};
+	}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/accessLevel/effectiveAccess/p2/p2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/accessLevel/effectiveAccess/p2/p2.java
new file mode 100644
index 0000000..5bf1113
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/accessLevel/effectiveAccess/p2/p2.java
@@ -0,0 +1,15 @@
+package effectiveAccess.p2;
+
+import effectiveAccess.ppp;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: cdr
+ * Date: Jan 24, 2003
+ * Time: 3:13:49 PM
+ * To change this template use Options | File Templates.
+ */
+public class p2 extends ppp {
+  protected void f() {
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/accessLevel/effectiveAccess/p2/p3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/accessLevel/effectiveAccess/p2/p3.java
new file mode 100644
index 0000000..5b74249
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/accessLevel/effectiveAccess/p2/p3.java
@@ -0,0 +1,17 @@
+package effectiveAccess.p2;
+
+public class p3 extends p2 {
+}
+
+<error descr="Class 'p4' must either be declared abstract or implement abstract method 'f()' in 'pp'">class p4 extends effectiveAccess.pp</error> {
+  public void f() {}
+}
+
+class pderived extends p2 {
+  protected void f() {
+    super.f();
+  }
+  protected void v() {
+    super.v();
+  }
+} 
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/accessLevel/effectiveAccess/pp.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/accessLevel/effectiveAccess/pp.java
new file mode 100644
index 0000000..76072f2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/accessLevel/effectiveAccess/pp.java
@@ -0,0 +1,12 @@
+package effectiveAccess;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: cdr
+ * Date: Jan 24, 2003
+ * Time: 3:12:09 PM
+ * To change this template use Options | File Templates.
+ */
+public abstract class pp {
+  abstract void f();
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/accessLevel/effectiveAccess/ppp.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/accessLevel/effectiveAccess/ppp.java
new file mode 100644
index 0000000..6c93e76
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/accessLevel/effectiveAccess/ppp.java
@@ -0,0 +1,13 @@
+package effectiveAccess;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: cdr
+ * Date: Jan 24, 2003
+ * Time: 3:13:09 PM
+ * To change this template use Options | File Templates.
+ */
+public abstract class ppp extends pp {
+  abstract protected void f();
+  protected void v() {}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/accessibleMember/com/blue/Base.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/accessibleMember/com/blue/Base.java
new file mode 100644
index 0000000..3b9b467
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/accessibleMember/com/blue/Base.java
@@ -0,0 +1,5 @@
+package com.blue;
+
+public class Base {
+  public void foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/accessibleMember/com/blue/BaseComponent.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/accessibleMember/com/blue/BaseComponent.java
new file mode 100644
index 0000000..1f5da16
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/accessibleMember/com/blue/BaseComponent.java
@@ -0,0 +1,8 @@
+package com.blue;
+
+public class BaseComponent {
+
+    protected class Header extends Base {
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/accessibleMember/com/red/B.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/accessibleMember/com/red/B.java
new file mode 100644
index 0000000..d8d6431
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/accessibleMember/com/red/B.java
@@ -0,0 +1,11 @@
+package com.red;
+
+import com.blue.BaseComponent;
+
+public class B extends BaseComponent {
+
+    public Header getHeader() {
+        return null;
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/accessibleMember/com/red/C.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/accessibleMember/com/red/C.java
new file mode 100644
index 0000000..8962df8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/accessibleMember/com/red/C.java
@@ -0,0 +1,7 @@
+package com.red;
+
+public class C extends B {
+    protected void add(B nodeGrid) {
+        nodeGrid.getHeader().foo(); // no error here since we are checking getHeader() method accessibility rather than Header class
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/alreadyImportedClass/pack/AlreadyImportedClass.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/alreadyImportedClass/pack/AlreadyImportedClass.java
new file mode 100644
index 0000000..8e3b2fd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/alreadyImportedClass/pack/AlreadyImportedClass.java
@@ -0,0 +1,12 @@
+package pack;
+
+import java.util.Date;
+import pack.my;
+
+class <error descr="'Date' is already defined in this compilation unit">Date</error> {
+}
+
+class my {
+  class Date extends java.util.Date {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/arrayLength/p/Test.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/arrayLength/p/Test.java
new file mode 100644
index 0000000..a64cc39
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/arrayLength/p/Test.java
@@ -0,0 +1,6 @@
+package p;
+public class Test {
+    protected class Inner {}
+
+    protected Inner[] strings = new Inner[10];
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/arrayLength/p2/SubTest.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/arrayLength/p2/SubTest.java
new file mode 100644
index 0000000..0b7f010
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/arrayLength/p2/SubTest.java
@@ -0,0 +1,10 @@
+package p2;
+
+import p.Test;
+
+public class SubTest extends Test {
+void foo() {
+System.out.println(strings.length);
+// "Cannot access 'length' in '_Dummy_.__Array__'" warning here
+}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/duplicateClass/A.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/duplicateClass/A.java
new file mode 100644
index 0000000..cc6a9da
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/duplicateClass/A.java
@@ -0,0 +1,6 @@
+package duplicateClass;
+
+// actual error text depends on temporary dir location
+
+<error>class Foo</error> {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/duplicateClass/B.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/duplicateClass/B.java
new file mode 100644
index 0000000..dd59600
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/duplicateClass/B.java
@@ -0,0 +1,4 @@
+package duplicateClass;
+
+class Foo {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/duplicateClass/java/lang/Runnable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/duplicateClass/java/lang/Runnable.java
new file mode 100644
index 0000000..2348b17
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/duplicateClass/java/lang/Runnable.java
@@ -0,0 +1,7 @@
+
+// should not contend with Runnable from rt.jar
+
+package java.lang;
+
+public class Runnable {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/foreignPackageInBetween/a/A1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/foreignPackageInBetween/a/A1.java
new file mode 100644
index 0000000..2c5819e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/foreignPackageInBetween/a/A1.java
@@ -0,0 +1,11 @@
+package a;
+
+import b.B;
+
+class A1 {
+
+  {
+    new B().<error descr="'f()' is not public in 'a.A2'. Cannot be accessed from outside package">f</error>();
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/foreignPackageInBetween/a/A2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/foreignPackageInBetween/a/A2.java
new file mode 100644
index 0000000..1f41e78
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/foreignPackageInBetween/a/A2.java
@@ -0,0 +1,8 @@
+package a;
+
+public class A2 {
+
+  void f() {
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/foreignPackageInBetween/b/B.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/foreignPackageInBetween/b/B.java
new file mode 100644
index 0000000..2899e95
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/foreignPackageInBetween/b/B.java
@@ -0,0 +1,7 @@
+package b;
+
+import a.A2;
+
+public class B extends A2 {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importDefaultPackage/Test.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importDefaultPackage/Test.java
new file mode 100644
index 0000000..64f17b3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importDefaultPackage/Test.java
@@ -0,0 +1,4 @@
+public class Test {
+  public Test(int i) {
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importDefaultPackage/x/ImportOnDemandUsage.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importDefaultPackage/x/ImportOnDemandUsage.java
new file mode 100644
index 0000000..0e26951
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importDefaultPackage/x/ImportOnDemandUsage.java
@@ -0,0 +1,7 @@
+package x;
+
+import x.n.*;
+
+class Foos2 {
+  Test t = new Test();
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importDefaultPackage/x/InvalidUse.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importDefaultPackage/x/InvalidUse.java
new file mode 100644
index 0000000..f020259
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importDefaultPackage/x/InvalidUse.java
@@ -0,0 +1,5 @@
+package x;
+
+class InvalidUse {
+  <error descr="Cannot resolve symbol 'Test'">Test</error> t = null;
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importDefaultPackage/x/Usage.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importDefaultPackage/x/Usage.java
new file mode 100644
index 0000000..cff269b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importDefaultPackage/x/Usage.java
@@ -0,0 +1,7 @@
+package x;
+
+import x.n.Test;
+
+class Foos {
+  Test t = new Test();
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importDefaultPackage/x/n/Test.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importDefaultPackage/x/n/Test.java
new file mode 100644
index 0000000..900fe59
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importDefaultPackage/x/n/Test.java
@@ -0,0 +1,2 @@
+package x.n;
+public class Test {}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importOnDemand/x1/X1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importOnDemand/x1/X1.java
new file mode 100644
index 0000000..d36f1fc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importOnDemand/x1/X1.java
@@ -0,0 +1,2 @@
+package x1;
+public class X1 {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importOnDemand/x2/X1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importOnDemand/x2/X1.java
new file mode 100644
index 0000000..cfafcb9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importOnDemand/x2/X1.java
@@ -0,0 +1,2 @@
+package x2;
+public class X1 {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importOnDemand/y/Y.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importOnDemand/y/Y.java
new file mode 100644
index 0000000..a58ad6e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importOnDemand/y/Y.java
@@ -0,0 +1,6 @@
+import x1.*;
+import x2.*;
+
+class Y {
+  <error descr="Reference to 'X1' is ambiguous, both 'x1.X1' and 'x2.X1' match">X1</error> x1;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importOnDemandVsInherited/Test.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importOnDemandVsInherited/Test.java
new file mode 100644
index 0000000..41a0f2f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importOnDemandVsInherited/Test.java
@@ -0,0 +1,9 @@
+import p.Base.*;
+import p.BaseImpl;
+
+class Test extends BaseImpl {
+  void m() {
+    Inner inner = new Inner() { };  // imported public Base.Inner should shadow inherited package-private BaseImpl.Inner
+    BaseImpl.<error descr="'p.BaseImpl.Inner' is not public in 'p.BaseImpl'. Cannot be accessed from outside package">Inner</error> i2 = null;
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importOnDemandVsInherited/p/Base.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importOnDemandVsInherited/p/Base.java
new file mode 100644
index 0000000..8a139430
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importOnDemandVsInherited/p/Base.java
@@ -0,0 +1,5 @@
+package p;
+
+public interface Base {
+  interface Inner { }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importOnDemandVsInherited/p/BaseImpl.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importOnDemandVsInherited/p/BaseImpl.java
new file mode 100644
index 0000000..e89cea8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importOnDemandVsInherited/p/BaseImpl.java
@@ -0,0 +1,5 @@
+package p;
+
+public class BaseImpl implements Base {
+  static class Inner implements Inner { }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importOnDemandVsSingle/x1/Class.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importOnDemandVsSingle/x1/Class.java
new file mode 100644
index 0000000..ccd1d9b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importOnDemandVsSingle/x1/Class.java
@@ -0,0 +1,2 @@
+package x1;
+public class Class{}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importOnDemandVsSingle/y/Y.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importOnDemandVsSingle/y/Y.java
new file mode 100644
index 0000000..6674d8a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importOnDemandVsSingle/y/Y.java
@@ -0,0 +1,6 @@
+import x1.*;
+import java.lang.Class;
+
+class Y {
+  Class aClass;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importSingleVsInherited/Test.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importSingleVsInherited/Test.java
new file mode 100644
index 0000000..8f2e652
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importSingleVsInherited/Test.java
@@ -0,0 +1,9 @@
+import p.Base.Inner;
+import p.BaseImpl;
+
+class Test extends BaseImpl {
+  void m() {
+    Inner inner = new Inner() { };  // imported public Base.Inner should shadow inherited package-private BaseImpl.Inner
+    BaseImpl.<error descr="'p.BaseImpl.Inner' is not public in 'p.BaseImpl'. Cannot be accessed from outside package">Inner</error> i2 = null;
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importSingleVsInherited/p/Base.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importSingleVsInherited/p/Base.java
new file mode 100644
index 0000000..8a139430
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importSingleVsInherited/p/Base.java
@@ -0,0 +1,5 @@
+package p;
+
+public interface Base {
+  interface Inner { }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importSingleVsInherited/p/BaseImpl.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importSingleVsInherited/p/BaseImpl.java
new file mode 100644
index 0000000..6cb487b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importSingleVsInherited/p/BaseImpl.java
@@ -0,0 +1,5 @@
+package p;
+
+public class BaseImpl implements Base {
+  static class Inner implements BaseImpl.Inner { }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importSingleVsSamePackage/x1/C.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importSingleVsSamePackage/x1/C.java
new file mode 100644
index 0000000..0dad652
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importSingleVsSamePackage/x1/C.java
@@ -0,0 +1,4 @@
+package x1;
+public class C {
+  public C(String s){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importSingleVsSamePackage/y/C.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importSingleVsSamePackage/y/C.java
new file mode 100644
index 0000000..dea2311
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importSingleVsSamePackage/y/C.java
@@ -0,0 +1,4 @@
+package y;
+public class C {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importSingleVsSamePackage/y/Y.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importSingleVsSamePackage/y/Y.java
new file mode 100644
index 0000000..9876703
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/importSingleVsSamePackage/y/Y.java
@@ -0,0 +1,6 @@
+package y;
+import x1.C;
+
+class Y {
+  C aClass = new C("");
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/multiJDKConflict/moduleJava4/com/Java4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/multiJDKConflict/moduleJava4/com/Java4.java
new file mode 100644
index 0000000..6e4c2d4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/multiJDKConflict/moduleJava4/com/Java4.java
@@ -0,0 +1,9 @@
+package com;
+
+import java.util.*;
+
+public class Java4 {
+    public List getList() {
+        return null;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/multiJDKConflict/moduleJava4/java4.iml b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/multiJDKConflict/moduleJava4/java4.iml
new file mode 100644
index 0000000..e2a1e75
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/multiJDKConflict/moduleJava4/java4.iml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module relativePaths="true" type="JAVA_MODULE" version="5">
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_4" inherit-compiler-output="false">
+    <output url="file://$MODULE_DIR$/classes" />
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$" isTestSource="false" />
+    </content>
+    <orderEntry type="jdk" jdkName="1.3" jdkType="JavaSDK" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntryProperties />
+  </component>
+</module>
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/multiJDKConflict/moduleJava5/com/Java5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/multiJDKConflict/moduleJava5/com/Java5.java
new file mode 100644
index 0000000..2b79a23
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/multiJDKConflict/moduleJava5/com/Java5.java
@@ -0,0 +1,12 @@
+package com;
+import java.util.List;
+
+public class Java5 {
+    void test(Java4 foo) {
+        List list = foo.getList();
+        for (Object o : list) {
+        }
+        for (Object o : foo.getList()) {
+        }
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/multiJDKConflict/moduleJava5/java5.iml b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/multiJDKConflict/moduleJava5/java5.iml
new file mode 100644
index 0000000..0479ef6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/multiJDKConflict/moduleJava5/java5.iml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module relativePaths="true" type="JAVA_MODULE" version="5">
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_5" inherit-compiler-output="false">
+    <output url="file://$MODULE_DIR$/classes" />
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$" isTestSource="false" />
+    </content>
+    <orderEntry type="jdk" jdkName="1.3" jdkType="JavaSDK" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module" module-name="java4" />
+
+    <orderEntryProperties />
+  </component>
+</module>
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/notAKeywords/Test.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/notAKeywords/Test.java
new file mode 100644
index 0000000..2423099
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/notAKeywords/Test.java
@@ -0,0 +1,9 @@
+import pkg.Bar;
+import pkg.enum.Foo;
+
+class Test {
+  void m() {
+    Bar b = new Bar();
+    b.doSomething(Foo.FOO);  // with language level JDK 1.4 'enum' shouldn't be a keyword (see IDEA-67556)
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/notAKeywords/pkg/Bar.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/notAKeywords/pkg/Bar.java
new file mode 100644
index 0000000..dd23607
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/notAKeywords/pkg/Bar.java
@@ -0,0 +1,9 @@
+package pkg;
+
+import pkg.enum.Foo;
+
+public class Bar {
+  public void doSomething(Foo foo) {
+    System.out.println("foo=" + foo);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/notAKeywords/pkg/enum/Foo.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/notAKeywords/pkg/enum/Foo.java
new file mode 100644
index 0000000..0173b12
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/notAKeywords/pkg/enum/Foo.java
@@ -0,0 +1,5 @@
+package pkg.enum;
+
+public class Foo {
+  public static Foo FOO = new Foo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/onDemandImportConflict/Outer.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/onDemandImportConflict/Outer.java
new file mode 100644
index 0000000..41565e3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/onDemandImportConflict/Outer.java
@@ -0,0 +1,5 @@
+import x.*;
+import y.*;
+public class Outer {
+    TTT ttt = new TTT();
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/onDemandImportConflict/x/TTT.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/onDemandImportConflict/x/TTT.java
new file mode 100644
index 0000000..0a62989
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/onDemandImportConflict/x/TTT.java
@@ -0,0 +1,3 @@
+package x;
+
+public class TTT {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/onDemandImportConflict/y/TTT.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/onDemandImportConflict/y/TTT.java
new file mode 100644
index 0000000..1c371b0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/onDemandImportConflict/y/TTT.java
@@ -0,0 +1,3 @@
+package y;
+
+class TTT {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/overridePackageLocal/x/Base.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/overridePackageLocal/x/Base.java
new file mode 100644
index 0000000..3cdc73d7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/overridePackageLocal/x/Base.java
@@ -0,0 +1,4 @@
+package x;
+public class Base {
+  void f() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/overridePackageLocal/x/y/Derived.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/overridePackageLocal/x/y/Derived.java
new file mode 100644
index 0000000..d26a617
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/overridePackageLocal/x/y/Derived.java
@@ -0,0 +1,5 @@
+package x.y;
+
+public class Derived extends x.Base {
+  private void f() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/packageLocalOverride/x/A.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/packageLocalOverride/x/A.java
new file mode 100644
index 0000000..e534294
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/packageLocalOverride/x/A.java
@@ -0,0 +1,6 @@
+package x;
+
+public class A {
+    int method() { return 0; }
+
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/packageLocalOverride/y/B.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/packageLocalOverride/y/B.java
new file mode 100644
index 0000000..02530e6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/packageLocalOverride/y/B.java
@@ -0,0 +1,8 @@
+package y;
+
+import x.A;
+
+public class B extends A {
+    public double method() { return 0.0; }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/packageLocalOverride/y/C.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/packageLocalOverride/y/C.java
new file mode 100644
index 0000000..0d40104
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/packageLocalOverride/y/C.java
@@ -0,0 +1,5 @@
+package y;
+
+public class C extends B {
+    public double method() { return 0; }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/packageLocals/x/A.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/packageLocals/x/A.java
new file mode 100644
index 0000000..3bbbd1a5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/packageLocals/x/A.java
@@ -0,0 +1,15 @@
+package x;
+public class A extends D{
+    int k;
+    static void staticF() {}
+}
+class C extends x.sub.B {
+    int n=<error descr="'k' is not public in 'x.A'. Cannot be accessed from outside package">k</error>;
+
+    // can call despite inherited through package local from other package
+    void f() { A.staticF(); }
+}
+
+class D{
+    public void foo(){}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/packageLocals/x/ContainerClass.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/packageLocals/x/ContainerClass.java
new file mode 100644
index 0000000..85fe8ce
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/packageLocals/x/ContainerClass.java
@@ -0,0 +1,9 @@
+// package local class in the middle
+
+package x;
+class ComponentClass {
+    public int size;
+}
+public class ContainerClass {
+    public ComponentClass cc = new ComponentClass();
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/packageLocals/x/sub/B.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/packageLocals/x/sub/B.java
new file mode 100644
index 0000000..095c872
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/packageLocals/x/sub/B.java
@@ -0,0 +1,6 @@
+package x.sub;
+
+public class B extends x.A {
+}
+
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/packageLocals/x/sub/UsingMain.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/packageLocals/x/sub/UsingMain.java
new file mode 100644
index 0000000..76214ea
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/packageLocals/x/sub/UsingMain.java
@@ -0,0 +1,12 @@
+package x.sub;
+
+import x.ContainerClass;
+import x.A;
+
+public class UsingMain {
+    public static void main(String[] args) {
+        final ContainerClass cont = new ContainerClass();
+        System.out.println(cont.cc.<error descr="'x.ComponentClass' is not public in 'x'. Cannot be accessed from outside package">size</error>);////
+        new A().foo();
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/protectedAccessFromOtherPackage/a/A.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/protectedAccessFromOtherPackage/a/A.java
new file mode 100644
index 0000000..e6e1e6f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/protectedAccessFromOtherPackage/a/A.java
@@ -0,0 +1,6 @@
+package a;
+import b.B;
+
+public class A extends B {
+  int f = super.bbb;
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/protectedAccessFromOtherPackage/a/Father.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/protectedAccessFromOtherPackage/a/Father.java
new file mode 100644
index 0000000..fd5c039
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/protectedAccessFromOtherPackage/a/Father.java
@@ -0,0 +1,7 @@
+package a;
+
+public class Father {
+    protected void func() {
+        System.out.println("Father.func");
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/protectedAccessFromOtherPackage/a/Main.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/protectedAccessFromOtherPackage/a/Main.java
new file mode 100644
index 0000000..c9ef5ed
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/protectedAccessFromOtherPackage/a/Main.java
@@ -0,0 +1,12 @@
+package a;
+
+import b.Son;
+
+public class Main {
+    public static void main(String[] args) {
+
+        Son bad = new Son();
+        bad.<error descr="'func()' has protected access in 'b.Son'">func</error>();
+
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/protectedAccessFromOtherPackage/b/B.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/protectedAccessFromOtherPackage/b/B.java
new file mode 100644
index 0000000..1c778bd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/protectedAccessFromOtherPackage/b/B.java
@@ -0,0 +1,5 @@
+package b;
+
+public class B {
+  protected int bbb;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/protectedAccessFromOtherPackage/b/Son.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/protectedAccessFromOtherPackage/b/Son.java
new file mode 100644
index 0000000..8ad7128
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/protectedAccessFromOtherPackage/b/Son.java
@@ -0,0 +1,9 @@
+package b;
+
+import a.Father;
+
+public class Son extends Father {
+    protected void func() {
+         System.out.println("Son.func");
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/protectedConstructor/p1/C1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/protectedConstructor/p1/C1.java
new file mode 100644
index 0000000..4ae157d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/protectedConstructor/p1/C1.java
@@ -0,0 +1,5 @@
+package p1;
+
+public class C1 {
+    protected C1(int i) { } //protected constructor
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/protectedConstructor/p2/C2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/protectedConstructor/p2/C2.java
new file mode 100644
index 0000000..1569803
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/protectedConstructor/p2/C2.java
@@ -0,0 +1,18 @@
+package p2;
+
+import p1.C1;
+
+public class C2 extends C1 {
+    public C2() {
+        super(9);
+    }
+
+    public void amethod() {
+        new <error descr="'C1(int)' has protected access in 'p1.C1'">C1</error>(9); 
+    }
+
+    Object gg() {
+        // anonymous is ok?!
+        return new C1(1){};
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/protectedConstructor/samePackage/C1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/protectedConstructor/samePackage/C1.java
new file mode 100644
index 0000000..7bdcdb8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/protectedConstructor/samePackage/C1.java
@@ -0,0 +1,14 @@
+package samePackage;
+
+public class C1 {
+    protected C1(int i) { } //protected constructor
+}
+class Cc extends C1 {
+    public Cc() {
+        super(9);
+    }
+
+    public void amethod() {
+        new C1(9); // <<<<---------- This is an error
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/protectedConstructor/samePackage/C2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/protectedConstructor/samePackage/C2.java
new file mode 100644
index 0000000..7c21a7b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/protectedConstructor/samePackage/C2.java
@@ -0,0 +1,13 @@
+package samePackage;
+
+import samePackage.C1;
+
+public class C2 extends C1 {
+    public C2() {
+        super(9);
+    }
+
+    public void amethod() {
+        new C1(9); // <<<<---------- This is an error
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/protectedConstructorInInner/p1/C1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/protectedConstructorInInner/p1/C1.java
new file mode 100644
index 0000000..067481b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/protectedConstructorInInner/p1/C1.java
@@ -0,0 +1,7 @@
+package p1;
+
+public class C1 {
+        protected static class InnerClassInBase
+        {
+        }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/protectedConstructorInInner/p2/C2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/protectedConstructorInInner/p2/C2.java
new file mode 100644
index 0000000..39d5d19
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/protectedConstructorInInner/p2/C2.java
@@ -0,0 +1,10 @@
+package p2;
+
+import p1.C1;
+
+public class C2 extends C1 {
+    public void amethod() {
+        InnerClassInBase inner;
+        inner = new <error descr="'p1.C1.InnerClassInBase' has protected access in 'p1.C1'">InnerClassInBase</error>();
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/reimportConflictingClasses/x/Usage.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/reimportConflictingClasses/x/Usage.java
new file mode 100644
index 0000000..e6e26cf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/reimportConflictingClasses/x/Usage.java
@@ -0,0 +1,14 @@
+package x;
+
+import x.n.X1;
+import x.n.X2;
+import x.n.X3;
+
+@Deprecated
+public class Y {
+    X1 x1;
+    x.n.Class s;
+    X2 x2;
+    Class aclass;
+    X3 cc3;
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/reimportConflictingClasses/x/Usage_afterOptimize.txt b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/reimportConflictingClasses/x/Usage_afterOptimize.txt
new file mode 100644
index 0000000..15f16b2b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/reimportConflictingClasses/x/Usage_afterOptimize.txt
@@ -0,0 +1,14 @@
+package x;
+
+import x.n.*;
+
+import java.lang.Class;
+
+@Deprecated
+public class Y {
+    X1 x1;
+    x.n.Class s;
+    X2 x2;
+    Class aclass;
+    X3 cc3;
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/reimportConflictingClasses/x/n/Class.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/reimportConflictingClasses/x/n/Class.java
new file mode 100644
index 0000000..890855b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/reimportConflictingClasses/x/n/Class.java
@@ -0,0 +1,2 @@
+package x.n;
+public class Class{}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/reimportConflictingClasses/x/n/X1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/reimportConflictingClasses/x/n/X1.java
new file mode 100644
index 0000000..6601d86
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/reimportConflictingClasses/x/n/X1.java
@@ -0,0 +1,4 @@
+package x.n;
+
+public class X1 {
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/reimportConflictingClasses/x/n/X2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/reimportConflictingClasses/x/n/X2.java
new file mode 100644
index 0000000..c22bb4c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/reimportConflictingClasses/x/n/X2.java
@@ -0,0 +1,4 @@
+package x.n;
+
+public class X2 {
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/reimportConflictingClasses/x/n/X3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/reimportConflictingClasses/x/n/X3.java
new file mode 100644
index 0000000..e8afd6c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/reimportConflictingClasses/x/n/X3.java
@@ -0,0 +1,4 @@
+package x.n;
+
+public class X3 {
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/sameClassesInSourceAndLib/lib/lib.jar b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/sameClassesInSourceAndLib/lib/lib.jar
new file mode 100644
index 0000000..80e445d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/sameClassesInSourceAndLib/lib/lib.jar
Binary files differ
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/sameClassesInSourceAndLib/lib/libsrc.zip b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/sameClassesInSourceAndLib/lib/libsrc.zip
new file mode 100644
index 0000000..7eaf874
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/sameClassesInSourceAndLib/lib/libsrc.zip
Binary files differ
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/sameClassesInSourceAndLib/severalInstances.iml b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/sameClassesInSourceAndLib/severalInstances.iml
new file mode 100644
index 0000000..7cd339e4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/sameClassesInSourceAndLib/severalInstances.iml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module relativePaths="true" type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/lib.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES>
+          <root url="jar://$MODULE_DIR$/lib/libsrc.zip!/" />
+        </SOURCES>
+      </library>
+    </orderEntry>
+  </component>
+</module>
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/sameClassesInSourceAndLib/severalInstances.ipr b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/sameClassesInSourceAndLib/severalInstances.ipr
new file mode 100644
index 0000000..c25cbf1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/sameClassesInSourceAndLib/severalInstances.ipr
@@ -0,0 +1,265 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project relativePaths="false" version="4">
+  <component name="AntConfiguration">
+    <defaultAnt bundledAnt="true" />
+  </component>
+  <component name="BuildJarProjectSettings">
+    <option name="BUILD_JARS_ON_MAKE" value="false" />
+  </component>
+  <component name="CodeStyleSettingsManager">
+    <option name="PER_PROJECT_SETTINGS" />
+    <option name="USE_PER_PROJECT_SETTINGS" value="false" />
+  </component>
+  <component name="CompilerConfiguration">
+    <option name="DEFAULT_COMPILER" value="Javac" />
+    <option name="DEPLOY_AFTER_MAKE" value="0" />
+    <resourceExtensions>
+      <entry name=".+\.(properties|xml|html|dtd|tld)" />
+      <entry name=".+\.(gif|png|jpeg|jpg)" />
+    </resourceExtensions>
+    <wildcardResourcePatterns>
+      <entry name="?*.properties" />
+      <entry name="?*.xml" />
+      <entry name="?*.gif" />
+      <entry name="?*.png" />
+      <entry name="?*.jpeg" />
+      <entry name="?*.jpg" />
+      <entry name="?*.html" />
+      <entry name="?*.dtd" />
+      <entry name="?*.tld" />
+      <entry name="?*.ftl" />
+    </wildcardResourcePatterns>
+  </component>
+  <component name="CopyrightManager" default="">
+    <module2copyright />
+  </component>
+  <component name="DependenciesAnalyzeManager">
+    <option name="myForwardDirection" value="false" />
+  </component>
+  <component name="DependencyValidationManager">
+    <option name="SKIP_IMPORT_STATEMENTS" value="false" />
+  </component>
+  <component name="EclipseCompilerSettings">
+    <option name="DEBUGGING_INFO" value="true" />
+    <option name="GENERATE_NO_WARNINGS" value="true" />
+    <option name="DEPRECATION" value="false" />
+    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+    <option name="MAXIMUM_HEAP_SIZE" value="128" />
+  </component>
+  <component name="EclipseEmbeddedCompilerSettings">
+    <option name="DEBUGGING_INFO" value="true" />
+    <option name="GENERATE_NO_WARNINGS" value="true" />
+    <option name="DEPRECATION" value="false" />
+    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+    <option name="MAXIMUM_HEAP_SIZE" value="128" />
+  </component>
+  <component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false" />
+  <component name="EntryPointsManager">
+    <entry_points version="2.0" />
+  </component>
+  <component name="HierarchyBrowserManager">
+    <option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
+    <option name="SORT_ALPHABETICALLY" value="false" />
+    <option name="HIDE_CLASSES_WHERE_METHOD_NOT_IMPLEMENTED" value="false" />
+  </component>
+  <component name="InspectionProjectProfileManager">
+    <option name="PROJECT_PROFILE" value="Project Default" />
+    <option name="USE_PROJECT_LEVEL_SETTINGS" value="false" />
+    <scopes />
+    <profiles>
+      <profile version="1.0" is_locked="false">
+        <option name="myName" value="Project Default" />
+        <option name="myLocal" value="false" />
+      </profile>
+    </profiles>
+    <list size="0" />
+  </component>
+  <component name="JavacSettings">
+    <option name="DEBUGGING_INFO" value="true" />
+    <option name="GENERATE_NO_WARNINGS" value="false" />
+    <option name="DEPRECATION" value="true" />
+    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+    <option name="MAXIMUM_HEAP_SIZE" value="128" />
+  </component>
+  <component name="JavadocGenerationManager">
+    <option name="OUTPUT_DIRECTORY" />
+    <option name="OPTION_SCOPE" value="protected" />
+    <option name="OPTION_HIERARCHY" value="true" />
+    <option name="OPTION_NAVIGATOR" value="true" />
+    <option name="OPTION_INDEX" value="true" />
+    <option name="OPTION_SEPARATE_INDEX" value="true" />
+    <option name="OPTION_DOCUMENT_TAG_USE" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_AUTHOR" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_VERSION" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_DEPRECATED" value="true" />
+    <option name="OPTION_DEPRECATED_LIST" value="true" />
+    <option name="OTHER_OPTIONS" value="" />
+    <option name="HEAP_SIZE" />
+    <option name="LOCALE" />
+    <option name="OPEN_IN_BROWSER" value="true" />
+  </component>
+  <component name="JikesSettings">
+    <option name="JIKES_PATH" value="" />
+    <option name="DEBUGGING_INFO" value="true" />
+    <option name="DEPRECATION" value="true" />
+    <option name="GENERATE_NO_WARNINGS" value="false" />
+    <option name="IS_EMACS_ERRORS_MODE" value="true" />
+    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+  </component>
+  <component name="Palette2">
+    <group name="Swing">
+      <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
+      </item>
+      <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
+        <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
+        <initial-values>
+          <property name="text" value="Button" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="RadioButton" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="CheckBox" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="Label" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
+          <preferred-size width="-1" height="20" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
+      </item>
+    </group>
+  </component>
+  <component name="ProjectDetails">
+    <option name="projectName" value="severalInstances" />
+  </component>
+  <component name="ProjectFileVersion" converted="true">
+    <converter id="javaee-modules" />
+    <converter id="ror-modules" />
+    <converter id="SelenaRunConfToDiana" />
+  </component>
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/severalInstances.iml" filepath="$PROJECT_DIR$/severalInstances.iml" />
+    </modules>
+  </component>
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_5" assert-keyword="true" jdk-15="true" project-jdk-name="1.6" project-jdk-type="JavaSDK">
+    <output url="file://$PROJECT_DIR$/out" />
+  </component>
+  <component name="ResourceManagerContainer">
+    <option name="myResourceBundles">
+      <value>
+        <list size="0" />
+      </value>
+    </option>
+  </component>
+  <component name="RmicSettings">
+    <option name="IS_EANABLED" value="false" />
+    <option name="DEBUGGING_INFO" value="true" />
+    <option name="GENERATE_NO_WARNINGS" value="false" />
+    <option name="GENERATE_IIOP_STUBS" value="false" />
+    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+  </component>
+  <component name="WebServicesPlugin" addRequiredLibraries="true" />
+  <UsedPathMacros>
+    <macro name="CVS_BASE" />
+  </UsedPathMacros>
+</project>
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/sameClassesInSourceAndLib/severalInstances.iws b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/sameClassesInSourceAndLib/severalInstances.iws
new file mode 100644
index 0000000..2518b89
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/sameClassesInSourceAndLib/severalInstances.iws
@@ -0,0 +1,529 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project relativePaths="false" version="4">
+  <component name="CCaseConfig">
+    <option name="checkoutReserved" value="false" />
+    <option name="markExternalChangeAsUpToDate" value="true" />
+    <option name="checkInUseHijack" value="true" />
+    <option name="useUcmModel" value="true" />
+    <option name="isOffline" value="false" />
+    <option name="synchOutside" value="false" />
+    <option name="isHistoryResticted" value="true" />
+    <option name="useIdenticalSwitch" value="true" />
+    <option name="synchActivitiesOnRefresh" value="true" />
+    <option name="lastScr" value="" />
+    <option name="scrTextFileName" value="" />
+    <option name="historyRevisionsNumber" value="4" />
+  </component>
+  <component name="ChangeListManager">
+    <list default="true" readonly="true" name="Default" comment="" />
+    <ignored path="severalInstances.iws" />
+    <ignored path=".idea/workspace.xml" />
+  </component>
+  <component name="ChangesViewManager" flattened_view="true" show_ignored="false" />
+  <component name="Commander">
+    <leftPanel />
+    <rightPanel />
+    <splitter proportion="0.5" />
+  </component>
+  <component name="CreatePatchCommitExecutor">
+    <option name="PATCH_PATH" value="" />
+    <option name="REVERSE_PATCH" value="false" />
+  </component>
+  <component name="DaemonCodeAnalyzer">
+    <disable_hints />
+  </component>
+  <component name="DebuggerManager">
+    <breakpoint_any>
+      <breakpoint>
+        <option name="NOTIFY_CAUGHT" value="true" />
+        <option name="NOTIFY_UNCAUGHT" value="true" />
+        <option name="ENABLED" value="false" />
+        <option name="LOG_ENABLED" value="false" />
+        <option name="LOG_EXPRESSION_ENABLED" value="false" />
+        <option name="SUSPEND_POLICY" value="SuspendAll" />
+        <option name="COUNT_FILTER_ENABLED" value="false" />
+        <option name="COUNT_FILTER" value="0" />
+        <option name="CONDITION_ENABLED" value="false" />
+        <option name="CLASS_FILTERS_ENABLED" value="false" />
+        <option name="INSTANCE_FILTERS_ENABLED" value="false" />
+        <option name="CONDITION" value="" />
+        <option name="LOG_MESSAGE" value="" />
+      </breakpoint>
+      <breakpoint>
+        <option name="NOTIFY_CAUGHT" value="true" />
+        <option name="NOTIFY_UNCAUGHT" value="true" />
+        <option name="ENABLED" value="false" />
+        <option name="LOG_ENABLED" value="false" />
+        <option name="LOG_EXPRESSION_ENABLED" value="false" />
+        <option name="SUSPEND_POLICY" value="SuspendAll" />
+        <option name="COUNT_FILTER_ENABLED" value="false" />
+        <option name="COUNT_FILTER" value="0" />
+        <option name="CONDITION_ENABLED" value="false" />
+        <option name="CLASS_FILTERS_ENABLED" value="false" />
+        <option name="INSTANCE_FILTERS_ENABLED" value="false" />
+        <option name="CONDITION" value="" />
+        <option name="LOG_MESSAGE" value="" />
+      </breakpoint>
+    </breakpoint_any>
+    <breakpoint_rules />
+    <ui_properties />
+  </component>
+  <component name="FavoritesManager">
+    <favorites_list name="severalInstances" />
+  </component>
+  <component name="FileEditorManager">
+    <leaf>
+      <file leaf-file-name="SomeClass.java" pinned="false" current="true" current-in-tab="true">
+        <entry file="file://$PROJECT_DIR$/src/ppp/SomeClass.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="3" column="9" selection-start="48" selection-end="48" vertical-scroll-proportion="0.05788876">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="BadClass.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/ppp/BadClass.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="9" column="13" selection-start="185" selection-end="185" vertical-scroll-proportion="0.0">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="BadClass.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="jar://$PROJECT_DIR$/lib/libsrc.zip!/ppp/BadClass.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="9" column="13" selection-start="185" selection-end="185" vertical-scroll-proportion="0.0">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+    </leaf>
+  </component>
+  <component name="FindManager">
+    <FindUsagesManager>
+      <setting name="OPEN_NEW_TAB" value="false" />
+    </FindUsagesManager>
+  </component>
+  <component name="ModuleEditorState">
+    <option name="LAST_EDITED_MODULE_NAME" />
+    <option name="LAST_EDITED_TAB_NAME" />
+  </component>
+  <component name="ProjectLevelVcsManager">
+    <OptionsSetting value="true" id="Add" />
+    <OptionsSetting value="true" id="Remove" />
+    <OptionsSetting value="true" id="Checkout" />
+    <OptionsSetting value="true" id="Update" />
+    <OptionsSetting value="true" id="Status" />
+    <OptionsSetting value="true" id="Edit" />
+    <OptionsSetting value="true" id="Undo Check Out" />
+    <OptionsSetting value="true" id="Get Latest Version" />
+    <ConfirmationsSetting value="0" id="Add" />
+    <ConfirmationsSetting value="0" id="Remove" />
+  </component>
+  <component name="ProjectPane">
+    <subPane>
+      <PATH>
+        <PATH_ELEMENT>
+          <option name="myItemId" value="severalInstances" />
+          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+        </PATH_ELEMENT>
+        <PATH_ELEMENT>
+          <option name="myItemId" value="severalInstances" />
+          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
+        </PATH_ELEMENT>
+      </PATH>
+      <PATH>
+        <PATH_ELEMENT>
+          <option name="myItemId" value="severalInstances" />
+          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+        </PATH_ELEMENT>
+        <PATH_ELEMENT>
+          <option name="myItemId" value="severalInstances" />
+          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
+        </PATH_ELEMENT>
+        <PATH_ELEMENT>
+          <option name="myItemId" value="severalInstances" />
+          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+        </PATH_ELEMENT>
+      </PATH>
+      <PATH>
+        <PATH_ELEMENT>
+          <option name="myItemId" value="severalInstances" />
+          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+        </PATH_ELEMENT>
+        <PATH_ELEMENT>
+          <option name="myItemId" value="severalInstances" />
+          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
+        </PATH_ELEMENT>
+        <PATH_ELEMENT>
+          <option name="myItemId" value="severalInstances" />
+          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+        </PATH_ELEMENT>
+        <PATH_ELEMENT>
+          <option name="myItemId" value="src" />
+          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+        </PATH_ELEMENT>
+        <PATH_ELEMENT>
+          <option name="myItemId" value="ppp" />
+          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+        </PATH_ELEMENT>
+      </PATH>
+    </subPane>
+  </component>
+  <component name="ProjectReloadState">
+    <option name="STATE" value="0" />
+  </component>
+  <component name="ProjectView">
+    <navigator currentView="ProjectPane" proportions="0.5" version="1" splitterProportion="0.5">
+      <flattenPackages />
+      <showMembers />
+      <showModules />
+      <showLibraryContents />
+      <hideEmptyPackages />
+      <abbreviatePackageNames />
+      <showStructure ProjectPane="false" />
+      <autoscrollToSource />
+      <autoscrollFromSource />
+      <sortByType />
+    </navigator>
+  </component>
+  <component name="PropertiesComponent">
+    <property name="project.structure.last.edited" value="Modules" />
+    <property name="GoToFile.includeJavaFiles" value="false" />
+    <property name="project.structure.proportion" value="0.15" />
+    <property name="GoToClass.toSaveIncludeLibraries" value="false" />
+    <property name="RunManagerConfig.showSettingsBeforeRunnig" value="false" />
+    <property name="MemberChooser.sorted" value="false" />
+    <property name="MemberChooser.showClasses" value="true" />
+    <property name="project.structure.side.proportion" value="0.2" />
+    <property name="GoToClass.includeLibraries" value="false" />
+    <property name="MemberChooser.copyJavadoc" value="false" />
+  </component>
+  <component name="RunManager" selected="Application.SomeClass">
+    <configuration default="true" type="Remote" factoryName="Remote">
+      <option name="USE_SOCKET_TRANSPORT" value="true" />
+      <option name="SERVER_MODE" value="false" />
+      <option name="SHMEM_ADDRESS" value="javadebug" />
+      <option name="HOST" value="localhost" />
+      <option name="PORT" value="5005" />
+    </configuration>
+    <configuration default="true" type="Applet" factoryName="Applet">
+      <module name="" />
+      <option name="MAIN_CLASS_NAME" />
+      <option name="HTML_FILE_NAME" />
+      <option name="HTML_USED" value="false" />
+      <option name="WIDTH" value="400" />
+      <option name="HEIGHT" value="300" />
+      <option name="POLICY_FILE" value="$CVS_BASE$/appletviewer.policy" />
+      <option name="VM_PARAMETERS" />
+      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+      <option name="ALTERNATIVE_JRE_PATH" />
+    </configuration>
+    <configuration default="true" type="Application" factoryName="Application" enabled="false" merge="false" runner="emma">
+      <option name="MAIN_CLASS_NAME" />
+      <option name="VM_PARAMETERS" />
+      <option name="PROGRAM_PARAMETERS" />
+      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
+      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+      <option name="ALTERNATIVE_JRE_PATH" />
+      <option name="ENABLE_SWING_INSPECTOR" value="false" />
+      <option name="ENV_VARIABLES" />
+      <option name="PASS_PARENT_ENVS" value="true" />
+      <module name="" />
+      <envs />
+    </configuration>
+    <configuration default="true" type="JUnit" factoryName="JUnit" enabled="false" merge="false" runner="emma">
+      <module name="" />
+      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+      <option name="ALTERNATIVE_JRE_PATH" />
+      <option name="PACKAGE_NAME" />
+      <option name="MAIN_CLASS_NAME" />
+      <option name="METHOD_NAME" />
+      <option name="TEST_OBJECT" value="class" />
+      <option name="VM_PARAMETERS" />
+      <option name="PARAMETERS" />
+      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
+      <option name="ENV_VARIABLES" />
+      <option name="PASS_PARENT_ENVS" value="true" />
+      <option name="ADDITIONAL_CLASS_PATH" />
+      <option name="TEST_SEARCH_SCOPE">
+        <value defaultName="moduleWithDependencies" />
+      </option>
+      <envs />
+    </configuration>
+    <configuration default="false" name="SomeClass" type="Application" factoryName="Application" enabled="false" merge="false" sample_coverage="true" runner="emma">
+      <option name="MAIN_CLASS_NAME" value="ppp.SomeClass" />
+      <option name="VM_PARAMETERS" value="" />
+      <option name="PROGRAM_PARAMETERS" value="" />
+      <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" />
+      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+      <option name="ALTERNATIVE_JRE_PATH" value="" />
+      <option name="ENABLE_SWING_INSPECTOR" value="false" />
+      <option name="ENV_VARIABLES" />
+      <option name="PASS_PARENT_ENVS" value="true" />
+      <module name="severalInstances" />
+      <envs />
+      <RunnerSettings RunnerId="Run" />
+      <ConfigurationWrapper RunnerId="Run" />
+      <method>
+        <option name="Make" value="true" />
+      </method>
+    </configuration>
+    <list size="1">
+      <item index="0" class="java.lang.String" itemvalue="Application.SomeClass" />
+    </list>
+    <configuration name="&lt;template&gt;" type="WebApp" default="true" selected="false">
+      <Host>localhost</Host>
+      <Port>5050</Port>
+    </configuration>
+  </component>
+  <component name="ShelveChangesManager" show_recycled="false" />
+  <component name="StarteamConfiguration">
+    <option name="SERVER" value="" />
+    <option name="PORT" value="49201" />
+    <option name="USER" value="" />
+    <option name="PASSWORD" value="" />
+    <option name="PROJECT" value="" />
+    <option name="VIEW" value="" />
+    <option name="ALTERNATIVE_WORKING_PATH" value="" />
+    <option name="LOCK_ON_CHECKOUT" value="false" />
+    <option name="UNLOCK_ON_CHECKIN" value="false" />
+  </component>
+  <component name="StructureViewFactory">
+    <option name="AUTOSCROLL_MODE" value="true" />
+    <option name="AUTOSCROLL_FROM_SOURCE" value="false" />
+    <option name="ACTIVE_ACTIONS" value="" />
+  </component>
+  <component name="SvnConfiguration">
+    <option name="USER" value="" />
+    <option name="PASSWORD" value="" />
+    <option name="LAST_MERGED_REVISION" />
+    <option name="UPDATE_RUN_STATUS" value="false" />
+    <option name="MERGE_DRY_RUN" value="false" />
+    <option name="MERGE_DIFF_USE_ANCESTRY" value="true" />
+    <option name="UPDATE_LOCK_ON_DEMAND" value="false" />
+    <configuration useDefault="true">C:\Documents and Settings\jeka\Application Data\Subversion</configuration>
+    <myIsUseDefaultProxy>false</myIsUseDefaultProxy>
+  </component>
+  <component name="TodoView" selected-index="0">
+    <todo-panel id="selected-file">
+      <are-packages-shown value="false" />
+      <are-modules-shown value="false" />
+      <flatten-packages value="false" />
+      <is-autoscroll-to-source value="true" />
+    </todo-panel>
+    <todo-panel id="all">
+      <are-packages-shown value="true" />
+      <are-modules-shown value="false" />
+      <flatten-packages value="false" />
+      <is-autoscroll-to-source value="true" />
+    </todo-panel>
+    <todo-panel id="default-changelist">
+      <are-packages-shown value="false" />
+      <are-modules-shown value="false" />
+      <flatten-packages value="false" />
+      <is-autoscroll-to-source value="false" />
+    </todo-panel>
+  </component>
+  <component name="ToolWindowManager">
+    <frame x="1276" y="-4" width="1288" height="1032" extended-state="0" />
+    <editor active="true" />
+    <layout>
+      <window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" />
+      <window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" />
+      <window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" />
+      <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" />
+      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="1" side_tool="false" />
+      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="3" side_tool="false" />
+      <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" />
+      <window_info id="Slice" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" />
+      <window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" />
+      <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="6" side_tool="false" />
+      <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" />
+      <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="0" side_tool="false" />
+      <window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" />
+      <window_info id="Module Dependencies" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" />
+      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.25" sideWeight="0.6609499" order="0" side_tool="false" />
+      <window_info id="Dependency Viewer" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" />
+      <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" />
+      <window_info id="Duplicates" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" />
+      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3298153" sideWeight="0.5" order="2" side_tool="false" />
+      <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" />
+      <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" />
+      <window_info id="Web" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="2" side_tool="false" />
+      <window_info id="EJB" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" />
+      <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="2" side_tool="false" />
+    </layout>
+  </component>
+  <component name="VcsManagerConfiguration">
+    <option name="OFFER_MOVE_TO_ANOTHER_CHANGELIST_ON_PARTIAL_COMMIT" value="true" />
+    <option name="CHECK_CODE_SMELLS_BEFORE_PROJECT_COMMIT" value="true" />
+    <option name="PERFORM_UPDATE_IN_BACKGROUND" value="false" />
+    <option name="PERFORM_COMMIT_IN_BACKGROUND" value="false" />
+    <option name="PERFORM_EDIT_IN_BACKGROUND" value="true" />
+    <option name="PERFORM_CHECKOUT_IN_BACKGROUND" value="true" />
+    <option name="PERFORM_ADD_REMOVE_IN_BACKGROUND" value="true" />
+    <option name="FORCE_NON_EMPTY_COMMENT" value="false" />
+    <option name="LAST_COMMIT_MESSAGE" />
+    <option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="false" />
+    <option name="REFORMAT_BEFORE_PROJECT_COMMIT" value="false" />
+    <option name="REFORMAT_BEFORE_FILE_COMMIT" value="false" />
+    <option name="FILE_HISTORY_DIALOG_COMMENTS_SPLITTER_PROPORTION" value="0.8" />
+    <option name="FILE_HISTORY_DIALOG_SPLITTER_PROPORTION" value="0.5" />
+    <option name="ACTIVE_VCS_NAME" />
+    <option name="UPDATE_GROUP_BY_PACKAGES" value="false" />
+    <option name="UPDATE_GROUP_BY_CHANGELIST" value="false" />
+    <option name="SHOW_FILE_HISTORY_AS_TREE" value="false" />
+    <option name="FILE_HISTORY_SPLITTER_PROPORTION" value="0.6" />
+  </component>
+  <component name="VssConfiguration">
+    <option name="CLIENT_PATH" value="" />
+    <option name="SRCSAFEINI_PATH" value="" />
+    <option name="USER_NAME" value="" />
+    <option name="PWD" value="" />
+    <CheckoutOptions>
+      <option name="COMMENT" value="" />
+      <option name="DO_NOT_GET_LATEST_VERSION" value="false" />
+      <option name="REPLACE_WRITABLE" value="false" />
+      <option name="RECURSIVE" value="false" />
+    </CheckoutOptions>
+    <CheckinOptions>
+      <option name="COMMENT" value="" />
+      <option name="KEEP_CHECKED_OUT" value="false" />
+      <option name="RECURSIVE" value="false" />
+    </CheckinOptions>
+    <AddOptions>
+      <option name="STORE_ONLY_LATEST_VERSION" value="false" />
+      <option name="CHECK_OUT_IMMEDIATELY" value="false" />
+    </AddOptions>
+    <UndocheckoutOptions>
+      <option name="MAKE_WRITABLE" value="false" />
+      <option name="REPLACE_LOCAL_COPY" value="2" />
+      <option name="RECURSIVE" value="false" />
+    </UndocheckoutOptions>
+    <GetOptions>
+      <option name="REPLACE_WRITABLE" value="0" />
+      <option name="MAKE_WRITABLE" value="false" />
+      <option name="ANSWER_NEGATIVELY" value="false" />
+      <option name="ANSWER_POSITIVELY" value="false" />
+      <option name="RECURSIVE" value="false" />
+      <option name="VERSION" />
+    </GetOptions>
+  </component>
+  <component name="XDebuggerManager">
+    <breakpoint-manager />
+  </component>
+  <component name="XPathView.XPathProjectComponent">
+    <history />
+    <find-history />
+  </component>
+  <component name="antWorkspaceConfiguration">
+    <option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
+    <option name="FILTER_TARGETS" value="false" />
+  </component>
+  <component name="editorHistoryManager">
+    <entry file="jar://$PROJECT_DIR$/lib/libsrc.zip!/ppp/BadClass.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="9" column="13" selection-start="185" selection-end="185" vertical-scroll-proportion="0.0">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/ppp/BadClass.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="9" column="13" selection-start="185" selection-end="185" vertical-scroll-proportion="0.0">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/ppp/SomeClass.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="3" column="9" selection-start="48" selection-end="48" vertical-scroll-proportion="0.05788876">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+  </component>
+  <component name="masterDetails">
+    <option name="states">
+      <map>
+        <entry key="Errors.UI">
+          <value>
+            <UIState>
+              <option name="proportions">
+                <SplitterProportionsDataImpl />
+              </option>
+            </UIState>
+          </value>
+        </entry>
+        <entry key="ProjectJDKs.UI">
+          <value>
+            <UIState>
+              <option name="proportions">
+                <SplitterProportionsDataImpl>
+                  <option name="proportions">
+                    <list>
+                      <option value="0.5" />
+                    </list>
+                  </option>
+                </SplitterProportionsDataImpl>
+              </option>
+              <option name="lastEditedConfigurable" value="1.3" />
+            </UIState>
+          </value>
+        </entry>
+        <entry key="ScopeChooserConfigurable.UI">
+          <value>
+            <UIState>
+              <option name="proportions">
+                <SplitterProportionsDataImpl />
+              </option>
+            </UIState>
+          </value>
+        </entry>
+      </map>
+    </option>
+    <option name="myStates">
+      <map>
+        <entry key="Errors.UI">
+          <value>
+            <UIState>
+              <option name="proportions">
+                <SplitterProportionsDataImpl />
+              </option>
+            </UIState>
+          </value>
+        </entry>
+        <entry key="ProjectJDKs.UI">
+          <value>
+            <UIState>
+              <option name="proportions">
+                <SplitterProportionsDataImpl>
+                  <option name="proportions">
+                    <list>
+                      <option value="0.5" />
+                    </list>
+                  </option>
+                </SplitterProportionsDataImpl>
+              </option>
+              <option name="lastEditedConfigurable" value="1.3" />
+            </UIState>
+          </value>
+        </entry>
+        <entry key="ScopeChooserConfigurable.UI">
+          <value>
+            <UIState>
+              <option name="proportions">
+                <SplitterProportionsDataImpl />
+              </option>
+            </UIState>
+          </value>
+        </entry>
+      </map>
+    </option>
+  </component>
+</project>
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/sameClassesInSourceAndLib/src/ppp/BadClass.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/sameClassesInSourceAndLib/src/ppp/BadClass.java
new file mode 100644
index 0000000..f3ac9f5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/sameClassesInSourceAndLib/src/ppp/BadClass.java
@@ -0,0 +1,17 @@
+package ppp;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: JEKA
+ * Date: Sep 11, 2008
+ * Time: 4:01:38 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public class BadClass {
+    public static void method() {
+        System.out.println("Hello");
+        System.out.println("Hello");
+        System.out.println("Hello");
+        System.out.println("Hello");
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/sameClassesInSourceAndLib/src/ppp/SomeClass.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/sameClassesInSourceAndLib/src/ppp/SomeClass.java
new file mode 100644
index 0000000..a78254d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/sameClassesInSourceAndLib/src/ppp/SomeClass.java
@@ -0,0 +1,5 @@
+package ppp;
+
+public class SomeClass {
+    BadClass f;
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/sameFQNClasses/base/Base.iml b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/sameFQNClasses/base/Base.iml
new file mode 100644
index 0000000..aec43ef
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/sameFQNClasses/base/Base.iml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module relativePaths="true" type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntryProperties />
+  </component>
+</module>
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/sameFQNClasses/base/src/bug/test/BaseClass.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/sameFQNClasses/base/src/bug/test/BaseClass.java
new file mode 100644
index 0000000..c4612c6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/sameFQNClasses/base/src/bug/test/BaseClass.java
@@ -0,0 +1,15 @@
+package bug.test;
+
+/**
+ * Created by IntelliJ IDEA.
+ * Date: Dec 13, 2007
+ * Time: 4:12:50 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public class BaseClass {
+
+    public void doSomething(String arg1){
+        System.out.println("In BaseClass::doSomething(int arg1)");
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/sameFQNClasses/client/Client.iml b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/sameFQNClasses/client/Client.iml
new file mode 100644
index 0000000..c33e171
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/sameFQNClasses/client/Client.iml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module relativePaths="true" type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module" module-name="Override" />
+    <orderEntryProperties />
+  </component>
+</module>
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/sameFQNClasses/client/src/BugTest.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/sameFQNClasses/client/src/BugTest.java
new file mode 100644
index 0000000..2698a66
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/sameFQNClasses/client/src/BugTest.java
@@ -0,0 +1,17 @@
+import bug.test.BaseClass; 
+
+/**
+ * Created by IntelliJ IDEA.
+ * Date: Dec 13, 2007
+ * Time: 4:15:48 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public class BugTest {
+    public static void main(){
+        BaseClass testClass = new BaseClass();
+
+        testClass.doSomething(5);
+
+        testClass.doSomethingElse(5);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/sameFQNClasses/override/Override.iml b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/sameFQNClasses/override/Override.iml
new file mode 100644
index 0000000..61a4c90
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/sameFQNClasses/override/Override.iml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module relativePaths="true" type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module" module-name="Base" exported="" />
+    <orderEntryProperties />
+  </component>
+</module>
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/sameFQNClasses/override/src/bug/test/BaseClass.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/sameFQNClasses/override/src/bug/test/BaseClass.java
new file mode 100644
index 0000000..ce13ccd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/sameFQNClasses/override/src/bug/test/BaseClass.java
@@ -0,0 +1,18 @@
+package bug.test;
+
+/**
+ * Created by IntelliJ IDEA.
+ * Date: Dec 13, 2007
+ * Time: 4:14:49 PM
+ */
+public class BaseClass {
+
+    public void doSomething(int arg1) {
+        System.out.println("In OVERRIDDEN BaseClass::doSomething(int arg1)");
+    }
+
+
+    public void doSomethingElse(int arg1) {
+        System.out.println("In OVERRIDDEN BaseClass::doSomethingElse(int arg1)");
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/scopeBased/x/Shared.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/scopeBased/x/Shared.java
new file mode 100644
index 0000000..0fc75e7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/scopeBased/x/Shared.java
@@ -0,0 +1,10 @@
+package x;
+class <symbolName descr="null" type="CLASS_NAME" foreground="0x00ffff" background="0x404040" effectcolor="0x0000ff" effecttype="BOXED" fonttype="2">Shared</symbolName> {
+  <symbolName descr="null" type="CLASS_NAME" foreground="0x00ffff" background="0x404040" effectcolor="0x0000ff" effecttype="BOXED" fonttype="2">Shared</symbolName> <symbolName descr="null" type="INSTANCE_FIELD">x</symbolName> = new <symbolName descr="null" type="CLASS_NAME" foreground="0x00ffff" background="0x404040" effectcolor="0x0000ff" effecttype="BOXED" fonttype="2">Shared</symbolName>();
+  <symbolName descr="null" type="INTERFACE_NAME" foreground="0x808080" background="0xff00ff" effectcolor="0xffc800" effecttype="STRIKEOUT" fonttype="1">java.util.List</symbolName>
+  <symbolName descr="null" type="METHOD_DECLARATION">list</symbolName>(
+    <symbolName descr="null" type="INTERFACE_NAME" foreground="0x808080" background="0xff00ff" effectcolor="0xffc800" effecttype="STRIKEOUT" fonttype="1">java.util.Map</symbolName> <symbolName descr="null" type="PARAMETER">map</symbolName>
+  ) {
+   return null;
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/scopeBased/x/X.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/scopeBased/x/X.java
new file mode 100644
index 0000000..c16a8cd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/scopeBased/x/X.java
@@ -0,0 +1,10 @@
+package x;
+class <symbolName descr="null" type="CLASS_NAME" foreground="0x00ffff" background="0x404040" effectcolor="0x0000ff" effecttype="BOXED" fonttype="2">X</symbolName> {
+  <symbolName descr="null" type="CLASS_NAME" foreground="0x00ffff" background="0x404040" effectcolor="0x0000ff" effecttype="BOXED" fonttype="2">X</symbolName> <symbolName descr="null" type="INSTANCE_FIELD">x</symbolName> = new <symbolName descr="null" type="CLASS_NAME" foreground="0x00ffff" background="0x404040" effectcolor="0x0000ff" effecttype="BOXED" fonttype="2">X</symbolName>();
+  <symbolName descr="null" type="INTERFACE_NAME" foreground="0x808080" background="0xff00ff" effectcolor="0xffc800" effecttype="STRIKEOUT" fonttype="1">java.util.List</symbolName>
+  <symbolName descr="null" type="METHOD_DECLARATION">list</symbolName>(
+    <symbolName descr="null" type="INTERFACE_NAME" foreground="0x808080" background="0xff00ff" effectcolor="0xffc800" effecttype="STRIKEOUT" fonttype="1">java.util.Map</symbolName> <symbolName descr="null" type="PARAMETER">map</symbolName>
+  ) {
+   return null;
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/singleImport/d.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/singleImport/d.java
new file mode 100644
index 0000000..13dea46
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/singleImport/d.java
@@ -0,0 +1,7 @@
+import p.c;
+import p.c.*;
+
+class d {
+ c c = null;
+ inn inn = null;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/singleImport/p/c.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/singleImport/p/c.java
new file mode 100644
index 0000000..25c3b33
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/singleImport/p/c.java
@@ -0,0 +1,4 @@
+package p;
+public class c {
+ public static class inn {}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/AllJava15Features.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/AllJava15Features.java
new file mode 100644
index 0000000..e4bd0a8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/AllJava15Features.java
@@ -0,0 +1,37 @@
+/*
+ * 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.
+ */
+import java.util.List;
+import static java.lang.Math.min;
+
+class a {
+   List<String> l;
+
+   private void asList(Object... objects) {}
+
+   void foo() {
+     for (String s : l) {}
+
+     for (Object o : l) {}
+
+     asList("");
+
+     Boolean b = true;
+
+     boolean b1 = Boolean.TRUE;
+   }
+
+   enum e {}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/AmbiguousMethodCallIDEA97983.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/AmbiguousMethodCallIDEA97983.java
new file mode 100644
index 0000000..626278d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/AmbiguousMethodCallIDEA97983.java
@@ -0,0 +1,24 @@
+class Test {
+  public static void foo(int[] i1, int[] i2) {
+  }
+
+  public static <T> void foo(T i1, T i2) {
+  }
+
+  public static final void main(String[] args) throws Exception {
+    int[] i = null;
+    foo(i, i);
+  }
+}
+class Test1 {
+  public static void foo(int i1, int i2) {
+  }
+
+  public static <T> void foo(T i1, T i2) {
+  }
+
+  public static final void main(String[] args) throws Exception {
+    int[] i = null;
+    foo(i, i);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ClassLiteral.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ClassLiteral.java
new file mode 100644
index 0000000..97673a5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ClassLiteral.java
@@ -0,0 +1,13 @@
+import java.lang.reflect.*;
+
+class Example {
+    private void demo() {
+        <error descr="Incompatible types. Found: 'java.lang.reflect.TypeVariable<java.lang.Class<capture<? extends Example>>>[]', required: 'java.lang.reflect.TypeVariable<java.lang.Class<? extends Example>>[]'">TypeVariable<Class<? extends Example>>[]  typeParameters  =  getClass().getTypeParameters();</error>
+        Object typeParameters1  =  <error descr="Inconvertible types; cannot cast 'java.lang.reflect.TypeVariable<java.lang.Class<capture<? extends Example>>>[]' to 'java.lang.reflect.TypeVariable<java.lang.Class<? extends Example>>[]'">(TypeVariable<Class<? extends Example>>[]) getClass().getTypeParameters()</error>;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+      return getClass() == obj.getClass();
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DefaultMethodVisibility.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DefaultMethodVisibility.java
new file mode 100644
index 0000000..4a2c0ee
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DefaultMethodVisibility.java
@@ -0,0 +1,14 @@
+interface OfInt extends Sink<Integer> {
+  default void accept(Integer i) {}
+}
+interface Sink<T> extends Block<T> {
+}
+
+interface Block<T> {
+  public void accept(T t);
+}
+
+
+class Hello1 implements Sink<Integer>, OfInt {}
+class Hello2 implements OfInt, Sink<Integer>{}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondMisc.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondMisc.java
new file mode 100644
index 0000000..f51647a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondMisc.java
@@ -0,0 +1,225 @@
+import java.util.ArrayList;
+import java.util.List;
+
+class Test {
+  List<String> queue = new ArrayList<>();
+  ArrayList l = new ArrayList<>(8);
+}
+
+class HMCopy<K, V> {
+  private Entry[] table;
+
+  class Entry<K, V> {
+    Entry(int h, K k, V v, Entry<K, V> n) {
+    }
+  }
+
+  void addEntry(int hash, K key, V value, int bucketIndex) {
+    Entry<K, V> e = table[bucketIndex];
+    table[bucketIndex] = new Entry<>(hash, key, value, e);
+  }
+}
+
+class DD {
+    P1<P<String>> l = new L<String>() {
+        @Override
+        void f() {
+        }
+    };
+
+    P1<P<String>> l1 = new L<>();
+
+    P1<P<String>> foo() {
+        return new L<>();
+    }
+
+    String s = "";
+}
+
+class L<K> extends P1<P<K>> {
+    void f() {
+    }
+}
+
+class P1<P1T> extends P<P1T> {
+}
+
+class P<PT> {
+}
+
+
+class Test1 {
+  void bar() {
+    foo<error descr="'foo(F<F<java.lang.String>>)' in 'Test1' cannot be applied to '(FF<java.lang.Object>)'">(new FF<>())</error>;
+  }
+
+  void foo(F<F<String>> p) {}
+}
+
+class FF<X> extends F<X>{}
+class F<T> {}
+
+class MyTest {
+     static class Foo<X> {
+        Foo(X x) {}
+     }
+
+     static interface Base<Y> {}
+     static class A extends Exception implements Base<String> {}
+     static class B extends Exception implements Base<Integer> {}
+
+     void m() throws B {
+         try {
+             if (true) {
+                 throw new A();
+             }
+             else {
+                 throw new B();
+             }
+         } catch (A ex) {
+             Foo<? extends Base<String>> foo1 = new Foo<>(ex);  // ok
+             <error descr="Incompatible types. Found: 'MyTest.Foo<MyTest.A>', required: 'MyTest.Foo<MyTest.Base<java.lang.String>>'">Foo<Base<String>> foo2 = new Foo<>(ex);</error>  // should be error
+         }
+     }
+}
+
+class NonParameterized {
+  void foo() {
+    new NonParameterized<<error descr="Diamond operator is not applicable for non-parameterized types"></error>>();
+  }
+}
+
+
+interface I<T> {
+  T m();
+}
+
+class FI1 {
+  I<? extends String> i1 = new I<<error descr="Cannot use ''<>'' with anonymous inner classes"></error>>() {
+    @Override
+    public <error descr="'m()' in 'Anonymous class derived from I' clashes with 'm()' in 'I'; attempting to use incompatible return type">String</error> m() {
+      return null;
+    }
+  };
+
+  I<?> i2 = new I<<error descr="Cannot use ''<>'' with anonymous inner classes"></error>>() {
+    @Override
+    public <error descr="'m()' in 'Anonymous class derived from I' clashes with 'm()' in 'I'; attempting to use incompatible return type">Object</error> m() {
+      return null;
+    }
+  };
+}
+
+class Super<X,Y> {
+    private Super(Integer i, Y y, X x) {}
+    public Super(Number n, X x, Y y) {}
+}
+
+class TestMySuper {
+    Super<String,Integer> ssi1 = new Super<>(1, "", 2);
+}
+
+class TestLocal<X> {
+    class Member { }
+    static class Nested {}
+
+    void test() {
+        class Local {}
+
+        Member m = new Member<<error descr="Diamond operator is not applicable for non-parameterized types"></error>>();
+        Nested n = new Nested<<error descr="Diamond operator is not applicable for non-parameterized types"></error>>();
+        Local l = new Local<<error descr="Diamond operator is not applicable for non-parameterized types"></error>>();
+    }
+}
+
+class QualifiedTest {
+  java.util.Map<String, String> s = new java.util.HashMap<>();
+}
+
+
+class TZ {
+
+}
+
+class ParenthTest<T extends TZ> {
+    public ParenthTest(T x) {
+
+    }
+
+    public T z = null;
+
+    public int a() {
+        ParenthTest<T> x = (new ParenthTest<>(null)); //red code is here
+        return 1;
+    }
+}
+
+class TestWildcardInference {
+  interface A<T> {
+  }
+  
+  class B<V> implements A<V> {
+    B(C<V> v) {
+    }
+  }
+  
+  class C<E> {}
+  
+  class U {
+    void foo() {
+      C<? extends Number> x = null;
+      A<? extends Number> y = new B<>(x);
+    }
+  }
+}
+
+class PredefinedErrorsOverRaw<T> {
+  <U> PredefinedErrorsOverRaw(T t) {
+  }
+
+  void test() {
+    PredefinedErrorsOverRaw mc = new <Boolean>PredefinedErrorsOverRaw<<error descr="Cannot use diamonds with explicit type parameters for constructor"></error>>("");
+  }
+}
+
+class Outer {
+    class Inner<T> {}
+}
+class Outer1 {}
+
+class Outer2<K> {
+    class Inner2<T> {}
+}
+
+class Another {
+    public static void main(String[] args) {
+        Outer o = new Outer();
+        Outer.Inner<String> i = o.new Inner<>();
+        Outer.Inner<String> i1 = m().new Inner<>();
+        Outer.Inner<String> i2 = m1().new Inner<>();
+
+        Outer.Inner<String> i3 = m2().new <error descr="Cannot resolve symbol 'Inner'">Inner</error><>();
+
+        System.out.println(i);
+
+        <error descr="Incompatible types. Found: 'Outer2.Inner2<java.lang.String>', required: 'Outer2.Inner2<java.lang.String>'">Outer2<Integer>.Inner2<String> i5 = new Outer2<>().new Inner2<>();</error>
+    }
+
+  static Outer m() {return null;}
+  static <T extends Outer> T m1() {return null;}
+  static <T> T m2() {return null;}
+  
+}
+
+class TypeParamsExtendsList {
+
+        {
+               new TypeWithGeneric<>();
+        }
+
+        private static class A {}
+
+        private static class TypeWithGeneric<T extends A> extends ArrayList<T> {
+
+        }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg1.java
new file mode 100644
index 0000000..cd9c7e1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg1.java
@@ -0,0 +1,18 @@
+class Neg01<X extends Number> {
+
+    Neg01(X x) {}
+
+    <Z> Neg01(X x, Z z) {}
+
+    void test() {
+        Neg01<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">String</error>> n1 = new Neg01<><error descr="'Neg01(java.lang.String & java.lang.Number)' in 'Neg01' cannot be applied to '(java.lang.String)'">("")</error>;
+        Neg01<<error descr="Type parameter '? extends String' is not within its bound; should extend 'java.lang.Number'">? extends String</error>> n2 = new Neg01<><error descr="'Neg01(java.lang.String & java.lang.Number)' in 'Neg01' cannot be applied to '(java.lang.String)'">("")</error>;
+        Neg01<?> n3 = new Neg01<><error descr="'Neg01(java.lang.String & java.lang.Number)' in 'Neg01' cannot be applied to '(java.lang.String)'">("")</error>;
+        Neg01<<error descr="Type parameter '? super String' is not within its bound; should extend 'java.lang.Number'">? super String</error>> n4 = new Neg01<><error descr="'Neg01(java.lang.String & java.lang.Number)' in 'Neg01' cannot be applied to '(java.lang.String)'">("")</error>;
+
+        Neg01<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">String</error>> n5 = new Neg01<><error descr="'Neg01(java.lang.String & java.lang.Number, java.lang.String)' in 'Neg01' cannot be applied to '(java.lang.String, java.lang.String)'">("", "")</error>;
+        Neg01<<error descr="Type parameter '? extends String' is not within its bound; should extend 'java.lang.Number'">? extends String</error>> n6 = new Neg01<><error descr="'Neg01(java.lang.String & java.lang.Number, java.lang.String)' in 'Neg01' cannot be applied to '(java.lang.String, java.lang.String)'">("", "")</error>;
+        Neg01<?> n7 = new Neg01<><error descr="'Neg01(java.lang.String & java.lang.Number, java.lang.String)' in 'Neg01' cannot be applied to '(java.lang.String, java.lang.String)'">("", "")</error>;
+        <error descr="Cannot resolve symbol 'Foo'">Foo</error><? super String> n8 = new Neg01<><error descr="'Neg01(java.lang.String & java.lang.Number, java.lang.String)' in 'Neg01' cannot be applied to '(java.lang.String, java.lang.String)'">("", "")</error>;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg10.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg10.java
new file mode 100644
index 0000000..86b73a9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg10.java
@@ -0,0 +1,7 @@
+class Neg10 {
+    static class Foo<X> {
+        Foo(X x) {}
+    }
+
+    <error descr="Incompatible types. Found: 'Neg10.Foo<java.lang.Integer>', required: 'Neg10.Foo<java.lang.Number>'">Foo<Number> fw = new Foo<>(1);</error>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg11.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg11.java
new file mode 100644
index 0000000..3e32e1a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg11.java
@@ -0,0 +1,8 @@
+class Neg11 {
+
+    void test() {
+        class Foo<X extends Number> { }
+        Foo<?> f1 = new <error descr="Cannot resolve symbol 'UndeclaredName'">UndeclaredName</error><>(); //this is deliberate: aim is to test erroneous path
+        Foo<?> f2 = new <error descr="Cannot resolve symbol 'UndeclaredName'">UndeclaredName</error><>() {}; //this is deliberate: aim is to test erroneous path
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg12.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg12.java
new file mode 100644
index 0000000..b3c5ee2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg12.java
@@ -0,0 +1,10 @@
+class Neg12 {
+
+    static class Foo<X> {
+        <T> Foo(T t) {}
+    }
+
+    Foo<Integer> fi1 = new <String> Foo<<error descr="Cannot use diamonds with explicit type parameters for constructor"></error>>(1);
+    Foo<Integer> fi2 = new <<error descr="Actual type argument and inferred type contradict each other">String</error>> Foo<Integer>(1);
+    Foo<Integer> fi3 = new Foo<Integer>(1);
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg13.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg13.java
new file mode 100644
index 0000000..cdd8659
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg13.java
@@ -0,0 +1,9 @@
+class Neg13 {
+
+    static class Foo<X> {
+        <T> Foo(T t) {}
+    }
+
+    Foo<Integer> fi1 = new <String, Integer> Foo<<error descr="Cannot use diamonds with explicit type parameters for constructor"></error>>("");
+    Foo<Integer> fi2 = new <error descr="Wrong number of type arguments: 2; required: 1"><String, Integer></error> Foo<Integer>("");
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg14.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg14.java
new file mode 100644
index 0000000..f958569
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg14.java
@@ -0,0 +1,9 @@
+class Neg14 {
+
+    static class Foo<X> {
+        <T extends Integer> Foo(T t) {}
+    }
+
+    Foo<Integer> fi1 = new <String> Foo<<error descr="Cannot use diamonds with explicit type parameters for constructor"></error>>(1);
+    Foo<Integer> fi2 = new <<error descr="Actual type argument and inferred type contradict each other">String</error>> Foo<Integer>(1);
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg15.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg15.java
new file mode 100644
index 0000000..97eee46
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg15.java
@@ -0,0 +1,13 @@
+class Pos8 {
+
+    static class Foo<X> {
+        Foo(X t) {}
+    }
+
+    Foo<Integer> fi1 = new Foo<>(1);
+    Foo<Integer> fi2 = new Foo<Integer>(1);
+    Foo<Integer> fi3 = new <String> Foo<<error descr="Cannot use diamonds with explicit type parameters for constructor"></error>>(1);
+    Foo<Integer> fi4 = new <String> Foo<Integer>(1);
+    Foo<Integer> fi5 = new <String, String> Foo<<error descr="Cannot use diamonds with explicit type parameters for constructor"></error>>(1);
+    Foo<Integer> fi6 = new <String, String> Foo<Integer>(1);
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg2.java
new file mode 100644
index 0000000..f1a2f75
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg2.java
@@ -0,0 +1,31 @@
+class Neg02 {
+
+    static class Foo<X extends Number> {
+        Foo(X x) {}
+        <Z> Foo(X x, Z z) {}
+    }
+
+    void testSimple() {
+        Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">String</error>> f1 = new Foo<><error descr="'Foo(java.lang.String & java.lang.Number)' in 'Neg02.Foo' cannot be applied to '(java.lang.String)'">("")</error>;
+        Foo<<error descr="Type parameter '? extends String' is not within its bound; should extend 'java.lang.Number'">? extends String</error>> f2 = new Foo<><error descr="'Foo(java.lang.String & java.lang.Number)' in 'Neg02.Foo' cannot be applied to '(java.lang.String)'">("")</error>;
+        Foo<?> f3 = new Foo<><error descr="'Foo(java.lang.String & java.lang.Number)' in 'Neg02.Foo' cannot be applied to '(java.lang.String)'">("")</error>;
+        Foo<<error descr="Type parameter '? super String' is not within its bound; should extend 'java.lang.Number'">? super String</error>> f4 = new Foo<><error descr="'Foo(java.lang.String & java.lang.Number)' in 'Neg02.Foo' cannot be applied to '(java.lang.String)'">("")</error>;
+
+        Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">String</error>> f5 = new Foo<><error descr="'Foo(java.lang.String & java.lang.Number, java.lang.String)' in 'Neg02.Foo' cannot be applied to '(java.lang.String, java.lang.String)'">("", "")</error>;
+        Foo<<error descr="Type parameter '? extends String' is not within its bound; should extend 'java.lang.Number'">? extends String</error>> f6 = new Foo<><error descr="'Foo(java.lang.String & java.lang.Number, java.lang.String)' in 'Neg02.Foo' cannot be applied to '(java.lang.String, java.lang.String)'">("", "")</error>;
+        Foo<?> f7 = new Foo<><error descr="'Foo(java.lang.String & java.lang.Number, java.lang.String)' in 'Neg02.Foo' cannot be applied to '(java.lang.String, java.lang.String)'">("", "")</error>;
+        Foo<<error descr="Type parameter '? super String' is not within its bound; should extend 'java.lang.Number'">? super String</error>> f8 = new Foo<><error descr="'Foo(java.lang.String & java.lang.Number, java.lang.String)' in 'Neg02.Foo' cannot be applied to '(java.lang.String, java.lang.String)'">("", "")</error>;
+    }
+
+    void testQualified() {
+        Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">String</error>> f1 = new Neg02.Foo<><error descr="'Foo(java.lang.String & java.lang.Number)' in 'Neg02.Foo' cannot be applied to '(java.lang.String)'">("")</error>;
+        Foo<<error descr="Type parameter '? extends String' is not within its bound; should extend 'java.lang.Number'">? extends String</error>> f2 = new Neg02.Foo<><error descr="'Foo(java.lang.String & java.lang.Number)' in 'Neg02.Foo' cannot be applied to '(java.lang.String)'">("")</error>;
+        Foo<?> f3 = new Neg02.Foo<><error descr="'Foo(java.lang.String & java.lang.Number)' in 'Neg02.Foo' cannot be applied to '(java.lang.String)'">("")</error>;
+        Foo<<error descr="Type parameter '? super String' is not within its bound; should extend 'java.lang.Number'">? super String</error>> f4 = new Neg02.Foo<><error descr="'Foo(java.lang.String & java.lang.Number)' in 'Neg02.Foo' cannot be applied to '(java.lang.String)'">("")</error>;
+
+        Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">String</error>> f5 = new Neg02.Foo<><error descr="'Foo(java.lang.String & java.lang.Number, java.lang.String)' in 'Neg02.Foo' cannot be applied to '(java.lang.String, java.lang.String)'">("", "")</error>;
+        Foo<<error descr="Type parameter '? extends String' is not within its bound; should extend 'java.lang.Number'">? extends String</error>> f6 = new Neg02.Foo<><error descr="'Foo(java.lang.String & java.lang.Number, java.lang.String)' in 'Neg02.Foo' cannot be applied to '(java.lang.String, java.lang.String)'">("", "")</error>;
+        Foo<?> f7 = new Neg02.Foo<><error descr="'Foo(java.lang.String & java.lang.Number, java.lang.String)' in 'Neg02.Foo' cannot be applied to '(java.lang.String, java.lang.String)'">("", "")</error>;
+        Foo<<error descr="Type parameter '? super String' is not within its bound; should extend 'java.lang.Number'">? super String</error>> f8 = new Neg02.Foo<><error descr="'Foo(java.lang.String & java.lang.Number, java.lang.String)' in 'Neg02.Foo' cannot be applied to '(java.lang.String, java.lang.String)'">("", "")</error>;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg3.java
new file mode 100644
index 0000000..ac66d2a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg3.java
@@ -0,0 +1,43 @@
+class Neg03<U> {
+
+    class Foo<V extends Number> {
+        Foo(V x) {}
+        <Z> Foo(V x, Z z) {}
+    }
+
+    void testSimple() {
+        Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">String</error>> f1 = new Foo<><error descr="'Foo(java.lang.String & java.lang.Number)' in 'Neg03.Foo' cannot be applied to '(java.lang.String)'">("")</error>;
+        Foo<<error descr="Type parameter '? extends String' is not within its bound; should extend 'java.lang.Number'">? extends String</error>> f2 = new Foo<><error descr="'Foo(java.lang.String & java.lang.Number)' in 'Neg03.Foo' cannot be applied to '(java.lang.String)'">("")</error>;
+        Foo<?> f3 = new Foo<><error descr="'Foo(java.lang.String & java.lang.Number)' in 'Neg03.Foo' cannot be applied to '(java.lang.String)'">("")</error>;
+        Foo<<error descr="Type parameter '? super String' is not within its bound; should extend 'java.lang.Number'">? super String</error>> f4 = new Foo<><error descr="'Foo(java.lang.String & java.lang.Number)' in 'Neg03.Foo' cannot be applied to '(java.lang.String)'">("")</error>;
+
+        Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">String</error>> f5 = new Foo<><error descr="'Foo(java.lang.String & java.lang.Number, java.lang.String)' in 'Neg03.Foo' cannot be applied to '(java.lang.String, java.lang.String)'">("", "")</error>;
+        Foo<<error descr="Type parameter '? extends String' is not within its bound; should extend 'java.lang.Number'">? extends String</error>> f6 = new Foo<><error descr="'Foo(java.lang.String & java.lang.Number, java.lang.String)' in 'Neg03.Foo' cannot be applied to '(java.lang.String, java.lang.String)'">("", "")</error>;
+        Foo<?> f7 = new Foo<><error descr="'Foo(java.lang.String & java.lang.Number, java.lang.String)' in 'Neg03.Foo' cannot be applied to '(java.lang.String, java.lang.String)'">("", "")</error>;
+        Foo<<error descr="Type parameter '? super String' is not within its bound; should extend 'java.lang.Number'">? super String</error>> f8 = new Foo<><error descr="'Foo(java.lang.String & java.lang.Number, java.lang.String)' in 'Neg03.Foo' cannot be applied to '(java.lang.String, java.lang.String)'">("", "")</error>;
+    }
+
+    void testQualified_1() {
+        Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">String</error>> f1 = new Neg03<U>.Foo<><error descr="'Foo(java.lang.String & java.lang.Number)' in 'Neg03.Foo' cannot be applied to '(java.lang.String)'">("")</error>;
+        Foo<<error descr="Type parameter '? extends String' is not within its bound; should extend 'java.lang.Number'">? extends String</error>> f2 = new Neg03<U>.Foo<><error descr="'Foo(java.lang.String & java.lang.Number)' in 'Neg03.Foo' cannot be applied to '(java.lang.String)'">("")</error>;
+        Foo<?> f3 = new Neg03<U>.Foo<><error descr="'Foo(java.lang.String & java.lang.Number)' in 'Neg03.Foo' cannot be applied to '(java.lang.String)'">("")</error>;
+        Foo<<error descr="Type parameter '? super String' is not within its bound; should extend 'java.lang.Number'">? super String</error>> f4 = new Neg03<U>.Foo<><error descr="'Foo(java.lang.String & java.lang.Number)' in 'Neg03.Foo' cannot be applied to '(java.lang.String)'">("")</error>;
+
+        Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">String</error>> f5 = new Neg03<U>.Foo<><error descr="'Foo(java.lang.String & java.lang.Number, java.lang.String)' in 'Neg03.Foo' cannot be applied to '(java.lang.String, java.lang.String)'">("", "")</error>;
+        Foo<<error descr="Type parameter '? extends String' is not within its bound; should extend 'java.lang.Number'">? extends String</error>> f6 = new Neg03<U>.Foo<><error descr="'Foo(java.lang.String & java.lang.Number, java.lang.String)' in 'Neg03.Foo' cannot be applied to '(java.lang.String, java.lang.String)'">("", "")</error>;
+        Foo<?> f7 = new Neg03<U>.Foo<><error descr="'Foo(java.lang.String & java.lang.Number, java.lang.String)' in 'Neg03.Foo' cannot be applied to '(java.lang.String, java.lang.String)'">("", "")</error>;
+        Foo<<error descr="Type parameter '? super String' is not within its bound; should extend 'java.lang.Number'">? super String</error>> f8 = new Neg03<U>.Foo<><error descr="'Foo(java.lang.String & java.lang.Number, java.lang.String)' in 'Neg03.Foo' cannot be applied to '(java.lang.String, java.lang.String)'">("", "")</error>;
+    }
+
+    void testQualified_2(Neg03<U> n) {
+        Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">String</error>> f1 = n.new Foo<><error descr="'Foo(java.lang.String & java.lang.Number)' in 'Neg03.Foo' cannot be applied to '(java.lang.String)'">("")</error>;
+        Foo<<error descr="Type parameter '? extends String' is not within its bound; should extend 'java.lang.Number'">? extends String</error>> f2 = n.new Foo<><error descr="'Foo(java.lang.String & java.lang.Number)' in 'Neg03.Foo' cannot be applied to '(java.lang.String)'">("")</error>;
+        Foo<?> f3 = n.new Foo<><error descr="'Foo(java.lang.String & java.lang.Number)' in 'Neg03.Foo' cannot be applied to '(java.lang.String)'">("")</error>;
+        Foo<<error descr="Type parameter '? super String' is not within its bound; should extend 'java.lang.Number'">? super String</error>> f4 = n.new Foo<><error descr="'Foo(java.lang.String & java.lang.Number)' in 'Neg03.Foo' cannot be applied to '(java.lang.String)'">("")</error>;
+
+        Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">String</error>> f5 = n.new Foo<><error descr="'Foo(java.lang.String & java.lang.Number, java.lang.String)' in 'Neg03.Foo' cannot be applied to '(java.lang.String, java.lang.String)'">("", "")</error>;
+        Foo<<error descr="Type parameter '? extends String' is not within its bound; should extend 'java.lang.Number'">? extends String</error>> f6 = n.new Foo<><error descr="'Foo(java.lang.String & java.lang.Number, java.lang.String)' in 'Neg03.Foo' cannot be applied to '(java.lang.String, java.lang.String)'">("", "")</error>;
+        Foo<?> f7 = n.new Foo<><error descr="'Foo(java.lang.String & java.lang.Number, java.lang.String)' in 'Neg03.Foo' cannot be applied to '(java.lang.String, java.lang.String)'">("", "")</error>;
+        Foo<<error descr="Type parameter '? super String' is not within its bound; should extend 'java.lang.Number'">? super String</error>> f8 = n.new Foo<><error descr="'Foo(java.lang.String & java.lang.Number, java.lang.String)' in 'Neg03.Foo' cannot be applied to '(java.lang.String, java.lang.String)'">("", "")</error>;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg4.java
new file mode 100644
index 0000000..55b50c5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg4.java
@@ -0,0 +1,18 @@
+class Neg04 {
+
+    void test() {
+        class Foo<V extends Number> {
+            Foo(V x) {}
+            <Z> Foo(V x, Z z) {}
+        }
+        Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">String</error>> n1 = new Foo<><error descr="'Foo(java.lang.String & java.lang.Number)' in 'Foo' cannot be applied to '(java.lang.String)'">("")</error>;
+        Foo<<error descr="Type parameter '? extends String' is not within its bound; should extend 'java.lang.Number'">? extends String</error>> n2 = new Foo<><error descr="'Foo(java.lang.String & java.lang.Number)' in 'Foo' cannot be applied to '(java.lang.String)'">("")</error>;
+        Foo<?> n3 = new Foo<><error descr="'Foo(java.lang.String & java.lang.Number)' in 'Foo' cannot be applied to '(java.lang.String)'">("")</error>;
+        Foo<<error descr="Type parameter '? super String' is not within its bound; should extend 'java.lang.Number'">? super String</error>> n4 = new Foo<><error descr="'Foo(java.lang.String & java.lang.Number)' in 'Foo' cannot be applied to '(java.lang.String)'">("")</error>;
+
+        Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">String</error>> n5 = new Foo<><error descr="'Foo(java.lang.String & java.lang.Number, java.lang.String)' in 'Foo' cannot be applied to '(java.lang.String, java.lang.String)'">("", "")</error>;
+        Foo<<error descr="Type parameter '? extends String' is not within its bound; should extend 'java.lang.Number'">? extends String</error>> n6 = new Foo<><error descr="'Foo(java.lang.String & java.lang.Number, java.lang.String)' in 'Foo' cannot be applied to '(java.lang.String, java.lang.String)'">("", "")</error>;
+        Foo<?> n7 = new Foo<><error descr="'Foo(java.lang.String & java.lang.Number, java.lang.String)' in 'Foo' cannot be applied to '(java.lang.String, java.lang.String)'">("", "")</error>;
+        Foo<<error descr="Type parameter '? super String' is not within its bound; should extend 'java.lang.Number'">? super String</error>> n8 = new Foo<><error descr="'Foo(java.lang.String & java.lang.Number, java.lang.String)' in 'Foo' cannot be applied to '(java.lang.String, java.lang.String)'">("", "")</error>;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg5.java
new file mode 100644
index 0000000..71d6441
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg5.java
@@ -0,0 +1,31 @@
+class Neg05<U> {
+
+    class Foo<V> {
+        Foo(V x) {}
+        <Z> Foo(V x, Z z) {}
+    }
+
+    void testRare_1() {
+        Neg05<?>.Foo<String> f1 = new Neg05.Foo<error descr="Type arguments given on a raw type"><></error>("");
+        Neg05<?>.Foo<? extends String> f2 = new Neg05.Foo<error descr="Type arguments given on a raw type"><></error>("");
+        Neg05<?>.Foo<?> f3 = new Neg05.Foo<error descr="Type arguments given on a raw type"><></error>("");
+        Neg05<?>.Foo<? super String> f4 = new Neg05.Foo<error descr="Type arguments given on a raw type"><></error>("");
+
+        Neg05<?>.Foo<String> f5 = new Neg05.Foo<error descr="Type arguments given on a raw type"><></error>("", "");
+        Neg05<?>.Foo<? extends String> f6 = new Neg05.Foo<error descr="Type arguments given on a raw type"><></error>("", "");
+        Neg05<?>.Foo<?> f7 = new Neg05.Foo<error descr="Type arguments given on a raw type"><></error>("", "");
+        Neg05<?>.Foo<? super String> f8 = new Neg05.Foo<error descr="Type arguments given on a raw type"><></error>("", "");
+    }
+
+    void testRare_2(Neg05 n) {
+        Neg05<?>.Foo<String> f1 = n.new Foo<error descr="Type arguments given on a raw type"><></error>("");
+        Neg05<?>.Foo<? extends String> f2 = n.new Foo<error descr="Type arguments given on a raw type"><></error>("");
+        Neg05<?>.Foo<?> f3 = n.new Foo<error descr="Type arguments given on a raw type"><></error>("");
+        Neg05<?>.Foo<? super String> f4 = n.new Foo<error descr="Type arguments given on a raw type"><></error>("");
+
+        Neg05<?>.Foo<String> f5 = n.new Foo<error descr="Type arguments given on a raw type"><></error>("", "");
+        Neg05<?>.Foo<? extends String> f6 = n.new Foo<error descr="Type arguments given on a raw type"><></error>("", "");
+        Neg05<?>.Foo<?> f7 = n.new Foo<error descr="Type arguments given on a raw type"><></error>("", "");
+        Neg05<?>.Foo<? super String> f8 = n.new Foo<error descr="Type arguments given on a raw type"><></error>("", "");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg6.java
new file mode 100644
index 0000000..a233ed2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg6.java
@@ -0,0 +1,7 @@
+class Neg06 {
+
+   static class CSuperFoo<X> {}
+   static class CFoo<X extends Number> extends CSuperFoo<X> {}
+
+   CSuperFoo<String> csf1 = new CFoo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>();
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg7.java
new file mode 100644
index 0000000..84771a6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg7.java
@@ -0,0 +1,8 @@
+class Neg07 {
+   static class SuperFoo<X> {}
+   static class Foo<X extends Number> extends SuperFoo<X> {
+       Foo(X x) {}
+   }
+
+   SuperFoo<String> sf1 = new Foo<><error descr="'Foo(java.lang.String & java.lang.Number)' in 'Neg07.Foo' cannot be applied to '(java.lang.String)'">("")</error>;
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg8.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg8.java
new file mode 100644
index 0000000..30a973082
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg8.java
@@ -0,0 +1,5 @@
+class Neg08 {
+   public static void main(String[] args) {
+     String s = new String<<error descr="Diamond operator is not applicable for non-parameterized types"></error>>("foo");
+   }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg9.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg9.java
new file mode 100644
index 0000000..34c27b0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg9.java
@@ -0,0 +1,15 @@
+class Neg09 {
+    class Member<X> {}
+
+    static class Nested<X> {}
+
+    void testSimple() {
+        Member<?> m1 = new Member<<error descr="Cannot use ''<>'' with anonymous inner classes"></error>>() {};
+        Nested<?> m2 = new Nested<<error descr="Cannot use ''<>'' with anonymous inner classes"></error>>() {};
+    }
+
+    void testQualified() {
+        Member<?> m1 = this.new Member<<error descr="Cannot use ''<>'' with anonymous inner classes"></error>>() {};
+        Nested<?> m2 = new Neg09.Nested<<error descr="Cannot use ''<>'' with anonymous inner classes"></error>>() {};
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondPos1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondPos1.java
new file mode 100644
index 0000000..927df1d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondPos1.java
@@ -0,0 +1,23 @@
+public class Pos01<X> {
+
+    Pos01(X x) {}
+
+    <Z> Pos01(X x, Z z) {}
+
+    void test() {
+        Pos01<Integer> p1 = new Pos01<>(1);
+        Pos01<? extends Integer> p2 = new Pos01<>(1);
+        Pos01<?> p3 = new Pos01<>(1);
+        Pos01<? super Integer> p4 = new Pos01<>(1);
+
+        Pos01<Integer> p5 = new Pos01<>(1, "");
+        Pos01<? extends Integer> p6 = new Pos01<>(1, "");
+        Pos01<?> p7 = new Pos01<>(1, "");
+        Pos01<? super Integer> p8 = new Pos01<>(1, "");
+    }
+
+    public static void main(String[] args) {
+        Pos01<String> p1 = new Pos01<>("");
+        p1.test();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondPos2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondPos2.java
new file mode 100644
index 0000000..0f7a508
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondPos2.java
@@ -0,0 +1,37 @@
+public class Pos02 {
+
+    static class Foo<X> {
+        Foo(X x) {}
+        <Z> Foo(X x, Z z) {}
+    }
+
+    void testSimple() {
+        Foo<Integer> f1 = new Foo<>(1);
+        Foo<? extends Integer> f2 = new Foo<>(1);
+        Foo<?> f3 = new Foo<>(1);
+        Foo<? super Integer> f4 = new Foo<>(1);
+
+        Foo<Integer> f5 = new Foo<>(1, "");
+        Foo<? extends Integer> f6 = new Foo<>(1, "");
+        Foo<?> f7 = new Foo<>(1, "");
+        Foo<? super Integer> f8 = new Foo<>(1, "");
+    }
+
+    void testQualified() {
+        Foo<Integer> f1 = new Pos02.Foo<>(1);
+        Foo<? extends Integer> f2 = new Pos02.Foo<>(1);
+        Foo<?> f3 = new Pos02.Foo<>(1);
+        Foo<? super Integer> f4 = new Pos02.Foo<>(1);
+
+        Foo<Integer> f5 = new Pos02.Foo<>(1, "");
+        Foo<? extends Integer> f6 = new Pos02.Foo<>(1, "");
+        Foo<?> f7 = new Pos02.Foo<>(1, "");
+        Foo<? super Integer> f8 = new Pos02.Foo<>(1, "");
+    }
+
+    public static void main(String[] args) {
+        Pos02 p2 = new Pos02();
+        p2.testSimple();
+        p2.testQualified();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondPos3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondPos3.java
new file mode 100644
index 0000000..7cb0178
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondPos3.java
@@ -0,0 +1,50 @@
+public class Pos03<U> {
+
+    class Foo<V> {
+        Foo(V x) {}
+        <Z> Foo(V x, Z z) {}
+    }
+
+    void testSimple() {
+        Foo<Integer> f1 = new Foo<>(1);
+        Foo<? extends Integer> f2 = new Foo<>(1);
+        Foo<?> f3 = new Foo<>(1);
+        Foo<? super Integer> f4 = new Foo<>(1);
+
+        Foo<Integer> f5 = new Foo<>(1, "");
+        Foo<? extends Integer> f6 = new Foo<>(1, "");
+        Foo<?> f7 = new Foo<>(1, "");
+        Foo<? super Integer> f8 = new Foo<>(1, "");
+    }
+
+    void testQualified_1() {
+        Foo<Integer> f1 = new Pos03<U>.Foo<>(1);
+        Foo<? extends Integer> f2 = new Pos03<U>.Foo<>(1);
+        Foo<?> f3 = new Pos03<U>.Foo<>(1);
+        Foo<? super Integer> f4 = new Pos03<U>.Foo<>(1);
+
+        Foo<Integer> f5 = new Pos03<U>.Foo<>(1, "");
+        Foo<? extends Integer> f6 = new Pos03<U>.Foo<>(1, "");
+        Foo<?> f7 = new Pos03<U>.Foo<>(1, "");
+        Foo<? super Integer> f8 = new Pos03<U>.Foo<>(1, "");
+    }
+
+    void testQualified_2(Pos03<U> p) {
+        Foo<Integer> f1 = p.new Foo<>(1);
+        Foo<? extends Integer> f2 = p.new Foo<>(1);
+        Foo<?> f3 = p.new Foo<>(1);
+        Foo<? super Integer> f4 = p.new Foo<>(1);
+
+        Foo<Integer> f5 = p.new Foo<>(1, "");
+        Foo<? extends Integer> f6 = p.new Foo<>(1, "");
+        Foo<?> f7 = p.new Foo<>(1, "");
+        Foo<? super Integer> f8 = p.new Foo<>(1, "");
+    }
+
+    public static void main(String[] args) {
+        Pos03<String> p3 = new Pos03<>();
+        p3.testSimple();
+        p3.testQualified_1();
+        p3.testQualified_2(p3);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondPos4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondPos4.java
new file mode 100644
index 0000000..666acb8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondPos4.java
@@ -0,0 +1,23 @@
+public class Pos4<U> {
+
+    void test() {
+        class Foo<V> {
+            Foo(V x) {}
+            <Z> Foo(V x, Z z) {}
+        }
+        Foo<Integer> p1 = new Foo<>(1);
+        Foo<? extends Integer> p2 = new Foo<>(1);
+        Foo<?> p3 = new Foo<>(1);
+        Foo<? super Integer> p4 = new Foo<>(1);
+
+        Foo<Integer> p5 = new Foo<>(1, "");
+        Foo<? extends Integer> p6 = new Foo<>(1, "");
+        Foo<?> p7 = new Foo<>(1, "");
+        Foo<? super Integer> p8 = new Foo<>(1, "");
+    }
+
+    public static void main(String[] args) {
+        Pos4<String> p4 = new Pos4<>();
+        p4.test();
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondPos5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondPos5.java
new file mode 100644
index 0000000..1f60451
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondPos5.java
@@ -0,0 +1,12 @@
+public class Pos05 {
+
+    static class Foo<X> {
+        Foo(X x) {}
+    }
+
+    void m(Foo<Integer> fi) {}
+
+    void test() {
+        m(new Foo<>(1));
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondPos6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondPos6.java
new file mode 100644
index 0000000..35fc692
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondPos6.java
@@ -0,0 +1,20 @@
+class Pos06 {
+    static class Foo<X> {
+        Foo(X x) {  }
+    }
+
+    static class DoubleFoo<X,Y> {
+        DoubleFoo(X x,Y y) {  }
+    }
+
+    static class TripleFoo<X,Y,Z> {
+        TripleFoo(X x,Y y,Z z) {  }
+    }
+
+    Foo<? extends Integer> fi = new Foo<>(1);
+    Foo<?> fw = new Foo<>(fi);
+    Foo<? extends Double> fd = new Foo<>(3.0);
+    DoubleFoo<?,?> dw = new DoubleFoo<>(fi,fd);
+    Foo<String> fs = new Foo<>("one");
+    TripleFoo<?,?,?> tw = new TripleFoo<>(fi,fd,fs);
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondPos7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondPos7.java
new file mode 100644
index 0000000..958443e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondPos7.java
@@ -0,0 +1,12 @@
+class Pos07 {
+    static class Foo<X extends Number & Comparable<Number>> {}
+    static class DoubleFoo<X extends Number & Comparable<Number>,
+                           Y extends Number & Comparable<Number>> {}
+    static class TripleFoo<X extends Number & Comparable<Number>,
+                           Y extends Number & Comparable<Number>,
+                           Z> {}
+
+    Foo<?> fw = new Foo<>();
+    DoubleFoo<?,?> dw = new DoubleFoo<>();
+    TripleFoo<?,?,?> tw = new TripleFoo<>();
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondPos9.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondPos9.java
new file mode 100644
index 0000000..3d30861
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondPos9.java
@@ -0,0 +1,10 @@
+class Pos9<X> {
+
+    Pos9(X x) {}
+
+
+    Pos9<X> test(X x) {
+        return new Pos9<>(x);
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DuplicateAnnotations.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DuplicateAnnotations.java
new file mode 100644
index 0000000..db54aff
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DuplicateAnnotations.java
@@ -0,0 +1,4 @@
+class C{
+    @<error descr="Duplicate annotation">Deprecated</error> @<error descr="Duplicate annotation">Deprecated</error>
+    void foo(@<error descr="Duplicate annotation">Deprecated</error> @<error descr="Duplicate annotation">Deprecated</error> int x){}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DynamicallyAddIgnoredAnnotations.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DynamicallyAddIgnoredAnnotations.java
new file mode 100644
index 0000000..97d405d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DynamicallyAddIgnoredAnnotations.java
@@ -0,0 +1,9 @@
+
+public class <warning descr="Class 'WithMain' is never used">WithMain</warning> {
+  @MyAnno
+  public void <warning descr="Method 'myTestMethod()' is never used">myTestMethod</warning>(){}
+}
+
+@interface MyAnno {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/EnclosingInstance.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/EnclosingInstance.java
new file mode 100644
index 0000000..4906f54
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/EnclosingInstance.java
@@ -0,0 +1,22 @@
+class OtherClass {
+    public class InnerClass {}
+}
+
+class Main<B extends OtherClass.InnerClass> { }
+class Main1 extends <error descr="No enclosing instance of type 'OtherClass' is in scope">OtherClass.InnerClass</error> { }
+
+class NonDefaultConstructorContainer {
+    public class Inner {
+        public Inner(String s) {}
+    }
+}
+
+class UsageWithParenthesis extends NonDefaultConstructorContainer.Inner {
+    public UsageWithParenthesis() {
+       (new NonDefaultConstructorContainer()).super("");
+    }
+
+    public UsageWithParenthesis(NonDefaultConstructorContainer e) {
+       (e).super("");
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/EnumSyntheticMethods.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/EnumSyntheticMethods.java
new file mode 100644
index 0000000..ccfe537
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/EnumSyntheticMethods.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright 2000-2011 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.
+ */
+enum Color {
+  RED, GREEN, BLUE;
+
+  void foo () {
+    for (Color c : values ()) {
+    }
+
+    Color red = valueOf("RED");
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ErasureClashConfusion.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ErasureClashConfusion.java
new file mode 100644
index 0000000..e343bf8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ErasureClashConfusion.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2000-2011 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.
+ */
+import java.util.HashMap;
+import java.util.Map;
+
+// IDEA-69629
+class C {
+  public static interface GenericAgnosticProcessor {
+    void <warning descr="Method 'processMap(java.util.Map)' is never used">processMap</warning>(Map map);
+    //   ^^^ to cdr: should not be marked as unused
+  }
+
+  public static interface GenericAwareProcessor {
+    void <warning descr="Method 'processMap(java.util.Map<java.lang.String,java.lang.String>)' is never used">processMap</warning>(Map<String, String> map);
+    //   ^^^ to cdr: should not be marked as unused
+  }
+
+  public static class TestProcessor implements GenericAwareProcessor, GenericAgnosticProcessor {
+    @Override public void processMap(Map map) { }
+  }
+
+  public static void main(String[] args) {
+    final TestProcessor testProcessor = new TestProcessor();
+    testProcessor.processMap(new HashMap());
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ExtendsBound.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ExtendsBound.java
new file mode 100644
index 0000000..6b4862b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ExtendsBound.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2000-2011 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 ExtendsBound {
+  static class Entity<T, P> { }
+  static class Wrapper<E extends Entity<T, ?>, T> { }
+
+  static <T, E extends Entity<T, ?>> Wrapper<E, T> create1(T t) {
+    return new Wrapper<E, T>();
+  }
+
+  static <E extends Entity<T, ?>, T> Wrapper<E, T> create2(T t) {
+    return new Wrapper<E, T>();
+  }
+
+  static void test(Object o) {
+    create1(o);
+    create2(o);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ExtensionMethodSyntax.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ExtensionMethodSyntax.java
new file mode 100644
index 0000000..a5e0917
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ExtensionMethodSyntax.java
@@ -0,0 +1,8 @@
+interface I {
+  void m1() <error descr="Deprecated extension method syntax">default</error> { }
+
+  default void m2() <error descr="Deprecated extension method syntax">default</error> { }
+
+  @SuppressWarnings("extensionSyntax")
+  void m3() default { }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ExtensionMethods.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ExtensionMethods.java
new file mode 100644
index 0000000..a7fcb99
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ExtensionMethods.java
@@ -0,0 +1,64 @@
+/*
+ * 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 I {
+    int i = 42;
+    void m() default { }
+  }
+
+  interface II extends I {
+    void m() default {
+      I.super.m();
+      <error descr="Unqualified super reference is not allowed in extension method">super.m</error>();
+
+      System.out.println(I.super.i);
+      System.out.println<error descr="Cannot resolve method 'println(?)'">(<error descr="Unqualified super reference is not allowed in extension method">super.i</error>)</error>;
+    }
+
+    void ma();
+  }
+
+  void test() {
+    new I(){}.m();
+
+    new II() {
+      public void ma() {
+        <error descr="'C.I' is not an enclosing class">I.super</error>.m();
+        II.super.m();
+        <error descr="Abstract method 'ma()' cannot be accessed directly">II.super.ma()</error>;
+      }
+    }.m();
+  }
+}
+
+class D {
+  <error descr="Extension methods can only be used within an interface">void m()</error> default { }
+}
+
+interface IllegalMods {
+  <error descr="Illegal combination of modifiers: 'static' and 'abstract'">static</error> void m1();
+  <error descr="Illegal combination of modifiers: 'static' and 'default'">static</error> void m2() default { }
+  <error descr="Illegal combination of modifiers: 'static' and 'default'">static</error> <error descr="Illegal combination of modifiers: 'default' and 'static'">default</error> void m3() { }
+
+  <error descr="Illegal combination of modifiers: 'abstract' and 'default'">abstract</error> void m4() default { }
+  <error descr="Illegal combination of modifiers: 'abstract' and 'default'">abstract</error> <error descr="Illegal combination of modifiers: 'default' and 'abstract'">default</error> void m5() { }
+
+  <error descr="Extension method should have a body">default void m6()</error>;
+
+  <error descr="Modifier 'default' not allowed here">default</error> int i;
+  <error descr="Modifier 'default' not allowed here">default</error> interface X { }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/GenericsArrayCreation.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/GenericsArrayCreation.java
new file mode 100644
index 0000000..eae80e0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/GenericsArrayCreation.java
@@ -0,0 +1,8 @@
+class A<T> {
+    class B{}
+}
+class C<T> extends A<T> {
+    {
+        B[] o = <error descr="Generic array creation">{}</error>;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/HighlightInaccessibleFromClassModifierList.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/HighlightInaccessibleFromClassModifierList.java
new file mode 100644
index 0000000..e02db8f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/HighlightInaccessibleFromClassModifierList.java
@@ -0,0 +1,4 @@
+@SuppressWarnings(<error descr="'ThisClass.FOO' has private access in 'ThisClass'">ThisClass.FOO</error>)
+public class ThisClass {
+  private static final String FOO = "foo";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/IDEA84533.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/IDEA84533.java
new file mode 100644
index 0000000..23c27ee
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/IDEA84533.java
@@ -0,0 +1,19 @@
+public class Main {
+    static class A {}
+    static class B extends A {}
+    static class X<T> { }
+    static class Y<T> extends X<T> { }
+
+    private void test1(X<B> x) {
+        Y<A> y = <error descr="Inconvertible types; cannot cast 'Main.X<Main.B>' to 'Main.Y<Main.A>'">(Y<A>) x</error>;
+    }
+
+    private void test2(X<A> x) {
+        Y<A> y = (Y<A>) x;
+    }
+
+    private void test3(Y<B> y1) {
+        @SuppressWarnings("unchecked")
+        Y<A> y2 = <error descr="Inconvertible types; cannot cast 'Main.Y<Main.B>' to 'Main.Y<Main.A>'">(Y<A>) y1</error>;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ImprovedCatchAnalysis.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ImprovedCatchAnalysis.java
new file mode 100644
index 0000000..6593531
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ImprovedCatchAnalysis.java
@@ -0,0 +1,241 @@
+/*
+ * Copyright 2000-2011 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.
+ */
+import java.io.*;
+
+class C {
+  static class E extends Exception { }
+  static class RE extends RuntimeException { }
+
+  void f() { }
+  void g() throws E { }
+  void h() throws RE { }
+
+  void m0() {
+    try { throw new FileNotFoundException(); }
+    catch (FileNotFoundException e) { }
+    <warning descr="Unreachable section: exception 'java.io.FileNotFoundException' has already been caught">catch (IOException e) { }</warning>
+  }
+
+  void m1() {
+    try { throw new IOException(); }
+    catch (FileNotFoundException e) { }
+    catch (IOException e) { }
+  }
+
+  void m2() {
+    try { f(); }
+    catch (Exception e) { }
+  }
+
+  void m3() {
+    try { g(); }
+    catch (Exception e) { }
+  }
+
+  void m4() {
+    try { h(); }
+    catch (Exception e) { }
+  }
+
+  void m5() {
+    try { f(); }
+    catch (Throwable t) { }
+  }
+
+  void m6() {
+    try { g(); }
+    catch (Throwable t) { }
+  }
+
+  void m7() {
+    try { h(); }
+    catch (Throwable t) { }
+  }
+
+  void m9() {
+    try { f(); }
+    catch (Error e) { }
+    catch (Throwable t) { }
+  }
+
+  void m10() {
+    try { g(); }
+    catch (Error e) { }
+    catch (Throwable t) { }
+  }
+
+  void m11() {
+    try { h(); }
+    catch (Error e) { }
+    catch (Throwable t) { }
+  }
+
+  void m12() {
+    try { f(); }
+    catch (RuntimeException e) { }
+    catch (Throwable t) { }
+  }
+
+  void m13() {
+    try { g(); }
+    catch (RuntimeException e) { }
+    catch (Throwable t) { }
+  }
+
+  void m14() {
+    try { h(); }
+    catch (RuntimeException e) { }
+    catch (Throwable t) { }
+  }
+
+  void m15() {
+    try { f(); }
+    catch (RuntimeException e) { }
+    catch (Exception e) { }
+  }
+
+  void m16() {
+    try { g(); }
+    catch (RuntimeException e) { }
+    catch (Exception e) { }
+  }
+
+  void m17() {
+    try { h(); }
+    catch (RuntimeException e) { }
+    catch (Exception e) { }
+  }
+
+  void m18() {
+    try { f(); }
+    catch (RuntimeException e) { }
+    catch (<error descr="Exception 'C.E' is never thrown in the corresponding try block">E e</error>) { }
+    catch (Exception e) { }
+  }
+
+  void m19() {
+    try { g(); }
+    catch (RuntimeException e) { }
+    catch (E e) { }
+    catch (Exception e) { }
+  }
+
+  void m20() {
+    try { h(); }
+    catch (RuntimeException e) { }
+    catch (<error descr="Exception 'C.E' is never thrown in the corresponding try block">E e</error>) { }
+    catch (Exception e) { }
+  }
+
+  void m21() {
+    try { f(); }
+    catch (RuntimeException e) { }
+    catch (Exception e) { }
+  }
+
+  void m22() {
+    try { g(); }
+    catch (RuntimeException e) { }
+    catch (Exception e) { }
+  }
+
+  void m23() {
+    try { h(); }
+    catch (RuntimeException e) { }
+    catch (Exception e) { }
+  }
+
+  void m24() {
+    try { f(); }
+    catch (RuntimeException e) { }
+    catch (Error e) { }
+    catch (Throwable t) { }
+  }
+
+  void m25() {
+    try { g(); }
+    catch (RuntimeException e) { }
+    catch (Error e) { }
+    catch (Throwable t) { }
+  }
+
+  void m26() {
+    try { h(); }
+    catch (RuntimeException e) { }
+    catch (Error e) { }
+    catch (Throwable t) { }
+  }
+
+  void m27() {
+    try { f(); }
+    catch (RuntimeException e) { }
+    catch (Error e) { }
+    catch (<error descr="Exception 'C.E' is never thrown in the corresponding try block">E e</error>) { }
+    catch (Throwable t) { }
+  }
+
+  void m28() {
+    try { g(); }
+    catch (RuntimeException e) { }
+    catch (Error e) { }
+    catch (E e) { }
+    catch (Throwable t) { }
+  }
+
+  void m29() {
+    try { h(); }
+    catch (RuntimeException e) { }
+    catch (Error e) { }
+    catch (<error descr="Exception 'C.E' is never thrown in the corresponding try block">E e</error>) { }
+    catch (Throwable t) { }
+  }
+
+  void m30() {
+    try { f(); }
+    catch (RuntimeException e) { }
+    catch (Error e) { }
+    catch (Throwable t) { }
+  }
+
+  void m31() {
+    try { g(); }
+    catch (RuntimeException e) { }
+    catch (Error e) { }
+    catch (Throwable t) { }
+  }
+
+  void m32() {
+    try { h(); }
+    catch (RuntimeException e) { }
+    catch (Error e) { }
+    catch (Throwable t) { }
+  }
+
+  void m33() {
+    try { g(); }
+    catch (E e) { }
+  }
+
+  void m34() {
+    try { h(); }
+    catch (<error descr="Exception 'C.E' is never thrown in the corresponding try block">E e</error>) { }
+  }
+
+  void m35() {
+    try { f(); }
+    catch (<error descr="Exception 'C.E' is never thrown in the corresponding try block">E e</error>) { }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/InnerInTypeArguments.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/InnerInTypeArguments.java
new file mode 100644
index 0000000..594fee2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/InnerInTypeArguments.java
@@ -0,0 +1,3 @@
+class A<T extends <error descr="'A.B' has private access in 'A'">A<T>.B</error>> {
+    private class B {}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/Java7CastConventions.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/Java7CastConventions.java
new file mode 100644
index 0000000..3703715
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/Java7CastConventions.java
@@ -0,0 +1,7 @@
+class Test {
+  public static void main(String[] args) {
+    Object o = null;
+    if (o == 1) {}
+    if (1 == o) {}
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/JavacQuirks.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/JavacQuirks.java
new file mode 100644
index 0000000..e95529c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/JavacQuirks.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2000-2011 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.
+ */
+import java.lang.Object;
+
+class C {
+  @interface TestAnnotation {
+    int[] value();
+  }
+
+  @TestAnnotation({0, 1<warning descr="Trailing comma in annotation array initializer may cause compilation error in some Javac versions (e.g. JDK 5 and JDK 6).">,</warning>})
+  void m() { }
+
+  class A<T> {
+    class B<V> {
+      void m(T t, V v) { System.out.println(t + ", " + v); }
+    }
+  }
+
+  void m(Object o) {
+    if (o instanceof A<?>.B<?>) {
+      final A<?>.B<?> b = (A<warning descr="Generics in qualifier reference may cause compilation error in some Javac versions (e.g. JDK 5 and JDK 6)."><?></warning>.B<?>)o;
+      b.m(null, null);
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/LambdaExpressions.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/LambdaExpressions.java
new file mode 100644
index 0000000..2ab94e1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/LambdaExpressions.java
@@ -0,0 +1,39 @@
+/*
+ * 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.
+ */
+
+import java.util.*;
+
+class C {
+  interface Simplest {
+    void m();
+  }
+  void use(Simplest s) { }
+
+  interface IntParser {
+    int parse(String s);
+  }
+
+  void test() {
+    Simplest simplest = () -> { };
+    use(() -> { });
+
+    IntParser intParser = (String s) -> Integer.parseInt(s);
+  }
+
+  Runnable foo() {
+    return () -> { System.out.println("foo"); };
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/MethodReferences.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/MethodReferences.java
new file mode 100644
index 0000000..e69bfbd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/MethodReferences.java
@@ -0,0 +1,28 @@
+/*
+ * 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 use(Simplest s) { }
+
+  void test() {
+    Simplest simplest = this::simplest;
+    use(this::simplest);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/MultiCatch.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/MultiCatch.java
new file mode 100644
index 0000000..94e9448
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/MultiCatch.java
@@ -0,0 +1,88 @@
+/*
+ * 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.
+ */
+abstract class C {
+  private static class NE { }
+  private static class E extends Exception { public String s; }
+  private static class E1 extends E { }
+  private static class E2 extends E { }
+  private static class E3 extends E { }
+  private static class E4 extends E { }
+  private static class RE extends RuntimeException { }
+  private interface I<T> { void i(); }
+  private static class IE1 extends E implements I<Integer> { public void i() { } }
+  private static class IE2 extends E implements I<Long> { public void i() { } }
+  private static class F<X> { F(X x) { } }
+
+  abstract void f() throws E1, E2;
+  abstract void g() throws IE1, IE2;
+
+  <T extends Throwable> void m() {
+    try { f(); } catch (E1 | E2 e) { }
+    try { f(); } catch (E2 | E1 e) { e.printStackTrace(); System.out.println(e.s); }
+    try { f(); } catch (E2 | E1 e) { } catch (E e) { } catch (RE e) { }
+    try { g(); } catch (IE1 | IE2 e) { E ee = e; I ii = e; e.i(); }
+    try { g(); } catch (IE1 | IE2 e) { F<?> f = new F<>(e); }
+    try { g(); } catch (IE1 | IE2 e) { new F<I<? extends Number>>(e); }
+
+    try { } catch (<error descr="Incompatible types. Found: 'C.RE | C.NE', required: 'java.lang.Throwable'">RE | NE e</error>) { }
+    try { } catch (<error descr="Incompatible types. Found: 'C.RE | C.NE[]', required: 'java.lang.Throwable'">RE | NE e[]</error>) { }
+    try { f(); } catch (<error descr="Incompatible types. Found: 'C.E | T[]', required: 'java.lang.Throwable'">E | T e[]</error>) { } catch(E e) { }
+    try { f(); } catch (E | <error descr="Cannot catch type parameters">T</error> e) { }
+
+    try { f(); } catch (<error descr="Types in multi-catch must be disjoint: 'C.E1' is a subclass of 'C.E'">E1</error> | E ignore) { }
+    try { f(); } catch (E | <error descr="Types in multi-catch must be disjoint: 'C.E1' is a subclass of 'C.E'">E1</error> ignore) { }
+    try { f(); } catch (<error descr="Types in multi-catch must be disjoint: 'C.E' is a subclass of 'C.E'">E</error> | E ignore) { }
+
+    try { f(); } catch (E1 | E2 | <error descr="Exception 'C.E3' is never thrown in the corresponding try block">E3</error> e) { }
+    try { f(); } catch (<error descr="Exception 'C.E3' is never thrown in the corresponding try block">E3</error> | <error descr="Exception 'C.E4' is never thrown in the corresponding try block">E4</error> | RE e) { } catch (E e) { }
+    try { <error descr="Unhandled exceptions: C.E1, C.E2">f();</error> } catch (E3 | E4 | RE e) { }
+
+    try { f(); } catch (E e) { } catch (<error descr="Exception 'C.E1' has already been caught">E1</error> | <error descr="Exception 'C.E3' has already been caught">E3</error> e) { }
+    try { f(); } catch (E1 | E2 e) { } catch (<error descr="Exception 'C.E2' has already been caught">E2</error> e) { }
+
+    try { f(); } catch (E1 | E2 e) { <error descr="Incompatible types. Found: 'C.E1 | C.E2', required: 'C.E2'">E2 ee = e;</error> }
+    try { f(); } catch (E1 | E2 e) { <error descr="Cannot assign a value to final variable 'e'">e = new E1()</error>; }
+    try { f(); } catch (E1 | E2 e) { <error descr="Incompatible types. Found: 'C.E', required: 'C.E1 | C.E2'">e = new E()</error>; }
+
+    try { g(); }
+    catch (IE1 | IE2 e) {
+      Class<? extends E> clazz1 = e.getClass();
+      <error descr="Incompatible types. Found: 'java.lang.Class<? extends C.E>', required: 'java.lang.Class<? extends C.IE1>'">Class<? extends IE1> clazz2 = e.getClass();</error>
+      <error descr="Incompatible types. Found: 'java.lang.Class<? extends C.E>', required: 'java.lang.Class<? extends C.I>'">Class<? extends I> clazz3 = e.getClass();</error>
+    }
+
+    try { f(); }
+    catch (<error descr="Incompatible types. Found: 'int | C.E', required: 'java.lang.Throwable'">int | E e</error>) { }
+  }
+}
+
+class D {
+  static class E extends Exception { }
+  static interface I { void i(); }
+  static class E1 extends E implements I { public void i() { } }
+  static class E2 extends E implements I { public void i() { } }
+
+  void m(boolean f) {
+    try {
+      if (f)
+        throw new E1();
+      else
+        throw new E2();
+    } catch (E1|E2 e) {
+      System.out.println(e);
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/NumericLiterals.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/NumericLiterals.java
new file mode 100644
index 0000000..bf9f96f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/NumericLiterals.java
@@ -0,0 +1,45 @@
+public class NumericLiterals {
+  void f() {
+    int i1 = 1_2;
+    int i2 = 012__34;
+    int i3 = 0x1_2_3_4;
+    int i4 = 0B0;
+    int i5 = 0b0001_0010_0100_1000;
+    int i6 = <error descr="Binary numbers must contain at least one binary digit">0b</error>;
+    int i7 = <error descr="Integer number too large">0b1_1111_1111_1111_1111_1111_1111_1111_1111</error>;
+
+    long l1 = 1_2L;
+    long l2 = 012__34l;
+    long l3 = 0x1_2_3_4L;
+    long l4 = 0B0L;
+    long l5 = 0b0001_0010_0100_1000l;
+    long l6 = <error descr="Binary numbers must contain at least one binary digit">0Bl</error>;
+    long l7 = <error descr="Long number too large">0B1_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111L</error>;
+
+    float f1 = 1_0f;
+    float f2 = 1e1_2f;
+    float f3 = 2_2.f;
+    float f4 = .3_3f;
+    float f5 = 3.14_16f;
+    float f6 = 6.022___137e+2_3f;
+    float f7 = 0xa_ap1_0f;
+    float f8 = 0xa_b.p22F;
+    float f9 = 0x.ab__cP0f;
+    float f10 = 0xa_bc.d_efP0F;
+    float f11= <error descr="Floating point number too small">1e-4__6f</error>;
+    float f12 = <error descr="Floating point number too large">1e3_9f</error>;
+
+    double d1 = 0_0d;
+    double d2 = 1e1_1;
+    double d3 = 2_2.;
+    double d4 = .3_3;
+    double d5 = 3.141_592;
+    double d6 = 1e-9_9d;
+    double d7 = 1e1__3_7;
+    double d8 = 0xa_ap1;
+    double d9 = 0xa_b.P1_2;
+    double d10 = 0x.a_bcP1___23d;
+    double d11 = <error descr="Floating point number too small">1e-3_2_4</error>;
+    double d12 = <error descr="Floating point number too large">0xa_bc.de_fP1_234D</error>;
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/PolymorphicTypeCast.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/PolymorphicTypeCast.java
new file mode 100644
index 0000000..8be16fc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/PolymorphicTypeCast.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright 2000-2011 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.
+ */
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+
+@SuppressWarnings({"UnusedDeclaration"})
+class C {
+  // from http://download.java.net/jdk7/docs/api/java/lang/invoke/MethodHandle.html, "Usage examples"
+  void m() throws Throwable {
+    Object x, y; String s; int i;
+    MethodType mt; MethodHandle mh;
+    MethodHandles.Lookup lookup = MethodHandles.lookup();
+
+// mt is (char,char)String
+    mt = MethodType.methodType(String.class, char.class, char.class);
+    mh = lookup.findVirtual(String.class, "replace", mt);
+    s = (String) mh.invokeExact("daddy",'d','n');
+
+// invokeExact(Ljava/lang/String;CC)Ljava/lang/String;
+    assert(s.equals("nanny"));
+
+// weakly typed invocation (using MHs.invoke)
+    s = (String) mh.invokeWithArguments("sappy", 'p', 'v');
+    assert(s.equals("savvy"));
+
+// mt is (Object[])List
+    mt = MethodType.methodType(java.util.List.class, Object[].class);
+    mh = lookup.findStatic(java.util.Arrays.class, "asList", mt);
+    assert(mh.isVarargsCollector());
+    x = mh.invokeGeneric("one", "two");
+
+// invokeGeneric(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;
+    assert(x.equals(java.util.Arrays.asList("one","two")));
+
+// mt is (Object,Object,Object)Object
+    mt = MethodType.genericMethodType(3);
+    mh = mh.asType(mt);
+    x = mh.invokeExact((Object)1, (Object)2, (Object)3);
+
+// invokeExact(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+    assert(x.equals(java.util.Arrays.asList(1,2,3)));
+
+// mt is int()
+    mt = MethodType.methodType(int.class);
+    mh = lookup.findVirtual(java.util.List.class, "size", mt);
+    i = (int) mh.invokeExact(java.util.Arrays.asList(1,2,3));
+
+// invokeExact(Ljava/util/List;)I
+    assert(i == 3);
+    mt = MethodType.methodType(void.class, String.class);
+    mh = lookup.findVirtual(java.io.PrintStream.class, "println", mt);
+    mh.invokeExact(System.out, "Hello, world.");
+// invokeExact(Ljava/io/PrintStream;Ljava/lang/String;)V
+
+    MethodHandle mh0 = lookup.findVirtual(String.class, "length", MethodType.methodType(int.class));
+    MethodHandle mh1 = MethodHandles.convertArguments(mh0, MethodType.methodType(Integer.class, String.class));
+    System.out.println((Integer) mh1.invokeExact("daddy"));
+  }
+  
+  void supported() {
+    Object o = 42;
+    int i = (int) o;
+    String s = "";
+    int i1 = <error descr="Inconvertible types; cannot cast 'java.lang.String' to 'int'">(int) s</error>;
+    System.out.println(i);
+    m((int) o);
+  }
+
+  void unsupported() {
+    Object o = 42;
+    if (<error descr="Inconvertible types; cannot cast 'java.lang.Object' to 'int'">o instanceof int</error>) {
+      int i = (Integer) o;
+      System.out.println(i);
+    }
+  }
+
+  void m(int i) { }
+  
+  void asLongs(Integer i) {
+      long l = (long) i;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/PreciseRethrow.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/PreciseRethrow.java
new file mode 100644
index 0000000..ad414fc6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/PreciseRethrow.java
@@ -0,0 +1,230 @@
+class C {
+  static class E extends Exception { }
+  static class E1 extends E { }
+  static class E2 extends E { }
+  static class Err extends Error { }
+
+  void m0() {
+    try {
+      throw new E1();
+    }
+    catch (Exception e) {
+      try {
+        // throws E1 in JDK7
+        <error descr="Unhandled exception: C.E1">throw e;</error>
+      } catch (E2 e2) { }
+    }
+  }
+
+  void m1() throws E1 {
+    try {
+      throw new E1();
+    }
+    catch (Exception e) {
+      try {
+        // throws E1 in JDK7
+        throw e;
+      } catch (<error descr="Exception 'C.E2' is never thrown in the corresponding try block">E2 e2</error>) { }
+    }
+  }
+
+  void m2() {
+    try {
+      throw new E1();
+    }
+    catch (Exception e) {
+      try {
+        if (true) {
+          <error descr="Unhandled exception: java.lang.Exception">throw e;</error>
+        }
+        e = new E1(); // analysis disabled, even by late assignment
+      }
+      catch (E2 e2) { }
+    }
+  }
+
+  void m3(boolean f) throws E1, E2 {
+    try {
+      if (f)
+        throw new E1();
+      else
+        throw new E2();
+    }
+    catch (Exception e) {
+      // read access doesn't disables an analysis
+      System.out.println(e);
+      // throws E1, E2 in JDK7
+      throw e;
+    }
+  }
+
+  void m4(boolean f) throws E1, E2 {
+    try {
+      if (f)
+        throw new E1();
+      else
+        throw new E2();
+    }
+    catch (Exception e) {
+      e = new E2(); // analysis disabled
+      <error descr="Unhandled exception: java.lang.Exception">throw e;</error>
+    }
+  }
+
+  void m5(boolean f) throws E {
+    try {
+      if (f)
+        throw new E1();
+      else if (!f)
+        throw new E2();
+      else
+        throw (Throwable)new E();
+    }
+    catch (E1 e1) { }
+    catch (final Exception e) {
+      // Throwable isn't a subtype of Exception
+      <error descr="Unhandled exception: java.lang.Exception">throw e;</error>
+    }
+    catch (Throwable t) { }
+  }
+
+  void m6(boolean f) throws E2 {
+    try {
+      if (f)
+        throw new E1();
+      else if (!f)
+        throw new E2();
+    }
+    catch (E1 e1) { }
+    catch (final Exception e) {
+      throw e;
+    }
+  }
+
+  void m7() {
+    try {
+      if (true)
+        throw new E1();
+      else if (false)
+        throw new E2();
+    }
+    catch (E e) {
+      // throws E1, E2 in JDK7
+      <error descr="Unhandled exceptions: C.E1, C.E2">throw e;</error>
+    }
+  }
+
+  void m8() throws E1 {
+    try {
+      if (true)
+        throw new E1();
+      else if (false)
+        throw new E2();
+    }
+    catch (E1 | E2 e) {
+      <error descr="Unhandled exception: C.E2">throw e;</error>
+    }
+  }
+
+  void m9() {
+    try {
+      throw new E1();
+    }
+    catch (E x) {
+      try {
+        throw x;
+      }
+      catch (E y) {
+        try {
+          throw y;
+        }
+        catch (E z) {
+          // chained exception type evaluation
+          <error descr="Unhandled exception: C.E1">throw z;</error>
+        }
+      }
+    }
+  }
+
+  void m10() {
+    try {
+      throw new E1();
+    }
+    catch (E e) {
+      E x = e;
+      // no chained exception type evaluation
+      <error descr="Unhandled exception: C.E">throw x;</error>
+    }
+  }
+
+  void m11_1() {
+    try {
+      System.out.println();
+    }
+    catch (Exception e) {
+      throw e;
+    }
+  }
+
+  void m11_2() {
+    try {
+      System.out.println();
+    }
+    catch (Error e) {
+      throw e;
+    }
+  }
+
+  void m11_3() {
+    try {
+      System.out.println();
+    }
+    catch (Err e) {
+      throw e;
+    }
+  }
+
+  void m11_4() {
+    try {
+      if (false) throw new RuntimeException();
+    }
+    catch (Exception e) {
+      throw e;
+    }
+  }
+
+  static class MyResource implements AutoCloseable {
+    public void close() throws E1 { }
+  }
+
+  MyResource getResource() throws E2 {
+    return null;
+  }
+
+  void m12() {
+    try (MyResource r = getResource()) {
+      System.out.println(r);
+    }
+    catch (Exception e) {
+      // test for another precise types calculation fix
+      <error descr="Unhandled exceptions: C.E1, C.E2">throw e;</error>
+    }
+  }
+
+  void m13() throws E1 {
+    try {
+      try {
+        if (true)
+          throw new E1();
+        else if (false)
+          throw new E2();
+      }
+      catch (E1 | E2 e) {
+        throw e;
+      }
+    }
+    catch (E2 e) {
+      throw new RuntimeException(e);
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/SafeVarargsApplicability.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/SafeVarargsApplicability.java
new file mode 100644
index 0000000..8530de7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/SafeVarargsApplicability.java
@@ -0,0 +1,61 @@
+import java.util.List;
+
+@<error descr="'@SafeVarargs' not applicable to type">SafeVarargs</error>
+public class SafeVarargsTests {
+    //fixed arity
+    <error descr="@SafeVarargs is not allowed on methods with fixed arity">@SafeVarargs</error>
+    public void testNonVarargs1(){}
+
+    <error descr="@SafeVarargs is not allowed on methods with fixed arity">@SafeVarargs</error>
+    public void testNonVarargs2(int <warning descr="Parameter 'i' is never used">i</warning>){}
+
+    <error descr="@SafeVarargs is not allowed on methods with fixed arity">@SafeVarargs</error>
+    public <T> void testNonVarargs3(T <warning descr="Parameter 't' is never used">t</warning>){}
+
+    //non static/non final
+    <error descr="@SafeVarargs is not allowed on non-final instance methods">@SafeVarargs</error>
+    public void testNonVarargs4(int... <warning descr="Parameter 'i' is never used">i</warning>){}
+
+    //reassigned
+    @SafeVarargs
+    public final <T> void testT(T[] tt, T... t) {
+        <warning descr="@SafeVarargs do not suppress potentially unsafe operations">t</warning> = tt;
+        System.out.println(t[0]);
+    }
+
+    //incorrect types
+    @SafeVarargs
+    public final void testString(<warning descr="@SafeVarargs is not applicable for reifiable types">String...</warning> <warning descr="Parameter 'str' is never used">str</warning>){
+    }
+
+    @SafeVarargs
+    public final void testStringArray(<warning descr="@SafeVarargs is not applicable for reifiable types">String[]...</warning> <warning descr="Parameter 'str' is never used">str</warning>){
+    }
+
+    @SafeVarargs
+    public static void testUnbound(<warning descr="@SafeVarargs is not applicable for reifiable types">List<?>...</warning> <warning descr="Parameter 't' is never used">t</warning>){}
+
+
+    //correct usages
+    @SafeVarargs
+    public static <T> void foo(T... <warning descr="Parameter 't' is never used">t</warning>){}
+    @SafeVarargs
+    public static <T> void foo1(List<T>... <warning descr="Parameter 't' is never used">t</warning>){}
+    @SafeVarargs
+    public static <T> void foo2(List<? extends T>... <warning descr="Parameter 't' is never used">t</warning>){}
+
+}
+
+abstract class AClass {
+    @SafeVarargs
+    <T> AClass(T... d){
+      System.out.println(d);
+    }
+}
+
+class ABClass extends AClass {
+    @SafeVarargs
+    <T> ABClass(T... d){
+        super(d);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/SuperBound.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/SuperBound.java
new file mode 100644
index 0000000..3ceb429
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/SuperBound.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2000-2011 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.
+ */
+import java.lang.Override;
+import java.util.List;
+public class Test
+{
+    public interface MyList<N extends Number> extends List<N>
+    {
+    }
+
+    void test(MyList<? super Integer> list)
+    {
+        Number n = list.get(0);
+    }
+}
+
+class Test1
+{
+    public interface MyList<N extends Number> extends List<N> {
+      @Override
+      N get(int index);
+    }
+
+    void test(MyList<? super Integer> list)
+    {
+        Number n = list.get(0);
+    }
+}
+
+class Test2
+{
+    public interface MyList<N extends Number>{
+      N get(int index);
+    }
+
+    void test(MyList<? super Integer> list)
+    {
+        Number n = list.get(0);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/SwitchByInaccessibleEnum.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/SwitchByInaccessibleEnum.java
new file mode 100644
index 0000000..7cdd90f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/SwitchByInaccessibleEnum.java
@@ -0,0 +1,23 @@
+interface A {
+    B getB();
+
+    class B {
+        public C c;
+
+        private enum C {
+            SOME
+        }
+    }
+}
+
+class D {
+    public static void f(A a) {
+        A.B b = a.getB();
+        switch (<error descr="A.B.C is inaccessible here">b.c</error>) {
+            case SOME:
+                break;
+        }
+    }
+
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/SwitchByString.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/SwitchByString.java
new file mode 100644
index 0000000..1f7253f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/SwitchByString.java
@@ -0,0 +1,41 @@
+public class Test {
+  private static final String BAZ = "baz";
+
+  private void stringSwitch() {
+    final String bar = "bar";
+    String key = "key";
+    switch (key) {
+      case "": {
+        System.out.println("Nothing");
+        break;
+      }
+      case "foo": // fallthrough works as before
+      case bar:   // local final variables are ok
+      case BAZ: { // constants are ok
+        System.out.println("Matched key");
+        break;
+      }
+      default:
+        break;
+    }
+  }
+
+  private void illegalStringSwitch() {
+    String foo = "foo";
+    String key = "key";
+    switch (key) {
+      case <error>foo</error>:
+      case <error>getStringValue()</error>: {
+        System.out.println("illegal");
+        break;
+      }
+      default:
+        break;
+    }
+  }
+
+  private String getStringValue() {
+    return "";
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/TryWithResources.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/TryWithResources.java
new file mode 100644
index 0000000..c0f8eb7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/TryWithResources.java
@@ -0,0 +1,93 @@
+/*
+ * 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 {
+  static class E extends Exception { }
+  static class E1 extends E { }
+  static class E2 extends E { }
+  static class E3 extends E { }
+
+  static class MyResource implements AutoCloseable {
+    public MyResource() throws E1 { }
+    public void doSomething() throws E2 { }
+    @Override public void close() throws E3 { }
+  }
+
+  static interface I extends AutoCloseable { }
+
+  void m1() {
+    try (MyResource r = new MyResource()) { r.doSomething(); }
+    catch (E1 | E2 | E3 ignore) { }
+
+    try (MyResource r = new MyResource()) { }
+    catch (E1 | E3 ignore) { }
+
+    try (<error descr="Unhandled exception from auto-closeable resource: C.E3">MyResource r = new MyResource()</error>) { }
+    catch (E1 e) { }
+
+    try (MyResource r = <error descr="Unhandled exception: C.E1">new MyResource()</error>) { }
+    catch (E3 e) { }
+
+    try (MyResource r = <error descr="Unhandled exception: C.E1">new MyResource()</error>) { }
+
+    try (<error descr="Unhandled exception from auto-closeable resource: java.lang.Exception">I r = null</error>) { System.out.println(r); }
+  }
+
+  void m2() throws Exception {
+    try (<error descr="Incompatible types. Found: 'java.lang.Object', required: 'java.lang.AutoCloseable'">Object r = new MyResource()</error>) { }
+
+    try (<error descr="Incompatible types. Found: 'java.lang.String', required: 'java.lang.AutoCloseable'">AutoCloseable r = "resource"</error>) { }
+  }
+
+  void m3(int p) throws Exception {
+    try (MyResource r = new MyResource()) {
+      r.doSomething();
+      <error descr="Cannot assign a value to final variable 'r'">r = null</error>;
+      int <error descr="Variable 'r' is already defined in the scope">r</error> = 0;
+    }
+    catch (E e) {
+      <error descr="Cannot resolve symbol 'r'">r</error> = null;
+    }
+    finally {
+      <error descr="Cannot resolve symbol 'r'">r</error> = null;
+    }
+    <error descr="Cannot resolve symbol 'r'">r</error> = null;
+
+    try (MyResource r = new MyResource(); MyResource <error descr="Variable 'r' is already defined in the scope">r</error> = new MyResource()) { }
+
+    try (MyResource r1 = new MyResource(); MyResource r2 = r1) { }
+
+    try (MyResource r1 = <error descr="Cannot resolve symbol 'r2'">r2</error>; MyResource r2 = r1) { }
+
+    MyResource r = null;
+    try (MyResource <error descr="Variable 'r' is already defined in the scope">r</error> = new MyResource()) { }
+    try (MyResource rr = r) { }
+
+    try (MyResource <error descr="Variable 'p' is already defined in the scope">p</error> = new MyResource()) { }
+    new Runnable() {
+      public void run() {
+        try (MyResource p = new MyResource()) { }
+        catch (E e) { }
+      }
+    }.run();
+  }
+
+  void m4() throws Exception {
+    try (MyResource r = <error descr="Variable 'r' might not have been initialized">r</error>) { }
+
+    MyResource r;
+    try (MyResource r1 = <error descr="Variable 'r' might not have been initialized">r</error>) { }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/TryWithResourcesWarn.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/TryWithResourcesWarn.java
new file mode 100644
index 0000000..b50a26e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/TryWithResourcesWarn.java
@@ -0,0 +1,26 @@
+class C {
+  static class MyResource implements AutoCloseable {
+    @Override public void close() { }
+  }
+
+  void m1() throws Exception {
+    try (MyResource r1 = new MyResource()) {
+      System.out.println(r1);
+    }
+
+    MyResource r2 = new MyResource();
+    try (MyResource r = r2) {
+      System.out.println(r);
+      System.out.println(r2);
+    }
+  }
+
+  void m2() throws Exception {
+    try (MyResource <warning descr="Variable 'r2' is never used">r2</warning> = new MyResource()) { }
+
+    MyResource <warning descr="Variable 'r3' is never assigned">r3</warning>;
+    try (MyResource r = <error descr="Variable 'r3' might not have been initialized">r3</error>) {
+      System.out.println(r);
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/UncheckedGenericsArrayCreation.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/UncheckedGenericsArrayCreation.java
new file mode 100644
index 0000000..8902887
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/UncheckedGenericsArrayCreation.java
@@ -0,0 +1,131 @@
+import java.util.*;
+
+public class Test {
+  static <T> List<T> asList(T... tt) {
+    System.out.println(tt);
+    return null;
+  }
+
+  @SafeVarargs
+  static <T> List<T> asListSuppressed(T... tt) {
+    System.out.println(tt);
+    return null;
+  }
+
+  static List<String> asStringList(List<String>... tt) {
+    return tt[0];
+  }
+
+  static List<?> asQList(List<?>... tt) {
+    return tt[0];
+  }
+
+  static List<?> asIntList(int... tt) {
+    System.out.println(tt);
+    return null;
+  }
+
+
+  public static void main(String[] args) {
+    <warning descr="Unchecked generics array creation for varargs parameter">asList</warning>(new ArrayList<String>());
+
+    asListSuppressed(new ArrayList<String>());
+
+    //noinspection unchecked
+    asList(new ArrayList<String>());
+
+    <warning descr="Unchecked generics array creation for varargs parameter">asStringList</warning>(new ArrayList<String>());
+
+    asQList(new ArrayList<String>());
+    asIntList(1);
+
+    final ArrayList<String> list = new ArrayList<String>();
+    <warning descr="Unchecked generics array creation for varargs parameter">asList</warning>(list);
+  }
+
+  public static <V> void join(V[] list) {
+    Arrays.asList(list);
+  }
+}
+
+class NoWarngs {
+    static final SemKey<String> FILE_DESCRIPTION_KEY = <warning descr="Unchecked generics array creation for varargs parameter">SemKey.createKey</warning>("FILE_DESCRIPTION_KEY");
+
+    void f() {
+        OCM<String> o =
+                new <warning descr="Unchecked generics array creation for varargs parameter">OCM<></warning>("", true, new Condition<String>(){
+            @Override
+            public boolean val(String s) {
+                return false;
+            }
+        }, Condition.TRUE);
+      System.out.println(o);
+    }
+}
+
+class SemKey<T extends String> {
+  private final String myDebugName;
+  private final SemKey<? super T>[] mySupers;
+
+  private SemKey(String debugName, SemKey<? super T>... supers) {
+    myDebugName = debugName;
+    System.out.println(myDebugName);
+    mySupers = supers;
+    System.out.println(mySupers);
+  }
+
+  public static <T extends String> SemKey<T> createKey(String debugName, SemKey<? super T>... supers) {
+    return new SemKey<T>(debugName, supers);
+  }
+
+  public <K extends T> SemKey<K> subKey(String debugName, SemKey<? super T>... otherSupers) {
+    if (otherSupers.length == 0) {
+      return new <warning descr="Unchecked generics array creation for varargs parameter">SemKey<K></warning>(debugName, this);
+    }
+    return new SemKey<K>(debugName, append(otherSupers, this));
+  }
+
+  public static <T> T[] append(final T[] src, final T element) {
+    return append(src, element, <warning descr="Unchecked cast: 'java.lang.Class<capture<?>>' to 'java.lang.Class<T>'">(Class<T>)src.getClass().getComponentType()</warning>);
+  }
+
+   public static <T> T[] append(T[] src, final T element, Class<T> componentType) {
+    int length = src.length;
+    T[] result = <warning descr="Unchecked cast: 'java.lang.Object' to 'T[]'">(T[])java.lang.reflect.Array.newInstance(componentType, length + 1)</warning>;
+    System.arraycopy(src, 0, result, 0, length);
+    result[length] = element;
+    return result;
+  }
+}
+
+interface Condition<T> {
+   boolean val(T t);
+
+   Condition TRUE = new Condition() {
+       @Override
+       public boolean val(Object o) {
+           return true;
+       }
+   };
+}
+class OCM<T> {
+    OCM(T s, boolean b, Condition<T>... c) {
+      System.out.println(s);
+      System.out.println(b);
+      System.out.println(c);
+    }
+
+    OCM(T s, Condition<T>... c) {
+      this(s, false, c);
+    }
+}
+
+class TPSubstitution<T> {
+    public void f(T... args) {
+      System.out.println(args);
+    }
+
+    public void g() {
+        new TPSubstitution<String>().f();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/UncheckedWarning.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/UncheckedWarning.java
new file mode 100644
index 0000000..2ff1154
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/UncheckedWarning.java
@@ -0,0 +1,6 @@
+class Test {
+  {
+    Class foo = Object.class;
+    <warning descr="Unchecked call to 'isAssignableFrom(Class<?>)' as a member of raw type 'java.lang.Class'">foo.isAssignableFrom</warning>(Object.class);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/UncheckedWarningIDEA21432.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/UncheckedWarningIDEA21432.java
new file mode 100644
index 0000000..7cb66c4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/UncheckedWarningIDEA21432.java
@@ -0,0 +1,23 @@
+
+import java.util.Map;
+
+public class MissingWarning {
+
+  static final Map<String, String> VALID_VALUES_BY_KEY = <warning descr="Unchecked generics array creation for varargs parameter">newExceptionOnNullHashMap</warning>(
+    "Invalid key",
+    newEntry("key1", "valA"), // <<--- compiler warning on this line
+    newEntry("key2", "valB"),
+    newEntry("key3", "valC"),
+    newEntry("key4", "valD")
+  );
+
+  public static <K, V> Map<K, V> newExceptionOnNullHashMap(final String <warning descr="Parameter 'exceptionMessage' is never used">exceptionMessage</warning>,
+                                                           Map.Entry<K, V>... <warning descr="Parameter 'entries' is never used">entries</warning>)
+  {
+    return null;
+  }
+
+  public static <K, V> Map.Entry<K, V> newEntry(K <warning descr="Parameter 'key' is never used">key</warning>, V <warning descr="Parameter 'value' is never used">value</warning>) {
+    return null;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/UncheckedWarningIDEA26738.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/UncheckedWarningIDEA26738.java
new file mode 100644
index 0000000..824982c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/UncheckedWarningIDEA26738.java
@@ -0,0 +1,19 @@
+import java.util.Collection;
+
+
+class UncheckedBug
+{
+
+  void foo(Collection<String> strings) {
+    assertThat(strings, hasSize(0));
+  }
+
+  public static <E> Matcher<Collection<? extends E>> hasSize(int <warning descr="Parameter 'size' is never used">size</warning>) {
+    return null;
+  }
+
+  public static <T> void assertThat(T <warning descr="Parameter 'actual' is never used">actual</warning>, Matcher<? super T> <warning descr="Parameter 'matcher' is never used">matcher</warning>) {
+  }
+
+  interface Matcher<<warning descr="Type parameter 'T' is never used">T</warning>> {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/UncheckedWarningIDEA59290.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/UncheckedWarningIDEA59290.java
new file mode 100644
index 0000000..0e3103c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/UncheckedWarningIDEA59290.java
@@ -0,0 +1,12 @@
+import java.util.*;
+class Test {
+  { 
+    List<? super CharSequence> list = new ArrayList<CharSequence>();
+    List<? super String> foo = list;
+    System.out.println(foo);
+
+    List<? extends String> list1 = new ArrayList<String>();
+    List<? extends CharSequence> foo1 = list1;
+    System.out.println(foo1);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/UncheckedWarningIDEA60166.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/UncheckedWarningIDEA60166.java
new file mode 100644
index 0000000..60690b6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/UncheckedWarningIDEA60166.java
@@ -0,0 +1,15 @@
+class Node<E> {
+  public class Details {
+    public E data;
+  }
+  public Details addNode(Node<E> <warning descr="Parameter 'child' is never used">child</warning>) {
+    return new Details();
+  }
+}
+class Test5_1 {
+  static Node<String>.Details details;
+  public static void main(String[] args) {
+    Node<String> stringNode = new Node<String>();
+    details = <warning descr="Unchecked assignment: 'Node.Details' to 'Node<java.lang.String>.Details'">(Node.Details)stringNode.addNode(new Node<String>())</warning>;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/UncheckedWarningIDEA70620.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/UncheckedWarningIDEA70620.java
new file mode 100644
index 0000000..df856ae
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/UncheckedWarningIDEA70620.java
@@ -0,0 +1,29 @@
+class UncheckedCastFalsePositive<T> {
+
+  private void <warning descr="Private method 'test(java.lang.Object, java.lang.Object)' is never used">test</warning>( Object one, Object two ) {
+    @SuppressWarnings( "unchecked" )
+    UncheckedCastFalsePositive<T> outer = ( UncheckedCastFalsePositive<T> ) one;
+    System.out.println(outer);
+
+    InnerClass inner = <warning descr="Unchecked cast: 'java.lang.Object' to 'UncheckedCastFalsePositive.InnerClass'">( InnerClass ) two</warning>;
+    System.out.println(inner);
+  }
+
+  private class InnerClass {}
+}
+
+
+class UncheckedCastFalsePositive1<T> {
+
+  private void <warning descr="Private method 'test(java.lang.Object, java.lang.Object)' is never used">test</warning>( Object one, Object two ) {
+    @SuppressWarnings( "unchecked" )
+    UncheckedCastFalsePositive1<T> outer = ( UncheckedCastFalsePositive1<T> ) one;
+    System.out.println(outer);
+
+    UncheckedCastFalsePositive1<T>.InnerClass inner = <warning descr="Unchecked cast: 'java.lang.Object' to 'UncheckedCastFalsePositive1<T>.InnerClass'">( UncheckedCastFalsePositive1<T>.InnerClass ) two</warning>;
+    System.out.println(inner);
+  }
+
+  private class InnerClass {}
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/Unused.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/Unused.java
new file mode 100644
index 0000000..1c30504
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/Unused.java
@@ -0,0 +1,67 @@
+/*
+ * 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.
+ */
+import java.io.*;
+import java.net.*;
+
+class UnusedDeclBug {
+    public static enum Concern {
+        // These fields are used!  Just because I don't mention them by name
+        // doesn't mean they aren't used!
+        // IDEA tells me I need: @SuppressWarnings({"UnusedDeclaration"})
+        LOW,
+        MEDIUM,
+        HIGH;
+    };
+
+    public static void main(String[] args) {
+        System.out.println("Concerns are:");
+
+        // Invoking Concern.values() should count as using all the fields in the
+        // enum.
+        for (Concern concern : Concern.values()) {
+            System.out.print("\t");
+            System.out.println(concern);
+        } // end for
+    }
+}
+
+class ForEachTest {
+  public static void main(String[] args) {
+    int count = 0;
+    for (String ignore : args) {
+      count++;
+    }
+    System.out.println(count);
+  }
+}
+
+class TryWithResourcesTest {
+  public static void main(String[] args) {
+    System.out.println(checkUrl("bad url"));
+  }
+
+  private static String checkUrl(String url) {
+    try {
+      URLConnection connection = new URL(url).openConnection();
+      try (InputStream ignored = connection.getInputStream()) {
+        return connection.getURL().toString();
+      }
+    }
+    catch (IOException e) {
+      return null;
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/UsedMethodsByMethodReferences.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/UsedMethodsByMethodReferences.java
new file mode 100644
index 0000000..c5d0900
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/UsedMethodsByMethodReferences.java
@@ -0,0 +1,12 @@
+class C {
+  interface Simplest {
+    void m();
+  }
+  private static void simplest1() { }
+  private static void <warning descr="Private method 'simplest()' is never used">simplest</warning>() { }
+
+  public static void main(String[] args) {
+    Simplest o = C::simplest1;
+    System.out.println(o);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/WrongArgsAndUnknownTypeParams.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/WrongArgsAndUnknownTypeParams.java
new file mode 100644
index 0000000..5bfe17c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/WrongArgsAndUnknownTypeParams.java
@@ -0,0 +1,11 @@
+class TcpConnection extends ClientConnection {
+    ConnectionEventDelegate<? extends ClientConnection> eventDelegate;
+    {
+        eventDelegate.<ClientConnection> onDisconnect<error descr="'onDisconnect(capture<? extends ClientConnection>)' in 'ConnectionEventDelegate' cannot be applied to '(TcpConnection)'">(this)</error>;
+    }
+}
+
+class ClientConnection {}
+interface ConnectionEventDelegate<T extends ClientConnection> {
+    void onDisconnect(T t);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguous/pck/AmbiguousMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguous/pck/AmbiguousMethodCall.java
new file mode 100644
index 0000000..2adaecd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguous/pck/AmbiguousMethodCall.java
@@ -0,0 +1,21 @@
+package pck;
+
+import java.util.List;
+
+import static pck.C.foo;
+import static pck.D.foo;
+
+class C {
+    static <T> void foo(List<? extends List<T>> x) { }
+}
+
+class D {
+    static <T> String foo(List<List<T>> x) { return null; }
+}
+
+public class Main {
+    public static void main(String[] args){
+        List<List<String>> x = null;
+        foo(x).toLowerCase();
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousArrayInSubst/pck/AmbiguousMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousArrayInSubst/pck/AmbiguousMethodCall.java
new file mode 100644
index 0000000..da83342
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousArrayInSubst/pck/AmbiguousMethodCall.java
@@ -0,0 +1,21 @@
+package pck;
+
+import java.util.List;
+
+import static pck.C.foo;
+import static pck.D.foo;
+
+class C {
+    static <T> void foo(List<T> x) { }
+}
+
+class D {
+    static <T> String foo(List<T[]> x) { return null; }
+}
+
+public class Main {
+    public static void main(String[] args){
+        List<String[]> x = null;
+        foo(x).toLowerCase();
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA21660/pck/AmbiguousMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA21660/pck/AmbiguousMethodCall.java
new file mode 100644
index 0000000..fd7315d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA21660/pck/AmbiguousMethodCall.java
@@ -0,0 +1,15 @@
+package pck;
+
+class TestCase {
+  void assertEquals(Object o1, Object o2) {}
+
+  void assertEquals(int i1, int i2) {}
+}
+
+class Test extends TestCase {
+  void test() {
+    int expected = 1;
+    Integer actual = 2;
+    assertEquals<error descr="Ambiguous method call: both 'TestCase.assertEquals(Object, Object)' and 'TestCase.assertEquals(int, int)' match">(expected, actual)</error>;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA22547/pck/AmbiguousMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA22547/pck/AmbiguousMethodCall.java
new file mode 100644
index 0000000..e91fac5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA22547/pck/AmbiguousMethodCall.java
@@ -0,0 +1,30 @@
+/*
+ * 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.
+ */
+package pck;
+
+import static pck.Assert.assertEquals;
+
+class Assert {
+  static void assertEquals(Object o1, Object o2) {}
+
+  static void assertEquals(long l1, long l2) {}
+}
+
+class Test {
+  void test() {
+    assertEquals<error descr="Ambiguous method call: both 'Assert.assertEquals(Object, Object)' and 'Assert.assertEquals(long, long)' match">(100L, Long.valueOf(100L))</error>;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA24768/pck/AmbiguousMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA24768/pck/AmbiguousMethodCall.java
new file mode 100644
index 0000000..c8e9832
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA24768/pck/AmbiguousMethodCall.java
@@ -0,0 +1,43 @@
+/*
+ * 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.
+ */
+package pck;
+
+import java.util.ArrayList;
+import java.util.List;
+
+class IdeaBug {
+
+  public static void main(String[] args) {
+    ClassA.copyOf(new ArrayList<String>());
+  }
+
+  private static class ClassA<E> extends ClassB<E> {
+
+    <error descr="'copyOf(Iterable<? extends E>)' in 'pck.IdeaBug.ClassA' clashes with 'copyOf(Iterable<? extends E>)' in 'pck.IdeaBug.ClassB'; both methods have same erasure, yet neither hides the other">public static <E extends Comparable<? super E>> ClassA<E> copyOf(
+        Iterable<? extends E> elements)</error> {
+      System.out.println("Hello from ClassA");
+      return null;
+    }
+  }
+
+  private static class ClassB<E> {
+
+    public static <E> ClassA<E> copyOf(Iterable<? extends E> elements) {
+      System.out.println("Hello from ClassB");
+      return null;
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA25097/pck/AmbiguousMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA25097/pck/AmbiguousMethodCall.java
new file mode 100644
index 0000000..685ba7e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA25097/pck/AmbiguousMethodCall.java
@@ -0,0 +1,29 @@
+/*
+ * 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.
+ */
+package pck;
+class Generics<T> {
+  public void render(T t) {
+    System.out.println("generic");
+  }
+
+  public void render(Integer t) {
+    System.out.println("int");
+  }
+
+  static {
+    new Generics<Integer>().render<error descr="Ambiguous method call: both 'Generics.render(Integer)' and 'Generics.render(Integer)' match">(5)</error>;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA57269/pck/AmbiguousMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA57269/pck/AmbiguousMethodCall.java
new file mode 100644
index 0000000..78af069
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA57269/pck/AmbiguousMethodCall.java
@@ -0,0 +1,19 @@
+package pck;
+
+class A {
+  <T> void foo(T x) {
+    foo(1);
+
+    long x1 = 1L;
+    foo(x1);
+    
+    Long x2 = 1L;
+    foo(x2);
+    
+    Integer x3 = 1;
+    foo(x3);
+  }
+
+  void foo(long x) {
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA57278/pck/AmbiguousMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA57278/pck/AmbiguousMethodCall.java
new file mode 100644
index 0000000..6ab825a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA57278/pck/AmbiguousMethodCall.java
@@ -0,0 +1,12 @@
+package pck;
+
+interface I{
+    <T extends Iterable<String> & Cloneable> void foo();
+}
+
+abstract class A {
+    abstract <T extends Iterable<String>> void foo();
+    <T extends A & I> void bar(T x){
+        x.foo<error descr="Ambiguous method call: both 'A.foo()' and 'I.foo()' match">()</error>;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA57306/pck/AmbiguousMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA57306/pck/AmbiguousMethodCall.java
new file mode 100644
index 0000000..0e7807d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA57306/pck/AmbiguousMethodCall.java
@@ -0,0 +1,15 @@
+package pck;
+
+class A<T> {}
+
+interface IA{
+    <T> void foo(A<T> x);
+}
+interface IB{
+    <T extends Exception> void foo(A<T> x);
+}
+class C {
+    <<error descr="'foo(A<T>)' in 'pck.IB' clashes with 'foo(A<T>)' in 'pck.IA'; both methods have same erasure, yet neither overrides the other"></error>T extends IA & IB> void bar(T x, A<Exception> y){
+        x.foo(y);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA57317/pck/AmbiguousMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA57317/pck/AmbiguousMethodCall.java
new file mode 100644
index 0000000..128fbe1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA57317/pck/AmbiguousMethodCall.java
@@ -0,0 +1,11 @@
+package pck;
+
+class B<K> {}
+class A<K> extends B<K> {
+    void foo(A<A<String>> b){
+        bar<error descr="Ambiguous method call: both 'A.bar(B<? extends A<String>>)' and 'A.bar(A<? extends B<String>>)' match">(b)</error>;
+    }
+
+    <T> void bar(B<? extends A<T>> a){}
+    <T> void bar(A<? extends B<T>> a){}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA57535/pck/AmbiguousMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA57535/pck/AmbiguousMethodCall.java
new file mode 100644
index 0000000..3949a2d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA57535/pck/AmbiguousMethodCall.java
@@ -0,0 +1,9 @@
+package pck;
+
+abstract class C{
+    abstract <T extends Comparable<?>> void foo(T x);
+    abstract <T extends Number & Comparable<?>> void foo(T x);
+    void bar(Integer x){
+        foo(x);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA67573/pck/AmbiguousMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA67573/pck/AmbiguousMethodCall.java
new file mode 100644
index 0000000..b63b6aa
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA67573/pck/AmbiguousMethodCall.java
@@ -0,0 +1,17 @@
+interface A
+{
+    abstract void foo(String[] ... s);
+}
+
+interface B
+{
+    abstract void foo(String[] s);
+}
+
+class C<T extends A & B>
+{
+    void bar(T x)
+    {
+        x.foo(null);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA67832/pck/AmbiguousMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA67832/pck/AmbiguousMethodCall.java
new file mode 100644
index 0000000..45910d1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA67832/pck/AmbiguousMethodCall.java
@@ -0,0 +1,17 @@
+package pck;
+import static pck.D.foo;
+import static pck.C.foo;
+
+public class C {
+     public static <T extends Comparable<S>, S> void foo(T x){}
+}
+
+class D {
+     public static <T extends Comparable<?>> void foo(T x){}
+}
+
+class B{
+    {
+       foo<error descr="Ambiguous method call: both 'D.foo(Integer)' and 'C.foo(Integer)' match">(1)</error>;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA67837/pck/AmbiguousMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA67837/pck/AmbiguousMethodCall.java
new file mode 100644
index 0000000..0fbc5bc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA67837/pck/AmbiguousMethodCall.java
@@ -0,0 +1,18 @@
+package pck;
+
+import static pck.D.foo;
+import static pck.C.foo;
+
+public class C {
+     public static <T> void foo(Comparable<? extends Comparable<T>> x){}
+}
+
+class D {
+    public static void foo(Comparable<? extends Number> x){}
+}
+
+class B{
+    public static void bar(){
+        foo<error descr="Ambiguous method call: both 'D.foo(Comparable<? extends Number>)' and 'C.foo(Comparable<? extends Comparable<Integer>>)' match">(1)</error>;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA78027/pck/AmbiguousMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA78027/pck/AmbiguousMethodCall.java
new file mode 100644
index 0000000..00016a2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA78027/pck/AmbiguousMethodCall.java
@@ -0,0 +1,17 @@
+package pck;
+class Test {
+   void test() {
+       B.method(new ArgumentB());
+   }
+}
+
+class A {
+   static void method(ArgumentA a) { }
+}
+
+class B extends A {
+   static void method(ArgumentB b) { }
+}
+
+class ArgumentA<T> {}
+class ArgumentB extends ArgumentA<Object> {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA87672/pck/AmbiguousMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA87672/pck/AmbiguousMethodCall.java
new file mode 100644
index 0000000..82bbf00
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA87672/pck/AmbiguousMethodCall.java
@@ -0,0 +1,23 @@
+package pck;
+class BaseMatcher<T> {
+}
+
+class MyMatcher extends BaseMatcher<String> {
+}
+
+class Expectations {
+    public <T> T with(T t) {
+        System.out.println("T");
+        return null;
+    }
+
+    public <T> T with(BaseMatcher<T> m) {
+        return null;
+    }
+
+    public static void main(String[] args) {
+        MyMatcher t = new MyMatcher();
+        String w = new Expectations().with( t);
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousInferenceOrder/pck/AmbiguousMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousInferenceOrder/pck/AmbiguousMethodCall.java
new file mode 100644
index 0000000..fc2ebd9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousInferenceOrder/pck/AmbiguousMethodCall.java
@@ -0,0 +1,37 @@
+/*
+ * 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.
+ */
+package pck;
+
+class Key<K>{}
+
+public class C {
+     public <T> void putCopyableUserData(Key<T> key, T value) {
+     }
+}
+
+interface D {
+  <T> void putCopyableUserData(Key<T> key, T value);
+}
+
+class B extends C implements D {}
+
+class A {
+  private static final Key<Integer> INDENT_INFO = new Key<Integer>();
+  
+  public static void foo(B b, int oldIndentation) {
+    b.putCopyableUserData(INDENT_INFO, oldIndentation >= 0 ? oldIndentation : null);
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousInheritance/pck/AmbiguousMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousInheritance/pck/AmbiguousMethodCall.java
new file mode 100644
index 0000000..580a30a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousInheritance/pck/AmbiguousMethodCall.java
@@ -0,0 +1,16 @@
+package pck;
+
+interface A<T>
+{
+    T foo();
+}
+
+interface B<T> extends A<T[]> { }
+
+class C<T extends A<Object[]> & B<?>>
+{
+    void foo(T x)
+    {
+        Object[] foo = x.foo();
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousInheritance1/pck/AmbiguousMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousInheritance1/pck/AmbiguousMethodCall.java
new file mode 100644
index 0000000..66d939f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousInheritance1/pck/AmbiguousMethodCall.java
@@ -0,0 +1,31 @@
+/*
+ * 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.
+ */
+package pck;
+
+interface A<T> 
+{
+    T foo();
+}
+
+interface B<T extends Cloneable> extends A<T> { }
+
+class C<T extends A<?> & B<?>>
+{
+    void bar(T x)
+    {
+        x.foo();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousMultiIntInheritance/pck/AmbiguousMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousMultiIntInheritance/pck/AmbiguousMethodCall.java
new file mode 100644
index 0000000..9f4ff3a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousMultiIntInheritance/pck/AmbiguousMethodCall.java
@@ -0,0 +1,28 @@
+package pck;
+
+interface IA<T> {
+    T a();
+}
+
+interface IB {
+    String a();
+}
+
+abstract class C implements IA<String>, IB {
+
+    {
+        a();
+    }
+}
+
+
+interface IAO {
+    Object a();
+}
+
+abstract class CO implements IAO, IB {
+
+    {
+        a();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousMultipleTypeParamExtends/pck/AmbiguousMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousMultipleTypeParamExtends/pck/AmbiguousMethodCall.java
new file mode 100644
index 0000000..b23579e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousMultipleTypeParamExtends/pck/AmbiguousMethodCall.java
@@ -0,0 +1,43 @@
+/*
+ * 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.
+ */
+package pck;
+
+interface IA<T> {
+    T a();
+}
+
+interface IB {
+    String a();
+}
+
+abstract class C implements IA<String>, IB {
+
+    {
+        a();
+    }
+}
+
+
+interface IAO {
+    Object a();
+}
+
+abstract class CO implements IAO, IB {
+
+    {
+        a();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousMultipleTypeParamExtends1/pck/AmbiguousMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousMultipleTypeParamExtends1/pck/AmbiguousMethodCall.java
new file mode 100644
index 0000000..8cfbc7d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousMultipleTypeParamExtends1/pck/AmbiguousMethodCall.java
@@ -0,0 +1,15 @@
+package pck;
+
+class A<T> {}
+
+interface IA{
+    void foo(A<?> x);
+}
+interface IB{
+    <T> void foo(A<T> x);
+}
+class C {
+    <<error descr="'foo(A<T>)' in 'pck.IB' clashes with 'foo(A<?>)' in 'pck.IA'; both methods have same erasure, yet neither overrides the other"></error>T extends IA & IB> void bar(T x, A<String> y){
+        x.foo<error descr="Ambiguous method call: both 'IA.foo(A<?>)' and 'IB.foo(A<String>)' match">(y)</error>;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousMultipleTypeParamExtends2/pck/AmbiguousMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousMultipleTypeParamExtends2/pck/AmbiguousMethodCall.java
new file mode 100644
index 0000000..c8c3ba1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousMultipleTypeParamExtends2/pck/AmbiguousMethodCall.java
@@ -0,0 +1,15 @@
+package pck;
+
+class A<T> {}
+
+interface IA{
+    <T> void foo(A<A<T>> x);
+}
+interface IB{
+    <T> void foo(A<? super A<T>> x);
+}
+class C {
+    <<error descr="'foo(A<A<T>>)' in 'pck.IA' clashes with 'foo(A<? super A<T>>)' in 'pck.IB'; both methods have same erasure, yet neither overrides the other"></error>T extends IB & IA> void bar(T x, A<A<String>> y){
+        x.foo(y);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousMultipleTypeParamExtends3/pck/AmbiguousMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousMultipleTypeParamExtends3/pck/AmbiguousMethodCall.java
new file mode 100644
index 0000000..d9b729b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousMultipleTypeParamExtends3/pck/AmbiguousMethodCall.java
@@ -0,0 +1,11 @@
+package pck;
+
+class B<K> {}
+class A<K> extends B<K> {
+    void foo(A<A<String>> b){
+        bar(b);
+    }
+
+    <T> void bar(B<? extends A<?>> a){}
+    <T> void bar(A<? extends A<T>> a){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousTypeParamExtends/pck/AmbiguousMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousTypeParamExtends/pck/AmbiguousMethodCall.java
new file mode 100644
index 0000000..8689693
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousTypeParamExtends/pck/AmbiguousMethodCall.java
@@ -0,0 +1,21 @@
+package pck;
+
+import java.util.List;
+
+import static pck.C.foo;
+import static pck.D.foo;
+
+class C {
+    static <T> void foo(List<T> x) { }
+}
+
+class D {
+    static <T extends List<?>> String foo(List<T> x) { return null; }
+}
+
+public class Main {
+    public static void main(String[] args){
+        List<List<String>> x = null;
+        foo(x).toCharArray();
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousTypeParamNmb/pck/AmbiguousMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousTypeParamNmb/pck/AmbiguousMethodCall.java
new file mode 100644
index 0000000..db291ad
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousTypeParamNmb/pck/AmbiguousMethodCall.java
@@ -0,0 +1,16 @@
+package pck;
+import static pck.C.foo;
+import static pck.D.foo;
+
+public class C {
+     public static void foo(){}
+}
+class D {
+     public static <T> void foo(){}
+}
+
+class B {
+    {
+        foo<error descr="Ambiguous method call: both 'C.foo()' and 'D.foo()' match">()</error>;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousTypeParamNmb1/pck/AmbiguousMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousTypeParamNmb1/pck/AmbiguousMethodCall.java
new file mode 100644
index 0000000..d030dd3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousTypeParamNmb1/pck/AmbiguousMethodCall.java
@@ -0,0 +1,17 @@
+package pck;
+import static pck.D.foo;
+import static pck.C.foo;
+
+public class C {
+     public static <T> void foo(Comparable<T> x){}
+}
+
+class D {
+    public static void foo(Comparable<?> x){}
+}
+
+class B{
+    public static void bar(Comparable<?> x){
+        foo<error descr="Ambiguous method call: both 'D.foo(Comparable<?>)' and 'C.foo(Comparable<?>)' match">(x)</error>;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousVarargs/pck/AmbiguousMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousVarargs/pck/AmbiguousMethodCall.java
new file mode 100644
index 0000000..d1b1202
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousVarargs/pck/AmbiguousMethodCall.java
@@ -0,0 +1,32 @@
+/*
+ * 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.
+ */
+package pck;
+abstract class A {
+    abstract void foo(Object... x);
+    abstract void foo(int... x);
+
+    {
+        foo<error descr="Ambiguous method call: both 'A.foo(Object...)' and 'A.foo(int...)' match">(1)</error>;
+    }
+}
+abstract class A1 {
+    abstract void foo(double ... x);
+    abstract void foo(int... x);
+
+    {
+        foo(1);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousVarargs1/pck/AmbiguousMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousVarargs1/pck/AmbiguousMethodCall.java
new file mode 100644
index 0000000..b12298e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousVarargs1/pck/AmbiguousMethodCall.java
@@ -0,0 +1,9 @@
+package pck;
+
+abstract class A {
+    abstract <T> void foo(T... y);
+    abstract <T> void foo(T[]... y);
+    void bar(){
+        foo();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/staticImportConflict/Usage.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/staticImportConflict/Usage.java
new file mode 100644
index 0000000..dcbc8cc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/staticImportConflict/Usage.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2000-2011 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.
+ */
+import x.Base1;
+import static x.Base2.F;
+import static x.Base1.m;
+import static x.Base2.m;
+import static <error descr="Field 'IF' is ambiguous in a single static import">x.Base2.II.IF</error>;
+
+class Usage {
+  void use() {
+    m(Base1.F); //Base1.m(int)
+    m(F); //Base2.m(float), float Base2.F
+    F.class.getName(); // class Base2.F
+    m<error descr="Cannot resolve method 'm(?)'">(<error descr="Reference to 'IF' is ambiguous, both 'I1.IF' and 'I2.IF' match">IF</error>)</error>;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/staticImportConflict/UsageMixed.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/staticImportConflict/UsageMixed.java
new file mode 100644
index 0000000..9b5acd3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/staticImportConflict/UsageMixed.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright 2000-2011 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.
+ */
+import x.Base1.D;
+import static <error descr="'D' is already defined in a single-type import">x.Base2.D</error>;
+
+class UsageMixed {
+  void use() {
+    <error descr="Reference to 'D' is ambiguous, both 'x.Base1.D' and 'x.Base2.D' match">D</error>.class.getName();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/staticImportConflict/UsageOnDemand.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/staticImportConflict/UsageOnDemand.java
new file mode 100644
index 0000000..6413c89
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/staticImportConflict/UsageOnDemand.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2000-2011 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.
+ */
+import x.E;
+import static x.Base1.*;
+import static x.Base2.*;
+
+class UsageOnDemand {
+  void use() {
+    m(1); //Base1.m(int)
+    m(1.0f); //Base2.m(float)
+    E.class.getName();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/staticImportConflict/x/Base1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/staticImportConflict/x/Base1.java
new file mode 100644
index 0000000..8dc9bb8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/staticImportConflict/x/Base1.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2000-2011 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.
+ */
+package x;
+
+public class Base1 {
+  public static final int F = 1;
+  public static void m(int i) { }
+  public static class F { }
+  public static class D { }
+  public interface I1 {
+    int IF = 1;
+  }
+  public interface I2 {
+    float IF = 2.0f;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/staticImportConflict/x/Base2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/staticImportConflict/x/Base2.java
new file mode 100644
index 0000000..c27f307
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/staticImportConflict/x/Base2.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright 2000-2011 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.
+ */
+package x;
+
+public class Base2 extends Base1 {
+  public static final float F = 2.0f;
+  public static void m(float f) { }
+  public static class F { }
+  public static class D { }
+  public interface II extends I1, I2 { }
+  public enum E { }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/staticImportConflict/x/E.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/staticImportConflict/x/E.java
new file mode 100644
index 0000000..ed901f8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/staticImportConflict/x/E.java
@@ -0,0 +1,18 @@
+/*
+ * Copyright 2000-2011 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.
+ */
+package x;
+
+public class E { }
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/staticImports/P1/C1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/staticImports/P1/C1.java
new file mode 100644
index 0000000..a8a05c5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/staticImports/P1/C1.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2000-2011 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.
+ */
+package P1;
+
+public class C1 {
+    public static int Foo;
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/staticImports/P1/C2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/staticImports/P1/C2.java
new file mode 100644
index 0000000..7aec4b5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/staticImports/P1/C2.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2000-2011 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.
+ */
+package P1;
+
+public class C2 {
+    public static int Foo;
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/staticImports/P1/MethodShadowing.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/staticImports/P1/MethodShadowing.java
new file mode 100644
index 0000000..694ceda
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/staticImports/P1/MethodShadowing.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2000-2011 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.
+ */
+package P1;
+
+import static P1.Outside.getObject;
+
+class Outside {
+  static Object getObject(Object dummy) { return "Static"; }
+}
+
+class Base {
+  Object getObject() { return "Instance"; }
+}
+
+class Derived extends Base {
+  final static Object o1 = <error descr="Non-static method 'getObject()' cannot be referenced from a static context">getObject</error>(null);
+  final Object o2 = getObject<error descr="'getObject()' in 'P1.Base' cannot be applied to '(null)'">(null)</error>;
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/staticImports/staticImports.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/staticImports/staticImports.java
new file mode 100644
index 0000000..c62c70c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/staticImports/staticImports.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright 2000-2011 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.
+ */
+import static P1.C1.<error descr="Cannot resolve symbol 'Bar'">Bar</error>;
+import static P1.C1.Foo;
+import static <error descr="Field 'Foo' is already defined in a single static import">P1.C2.Foo</error>;
+
+import static java.lang.Byte.valueOf;
+import static java.lang.Integer.valueOf;
+
+class C {}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/ambiguousCalls/BoxingAndStaticMethods.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/ambiguousCalls/BoxingAndStaticMethods.java
new file mode 100644
index 0000000..487bcd2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/ambiguousCalls/BoxingAndStaticMethods.java
@@ -0,0 +1,47 @@
+import java.util.Collections;
+import java.util.Iterator;
+
+public class AmbiguousTest extends AbstractTest {
+  public void testFoo() {
+    Iterator<Integer> list = Collections.singleton(1).iterator();
+    assertEquals<error descr="Ambiguous method call: both 'Assert.assertEquals(Object, Object)' and 'Assert.assertEquals(long, long)' match">(1, list.next())</error>;
+  }
+}
+
+abstract class AbstractTest extends Assert {
+  public static void assertEquals(float expected, float actual) {
+    Assert.assertEquals(expected, actual, 0.00001);
+  }
+}
+class Assert  {
+    protected Assert() { /* compiled code */ }
+    public static void assertEquals(java.lang.String message, java.lang.Object expected, java.lang.Object actual) { /* compiled code */ }
+    public static void assertEquals(java.lang.Object expected, java.lang.Object actual) { /* compiled code */ }
+    public static void assertEquals(java.lang.String message, double expected, double actual, double delta) { /* compiled code */ }
+    public static void assertEquals(long expected, long actual) { /* compiled code */ }
+    public static void assertEquals(java.lang.String message, long expected, long actual) { /* compiled code */ }
+    /**
+     * @deprecated
+     */
+    @java.lang.Deprecated
+    public static void assertEquals(double expected, double actual) { /* compiled code */ }
+    
+    /**
+     * @deprecated
+     */
+    @java.lang.Deprecated
+    public static void assertEquals(java.lang.String message, double expected, double actual) { /* compiled code */ }
+    
+    public static void assertEquals(double expected, double actual, double delta) { /* compiled code */ }
+    /**
+     * @deprecated
+     */
+    @java.lang.Deprecated
+    public static void assertEquals(java.lang.String message, java.lang.Object[] expecteds, java.lang.Object[] actuals) { /* compiled code */ }
+    
+    /**
+     * @deprecated
+     */
+    @java.lang.Deprecated
+    public static void assertEquals(java.lang.Object[] expecteds, java.lang.Object[] actuals) { /* compiled code */ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/ambiguousCalls/MultipleInheritance.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/ambiguousCalls/MultipleInheritance.java
new file mode 100644
index 0000000..85e6c32
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/ambiguousCalls/MultipleInheritance.java
@@ -0,0 +1,28 @@
+class A<T>{}
+
+    interface I<Q extends I<Q>> {
+        Q from(A<?>... paths);
+    }
+
+    interface II extends I<II> {}
+    class C<Q extends C<Q>> {
+        public Q from(A<?>... args) {return null;}
+    }
+    class AC<Q extends AC<Q>>  extends C<Q> {}
+    class CC extends AC<CC> implements II {
+      void bar() {
+        from(null);
+      }
+      
+      static void barStatic() {
+        <error descr="Non-static method 'from(A<?>...)' cannot be referenced from a static context">from</error>(null);
+      }
+    }
+
+class Test {
+ 
+    void foo(CC a){
+        a.from(null);
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/cannotFindMethod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/cannotFindMethod.java
new file mode 100644
index 0000000..57736e6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/cannotFindMethod.java
@@ -0,0 +1,6 @@
+@interface Ann {
+    int u () default 0;
+}
+
+@Ann(<error descr="Cannot resolve method 'v'">v</error>=0) class D {
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/duplicateAnnotation.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/duplicateAnnotation.java
new file mode 100644
index 0000000..9153da7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/duplicateAnnotation.java
@@ -0,0 +1,10 @@
+@interface Ann {
+}
+
+@<error descr="Duplicate annotation">Ann</error> @<error descr="Duplicate annotation">Ann</error> class D {
+}
+
+@SuppressWarnings({})
+@<error descr="Annotation type expected">java.lang</error>
+class PsiDa {
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/duplicateAttribute.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/duplicateAttribute.java
new file mode 100644
index 0000000..8e21546
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/duplicateAttribute.java
@@ -0,0 +1,5 @@
+@interface A {
+  int value();
+}
+
+@A(value = 0, <error descr="Duplicate attribute 'value'">value = 1</error>) class C {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/duplicateTarget.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/duplicateTarget.java
new file mode 100644
index 0000000..9fc29f7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/duplicateTarget.java
@@ -0,0 +1,5 @@
+import java.lang.annotation.Target;
+import java.lang.annotation.ElementType;
+
+@Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.TYPE, <error descr="Repeated annotation target">ElementType.ANNOTATION_TYPE</error>})
+@interface A {}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/inapplicable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/inapplicable.java
new file mode 100644
index 0000000..9e8921c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/inapplicable.java
@@ -0,0 +1,8 @@
+import java.lang.annotation.*;
+
+//OK
+@Target({ElementType.TYPE})
+@Expose @interface Expose {}
+
+@Target({ElementType.FIELD})
+@<error descr="'@Expose1' not applicable to annotation type">Expose1</error>@interface Expose1 {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/incompatibleType1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/incompatibleType1.java
new file mode 100644
index 0000000..a25c02a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/incompatibleType1.java
@@ -0,0 +1,6 @@
+@interface Ann {
+    int u () default 0;
+}
+
+@Ann(u=<error descr="Incompatible types. Found: 'double', required: 'int'">0.0</error>) class D {
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/incompatibleType2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/incompatibleType2.java
new file mode 100644
index 0000000..43b753d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/incompatibleType2.java
@@ -0,0 +1,6 @@
+@interface Ann {
+    int[] u () default 0;
+}
+
+@Ann(u=0) class D {
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/incompatibleType3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/incompatibleType3.java
new file mode 100644
index 0000000..8e9412a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/incompatibleType3.java
@@ -0,0 +1,6 @@
+@interface Ann {
+    short[] u () default 0;
+}
+
+@Ann(u={<error descr="Incompatible types. Found: 'int', required: 'short'">2222222</error>}) class D {
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/incompatibleType4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/incompatibleType4.java
new file mode 100644
index 0000000..ad5bb48
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/incompatibleType4.java
@@ -0,0 +1,15 @@
+@interface Ann {
+    Inner1 inner ();
+}
+
+@interface Inner1 {
+  int i ();
+}
+
+@interface Inner2 {
+  int i ();
+}
+
+
+@Ann(inner=<error descr="Incompatible types. Found: 'Inner2', required: 'Inner1'">@Inner2(i=0)</error>) class D {
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/incompatibleType5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/incompatibleType5.java
new file mode 100644
index 0000000..33967c5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/incompatibleType5.java
@@ -0,0 +1,13 @@
+@interface Ann {
+    Class type();
+}
+
+class C {
+  private static final Class<C> THIS_TYPE = C.class;
+
+  @Ann(type = <error descr="Attribute value must be a class literal">THIS_TYPE</error>)
+  void bad() { }
+
+  @Ann(type = C.class)
+  void good() { }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/invalidPackageAnnotationTarget/package-info.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/invalidPackageAnnotationTarget/package-info.java
new file mode 100644
index 0000000..e9ba3f7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/invalidPackageAnnotationTarget/package-info.java
@@ -0,0 +1 @@
+@<error descr="'@SuppressWarnings' not applicable to package">SuppressWarnings</error>("all") package annotations.invalidPackageAnnotationTarget;
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/invalidType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/invalidType.java
new file mode 100644
index 0000000..c3915c6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/invalidType.java
@@ -0,0 +1,8 @@
+class Clazz {}
+
+@interface Ann {
+    <error descr="Invalid type for annotation member">Clazz</error> i ();
+    <error descr="Cyclic annotation element type">Ann</error> j ();
+
+    <error descr="Invalid type for annotation member">void</error> f(); 
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/missingAttribute.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/missingAttribute.java
new file mode 100644
index 0000000..8380750
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/missingAttribute.java
@@ -0,0 +1,6 @@
+@interface Ann {
+    int i ();
+}
+
+@<error descr="'i' missing though required">Ann</error>() class D {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/nonConstantInitializer.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/nonConstantInitializer.java
new file mode 100644
index 0000000..c8998b2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/nonConstantInitializer.java
@@ -0,0 +1,18 @@
+@interface Ann {
+    int i ();
+
+    String[] j();
+}
+
+class D {
+    int field;
+    @Ann(i=<error descr="Attribute value must be constant">field</error>) void foo () {}
+
+    @Ann(j={<error descr="Attribute value must be constant">null</error>}) void bar() {}
+}
+
+@interface ManistaDouble
+{
+    public abstract double defaultValue() default Double.NaN; 
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/notValueNameOmitted.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/notValueNameOmitted.java
new file mode 100644
index 0000000..bc04a6f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/notValueNameOmitted.java
@@ -0,0 +1,14 @@
+@interface Ann {
+    int u () default 0;
+}
+
+@Ann(<error descr="Cannot find method 'value'">0</error>) class D {
+}
+
+@In(""<error descr="Annotation attribute must be of the form 'name=value'">,</error> create = "") 
+class ZZZ {
+}
+@interface In {
+    String value();
+    String create();
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/packageAnnotationNotInPackageInfo/notPackageInfo.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/packageAnnotationNotInPackageInfo/notPackageInfo.java
new file mode 100644
index 0000000..d3f9a87
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/packageAnnotationNotInPackageInfo/notPackageInfo.java
@@ -0,0 +1 @@
+<error descr="Package annotations should be in file package-info.java">@Deprecated</error> package annotations.packageAnnotationNotInPackageInfo; 
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/typeAnnotations.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/typeAnnotations.java
new file mode 100644
index 0000000..0f0f6f6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/typeAnnotations.java
@@ -0,0 +1,33 @@
+import java.lang.annotation.Target;
+import java.lang.annotation.ElementType;
+import java.util.*;
+
+@Target({ElementType.TYPE_USE/*, ElementType.TYPE*/})
+@interface TA {
+}
+
+@<error descr="'@TA' not applicable to type">TA</error>
+class X0<@<error descr="'@TA' not applicable to type parameter">TA</error> T> {
+    @TA
+    protected
+    void f() @<error descr="'@TA' not applicable to parameter">TA</error>  {
+        @TA String p=new @TA String();
+
+        if (this instanceof @TA Object) return;
+        String o = p;
+        List<@TA String> l;
+        Class c = @TA String.class;
+    }
+
+    @TA int @TA[] methodf() throws @TA Exception {
+        boolean a = this instanceof @TA X0;
+        X0<@<error descr="Duplicate annotation">TA</error> @<error descr="Duplicate annotation">TA</error> X0> c = new @TA X0<@TA X0>();
+        Object o = (@TA Object) c;
+        @TA X0.field = null;
+        return null;
+    }
+
+    @TA() int @TA[] p;
+    static @TA Object field;
+    @TA List<String> disambiguateBetweenBinaryExpr;
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/wrongPlace.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/wrongPlace.java
new file mode 100644
index 0000000..212d074
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/wrongPlace.java
@@ -0,0 +1,30 @@
+import java.util.Collection;
+
+@interface Anno {
+  Anno[] nested() default {};
+}
+
+abstract class C {
+  abstract void f();
+
+  void wrong() {
+    <error descr="Annotations are not allowed here">@Anno</error> f();
+  }
+
+  @Anno(nested = {@Anno, @Anno})
+  void notWrong() { }
+}
+
+class B extends <error descr="Annotations are not allowed here">@Deprecated</error> Object { }
+
+enum E {
+  @Anno E1
+}
+
+interface I {
+  @<error descr="Duplicate annotation">Anno</error> public @<error descr="Duplicate annotation">Anno</error> Collection<<error descr="Annotations are not allowed here">@Anno</error> String> method(@<error descr="Duplicate annotation">Anno</error> @<error descr="Duplicate annotation">Anno</error> Object o);
+}
+
+@interface Caller {
+  Anno anno() default @Anno;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/AnnotationsAsPartOfModifierList.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/AnnotationsAsPartOfModifierList.java
new file mode 100644
index 0000000..3fca0c0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/AnnotationsAsPartOfModifierList.java
@@ -0,0 +1,9 @@
+@Deprecated @SuppressWarnings("")
+<error descr="Class 'Foo' must either be declared abstract or implement abstract method 'run()' in 'Runnable'">public class Foo implements Runnable</error> {
+
+}
+
+class F {
+  @Deprecated @SuppressWarnings("") <error descr="'f()' is already defined in 'F'">void f()</error> {}
+  @Deprecated @SuppressWarnings("") <error descr="'f()' is already defined in 'F'">void f()</error> {}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/Autoboxing.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/Autoboxing.java
new file mode 100644
index 0000000..8ecc864
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/Autoboxing.java
@@ -0,0 +1,69 @@
+public class Autoboxing {
+    public boolean compare(short s, Integer i) {
+         return i == s; //OK, i is unboxed
+    }
+
+    public boolean compare(Short s, Integer i) {
+         return <error descr="Operator '==' cannot be applied to 'java.lang.Integer', 'java.lang.Short'">i == s</error>; //comparing as references
+    }
+
+    void f(Integer i) {
+      switch(i) {
+       default:
+      }
+    }
+
+    {
+      Object data = 1;
+      boolean is1 = <error descr="Operator '==' cannot be applied to 'java.lang.Object', 'int'">data == 1</error>;
+    }
+
+    //IDEADEV-5549: Short and double are convertible
+    public static double f () {
+      Short s = 0;
+      return (double)s;
+    }
+
+    //IDEADEV-5613
+    class DumbTest {
+      private long eventId;
+
+      public int hashCode() {
+        return ((Long) eventId).hashCode();
+      }
+    }
+
+    public static void main(String[] args) {
+        Long l = 0L;
+        Short s = 0;
+
+        int d = <error descr="Inconvertible types; cannot cast 'java.lang.Long' to 'int'">(int)l</error>;
+        d = (int)s;
+
+        short t = 0;
+        Integer d1 = <error descr="Inconvertible types; cannot cast 'short' to 'java.lang.Integer'">(Integer) t</error>;
+        Byte b = <error descr="Inconvertible types; cannot cast 'short' to 'java.lang.Byte'">(Byte) t</error>;
+
+    }
+
+  {
+    {
+      boolean cond = true;
+      // test for JLS3 bug, see http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6888770
+      Byte B = 0;
+      byte b = 0;
+      byte value = cond ? B : b;  /////////
+
+      short s = 0;
+      Short S = 0;
+      short rs = cond ? S : s;
+
+      char c = 0;
+      Character C = 0;
+      char rc = cond ? C : c;
+
+      boolean bb = cond ? Boolean.FALSE : true;
+    }
+    
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/AutoboxingConstructors.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/AutoboxingConstructors.java
new file mode 100644
index 0000000..12c5332
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/AutoboxingConstructors.java
@@ -0,0 +1,13 @@
+public class Test {
+
+    public Test(Object a) {
+    }
+
+    public Test(int i) {
+        this(new Integer(i));
+    }
+
+    public Test(long l) {
+        this(new Long(l));
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/AutoboxingMethods.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/AutoboxingMethods.java
new file mode 100644
index 0000000..d020997
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/AutoboxingMethods.java
@@ -0,0 +1,44 @@
+public class Autoboxing {
+    void method(int i) {
+        System.out.println("i = " + i);
+    }
+
+    void method(Integer integer) {
+        System.out.println("integer = " + integer);
+    }
+
+    void m1(Integer integer) { }
+    void m2(int i) { }
+
+    {
+        method(10);
+        method(new Integer(10));
+        m1(10);
+        m1(new Integer(10));
+        m2(10);
+        m2(new Integer(10));
+    }
+}
+public class Autoboxing1 {
+    void method(String s, int i) {
+        System.out.println("i = " + i);
+    }
+
+    void method(String s, Object o) {
+        System.out.println("integer = " + o);
+    }
+
+    {
+        method("abc", new Integer(10));
+        method("abc", 10);
+    }
+}
+
+class BoxingConflict {
+    public static void main(String[] args) {
+        add<error descr="Ambiguous method call: both 'BoxingConflict.add(long, Long)' and 'BoxingConflict.add(Long, Long)' match">(0L, 0L)</error>;
+    }
+
+    public static void add(long k, Long v) { }
+    public static void add(Long k, Long v) { }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/CapturedWildcardAssignments.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/CapturedWildcardAssignments.java
new file mode 100644
index 0000000..b750cd2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/CapturedWildcardAssignments.java
@@ -0,0 +1,39 @@
+/*
+ * 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.
+ */
+
+import java.util.*;
+
+public class Test {
+    public static void bar() {
+      <error descr="Incompatible types. Found: 'java.lang.Class<capture<? extends java.util.Iterator>>', required: 'java.lang.Class<? extends java.util.Iterator<?>>'">Class<? extends Iterator<?>> c = foo();</error>
+    }
+  
+    public static Class<? extends Iterator> foo() {
+      return null;
+    }
+}
+
+class Example {
+    static List<? extends AbstractTreeNode> treeNodes = null;
+
+    public static void main(String[] args) {
+        for (AbstractTreeNode<String> treeNode : treeNodes) {
+
+        }
+    }
+
+}
+class AbstractTreeNode<T> {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/ClassInheritance.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/ClassInheritance.java
new file mode 100644
index 0000000..1a4e80f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/ClassInheritance.java
@@ -0,0 +1,122 @@
+class D implements I<I>{
+}
+class DT<T> implements I<T>{
+}
+
+interface I <T> {
+}
+
+<error descr="'I' cannot be inherited with different type arguments: 'I' and 'D'">class CCC extends D implements I<D></error> {
+}
+abstract class CCC2<T> extends DT<T> implements I<T> {
+}
+
+class a extends b<d, c> implements c<d, c<c,c>>, d<b<c<c,c>,d>> {}
+public class b<K,V> implements c<K, c<V,V>> { }
+interface c<K,V> extends d<b<V,K>> {}
+interface d<K> {}
+
+// extending final classes in bounds
+class C<T extends String> {
+ <E extends Integer> void f() {}
+}
+
+class GenericExtendItself<T, U extends T>
+{
+    GenericExtendItself<Object,Object> foo;
+}
+
+
+////////////////////
+public abstract class ZZZZ<E> {
+    public abstract E getElement();
+}
+abstract class Z<E> extends ZZZZ<E> {}
+class Z2 extends Z<Integer> {
+    public Integer getElement() {
+        return null;  
+    }
+}
+/////////////////
+class BaseC <E> {
+    E remove(){
+        return null;
+    }
+}
+
+class DerivedC extends BaseC<String> {
+    public String remove() {
+        String s = super.remove();
+        return null;
+    }
+}
+
+/// raw in the multiple supers
+interface Int<T> {
+    AClass<T> f();
+}
+abstract class AClass<T> implements Int<T> {
+    public abstract AClass<T> f();
+}
+
+class MyClass extends AClass implements Int{
+    public AClass f() {
+        return null;
+    }
+}
+
+class A<T>{
+  A(){}
+  A(T t){}
+
+  {
+   new A<A>(new A()){};
+  }
+}
+
+//IDEADEV-4733: this overriding is OK
+class Outer<T>
+{
+    public class Inner
+    {
+        private final T t;
+
+        public Inner(T t) { this.t = t; }
+
+        public T getT() { return t; }
+
+        public String toString() { return t.toString(); }
+    }
+}
+
+class Other extends Outer<String>
+{
+    public class Ither extends Outer<String>.Inner
+    {
+        public Ither()
+        {
+            super("hello"); //valid super constructor call
+        }
+    }
+}
+
+//end of //IDEADEV-4733
+interface AI {
+}
+interface BI {
+}
+abstract class AbstractClass<T> {
+    AbstractClass(Class<T> clazz) {
+    }
+}
+class ConcreteClass extends AbstractClass<AI> {
+    ConcreteClass() {
+        super(AI.class);
+    }
+    class InnerClass extends AbstractClass<BI> {
+        InnerClass() {
+            super(BI.class); //
+        }
+    }
+}
+///////////////////////
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/ConditionalExpression.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/ConditionalExpression.java
new file mode 100644
index 0000000..64d6ac1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/ConditionalExpression.java
@@ -0,0 +1,21 @@
+import java.util.TreeMap;
+import java.util.HashMap;
+import java.util.Map;
+
+class Test {
+  boolean f () {
+    return false;
+  }
+
+  Boolean g (int i) {
+    //This is OK thanks to boxing f()
+    return i > 0 ? f () : null;
+  }
+
+  {
+    Object values = new Object();
+    //IDEADEV-1756: this should be OK
+    final Map<Object,Object> newValues = true ? new TreeMap<Object,Object>() : new HashMap<Object,Object>();
+    newValues.get(values);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/ContinueInferenceAfterFirstRawResult.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/ContinueInferenceAfterFirstRawResult.java
new file mode 100644
index 0000000..cf2e1d0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/ContinueInferenceAfterFirstRawResult.java
@@ -0,0 +1,23 @@
+import java.util.*;
+
+class Test {
+
+  List<String> getList(Function<Object, String> function) {
+        /*
+         * When the first argument below is a raw type it turns red because IDEA thinks the return
+         * type is Collection<>.  javac and Eclipse don't care
+         */
+    return  transform(new ArrayList(), new ArrayList<String>(), function);
+  }
+
+  <R, S, T extends Collection<S>> T transform(Iterable<? extends R> oldCollection, T newCollection, Function<R, S> function) {
+    for (R r : oldCollection) {
+      newCollection.add(function.apply(r));
+    }
+    return newCollection;
+  }
+
+  interface Function<X, Y> {
+    Y apply(X input);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/ConvertibleTypes.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/ConvertibleTypes.java
new file mode 100644
index 0000000..602e30c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/ConvertibleTypes.java
@@ -0,0 +1,90 @@
+import java.util.Collection;
+import java.util.ArrayList;
+
+interface YO<<warning descr="Type parameter 'T' is never used">T</warning>> {}
+interface YO1 extends YO<String> {}
+interface YO2 extends YO<Integer> {}
+
+public class ConvertibleTest {
+
+    YO2 bar (YO1 s) {
+          return <error descr="Inconvertible types; cannot cast 'YO1' to 'YO2'">(YO2) s</error>;
+    }
+}
+
+
+//IDEA-1097
+interface Interface1 {}
+interface Interface2 {}
+
+class Implementation implements Interface1 {}
+
+public class InconvertibleTypesTest <E extends Interface2>
+{
+    E thing;
+
+    public E getThing() {
+         return thing;
+    }
+
+    Implementation foo(InconvertibleTypesTest<? extends Interface1> i2) {
+       //This is a valid cast from intersection type
+       return (Implementation) i2.getThing();
+    }
+}
+
+class MyCollection extends ArrayList<Integer> {}
+class Tester {
+    Collection<String> x(MyCollection l) {
+        return <error descr="Inconvertible types; cannot cast 'MyCollection' to 'java.util.Collection<java.lang.String>'">(Collection<String>) l</error>;
+    }
+}
+
+
+class IDEADEV3978 {
+    class Constructor<T> {
+        Class<T> getDeclaringClass() {
+            return null;
+        }
+    }
+    public static void foo(Constructor<?> constructor) {
+        if(constructor.getDeclaringClass() == String.class) { //captured wildcard is convertible
+            System.out.println("yep");
+        }
+    }
+}
+
+class C2<T> {
+   void f(T t) {
+     if (t instanceof Object[]) return;
+   }
+}
+
+class Casting {
+ void f(Object o)
+ {
+         if (o instanceof int[]) return;
+
+         Object obj1 = (Object)true;   f(obj1);
+         Object ob = (Number)1;        f(ob);
+         Object ob2 = (Object)1;       f(ob2);
+
+ }
+
+ public static <T> T convert(Class<T> clazz, Object obj) {
+     if (obj == null) return null;
+     if (String[].class == clazz)
+        return <warning descr="Unchecked cast: 'java.lang.String[]' to 'T'">(T) parseArray(obj)</warning>;
+     return null;
+ }
+
+ private static String[] parseArray(Object obj) {
+    return obj.toString().split(",");
+ }
+}
+
+class CastPrimitiveToTypeParam<T> {
+  T foo() {
+    return <error descr="Inconvertible types; cannot cast 'int' to 'T'">(T)1</error>;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/DeepConflictingReturnTypes.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/DeepConflictingReturnTypes.java
new file mode 100644
index 0000000..0477aee
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/DeepConflictingReturnTypes.java
@@ -0,0 +1,21 @@
+class W {
+    Object f() {
+        return 0;
+    }
+}
+
+class WW extends W {
+    String f() {
+        return null;
+    }
+}
+
+interface IQ {
+    void f();
+}
+
+
+<error descr="'f()' in 'WW' clashes with 'f()' in 'IQ'; attempting to use incompatible return type">class WWW extends WW implements IQ</error> {
+
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/DifferentTypeParamsInOverloadedMethods.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/DifferentTypeParamsInOverloadedMethods.java
new file mode 100644
index 0000000..c44e555
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/DifferentTypeParamsInOverloadedMethods.java
@@ -0,0 +1,28 @@
+import java.util.*;
+class Nav {
+    interface Sized {}
+    interface Stream<<warning descr="Type parameter 'T' is never used">T</warning>> { }
+
+    private static<U, T extends Sized & Iterable<U>> Stream<U> stream(T entity, int flags) {
+        System.out.println(entity);
+        System.out.println(flags);
+        return null;
+    }
+
+    private static<U, T extends Iterable<U>> Stream<U> <warning descr="Private method 'stream(T, int)' is never used">stream</warning>(T entity, int flags) {
+        System.out.println(entity);
+        System.out.println(flags);
+        return null;
+    }
+
+    static class A<T> implements Iterable<T>, Sized {
+        public Iterator<T> iterator() {
+            return null;
+        }
+    }
+
+    public static void main(String[] args) {
+        Stream<String> aStream = stream(new A<String>(), 0);
+        System.out.println(aStream);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/DoNotAcceptLowerBoundIfRaw.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/DoNotAcceptLowerBoundIfRaw.java
new file mode 100644
index 0000000..b9bbcbe
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/DoNotAcceptLowerBoundIfRaw.java
@@ -0,0 +1,17 @@
+import java.util.*;
+
+class Test {
+  interface Condition<K> {}
+  class IOC<M> implements Condition {}
+
+  static <T> List<T> filter(T[] c, Condition<? super T> con) {
+    return null;
+  }
+
+  interface OE {}
+  interface LOE extends OE {}
+
+  void foo(OE[] es, IOC<LOE> con) {
+    List<LOE> l = filter(es, con);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/Enum.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/Enum.java
new file mode 100644
index 0000000..e113157
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/Enum.java
@@ -0,0 +1,189 @@
+enum Operation {
+  X;
+  static int s = 0;
+  public static final String constS = "";
+  Operation() {
+    int i = <error descr="It is illegal to access static member 's' from enum constructor or instance initializer">Operation.s</error>;
+    i = <error descr="It is illegal to access static member 's' from enum constructor or instance initializer">s</error>;
+    <error descr="It is illegal to access static member 's' from enum constructor or instance initializer">s</error> = 0;
+    final int x = Integer.MAX_VALUE;
+    String co = constS;
+    // TODO: unclear
+    //Operation o = X;
+  }
+  static {
+    int i = Operation.s;
+    i = s;
+    s = 0;
+    final int x = Integer.MAX_VALUE;
+    String co = constS;
+    // TODO: unclear
+    //Operation o = X;
+  }
+  {
+    int i = <error descr="It is illegal to access static member 's' from enum constructor or instance initializer">Operation.s</error>;
+    i = <error descr="It is illegal to access static member 's' from enum constructor or instance initializer">s</error>;
+    <error descr="It is illegal to access static member 's' from enum constructor or instance initializer">s</error> = 0;
+    final int x = Integer.MAX_VALUE;
+    String co = constS;
+    // TODO: unclear
+    //Operation o = X;
+
+    Operation ooo = <error descr="Enum types cannot be instantiated">new Operation()</error>;
+  }
+
+  <error descr="'values()' is already defined in 'Operation'">void values()</error> {}
+  void values(int i) {}
+  void valueOf() {}
+  <error descr="'valueOf(String)' is already defined in 'Operation'">void valueOf(String s)</error> {}
+}
+
+class exte extends <error descr="Cannot inherit from final 'Operation'">Operation</error> {
+}
+
+class use {
+  void f(Operation op) {
+   switch(op) {
+    case <error descr="An enum switch case label must be the unqualified name of an enumeration constant">Operation.X</error>: break;
+   }
+   switch(op) {
+    case X: break;
+   }
+   switch(op) {
+    case <error descr="Duplicate label 'X'">X</error>: break;
+    case <error descr="Duplicate label 'X'">X</error>: break;
+   }
+  }
+}
+
+enum pubCtr {
+  X(1);
+  <error descr="Modifier 'public' not allowed here">public</error> pubCtr(int i) {}
+}
+enum protCtr {
+  X(1);
+  <error descr="Modifier 'protected' not allowed here">protected</error> protCtr(int i) {}
+}
+<error descr="Modifier 'final' not allowed here">final</error> enum Fin { Y }
+<error descr="Modifier 'abstract' not allowed here">abstract</error> enum Abstr {  }
+
+enum params<error descr="Enum may not have type parameters"><T></error> {
+}
+
+enum OurEnum {
+  A, B, C;
+
+  OurEnum() {
+  }
+
+  {
+    Enum<OurEnum> a = A;
+    OurEnum enumValue = B;
+    switch (enumValue) {
+    }
+
+    switch (enumValue) {
+      case A:
+        break;
+    }
+  }
+}
+
+enum TestEnum
+{
+    A(<error descr="Illegal forward reference">B</error>), B(A); 
+    TestEnum(TestEnum other) {
+      <error descr="Call to super is not allowed in enum constructor">super(null, 0)</error>;
+    }
+}
+
+<error descr="Class 'abstr' must either be declared abstract or implement abstract method 'run()' in 'Runnable'">enum abstr implements Runnable</error> {
+}
+
+//this one is OK, enum constants are checked instead of enum itself
+enum abstr1 implements Runnable {
+    A {
+        public void run() {}
+    };
+}
+
+class X extends <error descr="Classes cannot directly extend 'java.lang.Enum'">Enum</error> {
+    public X(String name, int ordinal) {
+        super(name, ordinal);
+    }
+}
+
+enum StaticInEnumConstantInitializer {
+    AN {
+        <error descr="Modifier 'static' not allowed here">static</error> class s {
+        }
+        private <error descr="Inner classes cannot have static declarations">static</error> final String t = String.valueOf(1);
+    };
+}
+
+interface Barz {
+    void baz();
+}
+
+enum Fooz implements Barz {
+    <error descr="Class 'Fooz' must either be declared abstract or implement abstract method 'baz()' in 'Barz'">FOO</error>;
+}
+
+///////////////////////
+class sss {
+ void f() {
+   <error descr="Enum must not be local">enum EEEE</error> { EE, YY };
+ }
+}
+
+//////////////////////
+//This code is OK
+enum PowerOfTen {
+    ONE(1),TEN(10),
+    HUNDRED(100) {
+        public String toString() {
+            return Integer.toString(super.val);
+        }
+    };
+
+    private final int val;
+
+    PowerOfTen(int val) {
+        this.val = val;
+    }
+
+    public String toString() {
+        return name().toLowerCase();
+    }
+
+    public static void main(String[] args) {
+        System.out.println(ONE + " " + TEN + " " + HUNDRED);
+    }
+}
+
+//IDEADEV-8192
+enum MyEnum {
+    X1, X2;
+
+    private static MyEnum[] values = values();
+
+    public static void test() {
+
+        for (MyEnum e : values) { // values is colored red
+            e.toString();
+        }
+    }
+}
+//end of IDEADEV-8192
+
+
+class EnumBugIDEADEV15333  {
+  public enum Type { one, to }
+  Type type = Type.one;
+  public void main() {
+    switch(type){
+      case one:
+      Object one = new Object();
+    }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/EnumWithAbstractMethods.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/EnumWithAbstractMethods.java
new file mode 100644
index 0000000..1abae6b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/EnumWithAbstractMethods.java
@@ -0,0 +1,24 @@
+<error descr="Modifier 'abstract' not allowed here">abstract</error> enum OurEnum {
+  <error descr="Class 'Anonymous class derived from OurEnum' must implement abstract method 'foo()' in 'OurEnum'">A</error> {
+  },
+  <error descr="'OurEnum' is abstract; cannot be instantiated">B</error>,
+  C {
+    void foo() {}
+  }
+  ;
+
+  abstract void foo();
+}
+
+enum xxx {
+  <error descr="'xxx' is abstract; cannot be instantiated">X</error>,
+  <error descr="Class 'Anonymous class derived from xxx' must implement abstract method 'f()' in 'xxx'">Y</error> {
+  };
+
+  abstract void f();
+}
+
+enum ok {
+  X { void f() {} };
+  abstract void f();
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/ErasureTypeParameterBound.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/ErasureTypeParameterBound.java
new file mode 100644
index 0000000..9e2a1ea
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/ErasureTypeParameterBound.java
@@ -0,0 +1,9 @@
+interface Foo<T> {
+    public <A extends T, B extends A> void bar(Class<A> key, B value);
+}
+
+class FooImpl implements Foo<String>{
+     public <A extends String,  B extends A> void bar(Class<A> key, B value) {
+
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/Exceptions.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/Exceptions.java
new file mode 100644
index 0000000..039cfe6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/Exceptions.java
@@ -0,0 +1,23 @@
+class C <T extends Exception> {
+    void foo () throws T {}
+    void bar () {
+        <error descr="Unhandled exception: T">foo ();</error>
+    }
+
+    <T extends Error> void goo() {
+        try {
+            int i = 12;
+        } catch (<error descr="Cannot catch type parameters">T</error> ex) {
+        }
+    }
+}
+
+//IDEADEV-4169: no problem here
+interface Blub {
+    public <E extends Throwable> void Switch() throws E;
+}
+
+class Blib implements Blub {
+    public <E extends Throwable> void Switch() throws E {
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/ExplicitMethodParameters.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/ExplicitMethodParameters.java
new file mode 100644
index 0000000..98fb88b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/ExplicitMethodParameters.java
@@ -0,0 +1,20 @@
+import java.util.*;
+
+class Foo {
+  <T> void foo() {}
+  <T1 extends List, T2> void foo1() {}
+  void bar() {}
+  <T> void xyz(T l) {}
+
+  {
+    foo();
+    this.<String>foo();
+    this.<error descr="Wrong number of type arguments: 2; required: 1"><String, Integer></error>foo();
+    this.<error descr="Method 'bar()' does not have type parameters"><String></error>bar();
+    this.<error descr="Method 'bar()' does not have type parameters"><String, Integer></error>bar();
+    this.<<error descr="Type parameter 'java.lang.String' is not within its bound; should implement 'java.util.List'">String</error>, Integer>foo1();
+    this.<String>xyz<error descr="'xyz(java.lang.String)' in 'Foo' cannot be applied to '(java.lang.Integer)'">(Integer.valueOf("27"))</error>;
+    ArrayList list = new <error descr="Method 'ArrayList()' does not have type parameters"><String></error>ArrayList<String>();
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/ExplicitMethodParameters1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/ExplicitMethodParameters1.java
new file mode 100644
index 0000000..cc3d83e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/ExplicitMethodParameters1.java
@@ -0,0 +1,15 @@
+import java.util.*;
+
+class Foo {
+  interface Comparable<T> { }
+  static <T extends Comparable<T>> void sort(T t) {}
+
+  class C implements Comparable<C> {}
+  class D implements Comparable<String> {}
+
+  {
+    Foo.<C>sort(new C());
+    Foo.<<error descr="Type parameter 'Foo.D' is not within its bound; should implement 'Foo.Comparable<Foo.D>'">D</error>>sort(new D());
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/FailedInferenceWithBoxing.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/FailedInferenceWithBoxing.java
new file mode 100644
index 0000000..c28bc6b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/FailedInferenceWithBoxing.java
@@ -0,0 +1,12 @@
+class Test {
+        public <T> T doStuff() {
+                return null;
+        }
+        public boolean test() {
+                <error descr="Incompatible types. Found: 'java.lang.Object', required: 'boolean'">return doStuff();</error>
+        }
+        
+        public Boolean test1() {
+                return doStuff();
+        }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/Fields.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/Fields.java
new file mode 100644
index 0000000..168e4e7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/Fields.java
@@ -0,0 +1,10 @@
+import java.util.*;
+
+class C {
+  static final List EMPTY = new ArrayList(0);
+
+  void m() {
+    List<String> list = C.<error descr="Reference parameters are not allowed here"><String></error>EMPTY;
+    System.out.println(list);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/FixedFailedInferenceWithBoxing.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/FixedFailedInferenceWithBoxing.java
new file mode 100644
index 0000000..167ac51
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/FixedFailedInferenceWithBoxing.java
@@ -0,0 +1,12 @@
+class Test {
+        public <T> T doStuff() {
+                return null;
+        }
+        public boolean test() {
+                return doStuff();
+        }
+        
+        public Boolean test1() {
+                return doStuff();
+        }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/FlattenIntersectionType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/FlattenIntersectionType.java
new file mode 100644
index 0000000..4ff85a2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/FlattenIntersectionType.java
@@ -0,0 +1,16 @@
+interface BusinessEntity<E extends BusinessEntity<E>> {
+}
+
+interface EntityId<E extends BusinessEntity> {
+    E getEntity();
+}
+
+public class MyTest {
+    <T extends BusinessEntity<T>> T getEntity(EntityId<T> defaultValue) {
+        return getEntityID(defaultValue).getEntity();
+    }
+
+    public <P extends EntityId<?>> P getEntityID(P defaultValue) {
+        return null;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/ForeachTypes.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/ForeachTypes.java
new file mode 100644
index 0000000..c9fc821
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/ForeachTypes.java
@@ -0,0 +1,29 @@
+class a {
+  void f(int[] c) {
+    for (int i:c) {}
+    for (<error descr="Incompatible types. Found: 'int', required: 'char'">char i:c</error>) {}
+    for (double i:c) {}
+    double[] db = null;
+    for (<error descr="Incompatible types. Found: 'double', required: 'int'">int i:db</error>) {}
+    for (double i:db) {}
+
+    java.util.List list = null;
+    for (<error descr="Incompatible types. Found: 'java.lang.Object', required: 'java.lang.String'">String i:list</error>) {}
+    for (Object o:list) {}
+
+    java.util.List<Integer> ct = null;
+    for (Number n:ct) {}
+    for (Object n:ct) {}
+    for (Integer n:ct) {}
+    for (<error descr="Incompatible types. Found: 'java.lang.Integer', required: 'java.lang.String'">String i:ct</error>) {}
+    for (<error descr="Incompatible types. Found: 'java.lang.Integer', required: 'java.util.List<java.lang.Integer>'">java.util.List<Integer> i:ct</error>) {}
+
+    Object o = null;
+    for (Object oi: (Iterable)o) {}
+
+
+    for (<error descr="Incompatible types. Found: 'double', required: 'int'">int i:db</error>) {
+      for (<error descr="Incompatible types. Found: 'java.lang.Object', required: 'int'">int p: list</error>) {}
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/GenericExtendException.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/GenericExtendException.java
new file mode 100644
index 0000000..1befccb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/GenericExtendException.java
@@ -0,0 +1,4 @@
+class T extends Exception {}
+class E<T> extends <error descr="Generic class may not extend 'java.lang.Throwable'">Error</error> {}
+class M<T2 extends Exception> extends <error descr="Generic class may not extend 'java.lang.Throwable'">T</error> {}
+class Ex<X,Y> extends <error descr="Generic class may not extend 'java.lang.Throwable'">Throwable</error> {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57264.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57264.java
new file mode 100644
index 0000000..9120127
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57264.java
@@ -0,0 +1,17 @@
+class A1<T> {}
+class B1<T extends A1<? super A1<? super T>>>{
+    {
+        T a = null;
+        <error descr="Incompatible types. Found: 'T', required: 'A1<? super T>'">A1<? super T> b = a;</error>
+    }
+}
+
+class A<T> {}
+class B<T extends A<? super A<? super T>>> {
+
+    void bar(T x){
+        foo(x);
+    }
+    void foo(A<? super T> x){}
+    void foo(Object x){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57275.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57275.java
new file mode 100644
index 0000000..7111b8d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57275.java
@@ -0,0 +1,13 @@
+abstract class A {
+    abstract <S, T extends Iterable<S>> void foo();
+
+    {
+        foo();
+    }
+}
+
+class X{
+    <T extends Enum<T>> void foo(){
+        foo();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57284.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57284.java
new file mode 100644
index 0000000..d17e2f3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57284.java
@@ -0,0 +1,6 @@
+abstract class A<S> {
+    abstract <T extends S> void foo();
+    void bar(A<? super Exception> x){
+        x.<<error descr="Type parameter 'String[]' is not within its bound; should extend 'capture<? super java.lang.Exception>'">String[]</error>>foo();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57286.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57286.java
new file mode 100644
index 0000000..f26c784
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57286.java
@@ -0,0 +1,6 @@
+class A<T> {
+    <S extends A<? extends T>> void foo(){}
+    void bar(A<?> a){
+        a.<<error descr="Type parameter 'A' is not within its bound; should extend 'A<capture<?>>'">A<?></error>>foo();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57307.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57307.java
new file mode 100644
index 0000000..31ca482
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57307.java
@@ -0,0 +1,10 @@
+class C<<warning descr="Type parameter 'T' is never used">T</warning>>{}
+class A<<warning descr="Type parameter 'S' is never used">S</warning>,<warning descr="Type parameter 'T' is never used">T</warning>> {}
+class B<S,T extends C<S>> extends A<S,T> {
+    void foo(B<?,?> x){
+        bar(x);
+    }
+    <S, T> void bar(A<S,T> x){
+        System.out.println(x);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57308.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57308.java
new file mode 100644
index 0000000..1a49d21
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57308.java
@@ -0,0 +1,13 @@
+class A<T> {}
+
+interface IA{
+    <T> void foo(A<? extends T[]> x);
+}
+interface IB{
+    <T> int foo(A<? extends T> x);
+}
+class C {
+    <T extends IA & IB> void bar(T x, A<String[]> y){
+        <error descr="Incompatible types. Found: 'void', required: 'int'">int z = x.foo(y);</error>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57309.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57309.java
new file mode 100644
index 0000000..ffb4317
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57309.java
@@ -0,0 +1,9 @@
+class A<S> {
+    void bar(A<? super Exception> x, A<? super Throwable> y){
+        foo(x, y);
+    }
+
+    <T> T foo(A<? super T> x, A<? super T> y){
+        return null;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57310.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57310.java
new file mode 100644
index 0000000..4045972
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57310.java
@@ -0,0 +1,9 @@
+class A<T> {
+    Exception[] bar(A<? super Exception[]> x, A<? super Throwable[]> y){
+        return this.foo(x, y);
+    }
+
+    <T> T foo(A<? super T> x, A<? super T> y){
+        return null;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57311.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57311.java
new file mode 100644
index 0000000..2be9a4f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57311.java
@@ -0,0 +1,11 @@
+class A<T> {
+    A<A<? extends T>> foo(){
+        return null;
+    }
+
+    void bar(A<?> x){
+        baz<error descr="'baz(A<A<?>>)' in 'A' cannot be applied to '(A<A<capture<?>>>)'">(x.foo())</error>;
+    }
+
+    <S> void baz(A<A<? extends S>> x){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57315.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57315.java
new file mode 100644
index 0000000..1dac9fe
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57315.java
@@ -0,0 +1,4 @@
+class A<K>{
+    void foo(A<A<A<String>>> b){ <error descr="Inferred type 'A<java.lang.String>' for type parameter 'S' is not within its bound; should extend 'A<java.lang.Object>'">bar(b)</error>; }
+    <U, S extends A<U>, T extends A<S>> void bar(A<T> a){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57339.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57339.java
new file mode 100644
index 0000000..c964177
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57339.java
@@ -0,0 +1,7 @@
+abstract class A {
+    abstract <T extends Iterable & Cloneable> void foo();
+}
+
+abstract class B extends A{
+    abstract <T extends Cloneable & Iterable> void foo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57340.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57340.java
new file mode 100644
index 0000000..7bbba7b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57340.java
@@ -0,0 +1,26 @@
+class A<T, S> {
+}
+
+class B<L> {
+    A<L, L> foo() {
+        return null;
+    }
+
+    void bar(B<?> b, A<?, ?> foo1) {
+        baz(b.foo());
+        A<?, ?> foo = b.foo();
+        baz<error descr="'baz(A<K,K>)' in 'B' cannot be applied to '(A<capture<?>,capture<?>>)'">(foo)</error>;
+        baz<error descr="'baz(A<K,K>)' in 'B' cannot be applied to '(A<capture<?>,capture<?>>)'">(foo1)</error>;
+    }
+
+    <K> void baz(A<K, K> a) {
+    }
+}
+
+
+
+class C<T,S>{}
+class D<T> extends C<T,T> {
+    void foo(D<?> x){ bar(x); }
+    <T> void bar(C<T,T> x){}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57346.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57346.java
new file mode 100644
index 0000000..0d85d72
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57346.java
@@ -0,0 +1,5 @@
+
+class D<T>  {
+    void foo(D<D<?>> x){ this.bar(x); }
+    <T extends Throwable> void bar(D<? super D<T>> x){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57378.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57378.java
new file mode 100644
index 0000000..541079e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57378.java
@@ -0,0 +1,9 @@
+interface IA {
+    <T extends Cloneable & Iterable> void foo(T x);
+    <T extends Iterable & Cloneable> void foo(T x);
+}
+
+abstract class A<T extends Throwable> {
+    abstract <T extends Comparable<?> & Iterable> void foo(T x, A<?> y);
+    abstract <T extends Iterable & Comparable<?>> void foo(T x, A<? extends Throwable> y);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57410.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57410.java
new file mode 100644
index 0000000..93efea5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57410.java
@@ -0,0 +1,10 @@
+
+interface IA {
+    <T> void a(Iterable<String> x);
+}
+
+interface IB {
+    <T> void a(Iterable x);
+}
+
+<error descr="'a(Iterable)' in 'IB' clashes with 'a(Iterable<String>)' in 'IA'; both methods have same erasure, yet neither overrides the other">abstract class C implements IA, IB</error> {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57411.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57411.java
new file mode 100644
index 0000000..0ca6f6e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57411.java
@@ -0,0 +1,18 @@
+class A<S> {
+    <T> T foo(T x, S y){
+        return x;
+    }
+}
+
+class B<S> extends A<S> {
+    Object foo(Object x, Object y){
+        return x;
+    }
+}
+
+<error descr="'foo(T, S)' in 'A' clashes with 'foo(Object, Object)' in 'B'; both methods have same erasure, yet neither overrides the other">class C extends B<String></error> {
+    @Override
+    <T> T foo(T x, String y) {
+        <error descr="Incompatible types. Found: 'java.lang.Object', required: 'T'">return super.foo(x, y);</error>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57484.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57484.java
new file mode 100644
index 0000000..8379ee5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57484.java
@@ -0,0 +1,7 @@
+abstract class C{
+    abstract <T> T foo(T x, T y);
+
+    {
+        Long s = (Long) foo(1,1L);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57485.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57485.java
new file mode 100644
index 0000000..0fceb69
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57485.java
@@ -0,0 +1,9 @@
+abstract class A{
+    abstract <S extends Number & Comparable<?>, T extends Number & Comparable<? extends S>> T foo(
+            Comparable<? extends T> x,
+            Comparable<? extends T> y);
+
+    {
+        foo(1, 1L);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57486.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57486.java
new file mode 100644
index 0000000..4942edf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57486.java
@@ -0,0 +1,8 @@
+class B<T,S>{}
+abstract class A<T> {
+    abstract B<T,T> foo();
+    <T> void baz(B<T,T> b){}
+    void bar(A<?> a){
+        baz(a.foo());
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57492.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57492.java
new file mode 100644
index 0000000..5cd402a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57492.java
@@ -0,0 +1,17 @@
+abstract class A<T>{
+    abstract <S> S foo(S x, S y);
+    <S extends Number & Comparable<? extends Number>> void baz(A<S> a){}
+
+    void bar(A<Long> x, A<Integer> y){
+        baz(foo(x, y));
+    }
+}
+
+abstract class A1<T>{
+    abstract <S> S foo(S x, S y);
+    <T extends Number & Comparable<?>, S extends Number & Comparable<? extends T>> void baz(A1<S> a){}
+
+    void bar(A1<Long> x, A1<Integer> y){
+        baz(foo(x, y));
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57493.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57493.java
new file mode 100644
index 0000000..b8720b8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57493.java
@@ -0,0 +1,8 @@
+abstract class A<T>{
+    abstract <S> S foo(S x, S y);
+    <S extends Number & Comparable<?>> void baz(A<S> a){}
+
+    void bar(A<Long> x, A<Integer> y){
+        baz(foo(x, y));
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57494.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57494.java
new file mode 100644
index 0000000..c70182f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57494.java
@@ -0,0 +1,16 @@
+import java.util.*;
+abstract class A {
+    abstract <T> T baz(List<? super List<? super T>> a);
+
+    void bar(List<List<?>> x){
+        String s = baz(x);
+    }
+}
+
+abstract class A1{
+    abstract <T> T baz(List<? super T> a);
+
+    void bar(List<?> x){
+        String o = baz<error descr="'baz(java.util.List<? super java.lang.String>)' in 'A1' cannot be applied to '(java.util.List<capture<?>>)'">(x)</error>;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57495.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57495.java
new file mode 100644
index 0000000..f91d404
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57495.java
@@ -0,0 +1,9 @@
+import java.util.*;
+interface C<T> extends List<List<T>>{}
+abstract class A {
+    abstract <T> T baz(List<? super List<? super T>> a);
+
+    void bar(C<?> x){
+        baz<error descr="'baz(java.util.List<? super java.util.List<? super java.lang.Object>>)' in 'A' cannot be applied to '(C<capture<?>>)'">(x)</error>;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57496.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57496.java
new file mode 100644
index 0000000..250b8fc1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57496.java
@@ -0,0 +1,11 @@
+interface I<T>{}
+interface A extends I<A[]>{}
+interface B extends I<B[]>{}
+
+abstract class c{
+    abstract <T> T baz(T x, T y);
+
+    void bar(A x, B y){
+        baz(x, y);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57509.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57509.java
new file mode 100644
index 0000000..8015fb5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57509.java
@@ -0,0 +1,9 @@
+import java.util.List;
+
+abstract class X {
+    abstract <T> void copy(List<T> dest, List<? extends T> src);
+
+    void foo(List<? super Throwable> x, List<? extends Exception> y){
+        copy(x, y);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57533.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57533.java
new file mode 100644
index 0000000..5bf8674
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57533.java
@@ -0,0 +1,6 @@
+class C<T extends C<? extends C<? extends T>>>{
+    void foo(C<?> x){
+        <error descr="Inferred type '? extends C<? extends C<capture<?>>>' for type parameter 'T' is not within its bound; should extend 'C<? extends C<? extends C<capture<?>>>>'">bar(x)</error>;
+    }
+    <T extends C<? extends T>> void bar(C<T> x){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57539.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57539.java
new file mode 100644
index 0000000..cfaaf59
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57539.java
@@ -0,0 +1,13 @@
+class E<T> {
+    Class<T[]> o = <error descr="Cannot select from a type variable">T[]</error>.class;
+}
+
+class MyClass<T> {
+    Class<T[]> getTs() {
+        return <error descr="Cannot select from a type variable">T[]</error>.class;
+    }
+
+    public static void main(String[] args) {
+        new MyClass<String>().getTs();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57557.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57557.java
new file mode 100644
index 0000000..56efec1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57557.java
@@ -0,0 +1,7 @@
+abstract class A {
+    abstract void foo(Enum<?> x);
+}
+
+class B extends A {
+    void foo(Enum<? extends Enum<?>> x) { }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57563.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57563.java
new file mode 100644
index 0000000..a8cb239
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57563.java
@@ -0,0 +1,7 @@
+class C {
+    void foo(){}
+}
+
+class D extends C{
+    static <T> void foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57650.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57650.java
new file mode 100644
index 0000000..8f5bb73
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57650.java
@@ -0,0 +1,7 @@
+abstract class A {
+    abstract <T> T foo();
+
+    {
+        int x = foo();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57667.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57667.java
new file mode 100644
index 0000000..9f27fa0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57667.java
@@ -0,0 +1,7 @@
+class A {
+    <T> A(T x) {}
+
+    {
+        new <<error descr="Actual type argument and inferred type contradict each other">String</error>>A(1);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57668.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57668.java
new file mode 100644
index 0000000..cc49162
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA57668.java
@@ -0,0 +1,17 @@
+class A {
+    <T> A() {}
+
+    {
+        new <<error descr="Type argument cannot be of primitive type">int</error>>A();
+    }
+}
+
+class B<T> {
+    {
+        new B<<error descr="Type argument cannot be of primitive type">int</error>>();
+        B.<<error descr="Type argument cannot be of primitive type">int</error>>m();
+    }
+
+    <S> void m(){}
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA63291.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA63291.java
new file mode 100644
index 0000000..3343db7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA63291.java
@@ -0,0 +1,57 @@
+import java.util.Comparator;
+import java.util.Set;
+
+public class CastError {
+    public void foo(Comparator<? super byte[]> comparator) throws Exception {
+        MyComparator comparator1 = (MyComparator) comparator;
+    }
+
+    public void foo1(Comparator<byte[]> comparator) throws Exception {
+        MyComparator comparator1 = (MyComparator) comparator;
+    }
+
+    public void foo2(Comparator<? extends byte[]> comparator) throws Exception {
+        MyComparator comparator1 = (MyComparator) comparator;
+    }
+
+    public void foo3(Comparator<? super String[]> comparator) throws Exception {
+        MyComparator comparator1 = <error descr="Inconvertible types; cannot cast 'java.util.Comparator<capture<? super java.lang.String[]>>' to 'MyComparator'">(MyComparator) comparator</error>;
+    }
+
+    public void foo4(Comparator<? extends String[]> comparator) throws Exception {
+        MyComparator comparator1 = <error descr="Inconvertible types; cannot cast 'java.util.Comparator<capture<? extends java.lang.String[]>>' to 'MyComparator'">(MyComparator) comparator</error>;
+    }
+
+    public void foo5(Comparator<?> comparator) throws Exception {
+        MyComparator comparator1 = (MyComparator) comparator;
+    }
+
+    //--||--||--||--||--||--||--||--||--||--||--||--||--||--||--||--||--||--||--
+
+    public void sfoo(Set<Comparator<? super byte[]>> comparator) throws Exception {
+        Set<MyComparator> comparator1 = <error descr="Inconvertible types; cannot cast 'java.util.Set<java.util.Comparator<? super byte[]>>' to 'java.util.Set<MyComparator>'">(Set<MyComparator>) comparator</error>;
+    }
+
+    public void sfoo1(Set<Comparator<byte[]>> comparator) throws Exception {
+        Set<MyComparator> comparator1 = <error descr="Inconvertible types; cannot cast 'java.util.Set<java.util.Comparator<byte[]>>' to 'java.util.Set<MyComparator>'">(Set<MyComparator>) comparator</error>;
+    }
+
+    public void sfoo2(Set<Comparator<? extends byte[]>> comparator) throws Exception {
+        Set<MyComparator> comparator1 = <error descr="Inconvertible types; cannot cast 'java.util.Set<java.util.Comparator<? extends byte[]>>' to 'java.util.Set<MyComparator>'">(Set<MyComparator>) comparator</error>;
+    }
+
+    public void sfoo3(Set<Comparator<? super String[]>> comparator) throws Exception {
+        Set<MyComparator> comparator1 = <error descr="Inconvertible types; cannot cast 'java.util.Set<java.util.Comparator<? super java.lang.String[]>>' to 'java.util.Set<MyComparator>'">(Set<MyComparator>) comparator</error>;
+    }
+
+    public void sfoo4(Set<Comparator<? extends String[]>> comparator) throws Exception {
+        Set<MyComparator> comparator1 = <error descr="Inconvertible types; cannot cast 'java.util.Set<java.util.Comparator<? extends java.lang.String[]>>' to 'java.util.Set<MyComparator>'">(Set<MyComparator>) comparator</error>;
+    }
+
+    public void sfoo5(Set<Comparator<?>> comparator) throws Exception {
+        Set<MyComparator> comparator1 = <error descr="Inconvertible types; cannot cast 'java.util.Set<java.util.Comparator<?>>' to 'java.util.Set<MyComparator>'">(Set<MyComparator>) comparator</error>;
+    }
+}
+
+abstract class MyComparator implements Comparator<byte[]> {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA66311.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA66311.java
new file mode 100644
index 0000000..d67ac65
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA66311.java
@@ -0,0 +1,21 @@
+import java.util.*;
+
+class ErasureTest {
+  <error descr="'toArrayDouble(List<? extends Number>)' clashes with 'toArrayDouble(List<double[]>)'; both methods have same erasure">public static double[] toArrayDouble(List<? extends Number> v)</error> {
+    return null;
+  }
+
+  public static double[][] toArrayDouble(List<double[]> v) {
+    return null;
+  }
+}
+
+class ErasureTest1 {
+  <error descr="'toArrayDouble(List<? extends Number>)' clashes with 'toArrayDouble(List)'; both methods have same erasure">public static double[] toArrayDouble(List<? extends Number> v)</error> {
+    return null;
+  }
+
+  public static double[][] toArrayDouble(List v) {
+    return null;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA66311_16.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA66311_16.java
new file mode 100644
index 0000000..db7abdc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA66311_16.java
@@ -0,0 +1,31 @@
+import java.util.*;
+
+class ErasureTest {
+  public static double[] toArrayDouble(List<? extends Number> v) {
+    return null;
+  }
+
+  public static double[][] toArrayDouble(List<double[]> v) {
+    return null;
+  }
+}
+
+class ErasureTest1 {
+  <error descr="'toArrayDouble(List<? extends Number>)' clashes with 'toArrayDouble(List)'; both methods have same erasure">public static double[] toArrayDouble(List<? extends Number> v)</error> {
+    return null;
+  }
+
+  public static double[][] toArrayDouble(List v) {
+    return null;
+  }
+}
+
+class ErasureTest2 {
+  <error descr="'toArrayDouble(List<? extends Number>)' clashes with 'toArrayDouble(List<String>)'; both methods have same erasure">public static double[] toArrayDouble(List<? extends Number> v)</error> {
+    return null;
+  }
+
+  public static double[] toArrayDouble(List<String> v) {
+    return null;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA67570.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA67570.java
new file mode 100644
index 0000000..8ba2620
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA67570.java
@@ -0,0 +1,21 @@
+interface A1
+{
+    String foo();
+}
+
+interface B1
+{
+    Object foo();
+}
+
+class C1<T extends B1 & A1> {
+    void bar(T x) {
+        String foo = x.foo();
+    }
+}
+
+class C2<T extends A1 & B1> {
+    void bar(T x) {
+        String foo = x.foo();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA67597.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA67597.java
new file mode 100644
index 0000000..20d2d27
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA67597.java
@@ -0,0 +1,4 @@
+class A<T>
+{
+    T x = <error descr="Inconvertible types; cannot cast 'int' to 'T'">(T) 1</error>;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA67599.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA67599.java
new file mode 100644
index 0000000..fd6c6b4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA67599.java
@@ -0,0 +1,8 @@
+abstract class A<T, S extends T>
+{
+      abstract S bar();
+      void foo(A<Cloneable[], ? extends Throwable[]> a)
+      {
+          int x = a.bar().length;
+      }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA67667.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA67667.java
new file mode 100644
index 0000000..85f46a0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA67667.java
@@ -0,0 +1,8 @@
+import java.util.Collection;
+import java.util.List;
+
+interface A
+{
+    <S extends Cloneable & Comparable<?>> void foo(S x);
+    <S extends Comparable<?> & Cloneable> void foo(S x);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA67672.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA67672.java
new file mode 100644
index 0000000..939ce3f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA67672.java
@@ -0,0 +1,7 @@
+import java.util.Collection;
+import java.util.List;
+
+interface A
+{
+    <<error descr="'addAll(Collection<? extends E>)' in 'java.util.Collection' clashes with 'addAll(Collection<? extends E>)' in 'java.util.List'; both methods have same erasure, yet neither overrides the other"></error>T extends List<?> & Collection<? extends Cloneable>> void foo(T x);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA67681.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA67681.java
new file mode 100644
index 0000000..c1a3b122
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA67681.java
@@ -0,0 +1,33 @@
+
+interface A<T> { }
+
+class B<T> implements A<T> {}
+
+class C {
+    void bar(A<A<?>> x){
+        B<A<String>> y = <error descr="Inconvertible types; cannot cast 'A<A<?>>' to 'B<A<java.lang.String>>'">(B<A<String>>) x</error>;
+    }
+}
+
+//-----------------------
+interface A2<T> { }
+
+class B2<T> implements A2<T> {}
+
+class C2 {
+    void bar(A2<A2> x){
+        B2<A2<?>> y = <error descr="Inconvertible types; cannot cast 'A2<A2>' to 'B2<A2<?>>'">(B2<A2<?>>) x</error>;
+    }
+}
+
+//-----------------------
+interface A3<T> { }
+
+class B3<T> implements A3<T> {}
+
+class C3 {
+    <T> void bar(A3<A3<T>> x){
+        A3<A3<?>> y = <error descr="Inconvertible types; cannot cast 'A3<A3<T>>' to 'A3<A3<?>>'">(A3<A3<?>>) x</error>;
+
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA67861.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA67861.java
new file mode 100644
index 0000000..f7d654d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA67861.java
@@ -0,0 +1,8 @@
+abstract class C {
+        <T> void foo(Object s){ }
+        abstract String foo(String s);
+
+    {
+        this.<String>foo("").toLowerCase();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA70370.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA70370.java
new file mode 100644
index 0000000..a1c9331
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA70370.java
@@ -0,0 +1,13 @@
+class Devk1 {
+  public void main(String args[]) {
+    foo();
+  }
+
+  private void <warning descr="Private method 'foo(java.lang.Object...)' is never used">foo</warning>(Object... objects) {
+    System.out.println("OBJECTS" + objects);
+  }
+
+  private void foo(int... ints) {
+    System.out.println("INTS" + ints);
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA72912.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA72912.java
new file mode 100644
index 0000000..c57bbb5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA72912.java
@@ -0,0 +1,16 @@
+import java.util.*;
+
+public class Test<T>
+{
+        List<Collection<T>> getList ()
+        {
+                return new ArrayList<Collection<T>> ();
+        }
+
+        public void test1 (Test<T> arg)
+        {
+                List<Collection<T>> result = arg.getList ();
+                result.add <error descr="'add(java.util.Collection<T>)' in 'java.util.List' cannot be applied to '(java.util.HashMap<java.lang.Integer,java.lang.Integer>)'">(new HashMap<Integer, Integer> ())</error>;
+        }
+
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA74899.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA74899.java
new file mode 100644
index 0000000..8723829
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA74899.java
@@ -0,0 +1,11 @@
+import java.util.Collections;
+import java.util.Map;
+
+public class IDEA74899 {
+    void foo() {
+        Map<String, String> m = Collections.emptyMap();
+        if (<error descr="Operator '==' cannot be applied to 'java.util.Map<java.lang.String,java.lang.String>', 'java.util.Map<java.lang.Object,java.lang.Object>'">m == Collections.emptyMap()</error>) {
+           return;
+        }
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA76283.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA76283.java
new file mode 100644
index 0000000..a221d1b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA76283.java
@@ -0,0 +1,49 @@
+import java.util.*;
+public class IDEA76283 {
+}
+
+interface Parametrized<T extends Number> {
+}
+
+class Bug1<T extends Number> {
+    <I extends Number> Parametrized<I> foo(Parametrized<I> param) {
+        return null;
+    }
+
+    void bug1(Parametrized<? super T> param) {
+        foo(param);
+    }
+
+    void bug2(Set<Parametrized<? extends Number>> parametrizeds) {
+        Set<Parametrized<?>> items = parametrizeds;
+    }
+
+    void bug3(Set<Parametrized<?>> parametrizeds) {
+        Set<Parametrized<?>> items = parametrizeds;
+    }
+
+    void bug4(Set<Parametrized<<error descr="Type parameter '? extends String' is not within its bound; should extend 'java.lang.Number'">? extends String</error>>> parametrizeds) {
+        <error descr="Incompatible types. Found: 'java.util.Set<Parametrized<? extends java.lang.String>>', required: 'java.util.Set<Parametrized<?>>'">Set<Parametrized<?>> items = parametrizeds;</error>
+    }
+
+    void bug5(Set<Parametrized<? extends Integer>> parametrizeds) {
+        <error descr="Incompatible types. Found: 'java.util.Set<Parametrized<? extends java.lang.Integer>>', required: 'java.util.Set<Parametrized<?>>'">Set<Parametrized<?>> items = parametrizeds;</error>
+    }
+
+    void bug6(Set<Parametrized<? super Number>> parametrizeds) {
+        <error descr="Incompatible types. Found: 'java.util.Set<Parametrized<? super java.lang.Number>>', required: 'java.util.Set<Parametrized<?>>'">Set<Parametrized<?>> items = parametrizeds;</error>
+    }
+
+    void bug7(Set<Parametrized<? super Integer>> parametrizeds) {
+        <error descr="Incompatible types. Found: 'java.util.Set<Parametrized<? super java.lang.Integer>>', required: 'java.util.Set<Parametrized<?>>'">Set<Parametrized<?>> items = parametrizeds;</error>
+    }
+
+    void bug8(Set<Parametrized<<error descr="Type parameter '? super String' is not within its bound; should extend 'java.lang.Number'">? super String</error>>> parametrizeds) {
+        <error descr="Incompatible types. Found: 'java.util.Set<Parametrized<? super java.lang.String>>', required: 'java.util.Set<Parametrized<?>>'">Set<Parametrized<?>> items = parametrizeds;</error>
+    }
+
+    void bug9(Set<Parametrized<<error descr="Type parameter '? super Object' is not within its bound; should extend 'java.lang.Number'">? super Object</error>>> parametrizeds) {
+        <error descr="Incompatible types. Found: 'java.util.Set<Parametrized<? super java.lang.Object>>', required: 'java.util.Set<Parametrized<?>>'">Set<Parametrized<?>> items = parametrizeds;</error>
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA77991.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA77991.java
new file mode 100644
index 0000000..3cd493b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA77991.java
@@ -0,0 +1,26 @@
+class Test {
+    static {
+        Class<Test> testClass = get(Test.class);
+        foo(testClass);
+        Test f = foo(testClass);
+    }
+
+    static <E> Class<E> get(Class<? super E> value) {
+        return null;
+    }
+
+    static <E> E foo(Class<? super E> value) {
+        return null;
+    }
+}
+
+class Comp {
+  public static <T> boolean equal(T arg1, T arg2) {
+    return false;
+  }
+
+  void foo(String s, Object o) {
+    if (equal(s, o)) {
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA80386.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA80386.java
new file mode 100644
index 0000000..3587f4f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA80386.java
@@ -0,0 +1,33 @@
+import java.util.List;
+
+public class IDEA80386 {
+  void foo(Class<List> listClass) {
+    <error descr="Incompatible types. Found: 'java.lang.Class<java.util.List>', required: 'java.lang.Class<? extends java.util.List<?>>'">Class<? extends List<?>> cls = listClass;</error>
+    Class < ?extends List > cls1 = listClass;
+    <error descr="Incompatible types. Found: 'java.lang.Class<java.util.List>', required: 'java.lang.Class<? extends java.util.List<? extends java.util.List<?>>>'">Class<? extends List<? extends List<?>>> cls2 = listClass;</error>
+    Class<? super List<?>> clsS = listClass;
+    Class<? super List> clsS1 = listClass;
+  }
+
+  void fooE(Class<? extends List> listClass) {
+    <error descr="Incompatible types. Found: 'java.lang.Class<capture<? extends java.util.List>>', required: 'java.lang.Class<? extends java.util.List<?>>'">Class<? extends List<?>> cls = listClass;</error>
+    Class<? extends List> cls1 = listClass;
+    <error descr="Incompatible types. Found: 'java.lang.Class<capture<? extends java.util.List>>', required: 'java.lang.Class<? extends java.util.List<? extends java.util.List<?>>>'">Class<? extends List<? extends List<?>>> cls2 = listClass;</error>
+    <error descr="Incompatible types. Found: 'java.lang.Class<capture<? extends java.util.List>>', required: 'java.lang.Class<? super java.util.List<?>>'">Class<? super List<?>> clsS = listClass;</error>
+    <error descr="Incompatible types. Found: 'java.lang.Class<capture<? extends java.util.List>>', required: 'java.lang.Class<? super java.util.List>'">Class<? super List> clsS1 = listClass;</error>
+  }
+
+  void fooS(Class<? super List> listClass) {
+    <error descr="Incompatible types. Found: 'java.lang.Class<capture<? super java.util.List>>', required: 'java.lang.Class<? extends java.util.List<?>>'">Class<? extends List<?>> cls1 = listClass;</error>
+    <error descr="Incompatible types. Found: 'java.lang.Class<capture<? super java.util.List>>', required: 'java.lang.Class<? extends java.util.List<? extends java.util.List<?>>>'">Class<? extends List<? extends List<?>>> cls2 = listClass;</error>
+    Class<? super List<?>> clsS = listClass;
+    Class<? super List> clsS1 = listClass;
+  }
+
+  void fooU(Class<?> listClass) {
+    <error descr="Incompatible types. Found: 'java.lang.Class<capture<?>>', required: 'java.lang.Class<? extends java.util.List<?>>'">Class<? extends List<?>> cls1 = listClass;</error>
+    <error descr="Incompatible types. Found: 'java.lang.Class<capture<?>>', required: 'java.lang.Class<? extends java.util.List<? extends java.util.List<?>>>'">Class<? extends List<? extends List<?>>> cls2 = listClass;</error>
+    <error descr="Incompatible types. Found: 'java.lang.Class<capture<?>>', required: 'java.lang.Class<? super java.util.List<?>>'">Class<? super List<?>> clsS = listClass;</error>
+    <error descr="Incompatible types. Found: 'java.lang.Class<capture<?>>', required: 'java.lang.Class<? super java.util.List>'">Class<? super List> clsS1 = listClass;</error>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA88895.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA88895.java
new file mode 100644
index 0000000..e3482d7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA88895.java
@@ -0,0 +1,26 @@
+import java.util.Iterator;
+
+public class WildcardGenericAndPrivateField {
+
+    private Object field;
+
+    public Iterator<? extends WildcardGenericAndPrivateField> iterator() {
+        return null;
+    }
+
+    public void methodDoesNotCompile() {
+        Iterator<? extends WildcardGenericAndPrivateField> iterator = iterator();
+        while ( iterator.hasNext() ) {
+            Object o = iterator.next().<error descr="'field' has private access in 'WildcardGenericAndPrivateField'">field</error>;
+        }
+    }
+
+    public void methodCompiles() {
+        Iterator<? extends WildcardGenericAndPrivateField> iterator = iterator();
+        while ( iterator.hasNext() ) {
+            WildcardGenericAndPrivateField next = iterator.next();
+            Object o = next.field;
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA89771.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA89771.java
new file mode 100644
index 0000000..f3a04de
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA89771.java
@@ -0,0 +1,3 @@
+public @interface MyAnnotation {
+    Class<? extends Enum<?>> enumClass() default <error descr="Incompatible types. Found: 'java.lang.Class<java.lang.Enum>', required: 'java.lang.Class<? extends java.lang.Enum<?>>'">Enum.class</error>;
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA89801.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA89801.java
new file mode 100644
index 0000000..28d9707
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA89801.java
@@ -0,0 +1,7 @@
+import java.util.*;
+class Test {
+  {
+    Map<Number, String> map1 = null;
+    Map<Integer, String> map2 = <error descr="Inconvertible types; cannot cast 'java.util.Map<java.lang.Number,java.lang.String>' to 'java.util.Map<java.lang.Integer,java.lang.String>'">(Map<Integer, String>) map1</error>;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA90802.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA90802.java
new file mode 100644
index 0000000..94333cc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA90802.java
@@ -0,0 +1,24 @@
+import java.util.*;
+
+interface VcsRoot {
+}
+
+interface SVcsRoot extends VcsRoot {
+}
+
+interface A {
+    List<? extends VcsRoot> getVcsRoots();
+}
+
+interface B {
+    List<SVcsRoot> getVcsRoots();
+}
+
+interface F1 extends A, B {
+}
+
+class G {
+    void f(F1 o) {
+        SVcsRoot r = o.getVcsRoots().get(0);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA91626.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA91626.java
new file mode 100644
index 0000000..ff29729
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA91626.java
@@ -0,0 +1,25 @@
+class Test {
+    interface A<T> {
+        void _(T... t);
+    }
+
+    static void foo(final A<?> bar) {
+        bar._("");
+    }
+    static void foo1(final A<? extends String> bar) {
+        bar._("");
+    }
+
+    static void foo2(final A<? extends Integer> bar) {
+        bar._<error descr="'_(capture<? extends java.lang.Integer>...)' in 'Test.A' cannot be applied to '(java.lang.String)'">("")</error>;
+    }
+
+
+    public static void main(String[] args) {
+        foo(new A<Integer>() {
+            public void _(final Integer... t) {
+
+            }
+        });
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA92022.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA92022.java
new file mode 100644
index 0000000..6a9bb95
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA92022.java
@@ -0,0 +1,23 @@
+class GetClassClient {
+        public void use() {
+                Class<? extends LocalGeneric> v1 = null;
+                Class<? extends LocalGeneric<Object>> v2 = null;
+                v1 = v2;
+              <error descr="Incompatible types. Found: 'java.lang.Class<capture<? extends GetClassClient.LocalGeneric>>', required: 'java.lang.Class<? extends GetClassClient.LocalGeneric<java.lang.Object>>'">v2 = v1</error>;
+        }
+
+        public static class LocalGeneric<T> {
+        }
+}
+
+
+interface Comparable<T extends Comparable<T>> {}
+class List<T> {}
+
+class Foo implements Comparable<Foo> {
+  public static void main(String[] args){
+    List<? extends Foo> list = null;
+    List<? extends Comparable> c = null;
+    c = list;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA94011.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA94011.java
new file mode 100644
index 0000000..76beb3c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA94011.java
@@ -0,0 +1,21 @@
+import java.util.*;
+class Test {
+
+    class Parent { }
+
+    interface Consumer<T> { }
+
+    interface MyConsumer<T extends Parent> extends Consumer<T> { }
+
+
+    public void test(Set<MyConsumer> set) {
+        @SuppressWarnings("unchecked")
+        Map<Parent, MyConsumer<Parent>> map = create(set);
+
+    }
+
+    public <S, T extends Consumer<S>> Map<S, T> create(Set<T> consumers) {
+        return null;
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA97276.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA97276.java
new file mode 100644
index 0000000..c059e83
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA97276.java
@@ -0,0 +1,4 @@
+interface Interf<X extends Interf> {}
+class SomeClass {
+    static <I extends Interf<? super I>> Class<I> someMethod(I i) { return null; }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA97888.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA97888.java
new file mode 100644
index 0000000..5a82678
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA97888.java
@@ -0,0 +1,23 @@
+import java.util.*;
+import java.io.File;
+class Foo {
+    public Collection<BuildTarget<?>> getDependencies(LayoutElementBuilderService builder, JpsPackagingElement element, TargetOutputIndex outputIndex) {
+        return builder.getDependencies(element, outputIndex);
+    }
+}
+
+class BuildTarget<R extends BuildRootDescriptor> {}
+
+interface TargetOutputIndex {
+    Collection<BuildTarget<?>> getTargetsByOutputFile(File file);
+}
+
+class BuildRootDescriptor {}
+
+class LayoutElementBuilderService<E extends JpsPackagingElement> {
+    public Collection<? extends BuildTarget<?>> getDependencies(E element, TargetOutputIndex outputIndex) {
+        return Collections.emptyList();
+    }
+}
+
+class JpsPackagingElement {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA98421.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA98421.java
new file mode 100644
index 0000000..28ac86b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA98421.java
@@ -0,0 +1,11 @@
+class Outer {
+  class Inner {
+    public <T> Inner(T t) { }
+  }
+
+  class Other extends Outer.Inner {
+    public Other() {
+      new Outer().<Object>super("Hi");
+    }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEADEV10459.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEADEV10459.java
new file mode 100644
index 0000000..fe52659
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEADEV10459.java
@@ -0,0 +1,31 @@
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+/** @noinspection UnusedDeclaration*/
+public class GenericsTest98 {
+    public static void main(String[] args) throws Exception{
+        List<Movable<? extends Serializable>> list = new ArrayList<Movable<? extends Serializable>> ();
+        Factory factory = Factory.newInstance();
+        // Doesn't compile, but Idea doesn't complain
+        Mover<? extends Serializable> mover  = factory.getNew<error descr="'getNew(java.util.List<? extends Movable<T>>)' in 'Factory' cannot be applied to '(java.util.List<Movable<? extends java.io.Serializable>>)'">(list)</error>;
+    }
+}
+
+abstract class Factory {
+    public static Factory newInstance(){
+        return null;
+    }
+
+    // This should actually be
+    // public abstract <T extends Serializable> Mover<T> getNew (List<? extends Movable<? extends T>> source);
+    public abstract <T extends Serializable> Mover<T> getNew (List<? extends Movable<T>> source);
+}
+
+/** @noinspection UnusedDeclaration*/
+interface Movable<T extends Serializable> extends Serializable {
+}
+
+/** @noinspection UnusedDeclaration*/
+interface Mover<T extends Serializable> {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEADEV12951.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEADEV12951.java
new file mode 100644
index 0000000..03cd4b6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEADEV12951.java
@@ -0,0 +1,29 @@
+class ClassExt {
+
+    /** @noinspection UnusedDeclaration*/
+    public static <T, P1, P2> T newInstance(Class<T> clazz,
+                                            Class<? super P1> t1, P1 p1,
+                                            Class<? super P2> t2, P2 p2) {
+        return null;
+    }
+
+
+}
+
+abstract class TKey<T> {
+
+    protected abstract Class<T> getType();
+}
+
+
+class GoodIsRed6 {
+
+
+    public static <TK extends TKey<?>> TK createClone(TK tkey, String key) {
+
+
+        Class<TK> clazz = null;
+
+        return ClassExt.newInstance(clazz, String.class, key, Class.class, tkey.getType());
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEADEV13011.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEADEV13011.java
new file mode 100644
index 0000000..f4e5c53
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEADEV13011.java
@@ -0,0 +1,29 @@
+/** @noinspection UnusedDeclaration*/
+class LimitedPool<T> {
+  private int capacity;
+  private final ObjectFactory<T> factory;
+  private Object[] storage;
+  private int index = 0;
+
+  public LimitedPool(final int capacity, ObjectFactory<T> factory) {
+    this.capacity = capacity;
+    this.factory = factory;
+    storage = new Object[capacity];
+  }
+
+  interface ObjectFactory<T> {
+    T create();
+    void cleanup(T t);
+  }
+
+  public T alloc() {
+    if (index >= capacity) return factory.create();
+
+    if (storage[index] == null) {
+      storage[index] = factory.create();
+    }
+
+    <error descr="Incompatible types. Found: 'java.lang.Object[]', required: 'T'">return storage;</error>
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEADEV14006.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEADEV14006.java
new file mode 100644
index 0000000..f73206b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEADEV14006.java
@@ -0,0 +1,18 @@
+/** @noinspection UnusedDeclaration*/
+interface TestIF2<T> extends TestIF3<T> {}
+
+/** @noinspection UnusedDeclaration*/
+interface TestIF<T extends TestIF2<? extends Test2>> {
+    void run(T o1);
+}
+
+/** @noinspection UnusedDeclaration*/
+interface TestIF3<T> {}
+
+class Test2 {}
+
+class Test {
+    public void test(TestIF<?> testIF) {
+        testIF.run<error descr="'run(capture<? extends TestIF2<? extends Test2>>)' in 'TestIF' cannot be applied to '()'">()</error>;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEADEV14103.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEADEV14103.java
new file mode 100644
index 0000000..77e6bb0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEADEV14103.java
@@ -0,0 +1,52 @@
+class TestGenerics {
+
+    static interface EnumInterface {
+        public String getSomething();
+    }
+
+    static enum Enum1 implements EnumInterface {
+        A("alpha"),
+        B("beta"),
+        G("gamme"),
+        ;
+        private String text;
+
+        Enum1(String text) {
+            this.text = text;
+        }
+
+        public String getSomething() {
+            return text;
+        }
+    }
+
+    static class TestBase<I extends Enum<I> & EnumInterface> {
+
+        protected final void add(Eval eval) {
+            eval.hashCode();
+        }
+
+        abstract class Eval {
+            private I enumI;
+
+            public Eval(I enumI) {
+                this.enumI = enumI;
+            }
+
+            public final void doSomething() {
+                System.out.println(enumI.getSomething());
+            }
+        }
+
+    }
+
+
+
+
+    class Test1 extends TestBase<Enum1> {
+
+        public Test1() {
+            add(new Eval(Enum1.A) {});
+        }
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEADEV15534.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEADEV15534.java
new file mode 100644
index 0000000..d4042a5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEADEV15534.java
@@ -0,0 +1,29 @@
+import java.util.ArrayList;
+import java.util.Collections;
+
+class SortTest<R extends Comparable<R>> implements Comparable<SortTest<R>> {
+    R r;
+
+    public SortTest(R r) {
+        this.r = r;
+    }
+
+    public int compareTo(SortTest<R> o) {
+        return r.compareTo(o.r);
+    }
+
+    public static void main(String[] args) {
+        ArrayList<SortTest<?>> list = new ArrayList<SortTest<?>>();
+        SortTest<?> t1 = new SortTest<String>("");
+        list.add(t1);
+        SortTest<?> t2 = new SortTest<Integer>(0);
+        list.add(t2);
+        <error descr="Inferred type 'SortTest<capture<?>>' for type parameter 'T' is not within its bound; should implement 'java.lang.Comparable<? super SortTest<?>>'">Collections.sort(list)</error>;
+        t1.compareTo<error descr="'compareTo(SortTest<capture<? extends java.lang.Comparable<capture<?>>>>)' in 'SortTest' cannot be applied to '(SortTest<capture<?>>)'">(t2)</error>;
+
+        //this should be OK
+        SortTest<?>[] arr = new SortTest<?>[0];
+        arr[0] = new SortTest<String>("");
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEADEV23157.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEADEV23157.java
new file mode 100644
index 0000000..c0c2b70
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEADEV23157.java
@@ -0,0 +1,10 @@
+import java.util.List;
+import java.util.Arrays;
+
+public class ZZZ {
+
+    List<Class<?>> f(Class<?>[] exceptionTypes) {
+       List<Class<?>> nd = Arrays.asList(exceptionTypes);
+       return nd;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEADEV24166.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEADEV24166.java
new file mode 100644
index 0000000..c1952d1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEADEV24166.java
@@ -0,0 +1,49 @@
+import java.util.*;
+
+interface TypesafeMap<BASE> {
+
+  @SuppressWarnings({"UnusedDeclaration"})
+  public interface Key<BASE,VALUE> { }
+
+  public <VALUE, KEY extends Key<BASE,VALUE>>
+    boolean has(Class<KEY> key);
+
+  public <VALUE, KEY extends Key<BASE,VALUE>>
+    VALUE get(Class<KEY> key);
+
+  public <VALUEBASE, VALUE extends VALUEBASE, KEY extends Key<BASE,VALUEBASE>>
+    VALUE set(Class<KEY> key, VALUE value);
+
+  public <VALUE, KEY extends Key<BASE,VALUE>>
+    VALUE remove(Class<KEY> key);
+
+  public Set<Class<?>> keySet();
+
+  public <VALUE, KEY extends Key<CoreMap, VALUE>>
+    boolean containsKey(Class<KEY> key);
+}
+
+
+interface CoreMap extends TypesafeMap<CoreMap> { }
+
+interface CoreAnnotation<V>
+  extends TypesafeMap.Key<CoreMap, V> {
+
+  public Class<V> getType();
+}
+
+
+class CoreMaps {
+
+  public static <K,V> Map<K,V> toMap(Collection<CoreMap> coremaps,
+      Class<CoreAnnotation<K>> keyKey, Class<CoreAnnotation<V>> valueKey) {
+
+    Map<K,V> map = new HashMap<K,V>();
+    for (CoreMap cm : coremaps) {
+      map.put(cm.get(keyKey), cm.get(valueKey));
+    }
+
+    return map;
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEADEV25778.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEADEV25778.java
new file mode 100644
index 0000000..a46a4a8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEADEV25778.java
@@ -0,0 +1,17 @@
+class Price {
+    public <PT extends Price> PT clone() {
+        return null;
+    }
+}
+
+class BondPrice extends Price {
+    public <PT extends BondPrice> PT clone() {
+        return null;
+    }
+}
+
+class User {
+    public static void main(String[] args) {
+        new BondPrice().clone<error descr="Ambiguous method call: both 'BondPrice.clone()' and 'Price.clone()' match">()</error>;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEADEV57343.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEADEV57343.java
new file mode 100644
index 0000000..3045621
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEADEV57343.java
@@ -0,0 +1,6 @@
+class D<T>  {
+    void foo(D<?> x){
+        bar<error descr="'bar(D<?>, D<? super java.lang.Object>)' in 'D' cannot be applied to '(D<capture<?>>, D<capture<?>>)'">(x,x)</error>;
+    }
+    <T> void bar(D<? extends T> x, D<? super T> y){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEADEV7337.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEADEV7337.java
new file mode 100644
index 0000000..9abc7f5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEADEV7337.java
@@ -0,0 +1,74 @@
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Comparator;
+
+
+class TestIDEA
+{
+
+  public static class Test1<Type extends List & Serializable>
+  {
+    public void process(Serializable s)
+    {
+    }
+    public void process(Type t)
+    {
+    }
+  }
+
+  public static class Test2 extends Test1<ArrayList>
+  {
+    public void process(Serializable s)
+    {
+      super.process(s);
+    }
+
+    public void process(ArrayList t)
+    {
+      super.process(t);   // this call is OK resolving to parameterized method in super
+    }
+  }
+
+  public static void main(String[] args)
+  {
+    Test2 test=new Test2();
+    ArrayList list=new ArrayList();
+    test.process(list);
+    test.process((Serializable)list);
+  }
+}
+
+class Key<T> {
+    Object add(T v) {
+        return v;
+    }
+}
+
+class WKey<W, T> extends Key<T> {
+
+    W add(T v) {
+        return null;
+    }
+}
+
+class IBug {
+
+    public static <W, T> void addItem(WKey<W, T> key, T v) {
+        key.add(v); // --> demetra draw this in red, see attachment
+    }
+}
+
+//IDEADEV-7698
+abstract class Collator implements Comparator<Object> {
+  public abstract int compare(String source, String target);
+
+  public int compare(Object o1, Object o2) {
+    return compare((String)o1, (String)o2);
+  }
+
+  public void foo(Collator c) {
+    c.compare("foo", "bar");
+  }
+}
+//end of //IDEADEV-7698
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IllegalGenericTypeInInstanceof.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IllegalGenericTypeInInstanceof.java
new file mode 100644
index 0000000..52871e8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IllegalGenericTypeInInstanceof.java
@@ -0,0 +1,53 @@
+class A<T> {
+  public void foo(Object object) {
+    if (object instanceof <error descr="Illegal generic type for instanceof">B</error>) {}
+    if (object instanceof A.B) {}
+    if (object instanceof A<?>.B) {}
+    if (object instanceof A<?>) {}
+    if (object instanceof <error descr="Illegal generic type for instanceof">A<String></error>) {}
+    if (object instanceof A) {}
+    if (object instanceof A[]) {}
+    if (object instanceof <error descr="Illegal generic type for instanceof">B[]</error>) {}
+    if (object instanceof A.B[]) {}
+  }
+
+  private class B {
+  }
+}
+
+class A1 {
+  public void foo(Object object) {
+    if (object instanceof B1) {}
+    if (object instanceof A1.B1) {}
+    if (object instanceof B1[]) {}
+  }
+
+  private class B1 {
+  }
+}
+
+class BreakpointTree<TP> {
+    void foo(Node node) {
+        if (node instanceof BNode<?>) {
+
+        }
+    }
+
+    static class BNode<B extends XBreakpoint<?>> extends Node{}
+}
+class Node {}
+class XBreakpoint<SR>{}
+
+public class GenericInnerClass<E> {
+    private void problem( Base base ) {
+        if ( base instanceof First) {}
+    }
+
+    private class Base {
+    }
+
+    private class First<T> extends Base {
+    }
+
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/ImplementAnnotation.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/ImplementAnnotation.java
new file mode 100644
index 0000000..bbe1e30
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/ImplementAnnotation.java
@@ -0,0 +1,15 @@
+import java.lang.annotation.Annotation;
+
+public @interface Foo {
+    String id();
+}
+
+class Bar implements Foo {
+    public String id() {
+        return null;
+    }
+
+    public Class<? extends Annotation> annotationType() {
+        return null;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/InaccessibleThroughWildcard.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/InaccessibleThroughWildcard.java
new file mode 100644
index 0000000..84ea561
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/InaccessibleThroughWildcard.java
@@ -0,0 +1,13 @@
+class JavacConfiguration {
+  private final String mySettings = "";
+
+  public static void foo(Class<? extends JavacConfiguration> aClass) {
+    Object o = getService(aClass).<error descr="'mySettings' has private access in 'JavacConfiguration'">mySettings</error>;
+    JavacConfiguration configuration = getService(aClass);
+    String string = configuration.mySettings;
+  }
+
+    public static <T> T getService(Class<T> serviceClass) {
+       return null;
+     }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IncompatibleReturnType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IncompatibleReturnType.java
new file mode 100644
index 0000000..c6cc761
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IncompatibleReturnType.java
@@ -0,0 +1,20 @@
+abstract class F<A, B> {
+  public abstract B f(A a);
+
+  public final F<A, P1<B>> lazy() {
+    return new F<A, P1<B>>() {
+      public P1<B> f(final A a) {
+        return null;
+      }
+    };
+  }
+
+  private class TestClient<A, B> extends F<A, P1<B>> {
+    public P1<B> f(final A a) {
+      return null;
+    }
+  }
+}
+
+class P1<T> {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/InconvertibleTypes.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/InconvertibleTypes.java
new file mode 100644
index 0000000..206389f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/InconvertibleTypes.java
@@ -0,0 +1,8 @@
+import java.util.*;
+
+class Test {
+  void foo(){
+    Properties properties = System.getProperties();
+    final Map<String, String> systemProperties = <error descr="Inconvertible types; cannot cast 'java.util.Properties' to 'java.util.Map<java.lang.String,java.lang.String>'">(Map<String, String>) properties</error>;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/InferenceWithBounds.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/InferenceWithBounds.java
new file mode 100644
index 0000000..bfdb8c5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/InferenceWithBounds.java
@@ -0,0 +1,61 @@
+import java.util.*;
+
+class CLS {
+    static <V extends String>  void bar (V v) {}
+
+    static void foo () {
+        bar<error descr="'bar(java.lang.String)' in 'CLS' cannot be applied to '(java.lang.Object)'">(new Object())</error>;
+    }
+}
+//////////////////////////////
+public abstract class ZZZ<K> {
+  public abstract <T extends String> ZZZ<T> get();
+}
+class Z2<K> extends ZZZ<K> {
+    public <T extends String> Z2<T> get() {
+        return null;
+    }
+    void f() {
+        Z2 z2 = get();
+    }
+}
+/////////////////
+abstract class LeastRecentlyUsedCache {
+interface Callable<V> {
+    V call() throws Exception;
+}
+
+    <E extends A> Callable<E> e(E e) {
+        return null;
+    }
+    <T extends B> Callable<T> f(boolean b, final T t) {
+        return b ? e(t) : new Callable<T>() {
+            public T call() throws Exception {
+                return t;
+            }
+        };
+    }
+
+    void ff() {
+
+    }
+
+    class A {}
+    class B extends A {}
+}
+//////////////////////////
+public class BadCodeGreen<T, C extends Collection<? extends T>> {
+    public BadCodeGreen(C c, T t) {
+        c.add<error descr="'add(capture<? extends T>)' in 'java.util.Collection' cannot be applied to '(T)'">(t)</error>;
+    }
+}
+////////////////////////////
+abstract class A {
+    public abstract <T extends List<?>> T create();
+}
+class B extends A {
+    public <T extends List<?>> T create() {
+        return null;
+    }
+}
+///////////////////////////
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/InferenceWithBoxingCovariant.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/InferenceWithBoxingCovariant.java
new file mode 100644
index 0000000..c78f8934
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/InferenceWithBoxingCovariant.java
@@ -0,0 +1,16 @@
+import java.util.*;
+
+class Test {
+  static class Pair<A, B> {
+    Pair(A a, B b) {
+    }
+
+    static <A, B> Pair<A, B> create(A a, B b) {
+      return new Pair<A, B>(a, b);
+    }
+  }
+
+  public static void getWordsWithOffset(String s, int startInd, final List<Pair<String, Integer>> res) {
+    res.add(Pair.create(s, startInd));
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/InferenceWithSuperBounds.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/InferenceWithSuperBounds.java
new file mode 100644
index 0000000..d68f907
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/InferenceWithSuperBounds.java
@@ -0,0 +1,16 @@
+public class ExampleProblem {
+    <T> void asserting(T t, Simple<T> l){
+    }
+
+    <K> Simple<? super K> comp(K k){
+        return null;
+    }
+
+    public void main(String[] args) {
+        asserting(0, comp(0));
+    }
+}
+
+class Simple<SST>{
+
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/InferenceWithUpperBoundPromotion.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/InferenceWithUpperBoundPromotion.java
new file mode 100644
index 0000000..82a2a68
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/InferenceWithUpperBoundPromotion.java
@@ -0,0 +1,30 @@
+
+public class NestedGenericGoodCodeIsRed {
+
+    public void main( String[] args ) {
+        satisfiesAllOf(isPositive(), isEqualTo(10.9));
+        satisfiesAllOf(isPositive(), isEqualTo(10));
+
+        Number num = null;
+        satisfiesAllOf(isPositive(), isEqualTo(num));
+
+        this.<Number>satisfiesAllOf<error descr="'satisfiesAllOf(NestedGenericGoodCodeIsRed.Predicate<? super java.lang.Number>, NestedGenericGoodCodeIsRed.Predicate<? super java.lang.Number>)' in 'NestedGenericGoodCodeIsRed' cannot be applied to '(NestedGenericGoodCodeIsRed.Predicate<java.lang.Number>, NestedGenericGoodCodeIsRed.Predicate<java.lang.Integer>)'">(isPositive(), isEqualTo(10))</error>;
+    }
+
+
+    public interface Predicate<T> {
+
+    }
+
+    public  <ALL> void satisfiesAllOf( Predicate<? super ALL> first, Predicate<? super ALL> second ) {
+    }
+
+    public  <POSITIVE extends Number> Predicate<POSITIVE> isPositive() {
+        return null;
+    }
+
+    public <EQUALTO extends Number> Predicate<EQUALTO> isEqualTo( EQUALTO target ) {
+        return null;
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/InheritFromTypeParameter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/InheritFromTypeParameter.java
new file mode 100644
index 0000000..3f9c26c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/InheritFromTypeParameter.java
@@ -0,0 +1,2 @@
+class C<T> extends <error descr="Class cannot inherit from its type parameter">T</error>
+{}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/InnerClassRef.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/InnerClassRef.java
new file mode 100644
index 0000000..27efb83
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/InnerClassRef.java
@@ -0,0 +1,19 @@
+import java.util.*;
+import Node.Details;
+
+public class Node<E> {
+    public class Details {
+        public E data;
+    }
+    public Details addNode(Node<E> child) {
+        return new Details();
+    }
+}
+
+class Test {
+  public static void main(String[] args) {
+     Map<String, Details> m = null;
+     Map<String, Node.Details> sorted1;
+     sorted1 = m;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/InstanceClassInStaticContextAccess.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/InstanceClassInStaticContextAccess.java
new file mode 100644
index 0000000..dcfad56b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/InstanceClassInStaticContextAccess.java
@@ -0,0 +1,62 @@
+class MyTest<K> {
+
+    class A<T> {
+    }
+
+    //not an error in java 8?!
+    static class C<T extends <error descr="'MyTest.this' cannot be referenced from a static context">A<String></error>> {
+    }
+
+    static <T extends <error descr="'MyTest.this' cannot be referenced from a static context">A<String></error>> void bar() {
+    }
+
+    static class B {
+        {
+            B.<<error descr="'MyTest.this' cannot be referenced from a static context">A</error>>bar();
+            <error descr="'MyTest.this' cannot be referenced from a static context">A</error> a;
+        }
+
+        static <T extends <error descr="'MyTest.this' cannot be referenced from a static context">A<String></error>> void bar() {
+        }
+
+        void v(C<<error descr="'MyTest.this' cannot be referenced from a static context">A<String></error>> c) {
+        }
+    }
+}
+
+class MyTest1 {
+
+    class A<T> {
+    }
+
+    static class C<T extends A<String>> {
+    }
+
+    static <T extends A<String>> void bar() {
+    }
+
+    static class B {
+        {
+            B.<A>bar();
+            A a = <error descr="'MyTest1.this' cannot be referenced from a static context">new A()</error>;
+        }
+
+        static <T extends A<String>> void bar() {
+        }
+
+        void v(C<A<String>> c) {
+        }
+    }
+}
+
+class MyTest2<T> {
+    static class A {
+      private MyTest2 myTest;
+  
+      public Object foo() {
+        return myTest.new Bar();
+      }
+    }
+
+    class Bar {}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IntersectionTypes.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IntersectionTypes.java
new file mode 100644
index 0000000..a197bf0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IntersectionTypes.java
@@ -0,0 +1,181 @@
+import java.io.*;
+import java.util.*;
+
+class Test {
+    <T> List<T> asList (T... ts) {
+      ts.hashCode();
+      return null;
+    }
+
+    void foo() {
+        <error descr="Incompatible types. Found: 'java.util.List<java.lang.Class<? extends java.io.Serializable & java.lang.Comparable<?>>>', required: 'java.util.List<java.lang.Class<? extends java.io.Serializable>>'">List<Class<? extends Serializable>> l = <warning descr="Unchecked generics array creation for varargs parameter">this.asList</warning>(String.class, Integer.class);</error>
+        l.size();
+        List<? extends Object> objects = this.asList(new String(), new Integer(0));
+        objects.size();
+    }
+}
+
+//SUN BUG ID 5034571
+interface I1 {
+    void i1();
+}
+
+class G1 <T extends I1> {
+    T get() { return null; }
+}
+
+interface I2 {
+    void i2();
+}
+
+class Main {
+    void f2(G1<? extends I2> g1) {
+        g1.get().i1(); // this should be OK
+        g1.get().i2(); // this should also be OK
+    }
+}
+
+//IDEADEV4200: this code is OK
+interface I11 {
+    String i1();
+}
+
+interface I21 {
+    String i2();
+}
+
+interface A<T> {
+    T some();
+}
+
+interface B<T extends I11 & I21> extends A<T> {
+
+}
+
+class User {
+
+    public static void main(B<?> test) {
+        System.out.println(test.some().i1());
+        System.out.println(test.some().i2());
+    }
+}
+/*
+ * Copyright 2000-2011 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.
+ */
+
+//end of IDEADEV4200
+
+//IDEADEV-4214
+interface Keyable<K> {
+    /**
+     * @return the key for the instance.
+     */
+    public K getKey();
+}
+
+abstract class Date implements java.io.Serializable, Cloneable, Comparable<Date> {
+
+}
+
+class Maps {
+    public static class MapEntry<K, V> implements Map.Entry<K, V> {
+        K k;
+        V v;
+
+        public K getKey() {
+            return k;
+        }
+
+        public V getValue() {
+            return v;
+        }
+
+        public V setValue(V value) {
+            return v = value;
+        }
+
+        public MapEntry(K k, V v) {
+            this.k = k;
+            this.v = v;
+        }
+    }
+
+    public static <K, V> Map.Entry<K, V> entry(K key, V value) {
+        return new MapEntry<K, V>(key, value);
+    }
+
+    public static <K, V> Map<K, V> asMap(Map.Entry<? extends K, ? extends V> ... <warning descr="Parameter 'entries' is never used">entries</warning>) {
+        return null;
+    }
+
+    public static <K, V extends Keyable<K>> Map<K, V> asMap(V ... <warning descr="Parameter 'entries' is never used">entries</warning>) {
+        return null;
+    }
+}
+
+class Client {
+    void f(Date d) {
+        //this call should be OK
+        <warning descr="Unchecked generics array creation for varargs parameter">Maps.asMap</warning>(Maps.entry(fieldName(), "Test"),
+                   Maps.entry(fieldName(), 1),
+                   Maps.entry(fieldName(), d));
+    }
+
+    String fieldName() {
+        return null;
+    }
+}
+//end of IDEADEV-4214
+
+class IDEADEV25515 {
+    static <T> List<T> asList (T... ts) {
+      ts.hashCode();
+      return null;
+    }
+
+    public static final
+    <error descr="Incompatible types. Found: 'java.util.List<java.lang.Class<? extends java.io.Serializable & java.lang.Comparable<?>>>', required: 'java.util.List<java.lang.Class<? extends java.io.Serializable>>'">List<Class<? extends Serializable>> SIMPLE_TYPES =
+<warning descr="Unchecked generics array creation for varargs parameter">asList</warning>(String.class, Integer.class ,Long.class, Double.class, /*Date.class,*/
+Boolean.class, Boolean.TYPE /*,String[].class */ /*,BigDecimal.class*/);</error>
+
+
+      public static final List<Class<? extends Serializable>> SIMPLE_TYPES_INFERRED =
+  <warning descr="Unchecked generics array creation for varargs parameter">asList</warning>(String.class, Integer.class ,Long.class, Double.class, /*Date.class,*/
+  Boolean.class, Boolean.TYPE ,String[].class  /*,BigDecimal.class*/);
+
+
+}
+///////////////////////
+class Axx {
+  <T extends Runnable> T a() {
+    <error descr="Incompatible types. Found: 'java.lang.Runnable', required: 'java.lang.String'">String s = a();</error>
+    s.hashCode();
+    return null;
+  }
+}
+///////////////
+interface L {}
+public class MaximalType  {
+    public static <T> T getParentOfType(Class<? extends T>... classes) {
+       classes.hashCode();
+       return null;
+    }
+    {
+        <warning descr="Unchecked generics array creation for varargs parameter">getParentOfType</warning>(M2.class, M.class);
+    }
+}
+class M extends MaximalType implements L{}
+class M2 extends MaximalType implements L{}
+/////////////
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/MethodCallParamsOnRawType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/MethodCallParamsOnRawType.java
new file mode 100644
index 0000000..e399e5a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/MethodCallParamsOnRawType.java
@@ -0,0 +1,32 @@
+class TestOnRawType {
+  public static void main(String[] args) {
+    new FooGenerator().process(TestOnRawType.class);
+    new FooGenerator().process(AFoo.class);
+    new FooGenerator().process(MFoo.class);
+    new FooGenerator<String>().process<error descr="'process(java.lang.Class<TestOnRawType.AFoo>)' in 'TestOnRawType.FooGenerator' cannot be applied to '(java.lang.Class<TestOnRawType>)'">(TestOnRawType.class)</error>;
+    new FooGenerator<String>().process(AFoo.class);
+    new FooGenerator<String>().process<error descr="'process(java.lang.Class<TestOnRawType.AFoo>)' in 'TestOnRawType.FooGenerator' cannot be applied to '(java.lang.Class<TestOnRawType.MFoo>)'">(MFoo.class)</error>;
+  }
+
+  static class AFoo {}
+  static class MFoo extends AFoo {}
+  static class FooGenerator<T> {
+    public void process(Class<AFoo> cls) {
+    }
+  }
+}
+
+class TestNonGenericType {
+  public static void main(String[] args) {
+    new FooGenerator().process<error descr="'process(java.lang.Class<TestNonGenericType.AFoo>)' in 'TestNonGenericType.FooGenerator' cannot be applied to '(java.lang.Class<TestNonGenericType>)'">(TestNonGenericType.class)</error>;
+    new FooGenerator().process(AFoo.class);
+    new FooGenerator().process<error descr="'process(java.lang.Class<TestNonGenericType.AFoo>)' in 'TestNonGenericType.FooGenerator' cannot be applied to '(java.lang.Class<TestNonGenericType.MFoo>)'">(MFoo.class)</error>;
+  }
+
+  static class AFoo {}
+  static class MFoo extends AFoo {}
+  static class FooGenerator {
+    public void process(Class<AFoo> cls) {
+    }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/MethodSignatureEquality.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/MethodSignatureEquality.java
new file mode 100644
index 0000000..e41b471
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/MethodSignatureEquality.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright 2000-2010 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.
+ */
+import java.io.*;
+class Test {
+  interface InterfA {
+    <T extends Cloneable & Iterable> void foo(T x);
+
+    <T extends Iterable & Cloneable> void foo(T x);
+  }
+
+  class ANotSame {
+    <T extends Cloneable & Iterable> void foo(T x){}
+
+    <T extends Iterable & Cloneable> void foo(T x){}
+  }
+
+  class BNotSame extends ANotSame {
+      @Override
+      <T extends Cloneable & Iterable> void foo(T x){}
+  }
+
+  abstract class A<T extends Throwable> {
+    abstract <T extends Comparable<?> & Serializable> void foo(T x, A<?> y);
+
+    abstract <T extends Serializable & Comparable<?>> void foo(T x, A<? extends Cloneable> y);
+  }
+
+ /* abstract class B<T extends Throwable> {
+    abstract <T extends Comparable<?> & Serializable> void foo(T x, B<?> y);
+
+    abstract <T extends Serializable & Comparable<?>> void foo(T x, B<? extends Throwable> y);
+  }
+
+
+  abstract class C<T extends Throwable & Serializable> {
+    abstract <T extends Comparable<?> & Serializable> void foo(T x, C<? extends Serializable> y);
+
+    abstract <T extends Serializable & Comparable<?>> void foo(T x, C<? extends Throwable> y);
+  }*/
+
+  abstract class D<T extends Throwable & Runnable> {
+    <error descr="'foo(T, D<? extends Runnable>)' clashes with 'foo(T, D<? extends Throwable>)'; both methods have same erasure">abstract <T extends Serializable & Comparable<?>> void foo(T x, D<? extends Runnable> y)</error>;
+
+    abstract <T extends Serializable & Comparable<?>> void foo(T x, D<? extends Throwable> y);
+  }
+
+
+  interface IA {}
+  interface IB {}
+  void testExtendsOrder() {
+    class E<T extends IA & IB> {
+      <error descr="'foo(E<? extends IA>)' clashes with 'foo(E<? extends IB>)'; both methods have same erasure">void foo(E<? extends IA> x)</error> {}
+      void foo(E<? extends IB> x) {}
+    }
+  }
+
+  abstract class F<T extends Throwable> {
+    <error descr="'foo(F<?>)' is already defined in 'Test.F'">abstract void foo(F<?> y)</error>;
+
+    abstract void foo(F<? extends Throwable> y);
+  }
+}
+
+class Ao {}
+
+class Bo extends Ao {}
+
+class SettingsEditor<T> {
+}
+
+abstract class RunConfigurationExtension<T extends Ao> {
+    protected abstract <P extends T> SettingsEditor<P> createEditor(final P configuration);
+}
+
+class F extends RunConfigurationExtension<Bo> {
+
+    @Override
+    protected <P extends Bo> SettingsEditor<P> createEditor(P configuration) {
+        return null;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/Methods.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/Methods.java
new file mode 100644
index 0000000..d0f994e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/Methods.java
@@ -0,0 +1,38 @@
+import java.util.*;
+
+interface Base {
+}
+
+class Derived implements Base {
+}
+
+class X {
+    void method(int i, Base b) { }
+    void method(int i, Derived b) { }
+
+    {
+        Derived d = new Derived();
+        method(10, d);
+    }
+}
+
+class Temp<T> {}
+
+class A {
+   <error descr="'A(T)' clashes with 'A(T)'; both methods have same erasure">public <T extends Temp<String>> A(T list)</error> {}
+   public <T extends Temp<Integer>> A(T list) {}
+}
+class B {
+   public <T extends A> B(T list) {}
+   public <T extends Temp<Integer>> B(T list) {}
+}
+
+
+
+//////////////////////////////////////////
+class IdeaBug {
+
+    static <T> T cloneMe(T arg) throws CloneNotSupportedException {
+        return (T) arg.<error descr="'clone()' has protected access in 'java.lang.Object'">clone</error>();
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/OverrideAtLanguageLevel5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/OverrideAtLanguageLevel5.java
new file mode 100644
index 0000000..8634677
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/OverrideAtLanguageLevel5.java
@@ -0,0 +1,16 @@
+interface I {
+	void f();
+}
+interface II extends I {
+    <error descr="@Override is not allowed when implementing interface method">@Override</error>
+    void f();
+}
+class C implements I {
+    <error descr="@Override is not allowed when implementing interface method">@Override</error>
+    public void f() {
+    }
+
+    <error descr="Method does not override method from its superclass">@Override</error>
+    public void notoverride() {
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/OverrideAtLanguageLevel6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/OverrideAtLanguageLevel6.java
new file mode 100644
index 0000000..d83cf65
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/OverrideAtLanguageLevel6.java
@@ -0,0 +1,13 @@
+interface I {
+	void f();
+}
+interface II extends I {
+    @Override
+    void f();
+}
+class C implements I {
+    @Override
+    public void f() {
+
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/OverrideWithMoreSpecificReturn.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/OverrideWithMoreSpecificReturn.java
new file mode 100644
index 0000000..c2f6877
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/OverrideWithMoreSpecificReturn.java
@@ -0,0 +1,15 @@
+import java.util.List;
+
+interface ExampleInterface {
+    public List exampleMethod();
+}
+
+class ExampleSuperClass {
+    public List<String> exampleMethod() {
+        return null;
+    }
+}
+
+
+public class  ExampleSubClass extends ExampleSuperClass implements ExampleInterface {
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/OverridingMethods.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/OverridingMethods.java
new file mode 100644
index 0000000..04d2fe2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/OverridingMethods.java
@@ -0,0 +1,517 @@
+import java.util.*;
+
+abstract class C<T> {
+    abstract T f(int t);
+    void ff(T t) {}
+
+    C covariant1() { return null; }
+    C covariant2() { return null; }
+    <A> A get() { return null; }
+}
+abstract class D<U> extends C<C<U>> {
+    abstract <error descr="'f(int)' in 'D' clashes with 'f(int)' in 'C'; attempting to use incompatible return type">U</error> f(int t);
+
+    // overloaded, not overrridden
+    int ff(int u) { return 0; }
+
+    <error descr="'ff(C<U>)' in 'D' clashes with 'ff(T)' in 'C'; attempting to use incompatible return type">int</error> ff(C<U> u) {
+      return 0;
+    }
+
+    <error descr="'covariant1()' in 'D' clashes with 'covariant1()' in 'C'; attempting to use incompatible return type">Object</error> covariant1() { return null; }
+    D covariant2() { return null; }
+
+    <A> A get() { return null; }
+}
+
+
+abstract class C1<T> {
+    abstract T f(int t);
+}
+abstract class D1<U> extends C1<C1<U>> {
+    abstract C1<U> f(int i);
+}
+
+
+class CC<T> {
+ CC<Integer> f() { return null; }
+ CC<Integer> f2() { return null; }
+ CC<Integer> f3() { return null; }
+
+
+ <K,V> K f(V v) { return null; }
+ int fPrimitive() { return 0; }
+}
+class DD<T> extends CC<T> {
+ <error descr="'f()' in 'DD' clashes with 'f()' in 'CC'; attempting to use incompatible return type">DD<String></error> f() { return null; }
+
+ DD<Integer> f2() { return null; }
+ CC f3() { return null; }
+
+ <P,O> <error descr="'f(O)' in 'DD' clashes with 'f(V)' in 'CC'; attempting to use incompatible return type">O</error> f(O o) { return null; }
+
+ // incompatible although assignable
+ <error descr="'fPrimitive()' in 'DD' clashes with 'fPrimitive()' in 'CC'; attempting to use incompatible return type">double</error> fPrimitive() { return 0; }
+}
+
+interface Gen<T> {
+ <K1 extends T> void f(Gen<K1> cc);
+}
+class Raw implements Gen {
+ public void f(Gen o) {
+   abstract class MyComparator<T> {
+      abstract int compare(T t, T t1);
+   }
+   // raw type implemetation
+   new MyComparator() {
+       public int compare(Object t, Object t1) {
+           return 0;
+       }
+   };
+ }
+}
+
+class Gen2<GT> implements Gen<GT> {
+ public <K2 extends GT> void f(Gen<K2> o) {}
+}
+
+////////////// ERASURE CONFLICT
+class A1 <T> {
+    T id(T t) {
+        return t;
+    }
+}
+interface I1 <T> {
+    T id(T t);
+}
+class A2 <T> extends A1<String> {
+    <error descr="'id(T)' in 'A2' clashes with 'id(T)' in 'A1'; both methods have same erasure, yet neither overrides the other">T id(T t)</error> {
+        return t;
+    }
+}
+class A3 <T> extends A1<String> {
+    <error descr="'id(Object)' in 'A3' clashes with 'id(T)' in 'A1'; both methods have same erasure, yet neither overrides the other">Object id(Object o)</error> {
+        return o;
+    }
+}
+<error descr="'id(T)' in 'A1' clashes with 'id(T)' in 'I1'; both methods have same erasure, yet neither overrides the other">class A4 extends A1<String> implements I1<Integer></error> {
+  String id(String t)
+    { return null;}
+  public Integer id(Integer i)
+    { return null; }
+}
+
+interface II1 <T> {
+    T id(int t);
+}
+interface II2 <T> {
+    T id(int t);
+}
+abstract class A5 implements II1<Integer>, II2<Integer> {}
+<error descr="'id(int)' in 'II2' clashes with 'id(int)' in 'II1'; methods have unrelated return types">abstract class A6 implements II1<Integer>, II2<String></error> {}
+abstract class A7 implements II1<Number>, II2<Integer>{}
+abstract class A8 implements II1<Integer>, II2<Number>{}
+
+
+abstract class HasGenericMethods<T> {
+    abstract <P> void toArray(P[] p);
+}
+public class RawOverridesGenericMethods extends HasGenericMethods{
+    public void toArray(Object[] ps) {
+    }
+}
+
+class CloneTest {
+    interface A {
+        A dup();
+    }
+    interface B extends A {
+        B dup();
+    }
+    interface C extends A {
+        C dup();
+    }
+    interface D extends B, C {
+        D dup();
+    }
+    interface X extends C, B {
+        X dup();
+    }
+    interface E extends C,A {
+      E dup();
+    }
+}
+///////////////
+class ArrBase {
+    C<String> getC() { return null; }
+    Object[] getO() { return null; }
+}
+class ArrTest extends ArrBase {
+    C getC() { return null; }
+    String[] getO() { return null; }
+}
+
+///////////
+class BarIU {
+    public <B> B[] toArray(B[] ts) {
+        return null;
+    }
+}
+interface IU {
+    public <I> I[] toArray(I[] ts);
+}
+public class BarIUBarIU extends BarIU implements IU{
+    public <T> T[] toArray(T[] ts) {
+        return null;
+    }
+}
+//////////////////////
+class MyIterator<T> {
+}
+class AAA <A> {
+    public MyIterator<A> iterator() {
+        return null;
+    }
+}
+
+interface III <I> {
+    MyIterator<I> iterator();
+}
+
+class CCC <T> extends AAA<T> implements III<T> {
+    public MyIterator<T> iterator() {
+        return null;
+    }
+}
+//////////////////////////////////
+interface CloneCovariant {
+    CloneCovariant clone();
+}
+
+interface ICloneCovariant extends CloneCovariant {
+}
+
+interface Cmp<T> {
+    int compareTo (T t);
+}
+<error descr="Class 'Singleton' must either be declared abstract or implement abstract method 'compareTo(T)' in 'Cmp'">class Singleton<T1> implements Cmp<Singleton<T1>></error> {
+  public <T2> int compareTo(Singleton<T1> t1) {
+    return 0;
+  }
+}
+
+class e<V>  {
+    <T> void u (T t) {}
+}
+
+class f extends e<String> {
+    //If we inherit by erasure, then no type parameters must be present
+    <error descr="'u(Object)' in 'f' clashes with 'u(T)' in 'e'; both methods have same erasure, yet neither overrides the other"><T> void u (Object o)</error> {}
+}
+
+//SCR 41593, the following overriding is valid
+interface q {
+    q foo();
+}
+
+interface p {
+    p foo();
+}
+
+class r implements q, p {
+    public  r foo() {
+        return null;
+    }
+}
+
+//IDEADEV-2255: this overriding is OK
+class Example {
+    interface Property<T> {
+        T t();
+    }
+
+    public static void main(String[] args) {
+        new ValueChangeListener<Number>() {
+            public <E extends Number> void valueChanged(Property<E> parent, E oldValue, E newValue) {
+            }
+        };
+    }
+
+    interface ValueChangeListener<T> {
+        <E extends T> void valueChanged(Property<E> property, E oldValue, E newValue);
+    }
+}
+
+//IDEADEV-3310: there is no hiding("static overriding") in this code thus no return-type-substitutability should be checked
+class BaseClass {}
+
+class SubClass extends BaseClass {}
+
+class BaseBugReport {
+
+    public static <T extends BaseClass>
+    java.util.Set<T> doSomething() {
+        return null;
+    }
+}
+
+class SubBugReport extends BaseBugReport {
+
+    public static <T extends SubClass>
+    java.util.Set<T> doSomething() {
+        return null;
+    }
+}
+
+class First<T extends Number> {
+    void m(T t) {
+        System.out.println("A: " + t);
+    }
+}
+
+class Second<S extends Integer> extends First<S> {
+    //@Override
+    void m(S t) {
+        System.out.println("B: " + t);
+    }
+}
+
+class Third extends Second<Integer> {
+    <error descr="'m(Number)' in 'Third' clashes with 'm(T)' in 'First'; both methods have same erasure, yet neither overrides the other">void m(Number t)</error> {
+        System.out.println("D#m(Number): " + t);
+    }
+
+    //@Override
+    void m(Integer t) {
+        System.out.println("D#m(Integer): " + t);
+    }
+}
+
+//IDEADEV-4587: this code is OK
+interface SuperA<T, E extends Throwable> {
+    T method() throws E;
+}
+
+interface SuperB<T, E extends Throwable> {
+    T method() throws E;
+}
+
+interface MyInterface<T, E extends Throwable> extends SuperA<T, E>, SuperB<T, E> {
+}
+
+//IDEADEV-2832
+class IDEADEV2832Test {
+    public static void main(String[] args) {
+        Listener<String> dl = new <error descr="'listen(T)' in 'Listener' clashes with 'listen(Object)' in 'Anonymous class derived from Listener'; both methods have same erasure, yet neither overrides the other">Listener<String></error>() {
+            public void listen(String obj) {
+            }
+
+            public void listen(Object obj) {
+            }
+        };
+    }
+}
+
+interface Listener<T> {
+    void listen(T obj);
+}
+
+//end of IDEADEV-2832
+
+//IDEADEV-8393
+class Super<A extends Collection> {
+    public String sameErasure(final List<?> arg)
+    {
+      System.out.println("Int list");
+      return null;
+    }
+
+}
+
+
+final class Manista extends Super<Collection> {
+
+    public  Collection sameErasure(final List<String> arg) {
+        System.out.println("String list");
+        return null;
+    }
+}
+//end of IDEADEV-8393
+
+///////////////////
+public class Prim {
+    Object g() {
+        return null;
+    }
+}
+class SPrim extends Prim {
+    byte[] g() {
+        return null;
+    }
+}
+
+//IDEADEV-21921
+interface TypeDispatcher<T,V> {
+    public <S extends T> void dispatch(Class<S> clazz, S obj);
+}
+class DefaultDispatcher<T,V> implements TypeDispatcher<T,V> {
+    public <S extends T> void dispatch(Class<S> clazz, S obj) {
+    }
+}
+interface Node {
+}
+
+class BubbleTypeDispatcher extends DefaultDispatcher<Node, String> {
+}
+//end of IDEADEV-21921
+
+////////////////////////////////////////
+public class Bug2 extends SmartList<Bug2> implements Places  {
+}
+interface Places extends java.util.List<Bug2> {}
+
+class SmartList<E> extends java.util.AbstractList<E>{
+    public E get(int index) {
+        return null;
+    }
+
+    public int size() {
+        return 0;
+    }
+}
+////////////////IDEADEV-23176
+class ActionImplementation extends MyAbstractAction
+{
+  public void actionPerformed()
+  {
+    throw new RuntimeException();
+  }
+}
+abstract class MyAbstractAction extends AbstractAction implements MyAction { }
+interface MyAction extends Action, BoundBean { }
+interface BoundBean {
+  void addPropertyChangeListener();
+  void removePropertyChangeListener();
+}
+interface Action extends ActionListener {
+    public void addPropertyChangeListener();
+    public void removePropertyChangeListener();
+}
+interface ActionListener {
+    public void actionPerformed();
+}
+abstract class AbstractAction implements Action{
+    public synchronized void addPropertyChangeListener() {
+    }
+    public synchronized void removePropertyChangeListener() {
+    }
+}
+//////////////////////////////
+class A extends BaseBuild implements SRunningBuild{
+}
+
+interface Build {
+  boolean isPersonal();
+}
+class BaseBuild implements Build {
+    public boolean isPersonal() {
+        return false;
+    }
+}
+interface HistoryBuild {
+  boolean isPersonal();
+}
+interface SRunningBuild extends Build,HistoryBuild{ }
+////////////////////////////////////
+
+interface PsiReferenceExpression extends PsiElement, PsiJavaCodeReferenceElement{}
+
+interface PsiJavaCodeReferenceElement extends Cloneable, PsiQualifiedReference{}
+interface PsiQualifiedReference extends PsiElement {}
+
+interface PsiElement {
+    String toString();
+}
+///////////////////////IDEADEV-24300 ////////////////////////
+public class ActionContext<A extends ContextAction> {
+}
+public abstract class ContextAction<AC extends ActionContext> {
+	protected abstract void performAction(AC context);
+}
+public class OurAction extends TableContextAction<Object> {
+	protected void performAction(TableContext<Object> context) {
+	}
+}
+public class TableContext<TCP> extends ActionContext<TableContextAction<TCP>> {
+}
+public abstract class TableContextAction<RO> extends ContextAction<TableContext<RO>> {
+}
+///////////////////////////////IDEADEV-23176 /////////////////////
+public interface MyListModel { }
+public interface MyList {
+    Object get(int i);
+    int hashCode();
+}
+public interface MutableListModel extends MyListModel, MyList {
+}
+public class ListModelImpl {
+    public Object get(int i) {
+        return null;
+    }
+}
+public class MutableListModelImpl extends ListModelImpl implements MutableListModel {
+}
+///////////////////////////////////////////////////////////////
+
+public class InheritanceBug {
+    interface A {
+        Object clone();
+    }
+
+    interface B {
+
+    }
+
+    interface C extends A, B {
+
+    }
+
+    class X implements C {
+        public Object clone() {
+            return null;
+        }
+    }
+
+    class Y extends X {
+    }
+}
+///////////////////////////////////////
+class ideadev {
+interface A {
+    A f();
+}
+
+interface B extends A {
+    B f();
+}
+
+interface C extends  A,B {
+
+}
+
+class s implements C {
+    public <error descr="'f()' in 'ideadev.s' clashes with 'f()' in 'ideadev.B'; attempting to use incompatible return type">A</error> f() {
+        return null;
+    }
+}
+class sOk implements C {
+    public  B f() {
+        return null;
+    }
+}
+
+}
+
+interface OverrideObject {
+   <T> void notify();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/ParameterizedParameterBound.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/ParameterizedParameterBound.java
new file mode 100644
index 0000000..50e117b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/ParameterizedParameterBound.java
@@ -0,0 +1,6 @@
+import java.util.*;
+class ParamHolder<T extends List<String>> {}
+class HolderUsage {
+        public void fail(ParamHolder<<error descr="Type parameter 'java.util.List' is not within its bound; should extend 'java.util.List<java.lang.String>'">List</error>> p) { }
+        public void success(ParamHolder<ArrayList<String>> p) { }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/PrivateInnerClassRef.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/PrivateInnerClassRef.java
new file mode 100644
index 0000000..ffe0efd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/PrivateInnerClassRef.java
@@ -0,0 +1,30 @@
+import java.util.Comparator;
+
+public abstract class A implements <error descr="'A.B' has private access in 'A'">Comparator<A.B></error> {
+
+  private static class B {
+  }
+
+  private interface I extends Comparator<I>{}
+  private interface I1 extends Comparator<I>{}
+}
+
+//abstract class C implements error descr="'C.D' has private access in 'C'">C.D error {
+//  private static class D {}
+//}
+
+class JSReferenceSet {
+    static class MyResolver implements JSResolveUtil.Resolver<M> {}
+    class M extends JSResolveUtil.F {}
+}
+class JSResolveUtil {
+    static interface Resolver<T extends F> {}
+    static class F {}
+}
+
+
+class TestIDEA62515 {
+  public static interface Model<T> {}
+  public class Inner {}
+  public static class Foo implements Model<Inner> {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/Raw.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/Raw.java
new file mode 100644
index 0000000..eb11019
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/Raw.java
@@ -0,0 +1,177 @@
+import java.util.ArrayList;
+
+class Reference<<warning descr="Type parameter 'T' is never used">T</warning>> {
+}
+class WeakReference<T> extends Reference<T> {
+}
+class Item<<warning descr="Type parameter 'Key' is never used">Key</warning>, T> extends WeakReference<T> {
+ {
+   Reference<T> ref = null;
+   Item item = (Item) ref;
+   equals(item);
+ }
+}
+
+// assign raw to generic are allowed
+class a<E> {
+ void f(a<E> t){
+    t.hashCode();
+ }
+}
+class b  {
+  a<b> f(a raw) {
+   a<?> unbound = raw;
+   raw = unbound;
+
+   a<Integer> generic = <warning descr="Unchecked assignment: 'a' to 'a<java.lang.Integer>'">raw</warning>;
+   <warning descr="Unchecked call to 'f(a<E>)' as a member of raw type 'a'">raw.f</warning>(raw);
+   <warning descr="Unchecked call to 'f(a<E>)' as a member of raw type 'a'">raw.f</warning>(generic);
+   generic.f(<warning descr="Unchecked assignment: 'a' to 'a<java.lang.Integer>'">raw</warning>);
+   generic.f(generic);
+   generic.f<error descr="'f(a<java.lang.Integer>)' in 'a' cannot be applied to '(a<java.lang.String>)'">(new a<String>())</error>;
+   generic = <warning descr="Unchecked assignment: 'a' to 'a<java.lang.Integer>'">raw</warning>;
+
+
+   return <warning descr="Unchecked assignment: 'a' to 'a<b>'">raw</warning>;
+  }
+}
+
+class List<T> {
+   <V> V[] toArray (V[] vs) { return vs; }
+   void add(T t) {
+     t.hashCode();
+   }
+}
+
+class c {
+  /*String[] f () {
+    List l = new List();
+    error descr="Incompatible types. Found: 'java.lang.Object[]', required: 'java.lang.String[]'">return l.toArray (new String[0]);</error
+  }*/
+  
+  String[] g () {
+    List<String> l = new List<String>();
+    return l.toArray (new String[0]);
+  }
+}
+
+class d {
+    class Y <<warning descr="Type parameter 'T' is never used">T</warning>> {
+    }
+
+    class Z <<warning descr="Type parameter 'T' is never used">T</warning>> extends Y<Y> {
+    }
+
+    class Pair <X> {
+        void foo(Y<? extends X> y) {
+          y.hashCode();
+        }
+    }
+
+    Pair<Z> pair;
+
+    void bar(Y<? extends Y> y) {
+        pair.foo<error descr="'foo(d.Y<? extends d.Z>)' in 'd.Pair' cannot be applied to '(d.Y<capture<? extends d.Y>>)'">(y)</error>;
+    }
+}
+
+class e {
+    String foo () {
+        MyList myList = new MyList();
+        <error descr="Incompatible types. Found: 'java.lang.Object', required: 'java.lang.String'">return myList.get(0);</error>
+    }
+
+    static class MyList<<warning descr="Type parameter 'T' is never used">T</warning>> extends ArrayList<String>{
+    }
+}
+
+class ccc {
+    static Comparable<? super ccc> f() {
+        return <warning descr="Unchecked assignment: 'java.lang.Comparable' to 'java.lang.Comparable<? super ccc>'">new Comparable () {
+            public int compareTo(final Object o) {
+                return 0;
+            }
+        }</warning>;
+    }
+}
+
+class ddd<COMP extends ddd> {
+    COMP comp;
+    ddd foo() {
+        return comp; //no unchecked warning is signalled here
+    }
+}
+
+class G1<T> {
+  T t;
+}
+class G2<T> {
+    T t;
+    
+    static ArrayList<G1> f() {
+        return null;
+    }
+}
+
+class Inst {
+    static void f () {
+        G2<G1<String>> g2 = new G2<G1<String>>();
+        for (<warning descr="Unchecked assignment: 'G1' to 'G1<java.lang.String>'">G1<String> g1</warning> : g2.f()) {
+          g1.toString();
+        }
+    }
+}
+
+class A111<T> {
+  T t;
+  <V> V f(V v) {
+    return v;
+  }
+
+  String g(A111 a) {
+    //noinspection unchecked
+    <error descr="Incompatible types. Found: 'java.lang.Object', required: 'java.lang.String'">return a.f("");</error>
+  }
+}
+
+class A1 {
+  <V> V f(V v) {
+    return v;
+  }
+}
+
+class A11<T> extends A1 {
+    T t;
+
+    //this is OK, type parameters of base class are not raw
+    String s = new A11().f("");
+}
+
+//IDEADEV-26163
+class Test1<X> {
+  X x;
+  java.util.ArrayList<Number> foo = new java.util.ArrayList<Number>();
+  public static Number foo() {
+    <error descr="Incompatible types. Found: 'java.lang.Object', required: 'java.lang.Number'">return new Test1().foo.get(0);</error>
+  }
+}
+//end of IDEADEV-26163
+
+
+///////////////  signatures in non-parameterized class are not erased
+public class C3  {
+    public int get(Class<?> c) {
+        return 0;
+    }
+}
+
+class Cp<T> extends C3 {
+  public T i;
+}
+class C extends Cp/*<C>*/ {
+    @Override
+    public int get(Class<?> c) {
+        return 0;
+    }
+}
+//////////////
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/RawOnParameterized.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/RawOnParameterized.java
new file mode 100644
index 0000000..a4079e9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/RawOnParameterized.java
@@ -0,0 +1,29 @@
+class GenericOuter<T> {
+    public class GenericInner<U> {
+    }
+
+    public static class StaticGenericInner<U> {
+    }
+
+    public class SimpleInner {
+    }
+}
+
+class OuterClient {
+    public void context() {
+        <error descr="Improper formed type; some type parameters are missing">GenericOuter<String>.GenericInner</error> v1 = null;
+        GenericOuter.GenericInner<error descr="Type arguments given on a raw type"><String></error> v2 = null;
+        GenericOuter.GenericInner v3 = null; 
+        GenericOuter<String>.GenericInner<String> v4 = null;
+
+        GenericOuter<error descr="Cannot select static class 'GenericOuter.StaticGenericInner' from parameterized type"><String></error>.StaticGenericInner sv1 = null;
+        GenericOuter.StaticGenericInner<String> sv2 = null;
+        GenericOuter.StaticGenericInner sv3 = null;
+        GenericOuter<error descr="Cannot select static class 'GenericOuter.StaticGenericInner' from parameterized type"><String></error>.StaticGenericInner<String> sv4 = null;
+
+        GenericOuter<String>.SimpleInner iv1 = null;
+        GenericOuter.SimpleInner<error descr="Type arguments given on a raw type"><String></error> iv2 = null;
+        GenericOuter.SimpleInner iv3 = null;
+        GenericOuter<String>.SimpleInner<error descr="Type 'GenericOuter.SimpleInner' does not have type parameters"><String></error> iv4 = null;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/RawOverridingMethods.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/RawOverridingMethods.java
new file mode 100644
index 0000000..1934012
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/RawOverridingMethods.java
@@ -0,0 +1,271 @@
+import java.util.*;
+
+class Base<T> {
+    public void method(Base<?> base) { }
+    public void method1(Base<Base<?>> base) { }
+    public <V> Base<V> foo() { return null; }
+    public Base<?> bar() { return null; }
+    public Base<Base<?>> far() { return null; }
+}
+
+class Derived extends Base {
+    public void method(Base base) { }
+    public Base foo() { return null; }
+    public Base bar() { return null; }
+}
+
+class Derived1 extends Base {
+    <error descr="'method1(Base<String>)' in 'Derived1' clashes with 'method1(Base<Base<?>>)' in 'Base'; both methods have same erasure, yet neither overrides the other">public void method1(Base<String> base)</error> { }
+    public Base<String> far() { return null; } // Acceptable construct as of JDK 1.5 beta 2 may 2004
+}
+
+class X <T> {
+    public <V> void foo () {}
+}
+
+class YY extends X {
+    <error descr="'foo()' in 'YY' clashes with 'foo()' in 'X'; both methods have same erasure, yet neither overrides the other">public <V> void foo()</error> {}
+}
+
+interface List<Y> {
+    public <T> T[] toArray(T[] ts);
+}
+class AbstractList<Y> {
+    public <T> T[] toArray(T[] ts) {return null;}
+}
+//Signatures from List and AbstractList are equal
+class ArrayList extends AbstractList implements List {}
+
+//SCR 39485: the following overriding is OK
+abstract class Doer {
+    abstract <X> void go(X x);
+}
+
+class MyList <X>
+   extends Doer {
+   X x; 
+   <Y> void go(Y y) {}
+}
+
+class MyListRaw
+       extends MyList {
+}
+
+//See IDEADEV-1125
+//The following two classes are OK
+class A1 {
+    <T> void foo(T t) {}
+}
+
+class A2 extends A1 {
+    void foo(Object o) {}
+}
+
+//While these are not
+class A3 {
+    void foo(Object o) {}
+}
+
+class A4 extends A3 {
+    <error descr="'foo(T)' in 'A4' clashes with 'foo(Object)' in 'A3'; both methods have same erasure, yet neither overrides the other"><T> void foo(T t)</error> {}
+}
+
+//This sibling override is OK
+class A5 {
+    public void foo(Object o) {}
+}
+
+interface I1 {
+    <T> void foo(T t);
+}
+
+class A6 extends A5 implements I1 {}
+
+//While this is not
+class A7 {
+    public <T> void foo(T t) {}
+}
+
+interface I2 {
+    public void foo(Object o);
+}
+
+<error descr="Class 'A8' must either be declared abstract or implement abstract method 'foo(Object)' in 'I2'">class A8 extends A7 implements I2</error> {}
+
+//IDEA-9321
+abstract class MyMap<K, V> implements java.util.Map<K, V> {
+    public  <error descr="'put(K, V)' in 'MyMap' clashes with 'put(K, V)' in 'java.util.Map'; attempting to use incompatible return type">Object</error> put(K key, V value) {
+        return null;
+    }
+}
+//end of IDEA-9321
+
+abstract class AA <T> {
+    abstract void foo(T t);
+}
+
+abstract class BB<T> extends AA<BB> {
+    void foo(BB b) {}
+}
+
+class CC extends BB {
+  //foo is correctly seen from BB
+}
+
+class QQQ {}
+
+abstract class GrandParent<T> {
+    public abstract void paint(T object);
+}
+
+class Parent<T extends QQQ> extends GrandParent<T> {
+    public void paint(T component) {
+    }
+}
+
+// this overriding should be OK
+class Child2 extends Parent {
+
+}
+
+class IDEA16494  {
+    class Base<B> {
+        public List<B> elements() {
+            return null;
+        }
+    }
+
+    class Derived<T> extends Base<T[]> {
+    }
+
+    class MostDerived extends Derived {
+
+        public List<MostDerived[]> elements() {
+            return null;
+        }
+    }
+}
+class IDEA16494Original  {
+    class Base<B> {
+        public List<B> elements() {
+            return null;
+        }
+    }
+
+    class Derived<T> extends Base<T> {
+    }
+
+    class MostDerived extends Derived {
+
+        public List<MostDerived> elements() {
+            return null;
+        }
+    }
+}
+class IDEADEV23176Example {
+  public abstract class AbstractBase<E> extends AbstractParent<E> implements Interface<E> {
+  }
+  public abstract class AbstractParent<E> {
+    public void Implemented(Collection<?> c) {
+    }
+    public abstract void mustImplement();
+  }
+  public class Baseclass extends AbstractBase implements Interface {
+    public void mustImplement() {
+    }
+  }
+  public interface Interface<E> {
+    void Implemented(Collection<?> c);
+  }
+}
+
+/** @noinspection UnusedDeclaration*/
+class IDEADEV26185
+{
+    public static abstract class SuperAbstract<Owner, Type>
+    {
+        public abstract Object foo(Type other);
+    }
+
+    public static abstract class HalfGenericSuper<Owner> extends SuperAbstract<Owner, String>
+    {
+        public abstract Object foo(String other);
+    }
+
+    public static abstract class AbstractImpl<Owner> extends HalfGenericSuper<Owner>
+    {
+        public Object foo(String other)
+        {
+            return null;
+        }
+    }
+
+    public static class Concrete extends AbstractImpl
+    {
+    }
+}
+
+class ideadev30090 {
+  abstract class MyBeanContext
+        implements MyListInterface/*<MyListMember>*/ {
+    public Object get(int index) {
+        return null;
+    }
+  }
+
+  interface MyListInterface<E extends MyListMember>
+        extends List<E> {
+  }
+  interface MyListMember {
+     void f();
+  }
+}
+//////////////////////////////////////////
+class IDEADEV32421 {
+ interface InterfaceWithFoo {
+    Class<?> foo();
+ }
+
+ class ParentWithFoo implements InterfaceWithFoo {
+    public Class foo() {
+        return null;
+    }
+ }
+
+ class TestII extends ParentWithFoo implements InterfaceWithFoo {
+ }
+}
+
+class IDEADEV32421_TheOtherWay {
+ interface InterfaceWithFoo {
+    Class foo();
+ }
+
+ class ParentWithFoo implements InterfaceWithFoo {
+    public Class<?> foo() {
+        return null;
+    }
+ }
+
+ class TestII extends ParentWithFoo implements InterfaceWithFoo {
+ }
+}
+//////////////////////////////////////
+class SBBug {
+  abstract class A<T> implements Comparable<A<T>> {}
+
+  class B extends A {
+      public int compareTo(Object o) {
+          return 0;
+      }
+  }
+}
+class SBBug2 {
+    abstract class A<T> implements Comparable<A<T>> {}
+
+    <error descr="Class 'B' must either be declared abstract or implement abstract method 'compareTo(T)' in 'Comparable'">class B extends A</error> {
+        public int compareTo(A o) {
+            return 0; 
+        }
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/ReferenceTypeParams.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/ReferenceTypeParams.java
new file mode 100644
index 0000000..9b70340
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/ReferenceTypeParams.java
@@ -0,0 +1,152 @@
+import java.lang.Object;
+import java.util.*;
+
+class C<T,U> {
+
+  C c1 = new C<error descr="Wrong number of type arguments: 1; required: 2"><Integer></error>();
+  C c2 = new C<error descr="Wrong number of type arguments: 3; required: 2"><Integer, Float, Object></error>();
+  Object o = new Object<error descr="Type 'java.lang.Object' does not have type parameters"><C></error>();
+
+  C c3 = new C();
+  C c4 = new C<Object, C>();
+  C<Integer, Float> c5 = new C<Integer, Float>(); 
+}
+
+class D<T extends C> {
+  {
+    new D<<error descr="Type parameter 'java.lang.Integer' is not within its bound; should extend 'C'">Integer</error>>();
+    new D<C>();
+    class CC extends C {};
+    new D<CC>();
+    new D<T>();
+  }
+
+  T field = new <error descr="Type parameter 'T' cannot be instantiated directly">T</error>();
+  T field2 = new <error descr="Type parameter 'T' cannot be instantiated directly">T</error>() { };
+  T[] array = new <error descr="Type parameter 'T' cannot be instantiated directly">T</error>[10];
+}
+
+class Primitives<T> {
+  Object a = new Primitives<<error descr="Type argument cannot be of primitive type">? extends int</error>>();
+  Object o = new Primitives<<error descr="Type argument cannot be of primitive type">int</error>>();
+  void f(Primitives<<error descr="Type argument cannot be of primitive type">boolean</error>> param) {
+    if (this instanceof Primitives<<error descr="Type argument cannot be of primitive type">double</error>>) {
+      return;
+    }
+  }
+}
+
+
+/////// calling super on generic bound class
+public class Generic<T> {
+    Generic(T t){}
+}
+public class Bound extends Generic<String>{
+    public Bound(String s) {
+        super(s);
+    }
+}
+
+////
+class Generic2<T1,T2> {
+  class A {}
+  class B {}
+  private <error descr="Incompatible types. Found: 'Generic2<java.lang.String,Generic2.B>', required: 'Generic2<java.lang.String,Generic2.A>'">Generic2<String, A> map = new Generic2<String,B>();</error>
+  {
+    <error descr="Incompatible types. Found: 'Generic2<java.lang.String,java.lang.String>', required: 'Generic2<java.lang.String,Generic2.A>'">map = new Generic2<String,String>()</error>;
+    map = new Generic2<String,A>();
+  }
+}
+
+class DummyList<T> {}
+abstract class GenericTest3 implements DummyList<<error descr="No wildcard expected">? extends String</error>> {
+    DummyList<DummyList<? extends DummyList>> l;
+    <T> void foo () {}
+    void bar () {
+         this.<DummyList<? extends DummyList>>foo();
+         DummyList<DummyList<? super String>>[] l = <error descr="Generic array creation">new DummyList<DummyList<? super String>>[0]</error>;
+         DummyList<String>[] l1 = <error descr="Generic array creation">{}</error>;
+    }
+
+    public <T> T[] getComponents (Class<T> baseInterfaceClass) {
+        T[] ts = <error descr="Generic array creation">{}</error>;
+
+        return ts;
+    }
+}
+
+class mylist<T> {}
+class myAList<T> extends mylist<T> {
+  {
+        mylist<String> l = <error descr="Inconvertible types; cannot cast 'myAList<java.lang.Integer>' to 'mylist<java.lang.String>'">(mylist<String>) new myAList<Integer>()</error>;
+        boolean b = <error descr="Operator '==' cannot be applied to 'myAList<java.lang.Integer>', 'myAList<java.lang.String>'">new myAList<Integer>() == new myAList<String>()</error>;
+
+        if (l instanceof <error descr="Illegal generic type for instanceof">myAList<String></error>);
+        Object o = new Object();
+        if (o instanceof <error descr="Class or array expected">T</error>);
+  }
+
+  Class<T> foo (Class<T> clazz) {
+        Class<String> clazz1 = (Class<String>)clazz;  //Should be unchecked warning
+        return <error descr="Cannot select from a type variable">T</error>.class;
+  }
+}
+
+class testDup<T, <error descr="Duplicate type parameter: 'T'">T</error>> { // CAN IT BE HIGHLIGHTED? b
+    public <T, <error descr="Duplicate type parameter: 'T'">T</error>> void foo() { // CAN IT BE HIGHLIGHTED?
+    }
+}
+
+class aaaa {
+    {
+        <error descr="Incompatible types. Found: 'java.lang.Class<java.lang.String>', required: 'java.lang.Class<? super java.lang.Object>'">Class<? super Object> c = String.class;</error>
+    }
+}
+
+//IDEADEV-6103: this code is OK
+class Foo {
+    mylist<Test> foo;
+
+    public Foo(mylist<Test> foo) {
+        this.foo = foo;
+    }
+
+    public Foo() {
+          this(new mylist<Test>());
+    }
+
+    private class Test {
+    }
+}
+//end of IDEADEV-6103
+
+class IDontCompile {
+   Map<error descr="Cannot select static class 'java.util.Map.Entry' from parameterized type"><?, ?></error>.Entry map;
+}
+
+abstract class GenericTest99<E extends Enum<E>> {
+    GenericTest99<<error descr="Type parameter 'java.lang.Enum' is not within its bound; should extend 'java.lang.Enum<java.lang.Enum>'">Enum</error>> local;
+}
+
+class ClassLiteral<T> {
+  {
+    Object c1 = <error descr="Cannot select from a type variable">T</error>.class;
+    Object c2 = <error descr="Cannot select from a type variable">T[]</error>.class;
+    
+    Object c3 = <error descr="Cannot select from parameterized type">List<String></error>.class;
+    Object c4 = <error descr="Cannot select from parameterized type">List<String>[]</error>.class;
+    Object c5 = List[].class;
+    Object c6 = List.class;
+  }
+}
+
+class Outer<E> {
+    final Inner[] i = <error descr="Generic array creation">new Inner[10]</error>;
+    class Inner {
+    }
+}
+class Outer1<E> {
+    final Inner[] i = new Inner[10];
+    static class Inner {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/SOE.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/SOE.java
new file mode 100644
index 0000000..a5f43e1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/SOE.java
@@ -0,0 +1,24 @@
+public class SOE {
+}
+abstract class VersionEntity<V extends Version<V, R>, R extends Ref<V, R>>
+    implements Version<V, R>{}
+
+interface Version<V extends Version<V, R>, R extends Ref<V, R>>{}
+
+abstract class RefEntity<V extends Version<V, R>, R extends Ref<V, R>>
+    implements Ref<V, R> {}
+
+interface Ref<V extends Version<V, R>, R extends Ref<V, R>>{}
+
+
+abstract class Node<G extends Node<G, GR>,
+               GR extends NodeRef<G, GR>> extends VersionEntity<G, GR> {}
+
+abstract class NodeRef<G extends Node<G, GR>, GR extends NodeRef<G, GR>> extends RefEntity<G, GR> {}
+
+
+class D {
+    void f() {
+        Version v = new Node<<error descr="Wildcard type '?' cannot be instantiated directly">?</error>, <error descr="Wildcard type '?' cannot be instantiated directly">?</error>>(){}<EOLError descr="';' expected"></EOLError>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/SameErasure.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/SameErasure.java
new file mode 100644
index 0000000..9bb49b2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/SameErasure.java
@@ -0,0 +1,34 @@
+import java.util.*;
+
+class SameSignatureTest {
+    <error descr="'sameErasure(List<String>)' clashes with 'sameErasure(List<Integer>)'; both methods have same erasure">public static void sameErasure(List<String> strings)</error> {
+    }
+
+    public static void sameErasure(List<Integer> integers) {
+    }
+}
+
+ class CCC {
+    <error descr="'f(Object)' clashes with 'f(Object)'; both methods have same erasure"><T> void f(Object o)</error> {}
+
+    void f(Object o) {}
+}
+
+public class Test1 {
+    <error descr="'bug(String)' clashes with 'bug(String)'; both methods have same erasure">public void bug(String s)</error> {
+    }
+
+    public static <T> T bug(String s) {
+        return null;
+    }
+}
+////////////////////////////////
+class Test {
+    <error descr="'test()' clashes with 'test()'; both methods have same erasure">public static <K, V> HashMap<K, V> test()</error> {
+        return new HashMap<K, V>();
+    }
+
+    public static String test() {
+        return "";
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/SameErasureDifferentReturnTypes.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/SameErasureDifferentReturnTypes.java
new file mode 100644
index 0000000..8bbd7b6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/SameErasureDifferentReturnTypes.java
@@ -0,0 +1,53 @@
+/** @noinspection UnusedDeclaration*/
+interface Matcher<T> {
+
+    boolean matches(java.lang.Object object);
+
+    void _dont_implement_Matcher___instead_extend_BaseMatcher_();
+}
+
+interface ArgumentConstraintPhrases {
+    <error descr="'with(Matcher<T>)' clashes with 'with(Matcher<Boolean>)'; both methods have same erasure"><T> T with(Matcher<T> matcher)</error>;
+    boolean with(Matcher<Boolean> matcher);
+    byte with(Matcher<Byte> matcher);
+    short with(Matcher<Short> matcher);
+    int with(Matcher<Integer> matcher);
+    long with(Matcher<Long> matcher);
+    float with(Matcher<Float> matcher);
+    double with(Matcher<Double> matcher);
+}
+
+class ExpectationGroupBuilder implements ArgumentConstraintPhrases {
+
+    <error descr="'with(Matcher<T>)' clashes with 'with(Matcher<Boolean>)'; both methods have same erasure">public <T> T with(final Matcher<T> matcher)</error> {
+        return null;
+    }
+
+    public boolean with(final Matcher<Boolean> matcher) {
+        return false;
+    }
+
+    public byte with(final Matcher<Byte> matcher) {
+        return 0;
+    }
+
+    public short with(final Matcher<Short> matcher) {
+        return 0;
+    }
+
+    public int with(final Matcher<Integer> matcher) {
+        return 0;
+    }
+
+    public long with(final Matcher<Long> matcher) {
+        return 0;
+    }
+
+    public float with(final Matcher<Float> matcher) {
+        return 0;
+    }
+
+    public double with(final Matcher<Double> matcher) {
+        return 0;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/SameErasureDifferentReturnTypesJdk14.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/SameErasureDifferentReturnTypesJdk14.java
new file mode 100644
index 0000000..b046069
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/SameErasureDifferentReturnTypesJdk14.java
@@ -0,0 +1,48 @@
+/** @noinspection UnusedDeclaration*/
+interface Matcher<T> {
+
+    boolean matches(Object object);
+
+    void _dont_implement_Matcher___instead_extend_BaseMatcher_();
+}
+
+interface ArgumentConstraintPhrases {
+    <T> T with(Matcher<T> matcher);
+    boolean with(Matcher<Boolean> matcher);
+    byte with(Matcher<Byte> matcher);
+    int with(Matcher<Integer> matcher);
+    long with(Matcher<Long> matcher);
+    float with(Matcher<Float> matcher);
+    double with(Matcher<Double> matcher);
+}
+
+class ExpectationGroupBuilder implements ArgumentConstraintPhrases {
+
+    public <T> T with(final Matcher<T> matcher) {
+        return null;
+    }
+
+    public boolean with(final Matcher<Boolean> matcher) {
+        return false;
+    }
+
+    public byte with(final Matcher<Byte> matcher) {
+        return 0;
+    }
+
+    public int with(final Matcher<Integer> matcher) {
+        return 0;
+    }
+
+    public long with(final Matcher<Long> matcher) {
+        return 0;
+    }
+
+    public float with(final Matcher<Float> matcher) {
+        return 0;
+    }
+
+    public double with(final Matcher<Double> matcher) {
+        return 0;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/SpecificReturnType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/SpecificReturnType.java
new file mode 100644
index 0000000..4fb890b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/SpecificReturnType.java
@@ -0,0 +1,13 @@
+abstract class Field<D> {
+    public D getValue(){return null;}
+}
+
+class LabelField extends Field<Object> {
+    public Object getValue() { return null; }
+}
+interface MyInterface<D> {
+    D getValue();
+}
+
+class MyLabelField extends LabelField implements MyInterface<Object> {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/StaticImports.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/StaticImports.java
new file mode 100644
index 0000000..047391d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/StaticImports.java
@@ -0,0 +1,16 @@
+
+import static java.util.Arrays.asList;
+import static java.util.Arrays.sort;
+<warning descr="Unused import statement">import static java.util.Arrays.binarySearch;</warning>
+
+public class StaticImports {
+    {
+        asList(new Object[]{});
+    }
+
+    void method() {
+        sort(new long[0]);
+//        sort< error descr="Cannot resolve method 'sort()'">()< /error>;
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/StaticOverride.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/StaticOverride.java
new file mode 100644
index 0000000..a40423ec
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/StaticOverride.java
@@ -0,0 +1,8 @@
+import java.util.*;
+
+public class MyClass implements Comparator<String> {
+
+    <error descr="Static method 'compare(String, String)' in 'MyClass' cannot override instance method 'compare(T, T)' in 'java.util.Comparator'">public static int compare(String a, String b)</error> {
+      return 42;
+    }
+} 
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/SuperMethodCallWithErasure.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/SuperMethodCallWithErasure.java
new file mode 100644
index 0000000..4bd51c0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/SuperMethodCallWithErasure.java
@@ -0,0 +1,18 @@
+import java.util.Set;
+
+interface Interface {
+    void method(Set<?> s);
+}
+
+class SuperClass implements Interface {
+    public void method(Set s) {
+        // do nothing
+    }
+}
+
+class SubClass extends SuperClass {
+    public void method(Set s) {
+        super.method(s);  //ERROR: Abstract method 'method(Set<?>)' cannot be accessed directly
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/SuperWildcardIsNotWithinItsBound.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/SuperWildcardIsNotWithinItsBound.java
new file mode 100644
index 0000000..8035e37
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/SuperWildcardIsNotWithinItsBound.java
@@ -0,0 +1,20 @@
+
+class TopGene<T> {
+}
+
+class MidRaw extends TopGene {
+}
+
+class BottomGene<T> extends MidRaw {
+}
+
+class GeneType<T extends TopGene<String>> {
+}
+
+class GeneUser {
+  public void success(GeneType<? extends BottomGene<String>> p) {
+  }
+
+  public void fail(GeneType<<error descr="Type parameter '? super BottomGene<String>' is not within its bound; should extend 'TopGene<java.lang.String>'">? super BottomGene<String></error>> p) {
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/ThisAsAccessObject.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/ThisAsAccessObject.java
new file mode 100644
index 0000000..f50fb8a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/ThisAsAccessObject.java
@@ -0,0 +1,9 @@
+class Outer {
+    private void foo() {}
+    class Inner extends Outer {
+        {
+           this.<error descr="'foo()' has private access in 'Outer'">foo</error>();
+           foo();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/TypeArgsOnRaw.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/TypeArgsOnRaw.java
new file mode 100644
index 0000000..f8e48b2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/TypeArgsOnRaw.java
@@ -0,0 +1,21 @@
+class GenericsTest {
+
+    static class SomeClass<U> {
+        public <T> T getX() {
+            return null;
+        }
+        public String f() {
+            return this.<String>getX();
+        }
+    }
+
+
+
+    public static void main(String[] args) {
+
+        String v1 = new SomeClass().<error descr="Type arguments given on a raw method"><String></error>getX();
+        String v2 = new SomeClass().f();  //
+
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/TypeArgumentsGivenOnAnonymousClassCreation.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/TypeArgumentsGivenOnAnonymousClassCreation.java
new file mode 100644
index 0000000..33214e2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/TypeArgumentsGivenOnAnonymousClassCreation.java
@@ -0,0 +1,12 @@
+class C
+{
+    Object x = new <error descr="Anonymous class implements interface; cannot have type arguments"><Integer></error> D() { };
+    Object x1 = new <Integer> P() { };
+    Object x2 = new <Integer> U() { };
+    Object x3 = new <error descr="Anonymous class implements interface; cannot have type arguments"><Integer></error> I() { };
+    interface D{}
+    abstract class P {}
+}
+
+interface I {}
+class U {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/TypeArgumentsGivenOnRawType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/TypeArgumentsGivenOnRawType.java
new file mode 100644
index 0000000..147fd86
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/TypeArgumentsGivenOnRawType.java
@@ -0,0 +1,31 @@
+class A<D> {
+  abstract class C<S> {
+    <T extends A> void foo(T.C<Integer> x) {
+      Integer bar = x.bar();
+    }
+
+    <T extends A> void foo1(A.C<error descr="Type arguments given on a raw type"><Integer></error> x) {
+      Integer bar = x.bar();
+    }
+
+    <T extends A> void foo2(A<String>.C<Integer> x) {
+      Integer bar = x.bar();
+    }
+
+    abstract S bar();
+  }
+}
+
+class A1 {
+  abstract class C<S> {
+    <T extends A1> void foo(T.C<Integer> x) {
+      Integer bar = x.bar();
+    }
+
+    <T extends A1> void foo1(A1.C<Integer> x) {
+      Integer bar = x.bar();
+    }
+
+    abstract S bar();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/TypeInference.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/TypeInference.java
new file mode 100644
index 0000000..f0d2741
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/TypeInference.java
@@ -0,0 +1,95 @@
+import java.io.FileNotFoundException;
+import java.util.*;
+
+interface PrivilegedExceptionAction <E extends Exception> {
+    void run() throws E;
+}
+
+class AccessController {
+    public static <E extends Exception> Object doPrivileged(PrivilegedExceptionAction<E> action) throws E {
+        return null;
+    }
+}
+class Test {
+    public static void main(String[] args) {
+        try {
+            AccessController.doPrivileged(
+                    new PrivilegedExceptionAction<FileNotFoundException>() {
+                        public void run() throws FileNotFoundException {
+                        }
+                    });
+        } catch (FileNotFoundException f) {
+        }
+    }
+
+// @#@! mock JDK Class does not take params
+//    static <T> T create(Class<T> t) throws InstantiationException, IllegalAccessException {
+//        return t.newInstance();
+//    }
+}
+
+//IDEADEV-6390
+class Printer<T> {
+    private final List<T> _elements;
+
+    private Printer(final Collection<? extends T> col) {
+        _elements = new ArrayList<T>(col);
+    }
+
+    public static <T> Printer<T> build(final Collection<? extends T> col) {
+        return new Printer<T>(col);
+    }
+
+    public static <T, S extends T> Printer<T> build(final S... elements) {
+        return new Printer<T>(Arrays.asList(elements));
+    }
+
+    public void print() {
+        for (final T element : _elements) {
+            System.out.println(element);
+        }
+
+    }
+
+    public static void main(final String[] args) {
+        final Printer<?> objects =  build(Integer.valueOf(5), Boolean.TRUE, "A String!"); //this is OK
+         objects.print();
+    }
+
+}
+//end of IDEADEV-6390
+
+//IDEADEV-6738
+interface I1<P1 extends I1<P1,P2>, P2 extends I2<P1,P2>>{}
+interface I2<P1 extends I1<P1,P2>, P2 extends I2<P1,P2>>{}
+
+class C1 implements I1<C1,C2>{}
+class C2 implements I2<C1,C2>{}
+
+class U {
+    public static <P1 extends I1<P1,P2>, P2 extends I2<P1,P2>> P1 test(P1 p1) {
+        return null;
+    }
+    {
+        C1 c = new C1();
+        U.test(c); //this should be OK
+    }
+}
+//end of IDEADEV-6738
+
+///////////////////////////////////
+public class Err {
+    void f() {
+        Decl[] extensions = getExtensions(Decl.EXTENSION_POINT_NAME);
+    }
+
+    static <T> T[] getExtensions(List<T> tExtensionPointName) {
+        return null;
+    }
+
+    public static class Decl<K,V> {
+        public static List<Decl> EXTENSION_POINT_NAME = null;
+    }
+
+}
+/////////////////////////////////////
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/TypeParameterBoundVisibility.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/TypeParameterBoundVisibility.java
new file mode 100644
index 0000000..f1ca102
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/TypeParameterBoundVisibility.java
@@ -0,0 +1,50 @@
+class A {
+   private int value = 1;
+
+   static class B<T extends A> {
+      void print(T t) {
+         System.out.println(t.<error descr="'value' has private access in 'A'">value</error>);
+      }
+   }
+}
+
+abstract class Foo<T extends Foo<T>> {
+    private int field;
+
+    public int bar(T t){
+        return t.<error descr="'field' has private access in 'Foo'">field</error>;
+    }
+}
+
+public class Bug {
+  // Idea incorrectly analyses this code with JDK 7
+  public <T extends Bug> void doit(T other) {
+    // Oops, was legal with JDK 6, no longer legal with JDK 7
+    other.<error descr="'mPrivate()' has private access in 'Bug'">mPrivate</error>();
+    // Redundant with JDK 6, not a redundant cast with JDK 7
+    ((Bug)other).mPrivate();
+  }
+
+  // Idea correctly analyses this code
+  public void doit2(SubClass other) {
+    // Not legal with JDK 6 or 7
+    other.<error descr="'mPrivate()' has private access in 'Bug'">mPrivate</error>();
+    // Not redundant with JDK 6 or 7
+    ((Bug)other).mPrivate();
+  }
+
+  private void mPrivate() {
+  }
+}
+
+class SubClass extends Bug {
+}
+
+class A67678
+{
+      private void foo(){}
+      <T extends A67678 & Cloneable> void bar(T x)
+      {
+          x.<error descr="'foo()' has private access in 'A67678'">foo</error>();
+      }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/TypeParameterBoundVisibilityJdk14.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/TypeParameterBoundVisibilityJdk14.java
new file mode 100644
index 0000000..df04ee7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/TypeParameterBoundVisibilityJdk14.java
@@ -0,0 +1,33 @@
+class A {
+   private int value = 1;
+
+   static class B<T extends A> {
+      void print(T t) {
+         System.out.println(t.value);
+      }
+   }
+}
+
+public class Bug {
+  // Idea incorrectly analyses this code with JDK 7
+  public <T extends Bug> void doit(T other) {
+    // Oops, was legal with JDK 6, no longer legal with JDK 7
+    other.mPrivate();
+    // Redundant with JDK 6, not a redundant cast with JDK 7
+    ((Bug)other).mPrivate();
+  }
+
+  // Idea correctly analyses this code
+  public void doit2(SubClass other) {
+    // Not legal with JDK 6 or 7
+    other.<error descr="'mPrivate()' has private access in 'Bug'">mPrivate</error>();
+    // Not redundant with JDK 6 or 7
+    ((Bug)other).mPrivate();
+  }
+
+  private void mPrivate() {
+  }
+}
+
+class SubClass extends Bug {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/TypeParameterBoundsList.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/TypeParameterBoundsList.java
new file mode 100644
index 0000000..506add0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/TypeParameterBoundsList.java
@@ -0,0 +1,33 @@
+class C<T extends Runnable&<error descr="Interface expected here">Exception</error>,U> {
+
+}
+
+class Stuff<X extends Stuff & Runnable> {
+    <T, V extends T & <error descr="Type parameter cannot be followed by other bounds">Runnable</error>> T method(V v) {
+        return null;
+    }
+
+    <T extends X & <error descr="Type parameter cannot be followed by other bounds">Runnable</error> & <error descr="Type parameter cannot be followed by other bounds">Comparable</error>> void f(T t) {
+
+    }
+
+    <T extends Stuff & Runnable & Comparable> void f2(T t) {
+
+    }
+    <T extends Runnable & Comparable> void f3(T t) {
+
+    }
+}
+
+////////////////
+public class TypeParameters {
+    class X {}
+    static <T extends X> void f(Class<T> t){}
+
+    static {
+        f(X.class);
+    }
+}
+class Typr {
+  <T extends TypeParameters.X> void f() {}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/TypeWithinItsWildcardBound.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/TypeWithinItsWildcardBound.java
new file mode 100644
index 0000000..47ecb3b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/TypeWithinItsWildcardBound.java
@@ -0,0 +1,317 @@
+public class WithingBounds {
+    interface I {
+    }
+    interface I1 {
+    }
+
+    void testE1() {
+        class A {
+        }
+        class B extends A {
+        }
+        class ToCheckExtends<TTT extends A> {
+        }
+
+        ToCheckExtends<? extends B> pr;
+    }
+
+    void testERec1() {
+        class A {
+        }
+        class B<K> extends A {
+        }
+        class C<Y>{}
+        class ToCheckExtends<TTT extends A> {
+        }
+
+        ToCheckExtends<<error descr="Type parameter '? extends C<? extends C>' is not within its bound; should extend 'A'">?  extends C<? extends C></error>> pr;
+        ToCheckExtends<? extends B<? extends C>> pr1;
+    }
+
+
+    void testE2() {
+        class A {
+        }
+        class B {
+        }
+        class ToCheckExtends<TTT extends A> {
+        }
+
+        ToCheckExtends<<error descr="Type parameter '? extends B' is not within its bound; should extend 'A'">? extends B</error>> pr;
+    }
+
+    void testE22() {
+        class B {
+        }
+        class A extends B {
+        }
+        class ToCheckExtends<TTT extends A> {
+        }
+
+        ToCheckExtends<? extends B> pr;
+    }
+
+
+    void testE23() {
+        class A {
+        }
+        class ToCheckExtends<TTT extends A> {
+        }
+
+        ToCheckExtends<? extends I> pr;
+    }
+
+    void testE24() {
+        final class A {
+        }
+        class ToCheckExtends<TTT extends A> {
+        }
+
+        ToCheckExtends<<error descr="Type parameter '? extends I' is not within its bound; should extend 'A'">? extends I</error>> pr;
+    }
+
+
+    void testE25() {
+      class B {
+        void foo() {
+          this.<Iterable>bar();
+        }
+
+        <T extends Iterable<String>> void bar() {
+        }
+      }
+    }
+
+    void testE26() {
+      class A<T>{}
+      class B {
+        void foo() {
+          this.<A>bar();
+        }
+
+        <T extends A<String>> void bar() {
+        }
+      }
+    }
+
+  //---------------------------------
+
+    void testE3() {
+        class A {
+        }
+        class ToCheckExtends<TTT extends I> {
+        }
+
+        ToCheckExtends<? extends A> pr;
+    }
+
+    void testE4() {
+        final class A {
+        }
+        class ToCheckExtends<TTT extends I> {
+        }
+
+        ToCheckExtends<<error descr="Type parameter '? extends A' is not within its bound; should extend 'WithingBounds.I'">? extends A</error>> pr;
+    }
+
+    void testE5() {
+        final class A implements I {
+        }
+        class ToCheckExtends<TTT extends I> {
+        }
+
+        ToCheckExtends<? extends A> pr;
+    }
+
+
+    interface AInterface {
+    }
+    void testE6() {
+
+        class ToCheckExtends<TTT extends I> {
+        }
+
+        ToCheckExtends<? extends AInterface> pr;
+    }
+
+    //-----------------------------
+
+    void testS1() {
+        class A {
+        }
+        class B extends A {
+        }
+        class ToCheckExtends<TTT extends A> {
+        }
+
+        ToCheckExtends<? super B> pr;
+    }
+
+    void testS2() {
+        class A {
+        }
+        class B {
+        }
+        class ToCheckExtends<TTT extends A> {
+        }
+
+        ToCheckExtends<<error descr="Type parameter '? super B' is not within its bound; should extend 'A'">? super B</error>> pr;
+    }
+
+    void testS3() {
+        class A {
+        }
+        class B extends A {
+        }
+        class ToCheckExtends<TTT extends B> {
+        }
+
+        ToCheckExtends<<error descr="Type parameter '? super A' is not within its bound; should extend 'B'">? super A</error>> pr;
+    }
+
+  void testMisc() {
+     class A<T, S extends T> {}
+     class i {}
+     final class ii extends i {}
+
+     A<String, String> pr4;
+     A<Integer, <error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Integer'">String</error>> pr5;
+     A<String, ? extends String> pr51;
+     A<Integer, <error descr="Type parameter '? extends String' is not within its bound; should extend 'java.lang.Integer'">? extends String</error>> pr52;
+     A<String, ? super String> pr53;
+     A<ii, <error descr="Type parameter 'i' is not within its bound; should extend 'ii'">i</error>> pr54;
+     A<i, ii> pr55;
+     A<i, ? extends ii> pr56;
+     A<ii, ? extends i> pr57;
+     A<i, ? super ii> pr58;
+     A<ii, <error descr="Type parameter '? super i' is not within its bound; should extend 'ii'">? super i</error>> pr59;
+     A<i, <error descr="Type parameter '? extends A<i, i>' is not within its bound; should extend 'i'">? extends A<i, i></error>> pr510;
+     A<i, <error descr="Type parameter 'ii[]' is not within its bound; should extend 'i'">ii[]</error>> pr511;
+     A<i, ?> pr512;
+
+     A<?, ?> pr30;
+     A<?, <error descr="Type parameter 'i' is not within its bound; should extend '?'">i</error>> pr3;
+     A<? extends Object, i> pr330;
+     A<?, ? extends ii> pr2;
+     A<?, <error descr="Type parameter '? super String' is not within its bound; should extend '?'">? super String</error>> pr10;
+     A<?, <error descr="Type parameter 'A' is not within its bound; should extend '?'">A<?, ?></error>> pr31;
+     A<?, <error descr="Type parameter 'ii[]' is not within its bound; should extend '?'">ii[]</error>> pr32;
+     A<?, <error descr="Type parameter 'A' is not within its bound; should extend '?'">A<i, i></error>> pr33;
+
+     A<? extends i, i> pr6;
+     A<? extends ii, <error descr="Type parameter 'i' is not within its bound; should extend '? extends ii'">i</error>> pr6x1;
+     A<? extends i, ii> pr6x2;
+     A<? extends ii, ii> pr6x3;
+     A<? extends i, <error descr="Type parameter 'java.lang.Integer' is not within its bound; should extend '? extends i'">Integer</error>> pr8;
+
+     A<? extends i, <error descr="Type parameter '? extends String' is not within its bound; should extend '? extends i'">? extends String</error>> pr12;
+     A<? extends i, ? extends i> pr13;
+     A<? extends i, ? extends ii> pr14;
+     A<? extends ii, ? extends i> pr13x3;
+     A<? extends ii, ? extends ii> pr13x4;
+
+
+     A<? extends i, ? super i> pr19;
+     A<? extends i, ? super ii> pr110;
+     A<? extends ii, ? super ii> pr11x0;
+     A<? extends ii, <error descr="Type parameter '? super i' is not within its bound; should extend '? extends ii'">? super i</error>> pr111;
+
+     A<? extends i, ?> pr15;
+     A<? extends i, <error descr="Type parameter 'ii[]' is not within its bound; should extend '? extends i'">ii[]</error>> pr16;
+     A<? extends i, <error descr="Type parameter 'A' is not within its bound; should extend '? extends i'">A<?, ?></error>> pr17;
+     A<? extends i, <error descr="Type parameter 'A' is not within its bound; should extend '? extends i'">A<ii, ii></error>> pr18;
+     A<? extends ii, <error descr="Type parameter '? super String' is not within its bound; should extend '? extends ii'">? super String</error>> pr112;
+     A<? extends ii, <error descr="Type parameter '? super A<i, i>' is not within its bound; should extend '? extends ii'">? super A<i, i></error>> pr113;
+
+     A<? super i, i> pr701;
+     A<? super i, <error descr="Type parameter 'java.lang.String' is not within its bound; should extend '? super i'">String</error>> pr72;
+     A<? super i, ?> pr73;
+     A<? super i, <error descr="Type parameter 'ii[]' is not within its bound; should extend '? super i'">ii[]</error>> pr74;
+     A<? super i, <error descr="Type parameter '? extends String' is not within its bound; should extend '? super i'">? extends String</error>> pr75;
+     A<? super i, ? extends i> pr76;
+     A<? super ii, ? extends i> pr77;
+     A<? super ii, ? extends ii> pr78;
+     A<? super i, ? super i> pr79;
+     A<? super i, ? super ii> pr791;
+     A<? super ii, ? super ii> pr713;
+     A<? super i, <error descr="Type parameter '? super String' is not within its bound; should extend '? super i'">? super String</error>> pr712;
+     A<? super ii, <error descr="Type parameter '? super i' is not within its bound; should extend '? super ii'">? super i</error>> pr710;
+     A<? super  ii, <error descr="Type parameter 'i' is not within its bound; should extend '? super ii'">i</error>> pr70;
+     A<? super i, ii> pr71;
+     A<? super i, ? extends ii> pr711;
+
+     A<i[], i[]> a1;
+     A<i[], <error descr="Type parameter 'java.lang.Object' is not within its bound; should extend 'i[]'">Object</error>> a2;
+     A<i[], ii[]> a3;
+     A<ii[], <error descr="Type parameter 'i[]' is not within its bound; should extend 'ii[]'">i[]</error>> a4;
+
+     A<i[], <error descr="Type parameter 'int[]' is not within its bound; should extend 'i[]'">int[]</error>> a5;
+     A<Object, int[]> a6;
+     A<Cloneable, int[]> a7;
+     A<java.io.Serializable, int[]> a8;
+     A<Cloneable[], <error descr="Type parameter 'int[]' is not within its bound; should extend 'java.lang.Cloneable[]'">int[]</error>> a9;
+     A<Cloneable[], int[][]> a10;
+     A<Cloneable[][], int[][][]> a11;
+     A<Cloneable[], <error descr="Type parameter 'i[]' is not within its bound; should extend 'java.lang.Cloneable[]'">i[]</error>> a12;
+     A<Cloneable[], i[][]> a13;
+
+     A<? super i[], ii[]> a14;
+     A<? super i[], i[]> a140;
+     A<? super ii[], <error descr="Type parameter 'i[]' is not within its bound; should extend '? super ii[]'">i[]</error>> a141;
+     A<? super i[], <error descr="Type parameter 'i' is not within its bound; should extend '? super i[]'">i</error>> a142;
+     A<? super i[], <error descr="Type parameter 'java.lang.String' is not within its bound; should extend '? super i[]'">String</error>> a143;
+     A<? super i[], <error descr="Type parameter 'i[][]' is not within its bound; should extend '? super i[]'">i[][]</error>> a144;
+     A<? super i[], ? extends i[]> a145;
+     A<? super i[], ? extends ii[]> a146;
+     A<? super ii[], ? extends i[]> a147;
+     A<? super i[], <error descr="Type parameter '? extends i' is not within its bound; should extend '? super i[]'">? extends i</error>> a148;
+     A<? super i[], <error descr="Type parameter '? extends String' is not within its bound; should extend '? super i[]'">? extends String</error>> a149;
+     A<? super i[], ?> a1410;
+     A<? super i[], <error descr="Type parameter '? extends i[][]' is not within its bound; should extend '? super i[]'">? extends i[][]</error>> a1411;
+     A<? super i[], ? super i[]> a1412;
+     A<? super i[], ? super ii[]> a1413;
+     A<? super ii[], <error descr="Type parameter '? super i[]' is not within its bound; should extend '? super ii[]'">? super i[]</error>> a1414;
+     A<? super i[], <error descr="Type parameter '? super i' is not within its bound; should extend '? super i[]'">? super i</error>> a1415;
+     A<? super i[], <error descr="Type parameter '? super String' is not within its bound; should extend '? super i[]'">? super String</error>> a1416;
+     A<? super i[], <error descr="Type parameter '? super i[][]' is not within its bound; should extend '? super i[]'">? super i[][]</error>> a1417;
+
+      A<? extends i[], ii[]> a15;
+      A<? extends i[], i[]> a150;
+      A<? extends ii[],<error descr="Type parameter 'i[]' is not within its bound; should extend '? extends ii[]'">i[]</error>> a151;
+      A<? extends i[], <error descr="Type parameter 'i' is not within its bound; should extend '? extends i[]'">i</error>> a152;
+      A<? extends i[], <error descr="Type parameter 'java.lang.String' is not within its bound; should extend '? extends i[]'">String</error>> a153;
+      A<? extends i[], <error descr="Type parameter 'i[][]' is not within its bound; should extend '? extends i[]'">i[][]</error>> a154;
+      A<? extends i[], ? extends i[]> a155;
+      A<? extends i[], ? extends ii[]> a156;
+      A<? extends ii[], ? extends i[]> a157;
+      A<? extends i[], <error descr="Type parameter '? extends i' is not within its bound; should extend '? extends i[]'">? extends i</error>> a158;
+      A<? extends i[], <error descr="Type parameter '? extends String' is not within its bound; should extend '? extends i[]'">? extends String</error>> a159;
+      A<? extends i[], ?> a1510;
+      A<? extends i[], <error descr="Type parameter '? extends i[][]' is not within its bound; should extend '? extends i[]'">? extends i[][]</error>> a1511;
+      A<? extends i[], ? super i[]> a1512;
+      A<? extends i[], ? super ii[]> a1513;
+      A<? extends ii[], <error descr="Type parameter '? super i[]' is not within its bound; should extend '? extends ii[]'">? super i[]</error>> a1514;
+      A<? extends i[], <error descr="Type parameter '? super i' is not within its bound; should extend '? extends i[]'">? super i</error>> a1515;
+      A<? extends i[], <error descr="Type parameter '? super String' is not within its bound; should extend '? extends i[]'">? super String</error>> a1516;
+      A<? extends i[], <error descr="Type parameter '? super i[][]' is not within its bound; should extend '? extends i[]'">? super i[][]</error>> a1517;
+
+    A<? extends Cloneable, ? extends i[]> a16;
+    A<? extends Cloneable[], ? extends i[][]> a160;
+    A<Cloneable, ? extends i[]> a161;
+    A<? super Cloneable, ? extends i[]> a162;
+    A< I1[], ? extends  I[]> cl;
+
+  }
+
+  void testRawTypes() {
+    class A<T extends A<T>> {}
+    A a;
+    A<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'A<java.lang.String>'">String</error>> a1;
+    A<<error descr="Type parameter 'A' is not within its bound; should extend 'A<A>'">A</error>> a2;
+    A<A<<error descr="Type parameter 'A' is not within its bound; should extend 'A<A>'">A</error>>> a3;
+
+    A<? extends A> a4;
+    A<<error descr="Type parameter '? super A' is not within its bound; should extend 'A<? super A>'">? super A</error>> a5;
+    A<<error descr="Type parameter 'A[]' is not within its bound; should extend 'A<A[]>'">A[]</error>> a7;
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/UncheckedCasts.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/UncheckedCasts.java
new file mode 100644
index 0000000..0532d1f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/UncheckedCasts.java
@@ -0,0 +1,108 @@
+import java.util.*;
+
+class X<<warning descr="Type parameter 'T' is never used">T</warning>> {
+
+}
+
+class XX<T> extends X<T> {
+  Object f(X<String> x) {
+    if (x != null) {
+      XX<String> xx = <warning descr="Unchecked cast: 'XX' to 'XX<java.lang.String>'">(XX<String>)new XX()</warning>;
+      return xx;
+    }
+    if (1 == 1) {
+      XX<String> xx = (XX<String>)x;
+      return xx;
+    }
+    return null;
+  }
+}
+
+class eee<COMP extends eee> {
+    COMP comp;
+    COMP foo() {
+        return <warning descr="Unchecked cast: 'eee' to 'COMP'">(COMP) new eee()</warning>;
+    }
+}
+
+class AllPredicate<T>
+    {
+    private List<Set<? super T>> lists;
+
+    public void e(AllPredicate that)
+    {
+         lists = <warning descr="Unchecked cast: 'java.util.List' to 'java.util.List<java.util.Set<? super T>>'">(List<Set<? super T>>)that.lists</warning>;
+    }
+
+    public static List<String> fff() {
+        Collection<String> c = new ArrayList<String>();
+        return (List<String>) c; //not unchecked
+    }
+
+    public static Comparable<Object> ggg() {
+        Object time = new Object();
+        return <warning descr="Unchecked cast: 'java.lang.Object' to 'java.lang.Comparable<java.lang.Object>'">(Comparable<Object>) time</warning>;
+    }
+
+    public static void foo(SortedMap<?, ?> sourceSortedMap) {
+        new TreeMap<Object, Object>(<warning descr="Unchecked cast: 'java.util.Comparator<capture<?>>' to 'java.util.Comparator<? super java.lang.Object>'">(Comparator<? super Object>) sourceSortedMap.comparator()</warning>);
+    }
+}
+
+class K { }
+class L extends K { }
+class M {
+  public static <T extends K> L f(T t) {
+     return (L) t; //this should NOT generate unchecked cast
+  }
+}
+
+class UncheckedCastFalsePositive {
+
+    public static void method(Object something) {
+        if (something instanceof NumberList) {
+            NumberList<? extends Number> <warning descr="Variable 'numberList' is never used">numberList</warning> = (NumberList<?  extends Number>) something;
+        }
+
+    }
+
+    public static class NumberList<E extends Number> extends ArrayList<E> {
+    }
+
+}
+
+class IDEA21547 {
+  class O {}
+  class A<<warning descr="Type parameter 'T' is never used">T</warning>> {}
+  class B<K extends O> extends A<K>{}
+
+  public void bar(A<? extends O> a, B<O> b) {
+    b = <warning descr="Unchecked cast: 'IDEA21547.A<capture<? extends IDEA21547.O>>' to 'IDEA21547.B<IDEA21547.O>'">(B<O>)a</warning>;
+    System.out.println(b);
+  }
+
+  public void bar1(A<?> a, B<O> b) {
+    b = <warning descr="Unchecked cast: 'IDEA21547.A<capture<?>>' to 'IDEA21547.B<IDEA21547.O>'">(B<O>)a</warning>;
+    System.out.println(b);
+  }
+
+  public void bar2(A<?> a, B<?> b) {
+    b = <warning descr="Unchecked cast: 'IDEA21547.A<capture<?>>' to 'IDEA21547.B<IDEA21547.O>'">(B<O>)a</warning>;
+    System.out.println(b);
+  }
+
+  public void bar4(A<? extends O> a, B<?> b) {
+    b = <warning descr="Unchecked cast: 'IDEA21547.A<capture<? extends IDEA21547.O>>' to 'IDEA21547.B<IDEA21547.O>'">(B<O>)a</warning>;
+    System.out.println(b);
+  }
+
+  public void bar5(A<? super O> a, B<?> b) {
+    b = <warning descr="Unchecked cast: 'IDEA21547.A<capture<? super IDEA21547.O>>' to 'IDEA21547.B<IDEA21547.O>'">(B<O>)a</warning>;
+    System.out.println(b);
+  }
+
+  public void bar6(A a, B<?> b) {
+    b = <warning descr="Unchecked cast: 'IDEA21547.A' to 'IDEA21547.B<IDEA21547.O>'">(B<O>)a</warning>;
+    System.out.println(b);
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/UncheckedOverriding.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/UncheckedOverriding.java
new file mode 100644
index 0000000..44ef9ce
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/UncheckedOverriding.java
@@ -0,0 +1,45 @@
+class List<T> { T t;}
+
+class Base<T> {
+    List<T> getList(List<T> l) {
+        return null;
+    }
+
+
+}
+
+class Derived extends Base <String> {
+    <warning descr="Unchecked overriding: return type requires unchecked conversion. Found 'List', required 'List<java.lang.String>'">List</warning> getList(List<String> l) {
+        return null;
+    }
+}
+
+class A1 {
+    <T> T foo(T t) {
+        return null;
+    }
+}
+
+class A2 extends A1 {
+    <warning descr="Unchecked overriding: return type requires unchecked conversion. Found 'java.lang.Object', required 'T'">Object</warning> foo(Object o) {
+        return null;
+    }
+}
+
+//IDEADEV-15918
+abstract class Outer<U> {
+    public abstract Inner m(U u);
+
+    public class Inner {
+    }
+}
+
+class Other extends Outer<Other> {
+    public Ither m(Other other) {
+        return new Ither();
+    }
+
+    public class Ither extends Inner {
+    }
+}
+//end of IDEADEV-15918
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/UncheckedWarningsLevel6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/UncheckedWarningsLevel6.java
new file mode 100644
index 0000000..12b581d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/UncheckedWarningsLevel6.java
@@ -0,0 +1,128 @@
+import java.lang.Override;
+import java.util.*;
+class GenericsTest<T> {
+
+    static <S> S next(GenericsTest<S> test)
+    {
+        System.out.println(test);
+        return null;
+    }
+
+    public Iterator<T> iterator()
+    {
+        return new Iterator<T>() {
+            @Override
+            public boolean hasNext()
+            {
+                return false;
+            }
+
+            @Override
+            public T next()
+            {
+                return GenericsTest.next(GenericsTest.this);
+            }
+
+            @Override
+            public void remove()
+            {
+            }
+        };
+    }
+}
+
+class GenericsTest1<T> {
+
+    static <S> S next1(GenericsTest1<S> test)
+    {
+        System.out.println(test);
+        return null;
+    }
+
+    public Iterator<T> iterator()
+    {
+        return new Iterator<T>() {
+            @Override
+            public boolean hasNext()
+            {
+                return false;
+            }
+
+            @Override
+            public T next()
+            {
+                return GenericsTest1.next1(GenericsTest1.this);
+            }
+
+            @Override
+            public void remove()
+            {
+            }
+        };
+    }
+}
+
+
+class GenericsTest2<T> {
+
+    static <S> S next2(GenericsTest2<S> test)
+    {
+        System.out.println(test);
+        return null;
+    }
+
+    public Iterator<T> iterator()
+    {
+        return new Iterator<T>() {
+            @Override
+            public boolean hasNext()
+            {
+                return false;
+            }
+
+            @Override
+            public T next()
+            {
+                return next2(GenericsTest2.this);
+            }
+
+            @Override
+            public void remove()
+            {
+            }
+        };
+    }
+}
+class Example {
+    private static <T> void assertThat(T actual, Matcher<? super T> matcher) {
+      assert actual != null;
+      assert matcher != null;
+    }
+
+    private static <E> Matcher<? super Collection<? extends E>> hasSize(int size) {
+        assert size >=0;
+        return new Matcher<Collection<? extends E>>() {
+          @Override
+          public void foo(Collection<? extends E> es) {
+            System.out.println(es);
+          }
+        };
+    }
+
+    public static void main(String[] args) {
+      List<Boolean> list = <warning descr="Unchecked assignment: 'java.util.ArrayList' to 'java.util.List<java.lang.Boolean>'">new ArrayList()</warning>;
+      System.out.println(list);
+      assertThat(new ArrayList<Boolean>(), hasSize(0));
+    }
+
+    private interface Matcher<T> {
+      void foo(T t);
+    }
+}
+
+abstract class IDEA57337<<warning descr="Type parameter 'S' is never used">S</warning>> {
+    abstract <T> void foo(IDEA57337<? super IDEA57337<T>> x);
+    void bar(IDEA57337<? super IDEA57337<?>> x){
+        foo(x);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/Unused.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/Unused.java
new file mode 100644
index 0000000..f6d429e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/Unused.java
@@ -0,0 +1,11 @@
+enum e {
+  A("xxx");
+
+  private String s;
+  e(String str) {
+    s = str;
+  }
+  public String getS() {
+    return s;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/Varargs.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/Varargs.java
new file mode 100644
index 0000000..c9956f6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/Varargs.java
@@ -0,0 +1,33 @@
+class clazz1 {
+    clazz1(int... args) { args = null; }
+    public static class Myclazz1 extends clazz1 {}
+}
+
+class AmbiguousReference {
+  void test() {
+    doSomething<error descr="Ambiguous method call: both 'AmbiguousReference.doSomething(String, Number...)' and 'AmbiguousReference.doSomething(Number...)' match">(null, 1)</error>;
+  }
+
+  void doSomething(String s, Number... n) {
+    s+=n;
+  }
+
+  void doSomething(Number... n) {
+    n.hashCode();
+  }
+}
+
+class OK {
+    protected void fff() {
+        find("");
+    }
+    public void find(String queryString)  {
+       queryString.hashCode();
+    }
+
+    public void find(final String queryString, final Object... values)  {
+       queryString.hashCode();
+       values.hashCode();
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/Variance.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/Variance.java
new file mode 100644
index 0000000..a52f648
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/Variance.java
@@ -0,0 +1,285 @@
+import java.util.*;
+import java.util.Comparator;
+
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: dsl
+ * Date: Mar 25, 2004
+ * Time: 8:08:44 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public class VarianceTesting {
+    void method(List<? extends VarianceTesting> l) {
+//        l.add(new VarianceTesting());
+        l.add(null);
+    }
+
+    static void shuffle(Collection<?> c) {}
+
+    static class X<T> {
+        T field;
+        T[] arrayField;
+        T[] method() {return  arrayField;};
+        void putAll(Collection<? super T> c) {}
+    }
+
+    void method1(List<? super VarianceTesting> l) {
+        List<? extends VarianceTesting> l1 = new ArrayList<VarianceTesting>();
+        l1.add<error descr="'add(capture<? extends VarianceTesting>)' in 'java.util.List' cannot be applied to '(VarianceTesting)'">(new VarianceTesting())</error>;
+        List<List<? extends VarianceTesting>> lll = null;
+        lll.add(l1);
+        X<? extends VarianceTesting> x = new X<VarianceTesting>();
+        VarianceTesting z = x.field;
+        VarianceTesting[] v = x.arrayField;
+        VarianceTesting v1 = x.arrayField[0];
+        x.arrayField[0] = new VarianceTesting();
+        <error descr="Incompatible types. Found: 'VarianceTesting', required: 'capture<? extends VarianceTesting>'">x.field = new VarianceTesting()</error>;
+        VarianceTesting[] k = x.method();
+        k[0] = new VarianceTesting();
+        x.method()[0] = new VarianceTesting();
+        <error descr="Incompatible types. Found: 'VarianceTesting[]', required: 'capture<? extends VarianceTesting>[]'">x.arrayField = new VarianceTesting[10]</error>;
+        l1.addAll<error descr="'addAll(java.util.Collection<? extends capture<? extends VarianceTesting>>)' in 'java.util.List' cannot be applied to '(java.util.ArrayList<VarianceTesting>)'">(new ArrayList<VarianceTesting>())</error>;
+        <error descr="Incompatible types. Found: 'java.util.ArrayList<java.lang.String>', required: 'java.util.List<? extends VarianceTesting>'">List<? extends VarianceTesting> l2 = new ArrayList<String>();</error>
+        List<? extends VarianceTesting> l3 = l2;
+        VarianceTesting t = l1.get(0);
+        l.add(new VarianceTesting());
+        l.add(null);
+        <error descr="Incompatible types. Found: 'java.lang.Object', required: 'VarianceTesting'">VarianceTesting t1 = l.get(0);</error>
+        X<? extends VarianceTesting> x1 = null;
+        x1.putAll(new ArrayList<VarianceTesting>());
+        List<?> unknownlist = l;
+        List<?> unknownlist1 = new ArrayList<VarianceTesting>();
+        List<?> unknownlist2 = new ArrayList<<error descr="Wildcard type '?' cannot be instantiated directly">?</error>>();
+        shuffle(l);
+        shuffle(new ArrayList<VarianceTesting>());
+        List<VarianceTesting> lllll = new ArrayList<VarianceTesting>();
+        lllll.removeAll(new ArrayList<String>());
+    }
+
+}
+
+class SuperTester <U> {
+     void go(Acceptor<? super U> acceptor, U u) {
+          acceptor.accept<error descr="'accept(SuperTester<capture<? super U>>, capture<? super U>)' in 'SuperTester.Acceptor' cannot be applied to '(SuperTester<U>, U)'">(this, u)</error>;
+     }
+
+     static class Acceptor <V> {
+          void accept(SuperTester<V> tester, V v) { }
+     }
+}
+
+class SCR40202 {
+    void foo(Map<?, String> map) {
+        for (<error descr="Incompatible types. Found: 'java.util.Iterator<java.util.Map.Entry<capture<?>,java.lang.String>>', required: 'java.util.Iterator<java.util.Map.Entry<?,java.lang.String>>'">Iterator<Map.Entry<?, String>> it = map.entrySet().iterator();</error> it.hasNext();) {
+
+        }
+    }
+}
+
+class CaptureTest {
+   static class Emum<T> {
+      T t;
+      public static <T extends Emum<T>> T valueOf(Class<T> enumType,
+                                                String name) {
+                                                return null;
+      }
+   }
+
+   void foo (Class<? extends Emum<CaptureTest>> clazz) {
+     <error descr="Inferred type '? extends CaptureTest.Emum<CaptureTest>' for type parameter 'T' is not within its bound; should extend 'CaptureTest.Emum<? extends CaptureTest.Emum<CaptureTest>>'">Emum.valueOf(clazz, "CCC")</error>;
+   }
+}
+
+class SuperTest {
+    public List<List<? extends SuperTest>> waitingList;
+
+    public Comparator<List<?>> SIZE_COMPARATOR;
+
+    {
+       //This call has its type arguments inferred alright: T -> List<capture<? extends SuperTest>>
+       Collections.sort(waitingList, SIZE_COMPARATOR);
+    }
+}
+
+class Bug<A> {
+    static class B<C> {
+    }
+
+    static class D<E> {
+        B<E> f() {
+            return null;
+        }
+    }
+
+    <G extends A> void h(B<G> b) {
+    }
+    
+    void foo(D<? extends A> d) {
+        h(d.f());   //This call is OK as a result of reopening captured wildcard for calling "h"
+    }
+}
+
+//IDEA-4215
+class Case2 {
+        class A {}
+
+        class B extends A {}
+
+        Comparator<A> aComparator;
+        Case2() {
+
+            ArrayList<B> blist = new ArrayList<B>();
+
+            // this call is OK: T -> B
+            Collections.sort(blist, aComparator);
+        }
+}
+
+class S1 {
+    <T> void f(List<T> l1, T l2) {
+
+    }
+
+    void bar(List<? extends S1> k) {
+        f<error descr="'f(java.util.List<S1>, S1)' in 'S1' cannot be applied to '(java.util.List<capture<? extends S1>>, S1)'">(k,  k.get(0))</error>;
+    }
+}
+
+class S2 {
+    <T> void f(List<T> l1, List<T> l2) {
+
+    }
+
+    void bar(List<? extends S2> k) {
+        f<error descr="'f(java.util.List<T>, java.util.List<T>)' in 'S2' cannot be applied to '(java.util.List<capture<? extends S2>>, java.util.List<capture<? extends S2>>)'">(k, k)</error>;
+    }
+}
+
+class S3 {
+    <T> void f(Map<T,T> l2) {
+
+    }
+
+    void bar(Map<? extends S3, ? extends S3> k) {
+        f<error descr="'f(java.util.Map<T,T>)' in 'S3' cannot be applied to '(java.util.Map<capture<? extends S3>,capture<? extends S3>>)'">(k)</error>;
+    }
+}
+
+class TypeBug {
+    private static class ValueHolder<T> {
+        public T value;
+    }
+
+    public static void main(final String[] args) {
+        List<ValueHolder<?>> multiList = new ArrayList<ValueHolder<?>>();
+
+        ValueHolder<Integer> intHolder = new ValueHolder<Integer>();
+        intHolder.value = 1;
+
+        ValueHolder<Double> doubleHolder = new ValueHolder<Double>();
+        doubleHolder.value = 1.5;
+
+        multiList.add(intHolder);
+        multiList.add(doubleHolder);
+        swapFirstTwoValues<error descr="'swapFirstTwoValues(java.util.List<TypeBug.ValueHolder<T>>)' in 'TypeBug' cannot be applied to '(java.util.List<TypeBug.ValueHolder<?>>)'">(multiList)</error>; //need to be highlighted
+
+        // this line causes a ClassCastException when checked.
+        Integer value = intHolder.value;
+        System.out.println(value);
+    }
+
+    private static <T> void swapFirstTwoValues(List<ValueHolder<T>> multiList) {
+        ValueHolder<T> intHolder = multiList.get(0);
+        ValueHolder<T> doubleHolder = multiList.get(1);
+
+        intHolder.value = doubleHolder.value;
+    }
+}
+
+class OtherBug {
+public static void foo(List<? extends Foo> foos) {
+    final Comparator<Foo> comparator = createComparator();
+    Collections.sort(foos, comparator);  //this call is OK
+  }
+
+  private static Comparator<Foo> createComparator() {
+    return null;
+  }
+
+  public interface Foo {
+  }
+}
+
+class OtherBug1 {
+  public static void foo(List<? super Foo> foos) {
+    final Comparator<Foo> comparator = createComparator();
+    Collections.sort<error descr="'sort(java.util.List<T>, java.util.Comparator<? super T>)' in 'java.util.Collections' cannot be applied to '(java.util.List<capture<? super OtherBug1.Foo>>, java.util.Comparator<OtherBug1.Foo>)'">(foos, comparator)</error>;
+  }
+
+  private static Comparator<Foo> createComparator() {
+    return null;
+  }
+
+  public interface Foo {
+  }
+}
+
+//IDEADEV-7187
+class AA <B extends AA<B,C>, C extends AA<C, ?>>{}
+//end of IDEADEV-7187
+
+//IDEADEV-8697
+class GenericTest99<E extends GenericTest99<E, F>,F> {
+}
+class GenericTest99D<E extends GenericTest99D<E>> extends GenericTest99<E,Double> {
+}
+class Use99<U extends GenericTest99<?,F>,F> {
+}
+class Use99n extends Use99<GenericTest99D<?>,Double> {
+}
+//end of IDEADEV-8697
+
+class IDEA79360 {
+    public static void main(Map<?, ?> map, Map<Object, Object> test) {
+        map.putAll<error descr="'putAll(java.util.Map<capture<?>,capture<?>>)' in 'java.util.Map' cannot be applied to '(java.util.Map<java.lang.Object,java.lang.Object>)'">(test)</error>;
+        map.put<error descr="'put(capture<?>, capture<?>)' in 'java.util.Map' cannot be applied to '(java.lang.String, java.lang.String)'">("", "")</error>;
+        map.put<error descr="'put(capture<?>, capture<?>)' in 'java.util.Map' cannot be applied to '(java.lang.Object, java.lang.Object)'">(new Object(), new Object())</error>;
+        map = new HashMap<Object, Object>(test);
+    }
+}
+
+class GenericFailureExample {
+
+ interface Descriptor<T extends Comparable<T>> {
+   Class<T> getType();
+ }
+
+ void isMarkedFaultyButCompilesClean(Descriptor<?> n) {
+   bar(n.getType());
+ }
+
+ <T extends Comparable<T>> void butThisWorks(Descriptor<T> n) {
+   bar(n.getType());
+ }
+
+ <T extends Comparable<T>> Comparator<T> bar(Class<T> type) {
+   return null;
+ }
+}
+
+//IDEA-67675
+abstract class A67675<T>
+{
+    abstract T foo();
+}
+
+abstract class B67675<T> extends A67675<T[]> { }
+
+class C67675<T extends B67675<?>>
+{
+    void foo(T x)
+    {
+        x.foo()[0] = "";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/WideningCastToTypeParam.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/WideningCastToTypeParam.java
new file mode 100644
index 0000000..7615d72
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/WideningCastToTypeParam.java
@@ -0,0 +1,51 @@
+import java.lang.Double;
+
+interface IConverter<C> {
+}
+
+abstract class AbstractNumberConverter<N extends Number> implements IConverter<N> {
+}
+
+class DoubleConverter extends AbstractNumberConverter<Double> {
+}
+
+public class Test {
+  public static <C> IConverter<C> getConverter(Class<C> type) {
+    return (IConverter<C>)new DoubleConverter() {
+    };
+  }
+
+  public static <C extends String> IConverter<C> getConverter1(Class<C> type) {
+    return <error descr="Inconvertible types; cannot cast 'DoubleConverter' to 'IConverter<C>'">(IConverter<C>)new DoubleConverter() {
+    }</error>;
+  }
+
+  public static <C extends Double> IConverter<C> getConverter2(Class<C> type) {
+    return (IConverter<C>)new DoubleConverter() {
+    };
+  }
+
+  public static void main(String[] args) {
+    IConverter<String> converter = getConverter(String.class);
+    IConverter<String> converter1 = getConverter1(String.class);
+    IConverter<String> converter2 = <error descr="Inferred type 'java.lang.String' for type parameter 'C' is not within its bound; should extend 'java.lang.Double'">getConverter2(String.class)</error>;
+  }
+}
+
+
+class Z {
+
+}
+
+class TestNonNarrowingConversion<T extends Z> {
+    public TestNonNarrowingConversion(T u) {
+
+    }
+
+    public T z = null;
+
+    public int a() {
+        <error descr="Incompatible types. Found: 'TestNonNarrowingConversion<Z>', required: 'TestNonNarrowingConversion<T>'">TestNonNarrowingConversion<T> x = new TestNonNarrowingConversion<Z>(new Z());</error>
+        return 1;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/WildcardCastConversion.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/WildcardCastConversion.java
new file mode 100644
index 0000000..ac8d53b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/WildcardCastConversion.java
@@ -0,0 +1,532 @@
+public class Test {
+  interface A {}
+  interface B {}
+
+ //? extends A, ? extends B -----------------------------------------
+    void testEE1() {
+        class A {}
+        class B {}
+
+        W<? extends A> xx = null;
+        W<? extends B> y = <error descr="Inconvertible types; cannot cast 'W<capture<? extends A>>' to 'W<? extends B>'">(W<? extends B>) xx</error>;
+    }
+
+    void testEE2() {
+        class A {}
+        class B extends A {}
+
+        W<? extends A> xx = null;
+        W<? extends B> y = (W<? extends B>) xx;
+    }
+
+    void testEE21() {
+        class A {}
+        class B extends A {}
+
+        W<? extends B> xx = null;
+        W<? extends A> y = (W<? extends A>) xx;
+    }
+
+    void testEE211() {
+        class A {}
+        final class B extends A {}
+
+        W<? extends A> xx = null;
+        W<? extends B> y = (W<? extends B>) xx;
+    }
+
+    void test3EE() {
+        W<? extends A> xx = null;
+        W<? extends B> y = (W<? extends B>) xx;
+    }
+
+    void test4EE() {
+        class A {}
+        W<? extends A> xx = null;
+        W<? extends B> y = (W<? extends B>) xx;
+    }
+
+    void test41EE() {
+        class A {}
+        W<? extends B> xx = null;
+        W<? extends A> y = (W<? extends A>) xx;
+    }
+
+    void test411EE() {
+        final class A {}
+        W<? extends B> xx = null;
+        W<? extends A> y = <error descr="Inconvertible types; cannot cast 'W<capture<? extends Test.B>>' to 'W<? extends A>'">(W<? extends A>) xx</error>;
+    }
+
+    void test412EE() {
+        final class A implements B {}
+        W<? extends B> xx = null;
+        W<? extends A> y = (W<? extends A>) xx;
+    }
+
+    void test1() {
+        class A {}
+        class B {}
+
+        W<? super A> xx = null;
+        W<? super B> y = (W<? super B>) xx;
+    }
+
+    void test2() {
+        final class A {}
+        final class B {}
+
+        W<? super A> xx = null;
+        W<? super B> y = (W<? super B>) xx;
+    }
+
+   //? super A, ? super B -------------------------
+    void test3SS() {
+        W<? super A> xx = null;
+        W<? super B> y = (W<? super B>) xx;
+    }
+
+  //? extends A, ? super B -------------------------
+    void test1ES() {
+        class A {}
+        class B {}
+
+        W<? extends A> x = null;
+        W<? super B> y = <error descr="Inconvertible types; cannot cast 'W<capture<? extends A>>' to 'W<? super B>'">(W<? super B>) x</error>;
+    }
+
+    void test2ES() {
+        class A {}
+        class B extends A {}
+
+        W<? extends A> x = null;
+        W<? super B> y = (W<? super B>) x;
+    }
+
+    void test3ES() {
+        class A {}
+        class B extends A {}
+
+        W<? extends B> x = null;
+        W<? super A> y = <error descr="Inconvertible types; cannot cast 'W<capture<? extends B>>' to 'W<? super A>'">(W<? super A>) x</error>;
+    }
+
+
+    void test4ES() {
+        W<? extends B> x = null;
+        W<? super A> y = <error descr="Inconvertible types; cannot cast 'W<capture<? extends Test.B>>' to 'W<? super Test.A>'">(W<? super A>) x</error>;
+    }
+
+    void test5ES() {
+        final class B implements A {}
+
+        W<? extends A> x = null;
+        W<? super B> y = (W<? super B>) x;
+    }
+
+    void test6ES() {
+        final class B implements A {}
+
+        W<? extends B> x = null;
+        W<? super A> y = <error descr="Inconvertible types; cannot cast 'W<capture<? extends B>>' to 'W<? super Test.A>'">(W<? super A>) x</error>;
+    }
+
+  // ? extends A, B -----------------------
+    void test1EWC() {
+        class A {
+        }
+        class B {
+        }
+
+        W<? extends A> xx = null;
+        W<B> y = <error descr="Inconvertible types; cannot cast 'W<capture<? extends A>>' to 'W<B>'">(W<B>) xx</error>;
+    }
+
+    void test2EWC() {
+        class A {
+        }
+
+        W<? extends A> xx = null;
+        W<?> y = (W<?>) xx;
+    }
+
+    void test3EWC() {
+        class A {
+        }
+        class B extends A {
+        }
+
+        W<? extends A> xx = null;
+        W<B> y = (W<B>) xx;
+    }
+
+  // ? super A, B -----------------------
+    void test1SWC() {
+        class A {
+        }
+        class B {
+        }
+
+        W<? super A> xx = null;
+        W<B> y = <error descr="Inconvertible types; cannot cast 'W<capture<? super A>>' to 'W<B>'">(W<B>) xx</error>;
+    }
+
+    void test2SWC() {
+        class A {
+        }
+
+        W<? super A> xx = null;
+        W<?> y = (W<?>) xx;
+    }
+
+    void test3SWC() {
+        class A {
+        }
+        class B extends A {
+        }
+
+        W<? super B> xx = null;
+        W<A> y = (W<A>) xx;
+    }
+
+  // ?, ? ------------------------------------------
+  void test1WWW() {
+    W<?> xx = null;
+    W<?> y = xx;
+  }
+
+  //? extends P<? extends A>, B --------------------
+
+    void test1EEWC() {
+        class A {
+        }
+        class B {
+        }
+
+        W<? extends P<? extends A>> xx = null;
+        W<? extends B> y = <error descr="Inconvertible types; cannot cast 'W<capture<? extends P<? extends A>>>' to 'W<? extends B>'">(W<? extends B>) xx</error>;
+    }
+
+    void test2EEWC() {
+        class A {
+        }
+        class B extends P {
+        }
+
+        W<? extends P<? extends A>> xx = null;
+        W<? extends B> y = (W<? extends B>) xx;
+    }
+
+     void test3EEWC() {
+        class A {
+        }
+        class B<TB> extends P<TB> {
+        }
+
+        W<? extends P<? extends A>> xx = null;
+        W<? extends B<? super A>> y = (W<? extends B<? super A>>) xx;
+    }
+
+
+     void test4EEWC() {
+        class A {
+        }
+        class B<TB> extends P<TB> {
+        }
+
+        W<? extends P<? extends A>> xx = null;
+        W<? extends B<?>> y = (W<? extends B<?>>) xx;
+    }
+
+    void test5EEWC() {
+        class A {
+        }
+        class B<TB> extends P<TB> {
+        }
+        class C {}
+
+        W<? extends P<? extends A>> xx = null;
+        W<? extends B<? extends C>> y = (W<? extends B<? extends C>>) xx;
+    }
+
+  //Array Types inside wildcards
+  void test1AE() {
+        class A {}
+        class B {}
+
+        W<? extends A[]> xx = null;
+        W<? extends B[]> y = <error descr="Inconvertible types; cannot cast 'W<capture<? extends A[]>>' to 'W<? extends B[]>'">(W<? extends B[]>) xx</error>;
+    }
+
+    void test11AE() {
+        class A {}
+        class B {}
+
+        W<? extends A[]> xx = null;
+        W<? extends B> y = <error descr="Inconvertible types; cannot cast 'W<capture<? extends A[]>>' to 'W<? extends B>'">(W<? extends B>) xx</error>;
+    }
+
+     void test2AE() {
+        class A {}
+        class B extends A {}
+
+        W<? extends A[]> xx = null;
+        W<? extends B[]> y = (W<? extends B[]>) xx;
+    }
+
+    void test21AE() {
+        class A {}
+        class B extends A {}
+
+        W<? extends A[]> xx = null;
+        W<? extends B> y = <error descr="Inconvertible types; cannot cast 'W<capture<? extends A[]>>' to 'W<? extends B>'">(W<? extends B>) xx</error>;
+    }
+
+
+
+    void testIntAE() {
+
+        W<? extends A[]> xx = null;
+        W<? extends B[]> y = (W<? extends B[]>) xx;
+    }
+
+    void testInt1AE() {
+
+        W<? extends A[]> xx = null;
+        W<? extends B[][]> y = <error descr="Inconvertible types; cannot cast 'W<capture<? extends Test.A[]>>' to 'W<? extends Test.B[][]>'">(W<? extends B[][]>) xx</error>;
+    }
+
+    void testASS() {
+        class A {}
+        class B {}
+
+        W<? super A[]> xx = null;
+        W<? super B[]> y = (W<? super B[]>) xx;
+    }
+
+    void test1AES() {
+        class A {}
+        class B {}
+
+        W<? extends A[]> x = null;
+        W<? super B[]> y = <error descr="Inconvertible types; cannot cast 'W<capture<? extends A[]>>' to 'W<? super B[]>'">(W<? super B[]>) x</error>;
+    }
+
+    void test2AES() {
+        class A {}
+        class B extends A {}
+
+        W<? extends A[]> x = null;
+        W<? super B[]> y = (W<? super B[]>) x;
+    }
+
+    void test3AES() {
+        class A {}
+        class B extends A {}
+
+        W<? extends B[]> x = null;
+        W<? super A[]> y = <error descr="Inconvertible types; cannot cast 'W<capture<? extends B[]>>' to 'W<? super A[]>'">(W<? super A[]>) x</error>;
+    }
+
+
+
+    void test4AES() {
+        W<? extends B[]> x = null;
+        W<? super A[]> y = <error descr="Inconvertible types; cannot cast 'W<capture<? extends Test.B[]>>' to 'W<? super Test.A[]>'">(W<? super A[]>) x</error>;
+    }
+
+    void test5AES() {
+        final class B implements A {}
+
+        W<? extends A[]> x = null;
+        W<? super B[]> y = (W<? super B[]>) x;
+    }
+
+    void test6AES() {
+        final class B implements A {}
+
+        W<? extends B[]> x = null;
+        W<? super A[]> y = <error descr="Inconvertible types; cannot cast 'W<capture<? extends B[]>>' to 'W<? super Test.A[]>'">(W<? super A[]>) x</error>;
+    }
+
+  // type parameters extensions: D<T extends A>
+  void testT3() {
+        class A {
+        }
+        class D<T extends A > {
+            class B extends A {
+            }
+
+            void foo() {
+                D<? extends T> x = null;
+                D<? extends B> y = (D<? extends B>) x;
+            }
+
+        }
+
+    }
+
+    void testT4() {
+        class A {
+        }
+        class D<T extends A> {
+            class B {
+            }
+
+            void foo() {
+                D<? extends T> x = null;
+                D<<error descr="Type parameter '? extends B' is not within its bound; should extend 'A'">? extends B</error>> y = (D<<error descr="Type parameter '? extends B' is not within its bound; should extend 'A'">? extends B</error>>) x;
+            }
+
+        }
+
+    }
+
+
+    void testT5() {
+           class D<T> {
+               class B {
+               }
+
+               void foo() {
+                   D<? extends T> x = null;
+                   D<? extends B> y = (D<? extends B>) x;
+               }
+
+           }
+
+       }
+
+    void testT6() {
+        class A {
+        }
+        class D<T extends A> {
+            class B extends A {
+            }
+
+            void foo() {
+                D<? super T> x = null;
+                D<? super B> y = (D<?  super B>) x;
+            }
+
+        }
+
+    }
+
+     void testT7() {
+        class A {
+        }
+        class D<T extends A> {
+            class B extends A {
+            }
+
+            void foo() {
+                D<? extends T> x = null;
+                D<? super B> y = (D<?  super B>) x;
+            }
+
+        }
+
+    }
+
+     void testT8() {
+        class A {
+        }
+        class D<T extends A> {
+            class B extends A {
+            }
+
+            void foo() {
+                D<? super T> x = null;
+                D<? extends B> y = (D<? extends B>) x;
+            }
+
+        }
+
+    }
+
+     void testT9() {
+        class A {
+        }
+        class D<T> {
+            class B extends A {
+            }
+
+            void foo() {
+                D<? super T> x = null;
+                D<? extends A> y = (D<? extends B>) x;
+            }
+
+        }
+
+    }
+
+    void testUnbounded() {
+      W<?> x = null;
+      W<? extends A> y = ( W<? extends A>) x;
+      W<?> y1 = (W<?>)x;
+    }
+
+    void testTypeParams() {
+      class MyClass<K, V> {
+        MyClass<K, V> convert(MyClass<? super K, ? super V> arg) {
+          MyClass<K, V> result = (MyClass<K, V>)arg;
+          return result;
+        }
+      }
+    }
+
+    //IDEA-63447
+    void testUnboundWildcardWithArrayTypes() {
+        class IUWWAT{
+            private <T> void method1(T[][] matrix) {
+                final Class<T[]> type = (Class<T[]>) matrix.getClass().getComponentType();
+            }
+
+            private <T> void method2(T[][] matrix) {
+                final Class<Object> type = (Class<Object>) matrix.getClass().getComponentType();
+            }
+
+            private <T> void method3(T[][] matrix) {
+                final Class<Object[]> type = (Class<Object[]>) matrix.getClass().getComponentType();
+            }
+
+            private <T> void method4(T[][] matrix) {
+                final Class<Object[][]> type = (Class<Object[][]>) matrix.getClass().getComponentType();
+            }
+        }
+    }
+}
+
+class W<T> {}
+class P<L> {}
+
+// IDEA-62529
+class Refx<T> {
+    Class<? super T> get() { return null; }
+    boolean f() {
+      if (get() == Enum.class) return false;
+      return (Class<Enum>)get() == Enum.class;
+    }
+}
+
+
+//hierarchy of type param bound
+abstract class DomInvocationHandler<T extends AbstractDomChildDescriptionImpl> {
+    void f() {
+        if (this  instanceof IndexedElementInvocationHandler) {
+        }
+    }
+}
+
+interface AbstractDomChildrenDescription {
+}
+
+class AbstractDomChildDescriptionImpl implements AbstractDomChildrenDescription {
+}
+
+class IndexedElementInvocationHandler extends DomInvocationHandler<FixedChildDescriptionImpl> {
+}
+
+class FixedChildDescriptionImpl extends AbstractDomChildDescriptionImpl {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/WildcardTypes.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/WildcardTypes.java
new file mode 100644
index 0000000..b230591
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/WildcardTypes.java
@@ -0,0 +1,246 @@
+import java.util.*;
+
+class a {
+    public void printList(List<?> list) {
+        for (Iterator<?> i = list.iterator(); i.hasNext();) {
+            System.out.println(i.next().toString());
+        }
+    }
+}
+
+class b<<warning descr="Type parameter 'T' is never used">T</warning>> {
+    public interface Lst <E, Self extends Lst<E, Self>> {
+        Self subList(int fromIndex, int toIndex);
+    }
+
+    public static Lst<?, ?> foo(Lst<?, ?> lst) {
+       Lst<?, ?> myl = lst.subList(0, 2);
+       return myl;
+    }
+}
+
+class ThingUser <V> {
+    V v;
+    {
+        new ThingUser<<error descr="Wildcard type '?' cannot be instantiated directly">?</error>>() {
+        };
+    }
+}
+
+class SuperWildcardTest {
+    static void method(List<?> list) {
+        <error descr="Incompatible types. Found: 'java.util.List<capture<?>>', required: 'java.util.List<? super java.lang.String>'">List<? super String>  l = list;</error>
+        l.size();
+    }
+}
+
+class IdeaDev4166 {
+    Map<String, Object> f( Map<String, ?> fieldsTemplate) {
+        return new HashMap<String, Object>( fieldsTemplate);
+    }
+}
+
+//IDEADEV-5816
+class TwoD {
+  int x, y;
+  TwoD(int a, int b) {
+    x = a;
+    y = b;
+  }
+}
+// Three-dimensional coordinates.
+class ThreeD extends TwoD {
+  int z;
+  ThreeD(int a, int b, int c) {
+    super(a, b);
+    z = c;
+  }
+}
+// Four-dimensional coordinates.
+class FourD extends ThreeD {
+  int t;
+  FourD(int a, int b, int c, int d) {
+    super(a, b, c);
+    t = d;
+  }
+}
+// This class holds an array of coordinate objects.
+class Coords<T extends TwoD> {
+  T[] coords;
+  Coords(T[] o) { coords = o; }
+}
+
+// Demonstrate a bounded wildcard.
+class BoundedWildcard {
+
+  static void showXY(Coords<? extends TwoD> c) {
+    System.out.println("X Y Coordinates:");
+    for(int i=0; i < c.coords.length; i++) {
+      System.out.println(c.coords[i].x + " " + c.coords[i].y);
+    }
+    System.out.println();
+  }
+
+  static void showXYZ(Coords<? extends ThreeD> c) {
+    System.out.println("X Y Z Coordinates:");
+    for(int i=0; i < c.coords.length; i++)
+      System.out.println(c.coords[i].x + " " +
+                         c.coords[i].y + " " +
+                         c.coords[i].z);
+    System.out.println();
+  }
+
+  static void showAll(Coords<? extends FourD> c) {
+    System.out.println("X Y Z T Coordinates:");
+    for(int i=0; i < c.coords.length; i++)
+      System.out.println(c.coords[i].x + " " +
+                         c.coords[i].y + " " +
+                         c.coords[i].z + " " +
+                         c.coords[i].t);
+    System.out.println();
+  }
+
+  public static void main(String args[]) {
+    TwoD td[] = {
+      new TwoD(0, 0),
+      new TwoD(7, 9),
+      new TwoD(18, 4),
+      new TwoD(-1, -23)
+    };
+    Coords<TwoD> tdlocs = new Coords<TwoD>(td);
+    System.out.println("Contents of tdlocs.");
+    showXY(tdlocs); // OK, is a TwoD
+    showXYZ<error descr="'showXYZ(Coords<? extends ThreeD>)' in 'BoundedWildcard' cannot be applied to '(Coords<TwoD>)'">(tdlocs)</error>;
+    showAll<error descr="'showAll(Coords<? extends FourD>)' in 'BoundedWildcard' cannot be applied to '(Coords<TwoD>)'">(tdlocs)</error>;
+    // Now, create some FourD objects.
+    FourD fd[] = {
+      new FourD(1, 2, 3, 4),
+      new FourD(6, 8, 14, 8),
+      new FourD(22, 9, 4, 9),
+      new FourD(3, -2, -23, 17)
+    };
+    Coords<FourD> fdlocs = new Coords<FourD>(fd);
+    System.out.println("Contents of fdlocs.");
+    // These are all OK.
+    showXY(fdlocs);
+    showXYZ(fdlocs);
+    showAll(fdlocs);
+  }
+}
+//end of IDEADEV-5816
+
+interface I33 {}
+public class Q<T extends I33> {
+    T t;
+    <V extends I33> List<V> foo(Q<V> v) {
+      v.hashCode();
+      return null;
+    }
+
+    List<? extends I33>  g (Q<?> q) {
+      return foo(q);
+    }
+}
+
+//IDEADEV-16628 
+class CollectionHelper {
+  public static <A> Collection<A> convertDown(Collection<? super A> collection) {
+    return collection == null ? null : null;
+  }
+  public static <A> Collection<A> convertUp(Collection<? extends A> collection) {
+    return collection == null ? null : null;
+  }
+
+  public static void main(String[] args) {
+    // Downcast examples
+    final Collection<Number> numbers1 = new ArrayList<Number>(1);
+    Collection<Integer> integers1 =  CollectionHelper.convertDown(numbers1);
+    integers1.hashCode();
+    // Upcast example
+    final Collection<Integer> integers4 = new ArrayList<Integer>(1);
+    final Collection<Number> numbers4 = CollectionHelper.<Number>convertUp(integers4);
+    numbers4.hashCode();
+  }
+}
+
+//IDEA-62529
+class My<T> {
+    private  Class<? super T> getSuperclass(){
+        return null;
+    }
+
+    public void test() {
+        if (getSuperclass() == List.class);
+    }
+}
+
+class IDEA75178 {
+    void test(Set<String> labels) {
+        final Matcher<? super Object> empty = isEmpty();
+        assertThat(labels, empty);
+        assertAlsoThat(empty, labels);
+    }
+
+    public static <T> void assertThat(T actual, Matcher<T> matcher) { throw new AssertionError(actual.toString() + matcher.toString());}
+    public static <T> void assertAlsoThat(Matcher<T> matcher, T actual) { throw new AssertionError(actual.toString() + matcher.toString());}
+
+    public static <T> Matcher<? super T> isEmpty() {
+        return null;
+    }
+
+    static class Matcher<<warning descr="Type parameter 'T' is never used">T</warning>>{}
+  
+  class Foo {}
+  void testComment() {
+      Set<Foo> foos = Collections.emptySet();
+      assertThatComment(foos, hasSize(0));
+  }
+
+  <E> Matcher<? super Collection<? extends E>> hasSize(int size) {return size == 0 ? null : null;}
+  <T> void assertThatComment(T actual, Matcher<? super T> matcher){ throw new AssertionError(actual.toString() + matcher.toString());}
+}
+
+class IDEA66750 {
+  public void test() {
+    List<List<String>> data = new ArrayList<List<String>>();
+    List<List<?>> y = <error descr="Inconvertible types; cannot cast 'java.util.List<java.util.List<java.lang.String>>' to 'java.util.List<java.util.List<?>>'">(List<List<?>>)data</error>;
+    System.out.println(y);
+
+    ArrayList<Number> al = <error descr="Inconvertible types; cannot cast 'java.util.ArrayList<java.lang.Integer>' to 'java.util.ArrayList<java.lang.Number>'">(ArrayList<Number>) new ArrayList<Integer>(1)</error>;
+    System.out.println(al);
+  }
+}
+
+class IDEA73377 {
+  public Iterator<Map.Entry<Map.Entry<?, ?>, ?>> iterator(Map<?, ?> map) {
+    //noinspection unchecked
+    return <error descr="Inconvertible types; cannot cast 'java.util.Iterator<java.util.Map.Entry<capture<?>,capture<?>>>' to 'java.util.Iterator<java.util.Map.Entry<java.util.Map.Entry<?,?>,?>>'">(Iterator<Map.Entry<Map.Entry<?, ?>, ?>>)map.entrySet().iterator()</error>;
+  }
+}
+
+class IDEA91481 {
+  void bar(){
+    BeanBuilder<? extends DirectBean> builder = <warning descr="Unchecked cast: 'IDEA91481.BeanBuilder<capture<? extends IDEA91481.Bean>>' to 'IDEA91481.BeanBuilder<? extends IDEA91481.DirectBean>'">(BeanBuilder<?  extends DirectBean>) builder()</warning>;
+    System.out.println(builder);
+  }
+
+  BeanBuilder<? extends Bean> builder() {
+    return null;
+  }
+
+  class BeanBuilder<<warning descr="Type parameter 'T' is never used">T</warning>> {}
+  class Bean {}
+  class DirectBean extends Bean {}
+}
+
+class IDEA89640 {
+  interface X {}
+  class Y<<warning descr="Type parameter 'T' is never used">T</warning> extends X> {}
+
+  public static void main(String[] args) {
+    Y<? extends X> a = null;
+    Y<? extends X> b = null;
+    boolean flag = a  != b; 
+    System.out.println(flag);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/WildcardsBoundsIntersection.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/WildcardsBoundsIntersection.java
new file mode 100644
index 0000000..c84c589
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/WildcardsBoundsIntersection.java
@@ -0,0 +1,15 @@
+class NodeProperty<A, B> {}
+
+class NodeType {}
+class NumberExpression extends NodeType {}
+class Node<NodeTypeT extends NodeType> {
+    public <ValueT> ValueT get(NodeProperty<? super NodeTypeT, ValueT> prop) {
+        return null;
+    }
+}
+
+class Main {
+    public static void main(NodeProperty<NumberExpression, Integer> nval,  Node<? extends NodeType> expr) {
+        int val = expr.get<error descr="'get(NodeProperty<? super capture<? extends NodeType>,java.lang.Integer>)' in 'Node' cannot be applied to '(NodeProperty<NumberExpression,java.lang.Integer>)'">(nval)</error>;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/highlightSeverity/ErrorLikeUnusedSymbol.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/highlightSeverity/ErrorLikeUnusedSymbol.java
new file mode 100644
index 0000000..80639b6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/highlightSeverity/ErrorLikeUnusedSymbol.java
@@ -0,0 +1,5 @@
+public class Test {
+  public static void main(String[] args) {
+    int <error descr="Variable 'k' is never used">k</error> = 0;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/BadCharacters.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/BadCharacters.java
new file mode 100644
index 0000000..1bfd889
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/BadCharacters.java
@@ -0,0 +1,10 @@
+import java.util.*;
+class Test<T> {
+
+   public void read(List<T> list){}
+
+  /**
+   * @see #read(java.util.List<warning><</warning>T<warning>></warning>) 
+   */
+   public void write(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/BadReference.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/BadReference.java
new file mode 100644
index 0000000..36c2c85
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/BadReference.java
@@ -0,0 +1,8 @@
+class Test {
+    /**
+   * This element was written by {@link Test#write(Object, <error>XmlWriter</error>)}
+   * method. So <code>read</code> and <code>write</code> methods should be consistent.
+   */
+   public void read(){}
+   public void write(Object o, <error>XmlWriter</error> writer){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/Exception0.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/Exception0.java
new file mode 100644
index 0000000..66281ea
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/Exception0.java
@@ -0,0 +1,8 @@
+class Test {
+    /**
+     *  @throws <warning>SomeClass</warning> asdfasd
+     */
+     public void foo() {}
+     
+     class SomeClass     {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/Exception1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/Exception1.java
new file mode 100644
index 0000000..89ee9f6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/Exception1.java
@@ -0,0 +1,8 @@
+class Test {
+    /**
+     *  @throws<EOLWarning/>
+     */
+     public void foo() {}
+     
+     class SomeClass {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/Exception2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/Exception2.java
new file mode 100644
index 0000000..026bcc6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/Exception2.java
@@ -0,0 +1,6 @@
+class Test {
+    /**
+     *  @throws IllegalArgumentException sometimes
+     */
+     public void foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/Exception3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/Exception3.java
new file mode 100644
index 0000000..e6d2ca1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/Exception3.java
@@ -0,0 +1,6 @@
+class Test {
+    /**
+     *  @throws java.io.EOFException sometimes
+     */
+     public void foo() throws java.io.IOException {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/Exception4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/Exception4.java
new file mode 100644
index 0000000..982cd2c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/Exception4.java
@@ -0,0 +1,6 @@
+class Test {
+    /**
+     *  @throws <warning>Integer</warning> sometimes
+     */
+     public void <warning>foo</warning>() throws Exception {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/InheritJavaDoc.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/InheritJavaDoc.java
new file mode 100644
index 0000000..75abbd9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/InheritJavaDoc.java
@@ -0,0 +1,7 @@
+class Test {
+  /**
+  * <warning>@inheritDoc</warning>
+  */
+  void a() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/InlineTagAsDescription.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/InlineTagAsDescription.java
new file mode 100644
index 0000000..4e1c330
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/InlineTagAsDescription.java
@@ -0,0 +1,18 @@
+class A {
+  /**
+  * @return
+  *  {@inheritDoc}
+  **/
+  int foo(){
+    return 0;
+  }
+}
+
+class B {
+  /**
+  * @return bar
+  **/
+  int foo(){
+   return 0;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/InnerClassReferenceInSignature.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/InnerClassReferenceInSignature.java
new file mode 100644
index 0000000..9303071
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/InnerClassReferenceInSignature.java
@@ -0,0 +1,13 @@
+class CSS {
+  static class IO{}
+}
+
+class TD {
+  void calculateSmth(CSS.IO io){}
+}
+
+/**
+ * @see TD#calculateSmth(CSS.IO)
+ */
+class Test {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/JavadocPeriod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/JavadocPeriod.java
new file mode 100644
index 0000000..f7ef1c1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/JavadocPeriod.java
@@ -0,0 +1,6 @@
+<warning>/**</warning>
+ * Missing dot
+ */
+class Test {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/JavadocPeriod1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/JavadocPeriod1.java
new file mode 100644
index 0000000..96a863ee
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/JavadocPeriod1.java
@@ -0,0 +1,6 @@
+/**
+* Do smth @linkplain #link}.
+*/
+public class Test {
+  private void link(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/JavadocPeriod2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/JavadocPeriod2.java
new file mode 100644
index 0000000..731e5088
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/JavadocPeriod2.java
@@ -0,0 +1,7 @@
+<warning>/**</warning>
+* Do smth
+* @author me.
+*/
+public class Test {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/Link0.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/Link0.java
new file mode 100644
index 0000000..733cec2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/Link0.java
@@ -0,0 +1,8 @@
+class Test {
+    /**
+     *  @param ppp see {@link #<error>Test</error>}
+     */
+     public void i(int ppp) {}
+     
+     class A{ public void foo() {}}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/LinkFromInnerClassToSelfMethod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/LinkFromInnerClassToSelfMethod.java
new file mode 100644
index 0000000..5071c01
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/LinkFromInnerClassToSelfMethod.java
@@ -0,0 +1,13 @@
+class Test {
+
+     public void i(int ppp) {}
+     /**
+      * {@link #<error descr="Cannot resolve symbol 'foo(int)'">foo</error>(int)}
+      * {@link #foo()}
+      * {@link #i(int)}
+     */
+     class A{
+       public void foo() {}
+     }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/MissingReturnDescription.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/MissingReturnDescription.java
new file mode 100644
index 0000000..f542e0d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/MissingReturnDescription.java
@@ -0,0 +1,9 @@
+class MissingRetunDescription {
+  /**
+  * <warning>@return</warning>
+  * @throws Exception in some case
+  */
+  public boolean foo() throws Exception {
+    return false;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/MultipleThrows.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/MultipleThrows.java
new file mode 100644
index 0000000..6fc6910
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/MultipleThrows.java
@@ -0,0 +1,10 @@
+import java.io.IOException;
+class Test {
+  /**
+  * @throws IOException in some case
+  * <warning>@throws</warning> IOException
+  */
+  void a() throws IOException{
+    throw new IOException();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/Param0.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/Param0.java
new file mode 100644
index 0000000..485ae45
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/Param0.java
@@ -0,0 +1,5 @@
+/**
+ *  @param <error>myParam</error> paramDescription
+ */
+class Test {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/Param1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/Param1.java
new file mode 100644
index 0000000..f616594
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/Param1.java
@@ -0,0 +1,7 @@
+class Test {
+    /**
+     *  @param<EOLWarning/>
+     */
+    public void foo() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/Param2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/Param2.java
new file mode 100644
index 0000000..b81780d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/Param2.java
@@ -0,0 +1,7 @@
+class Test {
+    /**
+     *  @param <error>param</error> some param
+     */
+    public void foo() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/Param3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/Param3.java
new file mode 100644
index 0000000..6ca4093
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/Param3.java
@@ -0,0 +1,7 @@
+class Test {
+    /**
+     *  @param param some param
+     */
+    public void foo(int param) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/Param4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/Param4.java
new file mode 100644
index 0000000..0e2294a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/Param4.java
@@ -0,0 +1,8 @@
+class Test {
+
+    /**
+     * @param <error>i</error> here description goes
+     * <warning>@return</warning>
+     */
+    int d(){return 1;}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/Return0.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/Return0.java
new file mode 100644
index 0000000..08614e1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/Return0.java
@@ -0,0 +1,6 @@
+class Test {
+    /**
+     *  <warning>@return</warning> returns
+     */
+     public void foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/See0.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/See0.java
new file mode 100644
index 0000000..3b16ac9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/See0.java
@@ -0,0 +1,8 @@
+class Test {
+    /**
+     *  @see A#<error>someField</error>
+     */
+     public void i() {}
+
+     class A{ public void foo() {}}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/See1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/See1.java
new file mode 100644
index 0000000..3703473
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/See1.java
@@ -0,0 +1,8 @@
+class Test {
+    /**
+     *  @see A#foo
+     */
+     public void i() {}
+
+     class A{ public void foo() {}}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/See2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/See2.java
new file mode 100644
index 0000000..7b84242
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/See2.java
@@ -0,0 +1,8 @@
+class Test {
+    /**
+     *  @see A#<EOLWarning/>
+     */
+     public void i() {}
+
+     class A{ public void foo() {}}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/See3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/See3.java
new file mode 100644
index 0000000..121b6bf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/See3.java
@@ -0,0 +1,8 @@
+class Test {
+    /**
+     *  @see #<error descr="Cannot resolve symbol 'perform(int)'">perform</error>(int)
+     */
+    public void i() {}
+     
+    public void perform() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/See4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/See4.java
new file mode 100644
index 0000000..dd2614b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/See4.java
@@ -0,0 +1,8 @@
+class Test {
+    /**
+     *  @see #perform(int)
+     */
+     public void i() {}
+     
+    public void perform(int a) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/See5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/See5.java
new file mode 100644
index 0000000..0a53160
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/See5.java
@@ -0,0 +1,8 @@
+class Test {
+    /**
+     *  @see #perform(String, int)
+     */
+     public void i() {}
+     
+    public void perform(String s, int a) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/See6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/See6.java
new file mode 100644
index 0000000..91b8c48
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/See6.java
@@ -0,0 +1,6 @@
+class Foo {
+  /**
+   * {<warning>@link</warning> #foo()}
+   */
+  void foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/SeeConstants.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/SeeConstants.java
new file mode 100644
index 0000000..1437f1c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/SeeConstants.java
@@ -0,0 +1,12 @@
+public class SeeConstants {
+  public static final String III = "";
+  public static final String UUU="";
+
+  /**
+   * @see SeeConstants.<error>III</error>
+   * @see SeeConstants#UUU
+   * @param args blah-blah
+   */
+   public static void main(String[] args) {
+   }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/UnknownInlineTag.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/UnknownInlineTag.java
new file mode 100644
index 0000000..4d62cd0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/UnknownInlineTag.java
@@ -0,0 +1,14 @@
+/**
+ * {<warning>@linked</warning>}
+ */
+public class Foo {
+  /**
+   * @param i some param {<warning>@vaaalue</warning> #field}
+   */
+  void foo(int i) {}
+
+  /**
+  * {<warning>@linke</warning>}
+  */
+  int field;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/UnknownTags.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/UnknownTags.java
new file mode 100644
index 0000000..3c2e474
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/UnknownTags.java
@@ -0,0 +1,14 @@
+/**
+ * <warning>@foo</warning>
+ */
+public class Foo {
+  /**
+   * <warning>@foo</warning>
+   */
+  void foo() {}
+
+  /**
+  * <warning>@foo</warning>
+  */
+  int field;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/ValueBadReference.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/ValueBadReference.java
new file mode 100644
index 0000000..1a5b181
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/ValueBadReference.java
@@ -0,0 +1,7 @@
+class Test {
+    /**
+     * Value is {@value #<error>badReference</error>}
+     * @param ppp .
+     */
+     public void i(int ppp) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/ValueEmpty.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/ValueEmpty.java
new file mode 100644
index 0000000..1a4ca1c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/ValueEmpty.java
@@ -0,0 +1,6 @@
+class Test {
+    /**
+     * Value is {@value }
+     */
+     public static final int A = 1;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/ValueGoodReference.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/ValueGoodReference.java
new file mode 100644
index 0000000..1a1e444
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/ValueGoodReference.java
@@ -0,0 +1,9 @@
+class Test {
+     public static final int A = 1;
+
+    /**
+     * Value is {@value #A}
+     * @param ppp .
+     */
+     public void i(int ppp) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/ValueNotOnField.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/ValueNotOnField.java
new file mode 100644
index 0000000..69cc305
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/ValueNotOnField.java
@@ -0,0 +1,8 @@
+class Test {
+    /**
+     * Value is {@value <error>#g</error>}
+     */
+     public void i() {}
+
+     public void g() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/ValueNotOnStaticField.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/ValueNotOnStaticField.java
new file mode 100644
index 0000000..9489b82
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/ValueNotOnStaticField.java
@@ -0,0 +1,8 @@
+class Test {
+     public int A = 1;
+
+    /**
+     * Value is {@value <error>#A</error>}
+     */
+     public void i() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/ValueOnNotInitializedField.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/ValueOnNotInitializedField.java
new file mode 100644
index 0000000..a386784
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/ValueOnNotInitializedField.java
@@ -0,0 +1,8 @@
+class Test {
+     public static int A;
+
+    /**
+     * Value is {@value <error>#A</error>}
+     */
+     public void i() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/ValueReference14.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/ValueReference14.java
new file mode 100644
index 0000000..3534826
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/ValueReference14.java
@@ -0,0 +1,9 @@
+class Test {
+     public static final int A = 1;
+
+    /**
+     * Value is {@value <error>#A</error>}
+     * @param ppp .
+     */
+     public void i(int ppp) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/Vararg.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/Vararg.java
new file mode 100644
index 0000000..5192745
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/Vararg.java
@@ -0,0 +1,9 @@
+public class Test {
+   /**
+     * @see Test#test(String, int...)
+     * @see Test#<error descr="Cannot resolve symbol 'test(String, long...)'">test</error>(String, long...)
+   **/
+    void foo() {}
+
+    void test (String u, int ... i) {}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/resolve/pkg/See0.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/resolve/pkg/See0.java
new file mode 100644
index 0000000..5b7edc9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/resolve/pkg/See0.java
@@ -0,0 +1,15 @@
+package pkg;
+
+/**
+ * @see #method(pkg.B0.C[])
+ * @see #method(B0.C[])
+ * @see #method(B0.C...)
+ */
+class A0 {
+  public void method(B0.C[] c) { }
+}
+
+class B0 {
+  class C {
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/resolve/pkg/See1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/resolve/pkg/See1.java
new file mode 100644
index 0000000..fcd58fc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/resolve/pkg/See1.java
@@ -0,0 +1,16 @@
+package pkg;
+
+/**
+ * @see #<error descr="Cannot resolve symbol 'method(B1.C)'">method</error>(B1.C)
+ * @see #<error descr="Cannot resolve symbol 'method(B1.C[][])'">method</error>(B1.C[][])
+ * @see #<error descr="Cannot resolve symbol 'method(B1.C..)'">method</error>(<error descr="Cannot resolve symbol 'B1.C.'">B1.C.</error>.)
+ * @see #<error descr="Cannot resolve symbol 'method(B1.C[)'">method</error>(B1.C[)
+ */
+class A1 {
+  public void method(B1.C[] c) { }
+}
+
+class B1 {
+  class C {
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/resolve/pkg/See2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/resolve/pkg/See2.java
new file mode 100644
index 0000000..e3d607e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/resolve/pkg/See2.java
@@ -0,0 +1,13 @@
+package pkg;
+
+import java.util.List;
+
+/**
+ * @see #method(java.util.List)
+ * @see #method(java.util.List<String>)
+ * @see #method(java.util.List<T>)
+ * @see #method(java.util.List<Number>)
+ */
+class A2<T> {
+  public void method(List<String> list) { }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/resolve/pkg/See3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/resolve/pkg/See3.java
new file mode 100644
index 0000000..dd7bf93
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/resolve/pkg/See3.java
@@ -0,0 +1,28 @@
+package pkg;
+
+/**
+ * @see #equals(Object)
+
+ * @see A3#equals(Object)
+ * @see pkg.A3#equals(Object)
+
+ * @see Object#equals(Object)
+ * @see java.lang.Object#equals(Object)
+ */
+class A3 {
+  public boolean equals(Object obj) {
+    return super.equals(obj);
+  }
+}
+
+/**
+ * @see #equals(Object)
+
+ * @see B3#equals(Object)
+ * @see pkg.B3#equals(Object)
+
+ * @see Object#equals(Object)
+ * @see java.lang.Object#equals(Object)
+ */
+class B3 {
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/diamond/IDEA97294.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/diamond/IDEA97294.java
new file mode 100644
index 0000000..04fd969
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/diamond/IDEA97294.java
@@ -0,0 +1,24 @@
+import java.util.Comparator;
+
+interface BaseStream<T> {}
+interface Stream<T> extends BaseStream<T> {}
+interface IntermediateOp<E_IN, E_OUT> extends StreamOp<E_IN, Node<E_OUT>> {}
+interface StreamOp<E_IN, R> {}
+interface StatefulOp<E_IN, E_OUT> extends IntermediateOp<E_IN, E_OUT> {}
+interface TerminalOp<E_IN, R> extends StreamOp<E_IN, R> {}
+
+interface Node<T> extends Iterable<T> {}
+class SortedOp<T> implements StatefulOp<T, T> {
+    public SortedOp(Comparator<? super T> comparator) {
+    }
+}
+
+class Usage<T> {
+    public <E, S extends BaseStream<E>> S pipeline(IntermediateOp<T, E> newOp) { return null; }
+    public <R> R pipeline(TerminalOp<T, R> terminal) { return null;}
+
+
+    public Stream<T> sorted(Comparator<? super T> comparator) {
+        return pipeline(new SortedOp<>(comparator));
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/functionalInterface/AbstractClass.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/functionalInterface/AbstractClass.java
new file mode 100644
index 0000000..ab3c803
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/functionalInterface/AbstractClass.java
@@ -0,0 +1 @@
+abstract class Foo { public abstract void run(); }
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/functionalInterface/Clone.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/functionalInterface/Clone.java
new file mode 100644
index 0000000..420bf0c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/functionalInterface/Clone.java
@@ -0,0 +1,4 @@
+interface Foo {
+  int m();
+  Object clone();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/functionalInterface/MethodWithTypeParam.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/functionalInterface/MethodWithTypeParam.java
new file mode 100644
index 0000000..82a3303
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/functionalInterface/MethodWithTypeParam.java
@@ -0,0 +1,3 @@
+interface Foo { <T> T execute(Action<T> a); }
+interface Action<A>{}
+  // Functional
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/functionalInterface/MultipleMethods.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/functionalInterface/MultipleMethods.java
new file mode 100644
index 0000000..5277c84
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/functionalInterface/MultipleMethods.java
@@ -0,0 +1,3 @@
+interface Bar { boolean equals(Object obj); }
+
+interface Foo extends Bar { int compare(String o1, String o2); }
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/functionalInterface/MultipleMethodsInOne.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/functionalInterface/MultipleMethodsInOne.java
new file mode 100644
index 0000000..a792f4b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/functionalInterface/MultipleMethodsInOne.java
@@ -0,0 +1,4 @@
+interface Foo<T> {
+ boolean equals(Object obj);
+ int compare(T o1, T o2);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/functionalInterface/NoMethods.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/functionalInterface/NoMethods.java
new file mode 100644
index 0000000..40947d2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/functionalInterface/NoMethods.java
@@ -0,0 +1 @@
+interface Foo { boolean equals(Object obj); }
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/functionalInterface/Simple.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/functionalInterface/Simple.java
new file mode 100644
index 0000000..57d429fd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/functionalInterface/Simple.java
@@ -0,0 +1 @@
+interface Foo { void run(); }
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/functionalInterface/TwoMethodsNoSubSignature.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/functionalInterface/TwoMethodsNoSubSignature.java
new file mode 100644
index 0000000..cb78a03
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/functionalInterface/TwoMethodsNoSubSignature.java
@@ -0,0 +1,4 @@
+interface X { int m(Iterable<String> arg); }
+interface Y { int m(Iterable<Integer> arg); }
+interface Foo extends X, Y {}
+  // Not functional: No method has a subsignature of all abstract methods
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/functionalInterface/TwoMethodsNoSubSignature1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/functionalInterface/TwoMethodsNoSubSignature1.java
new file mode 100644
index 0000000..d6559ff
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/functionalInterface/TwoMethodsNoSubSignature1.java
@@ -0,0 +1,4 @@
+interface X { int m(Iterable<String> arg, Class c); }
+interface Y { int m(Iterable arg, Class<?> c); }
+interface Foo extends X, Y {}
+  // Not functional: No method has a subsignature of all abstract methods
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/functionalInterface/TwoMethodsSameSignature.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/functionalInterface/TwoMethodsSameSignature.java
new file mode 100644
index 0000000..4e95dff
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/functionalInterface/TwoMethodsSameSignature.java
@@ -0,0 +1,4 @@
+import java.util.*;
+interface X { int m(Iterable<String> arg); }
+interface Y { int m(Iterable<String> arg); }
+interface Foo extends X, Y {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/functionalInterface/TwoMethodsSameSignatureTypeParams.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/functionalInterface/TwoMethodsSameSignatureTypeParams.java
new file mode 100644
index 0000000..96fdde8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/functionalInterface/TwoMethodsSameSignatureTypeParams.java
@@ -0,0 +1,5 @@
+interface Action<A>{}
+interface X { <T> T execute(Action<T> a); }
+interface Y { <S> S execute(Action<S> a); }
+interface Foo extends X, Y {}
+  // Functional: signatures are "the same"
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/functionalInterface/TwoMethodsSameSubstSignature.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/functionalInterface/TwoMethodsSameSubstSignature.java
new file mode 100644
index 0000000..cf433fb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/functionalInterface/TwoMethodsSameSubstSignature.java
@@ -0,0 +1,5 @@
+interface Foo1<T, N extends Number> {
+  void m(T arg);
+  void m(N arg);
+}
+interface Foo extends Foo1<Integer, Integer> {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/functionalInterface/TwoMethodsSubSignature.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/functionalInterface/TwoMethodsSubSignature.java
new file mode 100644
index 0000000..b903d04
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/functionalInterface/TwoMethodsSubSignature.java
@@ -0,0 +1,4 @@
+import java.util.*;
+interface X { Iterable m(Iterable<String> arg); }
+interface Y { Iterable<String> m(Iterable arg); }
+interface Foo extends X, Y {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/AlreadyUsedParamName.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/AlreadyUsedParamName.java
new file mode 100644
index 0000000..b09badcb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/AlreadyUsedParamName.java
@@ -0,0 +1,6 @@
+class Test {
+  {
+    Object o = null;
+    Comparable<String> c = <error descr="Variable 'o' is already defined in the scope">o</error> -> 42;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/Ambiguity1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/Ambiguity1.java
new file mode 100644
index 0000000..e666301
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/Ambiguity1.java
@@ -0,0 +1,22 @@
+interface I1 {
+  void m();
+}
+
+interface I2<X> {
+  X m();
+}
+
+class Ambiguity1 {
+
+  static void m(I1 i1) {}
+  static <T> void m(I2<T> i2) {}
+
+  {
+    m<error descr="Ambiguous method call: both 'Ambiguity1.m(I1)' and 'Ambiguity1.m(I2<Object>)' match">(()->{throw new AssertionError();})</error>;
+    m(() -> {});
+    m(() -> {
+        if (false) return;
+        throw new RuntimeException();
+    });
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/Ambiguity2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/Ambiguity2.java
new file mode 100644
index 0000000..7e41c5ba
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/Ambiguity2.java
@@ -0,0 +1,207 @@
+/*
+ * 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.
+ */
+
+import java.util.*;
+
+class Test {
+    interface Foo<T> {
+        void foo(T t);
+    }
+
+    interface IntFoo {
+        void foo(int i);
+    }
+    
+    interface ObjectFoo<T> {
+        void foo(int i);
+    }
+    
+    interface FooList<T> {
+        void foo(List<T> tList);
+    }
+
+    <T> void f(Foo<T> foo) {
+        System.out.println("Foo<T>");
+    }
+    
+    <T> void f(FooList<T> foo) {
+        System.out.println("FooList<T>");
+    }
+    /*void f(IntFoo foo) {
+        System.out.println("IntFoo");
+    }*/
+    
+    /*void f(ObjectFoo foo) {
+        System.out.println("ObjectFoo");
+    }*/
+
+    public static void main(String[] args) {
+        new Test().f<error descr="Ambiguous method call: both 'Test.f(Foo<Object>)' and 'Test.f(FooList<Object>)' match">(null)</error>;
+        new Test().<error descr="Cannot resolve method 'f(<lambda expression>)'">f</error>(x -> {});
+    }
+}
+
+class Test1 {
+    interface Foo<T> {
+        void foo(T t);
+    }
+
+    interface IntFoo {
+        void foo(int i);
+    }
+    
+    interface ObjectFoo<T> {
+        void foo(int i);
+    }
+    
+    interface FooList<T> {
+        void foo(List<T> tList);
+    }
+
+    <T> void f(Foo<T> foo) {
+        System.out.println("Foo<T>");
+    }
+    
+    <T> void f(FooList<T> foo) {
+        System.out.println("FooList<T>");
+    }
+    
+    void f(IntFoo foo) {
+        System.out.println("IntFoo");
+    }
+    
+    /*void f(ObjectFoo foo) {
+        System.out.println("ObjectFoo");
+    }*/
+
+    public static void main(String[] args) {
+        new Test1().f<error descr="Ambiguous method call: both 'Test1.f(Foo<Object>)' and 'Test1.f(FooList<Object>)' match">(null)</error>;
+        new Test1().f(x -> {});
+    }
+}
+
+class Test2 {
+    interface Foo<T> {
+        void foo(T t);
+    }
+
+    interface IntFoo {
+        void foo(int i);
+    }
+    
+    interface ObjectFoo<T> {
+        void foo(int i);
+    }
+    
+    interface FooList<T> {
+        void foo(List<T> tList);
+    }
+
+    <T> void f(Foo<T> foo) {
+        System.out.println("Foo<T>");
+    }
+    
+    <T> void f(FooList<T> foo) {
+        System.out.println("FooList<T>");
+    }
+    void f(IntFoo foo) {
+        System.out.println("IntFoo");
+    }
+    
+    void f(ObjectFoo foo) {
+        System.out.println("ObjectFoo");
+    }
+
+    public static void main(String[] args) {
+        new Test2().f<error descr="Ambiguous method call: both 'Test2.f(Foo<Object>)' and 'Test2.f(FooList<Object>)' match">(null)</error>;
+        new Test2().f<error descr="Ambiguous method call: both 'Test2.f(IntFoo)' and 'Test2.f(ObjectFoo)' match">(x -> {})</error>;
+    }
+}
+
+
+class Test3 {
+    interface Foo<T> {
+        void foo(T t);
+    }
+
+    interface IntFoo {
+        void foo(int i);
+    }
+    
+    interface ObjectFoo<T> {
+        void foo(int i);
+    }
+    
+    interface FooList<T> {
+        void foo(List<T> tList);
+    }
+
+    <T> void f(Foo<T> foo) {
+        System.out.println("Foo<T>");
+    }
+    
+    <T> void f(FooList<T> foo) {
+        System.out.println("FooList<T>");
+    }
+    /*void f(IntFoo foo) {
+        System.out.println("IntFoo");
+    }*/
+    
+    void f(ObjectFoo foo) {
+        System.out.println("ObjectFoo");
+    }
+
+    public static void main(String[] args) {
+        new Test3().f<error descr="Ambiguous method call: both 'Test3.f(Foo<Object>)' and 'Test3.f(FooList<Object>)' match">(null)</error>;
+        new Test3().f(x -> {});
+    }
+}
+
+
+class Test {
+    interface Foo<T> {
+        void foo(T t, T t1);
+    }
+    interface Foo1<T> {
+        void foo(T t, String t1);
+    }
+    interface Foo2<T> {
+        void foo(String t, String t1);
+    }
+
+    <T> void f(Foo<T> foo) {
+        System.out.println("Foo<T>");
+    }
+    
+    <T> void f(Foo1<T> foo) {
+        System.out.println("FooList<T>");
+    }
+    <T> void f(Foo2<T> foo) {
+        System.out.println("FooList<T>");
+    }
+    public static void main(String[] args) {
+        new Test().f((String x, String y) -> {});
+    }
+}
+
+
+
+
+
+
+
+
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/AmbiguityRawGenerics.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/AmbiguityRawGenerics.java
new file mode 100644
index 0000000..5957877
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/AmbiguityRawGenerics.java
@@ -0,0 +1,27 @@
+interface I {
+    void m();
+}
+
+interface I1 {
+    int m();
+}
+
+interface I2 {
+    String m();
+}
+
+interface I3<A> {
+    A m();
+}
+
+class AmbiguityRawGenerics {
+
+    void foo(I s) { }
+    void foo(I1 s) { }
+    void foo(I2 s) { }
+    <Z> void foo(I3<Z> s) { }
+
+    void bar() {
+        foo<error descr="Ambiguous method call: both 'AmbiguityRawGenerics.foo(I)' and 'AmbiguityRawGenerics.foo(I1)' match">(()-> { throw new RuntimeException(); })</error>;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/AmbiguityVarargs.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/AmbiguityVarargs.java
new file mode 100644
index 0000000..412cbe5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/AmbiguityVarargs.java
@@ -0,0 +1,28 @@
+interface I {
+    void m();
+}
+
+interface I1<A> {
+    void m(A a);
+}
+
+interface I2<A> {
+    void m(A a1, A a2);
+}
+
+interface IV<A> {
+    void m(A... as);
+}
+
+class AmbiguityVarargs {
+    void foo(I s) { }
+    void foo(I1<String> s) { }
+    void foo(I2<String> s) { }
+    void foo(IV<String> s) { }
+
+    void test() {
+        foo(()->{});
+        foo<error descr="Ambiguous method call: both 'AmbiguityVarargs.foo(I1<String>)' and 'AmbiguityVarargs.foo(IV<String>)' match">((a1) -> {})</error>;
+        foo((a1, a2)->{});
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/CastInContexts.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/CastInContexts.java
new file mode 100644
index 0000000..1f577f8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/CastInContexts.java
@@ -0,0 +1,27 @@
+interface I {
+    void m(int x);
+}
+
+interface I1 {
+    int m();
+}
+class CastInContexts {
+    void m(I s) { }
+
+    void assignment() {
+        I i1 = (I)(x-> { System.out.println(); });
+        I i2 = (I)((x-> { System.out.println(); }));
+    }
+    
+    void method() {
+        m((I)(x-> { System.out.println(); }));
+    }
+
+    I returnContext() {
+        return (I)(x -> { System.out.println(); });
+    }
+
+    {
+      int i = <error descr="Inconvertible types; cannot cast '<lambda expression>' to 'int'">(int) ()-> 1</error>;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/ConditionalExpr.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/ConditionalExpr.java
new file mode 100644
index 0000000..e44f0de
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/ConditionalExpr.java
@@ -0,0 +1,51 @@
+/*
+ * 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 Test {
+  public interface I {
+    int m();
+  }
+
+  public interface I1 {
+    int m(int y);
+  }
+
+  {
+    boolean flag = true;
+    I i =  flag ? (() -> 123)   : (() -> 222);
+    I i1 =  flag ? (() -> {<error descr="Missing return statement">}</error>)   : (() -> 222);
+    Object i2 =  flag ? (<error descr="Target type of a lambda conversion must be an interface">() -> 42</error>)   : (<error descr="Target type of a lambda conversion must be an interface">() -> 222</error>);
+    I i3 =  flag ? (<error descr="Incompatible parameter types in lambda expression">(x) -> 42</error>)   : (() -> 222);
+    I i4 =  flag ? (() -> 42) : new I() {
+      @Override
+      public int m() {
+        return 0;  //To change body of implemented methods use File | Settings | File Templates.
+      }
+    };
+  }
+}
+
+class Test1 {
+  interface I<T, V> {
+    V _(T t);
+  }
+
+  static <V> void bar(I<String, V> ii, I<V, String> ik){}
+
+  {
+    bar(s -> s.equals("") ? 0 : 1, i -> "");
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/DefaultMethod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/DefaultMethod.java
new file mode 100644
index 0000000..2f886ff
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/DefaultMethod.java
@@ -0,0 +1,17 @@
+class Test {
+  public static final BinaryOperator<Integer> rPlus = (x, y) -> x + y;
+  interface BinaryOperator<T> extends Combiner<T,T,T> {
+    public T operate(T left, T right);
+
+    @Override
+    T combine(T t1, T t2) default {
+      return operate(t1, t2);
+    }
+  }
+
+  interface Combiner<T, U, V> {
+    V combine(T t, U u);
+  }
+}
+
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/EffectiveFinal.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/EffectiveFinal.java
new file mode 100644
index 0000000..07b4d15
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/EffectiveFinal.java
@@ -0,0 +1,117 @@
+interface I {
+  int m(int i);
+}
+interface J {
+  int m();
+}
+
+public class XXX {
+
+    static void foo() {
+        int l = 0;
+        int j = 0;
+        j = 2;
+        final int L = 0;
+        I i = (int h) -> { int k = 0; return h + <error descr="Variable used in lambda expression should be effectively final">j</error> + l + L; };
+    }
+
+    void bar() {
+        int l = 0;
+        int j = 0;
+        j = 2;
+        final int L = 0;
+        I i = (int h) -> { int k = 0; return h + k + <error descr="Variable used in lambda expression should be effectively final">j</error> + l + L; };
+    }
+    
+     void foo(J i) { }
+ 
+     void m1(int x) {
+         int y = 1;
+         foo(() -> x+y);
+     }
+ 
+     void m2(int x) {
+         int y;
+         y = 1;
+         foo(() -> x+y);
+     }
+ 
+     void m3(int x, boolean cond) {
+         int y;
+         if (cond) y = 1;
+         foo(() -> x+<error descr="Variable used in lambda expression should be effectively final">y</error>);
+     }
+ 
+     void m4(int x, boolean cond) {
+         int y;
+         if (cond) y = 1;
+         else y = 2;
+         foo(() -> x+y);
+     }
+ 
+     void m5(int x, boolean cond) {
+         int y;
+         if (cond) y = 1;
+         y = 2;
+         foo(() -> x+<error descr="Variable used in lambda expression should be effectively final">y</error>);
+     }
+ 
+     void m6(int x) {
+         foo(() -> <error descr="Variable used in lambda expression should be effectively final">x</error>+1);
+       x++;
+     }
+ 
+     void m7(int x) {
+         foo(() -> <error descr="Variable used in lambda expression should be effectively final">x</error>=1);
+     }
+ 
+     void m8() {
+         int y;
+         foo(() -> <error descr="Variable used in lambda expression should be effectively final">y</error>=1);
+     }
+}
+
+class Sample {
+        public static void main(String[] args) {
+                Runnable runnable = () -> {
+                        Integer i;
+                        if (true) {
+                                i = 111;
+                                System.out.println(i);
+                        }
+                };
+
+                Runnable runnable2 = () -> {
+                        Integer i2 = 333;
+                        i2 = 444;
+                        System.out.println(i2);
+                };
+
+                runnable.run();         // prints 111
+                runnable2.run();        // prints 444
+        }
+}
+
+class ParameterIsEffectivelyFinal {
+  {
+    Comparable<String> c = o->{
+      new Runnable() {
+        @Override
+        public void run() {
+          System.out.println(o);
+        }
+      }.run();
+      return 0;
+    };
+    Comparable<String> c1 = o->{
+      o = "";
+      new Runnable() {
+        @Override
+        public void run() {
+          System.out.println(<error descr="Variable 'o' is accessed from within inner class. Needs to be declared final.">o</error>);
+        }
+      }.run();
+      return 0;
+    };
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/EnumConstants.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/EnumConstants.java
new file mode 100644
index 0000000..5bc75ff
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/EnumConstants.java
@@ -0,0 +1,10 @@
+enum Bug {
+    INSTANCE1((Integer x, Integer y) -> x.byteValue()),
+    INSTANCE2((x, y) -> y. byteValue());
+    private Bug(Foo foo) {
+    }
+
+    private interface Foo {
+        byte bar(Integer x, Integer y);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/InContexts.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/InContexts.java
new file mode 100644
index 0000000..48b3960
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/InContexts.java
@@ -0,0 +1,49 @@
+interface I {
+    void m(int x);
+}
+class InContexts {
+    void m(I s) { }
+
+    void assignment() {
+        I s1 = (x-> { System.out.println(); });
+        I s2 = ((x-> { System.out.println(); }));
+    }
+    
+    void method() {
+        m((x-> { System.out.println(); }));
+        m(((x-> { System.out.println(); })));
+    }
+
+    I returnContext() {
+        return (x -> {System.out.println();});
+    }
+}
+
+interface I1<A, B> {
+   B foo(A a);
+}
+class ValueLambdaInContext {
+
+    <Z> void m1(I1<String, Z> i) {  }
+    <Z> void m2(I1<String, I1<String, Z>> i) {  }
+
+    void exprMethod() {
+        m1(s1 -> 1);
+        m2(s1 -> s2 -> 1);
+    }
+
+    void exprAssignment() {
+        I1<String, Integer> in1 = s1 -> 1;
+        I1<String, I1<String, Integer>> in2 = s1 -> s2 -> 1;
+    }
+
+    void statementMethod() {
+        m1(s1 -> { return 1; });
+        m2(s1 -> { return s2 -> { return 1; }; });
+    }
+
+    void statementAssignment() {
+        I1<String, Integer> in1 = s1 -> { return 1; };
+        I1<String, I1<String, Integer>> in2 = s1 -> { return s2 -> { return 1; }; };
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/IncompatibleFormalParameterTypes.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/IncompatibleFormalParameterTypes.java
new file mode 100644
index 0000000..ce112bb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/IncompatibleFormalParameterTypes.java
@@ -0,0 +1,19 @@
+class LambdaTest {
+
+  public void highlightsTheBug(Stream<String> stream) {
+    stream.flatMap((Block<? super String> sink, String element) -> {});
+  }
+
+  public interface Block<B> {
+    void apply(B t);
+  }
+
+  public interface Stream<S> {
+    <R> Stream<R> flatMap(FlatMapper<? super S, R> mapper);
+
+  }
+
+  public interface FlatMapper<F, R> {
+    void flatMapInto(Block<? super R> sink, F element);
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/IncompatibleReturnTypes.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/IncompatibleReturnTypes.java
new file mode 100644
index 0000000..bf3a9a2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/IncompatibleReturnTypes.java
@@ -0,0 +1,59 @@
+class Test1 {
+
+    interface VoidReturnType {
+        void foo();
+    }
+    {
+        VoidReturnType aI = () -> System.out.println();
+        VoidReturnType aI1 = () -> {System.out.println();};
+        VoidReturnType aI2 = <error descr="Unexpected return value">() -> {return 1;}</error>;
+        VoidReturnType aI3 = () -> 1;
+        VoidReturnType aI4 = () -> {return;};
+    }
+}
+
+class Test2 {
+    interface IntReturnType {
+        int foo();
+    }
+    {
+        IntReturnType aI = <error descr="Incompatible return type void in lambda expression">() -> System.out.println()</error>;
+        IntReturnType aI1 = () -> {System.out.println();<error descr="Missing return statement">}</error>;
+        IntReturnType aI2 = () -> {return 1;};
+        IntReturnType aI3 = () -> 1;
+    }
+}
+
+
+class Test3 {
+
+    interface XReturnType<X> {
+        X foo();
+    }
+    {
+        XReturnType<Object> aI = <error descr="Incompatible return type void in lambda expression">() -> System.out.println()</error>;
+        XReturnType<Object> aI1 = () -> {System.out.println();<error descr="Missing return statement">}</error>;
+        XReturnType<Object> aI2 = () -> {return 1;};
+        XReturnType<Object> aI3 = () -> 1;
+        XReturnType<Object> aI4 = () -> {<error descr="Missing return statement">}</error>;
+    }
+}
+
+class Test4 {
+    class Y<T>{}
+    
+    interface YXReturnType<X> {
+        Y<X> foo();
+    }
+
+    {
+        YXReturnType<Object> aI = <error descr="Incompatible return type void in lambda expression">() -> System.out.println()</error>;
+        YXReturnType<Object> aI1 = () -> {System.out.println();<error descr="Missing return statement">}</error>;
+        YXReturnType<Object> aI2 = <error descr="Incompatible return type int in lambda expression">() -> {return 1;}</error>;
+        YXReturnType<Object> aI3 = <error descr="Incompatible return type int in lambda expression">() -> 1</error>;
+        YXReturnType<Object> aI4 = () -> new Y<Object>(){};
+        YXReturnType<Object> aIDiamond = () -> new Y<>();
+        
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/IncompleteSubst.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/IncompleteSubst.java
new file mode 100644
index 0000000..9085c69
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/IncompleteSubst.java
@@ -0,0 +1,63 @@
+/*
+ * 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.
+ */
+import java.util.*;
+
+class LambdaTest<TT> {
+  interface BinaryOperator<T> {
+
+    public T eval(T left, T right);
+  }
+
+  interface Mapper<T, U> {
+    U map(T t);
+  }
+
+  public static <T, U> LambdaTest<U> map(final Iterable<? extends T> iterable, final Mapper<? super T, ? extends U> mapper) {
+    return null;
+  }
+
+  TT reduce(TT base, BinaryOperator<TT> reducer) {
+    return null;
+  }
+
+  public void test() {
+    final List<String> aStrings = Arrays.asList("1", "2", "3");
+    map(aStrings, s -> s.length()).reduce(0, (l,  r) -> l + r);
+  }
+}
+
+class LambdaTest2<TypeParam> {
+  interface BinaryOperator<T> {
+    public T eval(T left, T right);
+  }
+
+  interface Mapper<T, U> {
+    U map(T t);
+  }
+
+  public <U> LambdaTest<U> map(final Mapper<? super TypeParam, ? extends U> mapper) {
+    return null;
+  }
+
+  TypeParam reduce(TypeParam base, BinaryOperator<TypeParam> reducer) {
+    return null;
+  }
+
+  public void test() {
+    final LambdaTest2<String> lt = new LambdaTest2<>();
+    lt.map(s -> s.length()).reduce(0, (l,  r) -> l + r);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/InferFromTypeArgs.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/InferFromTypeArgs.java
new file mode 100644
index 0000000..d7f797a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/InferFromTypeArgs.java
@@ -0,0 +1,17 @@
+import java.util.*;
+public class BugReportLambdaSquiggles<T> {
+
+  private T t;
+  public <V> List<V> flatMap(Mapper<T, List<V>> mapper) {
+    return mapper.map(t);
+  }
+
+  static void bar( BugReportLambdaSquiggles<Integer> x) {
+    x.flatMap(t1 -> new ArrayList<String>(t1));
+    x.flatMap(t1 -> new ArrayList<>(t1));
+  }
+
+  interface Mapper<T, U> {
+    U map(T t);
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/InferenceFromArgs.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/InferenceFromArgs.java
new file mode 100644
index 0000000..904c504
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/InferenceFromArgs.java
@@ -0,0 +1,31 @@
+interface I<K, V> {
+    public V put(K k, V v);
+}
+
+interface A<T>{}
+interface B<L> extends A<L>{}
+
+interface SameArgsI<T> {
+    T same(T a, T b);
+}
+
+class InferenceFromArgs {
+
+    private static <E> void bar(A<E> a, I<E, Integer> i) { }
+    private static <E> void bazz(I<? super E, Integer> i) { }
+
+    void foo(B<Integer> b) {
+         bar(null, <error descr="Cyclic inference">(k, v) -> v</error>);
+         bar(null, null);
+         bar(b, (k, v) ->  {return v;});
+         bar(b, (k, v) -> {<error descr="Incompatible types. Found: 'java.lang.Integer', required: 'java.lang.String'">String i = k;</error> return v;});
+         bar(b, (k, v) -> {Integer  i = k; return v;});
+
+         bazz(<error descr="Cyclic inference">(k, v) -> v</error>);
+         bazz((k, v) -> {<error descr="Incompatible types. Found: '<lambda parameter>', required: 'int'">int i = k;</error> return v;});
+    }
+
+    public static <T> SameArgsI<T> max() {
+        return (a, b) -> b;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/InferenceOnMethodCallSite.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/InferenceOnMethodCallSite.java
new file mode 100644
index 0000000..eb8f8d7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/InferenceOnMethodCallSite.java
@@ -0,0 +1,17 @@
+import java.util.*;
+interface In<X> {
+    List<X> f();
+}
+
+class InferenceOnMethodCallSite {
+    <Z> void m(In<Z> i, In<Z> ii) { }
+    <Z> void m(In<Z> s) { }
+
+    {
+        m(() -> Collections.emptyList());
+        m((In<String>)() -> Collections.emptyList(), () ->  new ArrayList<String>());
+        m(() ->Collections.<String>emptyList(), () -> new ArrayList<String>());
+        m(() -> Collections.<String>emptyList());
+    }
+    
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/LambdaContext.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/LambdaContext.java
new file mode 100644
index 0000000..4fd368c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/LambdaContext.java
@@ -0,0 +1,27 @@
+interface I {
+    void m(int x);
+}
+
+class Test {
+    void foo(Object x) {}
+
+    void bar() {
+        foo(!<error descr="Lambda expression not expected here">(int x)-> {}</error>);
+        foo(<error descr="Lambda expression not expected here">(int x)-> { }</error> instanceof Object );
+    }
+
+    I bazz() {
+        foo((I)(int x)-> { });
+        I o = (I)(int x)-> { };
+        return (int x) -> {};
+    }
+}
+
+interface II {
+  boolean _(String s);
+}
+class Test1 {
+  void bar(boolean b){
+    II ik = b ? (s)-> true : (s)->false;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/LambdaOnVarargPlace.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/LambdaOnVarargPlace.java
new file mode 100644
index 0000000..614065c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/LambdaOnVarargPlace.java
@@ -0,0 +1,21 @@
+class TestData<K> {}
+interface TerminalOp<L, M> extends IntermediateOp<L, M> {}
+interface IntermediateOp<L1, M1> { boolean _(L1 l, M1 m);}
+
+class Test<T, U> {
+  protected U exerciseOps(TestData<T> data, TerminalOp<T, U> terminal, IntermediateOp<T, U>... ops) {
+    return exerciseOps(data, terminal,  (u, v) ->  u.equals(v));
+  }
+}
+
+class Test1 {
+  protected <T, U> U exerciseOps(TestData<T> data, TerminalOp<T, U> terminal, IntermediateOp... ops) {
+    return exerciseOps(data, terminal,  (u, v) -> u.equals(v));
+  }
+}
+
+class Test2 {
+  protected <T, U> U exerciseOps(TestData<T> data, TerminalOp<T, U> terminal, IntermediateOp<T, U>... ops) {
+    return exerciseOps(data, terminal,  (u, v) -> u.equals(v));
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/LambdaRawOrNot.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/LambdaRawOrNot.java
new file mode 100644
index 0000000..4b9b085
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/LambdaRawOrNot.java
@@ -0,0 +1,72 @@
+import java.util.*;
+class TestData<K> {}
+interface TerminalOp<L, M> extends IntermediateOp<L, M> {}
+interface IntermediateOp<L1, M1> { boolean _(L1 l, M1 m);}
+
+
+class Test1 {
+  protected <T, U> U exerciseOps(TestData<T> data, TerminalOp<T, U> terminal, IntermediateOp<T, U>... ops) {
+    return exerciseOps(data, (u, v) -> u.equals(v), terminal);
+  }
+}
+
+class Test2 {
+  protected <T, U> U exerciseOps(TestData<T> data, TerminalOp<T, U> terminal, IntermediateOp... ops) {
+    return exerciseOps(data, <error descr="Cyclic inference">(u, v) -> u.equals(v)</error>, terminal);
+  }
+}
+
+class Test3 {
+  interface I<Y> {
+    void m(Y y);
+  }
+
+  static <T> void bar(I<T> i, List<T> l){
+    bar(x -> {}, l);
+    bar(<error descr="Cyclic inference">x -> {}</error>, null);
+    bar((I<T>)x -> {}, null);
+    bar((T x) -> {}, null);
+    bar(x -> {}, new ArrayList<T>());
+    bar(<error descr="Cyclic inference">x -> {}</error>, new ArrayList());
+  }
+
+  static {
+    bar(<error descr="Cyclic inference">x->{}</error>, new ArrayList());
+  }
+}
+
+
+class Test4 {
+  protected <T, U> U exerciseOps(TestData<T> data, TerminalOp1<T, U> terminal, IntermediateOp1... ops) {
+    return exerciseOps(data, (u, v) -> u.equals(v), terminal, ops);
+  }
+
+  protected static <T, U> U exerciseOps(TestData<T> data,
+                                        BiPredicate1<U, U> equalator,
+                                        TerminalOp1<T, U> terminalOp,
+                                        IntermediateOp1[] ops) {
+    return null;
+  }
+
+  public interface IntermediateOp1<T,U> {
+
+  }
+  public interface BiPredicate1<T, U> extends IntermediateOp1<T, U>{
+    boolean _(T t, U u);
+  }
+
+  public interface TerminalOp1<T, U> extends IntermediateOp1<T, U> {}
+
+}
+
+class Test5 {
+  {
+    Block empty = x -> {};
+    Block<?> empty1 = x -> {};
+    System.out.println((Block) x -> {});
+  }
+
+  interface Block<T> {
+    void apply(T t);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/NestedLambdas.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/NestedLambdas.java
new file mode 100644
index 0000000..6e71748
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/NestedLambdas.java
@@ -0,0 +1,14 @@
+interface I {
+  Integer _();
+}
+
+interface I1 {
+  String _();
+}
+
+class Test {
+  I i = () -> {
+    I1 i1 = () -> {return "";};
+    return 1;
+  };
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/NoInferenceResult.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/NoInferenceResult.java
new file mode 100644
index 0000000..b0656f5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/NoInferenceResult.java
@@ -0,0 +1,30 @@
+import java.lang.String;
+
+interface I<A, B>  {
+  B foo(A a);
+}
+class Foo<T> {
+  public <V> Foo<V> map(I<T, V> mapper) {
+    return new Foo<V>();
+  }
+}
+
+class NoInferenceResult {
+
+    <A, B> I<A, B> m(I<A, B>  f) { return null; }
+    <T> void m1(T t) { }
+
+    void test() {
+        m((String s1) ->  <error descr="Target type of a lambda conversion must be an interface">(String s2) ->  s1 + s2</error>);
+        m(<error descr="Incompatible return type <lambda expression> in lambda expression">(String s1) ->  {return (String s2) ->  s1 + s2;}</error>);
+
+        m((String s1) -> s1.length());
+        m((String s1) -> s1);
+
+        m1(<error descr="Cyclic inference">() -> { }</error>);
+
+        Foo<String> foo = new Foo<String>();
+        foo.map(v -> null);
+        Foo<String> map1 = foo.map(value -> value + ", " + value);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/RawWhenNoParams.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/RawWhenNoParams.java
new file mode 100644
index 0000000..8e6d04d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/RawWhenNoParams.java
@@ -0,0 +1,17 @@
+public class FooBar {
+    private static final class Bar2 {
+        private Bar2() {
+        }
+    }
+
+    private interface I<T> {
+        T create();
+    }
+
+    static void foo(I intf) {}
+
+
+    public static void main(String[] args) throws Exception {
+        foo(() -> new Bar2());
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/ReassignUsedVars.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/ReassignUsedVars.java
new file mode 100644
index 0000000..e2186e4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/ReassignUsedVars.java
@@ -0,0 +1,9 @@
+class XXX {
+  void foo() {
+    int k = 0;
+    int n = 2;
+    Runnable r = ()->{
+      <error descr="Variable used in lambda expression should be effectively final">k</error> = n;
+    };
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/RecursiveAccess.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/RecursiveAccess.java
new file mode 100644
index 0000000..b430ebd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/RecursiveAccess.java
@@ -0,0 +1,11 @@
+public class LambdaTest {
+    Op lambda_fib =  (n) -> (n < 2) ? 1 : lambda_fib.op(n - 1) + lambda_fib.op(n - 2);
+
+    {
+        Op lambda_fib =  (n) -> (n < 2) ? 1 : <error descr="Variable 'lambda_fib' might not have been initialized">lambda_fib</error>.op(n - 1) + lambda_fib.op(n - 2);
+    }
+
+    interface Op {
+        int op(int n);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/ReturnTypeCompatibility.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/ReturnTypeCompatibility.java
new file mode 100644
index 0000000..4cc9154
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/ReturnTypeCompatibility.java
@@ -0,0 +1,72 @@
+class ReturnTypeIncompatibility {
+
+    interface I1<T extends Number> {
+        T m(Integer x);
+    }
+
+    interface I2<L extends String> {
+        L m(Integer x);
+    }
+
+    interface I3<K> {
+        void m(Integer x);
+    }
+
+    static <P extends Number> void call(I1<P> i1) {
+        i1.m(1);
+    }
+
+    static <P extends String> void call(I2<P> i2) {
+        i2.m(2);
+    }
+
+    static <Q> void call(I3<Q> i3) {
+        i3.m(3);
+    }
+
+    public static void main(String[] args) {
+        call(i-> {return i;});
+    }
+}
+
+
+class ReturnTypeCompatibility {
+
+    interface I1<T extends Number> {
+        T m(T x);
+    }
+
+    interface I2<L extends String> {
+        L m(L x);
+    }
+
+    interface I3<K> {
+        void m(K x);
+    }
+
+    static <P extends Number> void call(I1<P> i1) {
+        i1.m(null);
+    }
+
+    static <P extends String> void call(I2<P> i2) {
+        i2.m(null);
+    }
+
+    static <Q> void call(I3<Q> i3) {
+        i3.m(null);
+    }
+
+    public static void main(String[] args) {
+        <error descr="Cannot resolve method 'call(<lambda expression>)'">call</error>(i-> {return i;});
+    }
+}
+
+class ReturnTypeChecks1 {
+
+    interface I<K extends Number, V extends Number> {
+       V m(K k);
+    }
+
+    I<Integer, Integer> accepted = i -> { return i; };
+    I<Double, Integer> rejected = <error descr="Incompatible return type Double in lambda expression">i -> { return i; }</error>;
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/ReturnTypeCompatibility1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/ReturnTypeCompatibility1.java
new file mode 100644
index 0000000..d34d61f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/ReturnTypeCompatibility1.java
@@ -0,0 +1,31 @@
+class Test {
+
+    interface I<A, B> {
+        B f(A a);
+    }
+
+    interface II<A, B> extends I<A,B> { }
+
+    static class Foo<A> {
+        boolean forAll(final I<A, Boolean> f) {
+            return false;
+        }
+
+        String forAll(final II<A, String> f) {
+            return "";
+        }
+
+        String forAll2(final II<A, String> f) {
+            return "";
+        }
+    }
+
+    void foo(Foo<String> as, final Foo<Character> ac) {
+        boolean b1 = as.forAll(s -> ac.forAll(c -> false));
+        String s1 = as.forAll(s -> ac.forAll(c -> ""));
+        <error descr="Incompatible types. Found: 'java.lang.String', required: 'boolean'">boolean b2 = as.forAll(s -> ac.forAll(c -> ""));</error>
+        String s2 = as.forAll2(s -> ac.forAll2(<error descr="Incompatible return type boolean in lambda expression">c -> false</error>));
+        boolean b3 = as.forAll((I<String, Boolean>)s -> ac.forAll((I<Character, Boolean>)<error descr="Incompatible return type String in lambda expression">c -> ""</error>));
+        String s3 = as.forAll((II<String, String>)s -> ac.forAll((II<Character, String>)<error descr="Incompatible return type boolean in lambda expression">c -> false</error>));
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/ReturnTypeCompatibilityBeforeSpecificsCheck.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/ReturnTypeCompatibilityBeforeSpecificsCheck.java
new file mode 100644
index 0000000..70583e9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/ReturnTypeCompatibilityBeforeSpecificsCheck.java
@@ -0,0 +1,25 @@
+class X {
+    public static void main(final Stream<String> stream) throws Throwable {
+        stream.map(s -> s.substring("http://".length())).forEach(System.out::println);
+    }
+}
+
+interface Stream<T> {
+    <R> Stream<R> map(Function<? super T, ? extends R> mapper);
+    IntStream map(IntFunction<? super T> mapper);
+    void forEach(Block<? super T> block);
+}
+
+interface IntFunction<T> extends Function<T, Integer> {
+    public int applyAsInt(T t);
+}
+
+interface Function<T, R> {
+    public R apply(T t);
+}
+
+interface IntStream extends BaseStream<Integer> {}
+interface BaseStream<T> {}
+interface Block<T> {
+    public void accept(T t);
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/ReturnValue.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/ReturnValue.java
new file mode 100644
index 0000000..39ba57f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/ReturnValue.java
@@ -0,0 +1,65 @@
+class Test1 {
+  interface Extractor<T, W> {
+    Option<W> unapply(T t);
+  }
+
+  public static abstract class Option<T> {
+    private static class None<T> extends Option<T> {}
+
+    private static final Option NONE = new None();
+
+    public static <T> Option<T> none() {
+      return NONE;
+    }
+
+    public static <T> Option<T> option(T value) {
+      if (value == null) {
+        return NONE;
+      } else {
+        return null;
+      }
+    }
+  }
+
+
+
+  public static void main(String[] args) {
+    Extractor<String, Integer> e = s -> {
+      if (s.equals("1")) {
+        return Option.option(1);
+      } else {
+        return Option.none();
+      }
+    };
+
+    Extractor<String, Integer> e1 = <error descr="Incompatible return type Option<String> in lambda expression">s -> {
+      if (s.equals("1")) {
+        return Option.option(1);
+      } else {
+        return Option.option("2");
+      }
+    }</error>;
+  }
+}
+
+class Test2 {
+  interface X<T extends Number> {
+    T foo();
+  }
+
+  {
+    X<?> x = <error descr="No instance of type X<?> exists so that lambda expression can be type-checked">() -> 123</error>;
+    X<? extends Number> x1 = () -> 123;
+    
+  }
+}
+
+class Test3 {
+  interface X<T> {
+    T foo();
+  }
+
+  {
+    X<?> x = () -> 123;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/StaticAccess.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/StaticAccess.java
new file mode 100644
index 0000000..178cdc4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/StaticAccess.java
@@ -0,0 +1,18 @@
+interface I {
+  int m();
+}
+
+class XXX {
+
+  int var;
+  static int ourVar;
+
+
+  static void foo() {
+    I s = () -> <error descr="Non-static field 'var' cannot be referenced from a static context">var</error> + ourVar;
+  }
+
+  void bar() {
+    I s = ()->var + ourVar;
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/TypeArgsConsistency.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/TypeArgsConsistency.java
new file mode 100644
index 0000000..b70e4aa
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/TypeArgsConsistency.java
@@ -0,0 +1,77 @@
+class TypeArgsConsistency {
+
+    interface I<T> {
+        T m(int i, int j);
+    }
+
+    static void foo(I<Integer> s) { }
+
+    static <X> I<X> bar(I<X> s) { return null; }
+
+    {
+      I<Integer> i1 = (i, j) -> i + j;
+      foo((i, j) -> i + j);
+      I<Integer> i2 = bar((i, j) -> i + j);
+      <error descr="Incompatible types. Found: 'TypeArgsConsistency.I<java.lang.String>', required: 'TypeArgsConsistency.I<java.lang.Integer>'">I<Integer> i3 = bar((i, j) -> "" + i + j);</error>
+    }
+}
+
+class TypeArgsConsistency1 {
+
+    interface I<T> {
+        int m(int i, T j);
+    }
+
+    static void foo(I<Integer> s) { }
+
+    static <X> I<X> bar(I<X> s) { return null; }
+
+    {
+        I<Integer> i1 = (i, j) -> i + j;
+        foo((i, j) -> i + j);
+        I<Integer> i2 =bar(<error descr="Cyclic inference">(i, j) -> i</error>) ;
+        I<Integer> i3 = bar(<error descr="Cyclic inference">(i, j) -> "" + i + j</error>);
+    }
+}
+
+class TypeArgsConsistency2 {
+    static <T> I<T> bar(I<T> i) {return null;}
+    static <T> I1<T> bar1(I1<T> i) {return null;}
+    static <T> I2<T> bar2(I2<T> i) {return i;}
+
+    public static void main(String[] args) {
+        I<Integer> i1 = bar(<error descr="Cyclic inference">x -> x</error>);
+        I1<Integer> i2 = bar1(<error descr="Cyclic inference">x -> 1</error>);
+        I2<String> aI2 = bar2(x -> "");
+        <error descr="Incompatible types. Found: 'TypeArgsConsistency2.I2<java.lang.String>', required: 'TypeArgsConsistency2.I2<java.lang.Integer>'">I2<Integer> aI28 = bar2( x-> "");</error>
+        I2<Integer> i3 = bar2(x -> x);
+        I2<Integer> i4 = bar2(x -> foooI());
+        System.out.println(i4.foo(2));
+    }
+
+    static <K> K fooo(){return null;}
+    static int foooI(){return 0;}
+   
+    interface I<X> {
+        X foo(X x);
+    }
+    interface I1<X> {
+
+        int foo(X x);
+    }
+
+    interface I2<X> {
+        X foo(int x);
+    }
+}
+
+class TypeArgsConsistency3 {
+    public static void main(String[] args) { 
+        doIt1(1, x -> doIt1(x, y -> x * y));
+        doIt1(1, x -> x);
+        doIt1(1, x -> x * x);
+    }
+    interface F1<ResultType, P1> { ResultType _(P1 p); }
+    static <T> T doIt1(T i, F1<T,T> f) { return f._(i);}
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/TypeArgsConsistencyMisc1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/TypeArgsConsistencyMisc1.java
new file mode 100644
index 0000000..613bbeb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/TypeArgsConsistencyMisc1.java
@@ -0,0 +1,94 @@
+/*
+ * 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.
+ */
+import java.util.List;
+class Test1 {
+    
+    interface I<X> {
+        X foo(List<String> list);
+    }
+    
+    static <T> I<T> bar(I<T> i){return i;}
+    static <T> void bar1(I<T> i){}
+    static <T> void bar2(T t, I<T> i){}
+    static <T> void bar3(I<T> i, T t){}
+    
+    {
+        bar(x -> x);
+        bar1(x -> x);
+
+        I<Object> lO =  x->x;
+        bar2("", lO);
+
+        I<String> lS =  <error descr="Incompatible return type List<String> in lambda expression">x->x</error>;
+        bar2("", lS);
+
+        bar2("", x -> x);
+
+        bar3(x -> x, "");
+
+        int ixc = 42;
+        bar(x -> {
+              if (ixc == 2) return "aaa";
+              return x;
+           });
+        bar(x -> {
+              if (ixc == 2) return x;
+              return x;
+           });
+    }
+}
+
+
+class Test2 {
+
+    interface I<X> {
+        X foo(List<X> list);
+    }
+
+    static <T> I<T> bar(I<T> i){return i;}
+    static <T> void bar1(I<T> i){}
+    static <T> void bar2(T t, I<T> i){}
+    static <T> void bar3(I<T> i, T t){}
+
+    {
+        bar(<error descr="Cyclic inference">x -> x</error>);
+        bar1(<error descr="Cyclic inference">x -> x</error>);
+        bar2(1, <error descr="Incompatible return type List<Integer> in lambda expression">x -> x</error>);
+        bar2("", <error descr="Incompatible return type List<String> in lambda expression">x -> x</error>);
+        bar3(<error descr="Incompatible return type List<String> in lambda expression">x -> x</error>, "");
+    }
+}
+
+class Test3 {
+
+    interface I<X> {
+        List<X> foo(List<X> list);
+    }
+
+    static <T> I<T> bar(I<T> i){return i;}
+    static <T> void bar1(I<T> i){}
+    static <T> void bar2(T t, I<T> i){}
+    static <T> void bar3(I<T> i, T t){}
+
+    {
+        bar(<error descr="Cyclic inference">x -> x</error>);
+        bar1(<error descr="Cyclic inference">x -> x</error>);
+        bar2(1, x -> x);
+        bar2("", x -> x);
+
+        bar3(x -> x, "");
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/TypeArgsConsistencyMisc2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/TypeArgsConsistencyMisc2.java
new file mode 100644
index 0000000..a544348
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/TypeArgsConsistencyMisc2.java
@@ -0,0 +1,58 @@
+/*
+ * 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.
+ */
+import java.util.*;
+class Test1 {
+  {
+    Comparable<? extends Integer> c = (Integer o)->{
+      return 0;
+    };
+    
+    Comparable<? super Integer> c1 = (Integer o)->{
+      return 0;
+    };
+  }
+}
+
+
+class Test2<U> {
+  interface I<T> {
+    void m(T t);
+  }
+  private void foo(I<? super U> i1) {}
+
+  private void bar() {
+    foo((U u) -> {});
+    foo(u -> {});
+  }
+
+  interface I1<T> {}
+  private <A extends I1<? super U>> A bar(A a) {
+    foo((U u)->{});
+    foo(u->{});
+    return a;
+  }
+}
+
+class TestNewExpression<E> {
+    public TestNewExpression(Comparator<? super E> comparator) {
+        //some code
+    }
+    public static void main(String[] args) {
+      TestNewExpression<String> strs = new TestNewExpression<String>((o1, o2) -> {
+            return o2.compareToIgnoreCase(o1);
+        });
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/TypeArgsConsistencyWithoutParams.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/TypeArgsConsistencyWithoutParams.java
new file mode 100644
index 0000000..5ae10bf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/TypeArgsConsistencyWithoutParams.java
@@ -0,0 +1,49 @@
+import java.lang.String;
+import java.util.*;
+class Test4 {
+   interface I<K> {
+       List<K> foo();
+   }
+    
+    static <T> void bar(I<T> i){}
+    
+    {
+        bar(() -> null);
+    }
+}
+
+class Test5 {
+    interface I<K> {
+        void foo(K k);
+    }
+
+    static <T> void bar(I<T> i){}
+
+    {
+        bar(<error descr="Incompatible parameter types in lambda expression">() -> null</error>);
+    }
+}
+class Test6 {
+    interface I<K> {
+        void foo();
+    }
+
+    static <T> void bar(I<T> i){}
+
+    {
+        bar(() -> null);
+        bar(() -> {});
+    }
+}
+
+class Test7 {
+  interface I<K> {
+    void foo(String s);
+  }
+  
+  static <T> void bar(I<T> i){}
+
+  {
+     bar(x -> {});
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/UnhandledException.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/UnhandledException.java
new file mode 100644
index 0000000..5fedf26
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/UnhandledException.java
@@ -0,0 +1,12 @@
+import java.io.IOException;
+
+interface Callable<V> {
+    V call() throws Exception;
+}
+
+class Test2 {
+    static <V> void m(Callable<V> c){}
+    {
+        m(() -> {throw new IOException();});
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/UnreachableStatement.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/UnreachableStatement.java
new file mode 100644
index 0000000..8ce86440
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/UnreachableStatement.java
@@ -0,0 +1,9 @@
+class Test1 {
+    {
+      Comparable<String> c = o -> {
+        if (o == null) return 1;
+        return -1;
+        <error descr="Unreachable statement">System.out.println("Hello");</error>
+      };
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/UseIncompleteParentSubstitutor.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/UseIncompleteParentSubstitutor.java
new file mode 100644
index 0000000..74ac8af
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/UseIncompleteParentSubstitutor.java
@@ -0,0 +1,25 @@
+import java.util.concurrent.atomic.AtomicInteger;
+
+class Test {
+  static class List<T> {
+    public Stream<T> stream() {
+      return null;
+    }
+  }
+
+  interface IntFunction<T> {
+      public int applyAsInt(T t);
+  }
+
+  static class Stream<E> {
+    public Stream map(IntFunction<? super E> mapper) {
+      return null;
+    }
+  }
+
+  public static void main(List<AtomicInteger> list) {
+    list.stream().map(atomic -> atomic.get());
+  }
+}
+
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/VariableInitialization.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/VariableInitialization.java
new file mode 100644
index 0000000..f6a1f6b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/VariableInitialization.java
@@ -0,0 +1,5 @@
+class Test1 {
+    {
+        Runnable r = () -> { <error descr="Variable 'r' might not have been initialized">r</error>.run(); };
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/WildcardBounds.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/WildcardBounds.java
new file mode 100644
index 0000000..b18dbb3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/WildcardBounds.java
@@ -0,0 +1,20 @@
+class WildcardBounds {
+
+    interface I<T> {
+        T foo(T a, T b);
+    }
+
+    void m1(I<? extends String> f1) {}
+    void m2(I<? super String> f2) {}
+    void m3(I<?> f3) {}
+
+    I<? extends String> f1 = (a, b) -> a;
+    I<? super String> f2 = (a, b) -> a;
+    I<?> f3 = (a, b) -> a;
+
+    {
+        m1((a, b) -> a);
+        m2((a, b) -> a);
+        m3((a, b) -> a);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/inference/FunctionalInterfaceShouldHaveExactlyOneMethod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/inference/FunctionalInterfaceShouldHaveExactlyOneMethod.java
new file mode 100644
index 0000000..4407017
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/inference/FunctionalInterfaceShouldHaveExactlyOneMethod.java
@@ -0,0 +1,48 @@
+public class NotAFIT {
+  static class First {
+    static interface A<T> {
+      void foo1();
+      void foo2();
+    }
+    static <T> void foo(A<T> a) {
+    }
+
+    void bar() {
+        foo(<error descr="Multiple non-overriding abstract methods found">() ->{}</error>);
+    }
+  }
+
+  static class WithInheritance {
+    static interface A<T> {
+      void foo1();
+    }
+
+    static interface B<M> extends A<M> {
+      void foo2();
+    }
+
+    static <T> void foo(B<T> a) {
+    }
+
+    void bar() {
+      foo(<error descr="Multiple non-overriding abstract methods found">()->{}</error>);
+    }
+  }
+
+  static class WithInheritanceOverrideSameMethod {
+    static interface A<T> {
+      void foo1();
+    }
+
+    static interface B<M> extends A<M> {
+      void foo1();
+    }
+
+    static <T> void foo(B<T> a) {
+    }
+
+    void bar() {
+      foo(()->{});
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/inference/SimpleCyclicInference.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/inference/SimpleCyclicInference.java
new file mode 100644
index 0000000..d344665
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/inference/SimpleCyclicInference.java
@@ -0,0 +1,20 @@
+class NoLambda {
+    interface I<T> {
+        void f(T t);
+    }
+
+    <Z> void bar(I<Z> iz) {
+    }
+
+    void bazz() {
+        bar(null);
+        bar(<error descr="Cyclic inference">(z)-> {System.out.println();}</error>);
+    }
+  
+    static <T> T id(T i2) {return i2;}
+
+    {
+       id(<error descr="Cyclic inference">() -> {System.out.println("hi");}</error>);
+       NoLambda.<Runnable>id(() -> {System.out.println("hi");});
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/AccessModifiers.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/AccessModifiers.java
new file mode 100644
index 0000000..40b6948
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/AccessModifiers.java
@@ -0,0 +1,75 @@
+class MyTest {
+    
+    private static class Foo {
+        static int foo(int i) { return i; }
+    }
+    
+    static Foo foo = new Foo();
+
+    static void foo(String s) {}
+    
+    static void bar(Integer i, Number n) {}
+    static void bar(Number n, Integer i) {}
+    
+    void baz(int i) {}
+}
+
+class AlienTest {
+    
+    interface IInt {
+        int _(int i);
+    }
+    
+    interface IIntInt {
+        int _(Integer i1, Integer i2);
+    }
+
+    static {
+        <error descr="Incompatible types. Found: '<method reference>', required: 'AlienTest.IInt'">IInt i1 = MyTest::abracadabra;</error>
+        <error descr="Incompatible types. Found: '<method reference>', required: 'AlienTest.IInt'">IInt i2 = MyTest::foo;</error>
+        <error descr="Incompatible types. Found: '<method reference>', required: 'AlienTest.IInt'">IInt i3 = MyTest::bar;</error>
+        <error descr="Incompatible types. Found: '<method reference>', required: 'AlienTest.IIntInt'">IIntInt i4 = MyTest::bar;</error>
+        <error descr="Incompatible types. Found: '<method reference>', required: 'AlienTest.IInt'">IInt i5 = MyTest::baz;</error>
+        IInt i6 = <error descr="'foo(int)' is not public in 'MyTest.Foo'. Cannot be accessed from outside package">MyTest.foo::foo</error>;
+        IInt i7 = MyTest.<error descr="'MyTest.Foo' has private access in 'MyTest'">Foo</error>::foo;
+    }
+}
+
+
+class MyTest1 {
+    
+    interface I1 {
+        int[] _();
+    }
+    
+    interface I2 {
+        Object _();
+    }
+    
+    interface I3 {
+        char[] _();
+    }
+    
+    interface I4 {
+
+        boolean  _();
+    }
+
+    interface I5 {
+        Class<? extends MyTest1> _();
+    }
+
+    interface I6 {
+        Class<MyTest1> _();
+    }
+    
+    void foo(Object[] arr) {
+        <error descr="Incompatible types. Found: '<method reference>', required: 'MyTest1.I1'">I1 c1 = arr :: clone;</error>
+        I2 c2 = arr :: clone;
+        <error descr="Incompatible types. Found: '<method reference>', required: 'MyTest1.I3'">I3 c3 = arr::clone;</error>
+        <error descr="Incompatible types. Found: '<method reference>', required: 'MyTest1.I4'">I4 c5 = arr::clone;</error>
+
+        <error descr="Incompatible types. Found: '<method reference>', required: 'MyTest1.I5'">I5 c4 = this::getClass;</error>
+        <error descr="Incompatible types. Found: '<method reference>', required: 'MyTest1.I6'">I6 c6 = this::getClass;</error>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/Ambiguity.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/Ambiguity.java
new file mode 100644
index 0000000..3fe1395
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/Ambiguity.java
@@ -0,0 +1,185 @@
+package todelete;
+
+/**
+ * Created with IntelliJ IDEA.
+ * User: Anna.Kozlova
+ * Date: 9/26/12
+ * Time: 1:18 PM
+ * To change this template use File | Settings | File Templates.
+ */
+class MyTest {
+    interface Bar1 {
+        int _(String s);
+    }
+
+    interface Bar2 {
+        int _(int s);
+    }
+
+    void bar(Bar1 b1){}
+    void bar(Bar2 b1){}
+
+    static int foo(int i) {
+        return 0;
+    }
+
+    static int foo(String i) {
+        return 0;
+    }
+
+    {
+        Bar1 b1 = MyTest :: foo;
+        bar<error descr="Ambiguous method call: both 'MyTest.bar(Bar1)' and 'MyTest.bar(Bar2)' match">(MyTest :: foo)</error>;
+    }
+}
+
+class MyTest1 {
+    interface Bar1 {
+        int _(String s);
+    }
+
+    interface Bar2 {
+        int _(int s);
+    }
+
+    //void bar(Bar1 b1){}
+    void bar(Bar2 b1){}
+
+    static int foo(int i) {
+        return 0;
+    }
+
+    static int foo(String i) {
+        return 0;
+    }
+
+    {
+        <error descr="Incompatible types. Found: '<method reference>', required: 'todelete.MyTest1.Bar1'">Bar1 b1 = MyTest2 :: foo;</error>
+        bar(MyTest1 :: foo);
+    }
+}
+
+class MyTest2 {
+    interface Bar1 {
+        int _(String s);
+    }
+
+    interface Bar2 {
+        int _(int s);
+    }
+
+    void bar(Bar1 b1){}
+    void bar(Bar2 b1){}
+
+    static int foo(int i) {
+        return 0;
+    }
+
+    /*static int foo(String i) {
+        return 0;
+    }*/
+
+    {
+        <error descr="Incompatible types. Found: '<method reference>', required: 'todelete.MyTest2.Bar1'">Bar1 b1 = MyTest2 :: foo;</error>
+        bar(MyTest2 :: foo);
+    }
+}
+
+class MyTest3 {
+    interface Bar1 {
+        int _(String s);
+    }
+
+    interface Bar2 {
+        int _(int s);
+    }
+
+    //void bar(Bar1 b1){}
+    void bar(Bar2 b1){}
+
+    /*static int foo(int i) {
+        return 0;
+    }*/
+
+    static int foo(String i) {
+        return 0;
+    }
+
+    {
+        <error descr="Incompatible types. Found: '<method reference>', required: 'todelete.MyTest3.Bar1'">Bar1 b1 = MyTest2 :: foo;</error>
+        bar<error descr="'bar(todelete.MyTest3.Bar2)' in 'todelete.MyTest3' cannot be applied to '(<method reference>)'">(MyTest3 :: foo)</error>;
+    }
+}
+
+
+class MyTest4 {
+    interface Bar1<T> {
+        int _(T s);
+    }
+
+
+    void bar(Bar1 b1){}
+
+    static int foo(int i) {
+        return 0;
+    }
+
+    static int foo(String i) {
+        return 0;
+    }
+
+    {
+         bar<error descr="'bar(todelete.MyTest4.Bar1)' in 'todelete.MyTest4' cannot be applied to '(<method reference>)'">(MyTest4:: foo)</error>;
+    }
+}
+
+class MyTest5 {
+    interface Bar1<T> {
+        int _(T s);
+    }
+
+
+    static <T1> void bar(Bar1<T1> b1){}
+
+    static <K> int foo(K k) {
+        return 0;
+    }
+
+    static int foo(String i) {
+        return 0;
+    }
+
+    {
+         //todo ambiguity rules checked MyTest5.<String>bar(MyTest5::foo);
+    }
+}
+
+public class MyTest6 {
+    interface I {
+       void _(Integer i);
+    }
+
+    static void foo(Number i) {}
+    static void foo(Integer i, String s) {}
+    static void foo(Integer d) {}
+
+    public static void main(String[] args) {
+        I s = MyTest6::foo;
+        s._(1);
+    }
+}
+
+public class MyTest7 {
+    interface I {
+       void _(Number i);
+    }
+
+    static void foo(Number i) {}
+    static void foo(Integer i, String s) {}
+    static void foo(Integer d) {}
+
+    public static void main(String[] args) {
+        I s = MyTest7::foo;
+        s._(1);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/Assignability.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/Assignability.java
new file mode 100644
index 0000000..6b8d1fb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/Assignability.java
@@ -0,0 +1,42 @@
+class Test {
+  {
+      <error descr="Incompatible types. Found: '<method reference>', required: 'java.lang.Runnable'">Runnable b = Test :: length;</error>
+      Comparable<String> c = Test :: length;
+      <error descr="Incompatible types. Found: '<method reference>', required: 'java.lang.Comparable<java.lang.Integer>'">Comparable<Integer> c1 =  Test :: length;</error>
+  }
+
+  public static Integer length(String s) {
+    return s.length();
+  }
+
+  interface Bar {
+    Integer _(String s);
+  }
+}
+
+class Test1 {
+    {
+        <error descr="Incompatible types. Found: '<method reference>', required: 'java.lang.Runnable'">Runnable b = Test1 :: length;</error>
+        Comparable<String> c = Test1 :: length;
+        Comparable<Integer> c1 =  Test1 :: length;
+    }
+  
+    public static Integer length(String s) {
+      return s.length();
+    }
+
+    public static Integer length(Integer s) {
+      return s;
+    }
+  
+    interface Bar {
+      Integer _(String s);
+    }
+}
+
+class Test2 {
+
+    void foo(Integer i) {}
+
+    <error descr="Incompatible types. Found: '<method reference>', required: 'java.lang.Object'">Object o = Test2::foo;</error>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/Assignability1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/Assignability1.java
new file mode 100644
index 0000000..95a8304
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/Assignability1.java
@@ -0,0 +1,23 @@
+class Test {
+  void foo(boolean flag) {
+    Runnable r = null;
+    Runnable x1 = flag ? System.out::println : System.out::println;
+    Runnable x2 = flag ? r : System.out::println;
+    Runnable x3 = flag ? System.out::println : r;
+    Runnable x4 = flag ? System.out::println : new Runnable() {
+      @Override
+      public void run() {
+      }
+    };
+    Runnable x5 = flag ? System.out::println : () -> {
+    };
+    Runnable x6 = flag ? () -> {} : System.out::println;
+    Runnable x7 = flag ? () -> {} : () -> {};
+    Runnable x8 = flag ? new Runnable() {
+      @Override
+      public void run() {
+      }
+    } : () -> {};
+    Runnable x9 = flag ? () -> {} : r;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/ConstructorAssignability.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/ConstructorAssignability.java
new file mode 100644
index 0000000..bce0661
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/ConstructorAssignability.java
@@ -0,0 +1,44 @@
+class Foo<R> {
+    public interface Factory<U> {
+        U make();
+    }
+
+    interface ASink<R, K extends ASink<R, K>> {
+        public void combine(K other);
+    }
+
+    static <R, S extends ASink<R, S>> R reduce(Factory<S> factory) {
+        return null;
+    }
+
+    public void foo() {
+        reduce(Moo::new);
+        reduce<error descr="'reduce(Foo.Factory<Foo.ASink>)' in 'Foo' cannot be applied to '(<method reference>)'">(AMoo::new)</error>;
+        reduce(AAMoo::new);
+        reduce(AAAMoo::new);
+    }
+
+    private class Moo implements ASink<R, Moo> {
+        @Override
+        public void combine(Moo other) {
+        }
+    }
+
+    private class AMoo {
+    }
+
+    private class AAMoo implements ASink<AAMoo, AAMoo> {
+        @Override
+        public void combine(AAMoo other) {
+        }
+    }
+
+    private class AAAMoo implements ASink<R, AAAMoo> {
+        private AAAMoo() {
+        }
+
+        @Override
+        public void combine(AAAMoo other) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/ConstructorRefInnerFromSuper.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/ConstructorRefInnerFromSuper.java
new file mode 100644
index 0000000..bf9e811
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/ConstructorRefInnerFromSuper.java
@@ -0,0 +1,19 @@
+class MyTest {
+
+    static class Super {
+        class Inner {
+            Inner(int i){}
+        }
+    }
+
+    static class Child extends Super {
+
+        interface I { 
+          Inner m(Child child, int i); 
+        }
+
+        void test() {
+            I var = Child.Inner::new;
+        }
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/ConstructorRefs.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/ConstructorRefs.java
new file mode 100644
index 0000000..c9cb53a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/ConstructorRefs.java
@@ -0,0 +1,104 @@
+class MyTest {
+    MyTest() {
+    }
+
+    interface I {
+        MyTest m();
+    }
+
+    static void test(I s) {
+        s.m();
+    }
+
+    public static void main(String[] args) {
+        I s = MyTest::new;
+        s.m();
+        test(MyTest::new);
+    }
+}
+
+class MyTest1 {
+
+    MyTest1(Object o) {
+    }
+
+    MyTest1(Number n) {
+    }
+
+    interface I {
+        MyTest1 m(Object o);
+    }
+
+    static void test(I s, Object arg) {
+        s.m(arg);
+    }
+
+    public static void main(String[] args) {
+        I s = MyTest1::new;
+        s.m("");
+        test(MyTest1::new, "");
+    }
+}
+
+class MyTest2<X> {
+    MyTest2(X x) {
+    }
+
+    interface I<Z> {
+        MyTest2<Z> m(Z z);
+    }
+
+    static <Y> void test(I<Y> s, Y arg) {
+        s.m(arg);
+    }
+
+    public static void main(String[] args) {
+        I<String> s = MyTest2<String>::new;
+        s.m("");
+        test(MyTest2<String>::new, "");
+    }
+}
+
+class MyTest3<X> {
+
+    MyTest3(X x) { }
+
+    interface I<Z> {
+        MyTest3<Z> m(Z z);
+    }
+
+    static void test(I<Integer> s) {   }
+
+    public static void main(String[] args) {
+        <error descr="Incompatible types. Found: '<method reference>', required: 'MyTest3.I<java.lang.Integer>'">I<Integer> s = MyTest3<String>::new;</error>
+        test<error descr="'test(MyTest3.I<java.lang.Integer>)' in 'MyTest3' cannot be applied to '(<method reference>)'">(MyTest3<String>::new)</error>;
+    }
+}
+
+class MyTestInvalidQ {
+  class Super {}
+  
+  class ConstructorRefs extends Super {
+      void test() {
+          ConstructorRefs refs = new ConstructorRefs();
+          BlahBlah b0 = <error descr="Cannot find class refs">refs</error>::new;
+          BlahBlah blahBlah = <error descr="Cannot find class this">this</error>::new;
+          BlahBlah1 blahBlah1 = <error descr="Cannot find class super">super</error>::new;
+      }
+  }
+  
+  interface BlahBlah {
+      ConstructorRefs foo();
+  }
+
+  interface BlahBlah1 {
+      Super foo();
+  }
+
+  abstract static class A {
+    interface I {
+      A foo();
+    }
+    <error descr="Incompatible types. Found: '<method reference>', required: 'MyTestInvalidQ.A.I'">I i = A :: new;</error>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/ConstructorRefsInnerClasses.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/ConstructorRefsInnerClasses.java
new file mode 100644
index 0000000..4ed4642
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/ConstructorRefsInnerClasses.java
@@ -0,0 +1,151 @@
+class NonStaticInner {
+  class Inner {
+    Inner(NonStaticInner outer) {}
+    Inner() {}
+  }
+
+  interface I1 {
+    Inner m(NonStaticInner rec);
+  }
+
+  interface I2 {
+    Inner m();
+  }
+
+  static void call11(I1 s) {}
+  static void call12(I2 s) {}
+
+  static {
+    I1 i1 = NonStaticInner.Inner :: new;
+    call11(NonStaticInner.Inner :: new);
+
+    <error descr="Incompatible types. Found: '<method reference>', required: 'NonStaticInner.I2'">I2 i2 = NonStaticInner.Inner :: new;</error>
+    call12<error descr="'call12(NonStaticInner.I2)' in 'NonStaticInner' cannot be applied to '(<method reference>)'">(NonStaticInner.Inner :: new)</error>;
+  }
+}
+
+class StaticInner {
+
+  static class Inner {
+    Inner(StaticInner outer) {}
+    Inner() {}
+  }
+
+
+  interface I1 {
+    Inner m(StaticInner rec);
+  }
+
+  interface I2 {
+    Inner m();
+  }
+
+  static void call21(I1 s) {}
+  static void call22(I2 s) {}
+
+
+  static {
+      I1 i1 = StaticInner.Inner :: new;
+      call21(StaticInner.Inner :: new);
+
+      I2 i2 = StaticInner.Inner :: new;
+      call22(StaticInner.Inner :: new);
+  }
+}
+
+class StaticInner1 {
+    static class Inner {
+      Inner(StaticInner1 outer) {}
+      Inner() {}
+    }
+
+    interface I1 {
+      Inner _(StaticInner1 rec);
+    }
+
+    interface I2 {
+      Inner _();
+    }
+
+    static void call3(I1 s) {}
+    static void call3(I2 s) {}
+
+    static {
+      call3<error descr="Ambiguous method call: both 'StaticInner1.call3(I1)' and 'StaticInner1.call3(I2)' match">(StaticInner1.Inner :: new)</error>;
+    }
+}
+
+class StaticInner2 {
+
+  static class Inner {
+    Inner() {}
+  }
+
+
+  interface I1 {
+    Inner m(StaticInner2 rec);
+  }
+
+
+  static {
+     <error descr="Incompatible types. Found: '<method reference>', required: 'StaticInner2.I1'">I1 i1 = StaticInner2.Inner :: new;</error>
+  }
+
+  {
+     <error descr="Incompatible types. Found: '<method reference>', required: 'StaticInner2.I1'">I1 i1 = StaticInner2.Inner :: new;</error>
+  }
+}
+
+class NonStaticInner2 {
+
+  class Inner {
+    Inner() {}
+  }
+
+
+  interface I1 {
+    Inner m(NonStaticInner2 rec);
+  }
+
+
+  static {
+     I1 i1 = NonStaticInner2.Inner :: new;
+  }
+
+  {
+     I1 i1 = NonStaticInner2.Inner :: new;
+  }
+}
+
+class NonStaticInner3 {
+    class Foo {
+        Foo(Integer i) {}
+        Foo() {}
+    }
+
+    interface I1<X> {
+        X m(int i);
+    }
+
+    interface I2<X> {
+        X m();
+    }
+    
+    interface I3<X> {
+        X m(NonStaticInner3 rec, int i);
+    }
+
+    interface I4<X> {
+        X m(NonStaticInner3 rec);
+    }
+
+    {
+        I1<Foo> b1 = Foo::new;
+        I2<Foo> b2 = Foo::new;
+    }
+
+    {
+        I3<Foo> b1 = Foo::new;
+        I4<Foo> b2 = Foo::new;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/ConstructorWithoutParams.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/ConstructorWithoutParams.java
new file mode 100644
index 0000000..10448a8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/ConstructorWithoutParams.java
@@ -0,0 +1,31 @@
+import java.util.*;
+
+interface Factory<T> {
+    T create();
+}
+
+class LambdaTest {
+
+    public void testR() {
+        Map<String, Map<String, Counter>> map =
+                new ComputeMap<String, Map<String, Counter>>(() ->
+                        new ComputeMap<>(Counter::new));
+
+    }
+
+    public static class ComputeMap<K, V> extends HashMap<K, V> {
+        public ComputeMap(Factory<V> factory) {
+        }
+    }
+
+    public static class Counter {
+
+        public Counter() {
+            this(0);
+        }
+
+        public Counter(int count) {
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/CyclicInference.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/CyclicInference.java
new file mode 100644
index 0000000..56d02be
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/CyclicInference.java
@@ -0,0 +1,33 @@
+class MyTest<E> {
+   MyTest(E e) {
+   }
+
+   interface I<T> {
+       MyTest<T> _(T t);
+   }
+
+   static <Y> void bar(Y arg, I<Y> i) {
+       i._(arg);
+   }
+
+   static <Y> void bar(I<Y> i, Y arg) {
+       i._(arg);
+   }
+
+   static <Y> void bar(I<Y> i) {
+       i._(null);
+   }
+
+   public static void main(String[] args) {
+       I<String> i = MyTest::new;
+
+       bar("", MyTest<String>::new);
+       bar("", MyTest::new);
+
+       bar(MyTest<String>::new, "");
+       bar(MyTest::new, "");
+
+       bar(<error descr="Cyclic inference">MyTest::new</error>);
+       bar(<error descr="Cyclic inference">MyTest<String>::new</error>);
+   }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/DefaultConstructor.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/DefaultConstructor.java
new file mode 100644
index 0000000..2098a35
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/DefaultConstructor.java
@@ -0,0 +1,105 @@
+class DefaultConstructor {
+    
+    interface I1<R> {
+        R invoke();
+    }
+
+    interface I2<R, A> {
+        R invoke(A a);
+    }
+    
+    static class Outer {
+        class Inner {
+        }
+        
+        static void test1() {
+            I2<Inner, Outer> i2 = Inner :: new;
+            <error descr="Incompatible types. Found: '<method reference>', required: 'DefaultConstructor.I2<DefaultConstructor.Outer.Inner,java.lang.String>'">I2<Inner, String> i2str = Inner :: new;</error>
+        }
+        
+        void test2() {
+            I1<Inner> i1 = Inner :: new;
+            <error descr="Incompatible types. Found: '<method reference>', required: 'DefaultConstructor.I1<java.lang.Integer>'">I1<Integer> i1Int = Inner :: new;</error>
+            I2<Inner, Outer> i2 =  Inner :: new;
+        }
+    }
+    
+    static void test1() {
+        I2<Outer.Inner, Outer> i2 = Outer.Inner::new;
+        <error descr="Incompatible types. Found: '<method reference>', required: 'DefaultConstructor.I2<DefaultConstructor.Outer.Inner,java.lang.String>'">I2<Outer.Inner, String> i2str = Outer.Inner::new;</error>
+    }
+    
+    void test2() {
+        I2<Outer.Inner, Outer> i2 = Outer.Inner::new;
+        <error descr="Incompatible types. Found: '<method reference>', required: 'DefaultConstructor.I2<DefaultConstructor.Outer.Inner,java.lang.String>'">I2<Outer.Inner, String> i2str = Outer.Inner::new;</error>
+    }
+}
+
+class DefaultConstructor1 {
+
+    public void bar() {
+    }
+
+    {
+        Runnable b1 = DefaultConstructor1 :: new;
+    }
+}
+
+class DefaultConstructor2 {
+    interface I {
+        void foo(DefaultConstructor2 e);
+    }
+
+
+    void f() {
+        <error descr="Incompatible types. Found: '<method reference>', required: 'DefaultConstructor2.I'">I i1 = DefaultConstructor2 :: new;</error>
+        I i2 = <error descr="Cannot find class this">this</error>::new;
+    }
+}
+
+class DefaultConstructor3 {
+   public class Inner {}
+   public static class StaticInner {}
+   
+   static <error descr="Incompatible types. Found: '<method reference>', required: 'DefaultConstructor3.I'">I i = Inner::new;</error>
+   static I1 i1 = StaticInner::new;
+   interface I {
+     Inner foo();
+   }
+
+   interface I1 {
+     StaticInner foo();
+   }
+}
+
+class DefaultConstructor4 {
+   public class Inner {}
+   public static class StaticInner {}
+   
+   static I i = Inner::new;
+   static <error descr="Incompatible types. Found: '<method reference>', required: 'DefaultConstructor4.I1'">I1 i1 = StaticInner::new;</error>
+   interface I {
+     Inner foo(DefaultConstructor4 receiver);
+   }
+
+   interface I1 {
+     StaticInner foo(DefaultConstructor4 receiver);
+   }
+}
+
+class DefaultConstructor5 {
+    public class Inner {}
+
+    static void test() {
+        <error descr="Incompatible types. Found: '<method reference>', required: 'DefaultConstructor5.I'">I i = Inner::new;</error>
+    }
+
+    void test1() {
+        I i = Inner::new;
+    }
+
+    interface I {
+        DefaultConstructor5.Inner foo();
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/InferenceFromMethodReference.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/InferenceFromMethodReference.java
new file mode 100644
index 0000000..242cd74
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/InferenceFromMethodReference.java
@@ -0,0 +1,21 @@
+class Test {
+    static <U> Iterable<U> map(Mapper<? super String, ? extends U> mapper) {
+        return null;
+    }
+
+    static void test() {
+        Integer next = map(String::length).iterator().next();
+        Integer next1 = map(Test::length).iterator().next();
+    }
+
+    public static <T> T length(T s) {
+      return null;
+    }
+
+    public static <T> int length(String s) {
+      return 0;
+    }
+}
+interface Mapper<T, U> {
+    U map(T t);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/InferenceFromReturnType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/InferenceFromReturnType.java
new file mode 100644
index 0000000..d158b74
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/InferenceFromReturnType.java
@@ -0,0 +1,83 @@
+class MyTestDefaultConstructor {
+   static class SuperFoo<<warning descr="Type parameter 'X' is never used">X</warning>> { }
+
+   static class Foo<X extends Number> extends SuperFoo<X> {
+   }
+   
+   interface I1 {
+       SuperFoo<String> _();
+   }
+
+   interface I2 {
+       SuperFoo<Integer> _();
+   }
+   
+   interface I3 {
+       SuperFoo<Object> _();
+   }
+   
+   private static void <warning descr="Private method 'foo(MyTestDefaultConstructor.I1)' is never used">foo</warning>(I1 i) {System.out.println(i);}
+   private static void foo(I2 i) {System.out.println(i);}
+   private static void <warning descr="Private method 'foo(MyTestDefaultConstructor.I3)' is never used">foo</warning>(I3 i) {System.out.println(i);}
+
+   static {
+       foo(Foo::new);
+   }
+}
+
+class MyTestConstructor {
+   static class SuperFoo<<warning descr="Type parameter 'X' is never used">X</warning>> { }
+
+   static class Foo<X extends Number> extends SuperFoo<X> {
+     Foo(){}
+   }
+   
+   interface I1 {
+       SuperFoo<String> _();
+   }
+
+   interface I2 {
+       SuperFoo<Integer> _();
+   }
+   
+   interface I3 {
+       SuperFoo<Object> _();
+   }
+   
+   private static void <warning descr="Private method 'foo(MyTestConstructor.I1)' is never used">foo</warning>(I1 i) {System.out.println(i);}
+   private static void foo(I2 i) {System.out.println(i);}
+   private static void <warning descr="Private method 'foo(MyTestConstructor.I3)' is never used">foo</warning>(I3 i) {System.out.println(i);}
+
+   static {
+       foo(Foo::new);
+   }
+}
+
+class MyTestMethod {
+    static class SuperFoo<<warning descr="Type parameter 'X' is never used">X</warning>> { }
+
+    static class Foo<X extends Number> extends SuperFoo<X> {
+    }
+    
+    interface I1 {
+        SuperFoo<String> _();
+    }
+
+    interface I2 {
+        SuperFoo<Integer> _();
+    }
+    
+    interface I3 {
+        SuperFoo<Object> _();
+    }
+    
+    static <X extends Number> Foo<X> m() { return null; }
+    
+    private static void <warning descr="Private method 'foo(MyTestMethod.I1)' is never used">foo</warning>(I1 i) {System.out.println(i);}
+    private static void foo(I2 i) {System.out.println(i);}
+    private static void <warning descr="Private method 'foo(MyTestMethod.I3)' is never used">foo</warning>(I3 i) {System.out.println(i);}
+
+    static {
+       foo(MyTestMethod::m);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/MethodRefMisc.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/MethodRefMisc.java
new file mode 100644
index 0000000..73188f2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/MethodRefMisc.java
@@ -0,0 +1,56 @@
+class MyTest {
+
+    interface I {
+        void m1(int i);
+    }
+
+    static class A {
+        void m(int i) {}
+    }
+
+    static class B extends A {
+        void m(int i) {
+            I mh = super::m;
+        }
+    }
+
+    public static void main(String[] args) {
+        new B().m(10);
+    }
+}
+
+class MyTestWithBoxing {
+    interface I {
+        void m1(Integer i);
+    }
+
+    static class A {
+        void m(int i) {}
+    }
+
+    static class B extends A {
+        {
+            I s = super::m;
+        }
+        
+        void m(int i) {
+          super.m(i);
+        }
+    }
+}
+
+class MyTest1 {
+
+    interface I {
+        void m();
+    }
+
+    void call(I s) {}
+
+    I i = <error descr="Cannot resolve symbol 'NonExistentType'">NonExistentType</error>::m;
+
+    {
+        call(<error descr="Cannot resolve symbol 'NonExistentType'">NonExistentType</error>::m);
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/MethodRefMisc1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/MethodRefMisc1.java
new file mode 100644
index 0000000..ece7a65
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/MethodRefMisc1.java
@@ -0,0 +1,197 @@
+import java.util.*;
+class MyTest {
+
+   static void m(int i) {//here 
+   }
+   static void m(Integer i) {}
+
+   interface I {
+       void m(int x);
+   }
+
+   static void call(I s) { s.m(42); }
+
+   public static void main(String[] args) {
+       I s = MyTest::m;
+       s.m(42);
+       call(MyTest::m);
+   }
+}
+
+class MyTest1 {
+
+    static void m(Integer i) { }
+
+    interface I1 {
+        void m(int x);
+    }
+
+    interface I2 {
+        void m(Integer x);
+    }
+
+    static void call(int i, I1 s) {
+      
+    }
+    static void call(int i, I2 s) {
+      //here
+    }
+
+    public static void main(String[] args) {
+        call(1, MyTest1::m);
+    }
+}
+
+class MyTest2 {
+
+    static void m(Integer i) { }
+
+    interface I {
+        void m(int x);
+    }
+
+    static void call(int i, I s) {   }
+    static void call(Integer i, I s) {   }
+
+    static void test() {
+        call<error descr="Ambiguous method call: both 'MyTest2.call(int, I)' and 'MyTest2.call(Integer, I)' match">(1, MyTest2::m)</error>; //ambiguous
+    }
+}
+
+class MyTest3 {
+    interface I {
+       void m();
+    }
+
+    MyTest3() {}
+
+   static void m() { }
+
+   public static void main(String[] args) {
+      I s = new MyTest3()::m;
+   }
+}
+
+class MyTest4 {
+
+    interface I {
+        MyTest4 m(List<Integer> l1, List<Integer> l2);
+    }
+
+    MyTest4 meth(List<Integer>... lli) { return null; }
+    MyTest4(List<Integer>... lli) { }
+
+    I s1 = this::meth;
+    I s2 = MyTest4::new;
+}
+
+class MyTest5 {
+    interface I_void<X> {
+        void m();
+    }
+    
+    interface I_Void<X> {
+        void m();
+    }
+    
+    static void m_void() {}
+    
+    static Void _Void() {return null; }
+    
+    public static void main(String[] args) {
+        I_void s1 = MyTest5::m_void;
+        s1.m();
+        I_Void s2 = MyTest5::m_void;
+        s2.m();
+        I_void s3 = MyTest5::_Void;
+        s3.m();
+        I_Void s4 = MyTest5::_Void;
+        s4.m();
+    }
+}
+class MyTest6 {
+    interface I {
+        MyTest6 invoke();
+    }
+    
+    MyTest6() {
+    }
+    
+    static MyTest6 m() {
+        return null;
+    }
+
+    public static void main(String[] args) {
+        I I1 = ((I)() -> {return null; })::invoke;
+        I1.invoke();
+        I I2 = ((I)MyTest6::new)::invoke;
+        I1.invoke();
+        I I3 = ((I)MyTest6::m)::invoke;
+        I1.invoke();
+    }
+}
+
+class MyTest7{
+    
+    interface I<R> {
+        R invoke();
+    }
+    
+    @interface A { }
+
+    static abstract class AC { }
+    
+    enum E { }
+    
+    void test() {
+        <error descr="Incompatible types. Found: '<method reference>', required: 'MyTest7.I'">I s1 = A::new;</error>
+        <error descr="Incompatible types. Found: '<method reference>', required: 'MyTest7.I'">I s2 = I::new;</error>
+        <error descr="Incompatible types. Found: '<method reference>', required: 'MyTest7.I'">I s3 = AC::new;</error>
+        <error descr="Incompatible types. Found: '<method reference>', required: 'MyTest7.I'">I s4 = E::new;</error>
+    }
+}
+
+class MyTest8{
+
+    static class Sup {} 
+
+
+    static class Sub extends Sup {
+
+        interface I { Sup m(Sup x, String str); }
+
+        class Inner extends Sup {
+            Inner(String val) { }
+        }
+
+        void test() {
+            <error descr="Incompatible types. Found: '<method reference>', required: 'MyTest8.Sub.I'">I var = Sub.Inner::new;</error>;
+        }
+    }
+}
+
+class MyTest9 {
+    
+    static class SuperFoo<X> { }
+
+    static class Foo<X extends Number> extends SuperFoo<X> { }
+    
+    interface I1 {
+        void m();
+    }
+
+    interface I2 {
+        void m();
+    }
+    
+    static <X extends Number> Foo<X> m() { return null; }
+    
+    static void g1(I1 s) { }
+    static void g2(I1 s) { }
+    static void g2(I2 s) { }
+
+    void test() {
+        g1(MyTest9::m);
+        g2<error descr="Ambiguous method call: both 'MyTest9.g2(I1)' and 'MyTest9.g2(I2)' match">(MyTest9::m)</error>;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/MethodReferenceReceiver.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/MethodReferenceReceiver.java
new file mode 100644
index 0000000..9e85224
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/MethodReferenceReceiver.java
@@ -0,0 +1,13 @@
+class MyTest {
+
+    interface I {
+       void _(MyTest receiver, Integer i);
+    }
+
+    void m(Integer i) {}
+
+    public static void main(String[] args) {
+        I i = MyTest :: m;
+        i._(new MyTest(), 1);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/MethodTypeParamsInference.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/MethodTypeParamsInference.java
new file mode 100644
index 0000000..11c284f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/MethodTypeParamsInference.java
@@ -0,0 +1,52 @@
+class MyTest {
+    interface I1 {
+       void m(String s);
+    }
+
+    interface I2 {
+       void m(Integer s);
+    }
+
+    interface I3 {
+       void m(Object o);
+    }
+
+    static <T extends Number> void m(T p) {}
+
+    static <T1> void m1(T1 fx) { }
+ 
+    static void foo(I1 i) {}
+    static void foo(I2 i) {} //m
+    static void foo(I3 i) {}
+
+    static {
+         foo(MyTest::m);
+         foo<error descr="Ambiguous method call: both 'MyTest.foo(I1)' and 'MyTest.foo(I2)' match">(MyTest::m1)</error>;
+    }
+}
+
+
+class MyTest1 {
+    interface I1 {
+       void m(Integer s);
+    }
+
+    interface I2 {
+       void m(Integer s);
+    }
+
+    static <T extends Number> void m(T p) { }
+    static <T> void m1(T p) { }
+ 
+    static void foo1(I1 i) { }
+    static void foo2(I1 i) { }
+    static void foo2(I2 i) { }
+
+    static {
+        foo1(MyTest1::m);
+        foo2<error descr="Ambiguous method call: both 'MyTest1.foo2(I1)' and 'MyTest1.foo2(I2)' match">(MyTest1::m)</error>;
+
+        foo1(MyTest1::m1);
+        foo2<error descr="Ambiguous method call: both 'MyTest1.foo2(I1)' and 'MyTest1.foo2(I2)' match">(MyTest1::m1)</error>;  
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/QualifierTypeArgs.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/QualifierTypeArgs.java
new file mode 100644
index 0000000..7c1e04f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/QualifierTypeArgs.java
@@ -0,0 +1,38 @@
+import java.util.*;
+
+class MyTest {
+  interface I {
+    String m(Foo<String> f);
+  }
+
+  class Foo<X> {
+    String foo() {
+      return null;
+    }
+
+    {
+      I i = Foo<String> :: foo;
+      <error descr="Incompatible types. Found: '<method reference>', required: 'MyTest.I'">I i1 = Foo<Integer> :: foo;</error>
+    }
+  }
+}
+
+class MyTest1 {
+    interface I {
+       String m(Foo f);
+    }
+
+    static class Foo<X> {
+       String foo() { return null; }
+
+       static void test() {
+          I i = Foo::foo;
+       }
+    }
+}
+
+class MyTest2 {
+  public static void main(String[] args) {
+    Arrays.sort(new String[0], String.CASE_INSENSITIVE_ORDER::compare);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/RawQualifier.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/RawQualifier.java
new file mode 100644
index 0000000..ee1ad6c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/RawQualifier.java
@@ -0,0 +1,44 @@
+class MyTest {
+    
+    static class Foo<T> {
+        T m() { 
+          return null; 
+        }
+    }
+    
+    interface I {
+        Integer m(Foo<Integer> f);
+    }
+
+    public static void main(String[] args) {
+        I i = Foo::m;
+    }
+}
+
+class MyTest1 {
+    
+    interface I1 {
+       void m(String s);
+    }
+
+    interface I2 {
+       void m(Integer i);
+    }
+    
+    interface I3 {
+       void m(Object o);
+    }
+
+    static class Foo<T extends Number> {
+        Foo(T t) {}
+    }
+
+ 
+    static void foo(I1 i) {}
+    static void foo(I2 i) {}
+    static void foo(I3 i) {}
+
+    static {
+        foo(Foo::new);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/ReferenceParameters.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/ReferenceParameters.java
new file mode 100644
index 0000000..b3705579
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/ReferenceParameters.java
@@ -0,0 +1,9 @@
+class MyTest {
+    interface I<X> {
+      X _();
+    }
+    static <T> T bar() {return null;}
+    static {
+      I i = MyTest::<String>bar;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/ResolveConflicts.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/ResolveConflicts.java
new file mode 100644
index 0000000..681e207
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/ResolveConflicts.java
@@ -0,0 +1,12 @@
+interface Func<TIn, TOut>{
+    TOut run(TIn in);
+}
+
+
+class Main {
+
+    public static void main(final String[] args) {
+        Func<Integer, String> func =  Integer::toString;
+        System.out.println(func.run(6));
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/ReturnTypeSpecific.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/ReturnTypeSpecific.java
new file mode 100644
index 0000000..d714ffd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/ReturnTypeSpecific.java
@@ -0,0 +1,109 @@
+class MyTest {
+    
+    static class Foo<T> {
+        T m() { return null; };
+    }
+    
+    interface I1 {
+        Foo<Object> m(Foo<String> f);
+    }
+
+    interface I2 {
+        Integer m(Foo<Integer> f);
+    }
+    
+    interface I3 {
+        Object m(Foo<Integer> f);
+    }
+    
+    private static void <warning descr="Private method 'foo(MyTest.I1)' is never used">foo</warning>(I1 i) {
+      System.out.println(i);
+    }
+
+    private static void foo(I2 i) {  
+      System.out.println(i);
+    }
+
+    private static void <warning descr="Private method 'foo(MyTest.I3)' is never used">foo</warning>(I3 i) {
+      System.out.println(i);
+    }
+
+    public static void main(String[] args) {
+        foo(Foo::m);
+    }
+}
+
+class MyTest1 {
+    
+    interface I1 {
+       Foo<?> m(String s);
+    }
+
+
+    interface I2 {
+        Foo<?> m(Integer i);
+    }
+    
+    interface I3 {
+        Foo<Number> m(Integer i);
+    }
+
+    static class Foo<T extends Number> {
+        Foo(T t) {
+          System.out.println(t);
+        }
+    }
+
+    private static void <warning descr="Private method 'm(MyTest1.I1)' is never used">m</warning>(I1 i) {
+        System.out.println(i);
+    }
+
+    private static void m(I2 i) {
+        System.out.println(i);
+    }
+
+    private static void <warning descr="Private method 'm(MyTest1.I3)' is never used">m</warning>(I3 i) {
+        System.out.println(i);
+    }
+
+    public static void main(String[] args) {
+        m(Foo::new);
+    }
+}
+class MyTest2 {
+    
+    interface I1 {
+       Foo<?> m(String s);
+    }
+
+
+    interface I2 {
+        Foo<Integer> m(Integer i);
+    }
+    
+    interface I3 {
+        Foo<Number> m(Integer i);
+    }
+
+    static class Foo<T extends Number> {
+        Foo(T t) {
+          System.out.println(t);
+        }
+    }
+
+    private static void <warning descr="Private method 'm(MyTest2.I1)' is never used">m</warning>(I1 i) {
+        System.out.println(i);
+    }
+
+    private static void m(I2 i) {
+        System.out.println(i);
+    }
+
+    private static void <warning descr="Private method 'm(MyTest2.I3)' is never used">m</warning>(I3 i) {
+        System.out.println(i);
+    }
+
+    public static void main(String[] args) {
+        m(Foo::new);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/SOE.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/SOE.java
new file mode 100644
index 0000000..71cb394
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/SOE.java
@@ -0,0 +1,8 @@
+import java.util.*;
+
+class LambdaTest {
+    public void testR() {
+        <error descr="Incompatible types. Found: 'java.lang.String', required: '<method reference>'">new ArrayList<String>() :: size = ""</error>; 
+
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/StaticProblems.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/StaticProblems.java
new file mode 100644
index 0000000..ae77336
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/StaticProblems.java
@@ -0,0 +1,124 @@
+class MyTest {
+    interface I {
+       String m(Foo f);
+    }
+
+    static class Foo<X> {
+       String foo() { return null; }
+
+       Foo<X> getFoo() { return this; }
+
+       static void test() {
+          I i1 = Foo.<error descr="Non-static method 'getFoo()' cannot be referenced from a static context">getFoo</error>()::foo;
+          I i2 = <error descr="'MyTest.Foo.this' cannot be referenced from a static context">this</error>::foo;
+          I i3 = Foo :: foo;
+       }
+    }
+}
+class MyTest1 {
+    void m1(MyTest1 rec, String x) { }
+    void m1(String x) { }
+
+    static void m2(String x) { }
+    static void m2(MyTest1 rec, String x) {}
+
+    void m3(MyTest1 rec, String x) { }
+    static void m3(String x) { }
+
+    void m4(String x) { }
+    static void m4(MyTest1 rec, String x) { }
+
+    interface I1 {
+        void m(String x);
+    }
+
+    interface I2 {
+        void m(MyTest1 rec, String x);
+    }
+
+    static void call1(I1 s) {   }
+
+    static void call2(I2 s) {   }
+
+    static void test1() {
+        <error descr="Incompatible types. Found: '<method reference>', required: 'MyTest1.I1'">I1 s1 = MyTest1 ::m1;</error>
+        call1<error descr="'call1(MyTest1.I1)' in 'MyTest1' cannot be applied to '(<method reference>)'">(MyTest1::m1)</error>;
+        I1 s2 = MyTest1  :: m2;
+        call1(MyTest1::m2);
+        I1 s3 = MyTest1::m3;
+        call1(MyTest1::m3);
+        <error descr="Incompatible types. Found: '<method reference>', required: 'MyTest1.I1'">I1 s4 = MyTest1::m4;</error>
+        call1<error descr="'call1(MyTest1.I1)' in 'MyTest1' cannot be applied to '(<method reference>)'">(MyTest1::m4)</error>;
+    }
+
+    static void test2() {
+        I2 s1 = MyTest1 :: m1;
+        call2(MyTest1::m1);
+        I2 s2 = MyTest1 :: m2;
+        call2(MyTest1::m2);
+
+        <error descr="Incompatible types. Found: '<method reference>', required: 'MyTest1.I2'">I2 s3 = MyTest1 :: m3;</error>
+        call2<error descr="'call2(MyTest1.I2)' in 'MyTest1' cannot be applied to '(<method reference>)'">(MyTest1::m3)</error>;
+        <error descr="Incompatible types. Found: '<method reference>', required: 'MyTest1.I2'">I2 s4 = MyTest1 ::m4;</error>
+        call2<error descr="'call2(MyTest1.I2)' in 'MyTest1' cannot be applied to '(<method reference>)'">(MyTest1::m4)</error>;
+    }
+}
+
+class MyTest2 {
+    void m1(String x) { }
+    void m1(MyTest2 rec, String x) { }
+
+    static void m2(MyTest2 rec, String x) {}
+    static void m2(String x) { }
+
+    static void m3(String x) { }
+    void m3(MyTest2 rec, String x) { }
+
+    static void m4(MyTest2 rec, String x) { }
+    void m4(String x) { }
+
+    interface I1 {
+        void m(String x);
+    }
+
+    interface I2 {
+        void m(MyTest2 rec, String x);
+    }
+
+    static void call1(I1 s) {   }
+
+    static void call2(I2 s) {   }
+
+    static void test1() {
+        <error descr="Incompatible types. Found: '<method reference>', required: 'MyTest2.I1'">I1 s1 = MyTest2 ::m1;</error>
+        call1<error descr="'call1(MyTest2.I1)' in 'MyTest2' cannot be applied to '(<method reference>)'">(MyTest2::m1)</error>;
+        I1 s2 = MyTest2  :: m2;
+        call1(MyTest2::m2);
+        I1 s3 = MyTest2::m3;
+        call1(MyTest2::m3);
+        <error descr="Incompatible types. Found: '<method reference>', required: 'MyTest2.I1'">I1 s4 = MyTest2::m4;</error>
+        call1<error descr="'call1(MyTest2.I1)' in 'MyTest2' cannot be applied to '(<method reference>)'">(MyTest2::m4)</error>;
+    }
+
+    static void test2() {
+        I2 s1 = MyTest2 :: m1;
+        call2(MyTest2::m1);
+        I2 s2 = MyTest2 :: m2;
+        call2(MyTest2::m2);
+
+        <error descr="Incompatible types. Found: '<method reference>', required: 'MyTest2.I2'">I2 s3 = MyTest2 :: m3;</error>
+        call2<error descr="'call2(MyTest2.I2)' in 'MyTest2' cannot be applied to '(<method reference>)'">(MyTest2::m3)</error>;
+        <error descr="Incompatible types. Found: '<method reference>', required: 'MyTest2.I2'">I2 s4 = MyTest2 ::m4;</error>
+        call2<error descr="'call2(MyTest2.I2)' in 'MyTest2' cannot be applied to '(<method reference>)'">(MyTest2::m4)</error>;
+    }
+
+    static void call3(I1 s) {}
+    static void call3(I2 s) {}
+    static {
+          call3(MyTest2::m1);
+          call3<error descr="Ambiguous method call: both 'MyTest2.call3(I1)' and 'MyTest2.call3(I2)' match">(MyTest2::m2)</error>;
+          call3(MyTest2::m3);
+          call3<error descr="Cannot resolve method 'call3(<method reference>)'">(MyTest2::m4)</error>;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/TypeArgumentsOnMethodRefs.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/TypeArgumentsOnMethodRefs.java
new file mode 100644
index 0000000..1fe00da
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/TypeArgumentsOnMethodRefs.java
@@ -0,0 +1,17 @@
+class Test<T> {
+  void foo(String p) {}
+  <U> void foo1(String p) {}
+  static void foo2(String p) {}
+  static <U> void foo3(String p) {}
+  void test() {
+    Test test = new Test<String>();
+    BlahBlah<String> blahBlah = test::<String>foo;
+    BlahBlah<String> blahBlah1 = test::<String>foo1;
+    BlahBlah<String> blahBlah2 = test::<String>foo2;
+    BlahBlah<String> blahBlah3 = test::<String>foo3;
+  }
+}
+
+interface BlahBlah<T> {
+  void bar(T i);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/ValidContext.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/ValidContext.java
new file mode 100644
index 0000000..e36aefd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/ValidContext.java
@@ -0,0 +1,17 @@
+public class Test {
+  {
+    if (<error descr="Method reference expression is not expected here">Test::length instanceof String</error>) {
+    }
+    bar(Test::length);
+  }
+
+  public static Integer length(String s) {
+    return s.length();
+  }
+  
+  public static void bar(Bar bar) {}
+  
+  interface Bar {
+    Integer _(String s);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/Varargs.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/Varargs.java
new file mode 100644
index 0000000..24a51a2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/Varargs.java
@@ -0,0 +1,91 @@
+class MyTest1 {
+    interface I {
+        void m(int i1, int i2);
+    }
+
+    static void m1(int i1, int i2) { }
+    static void m1(Integer i1, int i2) { }
+    static void m1(int i1, Integer i2) { }
+    static void m1(Integer i1, Integer i2) {}
+    static void m1(Integer... is) { }
+    
+    static void m2(int... is) { }
+    static void m2(double... ds) {}
+
+    static void m3(int... is) { }
+    static void m3(Object... ds) {}
+
+    public static void main(String[] args) {
+        I i1 = MyTest1::m1;
+        i1.m(42,42);
+
+        I i2 = MyTest1 :: m2;
+        i2.m(42,42);
+
+        <error descr="Incompatible types. Found: '<method reference>', required: 'MyTest1.I'">I i3 = MyTest1 :: m3;</error>  
+    }
+}
+
+class MyTest {
+
+    interface I1 {
+        void m(int i);
+    }
+
+    interface I2 {
+        void m(MyTest t, int i);
+    }
+
+    static void static_1(Integer i) {}
+    static void static_2(Integer i1, Integer i2) {}
+    static void static_3(String s) {}
+    static void static_4(String... ss) {}
+
+    void _1(Integer i) {}
+    void _2(Integer i1, Integer i2) {}
+    void _3(String s) {}
+    void _4(String... ss) {}
+
+    static {
+        I1 i1 = MyTest::static_1;
+        <error descr="Incompatible types. Found: '<method reference>', required: 'MyTest.I1'">I1 i2 = MyTest::static_2;</error>
+        <error descr="Incompatible types. Found: '<method reference>', required: 'MyTest.I1'">I1 i3 = MyTest::static_3;</error>
+        <error descr="Incompatible types. Found: '<method reference>', required: 'MyTest.I1'">I1 i4 = MyTest::static_4;</error>
+    }
+
+
+    {
+        <error descr="Incompatible types. Found: '<method reference>', required: 'MyTest.I1'">I1 i_1 = MyTest::_1;</error>
+        <error descr="Incompatible types. Found: '<method reference>', required: 'MyTest.I1'">I1 i_2 = MyTest::_2;</error>
+        <error descr="Incompatible types. Found: '<method reference>', required: 'MyTest.I1'">I1 i_3 = MyTest::_3;</error>
+        <error descr="Incompatible types. Found: '<method reference>', required: 'MyTest.I1'">I1 i_4 = MyTest::_4;</error>
+
+        I1 i1 = this::_1;
+        <error descr="Incompatible types. Found: '<method reference>', required: 'MyTest.I1'">I1 i2 = this::_2;</error>
+        <error descr="Incompatible types. Found: '<method reference>', required: 'MyTest.I1'">I1 i3 = this::_3;</error>
+        <error descr="Incompatible types. Found: '<method reference>', required: 'MyTest.I1'">I1 i4 = this::_4;</error>
+
+        <error descr="Incompatible types. Found: '<method reference>', required: 'MyTest.I2'">I2 i21 = MyTest::m1;</error>
+        <error descr="Incompatible types. Found: '<method reference>', required: 'MyTest.I2'">I2 i22 = MyTest::m2;</error>
+        <error descr="Incompatible types. Found: '<method reference>', required: 'MyTest.I2'">I2 i23 = MyTest::m3;</error>
+        <error descr="Incompatible types. Found: '<method reference>', required: 'MyTest.I2'">I2 i24 = MyTest::m4;</error>
+    }
+}
+
+class MyTest2 {
+
+    interface IBool { void m(boolean[] a); }
+    interface IInt { void m(int[] a); }
+    interface IDbl { void m(double[] a); }
+    interface IObj { void m(Object[] a); }
+
+    static void foo(Object... vi) {}
+
+    static {
+        IBool iBool = MyTest2::foo;
+        IInt iInt = MyTest2::foo;
+        IDbl iDbl = MyTest2::foo;
+        IObj iObj = MyTest2::foo;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/Varargs1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/Varargs1.java
new file mode 100644
index 0000000..472899b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/Varargs1.java
@@ -0,0 +1,22 @@
+class Test {
+    public static void main(String... args) {}
+    void test() {
+        Foo foo = Test::main;
+    }
+}
+
+interface Foo {
+    void bar();
+}
+
+class Test1 {
+    public static void main(String... args) {}
+
+    void test() {
+        Foo1 foo = Test1::main;
+    }
+}
+
+interface Foo1 {
+    void bar(String... s);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/VarargsInReceiverPosition.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/VarargsInReceiverPosition.java
new file mode 100644
index 0000000..f6c1e3f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/VarargsInReceiverPosition.java
@@ -0,0 +1,28 @@
+import java.util.*;
+
+class Test {
+    void test() {
+        Comparator<Test> r2 = Test::yyy;
+        <error descr="Incompatible types. Found: '<method reference>', required: 'Comparator1<Test>'">Comparator1<Test> c1 = Test::yyy;</error>
+        <error descr="Incompatible types. Found: '<method reference>', required: 'Comparator1<Test>'">Comparator1<Test> c2 = Test::xxx;</error>
+    }
+    int yyy(Test... p) { return 1; }
+    int xxx(Test t) {return 42;}
+}
+
+interface Comparator1<T> {
+    int compare(T... o1);
+}
+
+
+class Test1 {
+    void test() {
+        Bar2 bar2 = Test1::yyy;
+    }
+
+    void yyy(Test1... p) {}
+
+    interface Bar2 {
+      public void xxx(Test1 p, Test1... ps);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/Wildcards.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/Wildcards.java
new file mode 100644
index 0000000..e0c099f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/Wildcards.java
@@ -0,0 +1,20 @@
+import java.util.*;
+
+class MyTest2{
+    {
+        Comparator<? super String> comparator = String::compareToIgnoreCase;
+    }
+}
+
+class Test {
+    void test() {
+       Foo2<? extends Bar2> foo2 = Bar2::xxx;
+    }
+}
+
+interface Foo2<T> {
+    void bar(T i, T j);
+}
+interface Bar2 {
+    public void xxx(Bar2 p) default {}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/findUsages/ConstructorUsages.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/findUsages/ConstructorUsages.java
new file mode 100644
index 0000000..42e0f1c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/findUsages/ConstructorUsages.java
@@ -0,0 +1,11 @@
+class ConstructorUsages {
+  ConstructorUsages() {
+  }
+
+  void foo() {
+    BlahBlah<ConstructorUsages> blahBlah = ConstructorUsages::new;
+  }
+}
+interface BlahBlah<T> {
+        T foo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/params/FormalParams.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/params/FormalParams.java
new file mode 100644
index 0000000..b96f575
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/params/FormalParams.java
@@ -0,0 +1,37 @@
+interface I {
+  void m(int i);
+}
+
+class Foo {
+  I ii = (@<error descr="'@Override' not applicable to type use">Override</error> final int k)->{
+    int j = k;
+  };
+  I ii1 = (final int k)->{
+    <error descr="Incompatible types. Found: 'int', required: 'java.lang.String'">String s = k;</error>
+  };
+
+  void bazz() {
+    bar((<error descr="Incompatible parameter types in lambda expression">String s</error>) -> {
+      System.out.println(s);});
+    bar((int i) -> {System.out.println(i);});
+  } 
+  void bar(I i){}
+}
+
+class ReturnTypeCompatibility {
+
+    interface I1<L> {
+        L m(L x);
+    }
+
+    static <P> void call(I1<P> i2) {
+        i2.m(null);
+    }
+
+    public static void main(String[] args) {
+        call((String i)->{ return i;});
+        call(<error descr="Cyclic inference">i->{ return i;}</error>);
+        call(<error descr="Cyclic inference">i->""</error>);
+        call<error descr="'call(ReturnTypeCompatibility.I1<java.lang.Integer>)' in 'ReturnTypeCompatibility' cannot be applied to '(<lambda expression>)'">((int i)->{ return i;})</error>;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/params/IncompatibleTypes.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/params/IncompatibleTypes.java
new file mode 100644
index 0000000..f54f632
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/params/IncompatibleTypes.java
@@ -0,0 +1,7 @@
+class XXX {
+  Runnable bar() {
+    return <error descr="Incompatible parameter types in lambda expression">(o)->{
+      System.out.println();
+    }</error>;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/params/InferredParams.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/params/InferredParams.java
new file mode 100644
index 0000000..cb22cf9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/params/InferredParams.java
@@ -0,0 +1,74 @@
+import java.lang.Integer;
+
+interface I {
+  void m(int i);
+}
+
+interface A<B> {
+  void foo(B b);
+}
+
+class Foo {
+  I ii = (final <error descr="Cannot resolve symbol 'k'">k</error><error descr="Identifier expected">)</error>->{};
+  I ii1 = (k)->{
+    int i = k;
+    <error descr="Incompatible types. Found: 'int', required: 'java.lang.String'">String s = k;</error>
+  };
+  
+  A<String> a = (ab) -> {
+    String s = ab;
+    <error descr="Incompatible types. Found: 'java.lang.String', required: 'int'">int i = ab;</error>
+  };
+
+  {
+    A<String> a1;
+    a1 = (ab)->{
+      String s = ab;
+      <error descr="Incompatible types. Found: 'java.lang.String', required: 'int'">int i = ab;</error>
+    };
+  }
+  
+  A<Integer> bazz() {
+    bar((o) -> {
+      String s = o;
+      <error descr="Incompatible types. Found: 'java.lang.String', required: 'int'">int i = o;</error>
+    });
+    return (i) -> {
+      Integer k = i;
+      int n = i;
+      <error descr="Incompatible types. Found: 'java.lang.Integer', required: 'java.lang.String'">String s = i;</error>
+    };
+  }
+
+  void bar(A<String> a){}
+}
+
+class CastInference {
+  public interface I1<X> {
+    X m();
+  }
+  public interface I2<X> {
+    X m();
+  }
+  public static <X> void foo(I1<X> s) {}
+  public static <X> void foo(I2<X> s) {}
+
+  public static void main(String[] args) {
+    foo((I1<Integer>)() -> 42);
+    I1<Integer> i1 = (I1<Integer>)() -> 42;
+  }
+}
+
+class WildcardBoundsUsage {
+  interface I<X> {
+    boolean foo(X x);
+  }
+
+  public I<Character> bar(I<? super Character> predicate) {
+    return null;
+  }
+
+  {
+    I<Character> i = bar(c -> c.compareTo('x') < 0);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/params/MethodApplicability.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/params/MethodApplicability.java
new file mode 100644
index 0000000..cd82c71
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/params/MethodApplicability.java
@@ -0,0 +1,68 @@
+interface I {
+  void m(int i);
+}
+interface J {
+  void mm(int i, int j);
+}
+interface K {
+  void k(String m);
+}
+
+class Foo {
+  void foo(I i){}
+  void foo(J j){}
+  void foo(K k){}
+
+  void bar() {
+    foo<error descr="Ambiguous method call: both 'Foo.foo(I)' and 'Foo.foo(K)' match">((p) -> {
+      System.out.println<error descr="Cannot resolve method 'println(<lambda parameter>)'">(p)</error>;
+    })</error>;
+
+    foo((p, k) -> {
+      System.out.println(p);
+    });
+
+    foo((String s) ->{
+      System.out.println(s);
+    });
+
+    <error descr="Cannot resolve method 'foo(<lambda expression>)'">foo</error>((String p, String k) -> {
+      System.out.println(p);
+    });
+  }
+}
+
+class WithTypeParams {
+  interface I<T> {
+    void m(T t);
+  }
+
+  interface J<K, V> {
+    void n(K k, V v);
+  }
+
+  class Foo {
+    void foo(I<String> i){}
+    void foo(J<String, String> j){}
+    
+    void bar() {
+      foo((p) -> {
+        System.out.println(p);
+      });
+  
+      foo((p, k) -> {
+        System.out.println(p);
+      });
+  
+      foo((String s) ->{
+        System.out.println(s);
+      });
+  
+      foo((String p, String k) -> {
+        System.out.println(p);
+      });
+  
+      <error descr="Cannot resolve method 'foo(<lambda expression>)'">foo</error>((int k) -> {System.out.println(k);});
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/params/Raw.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/params/Raw.java
new file mode 100644
index 0000000..e99747f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/params/Raw.java
@@ -0,0 +1,7 @@
+class Test {
+  {
+    <error descr="Incompatible types. Found: '<lambda expression>', required: 'java.lang.Comparable'">Comparable c = (String o)->{
+      return 0;
+    };</error>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lossyEncoding/MultipleRanges.xml b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lossyEncoding/MultipleRanges.xml
new file mode 100644
index 0000000..e6ac788
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lossyEncoding/MultipleRanges.xml
@@ -0,0 +1,5 @@
+<?xml encoding="<caret><selection>utf-8</selection>" ?>
+<xml>
+  <warning descr="Unsupported characters for the charset 'US-ASCII'">абвг</warning> 132726435127
+  <warning descr="Unsupported characters for the charset 'US-ASCII'">фигня</warning>
+</xml>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lossyEncoding/NativeEncoding.properties b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lossyEncoding/NativeEncoding.properties
new file mode 100644
index 0000000..80ee080
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lossyEncoding/NativeEncoding.properties
@@ -0,0 +1,14 @@
+# works with IDEA 9.0
+foo=bar \"{0}\"
+longline=abc def ghiabc def ghiabc def ghiabc def ghiabc def ghiabc \
+  def ghiabc def ghiabc def ghi\
+  abc def ghi
+
+# Warnings "Unsupported characters for charset 'US-ASCII' in IDEA 9.0
+# with escaped and transparently converted non-ASCII characters:
+
+# key with non-ASCII characters (yes, not beautiful :)
+\u00e4\u00f6\u00fc=asc
+
+# value with non-ASCII characters
+bar=\u00e4\u00f6\u00fc
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lossyEncoding/Simple.xml b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lossyEncoding/Simple.xml
new file mode 100644
index 0000000..4419f04
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lossyEncoding/Simple.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="<selection>UTF-8</selection><caret>"?>
+<x>
+   хихи
+</x>
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lossyEncoding/Text.txt b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lossyEncoding/Text.txt
new file mode 100644
index 0000000..8f7b7c2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lossyEncoding/Text.txt
@@ -0,0 +1 @@
+abcd<caret>
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/accessStaticViaInstance/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/accessStaticViaInstance/after1.java
new file mode 100644
index 0000000..a1b9f99
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/accessStaticViaInstance/after1.java
@@ -0,0 +1,16 @@
+// "Access static 'AClass.fff' via class 'AClass' reference" "true"
+
+class AClass
+{
+    AClass getA() {
+        return null;
+    }
+    static int fff;
+}
+
+class acc {
+ int f() {
+   AClass a = null;
+   return <caret>AClass.fff;
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/accessStaticViaInstance/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/accessStaticViaInstance/after2.java
new file mode 100644
index 0000000..f038b28
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/accessStaticViaInstance/after2.java
@@ -0,0 +1,12 @@
+// "Access static 'AClass.fff' via class 'AClass' reference" "true"
+
+class AClass
+{
+    AClass getA() {
+        int i = <caret>fff;
+        return null;
+
+    }
+    static int fff;
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/accessStaticViaInstance/after3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/accessStaticViaInstance/after3.java
new file mode 100644
index 0000000..2653d2b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/accessStaticViaInstance/after3.java
@@ -0,0 +1,17 @@
+// "Access static 'AClass.getA()' via class 'AClass' reference" "true"
+
+class AClass
+{
+    static AClass getA() {
+        return null;
+    }
+    static int fff;
+}
+
+class acc {
+ int f() {
+   AClass a = null;
+   <caret>AClass.getA();
+   return 0;
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/accessStaticViaInstance/after5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/accessStaticViaInstance/after5.java
new file mode 100644
index 0000000..3212752
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/accessStaticViaInstance/after5.java
@@ -0,0 +1,8 @@
+// "Access static 'AClass.stat' via class 'AClass' reference" "true"
+
+class AClass {
+    static boolean stat;
+    void foo (boolean stat) {
+        AClass.stat<caret> = stat;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/accessStaticViaInstance/after6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/accessStaticViaInstance/after6.java
new file mode 100644
index 0000000..faa92ac
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/accessStaticViaInstance/after6.java
@@ -0,0 +1,17 @@
+// "Access static 'AClass.R.rr' via class 'R' reference" "true"
+
+class AClass
+{
+    public static class R {
+        static int rr = 0;
+    }
+    public R getR() {
+        return null;
+    }
+}
+class ss {
+    void f(AClass d){
+        int i = <caret>AClass.R.rr;
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/accessStaticViaInstance/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/accessStaticViaInstance/before1.java
new file mode 100644
index 0000000..925be29
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/accessStaticViaInstance/before1.java
@@ -0,0 +1,16 @@
+// "Access static 'AClass.fff' via class 'AClass' reference" "true"
+
+class AClass
+{
+    AClass getA() {
+        return null;
+    }
+    static int fff;
+}
+
+class acc {
+ int f() {
+   AClass a = null;
+   return <caret>a.getA().fff;
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/accessStaticViaInstance/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/accessStaticViaInstance/before2.java
new file mode 100644
index 0000000..9c65785
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/accessStaticViaInstance/before2.java
@@ -0,0 +1,12 @@
+// "Access static 'AClass.fff' via class 'AClass' reference" "true"
+
+class AClass
+{
+    AClass getA() {
+        int i = <caret>this.fff;
+        return null;
+
+    }
+    static int fff;
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/accessStaticViaInstance/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/accessStaticViaInstance/before3.java
new file mode 100644
index 0000000..6e6c894
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/accessStaticViaInstance/before3.java
@@ -0,0 +1,17 @@
+// "Access static 'AClass.getA()' via class 'AClass' reference" "true"
+
+class AClass
+{
+    static AClass getA() {
+        return null;
+    }
+    static int fff;
+}
+
+class acc {
+ int f() {
+   AClass a = null;
+   <caret>a.getA();
+   return 0;
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/accessStaticViaInstance/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/accessStaticViaInstance/before4.java
new file mode 100644
index 0000000..35e8e8da
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/accessStaticViaInstance/before4.java
@@ -0,0 +1,18 @@
+// "Access static 'AClass.R.rr' via class 'AClass.R' reference" "false"
+
+class AClass
+{
+    private static class R {
+        static int rr = 0;
+    }
+    public R getR() {
+        return null;
+    }
+}
+// AClass.R is not accessible there
+class ss {
+    void f(AClass d){
+        int i = <caret>d.getR().rr;
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/accessStaticViaInstance/before5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/accessStaticViaInstance/before5.java
new file mode 100644
index 0000000..6ba53df
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/accessStaticViaInstance/before5.java
@@ -0,0 +1,8 @@
+// "Access static 'AClass.stat' via class 'AClass' reference" "true"
+
+class AClass {
+    static boolean stat;
+    void foo (boolean stat) {
+        this.stat<caret> = stat;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/accessStaticViaInstance/before6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/accessStaticViaInstance/before6.java
new file mode 100644
index 0000000..78f3bc47
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/accessStaticViaInstance/before6.java
@@ -0,0 +1,17 @@
+// "Access static 'AClass.R.rr' via class 'R' reference" "true"
+
+class AClass
+{
+    public static class R {
+        static int rr = 0;
+    }
+    public R getR() {
+        return null;
+    }
+}
+class ss {
+    void f(AClass d){
+        int i = <caret>d.getR().rr;
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/after1.java
new file mode 100644
index 0000000..ef8e0d3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/after1.java
@@ -0,0 +1,13 @@
+// "Add Catch Clause(s)" "true"
+class a {
+    void g() throws Exception {
+    }
+    void f() {
+        try {
+            g();
+        } catch (Error e) {
+        } catch (Exception e) {
+            <caret><selection>e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.</selection>
+        }
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/after3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/after3.java
new file mode 100644
index 0000000..108453b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/after3.java
@@ -0,0 +1,16 @@
+// "Add Catch Clause(s)" "true"
+class a {
+    void g() throws Exception {
+    }
+
+    // initializer
+    {
+        try {
+            // comment before
+            g();
+            // comment after
+        } catch (Exception e) {
+            <caret><selection>e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.</selection>
+        }
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/after4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/after4.java
new file mode 100644
index 0000000..f5864c4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/after4.java
@@ -0,0 +1,16 @@
+// "Add Catch Clause(s)" "true"
+class MyException1 extends Exception {}
+class MyException2 extends Exception {}
+
+class Test {
+  void foo () throws MyException1, MyException2 {}
+
+  void bar () {
+    try {
+      foo();
+    } catch (MyException1 e) {
+    } catch (MyException2 myException2) {
+        <caret><selection>myException2.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.</selection>
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/after5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/after5.java
new file mode 100644
index 0000000..359aa1c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/after5.java
@@ -0,0 +1,15 @@
+// "Add Catch Clause(s)" "true"
+import java.io.IOException;
+
+class Test {
+    static class MyResource implements AutoCloseable {
+        public void close() throws IOException { }
+    }
+
+    void m() {
+        try (MyResource r = new MyResource()) {
+        } catch (IOException e) {
+            <selection>e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.</selection>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/after6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/after6.java
new file mode 100644
index 0000000..7a4a8ad
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/after6.java
@@ -0,0 +1,19 @@
+// "Add Catch Clause(s)" "true"
+class Test {
+    static class E1 extends Exception { }
+    static class E2 extends Exception { }
+
+    static class MyResource implements AutoCloseable {
+        public void doSomething() throws E1 { }
+        public void close() throws E2 { }
+    }
+
+    void m() {
+        try (MyResource r = new MyResource()) {
+            r.doSomething();
+        } catch (E1 ignore) {
+        } catch (E2 e2) {
+            <selection>e2.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.</selection>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/after7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/after7.java
new file mode 100644
index 0000000..c28baa6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/after7.java
@@ -0,0 +1,19 @@
+// "Add Catch Clause(s)" "true"
+class Test {
+    static class E1 extends Exception { }
+    static class E2 extends Exception { }
+
+    static class MyResource implements AutoCloseable {
+        public MyResource() throws E1 { }
+        public void close() throws E2 { }
+    }
+
+    void m() {
+        try (MyResource r = new MyResource()) {
+        } catch (E2 e2) {
+            <selection>e2.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.</selection>
+        } catch (E1 e1) {
+            e1.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/afterHierarchy.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/afterHierarchy.java
new file mode 100644
index 0000000..2c0d63e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/afterHierarchy.java
@@ -0,0 +1,20 @@
+import java.io.FileNotFoundException;
+import java.io.IOException;
+
+// "Add Catch Clause(s)" "true"
+class CatchExceptions {
+
+	void foo() throws java.io.IOException, java.io.FileNotFoundException {
+
+	}
+
+	void bar() {
+		try {
+		foo();
+		} catch (FileNotFoundException e) {
+            <selection>e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.</selection>
+        } catch (IOException e) {
+            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/before1.java
new file mode 100644
index 0000000..4b76f3f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/before1.java
@@ -0,0 +1,11 @@
+// "Add Catch Clause(s)" "true"
+class a {
+    void g() throws Exception {
+    }
+    void f() {
+        try {
+            <caret>g();
+        } catch (Error e) {
+        }
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/before2.java
new file mode 100644
index 0000000..ba3f330
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/before2.java
@@ -0,0 +1,20 @@
+// "Add Catch Clause(s)" "false"
+// should not try to add catch clauses across method boundaries
+class s {
+    int f() throws Exception {
+        Runnable runnable = new Runnable() {
+            public void run() {
+                try {
+                    Runnable runnable = new Runnable() {
+                        public void run() {
+                            <caret>int i = f();//
+                        }
+                    };
+                } catch (Exception e) {
+                }
+            }
+        };
+        return 0;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/before3.java
new file mode 100644
index 0000000..c78bb7d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/before3.java
@@ -0,0 +1,14 @@
+// "Add Catch Clause(s)" "true"
+class a {
+    void g() throws Exception {
+    }
+
+    // initializer
+    {
+        try {
+            // comment before
+            <caret>g();
+            // comment after
+        }
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/before4.java
new file mode 100644
index 0000000..3cb9bab9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/before4.java
@@ -0,0 +1,14 @@
+// "Add Catch Clause(s)" "true"
+class MyException1 extends Exception {}
+class MyException2 extends Exception {}
+
+class Test {
+  void foo () throws MyException1, MyException2 {}
+
+  void bar () {
+    try {
+      <caret>foo();
+    } catch (MyException1 e) {
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/before5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/before5.java
new file mode 100644
index 0000000..80958b6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/before5.java
@@ -0,0 +1,13 @@
+// "Add Catch Clause(s)" "true"
+import java.io.IOException;
+
+class Test {
+    static class MyResource implements AutoCloseable {
+        public void close() throws IOException { }
+    }
+
+    void m() {
+        try (<caret>MyResource r = new MyResource()) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/before6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/before6.java
new file mode 100644
index 0000000..28b339c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/before6.java
@@ -0,0 +1,17 @@
+// "Add Catch Clause(s)" "true"
+class Test {
+    static class E1 extends Exception { }
+    static class E2 extends Exception { }
+
+    static class MyResource implements AutoCloseable {
+        public void doSomething() throws E1 { }
+        public void close() throws E2 { }
+    }
+
+    void m() {
+        try (<caret>MyResource r = new MyResource()) {
+            r.doSomething();
+        } catch (E1 ignore) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/before7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/before7.java
new file mode 100644
index 0000000..1404c45
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/before7.java
@@ -0,0 +1,14 @@
+// "Add Catch Clause(s)" "true"
+class Test {
+    static class E1 extends Exception { }
+    static class E2 extends Exception { }
+
+    static class MyResource implements AutoCloseable {
+        public MyResource() throws E1 { }
+        public void close() throws E2 { }
+    }
+
+    void m() {
+        try (MyResource r = <caret>new MyResource())
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/beforeHierarchy.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/beforeHierarchy.java
new file mode 100644
index 0000000..85f076c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addCatchBlock/beforeHierarchy.java
@@ -0,0 +1,13 @@
+// "Add Catch Clause(s)" "true"
+class CatchExceptions {
+
+	void foo() throws java.io.IOException, java.io.FileNotFoundException {
+
+	}
+
+	void bar() {
+		try {
+		foo();<caret>
+		}
+	}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodBody/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodBody/after1.java
new file mode 100644
index 0000000..5bbdb48
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodBody/after1.java
@@ -0,0 +1,7 @@
+// "Add Method Body" "true"
+class a {
+    void f() {
+        <caret><selection>//To change body of created methods use File | Settings | File Templates.</selection>
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodBody/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodBody/after2.java
new file mode 100644
index 0000000..844bc3b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodBody/after2.java
@@ -0,0 +1,7 @@
+// "Add Method Body" "true"
+class a {
+    String f() {
+        <caret><selection>return null;  //To change body of created methods use File | Settings | File Templates.</selection>
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodBody/after3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodBody/after3.java
new file mode 100644
index 0000000..6cd2bdc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodBody/after3.java
@@ -0,0 +1,7 @@
+// "Add Method Body" "true"
+class a {
+    a() {
+        <caret><selection>//To change body of created methods use File | Settings | File Templates.</selection>
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodBody/after4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodBody/after4.java
new file mode 100644
index 0000000..844bc3b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodBody/after4.java
@@ -0,0 +1,7 @@
+// "Add Method Body" "true"
+class a {
+    String f() {
+        <caret><selection>return null;  //To change body of created methods use File | Settings | File Templates.</selection>
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodBody/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodBody/before1.java
new file mode 100644
index 0000000..3278c95
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodBody/before1.java
@@ -0,0 +1,5 @@
+// "Add Method Body" "true"
+class a {
+ <caret>void f();
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodBody/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodBody/before2.java
new file mode 100644
index 0000000..05e969a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodBody/before2.java
@@ -0,0 +1,5 @@
+// "Add Method Body" "true"
+class a {
+ <caret>String f();
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodBody/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodBody/before3.java
new file mode 100644
index 0000000..3361563
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodBody/before3.java
@@ -0,0 +1,5 @@
+// "Add Method Body" "true"
+class a {
+ <caret>a();
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodBody/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodBody/before4.java
new file mode 100644
index 0000000..0b28ac0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodBody/before4.java
@@ -0,0 +1,5 @@
+// "Add Method Body" "true"
+class a {
+ <caret>abstract String f();
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodBody/before5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodBody/before5.java
new file mode 100644
index 0000000..4dbba92
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodBody/before5.java
@@ -0,0 +1,5 @@
+// "Add Method Body" "false"
+interface a {
+ <caret>String f();
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addNewArrayExpression/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addNewArrayExpression/after1.java
new file mode 100644
index 0000000..9eff12c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addNewArrayExpression/after1.java
@@ -0,0 +1,7 @@
+// "Add 'new int[]'" "true"
+class c {
+ void f() {
+   int[] a;
+   a = <caret>new int[]{1, 2};
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addNewArrayExpression/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addNewArrayExpression/before1.java
new file mode 100644
index 0000000..1b4ea7e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addNewArrayExpression/before1.java
@@ -0,0 +1,7 @@
+// "Add 'new int[]'" "true"
+class c {
+ void f() {
+   int[] a;
+   a = <caret>{1, 2};
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/afterCollapseInnerClass.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/afterCollapseInnerClass.java
new file mode 100644
index 0000000..7102675
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/afterCollapseInnerClass.java
@@ -0,0 +1,10 @@
+// "Add on demand static import for 'java.lang.Thread'" "true"
+package test;
+
+import static java.lang.Thread.*;
+
+public class Foo {
+    {
+        <caret>State en = new State();
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/afterConflict.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/afterConflict.java
new file mode 100644
index 0000000..fe1cbb4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/afterConflict.java
@@ -0,0 +1,15 @@
+// "Add on demand static import for 'test.Bar'" "true"
+package test;
+
+import static test.Bar.*;
+
+class Bar {
+    public static final void f() {}
+}
+public class Foo {
+    public static final void f(int i) {}
+
+    {
+        <caret>Bar.f();   // invoke 'add on demand static import' for Bar class here. The call is now done to other method.
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/afterConflict2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/afterConflict2.java
new file mode 100644
index 0000000..c5f0bc6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/afterConflict2.java
@@ -0,0 +1,36 @@
+// "Add on demand static import for 'test.Bar'" "true"
+package test;
+
+import static test.Bar.*;
+
+class Bar {
+    public static final void f() {
+    }
+}
+
+public class Foo {
+    {
+        f();   // invoke 'add on demand static import' for Bar class here. The call is now done to other method.
+    }
+
+    static class D {
+        public static final void f(int i) {
+        }
+
+        {
+            Bar.f();   // invoke 'add on demand static import' for Bar class here. The call is now done to other method.
+        }
+    }
+
+    {
+        f();   // invoke 'add on demand static import' for Bar class here. The call is now done to other method.
+    }
+
+    {
+        f();   // invoke 'add on demand static import' for Bar class here. The call is now done to other method.
+    }
+
+    {
+        f();   // invoke 'add on demand static import' for Bar class here. The call is now done to other method.
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/afterMethodReference.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/afterMethodReference.java
new file mode 100644
index 0000000..c97f306
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/afterMethodReference.java
@@ -0,0 +1,17 @@
+// "Add on demand static import for 'java.util.Arrays'" "true"
+package test;
+
+import java.util.*;
+
+import static java.util.Arrays.*;
+
+public class Foo {
+  {
+    Block<Integer[]> b2 = Arrays::sort;
+    sort((byte[]) null);
+  }
+
+  public interface Block<T> {
+    void apply(T t);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/afterMultipleMethods.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/afterMultipleMethods.java
new file mode 100644
index 0000000..5233c74
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/afterMultipleMethods.java
@@ -0,0 +1,14 @@
+// "Add on demand static import for 'test.Bar'" "true"
+package test;
+
+import static test.Bar.*;
+
+class Bar {
+    public static final void f(String s) {}
+    public static final void f(int i) {}
+}
+public class Foo {
+    {
+        <caret>f();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/afterQualifiedInheritance.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/afterQualifiedInheritance.java
new file mode 100644
index 0000000..1a043b1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/afterQualifiedInheritance.java
@@ -0,0 +1,17 @@
+// "Add on demand static import for 'test.GregorianCalendar'" "true"
+package test;
+
+import static test.GregorianCalendar.*;
+
+public class Foo {
+    {
+      getInstance();
+    }
+}
+
+class Calendar {
+  public static final void getInstance() {}
+}
+
+class GregorianCalendar extends Calendar {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/afterSingleCodeReference.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/afterSingleCodeReference.java
new file mode 100644
index 0000000..1454253
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/afterSingleCodeReference.java
@@ -0,0 +1,13 @@
+// "Add static import for 'test.Bar.Foo'" "true"
+package test;
+
+import static test.Bar.Foo;
+
+class Bar {
+    public static class Foo {}
+}
+public class OOO{
+    {
+        Foo foo;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/afterSingleCodeReferenceInAnnotation.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/afterSingleCodeReferenceInAnnotation.java
new file mode 100644
index 0000000..e53279e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/afterSingleCodeReferenceInAnnotation.java
@@ -0,0 +1,11 @@
+// "Add static import for 'test.Bar.Foo'" "true"
+package test;
+
+import static test.Bar.Foo;
+
+class Bar {
+    public static @interface Foo {}
+}
+@Foo
+public class OOO {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/afterSingleMethod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/afterSingleMethod.java
new file mode 100644
index 0000000..7a21210
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/afterSingleMethod.java
@@ -0,0 +1,14 @@
+// "Add static import for 'test.Bar.f'" "true"
+package test;
+
+import static test.Bar.f;
+
+class Bar {
+    public static final void f() {}
+}
+public class Foo {
+    public static final void f(int i) {}
+    {
+        Bar.<caret>f();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/afterSingleQualifiedInheritance.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/afterSingleQualifiedInheritance.java
new file mode 100644
index 0000000..4562e52
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/afterSingleQualifiedInheritance.java
@@ -0,0 +1,17 @@
+// "Add static import for 'test.Calendar.getInstance'" "true"
+package test;
+
+import static test.Calendar.getInstance;
+
+public class Foo {
+    {
+      getInstance();
+    }
+}
+
+class Calendar {
+  public static final void getInstance() {}
+}
+
+class GregorianCalendar extends Calendar {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/afterSingleSuperMethod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/afterSingleSuperMethod.java
new file mode 100644
index 0000000..f408a05
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/afterSingleSuperMethod.java
@@ -0,0 +1,17 @@
+// "Add static import for 'test.Bar.f'" "true"
+package test;
+
+import static test.Bar.f;
+
+class Bar {
+    public static final void f() {}
+}
+public class Foo extends FooSuper{
+    {
+        Bar.<caret>f();
+    }
+}
+
+class FooSuper {
+  public static final void f(int i) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/beforeAlready.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/beforeAlready.java
new file mode 100644
index 0000000..82ea17f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/beforeAlready.java
@@ -0,0 +1,14 @@
+// "Add on demand static import for 'test.Bar'" "false"
+package test;
+import static test.Bar.*;
+
+class Bar {
+    public static final void f() {}
+}
+public class Foo {
+    public static final void f(int i) {}
+
+    {
+        <caret>Bar.f();   // invoke 'add on demand static import' for Bar class here. The call is now done to other method.
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/beforeCollapseInnerClass.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/beforeCollapseInnerClass.java
new file mode 100644
index 0000000..e6caad0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/beforeCollapseInnerClass.java
@@ -0,0 +1,8 @@
+// "Add on demand static import for 'java.lang.Thread'" "true"
+package test;
+
+public class Foo {
+    {
+        Thre<caret>ad.State en = new Thread.State();
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/beforeConflict.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/beforeConflict.java
new file mode 100644
index 0000000..09af9dc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/beforeConflict.java
@@ -0,0 +1,13 @@
+// "Add on demand static import for 'test.Bar'" "true"
+package test;
+
+class Bar {
+    public static final void f() {}
+}
+public class Foo {
+    public static final void f(int i) {}
+
+    {
+        <caret>Bar.f();   // invoke 'add on demand static import' for Bar class here. The call is now done to other method.
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/beforeConflict2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/beforeConflict2.java
new file mode 100644
index 0000000..1b9aea6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/beforeConflict2.java
@@ -0,0 +1,34 @@
+// "Add on demand static import for 'test.Bar'" "true"
+package test;
+
+class Bar {
+    public static final void f() {
+    }
+}
+
+public class Foo {
+    {
+        Bar.f();   // invoke 'add on demand static import' for Bar class here. The call is now done to other method.
+    }
+
+    static class D {
+        public static final void f(int i) {
+        }
+
+        {
+            Bar.f();   // invoke 'add on demand static import' for Bar class here. The call is now done to other method.
+        }
+    }
+
+    {
+        Bar.f();   // invoke 'add on demand static import' for Bar class here. The call is now done to other method.
+    }
+
+    {
+        Bar.f();   // invoke 'add on demand static import' for Bar class here. The call is now done to other method.
+    }
+
+    {
+        <caret>Bar.f();   // invoke 'add on demand static import' for Bar class here. The call is now done to other method.
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/beforeMethodReference.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/beforeMethodReference.java
new file mode 100644
index 0000000..cf45d06
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/beforeMethodReference.java
@@ -0,0 +1,15 @@
+// "Add on demand static import for 'java.util.Arrays'" "true"
+package test;
+
+import java.util.*;
+
+public class Foo {
+  {
+    Block<Integer[]> b2 = Arrays::sort;
+    Arra<caret>ys.sort((byte[])null);
+  }
+
+  public interface Block<T> {
+    void apply(T t);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/beforeMultipleMethods.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/beforeMultipleMethods.java
new file mode 100644
index 0000000..01e846d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/beforeMultipleMethods.java
@@ -0,0 +1,12 @@
+// "Add on demand static import for 'test.Bar'" "true"
+package test;
+
+class Bar {
+    public static final void f(String s) {}
+    public static final void f(int i) {}
+}
+public class Foo {
+    {
+        <caret>Bar.f();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/beforePrivateEnumInside.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/beforePrivateEnumInside.java
new file mode 100644
index 0000000..d230c66
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/beforePrivateEnumInside.java
@@ -0,0 +1,8 @@
+// "Add on demand static import for 'test.Outer.State'" "false"
+package test;
+
+public class Outer {
+    private enum State { REDONE, UNDONE }
+
+    private State state = Sta<caret>te.REDONE;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/beforeQualifiedInheritance.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/beforeQualifiedInheritance.java
new file mode 100644
index 0000000..b695c1c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/beforeQualifiedInheritance.java
@@ -0,0 +1,15 @@
+// "Add on demand static import for 'test.GregorianCalendar'" "true"
+package test;
+
+public class Foo {
+    {
+      <caret>GregorianCalendar.getInstance();
+    }
+}
+
+class Calendar {
+  public static final void getInstance() {}
+}
+
+class GregorianCalendar extends Calendar {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/beforeSingleCodeReference.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/beforeSingleCodeReference.java
new file mode 100644
index 0000000..2ac6af9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/beforeSingleCodeReference.java
@@ -0,0 +1,11 @@
+// "Add static import for 'test.Bar.Foo'" "true"
+package test;
+
+class Bar {
+    public static class Foo {}
+}
+public class OOO{
+    {
+        Bar.<caret>Foo foo;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/beforeSingleCodeReferenceInAnnotation.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/beforeSingleCodeReferenceInAnnotation.java
new file mode 100644
index 0000000..b619588
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/beforeSingleCodeReferenceInAnnotation.java
@@ -0,0 +1,9 @@
+// "Add static import for 'test.Bar.Foo'" "true"
+package test;
+
+class Bar {
+    public static @interface Foo {}
+}
+@Bar.<caret>Foo
+public class OOO {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/beforeSingleImportDisabledWhenOnDemandExists.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/beforeSingleImportDisabledWhenOnDemandExists.java
new file mode 100644
index 0000000..103a4ac
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/beforeSingleImportDisabledWhenOnDemandExists.java
@@ -0,0 +1,17 @@
+// "Add static import for 'test.Bar.f'" "false"
+package test;
+
+import static test.Bar.*;
+
+class Bar {
+    public static final void f() {}
+}
+public class Foo extends FooSuper{
+    {
+        Bar.<caret>f();
+    }
+}
+
+class FooSuper {
+  public static final void f(int i) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/beforeSingleMethod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/beforeSingleMethod.java
new file mode 100644
index 0000000..e199b82
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/beforeSingleMethod.java
@@ -0,0 +1,12 @@
+// "Add static import for 'test.Bar.f'" "true"
+package test;
+
+class Bar {
+    public static final void f() {}
+}
+public class Foo {
+    public static final void f(int i) {}
+    {
+        Bar.<caret>f();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/beforeSingleQualifiedInheritance.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/beforeSingleQualifiedInheritance.java
new file mode 100644
index 0000000..0d4d10d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/beforeSingleQualifiedInheritance.java
@@ -0,0 +1,15 @@
+// "Add static import for 'test.Calendar.getInstance'" "true"
+package test;
+
+public class Foo {
+    {
+      GregorianCalendar.get<caret>Instance();
+    }
+}
+
+class Calendar {
+  public static final void getInstance() {}
+}
+
+class GregorianCalendar extends Calendar {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/beforeSingleSuperMethod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/beforeSingleSuperMethod.java
new file mode 100644
index 0000000..e6cdb19
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport/beforeSingleSuperMethod.java
@@ -0,0 +1,15 @@
+// "Add static import for 'test.Bar.f'" "true"
+package test;
+
+class Bar {
+    public static final void f() {}
+}
+public class Foo extends FooSuper{
+    {
+        Bar.<caret>f();
+    }
+}
+
+class FooSuper {
+  public static final void f(int i) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addReturn/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addReturn/after1.java
new file mode 100644
index 0000000..a25ea59
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addReturn/after1.java
@@ -0,0 +1,7 @@
+// "Add Return Statement" "true"
+class a {
+ int f() {
+     return <caret><selection>0</selection>;
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addReturn/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addReturn/after2.java
new file mode 100644
index 0000000..0c06497
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addReturn/after2.java
@@ -0,0 +1,7 @@
+// "Add Return Statement" "true"
+class a {
+ String f() {
+     return <caret><selection>null</selection>;
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addReturn/after3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addReturn/after3.java
new file mode 100644
index 0000000..65e4bdf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addReturn/after3.java
@@ -0,0 +1,8 @@
+// "Add Return Statement" "true"
+class a {
+ int f() {
+   int i = 0;
+     return <caret><selection>i</selection>;
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addReturn/after4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addReturn/after4.java
new file mode 100644
index 0000000..c127e44
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addReturn/after4.java
@@ -0,0 +1,7 @@
+// "Add Return Statement" "true"
+class a {
+ int f(int p) {
+     return <caret><selection>p</selection>;
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addReturn/after5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addReturn/after5.java
new file mode 100644
index 0000000..78375f3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addReturn/after5.java
@@ -0,0 +1,8 @@
+// "Add Return Statement" "true"
+class a {
+ int f() {
+   short i = 0;
+     return <caret><selection>0</selection>;
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addReturn/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addReturn/before1.java
new file mode 100644
index 0000000..fb5e33a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addReturn/before1.java
@@ -0,0 +1,6 @@
+// "Add Return Statement" "true"
+class a {
+ int f() {
+ <caret>}
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addReturn/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addReturn/before2.java
new file mode 100644
index 0000000..bc52d34
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addReturn/before2.java
@@ -0,0 +1,6 @@
+// "Add Return Statement" "true"
+class a {
+ String f() {
+ <caret>}
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addReturn/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addReturn/before3.java
new file mode 100644
index 0000000..9021f06
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addReturn/before3.java
@@ -0,0 +1,7 @@
+// "Add Return Statement" "true"
+class a {
+ int f() {
+   int i = 0;
+ <caret>}
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addReturn/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addReturn/before4.java
new file mode 100644
index 0000000..8c89c52b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addReturn/before4.java
@@ -0,0 +1,6 @@
+// "Add Return Statement" "true"
+class a {
+ int f(int p) {
+ <caret>}
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addReturn/before5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addReturn/before5.java
new file mode 100644
index 0000000..2abdeea
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addReturn/before5.java
@@ -0,0 +1,7 @@
+// "Add Return Statement" "true"
+class a {
+ int f() {
+   short i = 0;
+ <caret>}
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addReturn/before6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addReturn/before6.java
new file mode 100644
index 0000000..7eb320d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addReturn/before6.java
@@ -0,0 +1,7 @@
+// "Add Method Body" "false"
+class a {
+ String f() {
+   return null;
+ <caret>}
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addRuntimeExceptionToThrows/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addRuntimeExceptionToThrows/after1.java
new file mode 100644
index 0000000..f32174f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addRuntimeExceptionToThrows/after1.java
@@ -0,0 +1,7 @@
+// "Add Runtime Exception(s) to Method Signature" "true"
+class a {
+   int f() throws RuntimeException {
+     throw new RuntimeException()<caret>;
+   }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addRuntimeExceptionToThrows/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addRuntimeExceptionToThrows/before1.java
new file mode 100644
index 0000000..783dd47
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addRuntimeExceptionToThrows/before1.java
@@ -0,0 +1,7 @@
+// "Add Runtime Exception(s) to Method Signature" "true"
+class a {
+   int f() {
+     throw new RuntimeException()<caret>;
+   }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addRuntimeExceptionToThrows/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addRuntimeExceptionToThrows/before2.java
new file mode 100644
index 0000000..ca7eb14
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addRuntimeExceptionToThrows/before2.java
@@ -0,0 +1,7 @@
+// "Add Runtime Exception(s) to Method Signature" "false"
+class a {
+   int f() throws RuntimeException{
+     throw new RuntimeException()<caret>;
+   }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addSingleStaticImport/Inaccessible.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addSingleStaticImport/Inaccessible.java
new file mode 100644
index 0000000..11c4f55
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addSingleStaticImport/Inaccessible.java
@@ -0,0 +1,8 @@
+package impl;
+import foo.Foo;
+public class FooImpl extends Foo {}
+class Bar {
+  void doSmth(FooImpl im) {
+    im.f<caret>oo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addSingleStaticImport/Inaccessible_after.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addSingleStaticImport/Inaccessible_after.java
new file mode 100644
index 0000000..cf89f0f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addSingleStaticImport/Inaccessible_after.java
@@ -0,0 +1,11 @@
+package impl;
+import foo.Foo;
+
+import static impl.FooImpl.foo;
+
+public class FooImpl extends Foo {}
+class Bar {
+  void doSmth(FooImpl im) {
+    foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addToThrows/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addToThrows/after1.java
new file mode 100644
index 0000000..76c72d6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addToThrows/after1.java
@@ -0,0 +1,13 @@
+// "Add Exception to Method Signature" "true"
+class C {
+    static class E1 extends Exception { }
+
+    static class MyResource implements AutoCloseable {
+        public void close() throws E1 { }
+    }
+
+    void m() throws E1 {
+        try (MyResource r = new MyResource()) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addToThrows/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addToThrows/after2.java
new file mode 100644
index 0000000..a1a2e93
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addToThrows/after2.java
@@ -0,0 +1,15 @@
+// "Add Exception to Method Signature" "true"
+class C {
+    static class E1 extends Exception { }
+    static class E2 extends Exception { }
+
+    static class MyResource implements AutoCloseable {
+        public void doSomething() throws E1 { }
+        public void close() throws E2 { }
+    }
+
+    void m() throws E1, E2 {
+        try (MyResource r = new MyResource()) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addToThrows/afterMultiple.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addToThrows/afterMultiple.java
new file mode 100644
index 0000000..790159f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addToThrows/afterMultiple.java
@@ -0,0 +1,11 @@
+// "Add Exception to Method Signature" "true"
+import java.io.*;
+
+class C {
+  String detectEncoding(File inputFile) throws IOException {
+    final BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(inputFile), "UTF-8"));
+    final String line = reader.<caret>readLine();
+
+    return "ISO-8859-1";
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addToThrows/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addToThrows/before1.java
new file mode 100644
index 0000000..8555c0e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addToThrows/before1.java
@@ -0,0 +1,13 @@
+// "Add Exception to Method Signature" "true"
+class C {
+    static class E1 extends Exception { }
+
+    static class MyResource implements AutoCloseable {
+        public void close() throws E1 { }
+    }
+
+    void m() {
+        try (<caret>MyResource r = new MyResource()) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addToThrows/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addToThrows/before2.java
new file mode 100644
index 0000000..c3c30fe
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addToThrows/before2.java
@@ -0,0 +1,15 @@
+// "Add Exception to Method Signature" "true"
+class C {
+    static class E1 extends Exception { }
+    static class E2 extends Exception { }
+
+    static class MyResource implements AutoCloseable {
+        public void doSomething() throws E1 { }
+        public void close() throws E2 { }
+    }
+
+    void m() throws E1 {
+        try (<caret>MyResource r = new MyResource()) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addToThrows/beforeMultiple.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addToThrows/beforeMultiple.java
new file mode 100644
index 0000000..7502ecb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addToThrows/beforeMultiple.java
@@ -0,0 +1,11 @@
+// "Add Exception to Method Signature" "true"
+import java.io.*;
+
+class C {
+  String detectEncoding(File inputFile) throws FileNotFoundException, ObjectStreamException {
+    final BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(inputFile), "UTF-8"));
+    final String line = reader.<caret>readLine();
+
+    return "ISO-8859-1";
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/after1.java
new file mode 100644
index 0000000..1f32af3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/after1.java
@@ -0,0 +1,13 @@
+// "Add explicit type arguments" "true"
+
+import java.util.List;
+import java.util.Collections;
+
+class Example {
+    void f(List<String> list) {}
+
+    void g() {
+           f(<caret>Collections.<String>emptyList());
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/after2.java
new file mode 100644
index 0000000..e148f30
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/after2.java
@@ -0,0 +1,13 @@
+// "Add explicit type arguments" "true"
+
+import java.util.Collection;
+import java.util.Collections;
+
+class Example {
+    void f(Collection<String> list) {}
+
+    void g() {
+           f(<caret>Collections.<String>emptyList());
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/after3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/after3.java
new file mode 100644
index 0000000..7d4cc30
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/after3.java
@@ -0,0 +1,13 @@
+// "Add explicit type arguments" "true"
+
+import java.util.List;
+import java.util.Collections;
+
+class Example {
+    Example(List<String> list) {}
+
+    void g() {
+           new Example(<caret>Collections.<String>emptyList());
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/afterUnqualified.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/afterUnqualified.java
new file mode 100644
index 0000000..2e7cbdc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/afterUnqualified.java
@@ -0,0 +1,7 @@
+// "Add explicit type arguments" "true"
+import java.util.*;
+class Test {
+    <T> List<T> f() { return new ArrayList<T>(); }
+    void g(List<Integer> a) {}
+    void someMethod() { g(this.<Integer>f()); }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/afterUnqualifiedStatic.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/afterUnqualifiedStatic.java
new file mode 100644
index 0000000..6ca0a0b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/afterUnqualifiedStatic.java
@@ -0,0 +1,7 @@
+// "Add explicit type arguments" "true"
+import java.util.*;
+class Test {
+    static <T> List<T> f() { return new ArrayList<T>(); }
+    void g(List<Integer> a) {}
+    void someMethod() { g(Test.<Integer>f()); }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/before1.java
new file mode 100644
index 0000000..0b433e7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/before1.java
@@ -0,0 +1,13 @@
+// "Add explicit type arguments" "true"
+
+import java.util.List;
+import java.util.Collections;
+
+class Example {
+    void f(List<String> list) {}
+
+    void g() {
+           f(<caret>Collections.emptyList());
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/before2.java
new file mode 100644
index 0000000..6da1ace
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/before2.java
@@ -0,0 +1,13 @@
+// "Add explicit type arguments" "true"
+
+import java.util.Collection;
+import java.util.Collections;
+
+class Example {
+    void f(Collection<String> list) {}
+
+    void g() {
+           f(<caret>Collections.emptyList());
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/before3.java
new file mode 100644
index 0000000..d2afeee
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/before3.java
@@ -0,0 +1,13 @@
+// "Add explicit type arguments" "true"
+
+import java.util.List;
+import java.util.Collections;
+
+class Example {
+    Example(List<String> list) {}
+
+    void g() {
+           new Example(<caret>Collections.emptyList());
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/beforeUnqualified.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/beforeUnqualified.java
new file mode 100644
index 0000000..8ed8624
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/beforeUnqualified.java
@@ -0,0 +1,7 @@
+// "Add explicit type arguments" "true"
+import java.util.*;
+class Test {
+    <T> List<T> f() { return new ArrayList<T>(); }
+    void g(List<Integer> a) {}
+    void someMethod() { g(f<caret>()); }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/beforeUnqualifiedStatic.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/beforeUnqualifiedStatic.java
new file mode 100644
index 0000000..66bc051
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArguments/beforeUnqualifiedStatic.java
@@ -0,0 +1,7 @@
+// "Add explicit type arguments" "true"
+import java.util.*;
+class Test {
+    static <T> List<T> f() { return new ArrayList<T>(); }
+    void g(List<Integer> a) {}
+    void someMethod() { g(<caret>f()); }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArgumentsConditional/afterBothParts.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArgumentsConditional/afterBothParts.java
new file mode 100644
index 0000000..b225d54
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArgumentsConditional/afterBothParts.java
@@ -0,0 +1,9 @@
+// "Add explicit type arguments" "true"
+import java.util.*;
+
+class Test {
+    static <T> List<T> f() { return new ArrayList<T>(); }
+    void someMethod(boolean b) { 
+      List<String> s = b ? Test.<String>f() : f(); 
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArgumentsConditional/afterInstanceMethod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArgumentsConditional/afterInstanceMethod.java
new file mode 100644
index 0000000..5783cef
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArgumentsConditional/afterInstanceMethod.java
@@ -0,0 +1,9 @@
+// "Add explicit type arguments" "true"
+import java.util.*;
+
+class Test {
+    <T> List<T> f() { return new ArrayList<T>(); }
+    void someMethod(boolean b) { 
+      List<String> s = b ? this.<String>f() : new ArrayList<String>(); 
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArgumentsConditional/afterOuterClass.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArgumentsConditional/afterOuterClass.java
new file mode 100644
index 0000000..865fd9f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArgumentsConditional/afterOuterClass.java
@@ -0,0 +1,13 @@
+// "Add explicit type arguments" "true"
+import java.util.*;
+
+class Test {
+   
+    void someMethod(boolean b) { 
+      List<String> s = b ? Foo.<String>f() : new ArrayList<String>(); 
+    }
+}
+
+class Foo{
+  static <T> List<T> f() { return new ArrayList<T>(); }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArgumentsConditional/afterQualifiedInstance.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArgumentsConditional/afterQualifiedInstance.java
new file mode 100644
index 0000000..bdf85c9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArgumentsConditional/afterQualifiedInstance.java
@@ -0,0 +1,9 @@
+// "Add explicit type arguments" "true"
+import java.util.*;
+
+class Test {
+    <T> List<T> f() { return new ArrayList<T>(); }
+    void someMethod(Test t, boolean b) { 
+      List<String> s = b ? t.<String>f() : new ArrayList<String>(); 
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArgumentsConditional/afterQualifiedStatic.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArgumentsConditional/afterQualifiedStatic.java
new file mode 100644
index 0000000..fd0682a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArgumentsConditional/afterQualifiedStatic.java
@@ -0,0 +1,9 @@
+// "Add explicit type arguments" "true"
+import java.util.*;
+
+class Test {
+    static <T> List<T> f() { return new ArrayList<T>(); }
+    void someMethod(Test t, boolean b) { 
+      List<String> s = b ? t.<String>f() : new ArrayList<String>(); 
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArgumentsConditional/afterUnqualifiedStatic.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArgumentsConditional/afterUnqualifiedStatic.java
new file mode 100644
index 0000000..8852c76
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArgumentsConditional/afterUnqualifiedStatic.java
@@ -0,0 +1,9 @@
+// "Add explicit type arguments" "true"
+import java.util.*;
+
+class Test {
+    static <T> List<T> f() { return new ArrayList<T>(); }
+    void someMethod(boolean b) { 
+      List<String> s = b ? Test.<String>f() : new ArrayList<String>(); 
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArgumentsConditional/beforeBothParts.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArgumentsConditional/beforeBothParts.java
new file mode 100644
index 0000000..c815841
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArgumentsConditional/beforeBothParts.java
@@ -0,0 +1,9 @@
+// "Add explicit type arguments" "true"
+import java.util.*;
+
+class Test {
+    static <T> List<T> f() { return new ArrayList<T>(); }
+    void someMethod(boolean b) { 
+      List<String> s = b ? f<caret>() : f(); 
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArgumentsConditional/beforeInstanceMethod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArgumentsConditional/beforeInstanceMethod.java
new file mode 100644
index 0000000..eab38f7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArgumentsConditional/beforeInstanceMethod.java
@@ -0,0 +1,9 @@
+// "Add explicit type arguments" "true"
+import java.util.*;
+
+class Test {
+    <T> List<T> f() { return new ArrayList<T>(); }
+    void someMethod(boolean b) { 
+      List<String> s = b ? f<caret>() : new ArrayList<String>(); 
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArgumentsConditional/beforeOuterClass.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArgumentsConditional/beforeOuterClass.java
new file mode 100644
index 0000000..f92c2de
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArgumentsConditional/beforeOuterClass.java
@@ -0,0 +1,13 @@
+// "Add explicit type arguments" "true"
+import java.util.*;
+
+class Test {
+   
+    void someMethod(boolean b) { 
+      List<String> s = b ? Foo.f<caret>() : new ArrayList<String>(); 
+    }
+}
+
+class Foo{
+  static <T> List<T> f() { return new ArrayList<T>(); }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArgumentsConditional/beforeQualifiedInstance.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArgumentsConditional/beforeQualifiedInstance.java
new file mode 100644
index 0000000..ded7919
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArgumentsConditional/beforeQualifiedInstance.java
@@ -0,0 +1,9 @@
+// "Add explicit type arguments" "true"
+import java.util.*;
+
+class Test {
+    <T> List<T> f() { return new ArrayList<T>(); }
+    void someMethod(Test t, boolean b) { 
+      List<String> s = b ? t.f<caret>() : new ArrayList<String>(); 
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArgumentsConditional/beforeQualifiedStatic.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArgumentsConditional/beforeQualifiedStatic.java
new file mode 100644
index 0000000..befd23c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArgumentsConditional/beforeQualifiedStatic.java
@@ -0,0 +1,9 @@
+// "Add explicit type arguments" "true"
+import java.util.*;
+
+class Test {
+    static <T> List<T> f() { return new ArrayList<T>(); }
+    void someMethod(Test t, boolean b) { 
+      List<String> s = b ? t.f<caret>() : new ArrayList<String>(); 
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArgumentsConditional/beforeUnqualifiedStatic.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArgumentsConditional/beforeUnqualifiedStatic.java
new file mode 100644
index 0000000..4f62c3a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeArgumentsConditional/beforeUnqualifiedStatic.java
@@ -0,0 +1,9 @@
+// "Add explicit type arguments" "true"
+import java.util.*;
+
+class Test {
+    static <T> List<T> f() { return new ArrayList<T>(); }
+    void someMethod(boolean b) { 
+      List<String> s = b ? f<caret>() : new ArrayList<String>(); 
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/after1.java
new file mode 100644
index 0000000..71e605e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/after1.java
@@ -0,0 +1,7 @@
+// "Cast to 'char'" "true"
+class a {
+ void f(int i) {
+   <caret>char c = (char) i;
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/after10.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/after10.java
new file mode 100644
index 0000000..f776ae3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/after10.java
@@ -0,0 +1,16 @@
+// "Cast to 'A.Iterator<java.lang.String>'" "true"
+class A {
+    interface Iterator<T> {        
+    }
+
+    class List<T> {
+        Iterator<T> iterator() {
+            return null;
+        }
+    }
+
+    void method() {
+        List l = new List();
+        <caret>Iterator<String> it = (Iterator<String>) l.iterator();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/after2.java
new file mode 100644
index 0000000..3fac4e6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/after2.java
@@ -0,0 +1,7 @@
+// "Cast to 'b'" "true"
+class a {
+ void f(a a) {
+   <caret>b b = (b) a;
+ }
+}
+class b extends a {}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/after3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/after3.java
new file mode 100644
index 0000000..a1aba1b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/after3.java
@@ -0,0 +1,6 @@
+// "Cast to 'int'" "true"
+class a {
+ void f() {
+   int[] ii = {<caret>(int) 1.3};
+ }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/after4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/after4.java
new file mode 100644
index 0000000..a346000
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/after4.java
@@ -0,0 +1,7 @@
+// "Cast to 'int'" "true"
+class a {
+ void f() {
+   int i;
+   <caret>i = (int) 3.4f;
+ }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/after5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/after5.java
new file mode 100644
index 0000000..9aebb242
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/after5.java
@@ -0,0 +1,7 @@
+// "Cast to 'float'" "true"
+class a {
+ float f() {
+   double d = 4;
+   return <caret>(float) d;
+ }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/after6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/after6.java
new file mode 100644
index 0000000..4cbcf7e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/after6.java
@@ -0,0 +1,8 @@
+// "Cast to 'int'" "true"
+class a {
+ void f() {
+   double d = 4;
+   switch (<caret>(int) d) {
+   }
+ }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/after7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/after7.java
new file mode 100644
index 0000000..570ee19
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/after7.java
@@ -0,0 +1,9 @@
+// "Cast to 'char'" "true"
+class a {
+ void f() {
+   double d = 4;
+   switch ('c') {
+     case <caret>(char) 3.3:
+   }
+ }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/after9.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/after9.java
new file mode 100644
index 0000000..6686e03
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/after9.java
@@ -0,0 +1,7 @@
+// "Cast to 'java.lang.String'" "true"
+class a {
+ void f() {
+   Object y = null;
+   String s = <caret>(String) y;
+ }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/afterTernary.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/afterTernary.java
new file mode 100644
index 0000000..1ed19b5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/afterTernary.java
@@ -0,0 +1,7 @@
+// "Cast to 'B'" "true"
+class A {
+ void f(B b) {
+   B s = <caret>b == null ? (B) this : b;
+ }
+}
+class B extends A {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/afterTernary2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/afterTernary2.java
new file mode 100644
index 0000000..91b378c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/afterTernary2.java
@@ -0,0 +1,7 @@
+// "Cast to 'B'" "true"
+class A {
+ void f(B b) {
+   B s = <caret>b == null ? null : (B) this;
+ }
+}
+class B extends A {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/afterTernaryImpossible.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/afterTernaryImpossible.java
new file mode 100644
index 0000000..56a86d6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/afterTernaryImpossible.java
@@ -0,0 +1,7 @@
+// "Cast to 'B'" "true"
+class A {
+ void f(B b) {
+   B s = <caret>(B) (b == null ? this : this);
+ }
+}
+class B extends A {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/before1.java
new file mode 100644
index 0000000..723202e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/before1.java
@@ -0,0 +1,7 @@
+// "Cast to 'char'" "true"
+class a {
+ void f(int i) {
+   <caret>char c = i;
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/before10.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/before10.java
new file mode 100644
index 0000000..0002111
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/before10.java
@@ -0,0 +1,16 @@
+// "Cast to 'A.Iterator<java.lang.String>'" "true"
+class A {
+    interface Iterator<T> {        
+    }
+
+    class List<T> {
+        Iterator<T> iterator() {
+            return null;
+        }
+    }
+
+    void method() {
+        List l = new List();
+        <caret>Iterator<String> it = (Iterator<Object>)l.iterator();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/before2.java
new file mode 100644
index 0000000..7bcccde
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/before2.java
@@ -0,0 +1,7 @@
+// "Cast to 'b'" "true"
+class a {
+ void f(a a) {
+   <caret>b b = a;
+ }
+}
+class b extends a {}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/before3.java
new file mode 100644
index 0000000..434a35f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/before3.java
@@ -0,0 +1,6 @@
+// "Cast to 'int'" "true"
+class a {
+ void f() {
+   int[] ii = { <caret>1.3 };
+ }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/before4.java
new file mode 100644
index 0000000..0708439
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/before4.java
@@ -0,0 +1,7 @@
+// "Cast to 'int'" "true"
+class a {
+ void f() {
+   int i;
+   <caret>i = 3.4f;
+ }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/before5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/before5.java
new file mode 100644
index 0000000..88b34b2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/before5.java
@@ -0,0 +1,7 @@
+// "Cast to 'float'" "true"
+class a {
+ float f() {
+   double d = 4;
+   return <caret>d;
+ }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/before6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/before6.java
new file mode 100644
index 0000000..fa7461b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/before6.java
@@ -0,0 +1,8 @@
+// "Cast to 'int'" "true"
+class a {
+ void f() {
+   double d = 4;
+   switch (<caret>d) {
+   }
+ }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/before7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/before7.java
new file mode 100644
index 0000000..f2a5035
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/before7.java
@@ -0,0 +1,9 @@
+// "Cast to 'char'" "true"
+class a {
+ void f() {
+   double d = 4;
+   switch ('c') {
+     case <caret>3.3:
+   }
+ }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/before8.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/before8.java
new file mode 100644
index 0000000..cebc8d3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/before8.java
@@ -0,0 +1,6 @@
+// "Cast to 'java.lang.String'" "false"
+class a {
+ void f() {
+   String s = <caret>1;
+ }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/before9.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/before9.java
new file mode 100644
index 0000000..026ed77
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/before9.java
@@ -0,0 +1,7 @@
+// "Cast to 'java.lang.String'" "true"
+class a {
+ void f() {
+   Object y = null;
+   String s = <caret>(Integer) y;
+ }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/beforeTernary.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/beforeTernary.java
new file mode 100644
index 0000000..3c07995
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/beforeTernary.java
@@ -0,0 +1,7 @@
+// "Cast to 'B'" "true"
+class A {
+ void f(B b) {
+   B s = <caret>b == null ? this : b;
+ }
+}
+class B extends A {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/beforeTernary2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/beforeTernary2.java
new file mode 100644
index 0000000..3fb7033
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/beforeTernary2.java
@@ -0,0 +1,7 @@
+// "Cast to 'B'" "true"
+class A {
+ void f(B b) {
+   B s = <caret>b == null ? null : this;
+ }
+}
+class B extends A {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/beforeTernaryImpossible.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/beforeTernaryImpossible.java
new file mode 100644
index 0000000..16bf951
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/beforeTernaryImpossible.java
@@ -0,0 +1,7 @@
+// "Cast to 'B'" "true"
+class A {
+ void f(B b) {
+   B s = <caret>b == null ? this : this;
+ }
+}
+class B extends A {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addVariableInitializer/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addVariableInitializer/after1.java
new file mode 100644
index 0000000..7f1e302
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addVariableInitializer/after1.java
@@ -0,0 +1,10 @@
+// "Initialize variable 'i'" "true"
+
+class AClass
+{
+  int f() {
+    int i = <caret><selection>0</selection>;
+    return i;
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addVariableInitializer/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addVariableInitializer/after2.java
new file mode 100644
index 0000000..23a08dd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addVariableInitializer/after2.java
@@ -0,0 +1,7 @@
+// "Initialize variable 'f'" "true"
+
+class AClass
+{
+    final AClass f = <caret><selection>null</selection>;
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addVariableInitializer/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addVariableInitializer/before1.java
new file mode 100644
index 0000000..41c2cb6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addVariableInitializer/before1.java
@@ -0,0 +1,10 @@
+// "Initialize variable 'i'" "true"
+
+class AClass
+{
+  int f() {
+    int i;
+    return <caret>i;
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addVariableInitializer/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addVariableInitializer/before2.java
new file mode 100644
index 0000000..4609177
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addVariableInitializer/before2.java
@@ -0,0 +1,7 @@
+// "Initialize variable 'f'" "true"
+
+class AClass
+{
+    final AClass f<caret>;
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addVariableInitializer/beforeDisabledForForeachParam.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addVariableInitializer/beforeDisabledForForeachParam.java
new file mode 100644
index 0000000..dd6a8b1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addVariableInitializer/beforeDisabledForForeachParam.java
@@ -0,0 +1,9 @@
+// "Initialize variable 'f'" "false"
+
+class AClass
+{
+  {
+    for(String f : <caret>f){}
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/afterAbort.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/afterAbort.java
new file mode 100644
index 0000000..e5d6373
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/afterAbort.java
@@ -0,0 +1,19 @@
+// "Annotate method as '@NotNull'" "true"
+import org.jetbrains.annotations.NotNull;
+
+class X {
+    @NotNull
+    String foo() {
+        return "X";
+    }
+}
+class Y extends X{
+    String foo() {
+        return "Y";
+    }
+}
+class Z extends Y {
+    String foo<caret>() { // trigger quick fix for inspection here
+        return "Z";
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/afterAnnoAll.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/afterAnnoAll.java
new file mode 100644
index 0000000..ffbc389
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/afterAnnoAll.java
@@ -0,0 +1,21 @@
+// "Annotate method as '@NotNull'" "true"
+import org.jetbrains.annotations.NotNull;
+
+class X {
+    @NotNull
+    String annotateBase() {
+        return "X";
+    }
+}
+class Y extends X{
+    @NotNull
+    String annotateBase() {
+        return "Y";
+    }
+}
+class Z extends Y {
+    @NotNull
+    String annotateBase<caret>() { // trigger quick fix for inspection here
+        return "Z";
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/afterConflict.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/afterConflict.java
new file mode 100644
index 0000000..aec5b43
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/afterConflict.java
@@ -0,0 +1,8 @@
+// "Remove annotation" "true"
+
+import org.jetbrains.annotations.*;
+
+class Foo {
+  <caret>@Nullable
+  String foo(){return "";}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/afterDoNotAnnol.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/afterDoNotAnnol.java
new file mode 100644
index 0000000..0e99ce1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/afterDoNotAnnol.java
@@ -0,0 +1,20 @@
+// "Annotate method as '@NotNull'" "true"
+import org.jetbrains.annotations.NotNull;
+
+class X {
+    @NotNull
+    String dontAnnotateBase() {
+        return "X";
+    }
+}
+class Y extends X{
+    String dontAnnotateBase() {
+        return "Y";
+    }
+}
+class Z extends Y {
+    @NotNull
+    String dontAnnotateBase<caret>() { // trigger quick fix for inspection here
+        return "Z";
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/afterOverriddenMethods.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/afterOverriddenMethods.java
new file mode 100644
index 0000000..4544ba6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/afterOverriddenMethods.java
@@ -0,0 +1,23 @@
+// "Annotate overridden methods as '@NotNull'" "true"
+import org.jetbrains.annotations.NotNull;
+
+abstract class P2 {
+    @NotNull<caret>
+    String foo(@NotNull P p) {
+        return "";
+    }
+}
+
+class PPP extends P2 {
+    @NotNull
+    String foo(P p) {
+        return super.foo(p);
+    }
+}
+class PPP2 extends P2 {
+
+    @NotNull
+    String foo(P p) {
+        return super.foo(p);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/afterOverriddenParameters.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/afterOverriddenParameters.java
new file mode 100644
index 0000000..24ee320
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/afterOverriddenParameters.java
@@ -0,0 +1,21 @@
+// "Annotate overridden method parameters as '@NotNull'" "true"
+import org.jetbrains.annotations.NotNull;
+
+abstract class P2 {
+    @NotNull
+    String foo(@NotNull<caret> P p) {
+        return "";
+    }
+}
+
+class PPP extends P2 {
+    String foo(@NotNull P p) {
+        return super.foo(p);
+    }
+}
+class PPP2 extends P2 {
+
+    String foo(@NotNull P p) {
+        return super.foo(p);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/afterPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/afterPrimitive.java
new file mode 100644
index 0000000..da87703
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/afterPrimitive.java
@@ -0,0 +1,7 @@
+// "Remove annotation" "true"
+
+import org.jetbrains.annotations.*;
+
+class Foo {
+  <caret>int foo(){return 0;}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/afterRemoveAnti.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/afterRemoveAnti.java
new file mode 100644
index 0000000..2a07589
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/afterRemoveAnti.java
@@ -0,0 +1,16 @@
+// "Annotate overridden methods as '@NotNull'" "true"
+
+import org.jetbrains.annotations.*;
+
+ public class XEM {
+     <caret>@NotNull
+     String f(){
+         return "";
+     }
+ }
+ class XC extends XEM {
+     @NotNull
+     String f() {
+         return "";
+     }
+ }
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/beforeAbort.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/beforeAbort.java
new file mode 100644
index 0000000..e5d6373
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/beforeAbort.java
@@ -0,0 +1,19 @@
+// "Annotate method as '@NotNull'" "true"
+import org.jetbrains.annotations.NotNull;
+
+class X {
+    @NotNull
+    String foo() {
+        return "X";
+    }
+}
+class Y extends X{
+    String foo() {
+        return "Y";
+    }
+}
+class Z extends Y {
+    String foo<caret>() { // trigger quick fix for inspection here
+        return "Z";
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/beforeAnnoAll.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/beforeAnnoAll.java
new file mode 100644
index 0000000..5fe3aa8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/beforeAnnoAll.java
@@ -0,0 +1,19 @@
+// "Annotate method as '@NotNull'" "true"
+import org.jetbrains.annotations.NotNull;
+
+class X {
+    @NotNull
+    String annotateBase() {
+        return "X";
+    }
+}
+class Y extends X{
+    String annotateBase() {
+        return "Y";
+    }
+}
+class Z extends Y {
+    String annotateBase<caret>() { // trigger quick fix for inspection here
+        return "Z";
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/beforeConflict.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/beforeConflict.java
new file mode 100644
index 0000000..f634cfa
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/beforeConflict.java
@@ -0,0 +1,8 @@
+// "Remove annotation" "true"
+
+import org.jetbrains.annotations.*;
+
+class Foo {
+  <caret>@NotNull @Nullable
+  String foo(){return "";}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/beforeDoNotAnnol.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/beforeDoNotAnnol.java
new file mode 100644
index 0000000..c2f6e49
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/beforeDoNotAnnol.java
@@ -0,0 +1,19 @@
+// "Annotate method as '@NotNull'" "true"
+import org.jetbrains.annotations.NotNull;
+
+class X {
+    @NotNull
+    String dontAnnotateBase() {
+        return "X";
+    }
+}
+class Y extends X{
+    String dontAnnotateBase() {
+        return "Y";
+    }
+}
+class Z extends Y {
+    String dontAnnotateBase<caret>() { // trigger quick fix for inspection here
+        return "Z";
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/beforeOverriddenMethods.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/beforeOverriddenMethods.java
new file mode 100644
index 0000000..e817980
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/beforeOverriddenMethods.java
@@ -0,0 +1,21 @@
+// "Annotate overridden methods as '@NotNull'" "true"
+import org.jetbrains.annotations.NotNull;
+
+abstract class P2 {
+    @NotNull<caret>
+    String foo(@NotNull P p) {
+        return "";
+    }
+}
+
+class PPP extends P2 {
+    String foo(P p) {
+        return super.foo(p);
+    }
+}
+class PPP2 extends P2 {
+
+    String foo(P p) {
+        return super.foo(p);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/beforeOverriddenParameters.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/beforeOverriddenParameters.java
new file mode 100644
index 0000000..4f3a131
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/beforeOverriddenParameters.java
@@ -0,0 +1,21 @@
+// "Annotate overridden method parameters as '@NotNull'" "true"
+import org.jetbrains.annotations.NotNull;
+
+abstract class P2 {
+    @NotNull
+    String foo(@NotNull<caret> P p) {
+        return "";
+    }
+}
+
+class PPP extends P2 {
+    String foo(P p) {
+        return super.foo(p);
+    }
+}
+class PPP2 extends P2 {
+
+    String foo(P p) {
+        return super.foo(p);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/beforePrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/beforePrimitive.java
new file mode 100644
index 0000000..bf21866
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/beforePrimitive.java
@@ -0,0 +1,8 @@
+// "Remove annotation" "true"
+
+import org.jetbrains.annotations.*;
+
+class Foo {
+  <caret>@NotNull
+  int foo(){return 0;}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/beforeRemoveAnti.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/beforeRemoveAnti.java
new file mode 100644
index 0000000..78cf743
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/beforeRemoveAnti.java
@@ -0,0 +1,16 @@
+// "Annotate overridden methods as '@NotNull'" "true"
+
+import org.jetbrains.annotations.*;
+
+ public class XEM {
+     <caret>@NotNull
+     String f(){
+         return "";
+     }
+ }
+ class XC extends XEM {
+     @Nullable
+     String f() {
+         return "";
+     }
+ }
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/afterClassObjectAccess.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/afterClassObjectAccess.java
new file mode 100644
index 0000000..8a87bb5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/afterClassObjectAccess.java
@@ -0,0 +1,8 @@
+// "Replace with lambda" "true"
+class Test {
+  {
+    ((Runnable) () -> {
+        //To change body of implemented methods use File | Settings | File Templates.
+    }).getClass();;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/afterComparable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/afterComparable.java
new file mode 100644
index 0000000..f787f50
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/afterComparable.java
@@ -0,0 +1,6 @@
+// "Replace with lambda" "true"
+class Test {
+  {
+    Comparable<String> c = o -> 0; 
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/afterComparableNeedToBeFinal.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/afterComparableNeedToBeFinal.java
new file mode 100644
index 0000000..fb452bc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/afterComparableNeedToBeFinal.java
@@ -0,0 +1,14 @@
+// "Replace with lambda" "true"
+class Test {
+  {
+    Comparable<String> c = o -> {
+      Runnable r = new Runnable() {
+        @Override
+        public void run() {
+          System.out.println(o);
+        }
+      }; 
+      return 0;
+    }; 
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/afterFormalTypes.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/afterFormalTypes.java
new file mode 100644
index 0000000..b39fca9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/afterFormalTypes.java
@@ -0,0 +1,14 @@
+// "Replace with lambda" "true"
+import java.util.*;
+class Test2 {
+
+    interface I<X> {
+        X foo(List<X> list);
+    }
+
+    static <T> I<T> bar(I<T> i){return i;}
+ 
+    {
+        bar((List<String> list) -> null);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/afterMultilineComparable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/afterMultilineComparable.java
new file mode 100644
index 0000000..4c653e6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/afterMultilineComparable.java
@@ -0,0 +1,9 @@
+// "Replace with lambda" "true"
+class Test {
+  {
+    Comparable<String> c = o -> {
+      System.out.println();
+      return 0;
+    }; 
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/afterNeedToQualifyAccess.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/afterNeedToQualifyAccess.java
new file mode 100644
index 0000000..050c310
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/afterNeedToQualifyAccess.java
@@ -0,0 +1,16 @@
+// "Replace with lambda" "true"
+class Test {
+  interface I {
+
+  }
+  interface Bar extends I {
+    int smth = 0;
+    int compare(String o1, String o2);
+  }
+  {
+    I bar2 = (Bar) (o1, o2) -> {
+      System.out.println(Bar.smth);
+      return 0;
+    };
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/afterQualifiedThis.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/afterQualifiedThis.java
new file mode 100644
index 0000000..2b40ee0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/afterQualifiedThis.java
@@ -0,0 +1,14 @@
+// "Replace with lambda" "true"
+class Test {
+  interface Eff<A, B> {
+    B f(A a);
+  }
+
+  interface InOut<A> {
+    A run() throws IOException;
+
+    <B> InOut<B> bind(final Eff<A, InOut<B>> f) default {
+      return () -> f.f(InOut.this.run()).run();
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/afterRunnable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/afterRunnable.java
new file mode 100644
index 0000000..8860a7c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/afterRunnable.java
@@ -0,0 +1,8 @@
+// "Replace with lambda" "true"
+class Test {
+  {
+    Runnable r = () -> {
+      System.out.println("");
+    };
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/afterRunnableInArrayInitializer.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/afterRunnableInArrayInitializer.java
new file mode 100644
index 0000000..0688e8b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/afterRunnableInArrayInitializer.java
@@ -0,0 +1,8 @@
+// "Replace with lambda" "true"
+class Test {
+  {
+    Runnable[] r = new Runnable[] {() -> {
+      System.out.println("");
+    }};
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/afterVarWithSuperTypeDeclared.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/afterVarWithSuperTypeDeclared.java
new file mode 100644
index 0000000..0d9ba1c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/afterVarWithSuperTypeDeclared.java
@@ -0,0 +1,12 @@
+// "Replace with lambda" "true"
+class Test {
+  interface I {
+
+  }
+  interface Bar extends I {
+    int compare(String o1, String o2);
+  }
+  {
+    I bar2 = (Bar) (o1, o2) -> 0;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeClassAsSuperType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeClassAsSuperType.java
new file mode 100644
index 0000000..fe704e4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeClassAsSuperType.java
@@ -0,0 +1,16 @@
+// "Replace with lambda" "false"
+class Test {
+  {
+    A a = new A<caret>("str") {
+        @Override
+        public void foo() {
+        }
+    };
+  }
+  static class A {
+    A(String s) {
+    }
+
+    public void foo(){}
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeClassObjectAccess.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeClassObjectAccess.java
new file mode 100644
index 0000000..2df1edd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeClassObjectAccess.java
@@ -0,0 +1,11 @@
+// "Replace with lambda" "true"
+class Test {
+  {
+    new Ru<caret>nnable() {
+        @Override
+        public void run() {
+            //To change body of implemented methods use File | Settings | File Templates.
+        }
+    }.getClass();;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeComparable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeComparable.java
new file mode 100644
index 0000000..cdaaa38
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeComparable.java
@@ -0,0 +1,11 @@
+// "Replace with lambda" "true"
+class Test {
+  {
+    Comparable<String> c = new Compa<caret>rable<String>() {
+      @Override
+      public int compareTo(String o) {
+        return 0;
+      }
+    }; 
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeComparableNeedToBeFinal.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeComparableNeedToBeFinal.java
new file mode 100644
index 0000000..57f182d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeComparableNeedToBeFinal.java
@@ -0,0 +1,17 @@
+// "Replace with lambda" "true"
+class Test {
+  {
+    Comparable<String> c = new Compa<caret>rable<String>() {
+      @Override
+      public int compareTo(final String o) {
+        Runnable r = new Runnable() {
+          @Override
+          public void run() {
+            System.out.println(o);
+          }
+        }; 
+        return 0;
+      }
+    }; 
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeFieldInAnonymous.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeFieldInAnonymous.java
new file mode 100644
index 0000000..3dc5191
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeFieldInAnonymous.java
@@ -0,0 +1,18 @@
+// "Replace with lambda" "false"
+class Test {
+  interface I {
+
+  }
+  interface Bar extends I {
+    int compare(String o1, String o2);
+  }
+  {
+    I bar2 = new Ba<caret>r() {
+      int k;
+      @Override
+      public int compare(String o1, String o2) {
+        return 0;
+      }
+    };
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeFormalTypes.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeFormalTypes.java
new file mode 100644
index 0000000..2b28afb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeFormalTypes.java
@@ -0,0 +1,19 @@
+// "Replace with lambda" "true"
+import java.util.*;
+class Test2 {
+
+    interface I<X> {
+        X foo(List<X> list);
+    }
+
+    static <T> I<T> bar(I<T> i){return i;}
+ 
+    {
+        bar(new I<Stri<caret>ng>() {
+            @Override
+            public String foo(List<String> list) {
+                return null;  //To change body of implemented methods use File | Settings | File Templates.
+            }
+        });
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeLocalVariableConflicts.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeLocalVariableConflicts.java
new file mode 100644
index 0000000..d3b7cb6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeLocalVariableConflicts.java
@@ -0,0 +1,13 @@
+// "Replace with lambda" "false"
+class Foo11 {
+  Runnable runnable = new Runnable() {
+    public void run() {
+      int x = 5;
+      new Runn<caret>able() {
+        public void run () {
+          int x = 10;
+        }
+      } ;
+    }
+  };
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeMultilineComparable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeMultilineComparable.java
new file mode 100644
index 0000000..8a2ed03
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeMultilineComparable.java
@@ -0,0 +1,12 @@
+// "Replace with lambda" "true"
+class Test {
+  {
+    Comparable<String> c = new Compa<caret>rable<String>() {
+      @Override
+      public int compareTo(String o) {
+        System.out.println();
+        return 0;
+      }
+    }; 
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeNeedToQualifyAccess.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeNeedToQualifyAccess.java
new file mode 100644
index 0000000..b6de916
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeNeedToQualifyAccess.java
@@ -0,0 +1,19 @@
+// "Replace with lambda" "true"
+class Test {
+  interface I {
+
+  }
+  interface Bar extends I {
+    int smth = 0;
+    int compare(String o1, String o2);
+  }
+  {
+    I bar2 = new Ba<caret>r() {
+      @Override
+      public int compare(String o1, String o2) {
+        System.out.println(smth);
+        return 0;
+      }
+    };
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeNoMethodBody.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeNoMethodBody.java
new file mode 100644
index 0000000..7803732
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeNoMethodBody.java
@@ -0,0 +1,9 @@
+// "Replace with lambda" "false"
+class Test {
+  {
+    Runnable a = new Run<caret>nable() {
+        @Override
+        public void run()
+    };
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeNonQGetClass.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeNonQGetClass.java
new file mode 100644
index 0000000..4b8195e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeNonQGetClass.java
@@ -0,0 +1,11 @@
+// "Replace with lambda" "false"
+class Test {
+  {
+    new Ru<caret>nnable() {
+        @Override
+        public void run() {
+            Class c = getClass();
+        }
+    };
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeQualifiedThis.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeQualifiedThis.java
new file mode 100644
index 0000000..a23bd40
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeQualifiedThis.java
@@ -0,0 +1,19 @@
+// "Replace with lambda" "true"
+class Test {
+  interface Eff<A, B> {
+    B f(A a);
+  }
+
+  interface InOut<A> {
+    A run() throws IOException;
+
+    <B> InOut<B> bind(final Eff<A, InOut<B>> f) default {
+      return new In<caret>Out<B>() {
+        @Override
+        public B run() throws IOException {
+          return f.f(InOut.this.run()).run();
+        }
+      };
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeRecursive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeRecursive.java
new file mode 100644
index 0000000..5ec17f8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeRecursive.java
@@ -0,0 +1,16 @@
+// "Replace with lambda" "false"
+class Test {
+  public interface I {
+    int m();
+  }
+  {
+    I i = new <caret>I() {
+      @Override
+      public int m() {
+        m();
+        return 0;
+      }
+    };
+
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeRunnable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeRunnable.java
new file mode 100644
index 0000000..5a20f0e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeRunnable.java
@@ -0,0 +1,11 @@
+// "Replace with lambda" "true"
+class Test {
+  {
+    Runnable r = new Run<caret>nable() {
+      @Override
+      public void run() {
+        System.out.println("");
+      }
+    };
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeRunnableInArrayInitializer.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeRunnableInArrayInitializer.java
new file mode 100644
index 0000000..0b52333
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeRunnableInArrayInitializer.java
@@ -0,0 +1,11 @@
+// "Replace with lambda" "true"
+class Test {
+  {
+    Runnable[] r = new Runnable[] {new Run<caret>nable() {
+      @Override
+      public void run() {
+        System.out.println("");
+      }
+    }};
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeRunnableWithHelpMethod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeRunnableWithHelpMethod.java
new file mode 100644
index 0000000..967d927
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeRunnableWithHelpMethod.java
@@ -0,0 +1,12 @@
+// "Replace with lambda" "false"
+class Test {
+  {
+    Runnable r = new Ru<caret>nnable() {
+        @Override
+        public void run() {
+           helper();
+        }
+        private void helper(){}
+    };
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeThisRefInside.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeThisRefInside.java
new file mode 100644
index 0000000..9bfb884
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeThisRefInside.java
@@ -0,0 +1,11 @@
+// "Replace with lambda" "false"
+class Test {
+  {
+    Runnable x = new Runn<caret>able() {
+      public void run() {
+        this.toString();
+      }
+    };
+
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeVarWithSuperTypeDeclared.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeVarWithSuperTypeDeclared.java
new file mode 100644
index 0000000..e98ee56
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeVarWithSuperTypeDeclared.java
@@ -0,0 +1,17 @@
+// "Replace with lambda" "true"
+class Test {
+  interface I {
+
+  }
+  interface Bar extends I {
+    int compare(String o1, String o2);
+  }
+  {
+    I bar2 = new Ba<caret>r() {
+      @Override
+      public int compare(String o1, String o2) {
+        return 0;
+      }
+    };
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2methodReference/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2methodReference/after1.java
new file mode 100644
index 0000000..d5d6320
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2methodReference/after1.java
@@ -0,0 +1,13 @@
+// "Replace with method reference" "true"
+class Test {
+  interface Bar {
+    int compare(String o1, String o2);
+  }
+    static int c(String o1, String o2) {
+        return 0;
+    }
+
+  {
+    Bar bar2 = Test::c;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2methodReference/afterInsertCast.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2methodReference/afterInsertCast.java
new file mode 100644
index 0000000..f0dffef
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2methodReference/afterInsertCast.java
@@ -0,0 +1,14 @@
+// "Replace with method reference" "true"
+class Test {
+  interface I {}
+  interface Bar extends I {
+    int compare(String o1, String o2);
+  }
+    static int c(String o1, String o2) {
+        return 0;
+    }
+
+  {
+    I bar2 = (Bar) Test::c;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2methodReference/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2methodReference/before1.java
new file mode 100644
index 0000000..7ca24f1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2methodReference/before1.java
@@ -0,0 +1,18 @@
+// "Replace with method reference" "true"
+class Test {
+  interface Bar {
+    int compare(String o1, String o2);
+  }
+    static int c(String o1, String o2) {
+        return 0;
+    }
+
+  {
+    Bar bar2 = new B<caret>ar() {
+        @Override
+        public int compare(final String o1, final String o2) {
+            return c(o1, o2);
+        }
+    };
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2methodReference/beforeInsertCast.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2methodReference/beforeInsertCast.java
new file mode 100644
index 0000000..9a0caa2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2methodReference/beforeInsertCast.java
@@ -0,0 +1,19 @@
+// "Replace with method reference" "true"
+class Test {
+  interface I {}
+  interface Bar extends I {
+    int compare(String o1, String o2);
+  }
+    static int c(String o1, String o2) {
+        return 0;
+    }
+
+  {
+    I bar2 = new B<caret>ar() {
+        @Override
+        public int compare(final String o1, final String o2) {
+            return c(o1, o2);
+        }
+    };
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2methodReference/beforeQualifierDoesntUseParams.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2methodReference/beforeQualifierDoesntUseParams.java
new file mode 100644
index 0000000..7449a3b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2methodReference/beforeQualifierDoesntUseParams.java
@@ -0,0 +1,16 @@
+// "Replace with method reference" "false"
+interface Foo<A, B> {
+    B f(A a);
+}
+
+interface DeeBee<A> {
+    A run(Void c) throws SQLException;
+
+    <B> DeeBee<B> bind(final Foo<A, DeeBee<B>> f) default {
+        return new Dee<caret>Bee<B> () {
+            public B run(final Void c) throws SQLException {
+               return f.f(null).run(c);
+            }
+        };
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2methodReference/beforeQualifierUsesParams.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2methodReference/beforeQualifierUsesParams.java
new file mode 100644
index 0000000..0526753
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2methodReference/beforeQualifierUsesParams.java
@@ -0,0 +1,16 @@
+// "Replace with method reference" "false"
+interface Foo<A, B> {
+    B f(A a);
+}
+
+interface DeeBee<A> {
+    A run(Void c) throws SQLException;
+
+    <B> DeeBee<B> bind(final Foo<A, DeeBee<B>> f) default {
+        return new Dee<caret>Bee<B> () {
+            public B run(final Void c) throws SQLException {
+               return f.f(DeeBee.this.run(c)).run(c);
+            }
+        };
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2methodReference/beforeRecursive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2methodReference/beforeRecursive.java
new file mode 100644
index 0000000..6b58d66
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2methodReference/beforeRecursive.java
@@ -0,0 +1,15 @@
+// "Replace with method reference" "false"
+class Test {
+  public interface I {
+    int m();
+  }
+  {
+    I i = new <caret>I() {
+      @Override
+      public int m() {
+        return m();
+      }
+    };
+
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/assignFieldFromParameter/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/assignFieldFromParameter/after1.java
new file mode 100644
index 0000000..eb5bdbd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/assignFieldFromParameter/after1.java
@@ -0,0 +1,8 @@
+// "Assign Parameter to Field 'myId'" "true"
+
+class Person {
+    int myId;
+    void f(int id) {
+        myId = id;<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/assignFieldFromParameter/afterAssignmentOrder.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/assignFieldFromParameter/afterAssignmentOrder.java
new file mode 100644
index 0000000..0adf10b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/assignFieldFromParameter/afterAssignmentOrder.java
@@ -0,0 +1,10 @@
+// "Assign Parameter to Field 'myName'" "true"
+
+class Person {
+    int myId;
+    String myName;
+    void f(int id, String name) {
+        myId = id;
+        myName = name;<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/assignFieldFromParameter/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/assignFieldFromParameter/before1.java
new file mode 100644
index 0000000..4e80c82
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/assignFieldFromParameter/before1.java
@@ -0,0 +1,7 @@
+// "Assign Parameter to Field 'myId'" "true"
+
+class Person {
+    int myId;
+    void f(int id<caret>) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/assignFieldFromParameter/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/assignFieldFromParameter/before2.java
new file mode 100644
index 0000000..bf72f48
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/assignFieldFromParameter/before2.java
@@ -0,0 +1,8 @@
+// "Assign Parameter to Field 'myId'" "false"
+
+class Person {
+    int myId;
+    void f(int id<caret>) {
+        myId = id;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/assignFieldFromParameter/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/assignFieldFromParameter/before3.java
new file mode 100644
index 0000000..8d06858
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/assignFieldFromParameter/before3.java
@@ -0,0 +1,7 @@
+// "Assign Parameter to Field 'ourId'" "false"
+
+class Person {
+    int ourId;
+    static void f(int id<caret>) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/assignFieldFromParameter/beforeAssignmentOrder.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/assignFieldFromParameter/beforeAssignmentOrder.java
new file mode 100644
index 0000000..2430032
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/assignFieldFromParameter/beforeAssignmentOrder.java
@@ -0,0 +1,9 @@
+// "Assign Parameter to Field 'myName'" "true"
+
+class Person {
+    int myId;
+    String myName;
+    void f(int id, String name<caret>) {
+        myId = id;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/afterAlreadyExistingFields.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/afterAlreadyExistingFields.java
new file mode 100644
index 0000000..acee0e0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/afterAlreadyExistingFields.java
@@ -0,0 +1,14 @@
+// "Bind Method Parameters to Fields" "true"
+
+class A{
+      private final String myP;
+      private final String myLongParameterName;
+      private final String myName;
+  
+      void f(String p, String longParameterName, String shortParameterName){
+          myP = p;
+          myLongParameterName = longParameterName;
+          myName = shortParameterName;
+      }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/afterCaretOnMethod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/afterCaretOnMethod.java
new file mode 100644
index 0000000..4f063b6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/afterCaretOnMethod.java
@@ -0,0 +1,12 @@
+// "Bind Method Parameters to Fields" "true"
+
+class A{
+    private int myP1;
+    private int myP2;
+
+    void method(int p1, int p2){
+        myP1 = p1;
+        myP2 = p2;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/afterNotNull.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/afterNotNull.java
new file mode 100644
index 0000000..1bc8122
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/afterNotNull.java
@@ -0,0 +1,18 @@
+// "Bind Constructor Parameters to Fields" "true"
+
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+public class TestBefore {
+
+    @NotNull
+    private final String myName;
+    @NotNull
+    private final String myName2;
+
+    public TestBefore(@NotNull String name, @NotNull String name2) {
+        super();
+        myName = name;
+        myName2 = name2;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/afterNullable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/afterNullable.java
new file mode 100644
index 0000000..7d457f1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/afterNullable.java
@@ -0,0 +1,18 @@
+// "Bind Constructor Parameters to Fields" "true"
+
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+public class TestBefore {
+
+    @Nullable
+    private final String myName;
+    @Nullable
+    private final String myName2;
+
+    public TestBefore(@Nullable String name, @Nullable String name2) {
+        super();
+        myName = name;
+        myName2 = name2;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/afterSimple.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/afterSimple.java
new file mode 100644
index 0000000..673c1773
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/afterSimple.java
@@ -0,0 +1,16 @@
+// "Bind Constructor Parameters to Fields" "true"
+
+class Bar {
+
+    private final int myI1;
+    private final int myI2;
+    private final String myI3;
+    private int myi1;
+    private int myi2;
+
+    Bar(int i1, int i2, String i3) {
+        myI1 = i1;
+        myI2 = i2;
+        myI3 = i3;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/afterSimpleTypeParameter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/afterSimpleTypeParameter.java
new file mode 100644
index 0000000..ce5ccf1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/afterSimpleTypeParameter.java
@@ -0,0 +1,12 @@
+// "Bind Method Parameters to Fields" "true"
+
+class A{
+    private Object myP1;
+    private Object myP2;
+
+    <T> void f(T p1, T p2){
+        myP1 = p1;
+        myP2 = p2;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/afterTypeParameter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/afterTypeParameter.java
new file mode 100644
index 0000000..35fb954
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/afterTypeParameter.java
@@ -0,0 +1,12 @@
+// "Bind Method Parameters to Fields" "true"
+
+class A{
+    private String myP1;
+    private String myP2;
+
+    <T extends String> void f(T p1, T p2){
+        myP1 = p1;
+        myP2 = p2;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/beforeAlreadyExistingFields.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/beforeAlreadyExistingFields.java
new file mode 100644
index 0000000..eae2e0b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/beforeAlreadyExistingFields.java
@@ -0,0 +1,11 @@
+// "Bind Method Parameters to Fields" "true"
+
+class A{
+      private final String myP;
+      private final String myLongParameterName;
+      private final String myName;
+  
+      void <caret>f(String p, String longParameterName, String shortParameterName){
+      }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/beforeCaretOnMethod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/beforeCaretOnMethod.java
new file mode 100644
index 0000000..70c7d1c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/beforeCaretOnMethod.java
@@ -0,0 +1,7 @@
+// "Bind Method Parameters to Fields" "true"
+
+class A{
+    void <caret>method(int p1, int p2){
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/beforeCaretOnMethodWithOnlyAssignedParams.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/beforeCaretOnMethodWithOnlyAssignedParams.java
new file mode 100644
index 0000000..6cb3b5c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/beforeCaretOnMethodWithOnlyAssignedParams.java
@@ -0,0 +1,10 @@
+// "Bind Method Parameters to Fields" "false"
+
+class A{
+      private final String myP1;
+  
+      void <caret>f(String p1){
+          myP1 = p1;
+      }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/beforeCaretOnMethodWithTwoAssignedParams.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/beforeCaretOnMethodWithTwoAssignedParams.java
new file mode 100644
index 0000000..133a7aa
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/beforeCaretOnMethodWithTwoAssignedParams.java
@@ -0,0 +1,12 @@
+// "Bind Method Parameters to Fields" "false"
+
+class A{
+      private final String myP1;
+      private final String myP2;
+  
+      void <caret>f(String p1, String p2){
+          myP1 = p1;
+          myP2 = p2;
+      }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/beforeCaretOnMethodWithoutParams.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/beforeCaretOnMethodWithoutParams.java
new file mode 100644
index 0000000..604baee
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/beforeCaretOnMethodWithoutParams.java
@@ -0,0 +1,7 @@
+// "Bind Method Parameters to Fields" "false"
+
+class A{
+    void <caret>f(){
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/beforeNotNull.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/beforeNotNull.java
new file mode 100644
index 0000000..304dab9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/beforeNotNull.java
@@ -0,0 +1,11 @@
+// "Bind Constructor Parameters to Fields" "true"
+
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+public class TestBefore {
+
+    public TestBefore(@NotNull String name<caret>, @NotNull String name2) {
+        super();
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/beforeNullable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/beforeNullable.java
new file mode 100644
index 0000000..8fb8304
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/beforeNullable.java
@@ -0,0 +1,11 @@
+// "Bind Constructor Parameters to Fields" "true"
+
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+public class TestBefore {
+
+    public TestBefore(@Nullable String name<caret>, @Nullable String name2) {
+        super();
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/beforeSimple.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/beforeSimple.java
new file mode 100644
index 0000000..608d606
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/beforeSimple.java
@@ -0,0 +1,10 @@
+// "Bind Constructor Parameters to Fields" "true"
+
+class Bar {
+
+    private int myi1;
+    private int myi2;
+
+    Bar(int <caret>i1, int i2, String i3) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/beforeSimpleTypeParameter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/beforeSimpleTypeParameter.java
new file mode 100644
index 0000000..9399014
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/beforeSimpleTypeParameter.java
@@ -0,0 +1,7 @@
+// "Bind Method Parameters to Fields" "true"
+
+class A{
+    <T> void f(T p<caret>1, T p2){
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/beforeTypeParameter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/beforeTypeParameter.java
new file mode 100644
index 0000000..28e7b25
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bindFieldsFromParameters/beforeTypeParameter.java
@@ -0,0 +1,7 @@
+// "Bind Method Parameters to Fields" "true"
+
+class A{
+    <T extends String> void f(T p<caret>1, T p2){
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/breakStringOnLineBreaks/afterAll.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/breakStringOnLineBreaks/afterAll.java
new file mode 100644
index 0000000..c921867
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/breakStringOnLineBreaks/afterAll.java
@@ -0,0 +1,7 @@
+// "Break string on '\n'" "true"
+
+class A {
+    String s = "Hello,\n\r" +
+            "world\n" +
+            "!\n";
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/breakStringOnLineBreaks/beforeAll.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/breakStringOnLineBreaks/beforeAll.java
new file mode 100644
index 0000000..a87961b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/breakStringOnLineBreaks/beforeAll.java
@@ -0,0 +1,5 @@
+// "Break string on '\n'" "true"
+
+class A {
+    String s = "Hello,\n\rwor<caret>ld\n!\n";
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/breakStringOnLineBreaks/beforeLastSlashN.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/breakStringOnLineBreaks/beforeLastSlashN.java
new file mode 100644
index 0000000..0de2f83
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/breakStringOnLineBreaks/beforeLastSlashN.java
@@ -0,0 +1,5 @@
+// "Break string on '\n'" "false"
+
+class A {
+  String s = "Hello!\n";
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/breakStringOnLineBreaks/beforeLastSlashNSlashR.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/breakStringOnLineBreaks/beforeLastSlashNSlashR.java
new file mode 100644
index 0000000..c18a560
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/breakStringOnLineBreaks/beforeLastSlashNSlashR.java
@@ -0,0 +1,5 @@
+// "Break string on '\n'" "false"
+
+class A {
+  String s = "Hello!\n\r";
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bringVariableIntoScope/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bringVariableIntoScope/after1.java
new file mode 100644
index 0000000..2adaa34
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bringVariableIntoScope/after1.java
@@ -0,0 +1,11 @@
+// "Bring 'int i' into Scope" "true"
+class a {
+    void foo () {
+        int i = 0;
+        try {
+            i = 0;
+        } catch (Exception e) {
+            int j = i;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bringVariableIntoScope/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bringVariableIntoScope/after2.java
new file mode 100644
index 0000000..6e02ab1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bringVariableIntoScope/after2.java
@@ -0,0 +1,14 @@
+// "Bring 'int i' into Scope" "true"
+class a {
+    void foo (int y) {
+        int i;
+        while (y != 0) {
+            {
+                {
+                    i = 0;
+                }
+            }
+        }
+        <caret>i = 0;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bringVariableIntoScope/after3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bringVariableIntoScope/after3.java
new file mode 100644
index 0000000..f72d105
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bringVariableIntoScope/after3.java
@@ -0,0 +1,14 @@
+// "Bring 'int i' into Scope" "true"
+class a {
+    void foo (int y) {
+        int i = 0;
+        while (y != 0) {
+            {
+                {
+                    i = 0;
+                }
+            }
+        }
+        int j = i;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bringVariableIntoScope/after4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bringVariableIntoScope/after4.java
new file mode 100644
index 0000000..485b1ff
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bringVariableIntoScope/after4.java
@@ -0,0 +1,11 @@
+// "Bring 'int i' into Scope" "true"
+class a {
+    public void foo() {
+        int i;
+        if (true) {
+            i = 0;
+        } else {
+            int j = i;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bringVariableIntoScope/afterFor.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bringVariableIntoScope/afterFor.java
new file mode 100644
index 0000000..0e445d6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bringVariableIntoScope/afterFor.java
@@ -0,0 +1,9 @@
+// "Bring 'int i' into Scope" "true"
+class a {
+    public void foo() {
+        int i;
+        for (i = 0; i < 10; i++) {
+        }
+        i = 0;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bringVariableIntoScope/afterInit.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bringVariableIntoScope/afterInit.java
new file mode 100644
index 0000000..6ffe6a5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bringVariableIntoScope/afterInit.java
@@ -0,0 +1,11 @@
+// "Bring 'String con' into Scope" "true"
+class a {
+    private void ffff(String c) {
+        String con = null;
+        try {
+            con = null;
+        } finally {
+            ffff(con); // This method doesn't mind con == null.
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bringVariableIntoScope/afterMultipleDeclarations.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bringVariableIntoScope/afterMultipleDeclarations.java
new file mode 100644
index 0000000..a0ab1ef
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bringVariableIntoScope/afterMultipleDeclarations.java
@@ -0,0 +1,11 @@
+// "Bring 'int j' into Scope" "true"
+class a {
+    void foo() {
+        int j;
+        {
+            int i;
+            j = 10;
+        }
+        System.out.println(<caret>j); // invoke "bring 'int j' into scope" quickfix here
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bringVariableIntoScope/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bringVariableIntoScope/before1.java
new file mode 100644
index 0000000..ae92909
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bringVariableIntoScope/before1.java
@@ -0,0 +1,10 @@
+// "Bring 'int i' into Scope" "true"
+class a {
+    void foo () {
+        try {
+            int i = 0;
+        } catch (Exception e) {
+            int j = <caret>i;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bringVariableIntoScope/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bringVariableIntoScope/before2.java
new file mode 100644
index 0000000..fcf7e32
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bringVariableIntoScope/before2.java
@@ -0,0 +1,13 @@
+// "Bring 'int i' into Scope" "true"
+class a {
+    void foo (int y) {
+        while (y != 0) {
+            {
+                {
+                    final int i = 0;
+                }
+            }
+        }
+        <caret>i = 0;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bringVariableIntoScope/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bringVariableIntoScope/before3.java
new file mode 100644
index 0000000..74307ec
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bringVariableIntoScope/before3.java
@@ -0,0 +1,13 @@
+// "Bring 'int i' into Scope" "true"
+class a {
+    void foo (int y) {
+        while (y != 0) {
+            {
+                {
+                    final int i = 0;
+                }
+            }
+        }
+        int j = <caret>i;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bringVariableIntoScope/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bringVariableIntoScope/before4.java
new file mode 100644
index 0000000..2e8a37d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bringVariableIntoScope/before4.java
@@ -0,0 +1,10 @@
+// "Bring 'int i' into Scope" "true"
+class a {
+    public void foo() {
+        if (true) {
+            int i = 0;
+        } else {
+            int j = <caret>i;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bringVariableIntoScope/beforeFor.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bringVariableIntoScope/beforeFor.java
new file mode 100644
index 0000000..9cb916e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bringVariableIntoScope/beforeFor.java
@@ -0,0 +1,7 @@
+// "Bring 'int i' into Scope" "true"
+class a {
+    public void foo() {
+        for (int i = 0; i < 10; i++) {  }
+        <caret>i = 0;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bringVariableIntoScope/beforeInit.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bringVariableIntoScope/beforeInit.java
new file mode 100644
index 0000000..7016f3d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bringVariableIntoScope/beforeInit.java
@@ -0,0 +1,9 @@
+// "Bring 'String con' into Scope" "true"
+class a {
+    private void ffff(String c){
+        try { String con = null;  }
+        finally {
+            ffff(<caret>con); // This method doesn't mind con == null.
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bringVariableIntoScope/beforeMultipleDeclarations.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bringVariableIntoScope/beforeMultipleDeclarations.java
new file mode 100644
index 0000000..8aa9e71f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/bringVariableIntoScope/beforeMultipleDeclarations.java
@@ -0,0 +1,9 @@
+// "Bring 'int j' into Scope" "true"
+class a {
+    void foo() {
+    {
+      int i, j = 10;
+    }
+    System.out.println(<caret>j); // invoke "bring 'int j' into scope" quickfix here
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castConstructorParameters/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castConstructorParameters/after1.java
new file mode 100644
index 0000000..c2c32a9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castConstructorParameters/after1.java
@@ -0,0 +1,11 @@
+// "Cast parameter to 'a'" "true"
+class x {}
+class a extends x {
+    a(a a) {}
+    a(x x) {}
+
+    void f(Runnable r) {
+        new a(<caret>(a) r);
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castConstructorParameters/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castConstructorParameters/after2.java
new file mode 100644
index 0000000..9284eab
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castConstructorParameters/after2.java
@@ -0,0 +1,11 @@
+// "Cast parameter to 'x'" "true"
+class x {}
+class a extends x {
+    a(a a) {}
+    a(x x) {}
+
+    void f(Runnable r) {
+        new a(<caret>(x) r);
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castConstructorParameters/after3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castConstructorParameters/after3.java
new file mode 100644
index 0000000..b160197
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castConstructorParameters/after3.java
@@ -0,0 +1,13 @@
+// "Cast 1st parameter to 'double'" "true"
+class x {}
+class a extends x {
+    a(a a) {}
+    a(x x) {}
+    a(int i, double d) {}
+    a(double d, int i) {}
+
+    void f(Runnable r) {
+        new a(<caret>(double) 1, 1);
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castConstructorParameters/after4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castConstructorParameters/after4.java
new file mode 100644
index 0000000..7013357
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castConstructorParameters/after4.java
@@ -0,0 +1,13 @@
+// "Cast 2nd parameter to 'double'" "true"
+class x {}
+class a extends x {
+    a(a a) {}
+    a(x x) {}
+    a(int i, double d) {}
+    a(double d, int i) {}
+
+    void f(Runnable r) {
+        new a(<caret>1, (double) 1);
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castConstructorParameters/after5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castConstructorParameters/after5.java
new file mode 100644
index 0000000..f25ef3d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castConstructorParameters/after5.java
@@ -0,0 +1,19 @@
+// "Cast parameter to 'GeneralTest.B'" "true"
+import java.util.*;
+class GeneralTest {
+    static class B {
+
+    }
+    static class A {
+        A(B b) {
+            System.out.println(b);
+        }
+    }
+    public static void main(String[] args) {
+        List a = new ArrayList();
+        new A((B) a.get(0))<caret> {   
+
+        };
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castConstructorParameters/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castConstructorParameters/before1.java
new file mode 100644
index 0000000..41ba533
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castConstructorParameters/before1.java
@@ -0,0 +1,11 @@
+// "Cast parameter to 'a'" "true"
+class x {}
+class a extends x {
+    a(a a) {}
+    a(x x) {}
+
+    void f(Runnable r) {
+        new a(<caret>r);
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castConstructorParameters/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castConstructorParameters/before2.java
new file mode 100644
index 0000000..cd8b39d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castConstructorParameters/before2.java
@@ -0,0 +1,11 @@
+// "Cast parameter to 'x'" "true"
+class x {}
+class a extends x {
+    a(a a) {}
+    a(x x) {}
+
+    void f(Runnable r) {
+        new a(<caret>r);
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castConstructorParameters/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castConstructorParameters/before3.java
new file mode 100644
index 0000000..4a5f986
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castConstructorParameters/before3.java
@@ -0,0 +1,13 @@
+// "Cast 1st parameter to 'double'" "true"
+class x {}
+class a extends x {
+    a(a a) {}
+    a(x x) {}
+    a(int i, double d) {}
+    a(double d, int i) {}
+
+    void f(Runnable r) {
+        new a(<caret>1, 1);
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castConstructorParameters/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castConstructorParameters/before4.java
new file mode 100644
index 0000000..180bd7e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castConstructorParameters/before4.java
@@ -0,0 +1,13 @@
+// "Cast 2nd parameter to 'double'" "true"
+class x {}
+class a extends x {
+    a(a a) {}
+    a(x x) {}
+    a(int i, double d) {}
+    a(double d, int i) {}
+
+    void f(Runnable r) {
+        new a(<caret>1, 1);
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castConstructorParameters/before5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castConstructorParameters/before5.java
new file mode 100644
index 0000000..956cfdf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castConstructorParameters/before5.java
@@ -0,0 +1,19 @@
+// "Cast parameter to 'GeneralTest.B'" "true"
+import java.util.*;
+class GeneralTest {
+    static class B {
+
+    }
+    static class A {
+        A(B b) {
+            System.out.println(b);
+        }
+    }
+    public static void main(String[] args) {
+        List a = new ArrayList();
+        new A(a.get(0))<caret> {   
+
+        };
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/after1.java
new file mode 100644
index 0000000..d9642fc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/after1.java
@@ -0,0 +1,13 @@
+// "Cast parameter to 'int'" "true"
+class a {
+    private void test()  {}
+    private void test(int i)  {}
+    private void test(String s)  {}
+    private void test(Object o)  {}
+    private void test(char c,char f)  {}
+
+    void f() {
+        test(<caret>(int) 2.2);
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/after2.java
new file mode 100644
index 0000000..ee7ff9d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/after2.java
@@ -0,0 +1,13 @@
+// "Cast 1st parameter to 'char'" "true"
+class a {
+    private void test()  {}
+    private void test(int i)  {}
+    private void test(String s)  {}
+    private void test(Object o)  {}
+    private void test(char c,char f)  {}
+
+    void f() {
+        test(<caret>(char) 2.2, 'd');
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/after3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/after3.java
new file mode 100644
index 0000000..15163cd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/after3.java
@@ -0,0 +1,13 @@
+// "Cast 2nd parameter to 'char'" "true"
+class a {
+    private void test()  {}
+    private void test(int i)  {}
+    private void test(String s)  {}
+    private void test(Object o)  {}
+    private void test(char c,char f)  {}
+
+    void f() {
+        test(<caret>'d', (char) 0);
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/after5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/after5.java
new file mode 100644
index 0000000..dee7c61
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/after5.java
@@ -0,0 +1,14 @@
+// "Cast 1st parameter to 'double'" "true"
+class a {
+    void test()  {}
+    void test(int i)  {}
+    void test(String s)  {}
+    void test(Object o)  {}
+    void test(int i,double d)  {}
+    void test(double d,int i)  {}
+
+    void f() {
+        test(<caret>(double) 0, 0);
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/after6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/after6.java
new file mode 100644
index 0000000..b77ea3d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/after6.java
@@ -0,0 +1,14 @@
+// "Cast 2nd parameter to 'double'" "true"
+class a {
+    void test()  {}
+    void test(int i)  {}
+    void test(String s)  {}
+    void test(Object o)  {}
+    void test(int i,double d)  {}
+    void test(double d,int i)  {}
+
+    void f() {
+        test(<caret>0, (double) 0);
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/after7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/after7.java
new file mode 100644
index 0000000..3557ab5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/after7.java
@@ -0,0 +1,14 @@
+// "Cast parameter to 'a'" "true"
+class a {
+    void test()  {}
+    void test(int i)  {}
+    void test(String s)  {}
+    void test(a o)  {}
+    void test(int i,double d)  {}
+    void test(double d,int i)  {}
+
+    void f(Runnable r) {
+        test(<caret>(a) r);
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/after8.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/after8.java
new file mode 100644
index 0000000..edbf87f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/after8.java
@@ -0,0 +1,10 @@
+// "Cast 2nd parameter to 'java.lang.Throwable'" "true"
+class a {
+    void f(Throwable a, Throwable b) {}
+    void g() {
+        Exception e=null;
+        Object o = null;
+        f(<caret>e, (Throwable) o);
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/before1.java
new file mode 100644
index 0000000..fa04914b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/before1.java
@@ -0,0 +1,13 @@
+// "Cast parameter to 'int'" "true"
+class a {
+    private void test()  {}
+    private void test(int i)  {}
+    private void test(String s)  {}
+    private void test(Object o)  {}
+    private void test(char c,char f)  {}
+
+    void f() {
+        test(<caret>2.2);
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/before2.java
new file mode 100644
index 0000000..75ddc5d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/before2.java
@@ -0,0 +1,13 @@
+// "Cast 1st parameter to 'char'" "true"
+class a {
+    private void test()  {}
+    private void test(int i)  {}
+    private void test(String s)  {}
+    private void test(Object o)  {}
+    private void test(char c,char f)  {}
+
+    void f() {
+        test(<caret>2.2, 'd');
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/before3.java
new file mode 100644
index 0000000..8f14199
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/before3.java
@@ -0,0 +1,13 @@
+// "Cast 2nd parameter to 'char'" "true"
+class a {
+    private void test()  {}
+    private void test(int i)  {}
+    private void test(String s)  {}
+    private void test(Object o)  {}
+    private void test(char c,char f)  {}
+
+    void f() {
+        test(<caret>'d', 0);
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/before4.java
new file mode 100644
index 0000000..1f69148
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/before4.java
@@ -0,0 +1,14 @@
+// "Cast 1st parameter to 'char'" "false"
+class a {
+    private void test()  {}
+    private void test(int i)  {}
+    private void test(String s)  {}
+    private void test(Object o)  {}
+    private void test(char c,char f)  {}
+    private void test(int c, char f)  {}
+
+    void f() {
+        test(<caret>0, 0);
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/before5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/before5.java
new file mode 100644
index 0000000..de61dec
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/before5.java
@@ -0,0 +1,14 @@
+// "Cast 1st parameter to 'double'" "true"
+class a {
+    void test()  {}
+    void test(int i)  {}
+    void test(String s)  {}
+    void test(Object o)  {}
+    void test(int i,double d)  {}
+    void test(double d,int i)  {}
+
+    void f() {
+        test(<caret>0, 0);
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/before6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/before6.java
new file mode 100644
index 0000000..debf02d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/before6.java
@@ -0,0 +1,14 @@
+// "Cast 2nd parameter to 'double'" "true"
+class a {
+    void test()  {}
+    void test(int i)  {}
+    void test(String s)  {}
+    void test(Object o)  {}
+    void test(int i,double d)  {}
+    void test(double d,int i)  {}
+
+    void f() {
+        test(<caret>0, 0);
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/before7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/before7.java
new file mode 100644
index 0000000..7221cac
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/before7.java
@@ -0,0 +1,14 @@
+// "Cast parameter to 'a'" "true"
+class a {
+    void test()  {}
+    void test(int i)  {}
+    void test(String s)  {}
+    void test(a o)  {}
+    void test(int i,double d)  {}
+    void test(double d,int i)  {}
+
+    void f(Runnable r) {
+        test(<caret>r);
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/before8.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/before8.java
new file mode 100644
index 0000000..05cf36d5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/before8.java
@@ -0,0 +1,10 @@
+// "Cast 2nd parameter to 'java.lang.Throwable'" "true"
+class a {
+    void f(Throwable a, Throwable b) {}
+    void g() {
+        Exception e=null;
+        Object o = null;
+        f(<caret>e,o);
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/before9.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/before9.java
new file mode 100644
index 0000000..3412b3b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/castMethodParameters/before9.java
@@ -0,0 +1,10 @@
+// "Cast 1st parameter to 'java.lang.Throwable'" "false"
+class a {
+    void f(Throwable a, Throwable b) {}
+    void g() {
+        Exception e=null;
+        Object o = null;
+        f(<caret>e,o);
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/after1.java
new file mode 100644
index 0000000..a42be12
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/after1.java
@@ -0,0 +1,8 @@
+// "Change 'extends Runnable' to 'implements Runnable'" "true"
+import java.io.*;
+
+class a <caret>implements Runnable {
+ public void run() {
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/after2.java
new file mode 100644
index 0000000..983afe9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/after2.java
@@ -0,0 +1,8 @@
+// "Change 'implements Object' to 'extends Object'" "true"
+import java.io.*;
+
+class a extends Object <caret>{
+ public void run() {
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/after3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/after3.java
new file mode 100644
index 0000000..23610fd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/after3.java
@@ -0,0 +1,8 @@
+// "Change 'implements Object' to 'extends Object'" "true"
+import java.io.*;
+
+class a extends Object implements Runnable,<caret> Serializable {
+ public void run() {
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/after4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/after4.java
new file mode 100644
index 0000000..5071aff
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/after4.java
@@ -0,0 +1,8 @@
+// "Change 'extends Runnable' to 'implements Runnable'" "true"
+import java.io.*;
+
+class a extends Object<caret> implements Serializable, Runnable {
+ public void run() {
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/after6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/after6.java
new file mode 100644
index 0000000..83850af
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/after6.java
@@ -0,0 +1,7 @@
+// "Change 'implements b' to 'extends b'" "true"
+import java.io.*;
+
+class a extends b<String> <caret>{
+}
+
+class b<T> {}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/after7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/after7.java
new file mode 100644
index 0000000..82c2840
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/after7.java
@@ -0,0 +1,9 @@
+// "Change 'implements b' to 'extends b'" "true"
+class a extends b<C.D> {
+}
+
+class b<T> {}
+
+class C {
+  static class D {}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/afterInterface1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/afterInterface1.java
new file mode 100644
index 0000000..861a85a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/afterInterface1.java
@@ -0,0 +1,4 @@
+// "Change 'implements Runnable' to 'extends Runnable'" "true"
+interface a extends Runnable {
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/before1.java
new file mode 100644
index 0000000..cf8f2fb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/before1.java
@@ -0,0 +1,8 @@
+// "Change 'extends Runnable' to 'implements Runnable'" "true"
+import java.io.*;
+
+class a extends <caret>Runnable {
+ public void run() {
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/before2.java
new file mode 100644
index 0000000..efaac22
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/before2.java
@@ -0,0 +1,8 @@
+// "Change 'implements Object' to 'extends Object'" "true"
+import java.io.*;
+
+class a implements <caret>Object {
+ public void run() {
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/before3.java
new file mode 100644
index 0000000..1090e28
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/before3.java
@@ -0,0 +1,8 @@
+// "Change 'implements Object' to 'extends Object'" "true"
+import java.io.*;
+
+class a implements Runnable,<caret>Object,Serializable {
+ public void run() {
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/before4.java
new file mode 100644
index 0000000..e986ea2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/before4.java
@@ -0,0 +1,8 @@
+// "Change 'extends Runnable' to 'implements Runnable'" "true"
+import java.io.*;
+
+class a extends Object,<caret>Runnable implements Serializable {
+ public void run() {
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/before5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/before5.java
new file mode 100644
index 0000000..0fd4057
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/before5.java
@@ -0,0 +1,9 @@
+// "Change 'implements Object' to 'extends Object'" "false"
+import java.io.*;
+
+class a extends b implements Runnable,<caret>Object,Serializable {
+ public void run() {
+ }
+}
+
+class b {}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/before6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/before6.java
new file mode 100644
index 0000000..b4ca4d2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/before6.java
@@ -0,0 +1,7 @@
+// "Change 'implements b' to 'extends b'" "true"
+import java.io.*;
+
+class a implements <caret>b<String> {
+}
+
+class b<T> {}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/before7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/before7.java
new file mode 100644
index 0000000..7c7a75f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/before7.java
@@ -0,0 +1,9 @@
+// "Change 'implements b' to 'extends b'" "true"
+class a implements <caret>b<C.D> {
+}
+
+class b<T> {}
+
+class C {
+  static class D {}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/beforeInterface1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/beforeInterface1.java
new file mode 100644
index 0000000..1bfaf48
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeExtendsToImplements/beforeInterface1.java
@@ -0,0 +1,4 @@
+// "Change 'implements Runnable' to 'extends Runnable'" "true"
+interface a implements <caret>Runnable {
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/after1.java
new file mode 100644
index 0000000..7360e00
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/after1.java
@@ -0,0 +1,7 @@
+// "Remove 1st parameter from method 'f'" "true"
+class A {
+    void f() {}
+    public void foo() {
+        <caret>f();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/after10.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/after10.java
new file mode 100644
index 0000000..108be29
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/after10.java
@@ -0,0 +1,15 @@
+// "Add 'String' as 2nd parameter to method 'set'" "true"
+import java.util.List;
+
+public class X<T> {
+    private List<T> myList;
+
+    public void set(List<T> list, String aaa) {
+        myList = list;
+    }
+
+    public static void aa() {
+        X<Integer> x = new X<Integer>();
+        x.set<caret>(null, "aaa");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/after2.java
new file mode 100644
index 0000000..81f59e9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/after2.java
@@ -0,0 +1,7 @@
+// "<html> Change signature of f(<s>int</s>, <s>String</s>)</html>" "true"
+class A {
+    void f() {}
+    public void foo() {
+        <caret>f();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/after3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/after3.java
new file mode 100644
index 0000000..bd42e46
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/after3.java
@@ -0,0 +1,7 @@
+// "Add 'char' as 2nd parameter to method 'f'" "true"
+class A {
+    void f(int i, char c, String s) {}
+    public void foo() {
+        <caret>f(1,'2',"");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/after4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/after4.java
new file mode 100644
index 0000000..7352ed1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/after4.java
@@ -0,0 +1,7 @@
+// "<html> Change signature of f(int, <b>char</b>, <b>int</b>, String, <b>int</b>, <b>Object</b>)</html>" "true"
+class A {
+    void f(int i, char c, int i1, String s, int i2, Object o) {}
+    public void foo() {
+        <caret>f(1,'2',4,"",1,null);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/after5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/after5.java
new file mode 100644
index 0000000..5acfab5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/after5.java
@@ -0,0 +1,7 @@
+// "Remove 2nd parameter from method 'f'" "true"
+class A {
+    void f(int i, int i2) {}
+    public void foo() {
+        <caret>f(1,1);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/after6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/after6.java
new file mode 100644
index 0000000..2fb3e81
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/after6.java
@@ -0,0 +1,7 @@
+// "Change 2nd parameter of method 'f' from 'String' to 'int'" "true"
+class A {
+    void f(int i, int s, int i2) {}
+    public void foo() {
+        <caret>f(1,1,'4');
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/after7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/after7.java
new file mode 100644
index 0000000..e698757
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/after7.java
@@ -0,0 +1,7 @@
+// "<html> Change signature of f(int, <s>String</s>, int, <s>int</s>, <s>char</s>, String)</html>" "true"
+class A {
+    void f(int i, int i2, String s) {}
+    public void foo() {
+        <caret>f(1,1,"4");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/after8.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/after8.java
new file mode 100644
index 0000000..ec3ffff
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/after8.java
@@ -0,0 +1,6 @@
+// "<html> Change signature of A(<b>int</b>, <b>int</b>, <b>String</b>)</html>" "true"
+class A {
+    A(int i, int i1, String s) {
+        new A<caret>(1,1,"4");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/after9.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/after9.java
new file mode 100644
index 0000000..67b0c44
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/after9.java
@@ -0,0 +1,6 @@
+// "Add 'int' as 2nd parameter to method 'f'" "true"
+ public class S {
+     void f(int k, int i, int... args) {
+     f(1,1,null)<caret>;// -> f(1,1,null)
+     }
+ }
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterAssignableParamTypes.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterAssignableParamTypes.java
new file mode 100644
index 0000000..1521de3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterAssignableParamTypes.java
@@ -0,0 +1,22 @@
+// "Add 'B' as 2nd parameter to method 'foo'" "true"
+public class S {
+
+  void foo(A a, B b) {
+  }
+
+  void bar(B b) {
+    A a = getA();
+    foo(a, b);
+  }
+
+  A getA() {
+    return new A();
+  }
+}
+
+class A {
+}
+
+class B extends A {
+}
+  
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterAssignableParamTypesFirstNew.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterAssignableParamTypesFirstNew.java
new file mode 100644
index 0000000..40c0233
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterAssignableParamTypesFirstNew.java
@@ -0,0 +1,22 @@
+// "Add 'B' as 1st parameter to method 'foo'" "true"
+public class S {
+
+  void foo(B b, A a) {
+  }
+
+  void bar(B b) {
+    A a = getA();
+    foo(<caret>b, a);
+  }
+
+  A getA() {
+    return new A();
+  }
+}
+
+class A {
+}
+
+class B extends A {
+}
+  
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterAssignableParamTypesFirstNewReverse.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterAssignableParamTypesFirstNewReverse.java
new file mode 100644
index 0000000..d004aa2a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterAssignableParamTypesFirstNewReverse.java
@@ -0,0 +1,22 @@
+// "Add 'A' as 2nd parameter to method 'foo'" "true"
+public class S {
+
+  void foo(A a, A a1) {
+  }
+
+  void bar(B b) {
+    A a = getA();
+    foo(b, a);
+  }
+
+  A getA() {
+    return new A();
+  }
+}
+
+class A {
+}
+
+class B extends A {
+}
+  
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterAssignableParamTypesReverse.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterAssignableParamTypesReverse.java
new file mode 100644
index 0000000..8f9efbc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterAssignableParamTypesReverse.java
@@ -0,0 +1,22 @@
+// "Add 'A' as 1st parameter to method 'foo'" "true"
+public class S {
+
+  void foo(A a1, A a) {
+  }
+
+  void bar(B b) {
+    A a = getA();
+    foo(a, b);
+  }
+
+  A getA() {
+    return new A();
+  }
+}
+
+class A {
+}
+
+class B extends A {
+}
+  
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterCommonChangeReverse.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterCommonChangeReverse.java
new file mode 100644
index 0000000..19a0fa2b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterCommonChangeReverse.java
@@ -0,0 +1,11 @@
+// "<html> Change signature of foo(<b>ArrayList&lt;Integer&gt;</b>, <b>ArrayList&lt;Integer&gt;</b>, ArrayList&lt;Integer&gt;, ArrayList&lt;Integer&gt;)</html>" "true"
+import java.util.*;
+
+class Test {
+
+    public void foo(ArrayList<Integer> integerArrayList, ArrayList<Integer> integers, ArrayList<Integer> l, ArrayList<Integer> l1) {}
+
+    {
+      foo(new ArrayList<Integer>(), new ArrayList<Integer>(), new ArrayList<Integer>(), new ArrayList<Integer>());
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterEraseTypeIfSubstitutionNotFound.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterEraseTypeIfSubstitutionNotFound.java
new file mode 100644
index 0000000..20f02d1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterEraseTypeIfSubstitutionNotFound.java
@@ -0,0 +1,12 @@
+// "Add 'Foo<TypeParamName>' as 1st parameter to method 'Bar'" "true"
+ public class Bar {
+     Bar(Foo<TypeParamName> typeParamNameFoo, String args) {
+
+     }
+ }
+
+class Foo<TypeParamName> {
+    void bar() {
+      Bar bar = new Bar(this, "");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterEraseTypeIfSubstitutionNotFoundNotAConstructor.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterEraseTypeIfSubstitutionNotFoundNotAConstructor.java
new file mode 100644
index 0000000..98fd75f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterEraseTypeIfSubstitutionNotFoundNotAConstructor.java
@@ -0,0 +1,12 @@
+// "Add 'Foo<TypeParamName>' as 1st parameter to method 'bar'" "true"
+ public class Bar {
+     static void bar(Foo<TypeParamName> typeParamNameFoo, String args) {
+
+     }
+ }
+
+class Foo<TypeParamName> {
+    void bar() {
+      Bar.bar(this, "");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterNewParamName.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterNewParamName.java
new file mode 100644
index 0000000..c339741
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterNewParamName.java
@@ -0,0 +1,10 @@
+// "Add 'int' as 1st parameter to method 'f'" "true"
+ public class S {
+     void f(int i, String args) {
+
+     }
+
+     void bar() {
+       f(11, "");
+     }
+ }
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterNonAssignableParamTypes.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterNonAssignableParamTypes.java
new file mode 100644
index 0000000..777534b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterNonAssignableParamTypes.java
@@ -0,0 +1,22 @@
+// "Add 'String' as 2nd parameter to method 'foo'" "true"
+public class S {
+
+  void foo(A a, String s) {
+  }
+
+  void bar(B b) {
+    A a = getA();
+    foo(a, <caret>"");
+  }
+
+  A getA() {
+    return new A();
+  }
+}
+
+class A {
+}
+
+class B extends A {
+}
+  
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterQualifiedTypes.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterQualifiedTypes.java
new file mode 100644
index 0000000..80a5440
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterQualifiedTypes.java
@@ -0,0 +1,12 @@
+// "Add 'Inner1' as 1st parameter to method 'Inner2'" "true"
+class CoolTest {
+class Inner1 {}
+
+void method() {
+new Inner2(new Inner1());
+}
+
+class Inner2 {
+Inner2(Inner1 inner1) { }
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterVarargs1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterVarargs1.java
new file mode 100644
index 0000000..dcd3ce6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterVarargs1.java
@@ -0,0 +1,6 @@
+// "Add 'String' as 1st parameter to method 'f'" "true"
+ public class S {
+     void f(String s, int... args) {
+     f("",1,1);
+     }
+ }
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterVarargs2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterVarargs2.java
new file mode 100644
index 0000000..55ab07e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterVarargs2.java
@@ -0,0 +1,6 @@
+// "Add 'String' as 1st parameter to method 'f'" "true"
+ public class S {
+     void f(String s, int... args) {
+     f("",null);
+     }
+ }
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/before1.java
new file mode 100644
index 0000000..3df2f76
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/before1.java
@@ -0,0 +1,7 @@
+// "Remove 1st parameter from method 'f'" "true"
+class A {
+    void f(int i) {}
+    public void foo() {
+        <caret>f();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/before10.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/before10.java
new file mode 100644
index 0000000..5d966d8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/before10.java
@@ -0,0 +1,15 @@
+// "Add 'String' as 2nd parameter to method 'set'" "true"
+import java.util.List;
+
+public class X<T> {
+    private List<T> myList;
+
+    public void set(List<T> list) {
+        myList = list;
+    }
+
+    public static void aa() {
+        X<Integer> x = new X<Integer>();
+        x.set<caret>(null, "aaa");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/before2.java
new file mode 100644
index 0000000..720b471
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/before2.java
@@ -0,0 +1,7 @@
+// "<html> Change signature of f(<s>int</s>, <s>String</s>)</html>" "true"
+class A {
+    void f(int i,String s) {}
+    public void foo() {
+        <caret>f();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/before3.java
new file mode 100644
index 0000000..4e10744
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/before3.java
@@ -0,0 +1,7 @@
+// "Add 'char' as 2nd parameter to method 'f'" "true"
+class A {
+    void f(int i,String s) {}
+    public void foo() {
+        <caret>f(1,'2',"");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/before4.java
new file mode 100644
index 0000000..38a0546
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/before4.java
@@ -0,0 +1,7 @@
+// "<html> Change signature of f(int, <b>char</b>, <b>int</b>, String, <b>int</b>, <b>Object</b>)</html>" "true"
+class A {
+    void f(int i,String s) {}
+    public void foo() {
+        <caret>f(1,'2',4,"",1,null);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/before5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/before5.java
new file mode 100644
index 0000000..17e6682
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/before5.java
@@ -0,0 +1,7 @@
+// "Remove 2nd parameter from method 'f'" "true"
+class A {
+    void f(int i, String s, int i2) {}
+    public void foo() {
+        <caret>f(1,1);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/before6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/before6.java
new file mode 100644
index 0000000..628a6ec
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/before6.java
@@ -0,0 +1,7 @@
+// "Change 2nd parameter of method 'f' from 'String' to 'int'" "true"
+class A {
+    void f(int i, String s, int i2) {}
+    public void foo() {
+        <caret>f(1,1,'4');
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/before7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/before7.java
new file mode 100644
index 0000000..11e27d6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/before7.java
@@ -0,0 +1,7 @@
+// "<html> Change signature of f(int, <s>String</s>, int, <s>int</s>, <s>char</s>, String)</html>" "true"
+class A {
+    void f(int i, String s, int i2, int i3, char c, String s) {}
+    public void foo() {
+        <caret>f(1,1,"4");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/before8.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/before8.java
new file mode 100644
index 0000000..f879723
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/before8.java
@@ -0,0 +1,6 @@
+// "<html> Change signature of A(<b>int</b>, <b>int</b>, <b>String</b>)</html>" "true"
+class A {
+    A() {
+        new A<caret>(1,1,"4");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/before9.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/before9.java
new file mode 100644
index 0000000..d212efb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/before9.java
@@ -0,0 +1,6 @@
+// "Add 'int' as 2nd parameter to method 'f'" "true"
+ public class S {
+     void f(int k, int... args) {
+     f(1,1,null)<caret>;// -> f(1,1,null)
+     }
+ }
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeAssignableParamTypes.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeAssignableParamTypes.java
new file mode 100644
index 0000000..08b325b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeAssignableParamTypes.java
@@ -0,0 +1,22 @@
+// "Add 'B' as 2nd parameter to method 'foo'" "true"
+public class S {
+
+  void foo(A a) {
+  }
+
+  void bar(B b) {
+    A a = getA();
+    foo(a, <caret>b);
+  }
+
+  A getA() {
+    return new A();
+  }
+}
+
+class A {
+}
+
+class B extends A {
+}
+  
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeAssignableParamTypesFirstNew.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeAssignableParamTypesFirstNew.java
new file mode 100644
index 0000000..853267a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeAssignableParamTypesFirstNew.java
@@ -0,0 +1,22 @@
+// "Add 'B' as 1st parameter to method 'foo'" "true"
+public class S {
+
+  void foo(A a) {
+  }
+
+  void bar(B b) {
+    A a = getA();
+    foo(<caret>b, a);
+  }
+
+  A getA() {
+    return new A();
+  }
+}
+
+class A {
+}
+
+class B extends A {
+}
+  
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeAssignableParamTypesFirstNewReverse.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeAssignableParamTypesFirstNewReverse.java
new file mode 100644
index 0000000..4289bcb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeAssignableParamTypesFirstNewReverse.java
@@ -0,0 +1,22 @@
+// "Add 'A' as 2nd parameter to method 'foo'" "true"
+public class S {
+
+  void foo(A a) {
+  }
+
+  void bar(B b) {
+    A a = getA();
+    foo(<caret>b, a);
+  }
+
+  A getA() {
+    return new A();
+  }
+}
+
+class A {
+}
+
+class B extends A {
+}
+  
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeAssignableParamTypesReverse.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeAssignableParamTypesReverse.java
new file mode 100644
index 0000000..3631820
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeAssignableParamTypesReverse.java
@@ -0,0 +1,22 @@
+// "Add 'A' as 1st parameter to method 'foo'" "true"
+public class S {
+
+  void foo(A a) {
+  }
+
+  void bar(B b) {
+    A a = getA();
+    foo(a, <caret>b);
+  }
+
+  A getA() {
+    return new A();
+  }
+}
+
+class A {
+}
+
+class B extends A {
+}
+  
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeCommonChangeReverse.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeCommonChangeReverse.java
new file mode 100644
index 0000000..22c577c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeCommonChangeReverse.java
@@ -0,0 +1,11 @@
+// "<html> Change signature of foo(<b>ArrayList&lt;Integer&gt;</b>, <b>ArrayList&lt;Integer&gt;</b>, ArrayList&lt;Integer&gt;, ArrayList&lt;Integer&gt;)</html>" "true"
+import java.util.*;
+
+class Test {
+
+    public void foo(ArrayList<Integer> l, ArrayList<Integer> l1) {}
+
+    {
+      foo(new <caret>ArrayList<Integer>(), new ArrayList<Integer>(), new ArrayList<Integer>(), new ArrayList<Integer>());
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeEraseTypeIfSubstitutionNotFound.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeEraseTypeIfSubstitutionNotFound.java
new file mode 100644
index 0000000..6194d00
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeEraseTypeIfSubstitutionNotFound.java
@@ -0,0 +1,12 @@
+// "Add 'Foo<TypeParamName>' as 1st parameter to method 'Bar'" "true"
+ public class Bar {
+     Bar(String args) {
+
+     }
+ }
+
+class Foo<TypeParamName> {
+    void bar() {
+      Bar bar = new Bar(th<caret>is, "");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeEraseTypeIfSubstitutionNotFoundNotAConstructor.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeEraseTypeIfSubstitutionNotFoundNotAConstructor.java
new file mode 100644
index 0000000..99623c4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeEraseTypeIfSubstitutionNotFoundNotAConstructor.java
@@ -0,0 +1,12 @@
+// "Add 'Foo<TypeParamName>' as 1st parameter to method 'bar'" "true"
+ public class Bar {
+     static void bar(String args) {
+
+     }
+ }
+
+class Foo<TypeParamName> {
+    void bar() {
+      Bar.bar(th<caret>is, "");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeExistSignature.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeExistSignature.java
new file mode 100644
index 0000000..fe9dc93
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeExistSignature.java
@@ -0,0 +1,12 @@
+// "Add 'int' as 1st parameter to method 'f'" "false"
+public class Foo {
+    void foo(Bar f) {
+        f.f<caret>(2);
+    }
+}
+class Bar {
+    private void f(int i){}
+    public void f(String s){}
+
+
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeNewParamName.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeNewParamName.java
new file mode 100644
index 0000000..5419bc8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeNewParamName.java
@@ -0,0 +1,10 @@
+// "Add 'int' as 1st parameter to method 'f'" "true"
+ public class S {
+     void f(String args) {
+
+     }
+
+     void bar() {
+       f(1<caret>1, "");
+     }
+ }
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeNonAssignableParamTypes.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeNonAssignableParamTypes.java
new file mode 100644
index 0000000..921d47e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeNonAssignableParamTypes.java
@@ -0,0 +1,22 @@
+// "Add 'String' as 2nd parameter to method 'foo'" "true"
+public class S {
+
+  void foo(A a) {
+  }
+
+  void bar(B b) {
+    A a = getA();
+    foo(a, <caret>"");
+  }
+
+  A getA() {
+    return new A();
+  }
+}
+
+class A {
+}
+
+class B extends A {
+}
+  
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeNotAvailable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeNotAvailable.java
new file mode 100644
index 0000000..2318557
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeNotAvailable.java
@@ -0,0 +1,6 @@
+// "Change 1st parameter of method 'parseInt' from 'String' to 'int'" "false"
+class A {
+    public void foo() {
+        <caret>Integer.parseInt(1);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeQualifiedTypes.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeQualifiedTypes.java
new file mode 100644
index 0000000..e64cd97
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeQualifiedTypes.java
@@ -0,0 +1,12 @@
+// "Add 'Inner1' as 1st parameter to method 'Inner2'" "true"
+class CoolTest {
+class Inner1 {}
+
+void method() {
+new Inner2(new In<caret>ner1());
+}
+
+class Inner2 {
+Inner2() { }
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeVarargs1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeVarargs1.java
new file mode 100644
index 0000000..4ea15ad
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeVarargs1.java
@@ -0,0 +1,6 @@
+// "Add 'String' as 1st parameter to method 'f'" "true"
+ public class S {
+     void f(int... args) {
+     f("",1,1)<caret>;
+     }
+ }
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeVarargs2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeVarargs2.java
new file mode 100644
index 0000000..23362d9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeVarargs2.java
@@ -0,0 +1,6 @@
+// "Add 'String' as 1st parameter to method 'f'" "true"
+ public class S {
+     void f(int... args) {
+     f("",null)<caret>;
+     }
+ }
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeVarargs2Array.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeVarargs2Array.java
new file mode 100644
index 0000000..af463ee
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeVarargs2Array.java
@@ -0,0 +1,6 @@
+// "Add 'String' as 2nd parameter to method 'f'" "false"
+ public class S {
+     void f(int... args) {
+     f(1,1, "")<caret>;
+     }
+ }
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/after1.java
new file mode 100644
index 0000000..d8a92d8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/after1.java
@@ -0,0 +1,9 @@
+// "Change 'new Object()' to 'new String()'" "true"
+public class TTT {
+    void f() {
+        String s = new String(<caret>);
+        int[][] i = new Object();
+        int[] f = new int[0][];
+
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/after2.java
new file mode 100644
index 0000000..1197b2f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/after2.java
@@ -0,0 +1,9 @@
+// "Change 'new Object()' to 'new int[][]'" "true"
+public class TTT {
+    void f() {
+        String s = new Object();
+        int[][] i = new int[<caret><selection>0</selection>][];
+        int[] f = new int[0][];
+
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/after3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/after3.java
new file mode 100644
index 0000000..d3be807
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/after3.java
@@ -0,0 +1,9 @@
+// "Change 'new TTT[0][]' to 'new TTT[]'" "true"
+public class TTT {
+    void f() {
+        String s = new Object();
+        int[][] i = new Object();
+        TTT[] f = new TTT[0]<caret>;
+
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/after4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/after4.java
new file mode 100644
index 0000000..288526a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/after4.java
@@ -0,0 +1,8 @@
+// "Change 'new ArrayList<Integer>()' to 'new ArrayList<String>()'" "true"
+import java.util.*;
+
+class RRR {
+  void f() {
+     List<String> l = new ArrayList<>(<caret>);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/afterAnonymousClass.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/afterAnonymousClass.java
new file mode 100644
index 0000000..7a7121d4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/afterAnonymousClass.java
@@ -0,0 +1,9 @@
+// "Change 'new Runnable() {...}' to 'new StringBuffer()'" "true"
+
+class X {
+ public StringBuffer buf = new StringBuffer(){
+    public void run(){
+      System.out.println("smth");
+    }
+  };
+ }
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/afterArgs.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/afterArgs.java
new file mode 100644
index 0000000..d339bbe
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/afterArgs.java
@@ -0,0 +1,8 @@
+// "Change 'new ArrayList<Integer>(...)' to 'new ArrayList<String>()'" "true"
+import java.util.*;
+
+class RRR {
+  void f() {
+     List<String> l = new ArrayList<>(2<caret>);
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/afterCanCollapseDiamonds.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/afterCanCollapseDiamonds.java
new file mode 100644
index 0000000..c6a1bfb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/afterCanCollapseDiamonds.java
@@ -0,0 +1,12 @@
+// "Change 'new Foo<Integer>()' to 'new Foo<Number>()'" "true"
+
+class Foo<T> {
+        Foo(T t) {}
+        Foo() {}
+}
+
+class Constructors {
+        public static void main(String[] args) {
+                Foo<Number> foo2 = new Foo<>();
+        }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/afterCantCollapseDiamonds.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/afterCantCollapseDiamonds.java
new file mode 100644
index 0000000..2a7bdec
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/afterCantCollapseDiamonds.java
@@ -0,0 +1,12 @@
+// "Change 'new Foo<Integer>(...)' to 'new Foo<Number>()'" "true"
+
+class Foo<T> {
+        Foo(T t) {}
+        Foo() {}
+}
+
+class Constructors {
+        public static void main(String[] args) {
+                Foo<Number> foo2 = new Foo<Number>(1);
+        }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/afterNonPrimitiveArrayDimensions.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/afterNonPrimitiveArrayDimensions.java
new file mode 100644
index 0000000..658edf3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/afterNonPrimitiveArrayDimensions.java
@@ -0,0 +1,5 @@
+// "Change 'new X[42]' to 'new long[]'" "true"
+
+ class X {
+ public long[] foo() { return new long[42]; }
+ }
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/before1.java
new file mode 100644
index 0000000..014fca1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/before1.java
@@ -0,0 +1,9 @@
+// "Change 'new Object()' to 'new String()'" "true"
+public class TTT {
+    void f() {
+        <caret>String s = new Object();
+        int[][] i = new Object();
+        int[] f = new int[0][];
+
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/before2.java
new file mode 100644
index 0000000..be8b11a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/before2.java
@@ -0,0 +1,9 @@
+// "Change 'new Object()' to 'new int[][]'" "true"
+public class TTT {
+    void f() {
+        String s = new Object();
+        int[][] i = new Object();<caret>
+        int[] f = new int[0][];
+
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/before3.java
new file mode 100644
index 0000000..1d94e93
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/before3.java
@@ -0,0 +1,9 @@
+// "Change 'new TTT[0][]' to 'new TTT[]'" "true"
+public class TTT {
+    void f() {
+        String s = new Object();
+        int[][] i = new Object();
+        TTT[] f = <caret>new TTT[0][];
+
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/before4.java
new file mode 100644
index 0000000..cb19017
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/before4.java
@@ -0,0 +1,8 @@
+// "Change 'new ArrayList<Integer>()' to 'new ArrayList<String>()'" "true"
+import java.util.*;
+
+class RRR {
+  void f() {
+     List<String> l = new <caret>ArrayList<Integer>();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/beforeAnonymousClass.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/beforeAnonymousClass.java
new file mode 100644
index 0000000..6750c4e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/beforeAnonymousClass.java
@@ -0,0 +1,9 @@
+// "Change 'new Runnable() {...}' to 'new StringBuffer()'" "true"
+
+class X {
+ public StringBuffer buf = <caret>new Runnable(){
+    public void run(){
+      System.out.println("smth");
+    }
+  };
+ }
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/beforeArgs.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/beforeArgs.java
new file mode 100644
index 0000000..ff69395
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/beforeArgs.java
@@ -0,0 +1,8 @@
+// "Change 'new ArrayList<Integer>(...)' to 'new ArrayList<String>()'" "true"
+import java.util.*;
+
+class RRR {
+  void f() {
+     List<String> l = new <caret>ArrayList<Integer>(2);
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/beforeCanCollapseDiamonds.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/beforeCanCollapseDiamonds.java
new file mode 100644
index 0000000..a9fab53
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/beforeCanCollapseDiamonds.java
@@ -0,0 +1,12 @@
+// "Change 'new Foo<Integer>()' to 'new Foo<Number>()'" "true"
+
+class Foo<T> {
+        Foo(T t) {}
+        Foo() {}
+}
+
+class Constructors {
+        public static void main(String[] args) {
+                Foo<Number> foo2 = new Foo<Int<caret>eger>();
+        }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/beforeCantCollapseDiamonds.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/beforeCantCollapseDiamonds.java
new file mode 100644
index 0000000..01ae36c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/beforeCantCollapseDiamonds.java
@@ -0,0 +1,12 @@
+// "Change 'new Foo<Integer>(...)' to 'new Foo<Number>()'" "true"
+
+class Foo<T> {
+        Foo(T t) {}
+        Foo() {}
+}
+
+class Constructors {
+        public static void main(String[] args) {
+                Foo<Number> foo2 = new Foo<Int<caret>eger>(1);
+        }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/beforeNonPrimitiveArrayDimensions.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/beforeNonPrimitiveArrayDimensions.java
new file mode 100644
index 0000000..b698ee9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/beforeNonPrimitiveArrayDimensions.java
@@ -0,0 +1,5 @@
+// "Change 'new X[42]' to 'new long[]'" "true"
+
+ class X {
+ public long[] foo() { return <caret>new X[42]; }
+ }
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/beforePrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/beforePrimitive.java
new file mode 100644
index 0000000..265b29f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/beforePrimitive.java
@@ -0,0 +1,5 @@
+// "Change 'new X()' to 'new long()'" "false"
+
+ class X {
+ public long foo() { return <caret>new X(); }
+ }
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/after1.java
new file mode 100644
index 0000000..6e5703a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/after1.java
@@ -0,0 +1,11 @@
+// "Make 'a' implement 'java.lang.Runnable'" "true"
+class a implements Runnable {
+    void f(Runnable r) {
+        f(this);
+    }
+
+    public void run() {
+        <caret><selection>//To change body of implemented methods use File | Settings | File Templates.</selection>
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/after2.java
new file mode 100644
index 0000000..55c2273
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/after2.java
@@ -0,0 +1,9 @@
+<caret>// "Make 'a' extend 'b'" "true"
+class a extends b {
+    void f(b b, Runnable r) {
+        f(this, null);
+    }
+}
+class b {
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/after4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/after4.java
new file mode 100644
index 0000000..c7808a3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/after4.java
@@ -0,0 +1,10 @@
+// "Make 'b' extend 'a'" "true"
+class a {
+    void f(a a) {
+        b b = null;
+        f(b);
+    }
+}
+<caret>class b extends a {
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/after6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/after6.java
new file mode 100644
index 0000000..56daa74
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/after6.java
@@ -0,0 +1,14 @@
+// "Make 'a' implement 'b'" "true"
+class a implements b<String> {
+    void f(b<String> r) {
+        r.g(this);
+    }
+
+    public void g(b<String> t) {
+        <caret><selection>//To change body of implemented methods use File | Settings | File Templates.</selection>
+    }
+}
+interface b<T> {
+  void g(b<T> t);
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/afterConstructorParam.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/afterConstructorParam.java
new file mode 100644
index 0000000..619427d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/afterConstructorParam.java
@@ -0,0 +1,9 @@
+// "Make 'A' extend 'B'" "true"
+class B {}
+
+class A extends B {
+    A(B b) {
+    }
+
+    A a = new A(this);
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/afterReturn.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/afterReturn.java
new file mode 100644
index 0000000..c9e097a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/afterReturn.java
@@ -0,0 +1,9 @@
+// "Make 'Foo' implement 'Foo.Bar'" "true"
+public class Foo implements Foo.Bar {
+
+  public Bar getBar() {
+    return this;
+  }
+
+  public interface Bar {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/afterVariableAssignment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/afterVariableAssignment.java
new file mode 100644
index 0000000..46ac02f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/afterVariableAssignment.java
@@ -0,0 +1,9 @@
+// "Make 'A' extend 'B'" "true"
+class B {}
+
+class A extends B {
+    int foo(B b) {
+        B bz = this;
+        return 1;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/before1.java
new file mode 100644
index 0000000..3a2c368
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/before1.java
@@ -0,0 +1,7 @@
+// "Make 'a' implement 'java.lang.Runnable'" "true"
+class a {
+    void f(Runnable r) {
+        f(<caret>this);
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/before2.java
new file mode 100644
index 0000000..4b80ca7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/before2.java
@@ -0,0 +1,9 @@
+// "Make 'a' extend 'b'" "true"
+class a {
+    void f(b b, Runnable r) {
+        f(<caret>this, null);
+    }
+}
+class b {
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/before3.java
new file mode 100644
index 0000000..5edeaab
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/before3.java
@@ -0,0 +1,9 @@
+// "Make 'a' extend 'b'" "false"
+class a extends Object {
+    void f(b b, Runnable r) {
+        f(<caret>this, null);
+    }
+}
+class b {
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/before4.java
new file mode 100644
index 0000000..db256e8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/before4.java
@@ -0,0 +1,10 @@
+// "Make 'b' extend 'a'" "true"
+class a {
+    void f(a a) {
+        b b = null;
+        f(<caret>b);
+    }
+}
+class b {
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/before5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/before5.java
new file mode 100644
index 0000000..a853ceb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/before5.java
@@ -0,0 +1,10 @@
+// "Make 'b' extend 'a'" "false"
+class a {
+    void f(a a, b b) {
+        b b = null;
+        f(<caret>b, b);
+    }
+}
+interface b {
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/before6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/before6.java
new file mode 100644
index 0000000..3aa784d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/before6.java
@@ -0,0 +1,10 @@
+// "Make 'a' implement 'b'" "true"
+class a {
+    void f(b<String> r) {
+        r.g(<caret>this);
+    }
+}
+interface b<T> {
+  void g(b<T> t);
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/beforeAnonymousClassArgument.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/beforeAnonymousClassArgument.java
new file mode 100644
index 0000000..92a5cf4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/beforeAnonymousClassArgument.java
@@ -0,0 +1,14 @@
+// "Make 'null' implement 'Foo.IBar'" "false"
+
+public abstract class Foo {
+  static Foo anonymous = new Foo() {
+    @Override
+    void fooMethod() {
+      foo2Method(th<caret>is);
+    }
+  };
+
+  protected Foo() {
+    IBar bar = anonymou<caret>s;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/beforeAnonymousClassValue.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/beforeAnonymousClassValue.java
new file mode 100644
index 0000000..4937d11
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/beforeAnonymousClassValue.java
@@ -0,0 +1,19 @@
+// "Make 'null' implement 'Foo.IBar'" "false"
+
+public abstract class Foo {
+  public static interface IBar {
+    void barMethod();
+  }
+
+  abstract void fooMethod();
+
+  void foo2Method(IBar b) {
+  }
+
+  static Foo anonymous = new Foo() {
+    @Override
+    void fooMethod() {
+      foo2Method(th<caret>is);
+    }
+  };
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/beforeAssignmentToInheritor.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/beforeAssignmentToInheritor.java
new file mode 100644
index 0000000..70cc57e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/beforeAssignmentToInheritor.java
@@ -0,0 +1,10 @@
+// "Make 'Foo' implement 'Foo.Bar'" "false"
+public class Foo {
+
+  public void getBar() {
+    Bar f = new F<caret>oo();
+  }
+
+  public class Bar extends Foo {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/beforeConstructorParam.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/beforeConstructorParam.java
new file mode 100644
index 0000000..84fc390
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/beforeConstructorParam.java
@@ -0,0 +1,9 @@
+// "Make 'A' extend 'B'" "true"
+class B {}
+
+class A {
+    A(B b) {
+    }
+
+    A a = new A(th<caret>is);
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/beforeDifferentTypeArgs.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/beforeDifferentTypeArgs.java
new file mode 100644
index 0000000..599d087
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/beforeDifferentTypeArgs.java
@@ -0,0 +1,10 @@
+// "Make 'Generic' extend 'Generic'" "false"
+class Generic<E> {
+    Generic(E arg) { }
+}
+
+class Tester {
+    void method() {
+        Generic<Integer> aIntegerGeneric = new <caret>Generic<String>("");
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/beforeReturn.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/beforeReturn.java
new file mode 100644
index 0000000..bff1eb3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/beforeReturn.java
@@ -0,0 +1,9 @@
+// "Make 'Foo' implement 'Foo.Bar'" "true"
+public class Foo {
+
+  public Bar getBar() {
+    return t<caret>his;
+  }
+
+  public interface Bar {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/beforeVariableAssignment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/beforeVariableAssignment.java
new file mode 100644
index 0000000..f5a352b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/beforeVariableAssignment.java
@@ -0,0 +1,9 @@
+// "Make 'A' extend 'B'" "true"
+class B {}
+
+class A {
+    int foo(B b) {
+        B bz = t<caret>his;
+        return 1;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeToAppend/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeToAppend/after1.java
new file mode 100644
index 0000000..86f4d45f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeToAppend/after1.java
@@ -0,0 +1,6 @@
+// "Change to 'appendable.append(1)'" "true"
+class Test {
+  void appendable(StringBuilder appendable) throws IOException {
+    appendable.append(1);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeToAppend/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeToAppend/after2.java
new file mode 100644
index 0000000..47e5b2b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeToAppend/after2.java
@@ -0,0 +1,7 @@
+// "Change to 'builder.append(1+1).append(s).append("  ")'" "true"
+class Test {
+  String s;
+  void bar(StringBuilder builder) {
+    builder.append(1 + 1).append(s).append("  ");
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeToAppend/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeToAppend/before1.java
new file mode 100644
index 0000000..a10a2bf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeToAppend/before1.java
@@ -0,0 +1,6 @@
+// "Change to 'appendable.append(1)'" "true"
+class Test {
+  void appendable(StringBuilder appendable) throws IOException {
+    appendab<caret>le += 1;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeToAppend/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeToAppend/before2.java
new file mode 100644
index 0000000..0932be4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeToAppend/before2.java
@@ -0,0 +1,7 @@
+// "Change to 'builder.append(1+1).append(s).append("  ")'" "true"
+class Test {
+  String s;
+  void bar(StringBuilder builder) {
+    buil<caret>der += 1 + 1 + s + "  ";
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeTypeArgs/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeTypeArgs/after1.java
new file mode 100644
index 0000000..430b687
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeTypeArgs/after1.java
@@ -0,0 +1,11 @@
+// "Change type arguments to <String>" "true"
+class Generic<E> {
+  Generic(E arg) {
+  }
+}
+
+class Tester {
+  void method() {
+    new Generic<String>("hi");
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeTypeArgs/afterMultipleParams.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeTypeArgs/afterMultipleParams.java
new file mode 100644
index 0000000..55ff7b6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeTypeArgs/afterMultipleParams.java
@@ -0,0 +1,11 @@
+// "Change type arguments to <String, Integer>" "true"
+class Generic<E, K> {
+  Generic(E arg, K arg1) {
+  }
+}
+
+class Tester {
+  void method() {
+    new Generic<String, Integer>("hi", 1);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeTypeArgs/afterSuperType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeTypeArgs/afterSuperType.java
new file mode 100644
index 0000000..337708e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeTypeArgs/afterSuperType.java
@@ -0,0 +1,13 @@
+import java.io.Serializable;
+
+// "Change type arguments to <Serializable>" "true"
+class Generic<E> {
+  Generic(E arg, E arg1) {
+  }
+}
+
+class Tester {
+  void method() {
+    new Generic<Serializable>("hi", 1);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeTypeArgs/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeTypeArgs/before1.java
new file mode 100644
index 0000000..dd660b8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeTypeArgs/before1.java
@@ -0,0 +1,11 @@
+// "Change type arguments to <String>" "true"
+class Generic<E> {
+  Generic(E arg) {
+  }
+}
+
+class Tester {
+  void method() {
+    new Generic<Integer>(<caret>"hi");
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeTypeArgs/beforeCorrectTypeParam.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeTypeArgs/beforeCorrectTypeParam.java
new file mode 100644
index 0000000..3d3c223
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeTypeArgs/beforeCorrectTypeParam.java
@@ -0,0 +1,11 @@
+// "Change type arguments to <String>" "false"
+class Generic<E> {
+  Generic(E arg, int i) {
+  }
+}
+
+class Tester {
+  void method() {
+    new Generic<String>(<caret>"hi", "");
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeTypeArgs/beforeDisabled.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeTypeArgs/beforeDisabled.java
new file mode 100644
index 0000000..2869486
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeTypeArgs/beforeDisabled.java
@@ -0,0 +1,13 @@
+// "Change type arguments to <String>" "false"
+import java.util.List;
+
+class Generic<E> {
+  Generic(E arg, List<E> arg1) {
+  }
+}
+
+class Tester {
+  void method() {
+    new Generic<Integer>(<caret>"hi", "hi");
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeTypeArgs/beforeIncomplete.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeTypeArgs/beforeIncomplete.java
new file mode 100644
index 0000000..b6b5b04
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeTypeArgs/beforeIncomplete.java
@@ -0,0 +1,11 @@
+// "Change type arguments to <String>" "false"
+class Generic<E> {
+  Generic(E arg) {
+  }
+}
+
+class Tester {
+  void method() {
+    new Generic<Integer>(<caret>"hi"
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeTypeArgs/beforeIncomplete2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeTypeArgs/beforeIncomplete2.java
new file mode 100644
index 0000000..9b1def3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeTypeArgs/beforeIncomplete2.java
@@ -0,0 +1,11 @@
+// "Change type arguments to <String>" "false"
+class Generic<E> {
+  Generic(E arg, int i) {
+  }
+}
+
+class Tester {
+  void method() {
+    new Generic<Integer>(<caret>"hi");
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeTypeArgs/beforeMultipleParams.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeTypeArgs/beforeMultipleParams.java
new file mode 100644
index 0000000..896686b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeTypeArgs/beforeMultipleParams.java
@@ -0,0 +1,11 @@
+// "Change type arguments to <String, Integer>" "true"
+class Generic<E, K> {
+  Generic(E arg, K arg1) {
+  }
+}
+
+class Tester {
+  void method() {
+    new Generic<Integer, Integer>(<caret>"hi", 1);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeTypeArgs/beforeSuperType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeTypeArgs/beforeSuperType.java
new file mode 100644
index 0000000..1b65807
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeTypeArgs/beforeSuperType.java
@@ -0,0 +1,11 @@
+// "Change type arguments to <Serializable>" "true"
+class Generic<E> {
+  Generic(E arg, E arg1) {
+  }
+}
+
+class Tester {
+  void method() {
+    new Generic<Integer>(<caret>"hi", 1);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertColorRepresentation/after2Bytes.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertColorRepresentation/after2Bytes.java
new file mode 100644
index 0000000..a2412d2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertColorRepresentation/after2Bytes.java
@@ -0,0 +1,21 @@
+// "Convert to 'new Color(0x10101)'" "true"
+
+package java.awt;
+
+class A {
+  private Color color = new Color(0x10101);
+}
+
+class Color {
+  Color(int r, int g, int b) {
+  }
+
+  Color(int r, int g, int b, int a) {
+  }
+
+  Color(int rgb) {
+  }
+
+  Color(int rgba, boolean hasAlpha) {
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertColorRepresentation/afterHex2Rgb.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertColorRepresentation/afterHex2Rgb.java
new file mode 100644
index 0000000..18f7714
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertColorRepresentation/afterHex2Rgb.java
@@ -0,0 +1,21 @@
+// "Convert to 'new Color(37, 100, 120)'" "true"
+
+package java.awt;
+
+public class A {
+  private Color color = new Color(37, 100, 120);
+}
+
+class Color {
+  Color(int r, int g, int b) {
+  }
+
+  Color(int r, int g, int b, int a) {
+  }
+
+  Color(int rgb) {
+  }
+
+  Color(int rgba, boolean hasAlpha) {
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertColorRepresentation/afterHexA2Rgba.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertColorRepresentation/afterHexA2Rgba.java
new file mode 100644
index 0000000..70171b8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertColorRepresentation/afterHexA2Rgba.java
@@ -0,0 +1,21 @@
+// "Convert to 'new Color(37, 100, 120, 140)'" "true"
+
+package java.awt;
+
+class A {
+  private Color color = new Color(37, 100, 120, 140);
+}
+
+class Color {
+  Color(int r, int g, int b) {
+  }
+
+  Color(int r, int g, int b, int a) {
+  }
+
+  Color(int rgb) {
+  }
+
+  Color(int rgba, boolean hasAlpha) {
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertColorRepresentation/afterRgb2Hex.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertColorRepresentation/afterRgb2Hex.java
new file mode 100644
index 0000000..c46980a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertColorRepresentation/afterRgb2Hex.java
@@ -0,0 +1,21 @@
+// "Convert to 'new Color(0x256478)'" "true"
+
+package java.awt;
+
+class A {
+  private Color color = new Color(0x256478);
+}
+
+class Color {
+  Color(int r, int g, int b) {
+  }
+
+  Color(int r, int g, int b, int a) {
+  }
+
+  Color(int rgb) {
+  }
+
+  Color(int rgba, boolean hasAlpha) {
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertColorRepresentation/afterRgba2Hex.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertColorRepresentation/afterRgba2Hex.java
new file mode 100644
index 0000000..488f940
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertColorRepresentation/afterRgba2Hex.java
@@ -0,0 +1,21 @@
+// "Convert to 'new Color(0x2564788c,true)'" "true"
+
+package java.awt;
+
+class A {
+  private Color color = new Color(0x2564788c, true);
+}
+
+class Color {
+  Color(int r, int g, int b) {
+  }
+
+  Color(int r, int g, int b, int a) {
+  }
+
+  Color(int rgb) {
+  }
+
+  Color(int rgba, boolean hasAlpha) {
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertColorRepresentation/before2Bytes.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertColorRepresentation/before2Bytes.java
new file mode 100644
index 0000000..8396cba
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertColorRepresentation/before2Bytes.java
@@ -0,0 +1,21 @@
+// "Convert to 'new Color(0x10101)'" "true"
+
+package java.awt;
+
+class A {
+  private Color color = new Color(257, 257,<caret> 257);
+}
+
+class Color {
+  Color(int r, int g, int b) {
+  }
+
+  Color(int r, int g, int b, int a) {
+  }
+
+  Color(int rgb) {
+  }
+
+  Color(int rgba, boolean hasAlpha) {
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertColorRepresentation/beforeHex2Rgb.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertColorRepresentation/beforeHex2Rgb.java
new file mode 100644
index 0000000..666394e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertColorRepresentation/beforeHex2Rgb.java
@@ -0,0 +1,21 @@
+// "Convert to 'new Color(37, 100, 120)'" "true"
+
+package java.awt;
+
+public class A {
+  private Color color = new Color(0x25<caret>6478);
+}
+
+class Color {
+  Color(int r, int g, int b) {
+  }
+
+  Color(int r, int g, int b, int a) {
+  }
+
+  Color(int rgb) {
+  }
+
+  Color(int rgba, boolean hasAlpha) {
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertColorRepresentation/beforeHexA2Rgba.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertColorRepresentation/beforeHexA2Rgba.java
new file mode 100644
index 0000000..39762cd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertColorRepresentation/beforeHexA2Rgba.java
@@ -0,0 +1,21 @@
+// "Convert to 'new Color(37, 100, 120, 140)'" "true"
+
+package java.awt;
+
+class A {
+  private Color color = new Color(0x25647<caret>88c, true);
+}
+
+class Color {
+  Color(int r, int g, int b) {
+  }
+
+  Color(int r, int g, int b, int a) {
+  }
+
+  Color(int rgb) {
+  }
+
+  Color(int rgba, boolean hasAlpha) {
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertColorRepresentation/beforeRgb2Hex.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertColorRepresentation/beforeRgb2Hex.java
new file mode 100644
index 0000000..10f6bc1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertColorRepresentation/beforeRgb2Hex.java
@@ -0,0 +1,21 @@
+// "Convert to 'new Color(0x256478)'" "true"
+
+package java.awt;
+
+class A {
+  private Color color = new Color(37, 100,<caret> 120);
+}
+
+class Color {
+  Color(int r, int g, int b) {
+  }
+
+  Color(int r, int g, int b, int a) {
+  }
+
+  Color(int rgb) {
+  }
+
+  Color(int rgba, boolean hasAlpha) {
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertColorRepresentation/beforeRgba2Hex.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertColorRepresentation/beforeRgba2Hex.java
new file mode 100644
index 0000000..cfe1255
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertColorRepresentation/beforeRgba2Hex.java
@@ -0,0 +1,21 @@
+// "Convert to 'new Color(0x2564788c,true)'" "true"
+
+package java.awt;
+
+class A {
+  private Color color = new Color(37, 100,<caret> 120, 140);
+}
+
+class Color {
+  Color(int r, int g, int b) {
+  }
+
+  Color(int r, int g, int b, int a) {
+  }
+
+  Color(int rgb) {
+  }
+
+  Color(int rgba, boolean hasAlpha) {
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertDoubleToFloat/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertDoubleToFloat/after1.java
new file mode 100644
index 0000000..150bd12
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertDoubleToFloat/after1.java
@@ -0,0 +1,7 @@
+// "Convert '1e1' to float" "true"
+class Test {
+  void bar() {
+    foo(1e1f);
+  }
+  void foo(float f){}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertDoubleToFloat/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertDoubleToFloat/after2.java
new file mode 100644
index 0000000..99cdfdf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertDoubleToFloat/after2.java
@@ -0,0 +1,7 @@
+// "Convert '2.' to float" "true"
+class Test {
+  void bar() {
+    foo(2.f);
+  }
+  void foo(float f){}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertDoubleToFloat/after3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertDoubleToFloat/after3.java
new file mode 100644
index 0000000..9272f41
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertDoubleToFloat/after3.java
@@ -0,0 +1,7 @@
+// "Convert '.3' to float" "true"
+class Test {
+  void bar() {
+    foo(.3f);
+  }
+  void foo(float f){}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertDoubleToFloat/after4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertDoubleToFloat/after4.java
new file mode 100644
index 0000000..9d3993f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertDoubleToFloat/after4.java
@@ -0,0 +1,7 @@
+// "Convert '0.0' to float" "true"
+class Test {
+  void bar() {
+    foo(0.0f);
+  }
+  void foo(float f){}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertDoubleToFloat/after5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertDoubleToFloat/after5.java
new file mode 100644
index 0000000..7e70cf4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertDoubleToFloat/after5.java
@@ -0,0 +1,7 @@
+// "Convert '3.14' to float" "true"
+class Test {
+  void bar() {
+    foo(3.14f);
+  }
+  void foo(float f){}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertDoubleToFloat/after6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertDoubleToFloat/after6.java
new file mode 100644
index 0000000..42310fa
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertDoubleToFloat/after6.java
@@ -0,0 +1,7 @@
+// "Convert '1e-9d' to float" "true"
+class Test {
+  void bar() {
+    foo(1e-9f);
+  }
+  void foo(float f){}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertDoubleToFloat/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertDoubleToFloat/before1.java
new file mode 100644
index 0000000..e476b77
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertDoubleToFloat/before1.java
@@ -0,0 +1,7 @@
+// "Convert '1e1' to float" "true"
+class Test {
+  void bar() {
+    foo(1e<caret>1);
+  }
+  void foo(float f){}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertDoubleToFloat/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertDoubleToFloat/before2.java
new file mode 100644
index 0000000..fa67aa8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertDoubleToFloat/before2.java
@@ -0,0 +1,7 @@
+// "Convert '2.' to float" "true"
+class Test {
+  void bar() {
+    foo(2<caret>.);
+  }
+  void foo(float f){}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertDoubleToFloat/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertDoubleToFloat/before3.java
new file mode 100644
index 0000000..3f6fb07
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertDoubleToFloat/before3.java
@@ -0,0 +1,7 @@
+// "Convert '.3' to float" "true"
+class Test {
+  void bar() {
+    foo(.<caret>3);
+  }
+  void foo(float f){}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertDoubleToFloat/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertDoubleToFloat/before4.java
new file mode 100644
index 0000000..92cb59d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertDoubleToFloat/before4.java
@@ -0,0 +1,7 @@
+// "Convert '0.0' to float" "true"
+class Test {
+  void bar() {
+    foo(0<caret>.0);
+  }
+  void foo(float f){}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertDoubleToFloat/before5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertDoubleToFloat/before5.java
new file mode 100644
index 0000000..9541ec5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertDoubleToFloat/before5.java
@@ -0,0 +1,7 @@
+// "Convert '3.14' to float" "true"
+class Test {
+  void bar() {
+    foo(3<caret>.14);
+  }
+  void foo(float f){}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertDoubleToFloat/before6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertDoubleToFloat/before6.java
new file mode 100644
index 0000000..74c6049
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertDoubleToFloat/before6.java
@@ -0,0 +1,7 @@
+// "Convert '1e-9d' to float" "true"
+class Test {
+  void bar() {
+    foo(1e-9<caret>d);
+  }
+  void foo(float f){}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertDoubleToFloat/before7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertDoubleToFloat/before7.java
new file mode 100644
index 0000000..fe93892
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertDoubleToFloat/before7.java
@@ -0,0 +1,7 @@
+// "Convert '1e137' to float" "false"
+class Test {
+  void bar() {
+    foo(1e1<caret>37);
+  }
+  void foo(float f){}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertSwitchToIf/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertSwitchToIf/after1.java
new file mode 100644
index 0000000..1328222
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertSwitchToIf/after1.java
@@ -0,0 +1,8 @@
+// "Replace 'switch' with 'if'" "true"
+class Test {
+  void foo(float f) {
+      if (f == 0) {
+          System.out.println(f);
+      }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertSwitchToIf/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertSwitchToIf/before1.java
new file mode 100644
index 0000000..56d0be1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertSwitchToIf/before1.java
@@ -0,0 +1,9 @@
+// "Replace 'switch' with 'if'" "true"
+class Test {
+  void foo(float f) {
+    switch (f<caret>) {
+      case 0:
+        System.out.println(f);
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertSwitchToIf/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertSwitchToIf/before2.java
new file mode 100644
index 0000000..e94e3fd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertSwitchToIf/before2.java
@@ -0,0 +1,7 @@
+// "Replace 'switch' with 'if'" "false"
+class Test {
+  void foo(float f) {
+    switch (f<caret>) {
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertSwitchToIf/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertSwitchToIf/before3.java
new file mode 100644
index 0000000..bb70140
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convertSwitchToIf/before3.java
@@ -0,0 +1,8 @@
+// "Replace 'switch' with 'if'" "false"
+class Test {
+  void foo(float f) {
+    switch (f<caret>) {
+      case 
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/copyAbstractMethodImplementation/afterEnumConstant.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/copyAbstractMethodImplementation/afterEnumConstant.java
new file mode 100644
index 0000000..c9223f9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/copyAbstractMethodImplementation/afterEnumConstant.java
@@ -0,0 +1,14 @@
+// "Use existing implementation of 'm'" "true"
+enum I {
+    A {
+        void m() {
+            <selection>System.out.println("");</selection>
+        }
+    },
+    B {
+        public void m() {
+            System.out.println("");
+        }
+    };
+    abstract void m();
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/copyAbstractMethodImplementation/afterEnumConstantWithArgs.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/copyAbstractMethodImplementation/afterEnumConstantWithArgs.java
new file mode 100644
index 0000000..bbada5e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/copyAbstractMethodImplementation/afterEnumConstantWithArgs.java
@@ -0,0 +1,15 @@
+// "Use existing implementation of 'm'" "true"
+enum I {
+    A("a") {
+        void m() {
+            <selection><caret>System.out.println("");</selection>
+        }
+    },
+    B("b") {
+        public void m() {
+            System.out.println("");
+        }
+    };
+    abstract void m();
+    I(String s){}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/copyAbstractMethodImplementation/afterGeneric.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/copyAbstractMethodImplementation/afterGeneric.java
new file mode 100644
index 0000000..0c7f160
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/copyAbstractMethodImplementation/afterGeneric.java
@@ -0,0 +1,16 @@
+// "Use existing implementation of 'm'" "true"
+interface I<T> {
+    void m(T param);
+}
+
+class A implements I<Object> {
+    public void m(Object param) {
+        System.out.println(param.toString());
+    }
+}
+
+class B implements I<String> {
+    public void m(String param) {
+        <selection>System.out.println(param.toString());</selection>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/copyAbstractMethodImplementation/afterSimple.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/copyAbstractMethodImplementation/afterSimple.java
new file mode 100644
index 0000000..e22b0b3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/copyAbstractMethodImplementation/afterSimple.java
@@ -0,0 +1,16 @@
+// "Use existing implementation of 'm'" "true"
+interface I {
+    void m();
+}
+
+class A implements I {
+    public void m() {
+        System.out.println("code");
+    }
+}
+
+class B implements I {
+    public void m() {
+        <selection>System.out.println("code");</selection>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/copyAbstractMethodImplementation/afterSkipChildClass.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/copyAbstractMethodImplementation/afterSkipChildClass.java
new file mode 100644
index 0000000..caaf5b8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/copyAbstractMethodImplementation/afterSkipChildClass.java
@@ -0,0 +1,19 @@
+// "Use existing implementation of 'm'" "true"
+interface I<T> {
+    void m(T param);
+}
+
+class A implements I<Object> {
+    public void m(Object param) {
+        System.out.println(param.toString());
+    }
+}
+
+class B implements I<String> {
+    public void m(String param) {
+        <selection>System.out.println(param.toString());</selection>
+    }
+}
+
+class C extends B {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/copyAbstractMethodImplementation/afterStaticRef.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/copyAbstractMethodImplementation/afterStaticRef.java
new file mode 100644
index 0000000..a1dd3ed
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/copyAbstractMethodImplementation/afterStaticRef.java
@@ -0,0 +1,18 @@
+// "Use existing implementation of 'm'" "true"
+interface I {
+    void m();
+}
+
+class A implements I {
+    public static final String TEXT = "code";
+
+    public void m() {
+        System.out.println(TEXT);
+    }
+}
+
+class B implements I {
+    public void m() {
+        <selection>System.out.println(A.TEXT);</selection>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/copyAbstractMethodImplementation/beforeEnumConstant.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/copyAbstractMethodImplementation/beforeEnumConstant.java
new file mode 100644
index 0000000..9fe652d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/copyAbstractMethodImplementation/beforeEnumConstant.java
@@ -0,0 +1,10 @@
+// "Use existing implementation of 'm'" "true"
+enum I {
+    A,
+    B {
+        public void m() {
+            System.out.println("");
+        }
+    };
+    abstract void <caret>m();
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/copyAbstractMethodImplementation/beforeEnumConstantWithArgs.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/copyAbstractMethodImplementation/beforeEnumConstantWithArgs.java
new file mode 100644
index 0000000..902f1e1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/copyAbstractMethodImplementation/beforeEnumConstantWithArgs.java
@@ -0,0 +1,11 @@
+// "Use existing implementation of 'm'" "true"
+enum I {
+    A("a"),
+    B("b") {
+        public void m() {
+            System.out.println("");
+        }
+    };
+    abstract void <caret>m();
+    I(String s){}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/copyAbstractMethodImplementation/beforeGeneric.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/copyAbstractMethodImplementation/beforeGeneric.java
new file mode 100644
index 0000000..e6db43a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/copyAbstractMethodImplementation/beforeGeneric.java
@@ -0,0 +1,13 @@
+// "Use existing implementation of 'm'" "true"
+interface I<T> {
+    void <caret>m(T param);
+}
+
+class A implements I<Object> {
+    public void m(Object param) {
+        System.out.println(param.toString());
+    }
+}
+
+class B implements I<String> {
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/copyAbstractMethodImplementation/beforeInterfaceExtends.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/copyAbstractMethodImplementation/beforeInterfaceExtends.java
new file mode 100644
index 0000000..07d347f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/copyAbstractMethodImplementation/beforeInterfaceExtends.java
@@ -0,0 +1,11 @@
+// "Use existing implementation of 'foo'" "false"
+interface I {
+    void <caret>foo();
+}
+class IImpl implements I {
+  @Override
+  public void foo() {}
+}
+
+interface II extends I {}
+class IImpl2 extends IImpl implements II {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/copyAbstractMethodImplementation/beforeSimple.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/copyAbstractMethodImplementation/beforeSimple.java
new file mode 100644
index 0000000..84c6dab
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/copyAbstractMethodImplementation/beforeSimple.java
@@ -0,0 +1,13 @@
+// "Use existing implementation of 'm'" "true"
+interface I {
+    void <caret>m();
+}
+
+class A implements I {
+    public void m() {
+        System.out.println("code");
+    }
+}
+
+class B implements I {
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/copyAbstractMethodImplementation/beforeSkipChildClass.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/copyAbstractMethodImplementation/beforeSkipChildClass.java
new file mode 100644
index 0000000..c1d08f8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/copyAbstractMethodImplementation/beforeSkipChildClass.java
@@ -0,0 +1,16 @@
+// "Use existing implementation of 'm'" "true"
+interface I<T> {
+    void <caret>m(T param);
+}
+
+class A implements I<Object> {
+    public void m(Object param) {
+        System.out.println(param.toString());
+    }
+}
+
+class B implements I<String> {
+}
+
+class C extends B {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/copyAbstractMethodImplementation/beforeStaticRef.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/copyAbstractMethodImplementation/beforeStaticRef.java
new file mode 100644
index 0000000..f16bb1b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/copyAbstractMethodImplementation/beforeStaticRef.java
@@ -0,0 +1,15 @@
+// "Use existing implementation of 'm'" "true"
+interface I {
+    void <caret>m();
+}
+
+class A implements I {
+    public static final String TEXT = "code";
+
+    public void m() {
+        System.out.println(TEXT);
+    }
+}
+
+class B implements I {
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createAnnotationMethodFromUsage/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createAnnotationMethodFromUsage/after1.java
new file mode 100644
index 0000000..fa24406
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createAnnotationMethodFromUsage/after1.java
@@ -0,0 +1,10 @@
+// "Create Method 'test'" "true"
+public class Test {
+    @Attr(test= "")
+    public Test() {
+    }
+}
+
+@interface Attr {
+    String test();
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createAnnotationMethodFromUsage/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createAnnotationMethodFromUsage/after2.java
new file mode 100644
index 0000000..166d3e7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createAnnotationMethodFromUsage/after2.java
@@ -0,0 +1,10 @@
+// "Create Method 'test'" "true"
+public class Test {
+    @Attr(test= {""})
+    public Test() {
+    }
+}
+
+@interface Attr {
+    String[] test();
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createAnnotationMethodFromUsage/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createAnnotationMethodFromUsage/before1.java
new file mode 100644
index 0000000..1acfe10
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createAnnotationMethodFromUsage/before1.java
@@ -0,0 +1,9 @@
+// "Create Method 'test'" "true"
+public class Test {
+    @Attr(te<caret>st= "")
+    public Test() {
+    }
+}
+
+@interface Attr {
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createAnnotationMethodFromUsage/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createAnnotationMethodFromUsage/before2.java
new file mode 100644
index 0000000..a16ad50
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createAnnotationMethodFromUsage/before2.java
@@ -0,0 +1,9 @@
+// "Create Method 'test'" "true"
+public class Test {
+    @Attr(te<caret>st= {""})
+    public Test() {
+    }
+}
+
+@interface Attr {
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createAnnotationMethodFromUsage/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createAnnotationMethodFromUsage/before3.java
new file mode 100644
index 0000000..f9e5ff2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createAnnotationMethodFromUsage/before3.java
@@ -0,0 +1,9 @@
+// "Create Method 'test'" "false"
+public class Test {
+    @Attr(te<caret>st= {"", 1})
+    public Test() {
+    }
+}
+
+@interface Attr {
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createAnnotationMethodFromUsage/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createAnnotationMethodFromUsage/before4.java
new file mode 100644
index 0000000..aa67ec8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createAnnotationMethodFromUsage/before4.java
@@ -0,0 +1,9 @@
+// "Create Method 'test'" "false"
+public class Test {
+    @Attr(te<caret>st= {new String[]{""}})
+    public Test() {
+    }
+}
+
+@interface Attr {
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createAnnotationTypeFromUsage/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createAnnotationTypeFromUsage/after1.java
new file mode 100644
index 0000000..7d6ead5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createAnnotationTypeFromUsage/after1.java
@@ -0,0 +1,7 @@
+// "Create Annotation 'Smth'" "true"
+class Test {
+  void foo(@Smth String s){}
+}
+
+public @interface Smth {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createAnnotationTypeFromUsage/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createAnnotationTypeFromUsage/before1.java
new file mode 100644
index 0000000..4b79b77
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createAnnotationTypeFromUsage/before1.java
@@ -0,0 +1,4 @@
+// "Create Annotation 'Smth'" "true"
+class Test {
+  void foo(@S<caret>mth String s){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createAnnotationTypeFromUsage/beforeNotAvailableInNonAnnotationPlace.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createAnnotationTypeFromUsage/beforeNotAvailableInNonAnnotationPlace.java
new file mode 100644
index 0000000..960f229
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createAnnotationTypeFromUsage/beforeNotAvailableInNonAnnotationPlace.java
@@ -0,0 +1,4 @@
+// "Create Annotation 'Smth'" "false"
+class Test {
+  void foo(S<caret>mth s){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createCastExpressionFromInstanceof/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createCastExpressionFromInstanceof/after1.java
new file mode 100644
index 0000000..c53e478
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createCastExpressionFromInstanceof/after1.java
@@ -0,0 +1,9 @@
+// "Cast to 'Runnable'" "true"
+class C {
+  void f() {
+    if (this instanceof Runnable) {
+        ((Runnable) this)<caret>
+    }
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createCastExpressionFromInstanceof/afterOnRef.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createCastExpressionFromInstanceof/afterOnRef.java
new file mode 100644
index 0000000..73a6f66
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createCastExpressionFromInstanceof/afterOnRef.java
@@ -0,0 +1,9 @@
+// "Cast to 'Runnable'" "true"
+class C {
+  void f(Object o) {
+    if (o instanceof Runnable) {
+        ((Runnable) o)<caret>
+    }
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createCastExpressionFromInstanceof/afterSomeStmt.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createCastExpressionFromInstanceof/afterSomeStmt.java
new file mode 100644
index 0000000..6e12309
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createCastExpressionFromInstanceof/afterSomeStmt.java
@@ -0,0 +1,9 @@
+// "Cast to 'A'" "true"
+class A {
+   void foo(Object foo) {
+       if(foo instanceof A) {
+           ((A) foo)
+           System.out.println("");
+       }
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createCastExpressionFromInstanceof/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createCastExpressionFromInstanceof/before1.java
new file mode 100644
index 0000000..e925897
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createCastExpressionFromInstanceof/before1.java
@@ -0,0 +1,7 @@
+// "Cast to 'Runnable'" "true"
+class C {
+  void f() {
+    if (this <caret>instanceof Runnable)
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createCastExpressionFromInstanceof/beforeNegationOnRef.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createCastExpressionFromInstanceof/beforeNegationOnRef.java
new file mode 100644
index 0000000..9d006b6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createCastExpressionFromInstanceof/beforeNegationOnRef.java
@@ -0,0 +1,9 @@
+// "Cast to 'Runnable'" "false"
+class C {
+  void f(Object o) {
+    if (!(o instanceof Runnable)) {
+      o<caret>
+    }
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createCastExpressionFromInstanceof/beforeOnRef.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createCastExpressionFromInstanceof/beforeOnRef.java
new file mode 100644
index 0000000..2a44e0f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createCastExpressionFromInstanceof/beforeOnRef.java
@@ -0,0 +1,9 @@
+// "Cast to 'Runnable'" "true"
+class C {
+  void f(Object o) {
+    if (o instanceof Runnable) {
+      o<caret>
+    }
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createCastExpressionFromInstanceof/beforeSomeStmt.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createCastExpressionFromInstanceof/beforeSomeStmt.java
new file mode 100644
index 0000000..bae9dfb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createCastExpressionFromInstanceof/beforeSomeStmt.java
@@ -0,0 +1,8 @@
+// "Cast to 'A'" "true"
+class A {
+   void foo(Object foo) {
+       if(foo insta<caret>nceof A) {
+           System.out.println("");
+       }
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/after1.java
new file mode 100644
index 0000000..4969955
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/after1.java
@@ -0,0 +1,13 @@
+// "Create Class 'MyCollection'" "true"
+import java.util.*;
+
+public class Test {
+    public static void main() {
+        Collection c = new MyCollection(1, "test");
+    }
+}
+
+public class MyCollection implements Collection {
+    public MyCollection(int i, String test) {<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/after2.java
new file mode 100644
index 0000000..7b15d60
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/after2.java
@@ -0,0 +1,13 @@
+// "Create Class 'MyArrayList'" "true"
+import java.util.*;
+
+public class Test {
+    public static void main() {
+        ArrayList list = new MyArrayList(1, "test");
+    }
+}
+
+public class MyArrayList extends ArrayList {
+    public MyArrayList(int i, String test) {<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/after3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/after3.java
new file mode 100644
index 0000000..48aa254
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/after3.java
@@ -0,0 +1,12 @@
+// "Create Class 'MyInteger'" "true"
+public class Test {
+    public static void main() {
+        int xxx = 3;
+        Integer i = new MyInteger(xxx);
+    }
+}
+
+public class MyInteger {
+    public MyInteger(int xxx) {<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/after6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/after6.java
new file mode 100644
index 0000000..2ee2024
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/after6.java
@@ -0,0 +1,9 @@
+// "Create Class 'MyCollection'" "true"
+public class Test {
+    public static void main() {
+        Collection[] cc = new MyCollection[10];
+    }
+}
+
+<caret>public class MyCollection {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/after7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/after7.java
new file mode 100644
index 0000000..774d4dd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/after7.java
@@ -0,0 +1,13 @@
+// "Create Class 'MyCollection'" "true"
+import java.util.*;
+
+public class Test {
+    public static void main() {
+        Collection c = new Test.MyCollection(1);
+    }
+
+    public class MyCollection implements Collection {
+        public MyCollection(int i) {<caret>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/after8.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/after8.java
new file mode 100644
index 0000000..e4761ed
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/after8.java
@@ -0,0 +1,12 @@
+// "Create Class 'MyTableModel'" "true"
+import javax.swing.*;
+import javax.swing.table.TableModel;
+
+public class Test {
+    public static void main() {
+        JTable table = new JTable(new MyTableModel());
+    }
+}
+
+<caret>public class MyTableModel implements TableModel {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/afterGenerics.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/afterGenerics.java
new file mode 100644
index 0000000..3cae4d8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/afterGenerics.java
@@ -0,0 +1,9 @@
+// "Create Class 'Generic'" "true"
+class Test {
+  void foo () {
+    new Generic<String> ();
+  }
+}
+
+<caret>public class Generic<T> {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/before1.java
new file mode 100644
index 0000000..7ef6d37
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/before1.java
@@ -0,0 +1,8 @@
+// "Create Class 'MyCollection'" "true"
+import java.util.*;
+
+public class Test {
+    public static void main() {
+        Collection c = new <caret>MyCollection(1, "test");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/before2.java
new file mode 100644
index 0000000..494b223
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/before2.java
@@ -0,0 +1,8 @@
+// "Create Class 'MyArrayList'" "true"
+import java.util.*;
+
+public class Test {
+    public static void main() {
+        ArrayList list = new <caret>MyArrayList(1, "test");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/before3.java
new file mode 100644
index 0000000..e18fd9e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/before3.java
@@ -0,0 +1,7 @@
+// "Create Class 'MyInteger'" "true"
+public class Test {
+    public static void main() {
+        int xxx = 3;
+        Integer i = new <caret>MyInteger(xxx);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/before4.java
new file mode 100644
index 0000000..8dcd379
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/before4.java
@@ -0,0 +1,8 @@
+// "Do not try to create class Inner" "false"
+public class Test {
+    public static void main() {
+        new Te<caret>st.Inner();
+    }
+    
+    public static class Inner {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/before5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/before5.java
new file mode 100644
index 0000000..52abe4d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/before5.java
@@ -0,0 +1,8 @@
+// "Do not try to create class Inner" "false"
+public class Test {
+    public static void main() {
+        new Inner<caret>();
+    }
+    
+    public static class Inner {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/before6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/before6.java
new file mode 100644
index 0000000..f4ad09f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/before6.java
@@ -0,0 +1,6 @@
+// "Create Class 'MyCollection'" "true"
+public class Test {
+    public static void main() {
+        Collection[] cc = new <caret>MyCollection[10];
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/before7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/before7.java
new file mode 100644
index 0000000..9fc3a6f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/before7.java
@@ -0,0 +1,8 @@
+// "Create Class 'MyCollection'" "true"
+import java.util.*;
+
+public class Test {
+    public static void main() {
+        Collection c = new Test.My<caret>Collection(1);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/before8.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/before8.java
new file mode 100644
index 0000000..336746c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/before8.java
@@ -0,0 +1,8 @@
+// "Create Class 'MyTableModel'" "true"
+import javax.swing.*;
+
+public class Test {
+    public static void main() {
+        JTable table = new JTable(new MyTable<caret>Model());
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/before9.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/before9.java
new file mode 100644
index 0000000..b30c507
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/before9.java
@@ -0,0 +1,8 @@
+// "Do not create anything" "false"
+import javax.swing.*;
+
+public class Test {
+    public static void main() {
+		boolean[] bees = new boolean[args.leng<caret>th]; 
+	}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/beforeGenerics.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/beforeGenerics.java
new file mode 100644
index 0000000..47ed117
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromNew/beforeGenerics.java
@@ -0,0 +1,6 @@
+// "Create Class 'Generic'" "true"
+class Test {
+  void foo () {
+    new <caret>Generic<String> ();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/after1.java
new file mode 100644
index 0000000..d6d91eb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/after1.java
@@ -0,0 +1,9 @@
+// "Create Class 'Abc'" "true"
+public class Test {
+  public foo(int ppp) {
+    Abc.foo();
+  }
+}
+
+public class <caret>Abc {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/afterCast.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/afterCast.java
new file mode 100644
index 0000000..61b780c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/afterCast.java
@@ -0,0 +1,11 @@
+// "Create Class 'ClassB'" "true"
+public class ClassA
+{
+  public void mA(Object arg)
+  {
+    ((ClassB) arg).foo();
+  }
+}
+
+public class <caret>ClassB {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/afterClassUsedInWildcard.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/afterClassUsedInWildcard.java
new file mode 100644
index 0000000..6c90038
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/afterClassUsedInWildcard.java
@@ -0,0 +1,10 @@
+// "Create Class 'Foo'" "true"
+import java.util.Collection;
+public class Test {
+  public Collection<? extends Foo> getSomething() {
+    return null;
+  }
+}
+
+public class <caret>Foo {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/afterEnumUsedInCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/afterEnumUsedInCall.java
new file mode 100644
index 0000000..236734c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/afterEnumUsedInCall.java
@@ -0,0 +1,11 @@
+// "Create Enum 'Foo'" "true"
+public class Test {
+  void f(I i) {}
+  {
+    f(Foo.CONST);
+  }
+}
+
+interface I {}
+
+public enum Foo implements I {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/afterExtends.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/afterExtends.java
new file mode 100644
index 0000000..daa11a8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/afterExtends.java
@@ -0,0 +1,6 @@
+// "Create Class 'Abc'" "true"
+public class Test extends Abc {
+}
+
+public class <caret>Abc {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/afterFieldType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/afterFieldType.java
new file mode 100644
index 0000000..e391794
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/afterFieldType.java
@@ -0,0 +1,7 @@
+// "Create Class 'Abc'" "true"
+public class Test {
+  private Abc fld;
+}
+
+public class <caret>Abc {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/afterInNewArgs.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/afterInNewArgs.java
new file mode 100644
index 0000000..f75f61f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/afterInNewArgs.java
@@ -0,0 +1,9 @@
+// "Create Class 'Foo'" "true"
+public class Test {
+  void foo() {
+    new Test(Foo.FIELD);
+  }
+}
+
+public class Foo {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/afterMethodType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/afterMethodType.java
new file mode 100644
index 0000000..87809a5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/afterMethodType.java
@@ -0,0 +1,7 @@
+// "Create Class 'Abc'" "true"
+public class Test {
+  private Abc foo() {}
+}
+
+public class <caret>Abc {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/afterParameterType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/afterParameterType.java
new file mode 100644
index 0000000..351c7a3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/afterParameterType.java
@@ -0,0 +1,7 @@
+// "Create Class 'Abc'" "true"
+public class Test {
+  private void foo(Abc param) {}
+}
+
+public class <caret>Abc {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/afterTypeParameter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/afterTypeParameter.java
new file mode 100644
index 0000000..a0c9b6e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/afterTypeParameter.java
@@ -0,0 +1,7 @@
+// "Create Class 'Foo'" "true"
+public class Test {
+  List l = new ArrayList<Foo>();
+}
+
+public class <caret>Foo {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/afterTypeParameterCreated.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/afterTypeParameterCreated.java
new file mode 100644
index 0000000..68d9a85
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/afterTypeParameterCreated.java
@@ -0,0 +1,7 @@
+// "Create Class 'Foo'" "true"
+public class Test {
+  <R> void foo(Foo<R, String> f){}
+}
+
+public class Foo<R, T> {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/before1.java
new file mode 100644
index 0000000..f8f9e80
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/before1.java
@@ -0,0 +1,6 @@
+// "Create Class 'Abc'" "true"
+public class Test {
+  public foo(int ppp) {
+    <caret>Abc.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/beforeCast.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/beforeCast.java
new file mode 100644
index 0000000..05ddae3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/beforeCast.java
@@ -0,0 +1,8 @@
+// "Create Class 'ClassB'" "true"
+public class ClassA
+{
+  public void mA(Object arg)
+  {
+    ((<caret>ClassB) arg).foo();
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/beforeClassUsedInWildcard.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/beforeClassUsedInWildcard.java
new file mode 100644
index 0000000..246c00e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/beforeClassUsedInWildcard.java
@@ -0,0 +1,7 @@
+// "Create Class 'Foo'" "true"
+import java.util.Collection;
+public class Test {
+  public Collection<? extends Fo<caret>o> getSomething() {
+    return null;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/beforeEnumUsedInCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/beforeEnumUsedInCall.java
new file mode 100644
index 0000000..0b17a48
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/beforeEnumUsedInCall.java
@@ -0,0 +1,9 @@
+// "Create Enum 'Foo'" "true"
+public class Test {
+  void f(I i) {}
+  {
+    f(Fo<caret>o.CONST);
+  }
+}
+
+interface I {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/beforeExtends.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/beforeExtends.java
new file mode 100644
index 0000000..2f88a13
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/beforeExtends.java
@@ -0,0 +1,3 @@
+// "Create Class 'Abc'" "true"
+public class Test extends <caret>Abc {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/beforeFieldType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/beforeFieldType.java
new file mode 100644
index 0000000..16d992b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/beforeFieldType.java
@@ -0,0 +1,4 @@
+// "Create Class 'Abc'" "true"
+public class Test {
+  private <caret>Abc fld;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/beforeInNewArgs.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/beforeInNewArgs.java
new file mode 100644
index 0000000..fd56ea4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/beforeInNewArgs.java
@@ -0,0 +1,6 @@
+// "Create Class 'Foo'" "true"
+public class Test {
+  void foo() {
+    new Test(F<caret>oo.FIELD);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/beforeMethodType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/beforeMethodType.java
new file mode 100644
index 0000000..7697a6d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/beforeMethodType.java
@@ -0,0 +1,4 @@
+// "Create Class 'Abc'" "true"
+public class Test {
+  private <caret>Abc foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/beforeNa1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/beforeNa1.java
new file mode 100644
index 0000000..aa2e7b3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/beforeNa1.java
@@ -0,0 +1,6 @@
+// "Create Class 'abc'" "false"
+public class Test {
+  public void foo(int ppp) {
+    <caret>abc.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/beforeNa2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/beforeNa2.java
new file mode 100644
index 0000000..4786c3f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/beforeNa2.java
@@ -0,0 +1,6 @@
+// "Create Class 'Abc'" "false"
+public class Test {
+  public void foo(int ppp) {
+    int local = ppp + <caret>Abc;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/beforeParameterType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/beforeParameterType.java
new file mode 100644
index 0000000..169ad2b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/beforeParameterType.java
@@ -0,0 +1,4 @@
+// "Create Class 'Abc'" "true"
+public class Test {
+  private void foo(<caret>Abc param) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/beforeTypeParameter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/beforeTypeParameter.java
new file mode 100644
index 0000000..88b0402
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/beforeTypeParameter.java
@@ -0,0 +1,4 @@
+// "Create Class 'Foo'" "true"
+public class Test {
+  List l = new ArrayList<<caret>Foo>();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/beforeTypeParameterCreated.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/beforeTypeParameterCreated.java
new file mode 100644
index 0000000..2c1a347
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createClassFromUsage/beforeTypeParameterCreated.java
@@ -0,0 +1,4 @@
+// "Create Class 'Foo'" "true"
+public class Test {
+  <R> void foo(Fo<caret>o<R, String> f){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/after1.java
new file mode 100644
index 0000000..33eebd0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/after1.java
@@ -0,0 +1,15 @@
+// "Create Constructor" "true"
+public class Test {
+    public static void main() {
+        new MyCollection(10);
+    }
+}
+
+class MyCollection {
+    public MyCollection() {
+    }
+
+    public MyCollection(int i) {
+        <selection>//To change body of created methods use File | Settings | File Templates.</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/after2.java
new file mode 100644
index 0000000..eef213b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/after2.java
@@ -0,0 +1,12 @@
+// "Create Constructor" "true"
+public class Test {
+    public void main2() {
+        new MyCollection(this);
+    }
+}
+
+class MyCollection {
+    public MyCollection(Test test) {
+        <selection>//To change body of created methods use File | Settings | File Templates.</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/after3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/after3.java
new file mode 100644
index 0000000..e3622db
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/after3.java
@@ -0,0 +1,15 @@
+// "Create Constructor" "true"
+class Outer {
+    public Outer(String s) {
+    }
+
+    void method(Outer other) {
+        other.new CreateConstructorFromUsage("parameter"); // invoke "Create Constructor" quick fix here
+    }
+
+    class CreateConstructorFromUsage {
+        public CreateConstructorFromUsage(String parameter) {
+            <selection>//To change body of created methods use File | Settings | File Templates.</selection>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/afterAnon.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/afterAnon.java
new file mode 100644
index 0000000..709c064
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/afterAnon.java
@@ -0,0 +1,13 @@
+// "Create Constructor" "true"
+class Test {
+
+    public void t() {
+        new Inner("a"){};
+    }
+
+    class Inner {
+        public Inner(String a) {
+            <caret><selection>//To change body of created methods use File | Settings | File Templates.</selection>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/afterDefaultSuperConstructor.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/afterDefaultSuperConstructor.java
new file mode 100644
index 0000000..b7ad0c9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/afterDefaultSuperConstructor.java
@@ -0,0 +1,16 @@
+// "Create Constructor" "true"
+class Test extends A{
+
+    public Test(String a) {
+        <selection>//To change body of created methods use File | Settings | File Templates.</selection>
+    }
+
+    public void t() {
+        new Test("a"){};
+    }
+}
+
+class A {
+  A(String s){}
+  A(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/afterDisjunction.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/afterDisjunction.java
new file mode 100644
index 0000000..e6d5a06
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/afterDisjunction.java
@@ -0,0 +1,22 @@
+// "Create Constructor" "true"
+class Test {
+    void foo() throws Ex1 {}
+    void bar() throws Ex2 {}
+    public void t() {
+      try {
+        foo();
+        bar();
+      }
+      catch (Ex1 | Ex2 e) {
+        new A(e);
+      }
+    }
+}
+
+class A {
+    public A(Exception e) {
+        <selection>//To change body of created methods use File | Settings | File Templates.</selection>
+    }
+}
+class Ex1 extends Exception {}
+class Ex2 extends Exception {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/afterImplicitSuperConstructor.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/afterImplicitSuperConstructor.java
new file mode 100644
index 0000000..0293ed5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/afterImplicitSuperConstructor.java
@@ -0,0 +1,14 @@
+// "Create Constructor" "true"
+class Test extends A{
+
+    public Test(String a) {
+        <selection>//To change body of created methods use File | Settings | File Templates.</selection>
+    }
+
+    public void t() {
+        new Test("a"){};
+    }
+}
+
+class A {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/afterIncompleteEnum.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/afterIncompleteEnum.java
new file mode 100644
index 0000000..0573407
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/afterIncompleteEnum.java
@@ -0,0 +1,8 @@
+// "Create Constructor" "true"
+public enum ReportType {
+    AGING("Aging");
+
+    ReportType(String aging) {
+        <selection>//To change body of created methods use File | Settings | File Templates.</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/afterInsertSuper.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/afterInsertSuper.java
new file mode 100644
index 0000000..52dca41
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/afterInsertSuper.java
@@ -0,0 +1,15 @@
+// "Create Constructor" "true"
+class Test extends A{
+
+    public Test(String a) {
+        <selection>super(a);    //To change body of overridden methods use File | Settings | File Templates.</selection>
+    }
+
+    public void t() {
+        new Test("a"){};
+    }
+}
+
+class A {
+  A(String s){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/before1.java
new file mode 100644
index 0000000..c0bc28b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/before1.java
@@ -0,0 +1,11 @@
+// "Create Constructor" "true"
+public class Test {
+    public static void main() {
+        new My<caret>Collection(10);
+    }
+}
+
+class MyCollection {
+    public MyCollection() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/before2.java
new file mode 100644
index 0000000..4d668b6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/before2.java
@@ -0,0 +1,9 @@
+// "Create Constructor" "true"
+public class Test {
+    public void main2() {
+        new <caret>MyCollection(this);
+    }
+}
+
+class MyCollection {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/before3.java
new file mode 100644
index 0000000..2c6f972
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/before3.java
@@ -0,0 +1,12 @@
+// "Create Constructor" "true"
+class Outer {
+    public Outer(String s) {
+    }
+
+    void method(Outer other) {
+        other.new <caret>CreateConstructorFromUsage("parameter"); // invoke "Create Constructor" quick fix here
+    }
+
+    class CreateConstructorFromUsage {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/beforeAnon.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/beforeAnon.java
new file mode 100644
index 0000000..d9f6dae
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/beforeAnon.java
@@ -0,0 +1,10 @@
+// "Create Constructor" "true"
+class Test {
+
+    public void t() {
+        new Inner(<caret>"a"){};
+    }
+
+    class Inner {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/beforeDefaultSuperConstructor.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/beforeDefaultSuperConstructor.java
new file mode 100644
index 0000000..634d2f1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/beforeDefaultSuperConstructor.java
@@ -0,0 +1,12 @@
+// "Create Constructor" "true"
+class Test extends A{
+
+    public void t() {
+        new Test(<caret>"a"){};
+    }
+}
+
+class A {
+  A(String s){}
+  A(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/beforeDisjunction.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/beforeDisjunction.java
new file mode 100644
index 0000000..9d2e6c9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/beforeDisjunction.java
@@ -0,0 +1,19 @@
+// "Create Constructor" "true"
+class Test {
+    void foo() throws Ex1 {}
+    void bar() throws Ex2 {}
+    public void t() {
+      try {
+        foo();
+        bar();
+      }
+      catch (Ex1 | Ex2 e) {
+        new A(<caret>e);
+      }
+    }
+}
+
+class A {
+}
+class Ex1 extends Exception {}
+class Ex2 extends Exception {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/beforeImplicitSuperConstructor.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/beforeImplicitSuperConstructor.java
new file mode 100644
index 0000000..29e3172
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/beforeImplicitSuperConstructor.java
@@ -0,0 +1,10 @@
+// "Create Constructor" "true"
+class Test extends A{
+
+    public void t() {
+        new Test(<caret>"a"){};
+    }
+}
+
+class A {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/beforeIncompleteEnum.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/beforeIncompleteEnum.java
new file mode 100644
index 0000000..b194d2d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/beforeIncompleteEnum.java
@@ -0,0 +1,4 @@
+// "Create Constructor" "true"
+public enum ReportType {
+    AGING("Aging")<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/beforeInsertSuper.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/beforeInsertSuper.java
new file mode 100644
index 0000000..a137d38
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/beforeInsertSuper.java
@@ -0,0 +1,11 @@
+// "Create Constructor" "true"
+class Test extends A{
+
+    public void t() {
+        new Test(<caret>"a"){};
+    }
+}
+
+class A {
+  A(String s){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromSuper/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromSuper/after1.java
new file mode 100644
index 0000000..0cf7fc4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromSuper/after1.java
@@ -0,0 +1,12 @@
+// "Create Constructor In 'Base'" "true"
+class Base {
+    public Base(int i, Object o) {
+        <selection>//To change body of created methods use File | Settings | File Templates.</selection>
+    }
+}
+
+public class Derived extends Base {
+  Derived () {
+    super (1, new Object ());
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromSuper/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromSuper/before1.java
new file mode 100644
index 0000000..c9c1a01
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromSuper/before1.java
@@ -0,0 +1,9 @@
+// "Create Constructor In 'Base'" "true"
+class Base {
+}
+
+public class Derived extends Base {
+  Derived () {
+    su<caret>per (1, new Object ());
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorMatchingSuper/afterGenerics1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorMatchingSuper/afterGenerics1.java
new file mode 100644
index 0000000..6bb886c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorMatchingSuper/afterGenerics1.java
@@ -0,0 +1,10 @@
+// "Create constructor matching super" "true"
+public class Test<T> {
+    Test (T t) {}
+}
+
+class Derived extends Test<String> {
+    <caret>Derived(String s) {
+        super(s);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorMatchingSuper/afterWithoutBraces.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorMatchingSuper/afterWithoutBraces.java
new file mode 100644
index 0000000..996d78f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorMatchingSuper/afterWithoutBraces.java
@@ -0,0 +1,10 @@
+// "Create constructor matching super" "true"
+public class Test<T> {
+    Test (T t) {}
+}
+
+class Derived extends Test<String> {
+    Derived(String s) {
+        super(s);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorMatchingSuper/beforeGenerics1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorMatchingSuper/beforeGenerics1.java
new file mode 100644
index 0000000..082c216
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorMatchingSuper/beforeGenerics1.java
@@ -0,0 +1,7 @@
+// "Create constructor matching super" "true"
+public class Test<T> {
+    Test (T t) {}
+}
+
+class <caret>Derived extends Test<String> {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorMatchingSuper/beforeWithoutBraces.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorMatchingSuper/beforeWithoutBraces.java
new file mode 100644
index 0000000..9b47c93
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorMatchingSuper/beforeWithoutBraces.java
@@ -0,0 +1,6 @@
+// "Create constructor matching super" "true"
+public class Test<T> {
+    Test (T t) {}
+}
+
+class <caret>Derived extends Test<String>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/after1.java
new file mode 100644
index 0000000..5ffc569
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/after1.java
@@ -0,0 +1,8 @@
+// "Add constructor parameter" "true"
+public class A {
+  private int field;
+
+    public A(int field) {
+        this.field = field;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/after2.java
new file mode 100644
index 0000000..a3c2195
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/after2.java
@@ -0,0 +1,8 @@
+// "Add constructor parameter" "true"
+class A {
+    private A field;
+    public A(int x, A field) {
+        //this.field = field;
+        this.field = field;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/after3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/after3.java
new file mode 100644
index 0000000..5bfea41
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/after3.java
@@ -0,0 +1,15 @@
+// "Add constructor parameter" "true"
+class A {
+    private A field;
+    public A(int x, A field) {
+        this.field = field;
+        int g=0;
+    }
+    A(A field) {
+      this("", field);
+    }
+    A(String s, A field) {
+      //here
+        this.field = field;<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/after4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/after4.java
new file mode 100644
index 0000000..707fb7c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/after4.java
@@ -0,0 +1,8 @@
+// "Add constructor parameter" "true"
+class A {
+    private final A field;
+    public A(int x, A field) {
+        this.field = field;<caret>
+        int g=0;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterAbstractConstructor.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterAbstractConstructor.java
new file mode 100644
index 0000000..cd0507f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterAbstractConstructor.java
@@ -0,0 +1,11 @@
+// "Add constructor parameter" "true"
+public enum La {
+    ;
+    private String s;
+
+    private La(String s) {
+        this.s = s;
+    }
+
+    private La(int a, String s);
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterAfterSemi.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterAfterSemi.java
new file mode 100644
index 0000000..fa6f010
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterAfterSemi.java
@@ -0,0 +1,8 @@
+// "Add constructor parameter" "true"
+public class A {
+    private final A field;
+
+    public A(A field) {
+        this.field = field;<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterAlreadyAssigned.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterAlreadyAssigned.java
new file mode 100644
index 0000000..19947ee
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterAlreadyAssigned.java
@@ -0,0 +1,12 @@
+// "Add constructor parameter" "true"
+class A {
+  private final String text;
+
+  public Foo(String text) {
+    this.text = text;
+  }
+
+  public Foo(int i, String text) {
+      this.text = text;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterChainedCalls.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterChainedCalls.java
new file mode 100644
index 0000000..582c4ce
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterChainedCalls.java
@@ -0,0 +1,14 @@
+// "Add constructor parameter" "true"
+class A {
+  private final int field;
+  private int j;
+
+  A(int field) {
+    this(field, 0);
+  }
+
+  A(int field, int j) {
+      this.field = field;
+      this.j = j;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterChooseOneConstructor.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterChooseOneConstructor.java
new file mode 100644
index 0000000..15d22bc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterChooseOneConstructor.java
@@ -0,0 +1,15 @@
+// "Add constructor parameter" "true"
+class Test {
+    private final String s;
+    private final int i;
+
+    Test(String s) {
+        this.s = s;
+        i = 0;
+    }
+
+    Test(int i) {
+        this.i = i;<caret>
+        s = "s";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterGenerateEnumPrivateConstructor.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterGenerateEnumPrivateConstructor.java
new file mode 100644
index 0000000..53ec37b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterGenerateEnumPrivateConstructor.java
@@ -0,0 +1,10 @@
+// "Add constructor parameter" "true"
+public enum MyEnum
+{
+  VALUE_ONE(myField);
+  private final int myField;
+
+    private MyEnum(int myField) {
+        this.myField = myField;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterMultipleFields.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterMultipleFields.java
new file mode 100644
index 0000000..79a6f91
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterMultipleFields.java
@@ -0,0 +1,12 @@
+// "Add constructor parameters" "true"
+class A {
+  private final int field;
+  private final Object o;
+  private final Runnable runnable;
+  A(int field, Object o, Runnable runnable, String... strs) {
+      this.field = field;
+      this.o = o;
+      this.runnable = runnable;
+  }
+
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterMultipleFieldsNoConstructorNoUsages.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterMultipleFieldsNoConstructorNoUsages.java
new file mode 100644
index 0000000..97b2c31
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterMultipleFieldsNoConstructorNoUsages.java
@@ -0,0 +1,12 @@
+// "Add constructor parameters" "true"
+public class A {
+  private final int field;
+  private final Object o;
+  private final Runnable runnable;
+
+    public A(int field, Object o, Runnable runnable) {
+        this.field = field;
+        this.o = o;
+        this.runnable = runnable;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterMultipleFieldsOneAdded.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterMultipleFieldsOneAdded.java
new file mode 100644
index 0000000..5b3840e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterMultipleFieldsOneAdded.java
@@ -0,0 +1,13 @@
+// "Add constructor parameter" "true"
+public class ConstructorParams {
+    private final String myText;
+    private Object myO;
+
+    public ConstructorParams(String myText) {
+        this.myText = myText;<caret>
+    }
+
+    public ConstructorParams(String text, int foo) {
+        myText = text;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterMultipleFieldsOneStatic.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterMultipleFieldsOneStatic.java
new file mode 100644
index 0000000..0f707c8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterMultipleFieldsOneStatic.java
@@ -0,0 +1,9 @@
+// "Add constructor parameter" "true"
+public class ConstructorParams {
+    private final String myText;
+    private final static Object ourO;
+
+    public ConstructorParams(String myText) {
+        this.myText = myText;<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterMultipleFieldsOneWithoutInitializer.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterMultipleFieldsOneWithoutInitializer.java
new file mode 100644
index 0000000..298241bf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterMultipleFieldsOneWithoutInitializer.java
@@ -0,0 +1,9 @@
+// "Add constructor parameter" "true"
+public class ConstructorParams {
+    private final String myText;
+    private final Object ourO = null;
+
+    public ConstructorParams(String myText) {
+        this.myText = myText;<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterNonnullAnnotated.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterNonnullAnnotated.java
new file mode 100644
index 0000000..436d45b9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterNonnullAnnotated.java
@@ -0,0 +1,9 @@
+// "Add constructor parameter" "true"
+class A {
+  @javax.annotation.Nonnull private final Object field;
+
+  A(@javax.annotation.Nonnull Object field, String... strs) {
+      this.field = field;<caret>
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterNotNullAnnotated.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterNotNullAnnotated.java
new file mode 100644
index 0000000..ef69bd4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterNotNullAnnotated.java
@@ -0,0 +1,10 @@
+// "Add constructor parameter" "true"
+import org.jetbrains.annotations.*;
+class A {
+  @NotNull private final Object field;
+
+  A(@NotNull Object field, String... strs) {
+      this.field = field;<caret>
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterSameParameterSimpleNames.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterSameParameterSimpleNames.java
new file mode 100644
index 0000000..3f64bdc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterSameParameterSimpleNames.java
@@ -0,0 +1,10 @@
+// "Add constructor parameters" "true"
+class A {
+  private final int _field;
+  private final int field;
+  A(int field, int field1) {
+      _field = field;
+      this.field = field1;
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterVarargs.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterVarargs.java
new file mode 100644
index 0000000..f42c8ed
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterVarargs.java
@@ -0,0 +1,8 @@
+// "Add constructor parameter" "true"
+class A {
+  private final int field;
+  A(int field, String... strs) {
+      this.field = field;<caret>
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/before1.java
new file mode 100644
index 0000000..45de216
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/before1.java
@@ -0,0 +1,4 @@
+// "Add constructor parameter" "true"
+public class A {
+  private int <caret>field;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/before2.java
new file mode 100644
index 0000000..200ed92
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/before2.java
@@ -0,0 +1,7 @@
+// "Add constructor parameter" "true"
+class A {
+    private A <caret>field;
+    public A(int x) {
+        //this.field = field;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/before3.java
new file mode 100644
index 0000000..3fff891
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/before3.java
@@ -0,0 +1,13 @@
+// "Add constructor parameter" "true"
+class A {
+    private A <caret>field;
+    public A(int x) {
+        int g=0;
+    }
+    A() {
+      this("");
+    }
+    A (String s) {
+      //here
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/before4.java
new file mode 100644
index 0000000..58b2f8d3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/before4.java
@@ -0,0 +1,7 @@
+// "Add constructor parameter" "true"
+class A {
+    private final A <caret>field;
+    public A(int x) {
+        int g=0;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeAbstractConstructor.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeAbstractConstructor.java
new file mode 100644
index 0000000..626f7c6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeAbstractConstructor.java
@@ -0,0 +1,10 @@
+// "Add constructor parameter" "true"
+public enum La {
+    ;
+    private String s<caret>;
+
+    private La() {
+    }
+
+    private La(int a);
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeAfterSemi.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeAfterSemi.java
new file mode 100644
index 0000000..490babd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeAfterSemi.java
@@ -0,0 +1,4 @@
+// "Add constructor parameter" "true"
+public class A {
+    private final A field;<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeAlreadyAssigned.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeAlreadyAssigned.java
new file mode 100644
index 0000000..fd698dc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeAlreadyAssigned.java
@@ -0,0 +1,11 @@
+// "Add constructor parameter" "true"
+class A {
+  private final String te<caret>xt;
+
+  public Foo(String text) {
+    this.text = text;
+  }
+
+  public Foo(int i) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeChainedCalls.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeChainedCalls.java
new file mode 100644
index 0000000..5b1f931
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeChainedCalls.java
@@ -0,0 +1,13 @@
+// "Add constructor parameter" "true"
+class A {
+  private final int <caret>field;
+  private int j;
+
+  A() {
+    this(0);
+  }
+
+  A(int j) {
+    this.j = j;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeChooseOneConstructor.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeChooseOneConstructor.java
new file mode 100644
index 0000000..a453961
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeChooseOneConstructor.java
@@ -0,0 +1,14 @@
+// "Add constructor parameter" "true"
+class Test {
+    private final String s;
+    private final int i<caret>;
+
+    Test(String s) {
+        this.s = s;
+        i = 0;
+    }
+
+    Test() {
+        s = "s";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeGenerateEnumPrivateConstructor.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeGenerateEnumPrivateConstructor.java
new file mode 100644
index 0000000..57ca043
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeGenerateEnumPrivateConstructor.java
@@ -0,0 +1,6 @@
+// "Add constructor parameter" "true"
+public enum MyEnum
+{
+  VALUE_ONE;
+  private final int myFi<caret>eld;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeMultipleFields.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeMultipleFields.java
new file mode 100644
index 0000000..9ae8a50
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeMultipleFields.java
@@ -0,0 +1,9 @@
+// "Add constructor parameters" "true"
+class A {
+  private final int <caret>field;
+  private final Object o;
+  private final Runnable runnable;
+  A(String... strs) {
+  }
+
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeMultipleFieldsNoConstructorNoUsages.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeMultipleFieldsNoConstructorNoUsages.java
new file mode 100644
index 0000000..df96b56
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeMultipleFieldsNoConstructorNoUsages.java
@@ -0,0 +1,6 @@
+// "Add constructor parameters" "true"
+public class A {
+  private final int <caret>field;
+  private final Object o;
+  private final Runnable runnable;
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeMultipleFieldsOneAdded.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeMultipleFieldsOneAdded.java
new file mode 100644
index 0000000..c145819
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeMultipleFieldsOneAdded.java
@@ -0,0 +1,12 @@
+// "Add constructor parameter" "true"
+public class ConstructorParams {
+    private final String my<caret>Text;
+    private Object myO;
+
+    public ConstructorParams() {
+    }
+
+    public ConstructorParams(String text, int foo) {
+        myText = text;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeMultipleFieldsOneStatic.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeMultipleFieldsOneStatic.java
new file mode 100644
index 0000000..b6143e8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeMultipleFieldsOneStatic.java
@@ -0,0 +1,8 @@
+// "Add constructor parameter" "true"
+public class ConstructorParams {
+    private final String my<caret>Text;
+    private final static Object ourO;
+
+    public ConstructorParams() {
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeMultipleFieldsOneWithoutInitializer.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeMultipleFieldsOneWithoutInitializer.java
new file mode 100644
index 0000000..4e3de73
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeMultipleFieldsOneWithoutInitializer.java
@@ -0,0 +1,8 @@
+// "Add constructor parameter" "true"
+public class ConstructorParams {
+    private final String my<caret>Text;
+    private final Object ourO = null;
+
+    public ConstructorParams() {
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeNonnullAnnotated.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeNonnullAnnotated.java
new file mode 100644
index 0000000..ea6c4a0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeNonnullAnnotated.java
@@ -0,0 +1,8 @@
+// "Add constructor parameter" "true"
+class A {
+  @javax.annotation.Nonnull private final Object <caret>field;
+
+  A(String... strs) {
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeNotNullAnnotated.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeNotNullAnnotated.java
new file mode 100644
index 0000000..f2c41a8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeNotNullAnnotated.java
@@ -0,0 +1,9 @@
+// "Add constructor parameter" "true"
+import org.jetbrains.annotations.*;
+class A {
+  @NotNull private final Object <caret>field;
+
+  A(String... strs) {
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeSameParameterSimpleNames.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeSameParameterSimpleNames.java
new file mode 100644
index 0000000..ecf24e7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeSameParameterSimpleNames.java
@@ -0,0 +1,8 @@
+// "Add constructor parameters" "true"
+class A {
+  private final int <caret>_field;
+  private final int field;
+  A() {
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeStatic.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeStatic.java
new file mode 100644
index 0000000..cf49fe2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeStatic.java
@@ -0,0 +1,7 @@
+// "Add constructor parameter" "false"
+class A {
+    private static final A <caret>field;
+    public A(int x) {
+        int g=0;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeVarargs.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeVarargs.java
new file mode 100644
index 0000000..74b76f9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeVarargs.java
@@ -0,0 +1,7 @@
+// "Add constructor parameter" "true"
+class A {
+  private final int <caret>field;
+  A(String... strs) {
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/after1.java
new file mode 100644
index 0000000..81ad116
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/after1.java
@@ -0,0 +1,8 @@
+// "Create Enum Constant 'EEE'" "true"
+
+enum E {
+    EEE;
+    void t() {
+        EEE
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/after2.java
new file mode 100644
index 0000000..d6ea939
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/after2.java
@@ -0,0 +1,8 @@
+// "Create Enum Constant 'EEE'" "true"
+
+enum E {
+    AAA, EEE;
+    void t() {
+        EEE
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/after4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/after4.java
new file mode 100644
index 0000000..7bd9744
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/after4.java
@@ -0,0 +1,11 @@
+// "Create Enum Constant 'EEE'" "true"
+class Other {
+  public Other() {
+    MyEnum eee =  MyEnum.EEE;
+  }
+}
+
+enum MyEnum {
+    EEE
+
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/after5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/after5.java
new file mode 100644
index 0000000..e349346
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/after5.java
@@ -0,0 +1,13 @@
+// "Create Enum Constant 'Bean3'" "true"
+@interface BeanAware {
+    BeanName[] value();
+}
+
+enum BeanName {
+    Bean1,
+    Bean2, Bean3;
+}
+
+@BeanAware(value = BeanName.Bean3)
+interface MyBeanAware {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/afterPassArgs.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/afterPassArgs.java
new file mode 100644
index 0000000..b42f5e7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/afterPassArgs.java
@@ -0,0 +1,19 @@
+// "Create Enum Constant 'D3'" "true"
+public enum Demo {
+
+    D1("foo"),
+    D2("bar"), D3()<caret>;
+    private String name;
+
+    Demo(String name) {
+
+        this.name = name;
+    }
+}
+
+class Show {
+
+    public void doSomething() {
+        Demo.D3
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/afterSwitchLabel.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/afterSwitchLabel.java
new file mode 100644
index 0000000..16db50b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/afterSwitchLabel.java
@@ -0,0 +1,14 @@
+// "Create Enum Constant 'D3'" "true"
+public enum Demo {
+    D3
+}
+
+class Show {
+
+    public void doSomething(Demo d) {
+        switch (d) {
+          case D3:
+            break;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/afterSwitchLabel1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/afterSwitchLabel1.java
new file mode 100644
index 0000000..bb03c11
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/afterSwitchLabel1.java
@@ -0,0 +1,14 @@
+// "Create Enum Constant 'D3'" "true"
+public enum Demo {
+    D3
+}
+
+class Show {
+
+    public void doSomething(Demo d) {
+        switch (d) {
+          case Demo.D3:
+            break;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/before1.java
new file mode 100644
index 0000000..f044bc1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/before1.java
@@ -0,0 +1,8 @@
+// "Create Enum Constant 'EEE'" "true"
+
+enum E {
+    ;
+    void t() {
+        <caret>EEE
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/before2.java
new file mode 100644
index 0000000..82fe12f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/before2.java
@@ -0,0 +1,8 @@
+// "Create Enum Constant 'EEE'" "true"
+
+enum E {
+    AAA;
+    void t() {
+        <caret>EEE
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/before3.java
new file mode 100644
index 0000000..7b9e605
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/before3.java
@@ -0,0 +1,8 @@
+// "Create Enum Constant 'EEE'" "false"
+
+enum E {
+    AAA;
+    void t() {
+        int t = <caret>EEE;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/before4.java
new file mode 100644
index 0000000..02836ff
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/before4.java
@@ -0,0 +1,10 @@
+// "Create Enum Constant 'EEE'" "true"
+class Other {
+  public Other() {
+    MyEnum eee =  MyEnum.<caret>EEE;
+  }
+}
+
+enum MyEnum {
+
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/before5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/before5.java
new file mode 100644
index 0000000..df061d9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/before5.java
@@ -0,0 +1,13 @@
+// "Create Enum Constant 'Bean3'" "true"
+@interface BeanAware {
+    BeanName[] value();
+}
+
+enum BeanName {
+    Bean1,
+    Bean2;
+}
+
+@BeanAware(value = BeanName.Bean3<caret>)
+interface MyBeanAware {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/beforePassArgs.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/beforePassArgs.java
new file mode 100644
index 0000000..961ac7a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/beforePassArgs.java
@@ -0,0 +1,19 @@
+// "Create Enum Constant 'D3'" "true"
+public enum Demo {
+
+    D1("foo"),
+    D2("bar");
+    private String name;
+
+    Demo(String name) {
+
+        this.name = name;
+    }
+}
+
+class Show {
+
+    public void doSomething() {
+        Demo.D<caret>3
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/beforeSwitchLabel.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/beforeSwitchLabel.java
new file mode 100644
index 0000000..a11d71b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/beforeSwitchLabel.java
@@ -0,0 +1,13 @@
+// "Create Enum Constant 'D3'" "true"
+public enum Demo {
+}
+
+class Show {
+
+    public void doSomething(Demo d) {
+        switch (d) {
+          case D<caret>3:
+            break;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/beforeSwitchLabel1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/beforeSwitchLabel1.java
new file mode 100644
index 0000000..1e0982b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createEnumConstantFromUsage/beforeSwitchLabel1.java
@@ -0,0 +1,13 @@
+// "Create Enum Constant 'D3'" "true"
+public enum Demo {
+}
+
+class Show {
+
+    public void doSomething(Demo d) {
+        switch (d) {
+          case Demo.D<caret>3:
+            break;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/after1.java
new file mode 100644
index 0000000..5713ccc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/after1.java
@@ -0,0 +1,25 @@
+// "Create Field for Parameter 'id'" "true"
+
+class Person {
+    private String __fname;
+    private final int myId;
+    private String __lname;
+    private String __street;
+ 
+ 
+    public Person ( String i_lname, String i_fname, String i_street)
+    {
+        __lname = i_lname;
+        __fname = i_fname;
+        __street = i_street;
+    }
+ 
+    public Person ( int id<caret>, String i_lname, String i_fname, String i_street)
+    {
+        myId = id;
+        __lname = i_lname;
+        __fname = i_fname;
+        __street = i_street;
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/after2.java
new file mode 100644
index 0000000..0f01568
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/after2.java
@@ -0,0 +1,18 @@
+// "Create Field for Parameter 'test'" "true"
+
+package codeInsight.createFieldFromParameterAction.test1;
+
+import java.util.HashMap;
+
+public class TestBefore {
+    private String myName;
+    private final HashMap myTest;
+    private String myPerson;
+
+    public TestBefore(String name, int length, HashMap test<caret>, String person) {
+        super();
+        myName = name;
+        myTest = test;
+        myPerson = person;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/after3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/after3.java
new file mode 100644
index 0000000..833a468
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/after3.java
@@ -0,0 +1,20 @@
+// "Create Field for Parameter 'length'" "true"
+
+package codeInsight.createFieldFromParameterAction.test1;
+
+import java.util.HashMap;
+
+public class TestBefore {
+    private String myName;
+    private final int myLength;
+    private final HashMap myTest;
+    private String myPerson;
+
+    public TestBefore(String name, int length, HashMap test, String person) {
+        super();
+        myName = name;
+        myLength = length;
+        myTest = test;
+        myPerson = person;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/after4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/after4.java
new file mode 100644
index 0000000..8cb66a3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/after4.java
@@ -0,0 +1,12 @@
+// "Create Field for Parameter 'p1'" "true"
+
+class Test{
+    private final int myP1;
+    int myP2;
+ 
+    Test(int p<caret>1, int p2){
+        myP1 = p1;
+        myP2 = p2;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/after5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/after5.java
new file mode 100644
index 0000000..03106ce
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/after5.java
@@ -0,0 +1,12 @@
+// "Create Field for Parameter 'p1'" "true"
+
+class Test{
+    int myP1;
+    int myP2;
+ 
+    Test(int p<caret>1, int p2){
+        myP1 = p1;
+        myP2 = p2;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/after6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/after6.java
new file mode 100644
index 0000000..a9c4991
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/after6.java
@@ -0,0 +1,13 @@
+// "Create Field for Parameter 'p1'" "true"
+
+class Test{
+    int myP1;
+    int myP2;
+ 
+    void f(int p1, int p2){
+        myP1 = p1;
+        int myP2 = p1;
+        p1 = 0;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/after8.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/after8.java
new file mode 100644
index 0000000..dcdb496
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/after8.java
@@ -0,0 +1,10 @@
+// "Create Field for Parameter 'p1'" "true"
+
+class Test{
+    private static int p1;
+
+    static void f(int p1){
+        Test.p1 = p1;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/afterArrayType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/afterArrayType.java
new file mode 100644
index 0000000..badf63b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/afterArrayType.java
@@ -0,0 +1,10 @@
+// "Create Field for Parameter 'p1'" "true"
+
+class Test{
+    private String[] myP1;
+
+    void f(String[] p1){
+        myP1 = p1;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/afterBoundListTypeParameter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/afterBoundListTypeParameter.java
new file mode 100644
index 0000000..18bc2016
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/afterBoundListTypeParameter.java
@@ -0,0 +1,11 @@
+// "Create Field for Parameter 'p1'" "true"
+
+import java.util.*;
+class Test{
+    private List<String> myP1;
+
+    <T extends String> void f(List<T> p1){
+        myP1 = p1;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/afterClassTypeParameter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/afterClassTypeParameter.java
new file mode 100644
index 0000000..2d08c00
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/afterClassTypeParameter.java
@@ -0,0 +1,10 @@
+// "Create Field for Parameter 'p1'" "true"
+
+class Test<T>{
+    private T myP1;
+
+    void f(T p1){
+        myP1 = p1;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/afterListClassTypeParameter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/afterListClassTypeParameter.java
new file mode 100644
index 0000000..124af18
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/afterListClassTypeParameter.java
@@ -0,0 +1,11 @@
+// "Create Field for Parameter 'p1'" "true"
+
+import java.util.*;
+class Test<T>{
+    private List<T> myP1;
+
+    void f(List<T> p1){
+        myP1 = p1;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/afterListTypeParameter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/afterListTypeParameter.java
new file mode 100644
index 0000000..95fbe98
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/afterListTypeParameter.java
@@ -0,0 +1,11 @@
+// "Create Field for Parameter 'p1'" "true"
+
+import java.util.*;
+class Test{
+    private List<Object> myP1;
+
+    <T> void f(List<T> p1){
+        myP1 = p1;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/afterNotNull.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/afterNotNull.java
new file mode 100644
index 0000000..6eb7109
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/afterNotNull.java
@@ -0,0 +1,14 @@
+// "Create Field for Parameter 'name'" "true"
+
+import org.jetbrains.annotations.NotNull;
+
+public class TestBefore {
+
+    @NotNull
+    private final String myName;
+
+    public TestBefore(@NotNull String name) {
+        super();
+        myName = name;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/afterNullable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/afterNullable.java
new file mode 100644
index 0000000..e829e59
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/afterNullable.java
@@ -0,0 +1,17 @@
+// "Create Field for Parameter 'name'" "true"
+
+package codeInsight.createFieldFromParameterAction.test1;
+
+import java.util.HashMap;
+import org.jetbrains.annotations.Nullable;
+
+public class TestBefore {
+
+    @Nullable
+    private final String myName;
+
+    public TestBefore(@Nullable String name) {
+        super();
+        myName = name;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/afterSimpleTypeParameter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/afterSimpleTypeParameter.java
new file mode 100644
index 0000000..547d158
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/afterSimpleTypeParameter.java
@@ -0,0 +1,10 @@
+// "Create Field for Parameter 'p1'" "true"
+
+class Test{
+    private Object myP1;
+
+    <T> void f(T p1){
+        myP1 = p1;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/afterTypeParameter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/afterTypeParameter.java
new file mode 100644
index 0000000..9984b0e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/afterTypeParameter.java
@@ -0,0 +1,10 @@
+// "Create Field for Parameter 'p1'" "true"
+
+class Test{
+    private String myP1;
+
+    <T extends String> void f(T p1){
+        myP1 = p1;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/before1.java
new file mode 100644
index 0000000..a338c6d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/before1.java
@@ -0,0 +1,21 @@
+// "Create Field for Parameter 'id'" "true"
+
+class Person {
+    private String __fname, __lname, __street;
+ 
+ 
+    public Person ( String i_lname, String i_fname, String i_street)
+    {
+        __lname = i_lname;
+        __fname = i_fname;
+        __street = i_street;
+    }
+ 
+    public Person ( int id<caret>, String i_lname, String i_fname, String i_street)
+    {
+        __lname = i_lname;
+        __fname = i_fname;
+        __street = i_street;
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/before2.java
new file mode 100644
index 0000000..c8f1169
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/before2.java
@@ -0,0 +1,16 @@
+// "Create Field for Parameter 'test'" "true"
+
+package codeInsight.createFieldFromParameterAction.test1;
+
+import java.util.HashMap;
+
+public class TestBefore {
+    private String myName;
+    private String myPerson;
+
+    public TestBefore(String name, int length, HashMap test<caret>, String person) {
+        super();
+        myName = name;
+        myPerson = person;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/before3.java
new file mode 100644
index 0000000..2507769
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/before3.java
@@ -0,0 +1,18 @@
+// "Create Field for Parameter 'length'" "true"
+
+package codeInsight.createFieldFromParameterAction.test1;
+
+import java.util.HashMap;
+
+public class TestBefore {
+    private String myName;
+    private final HashMap myTest;
+    private String myPerson;
+
+    public TestBefore(String name, int length<caret>, HashMap test, String person) {
+        super();
+        myName = name;
+        myTest = test;
+        myPerson = person;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/before4.java
new file mode 100644
index 0000000..aba9e87
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/before4.java
@@ -0,0 +1,10 @@
+// "Create Field for Parameter 'p1'" "true"
+
+class Test{
+    int myP2;
+ 
+    Test(int p<caret>1, int p2){
+        myP2 = p2;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/before5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/before5.java
new file mode 100644
index 0000000..3a2478e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/before5.java
@@ -0,0 +1,11 @@
+// "Create Field for Parameter 'p1'" "true"
+
+class Test{
+    int myP1;
+    int myP2;
+ 
+    Test(int p<caret>1, int p2){
+        myP2 = p2;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/before6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/before6.java
new file mode 100644
index 0000000..890c780
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/before6.java
@@ -0,0 +1,12 @@
+// "Create Field for Parameter 'p1'" "true"
+
+class Test{
+    int myP1;
+    int myP2;
+ 
+    void f(int p<caret>1, int p2){
+        int myP2 = p1;
+        p1 = 0;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/before7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/before7.java
new file mode 100644
index 0000000..5ce0bc7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/before7.java
@@ -0,0 +1,12 @@
+// "Create Field for Parameter 'p1'" "false"
+
+class Test{
+    int myP1;
+    int myP2;
+ 
+    void f(int p<caret>1, int p2){
+        myP2 = p1;
+        p1 = 0;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/before8.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/before8.java
new file mode 100644
index 0000000..a110954
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/before8.java
@@ -0,0 +1,7 @@
+// "Create Field for Parameter 'p1'" "true"
+
+class Test{
+    static void f(int p<caret>1){
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/beforeArrayType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/beforeArrayType.java
new file mode 100644
index 0000000..1a0c209
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/beforeArrayType.java
@@ -0,0 +1,7 @@
+// "Create Field for Parameter 'p1'" "true"
+
+class Test{
+    void f(String[] p<caret>1){
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/beforeBoundListTypeParameter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/beforeBoundListTypeParameter.java
new file mode 100644
index 0000000..e74e5e6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/beforeBoundListTypeParameter.java
@@ -0,0 +1,8 @@
+// "Create Field for Parameter 'p1'" "true"
+
+import java.util.*;
+class Test{
+    <T extends String> void f(List<T> p<caret>1){
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/beforeCaretOnMethod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/beforeCaretOnMethod.java
new file mode 100644
index 0000000..f76f4f4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/beforeCaretOnMethod.java
@@ -0,0 +1,7 @@
+// "Create Field for Parameter 'p1'" "false"
+
+class Test{
+    <T extends String> void <caret>f(T p1){
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/beforeCaretOnMethodWithOnlyAssignedParams.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/beforeCaretOnMethodWithOnlyAssignedParams.java
new file mode 100644
index 0000000..5c32f27
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/beforeCaretOnMethodWithOnlyAssignedParams.java
@@ -0,0 +1,10 @@
+// "Create Field for Parameter 'p1'" "false"
+
+class Test{
+      private final String myP1;
+  
+      <T extends String> void <caret>f(T p1){
+          myP1 = p1;
+      }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/beforeCaretOnMethodWithoutParams.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/beforeCaretOnMethodWithoutParams.java
new file mode 100644
index 0000000..328bce5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/beforeCaretOnMethodWithoutParams.java
@@ -0,0 +1,7 @@
+// "Create Field for Parameter 'p1'" "false"
+
+class Test{
+    <T extends String> void <caret>f(){
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/beforeClassTypeParameter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/beforeClassTypeParameter.java
new file mode 100644
index 0000000..fc86e4b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/beforeClassTypeParameter.java
@@ -0,0 +1,7 @@
+// "Create Field for Parameter 'p1'" "true"
+
+class Test<T>{
+    void f(T p<caret>1){
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/beforeListClassTypeParameter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/beforeListClassTypeParameter.java
new file mode 100644
index 0000000..67815a2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/beforeListClassTypeParameter.java
@@ -0,0 +1,8 @@
+// "Create Field for Parameter 'p1'" "true"
+
+import java.util.*;
+class Test<T>{
+    void f(List<T> p<caret>1){
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/beforeListTypeParameter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/beforeListTypeParameter.java
new file mode 100644
index 0000000..cf4e5af
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/beforeListTypeParameter.java
@@ -0,0 +1,8 @@
+// "Create Field for Parameter 'p1'" "true"
+
+import java.util.*;
+class Test{
+    <T> void f(List<T> p<caret>1){
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/beforeNotNull.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/beforeNotNull.java
new file mode 100644
index 0000000..fb64ef9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/beforeNotNull.java
@@ -0,0 +1,10 @@
+// "Create Field for Parameter 'name'" "true"
+
+import org.jetbrains.annotations.NotNull;
+
+public class TestBefore {
+
+    public TestBefore(@NotNull String name<caret>) {
+        super();
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/beforeNullable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/beforeNullable.java
new file mode 100644
index 0000000..7749fca
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/beforeNullable.java
@@ -0,0 +1,13 @@
+// "Create Field for Parameter 'name'" "true"
+
+package codeInsight.createFieldFromParameterAction.test1;
+
+import java.util.HashMap;
+import org.jetbrains.annotations.Nullable;
+
+public class TestBefore {
+
+    public TestBefore(@Nullable String name<caret>) {
+        super();
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/beforeSimpleTypeParameter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/beforeSimpleTypeParameter.java
new file mode 100644
index 0000000..bd2cb77
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/beforeSimpleTypeParameter.java
@@ -0,0 +1,7 @@
+// "Create Field for Parameter 'p1'" "true"
+
+class Test{
+    <T> void f(T p<caret>1){
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/beforeTypeParameter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/beforeTypeParameter.java
new file mode 100644
index 0000000..dc8fecb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/beforeTypeParameter.java
@@ -0,0 +1,7 @@
+// "Create Field for Parameter 'p1'" "true"
+
+class Test{
+    <T extends String> void f(T p<caret>1){
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/afterAnonymousClass.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/afterAnonymousClass.java
new file mode 100644
index 0000000..f832557
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/afterAnonymousClass.java
@@ -0,0 +1,12 @@
+// "Create Field 'field'" "true"
+class Main {
+    static void foo() {
+        new Object() {
+            public int field<caret>;
+
+            void bar() {
+                this.field = 0;
+            }
+        };
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/afterCreateFromEquals.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/afterCreateFromEquals.java
new file mode 100644
index 0000000..4e3e4536
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/afterCreateFromEquals.java
@@ -0,0 +1,8 @@
+// "Create Field 'VAR'" "true"
+class A {
+    private final String VAR<caret>;
+
+    public IDEA16027() {
+    VAR.equals("");
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/afterCreateFromEqualsToPrimitiveType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/afterCreateFromEqualsToPrimitiveType.java
new file mode 100644
index 0000000..ec5f68c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/afterCreateFromEqualsToPrimitiveType.java
@@ -0,0 +1,8 @@
+// "Create Field 'VAR'" "true"
+class A {
+    private final Integer VAR<caret>;
+
+    public IDEA16027() {
+    VAR.equals(5);
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/afterExpectedTypes.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/afterExpectedTypes.java
new file mode 100644
index 0000000..b19c954
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/afterExpectedTypes.java
@@ -0,0 +1,14 @@
+// "Create Field 'panel'" "true"
+import javax.swing.*;
+
+class Test {
+    private JPanel panel;
+
+    void foo(JPanel container) {
+    if (panel == null) {
+      panel = new JPanel();
+      panel.setOpaque(true);
+      container.add(panel);
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/afterInsideStaticInnerClass.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/afterInsideStaticInnerClass.java
new file mode 100644
index 0000000..82e1329
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/afterInsideStaticInnerClass.java
@@ -0,0 +1,14 @@
+// "Create Field 'field'" "true"
+class A {
+  String field;
+
+  static class Foo {
+      private final Object field<caret>;
+
+      Foo() {
+          field;
+      }
+  }
+
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/afterInterface.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/afterInterface.java
new file mode 100644
index 0000000..243ab37
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/afterInterface.java
@@ -0,0 +1,10 @@
+// "Create Field 'FIELD'" "true"
+class C {
+    public void foo() {
+        int i = ITest.FIELD;
+    }
+    
+    public static interface ITest {
+        int FIELD<caret>;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/afterMultipleTypes.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/afterMultipleTypes.java
new file mode 100644
index 0000000..0b9727e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/afterMultipleTypes.java
@@ -0,0 +1,9 @@
+// "Create Field 'fld'" "true"
+class A {
+    private String fld<caret>;
+
+    public void foo() {
+      Object x = fld;
+      fld = "";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/afterMultipleTypes2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/afterMultipleTypes2.java
new file mode 100644
index 0000000..1fc4225
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/afterMultipleTypes2.java
@@ -0,0 +1,9 @@
+// "Create Field 'fld'" "true"
+class A {
+    private String fld<caret>;
+
+    public void foo() {
+      Object x = fld;
+      String s = fld;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/afterParametericMethod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/afterParametericMethod.java
new file mode 100644
index 0000000..cd40d14
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/afterParametericMethod.java
@@ -0,0 +1,15 @@
+// "Create Field 'array'" "true"
+class Smth<T> {
+}
+
+class Converter {
+  static <T> Smth<T> asSmth (T[] t) {}
+}
+
+class Test {
+    private String[] array<caret>;
+
+    void bar () {
+        Smth<String> l = Converter.asSmth(array);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/afterQualifyInner.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/afterQualifyInner.java
new file mode 100644
index 0000000..879f7b3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/afterQualifyInner.java
@@ -0,0 +1,14 @@
+// "Create Field 'field'" "true"
+class A{
+    private final Outer.Inner field<caret>;
+
+    {
+        Outer.f(field);
+    }
+}
+
+class Outer{
+    static class Inner{}
+
+    static void f(Inner inner){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/afterSortByRelevance.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/afterSortByRelevance.java
new file mode 100644
index 0000000..f60a0bd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/afterSortByRelevance.java
@@ -0,0 +1,12 @@
+import foo.Foo;
+
+// "Create Field 'field'" "true"
+class A {
+
+    private Foo field;
+
+    void bar() {
+        field.put("a", "b");
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/afterTypeArgsFormatted.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/afterTypeArgsFormatted.java
new file mode 100644
index 0000000..60474f7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/afterTypeArgsFormatted.java
@@ -0,0 +1,13 @@
+// "Create Field 'field'" "true"
+import java.util.*;
+class A {
+    private Map<String, String> field<caret>;
+
+    void foo(Map<String, String> s){}
+
+  void bar() {
+    foo(field);
+  }
+
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/afterWithAlignment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/afterWithAlignment.java
new file mode 100644
index 0000000..63f087b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/afterWithAlignment.java
@@ -0,0 +1,23 @@
+// "Create Field 'field'" "true"
+class A {
+    public static final String NOTIFICATION_ENABLED     = "NOTIFICATION_ENABLED";
+    public static final String NOTIFICATION_DEVICE_NAME = "NOTIFICATION_DEVICE_NAME";
+    public static String field;
+
+    public static String getString(String key)
+  {
+      return getString(key, "");
+  }
+
+  public static String getString(String key, String defaultValue)
+  {
+      return null;
+  }
+  
+}
+
+class B {
+  {
+    String s = A.field;
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeAnonymousClass.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeAnonymousClass.java
new file mode 100644
index 0000000..dc275ea
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeAnonymousClass.java
@@ -0,0 +1,10 @@
+// "Create Field 'field'" "true"
+class Main {
+    static void foo() {
+        new Object() {
+            void bar() {
+                this.<caret>field = 0;
+            }
+        };
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeCreateFromEquals.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeCreateFromEquals.java
new file mode 100644
index 0000000..b6645d6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeCreateFromEquals.java
@@ -0,0 +1,6 @@
+// "Create Field 'VAR'" "true"
+class A {
+  public IDEA16027() {
+    V<caret>AR.equals("");
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeCreateFromEqualsToPrimitiveType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeCreateFromEqualsToPrimitiveType.java
new file mode 100644
index 0000000..7dbf3c5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeCreateFromEqualsToPrimitiveType.java
@@ -0,0 +1,6 @@
+// "Create Field 'VAR'" "true"
+class A {
+  public IDEA16027() {
+    V<caret>AR.equals(5);
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeExpectedTypes.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeExpectedTypes.java
new file mode 100644
index 0000000..71b9f50
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeExpectedTypes.java
@@ -0,0 +1,12 @@
+// "Create Field 'panel'" "true"
+import javax.swing.*;
+
+class Test {
+  void foo(JPanel container) {
+    if (p<caret>anel == null) {
+      panel = new JPanel();
+      panel.setOpaque(true);
+      container.add(panel);
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeInsideStaticInnerClass.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeInsideStaticInnerClass.java
new file mode 100644
index 0000000..607a2a3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeInsideStaticInnerClass.java
@@ -0,0 +1,12 @@
+// "Create Field 'field'" "true"
+class A {
+  String field;
+
+  static class Foo {
+      Foo() {
+          fie<caret>ld;
+      }
+  }
+
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeInterface.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeInterface.java
new file mode 100644
index 0000000..0b16333
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeInterface.java
@@ -0,0 +1,9 @@
+// "Create Field 'FIELD'" "true"
+class C {
+    public void foo() {
+        int i = ITest.FIELD<caret>;
+    }
+    
+    public static interface ITest {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeMultipleTypes.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeMultipleTypes.java
new file mode 100644
index 0000000..c4503f4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeMultipleTypes.java
@@ -0,0 +1,7 @@
+// "Create Field 'fld'" "true"
+class A {
+    public void foo() {
+      Object x = <caret>fld;
+      fld = "";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeMultipleTypes2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeMultipleTypes2.java
new file mode 100644
index 0000000..c89e442
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeMultipleTypes2.java
@@ -0,0 +1,7 @@
+// "Create Field 'fld'" "true"
+class A {
+    public void foo() {
+      Object x = <caret>fld;
+      String s = fld;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeNa.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeNa.java
new file mode 100644
index 0000000..9eb76d0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeNa.java
@@ -0,0 +1,6 @@
+// "Field not created" "false"
+class C {
+    void foo() {
+        te<caret>st();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeParametericMethod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeParametericMethod.java
new file mode 100644
index 0000000..7259406
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeParametericMethod.java
@@ -0,0 +1,13 @@
+// "Create Field 'array'" "true"
+class Smth<T> {
+}
+
+class Converter {
+  static <T> Smth<T> asSmth (T[] t) {}
+}
+
+class Test {
+    void bar () {
+        Smth<String> l = Converter.asSmth(a<caret>rray);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeQualifyInner.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeQualifyInner.java
new file mode 100644
index 0000000..2b15fd6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeQualifyInner.java
@@ -0,0 +1,12 @@
+// "Create Field 'field'" "true"
+class A{
+    {
+        Outer.f(field<caret>);
+    }
+}
+
+class Outer{
+    static class Inner{}
+
+    static void f(Inner inner){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeSortByRelevance.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeSortByRelevance.java
new file mode 100644
index 0000000..8135573
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeSortByRelevance.java
@@ -0,0 +1,8 @@
+// "Create Field 'field'" "true"
+class A {
+
+    void bar() {
+        f<caret>ield.put("a", "b");
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeTypeArgsFormatted.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeTypeArgsFormatted.java
new file mode 100644
index 0000000..0ead9cc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeTypeArgsFormatted.java
@@ -0,0 +1,11 @@
+// "Create Field 'field'" "true"
+import java.util.*;
+class A {
+  void foo(Map<String, String> s){}
+
+  void bar() {
+    foo(fie<caret>ld);
+  }
+
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeWithAlignment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeWithAlignment.java
new file mode 100644
index 0000000..a6f7185
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeWithAlignment.java
@@ -0,0 +1,22 @@
+// "Create Field 'field'" "true"
+class A {
+  public static final String NOTIFICATION_ENABLED     = "NOTIFICATION_ENABLED";
+  public static final String NOTIFICATION_DEVICE_NAME = "NOTIFICATION_DEVICE_NAME";
+
+  public static String getString(String key)
+  {
+      return getString(key, "");
+  }
+
+  public static String getString(String key, String defaultValue)
+  {
+      return null;
+  }
+  
+}
+
+class B {
+  {
+    String s = A.fi<caret>eld;
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createGetterOrSetter/afterCreateGetter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createGetterOrSetter/afterCreateGetter.java
new file mode 100644
index 0000000..562b31c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createGetterOrSetter/afterCreateGetter.java
@@ -0,0 +1,8 @@
+// "Create getter for 's'" "true"
+class A {
+  private String s;
+
+    String getS() {
+        return s;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createGetterOrSetter/afterCreateGetterAndSetter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createGetterOrSetter/afterCreateGetterAndSetter.java
new file mode 100644
index 0000000..a9b0739
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createGetterOrSetter/afterCreateGetterAndSetter.java
@@ -0,0 +1,12 @@
+// "Create getter and setter for 's'" "true"
+class A {
+  private String s;
+
+    String getS() {
+        return s;
+    }
+
+    void setS(String s) {
+        this.s = s;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createGetterOrSetter/afterCreateSetter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createGetterOrSetter/afterCreateSetter.java
new file mode 100644
index 0000000..8be2cc6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createGetterOrSetter/afterCreateSetter.java
@@ -0,0 +1,8 @@
+// "Create setter for 's'" "true"
+class A {
+  private String s;
+
+    void setS(String s) {
+        this.s = s;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createGetterOrSetter/beforeCreateGetter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createGetterOrSetter/beforeCreateGetter.java
new file mode 100644
index 0000000..e12e445
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createGetterOrSetter/beforeCreateGetter.java
@@ -0,0 +1,4 @@
+// "Create getter for 's'" "true"
+class A {
+  private String <caret>s;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createGetterOrSetter/beforeCreateGetterAndSetter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createGetterOrSetter/beforeCreateGetterAndSetter.java
new file mode 100644
index 0000000..33aafae
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createGetterOrSetter/beforeCreateGetterAndSetter.java
@@ -0,0 +1,4 @@
+// "Create getter and setter for 's'" "true"
+class A {
+  private String <caret>s;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createGetterOrSetter/beforeCreateSetter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createGetterOrSetter/beforeCreateSetter.java
new file mode 100644
index 0000000..ee94e8e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createGetterOrSetter/beforeCreateSetter.java
@@ -0,0 +1,4 @@
+// "Create setter for 's'" "true"
+class A {
+  private String <caret>s;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createGetterOrSetter/beforeNoGetterAndSetterForFinal.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createGetterOrSetter/beforeNoGetterAndSetterForFinal.java
new file mode 100644
index 0000000..b458d3c6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createGetterOrSetter/beforeNoGetterAndSetterForFinal.java
@@ -0,0 +1,4 @@
+// "Create getter and setter for 's'" "false"
+class A {
+  private final String <caret>s;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createGetterOrSetter/beforeNoGetterAndSetterForStaticFinal.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createGetterOrSetter/beforeNoGetterAndSetterForStaticFinal.java
new file mode 100644
index 0000000..536d355
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createGetterOrSetter/beforeNoGetterAndSetterForStaticFinal.java
@@ -0,0 +1,4 @@
+// "Create getter and setter for 's'" "false"
+class A {
+  private final static String <caret>s;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createGetterOrSetter/beforeNoGetterForStaticFinal.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createGetterOrSetter/beforeNoGetterForStaticFinal.java
new file mode 100644
index 0000000..02799ce
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createGetterOrSetter/beforeNoGetterForStaticFinal.java
@@ -0,0 +1,4 @@
+// "Create setter for 's'" "false"
+class A {
+  private final static String <caret>s;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createGetterOrSetter/beforeNoSetterForFinal.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createGetterOrSetter/beforeNoSetterForFinal.java
new file mode 100644
index 0000000..e39449d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createGetterOrSetter/beforeNoSetterForFinal.java
@@ -0,0 +1,4 @@
+// "Create setter for 's'" "false"
+class A {
+  private final String <caret>s;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createGetterOrSetter/beforeNoSetterForStaticFinal.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createGetterOrSetter/beforeNoSetterForStaticFinal.java
new file mode 100644
index 0000000..02799ce
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createGetterOrSetter/beforeNoSetterForStaticFinal.java
@@ -0,0 +1,4 @@
+// "Create setter for 's'" "false"
+class A {
+  private final static String <caret>s;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/after1.java
new file mode 100644
index 0000000..e0f9379
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/after1.java
@@ -0,0 +1,13 @@
+// "Create Inner Class 'MyCollection'" "true"
+import java.util.*;
+
+public class Test {
+    public static void main() {
+        Collection c = new MyCollection(1, "test");
+    }
+
+    private static class MyCollection implements Collection {
+        public MyCollection(int i, String test) {<caret>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/after2.java
new file mode 100644
index 0000000..d147172
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/after2.java
@@ -0,0 +1,13 @@
+// "Create Inner Class 'MyArrayList'" "true"
+import java.util.*;
+
+public class Test {
+    public static void main() {
+        ArrayList list = new MyArrayList(1, "test");
+    }
+
+    private static class MyArrayList extends ArrayList {
+        public MyArrayList(int i, String test) {<caret>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/after3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/after3.java
new file mode 100644
index 0000000..987df38
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/after3.java
@@ -0,0 +1,12 @@
+// "Create Inner Class 'MyInteger'" "true"
+public class Test {
+    public static void main() {
+        int xxx = 3;
+        Integer i = new MyInteger(xxx);
+    }
+
+    private static class MyInteger {
+        public MyInteger(int xxx) {<caret>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/after6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/after6.java
new file mode 100644
index 0000000..9d32597
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/after6.java
@@ -0,0 +1,9 @@
+// "Create Inner Class 'MyCollection'" "true"
+public class Test {
+    public static void main() {
+        Collection[] cc = new MyCollection[10];
+    }
+
+    private static class MyCollection {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/after8.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/after8.java
new file mode 100644
index 0000000..edc5d22
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/after8.java
@@ -0,0 +1,12 @@
+// "Create Inner Class 'MyTableModel'" "true"
+import javax.swing.*;
+import javax.swing.table.TableModel;
+
+public class Test {
+    public static void main() {
+        JTable table = new JTable(new MyTableModel());
+    }
+
+    private static class MyTableModel implements TableModel {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/afterAnonymous.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/afterAnonymous.java
new file mode 100644
index 0000000..a80d2b3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/afterAnonymous.java
@@ -0,0 +1,14 @@
+// "Create Inner Class 'MyCollection'" "true"
+import java.util.*;
+
+public class Test {
+    public static void main() {
+        Collection c = new MyCollection(1, "test") {
+        };
+    }
+
+    private static class MyCollection implements Collection {
+        public MyCollection(int i, String test) {<caret>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/afterGenerics.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/afterGenerics.java
new file mode 100644
index 0000000..4461f89
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/afterGenerics.java
@@ -0,0 +1,9 @@
+// "Create Inner Class 'Generic'" "true"
+class Test {
+  void foo () {
+    new Generic<String> ();
+  }
+
+    private class Generic<T> {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/afterInSuperNonConstructor.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/afterInSuperNonConstructor.java
new file mode 100644
index 0000000..68cf231
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/afterInSuperNonConstructor.java
@@ -0,0 +1,12 @@
+// "Create Inner Class 'Generic'" "true"
+class Base {
+  void foo(){}
+}
+class Test extends Base {
+  Test() {
+    super.foo(new Generic<String> ());
+  }
+
+    private class Generic<T> {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/afterInThis.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/afterInThis.java
new file mode 100644
index 0000000..801e9f6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/afterInThis.java
@@ -0,0 +1,11 @@
+// "Create Inner Class 'Generic'" "true"
+class Test {
+  Test() {
+    this (new Generic<String> ());
+  }
+
+  Test(String s){}
+
+    private static class Generic<T> {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/before1.java
new file mode 100644
index 0000000..c664cb9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/before1.java
@@ -0,0 +1,8 @@
+// "Create Inner Class 'MyCollection'" "true"
+import java.util.*;
+
+public class Test {
+    public static void main() {
+        Collection c = new <caret>MyCollection(1, "test");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/before2.java
new file mode 100644
index 0000000..375cbfe
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/before2.java
@@ -0,0 +1,8 @@
+// "Create Inner Class 'MyArrayList'" "true"
+import java.util.*;
+
+public class Test {
+    public static void main() {
+        ArrayList list = new <caret>MyArrayList(1, "test");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/before3.java
new file mode 100644
index 0000000..fbc64b8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/before3.java
@@ -0,0 +1,7 @@
+// "Create Inner Class 'MyInteger'" "true"
+public class Test {
+    public static void main() {
+        int xxx = 3;
+        Integer i = new <caret>MyInteger(xxx);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/before4.java
new file mode 100644
index 0000000..92c632b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/before4.java
@@ -0,0 +1,8 @@
+// "Create Inner Class 'Inner'" "false"
+public class Test {
+    public static void main() {
+        new Te<caret>st.Inner();
+    }
+    
+    public static class Inner {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/before5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/before5.java
new file mode 100644
index 0000000..8e313fb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/before5.java
@@ -0,0 +1,8 @@
+// "Create Inner Class 'Inner'" "false"
+public class Test {
+    public static void main() {
+        new Inner<caret>();
+    }
+    
+    public static class Inner {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/before6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/before6.java
new file mode 100644
index 0000000..95099e8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/before6.java
@@ -0,0 +1,6 @@
+// "Create Inner Class 'MyCollection'" "true"
+public class Test {
+    public static void main() {
+        Collection[] cc = new <caret>MyCollection[10];
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/before7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/before7.java
new file mode 100644
index 0000000..54ed07b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/before7.java
@@ -0,0 +1,8 @@
+// "Create Inner Class 'Inner'" "false"
+import java.util.*;
+
+public class Test {
+    public static void main() {
+        Collection c = new Test.My<caret>Collection(1);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/before8.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/before8.java
new file mode 100644
index 0000000..6f80128
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/before8.java
@@ -0,0 +1,8 @@
+// "Create Inner Class 'MyTableModel'" "true"
+import javax.swing.*;
+
+public class Test {
+    public static void main() {
+        JTable table = new JTable(new MyTable<caret>Model());
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/beforeAnonymous.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/beforeAnonymous.java
new file mode 100644
index 0000000..8b7c997
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/beforeAnonymous.java
@@ -0,0 +1,9 @@
+// "Create Inner Class 'MyCollection'" "true"
+import java.util.*;
+
+public class Test {
+    public static void main() {
+        Collection c = new <caret>MyCollection(1, "test") {
+        };
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/beforeGenerics.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/beforeGenerics.java
new file mode 100644
index 0000000..efa5873
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/beforeGenerics.java
@@ -0,0 +1,6 @@
+// "Create Inner Class 'Generic'" "true"
+class Test {
+  void foo () {
+    new <caret>Generic<String> ();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/beforeInSuperNonConstructor.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/beforeInSuperNonConstructor.java
new file mode 100644
index 0000000..34a9ff3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/beforeInSuperNonConstructor.java
@@ -0,0 +1,9 @@
+// "Create Inner Class 'Generic'" "true"
+class Base {
+  void foo(){}
+}
+class Test extends Base {
+  Test() {
+    super.foo(new <caret>Generic<String> ());
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/beforeInThis.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/beforeInThis.java
new file mode 100644
index 0000000..859150c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromNew/beforeInThis.java
@@ -0,0 +1,8 @@
+// "Create Inner Class 'Generic'" "true"
+class Test {
+  Test() {
+    this (new <caret>Generic<String> ());
+  }
+
+  Test(String s){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/after1.java
new file mode 100644
index 0000000..997151a2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/after1.java
@@ -0,0 +1,9 @@
+// "Create Inner Class 'Abc'" "true"
+public class Test {
+    public foo(int ppp) {
+        <caret>Abc.foo();
+    }
+
+    private class Abc {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/afterCast.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/afterCast.java
new file mode 100644
index 0000000..8ab385f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/afterCast.java
@@ -0,0 +1,11 @@
+// "Create Inner Class 'ClassB'" "true"
+public class ClassA
+{
+    public void mA(Object arg)
+    {
+        ((<caret>ClassB) arg).foo();
+    }
+
+    private class ClassB {
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/afterClassObjectAccess1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/afterClassObjectAccess1.java
new file mode 100644
index 0000000..9cad601
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/afterClassObjectAccess1.java
@@ -0,0 +1,10 @@
+// "Create Inner Class 'Foo'" "true"
+public class Test {
+  void foo(Class<Number> n){}
+  void bar() {
+    foo(Fo<caret>o.class);
+  }
+
+    private class Foo extends Number {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/afterClassObjectAccess2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/afterClassObjectAccess2.java
new file mode 100644
index 0000000..dc31b26
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/afterClassObjectAccess2.java
@@ -0,0 +1,10 @@
+// "Create Inner Class 'Foo'" "true"
+public class Test {
+  void foo(Class<? extends Number> n){}
+  void bar() {
+    foo(Fo<caret>o.class);
+  }
+
+    private class Foo extends Number {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/afterClassObjectAccess3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/afterClassObjectAccess3.java
new file mode 100644
index 0000000..c5777d0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/afterClassObjectAccess3.java
@@ -0,0 +1,10 @@
+// "Create Inner Class 'Foo'" "true"
+public class Test {
+  void foo(Class<? super Number> n){}
+  void bar() {
+    foo(Fo<caret>o.class);
+  }
+
+    private class Foo {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/afterClassObjectAccess4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/afterClassObjectAccess4.java
new file mode 100644
index 0000000..461a1fb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/afterClassObjectAccess4.java
@@ -0,0 +1,10 @@
+// "Create Inner Class 'Foo'" "true"
+public class Test {
+  void foo(Class<? extends Number> n){}
+  void bar() {
+    foo(Fo<caret>o);
+  }
+
+    private class Foo {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/afterFieldType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/afterFieldType.java
new file mode 100644
index 0000000..909937f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/afterFieldType.java
@@ -0,0 +1,7 @@
+// "Create Inner Class 'Abc'" "true"
+public class Test {
+    private <caret>Abc fld;
+
+    private class Abc {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/afterInnerInInterface.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/afterInnerInInterface.java
new file mode 100644
index 0000000..abc7090
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/afterInnerInInterface.java
@@ -0,0 +1,7 @@
+// "Create Inner Class 'Foo'" "true"
+public interface Test {
+  void foo(Fo<caret>o f){}
+
+    class Foo {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/afterMethodType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/afterMethodType.java
new file mode 100644
index 0000000..c0c100e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/afterMethodType.java
@@ -0,0 +1,7 @@
+// "Create Inner Class 'Abc'" "true"
+public class Test {
+    private <caret>Abc foo() {}
+
+    private class Abc {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/afterParameterType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/afterParameterType.java
new file mode 100644
index 0000000..d0f6d3f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/afterParameterType.java
@@ -0,0 +1,7 @@
+// "Create Inner Class 'Abc'" "true"
+public class Test {
+    private void foo(<caret>Abc param) {}
+
+    private class Abc {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/afterStaticModifierNeeded.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/afterStaticModifierNeeded.java
new file mode 100644
index 0000000..6ef2879
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/afterStaticModifierNeeded.java
@@ -0,0 +1,9 @@
+// "Create Inner Class 'Foo'" "true"
+public class Test {
+  static class A extends Foo {
+    
+  }
+
+    private static class Foo {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/afterTypeParameterCreated.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/afterTypeParameterCreated.java
new file mode 100644
index 0000000..7c49bb5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/afterTypeParameterCreated.java
@@ -0,0 +1,7 @@
+// "Create Inner Class 'Foo'" "true"
+public class Test {
+  <R> void foo(Fo<caret>o<R, String> f){}
+
+    private class Foo<R, T> {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/before1.java
new file mode 100644
index 0000000..d8eb711
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/before1.java
@@ -0,0 +1,6 @@
+// "Create Inner Class 'Abc'" "true"
+public class Test {
+    public foo(int ppp) {
+        <caret>Abc.foo();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/beforeCast.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/beforeCast.java
new file mode 100644
index 0000000..f3c31f0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/beforeCast.java
@@ -0,0 +1,8 @@
+// "Create Inner Class 'ClassB'" "true"
+public class ClassA
+{
+    public void mA(Object arg)
+    {
+        ((<caret>ClassB) arg).foo();
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/beforeClassObjectAccess1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/beforeClassObjectAccess1.java
new file mode 100644
index 0000000..90c9bce
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/beforeClassObjectAccess1.java
@@ -0,0 +1,7 @@
+// "Create Inner Class 'Foo'" "true"
+public class Test {
+  void foo(Class<Number> n){}
+  void bar() {
+    foo(Fo<caret>o.class);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/beforeClassObjectAccess2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/beforeClassObjectAccess2.java
new file mode 100644
index 0000000..2851700
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/beforeClassObjectAccess2.java
@@ -0,0 +1,7 @@
+// "Create Inner Class 'Foo'" "true"
+public class Test {
+  void foo(Class<? extends Number> n){}
+  void bar() {
+    foo(Fo<caret>o.class);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/beforeClassObjectAccess3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/beforeClassObjectAccess3.java
new file mode 100644
index 0000000..e2e93da
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/beforeClassObjectAccess3.java
@@ -0,0 +1,7 @@
+// "Create Inner Class 'Foo'" "true"
+public class Test {
+  void foo(Class<? super Number> n){}
+  void bar() {
+    foo(Fo<caret>o.class);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/beforeClassObjectAccess4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/beforeClassObjectAccess4.java
new file mode 100644
index 0000000..a7e971f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/beforeClassObjectAccess4.java
@@ -0,0 +1,7 @@
+// "Create Inner Class 'Foo'" "true"
+public class Test {
+  void foo(Class<? extends Number> n){}
+  void bar() {
+    foo(Fo<caret>o);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/beforeFieldType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/beforeFieldType.java
new file mode 100644
index 0000000..23d384b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/beforeFieldType.java
@@ -0,0 +1,4 @@
+// "Create Inner Class 'Abc'" "true"
+public class Test {
+    private <caret>Abc fld;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/beforeInnerInInterface.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/beforeInnerInInterface.java
new file mode 100644
index 0000000..620982f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/beforeInnerInInterface.java
@@ -0,0 +1,4 @@
+// "Create Inner Class 'Foo'" "true"
+public interface Test {
+  void foo(Fo<caret>o f){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/beforeMethodType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/beforeMethodType.java
new file mode 100644
index 0000000..fb8fec0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/beforeMethodType.java
@@ -0,0 +1,4 @@
+// "Create Inner Class 'Abc'" "true"
+public class Test {
+    private <caret>Abc foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/beforeNa1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/beforeNa1.java
new file mode 100644
index 0000000..762b364
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/beforeNa1.java
@@ -0,0 +1,6 @@
+// "Create Inner Class 'abc'" "false"
+public class Test {
+    public void foo(int ppp) {
+        <caret>abc.foo();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/beforeNa2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/beforeNa2.java
new file mode 100644
index 0000000..5a556f1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/beforeNa2.java
@@ -0,0 +1,6 @@
+// "Create Inner Class 'Abc'" "false"
+public class Test {
+    public void foo(int ppp) {
+        int local = ppp + <caret>Abc;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/beforeParameterType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/beforeParameterType.java
new file mode 100644
index 0000000..1616e84
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/beforeParameterType.java
@@ -0,0 +1,4 @@
+// "Create Inner Class 'Abc'" "true"
+public class Test {
+    private void foo(<caret>Abc param) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/beforeStaticModifierNeeded.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/beforeStaticModifierNeeded.java
new file mode 100644
index 0000000..fcb69f6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/beforeStaticModifierNeeded.java
@@ -0,0 +1,6 @@
+// "Create Inner Class 'Foo'" "true"
+public class Test {
+  static class A extends F<caret>oo {
+    
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/beforeTypeParameterCreated.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/beforeTypeParameterCreated.java
new file mode 100644
index 0000000..801fbae
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/beforeTypeParameterCreated.java
@@ -0,0 +1,4 @@
+// "Create Inner Class 'Foo'" "true"
+public class Test {
+  <R> void foo(Fo<caret>o<R, String> f){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/after1.java
new file mode 100644
index 0000000..503684d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/after1.java
@@ -0,0 +1,11 @@
+// "Create Local Variable 'x'" "true"
+class other {
+  public int method1() { return 1;}
+  public String field1;
+}
+class A {
+    public void foo() {
+        other x<caret>;
+        x.method1();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/after2.java
new file mode 100644
index 0000000..7d509aa
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/after2.java
@@ -0,0 +1,11 @@
+// "Create Local Variable 'x'" "true"
+class other {
+  public int method1() { return 1;}
+  public String field1;
+}
+class A {
+    public void foo() {
+        other x<caret>;
+        int i = x.field1;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/after3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/after3.java
new file mode 100644
index 0000000..20bbce5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/after3.java
@@ -0,0 +1,7 @@
+// "Create Local Variable 'a'" "true"
+class C {
+  void foo() {
+      int a<caret> = 10;
+      a++;
+   }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/afterIDEADEV2494.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/afterIDEADEV2494.java
new file mode 100644
index 0000000..0f3848e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/afterIDEADEV2494.java
@@ -0,0 +1,9 @@
+// "Create Local Variable 't'" "true"
+class Test {
+    private void f() {
+        int t<caret>;
+        int i = t;
+        t = 0;
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/afterMethodRef.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/afterMethodRef.java
new file mode 100644
index 0000000..6063a94
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/afterMethodRef.java
@@ -0,0 +1,8 @@
+// "Create Local Variable 'zeit'" "true"
+public class A {
+    void foo() {
+        Object zeit<caret> = A::foo;
+    }
+
+    static void foo(){}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/afterPreserveComment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/afterPreserveComment.java
new file mode 100644
index 0000000..4ce4932
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/afterPreserveComment.java
@@ -0,0 +1,8 @@
+// "Create Local Variable 'zeit'" "true"
+public class A {
+    void foo() {
+        String[] split = null;
+        String zeit = split[1]; // 2011-04-13
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/afterScopes1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/afterScopes1.java
new file mode 100644
index 0000000..37b2f7f4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/afterScopes1.java
@@ -0,0 +1,10 @@
+// "Create Local Variable 'local'" "true"
+class A {
+    public void foo() {
+        String local<caret>;
+        System.out.println(local);
+        {
+            local = "";
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/afterTypeArgsFormatted.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/afterTypeArgsFormatted.java
new file mode 100644
index 0000000..c9ebd85
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/afterTypeArgsFormatted.java
@@ -0,0 +1,12 @@
+// "Create Local Variable 'field'" "true"
+import java.util.*;
+class A {
+  void foo(Map<String, String> s){}
+
+  void bar() {
+      Map<String, String> field<caret>;
+      foo(field);
+  }
+
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/afterWithoutSemicolon.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/afterWithoutSemicolon.java
new file mode 100644
index 0000000..b6f8b2a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/afterWithoutSemicolon.java
@@ -0,0 +1,8 @@
+// "Create Local Variable 'zeit'" "true"
+public class A {
+    void foo() {
+        String[] split = null;
+        String zeit<caret> = split[1];
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/before1.java
new file mode 100644
index 0000000..2b8f034
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/before1.java
@@ -0,0 +1,10 @@
+// "Create Local Variable 'x'" "true"
+class other {
+  public int method1() { return 1;}
+  public String field1;
+}
+class A {
+    public void foo() {
+        <caret>x.method1();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/before2.java
new file mode 100644
index 0000000..0541389
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/before2.java
@@ -0,0 +1,10 @@
+// "Create Local Variable 'x'" "true"
+class other {
+  public int method1() { return 1;}
+  public String field1;
+}
+class A {
+    public void foo() {
+        int i = <caret>x.field1;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/before3.java
new file mode 100644
index 0000000..d9cc6a6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/before3.java
@@ -0,0 +1,7 @@
+// "Create Local Variable 'a'" "true"
+class C {
+  void foo() {
+      <caret>a = 10;
+      a++;
+   }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/beforeIDEADEV2494.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/beforeIDEADEV2494.java
new file mode 100644
index 0000000..f3181f3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/beforeIDEADEV2494.java
@@ -0,0 +1,8 @@
+// "Create Local Variable 't'" "true"
+class Test {
+    private void f() {
+        int i = <caret>t;
+        t = 0;
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/beforeMethodRef.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/beforeMethodRef.java
new file mode 100644
index 0000000..fcace88
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/beforeMethodRef.java
@@ -0,0 +1,8 @@
+// "Create Local Variable 'zeit'" "true"
+public class A {
+    void foo() {
+        ze<caret>it = A::foo;
+    }
+
+    static void foo(){}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/beforePreserveComment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/beforePreserveComment.java
new file mode 100644
index 0000000..14233a2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/beforePreserveComment.java
@@ -0,0 +1,8 @@
+// "Create Local Variable 'zeit'" "true"
+public class A {
+    void foo() {
+        String[] split = null;
+        ze<caret>it = split[1]; // 2011-04-13
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/beforeScopes1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/beforeScopes1.java
new file mode 100644
index 0000000..b776c09
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/beforeScopes1.java
@@ -0,0 +1,9 @@
+// "Create Local Variable 'local'" "true"
+class A {
+    public void foo() {
+        System.out.println(local);
+        {
+            <caret>local = "";
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/beforeTypeArgsFormatted.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/beforeTypeArgsFormatted.java
new file mode 100644
index 0000000..a0355cd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/beforeTypeArgsFormatted.java
@@ -0,0 +1,11 @@
+// "Create Local Variable 'field'" "true"
+import java.util.*;
+class A {
+  void foo(Map<String, String> s){}
+
+  void bar() {
+    foo(fie<caret>ld);
+  }
+
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/beforeWithoutSemicolon.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/beforeWithoutSemicolon.java
new file mode 100644
index 0000000..60e27d1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalFromUsage/beforeWithoutSemicolon.java
@@ -0,0 +1,8 @@
+// "Create Local Variable 'zeit'" "true"
+public class A {
+    void foo() {
+        String[] split = null;
+        ze<caret>it = split[1]
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/after1.java
new file mode 100644
index 0000000..a270d17
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/after1.java
@@ -0,0 +1,10 @@
+// "Insert '(Runnable)this' declaration" "true"
+class C {
+  void f() {
+    if (this instanceof Runnable) {
+        Runnable runnable = (Runnable) this;
+        <caret>
+    }
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/after2.java
new file mode 100644
index 0000000..37a2c33
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/after2.java
@@ -0,0 +1,11 @@
+// "Insert '(Runnable)this' declaration" "true"
+class C {
+  void f() {
+      if (!(this instanceof Runnable)) {
+          return;
+      }
+      Runnable runnable = (Runnable) this;
+      <caret>
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/after3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/after3.java
new file mode 100644
index 0000000..86311a5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/after3.java
@@ -0,0 +1,11 @@
+// "Insert '(Runnable)this' declaration" "true"
+class C {
+  void f() {
+      while (!(this instanceof Runnable)) {
+          //return;
+      }
+      Runnable runnable = (Runnable) this;
+      <caret>
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/after4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/after4.java
new file mode 100644
index 0000000..dac4da1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/after4.java
@@ -0,0 +1,9 @@
+// "Insert '(Runnable)this' declaration" "true"
+class C {
+  void f() {
+      while (this instanceof Runnable) {
+          Runnable runnable = (Runnable) this;
+          <caret>
+      }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/after5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/after5.java
new file mode 100644
index 0000000..da8069d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/after5.java
@@ -0,0 +1,9 @@
+// "Insert '(Runnable)this' declaration" "true"
+class C {
+  void f() {
+      if (this instanceof Runnable) {
+          Runnable runnable = (Runnable) this;
+          <caret>
+      }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/after7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/after7.java
new file mode 100644
index 0000000..7ff3783
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/after7.java
@@ -0,0 +1,11 @@
+// "Insert '(String)s' declaration" "true"
+class C {
+    void f() {
+        String s = "";
+        if (s instanceof String) {
+            String s1 = (String) s;
+            <caret>
+
+        }
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/after8.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/after8.java
new file mode 100644
index 0000000..ccb36e7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/after8.java
@@ -0,0 +1,10 @@
+// "Insert '(String)o' declaration" "true"
+class C {
+    void f(Object o) {
+        if (o instanceof String) {
+            String s = (String) o;
+            <caret>
+            o = "";
+        }
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/afterIntersection.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/afterIntersection.java
new file mode 100644
index 0000000..4789b08
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/afterIntersection.java
@@ -0,0 +1,10 @@
+// "Insert '(String)o' declaration" "true"
+class C {
+    void f(Object o, Object f) {
+        if (o instanceof String && f == null) {
+            String s = (String) o;
+            <caret>
+
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/afterOnRef.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/afterOnRef.java
new file mode 100644
index 0000000..c80764d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/afterOnRef.java
@@ -0,0 +1,10 @@
+// "Insert '(Runnable)o' declaration" "true"
+class C {
+  void f(Object o) {
+    if (o instanceof Runnable) {
+        Runnable runnable = (Runnable) o;
+        <caret>
+    }
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/before1.java
new file mode 100644
index 0000000..fb889b1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/before1.java
@@ -0,0 +1,7 @@
+// "Insert '(Runnable)this' declaration" "true"
+class C {
+  void f() {
+    if (this <caret>instanceof Runnable)
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/before2.java
new file mode 100644
index 0000000..f8efb2b8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/before2.java
@@ -0,0 +1,9 @@
+// "Insert '(Runnable)this' declaration" "true"
+class C {
+  void f() {
+      if (!(this instanceof <caret>Runnable)) {
+          return;
+      }
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/before3.java
new file mode 100644
index 0000000..07d85b9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/before3.java
@@ -0,0 +1,9 @@
+// "Insert '(Runnable)this' declaration" "true"
+class C {
+  void f() {
+      while (!(<caret>this instanceof Runnable)) {
+          //return;
+      }
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/before4.java
new file mode 100644
index 0000000..2c67299
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/before4.java
@@ -0,0 +1,6 @@
+// "Insert '(Runnable)this' declaration" "true"
+class C {
+  void f() {
+      while (<caret>this instanceof Runnable
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/before5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/before5.java
new file mode 100644
index 0000000..bf3a0fa
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/before5.java
@@ -0,0 +1,7 @@
+// "Insert '(Runnable)this' declaration" "true"
+class C {
+  void f() {
+      if (this instanceof Runnable) {   <caret>
+      }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/before6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/before6.java
new file mode 100644
index 0000000..ef62ce4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/before6.java
@@ -0,0 +1,8 @@
+// "Insert '(Runnable)this' declaration" "false"
+class C {
+  void f() {
+      if (this instanceof Runnable<caret>) {
+        Object o = (Runnable)this;
+      }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/before7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/before7.java
new file mode 100644
index 0000000..4dd2d80
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/before7.java
@@ -0,0 +1,9 @@
+// "Insert '(String)s' declaration" "true"
+class C {
+    void f() {
+        String s = "";
+        if (s instanceof String) {
+            <caret>
+        }
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/before8.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/before8.java
new file mode 100644
index 0000000..409487b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/before8.java
@@ -0,0 +1,7 @@
+// "Insert '(String)o' declaration" "true"
+class C {
+    void f(Object o) {
+        if (o instanceof String<caret>)
+        o = "";
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/beforeComplexExpression.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/beforeComplexExpression.java
new file mode 100644
index 0000000..80ed1ae
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/beforeComplexExpression.java
@@ -0,0 +1,8 @@
+// "Insert '(String)!o' declaration" "false"
+class C {
+    void f(Object o, Object f) {
+        if (!o instanceof String) {
+          <caret>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/beforeIntersection.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/beforeIntersection.java
new file mode 100644
index 0000000..75ec8d6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/beforeIntersection.java
@@ -0,0 +1,8 @@
+// "Insert '(String)o' declaration" "true"
+class C {
+    void f(Object o, Object f) {
+        if (o instanceof String && f == null) {
+          <caret>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/beforeIntersectionAndUnion.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/beforeIntersectionAndUnion.java
new file mode 100644
index 0000000..6fb7d10
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/beforeIntersectionAndUnion.java
@@ -0,0 +1,8 @@
+// "Insert '(String)o' declaration" "false"
+class C {
+    void f(Object o, Object f) {
+        if (o instanceof String || f == null) {
+          <caret>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/beforeIntersectionMultiple.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/beforeIntersectionMultiple.java
new file mode 100644
index 0000000..3b657b6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/beforeIntersectionMultiple.java
@@ -0,0 +1,8 @@
+// "Insert '(String)o' declaration" "false"
+class C {
+    void f(Object o, Object f) {
+        if (o instanceof String && f instanceof String) {
+          <caret>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/beforeNegationOnRef.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/beforeNegationOnRef.java
new file mode 100644
index 0000000..1dd9d55
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/beforeNegationOnRef.java
@@ -0,0 +1,9 @@
+// "Insert '(Runnable)o' declaration" "false"
+class C {
+  void f(Object o) {
+    if (!(o instanceof Runnable)) {
+      o<caret>
+    }
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/beforeOnRef.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/beforeOnRef.java
new file mode 100644
index 0000000..405cc86
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createLocalVarFromInstanceof/beforeOnRef.java
@@ -0,0 +1,9 @@
+// "Insert '(Runnable)o' declaration" "true"
+class C {
+  void f(Object o) {
+    if (o instanceof Runnable) {
+      o<caret>
+    }
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/after1.java
new file mode 100644
index 0000000..8a94eda
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/after1.java
@@ -0,0 +1,10 @@
+// "Create Method 'test'" "true"
+public class Test {
+    public Test() {
+        test();
+    }
+
+    private void test() {
+        <caret><selection>//To change body of created methods use File | Settings | File Templates.</selection>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/after3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/after3.java
new file mode 100644
index 0000000..8a94eda
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/after3.java
@@ -0,0 +1,10 @@
+// "Create Method 'test'" "true"
+public class Test {
+    public Test() {
+        test();
+    }
+
+    private void test() {
+        <caret><selection>//To change body of created methods use File | Settings | File Templates.</selection>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/after4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/after4.java
new file mode 100644
index 0000000..8a94eda
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/after4.java
@@ -0,0 +1,10 @@
+// "Create Method 'test'" "true"
+public class Test {
+    public Test() {
+        test();
+    }
+
+    private void test() {
+        <caret><selection>//To change body of created methods use File | Settings | File Templates.</selection>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/after5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/after5.java
new file mode 100644
index 0000000..1660715
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/after5.java
@@ -0,0 +1,11 @@
+// "Create Method 'test'" "true"
+public class Test {
+    static void test(int i) {}
+    public Test() {
+        test();
+    }
+
+    private void test() {
+        <caret><selection>//To change body of created methods use File | Settings | File Templates.</selection>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterArrayTypeParam.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterArrayTypeParam.java
new file mode 100644
index 0000000..6a48f23
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterArrayTypeParam.java
@@ -0,0 +1,11 @@
+// "Create Method 'test'" "true"
+public class Test {
+    public Test() {
+        byte[] bytes = new byte[0];
+        test(bytes);
+    }
+
+    private void test(byte[] bytes) {
+        <selection>//To change body of created methods use File | Settings | File Templates.</selection>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterAssertDescription.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterAssertDescription.java
new file mode 100644
index 0000000..c6630d3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterAssertDescription.java
@@ -0,0 +1,10 @@
+// "Create Method 'f'" "true"
+class A {
+    {
+         assert false: f();
+    }
+
+    private String f() {
+        <selection>return null;  //To change body of created methods use File | Settings | File Templates.</selection>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterClassTypeParamNotAvailable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterClassTypeParamNotAvailable.java
new file mode 100644
index 0000000..54129e4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterClassTypeParamNotAvailable.java
@@ -0,0 +1,26 @@
+// "Create Method 'makeOp'" "true"
+class Base<T> {
+    Base(Factory<T> factory, Operator<T> operator) {
+    }
+}
+
+interface MetaOperator<T> {
+}
+
+interface Operator<T> {
+}
+
+interface Factory<T> {
+}
+
+class Sup<T> extends Base<T> {
+    Sup(MetaOperator<T> mop) {
+        super(null, makeOp(mop));
+    }
+
+    private static <T> Operator<T> makeOp(MetaOperator<T> mop) {
+        <selection>return null;  //To change body of created methods use File | Settings | File Templates.</selection>
+    }
+
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterExistingField.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterExistingField.java
new file mode 100644
index 0000000..667a288
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterExistingField.java
@@ -0,0 +1,12 @@
+// "Create Getter" "true"
+public class Test {
+    Integer field;
+
+    public foo() {
+        getField();
+    }
+
+    public Integer getField() {
+        return field;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterGenerics1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterGenerics1.java
new file mode 100644
index 0000000..ed3f5ed
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterGenerics1.java
@@ -0,0 +1,10 @@
+// "Create Method 'bar'" "true"
+public class Test {
+    <T extends String> void foo (T t1, T t2) {
+        bar (t1, t2);
+    }
+
+    private <T extends String> void bar(T t1, T t2) {
+        <caret><selection>//To change body of created methods use File | Settings | File Templates.</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterIDEA2327.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterIDEA2327.java
new file mode 100644
index 0000000..0500941
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterIDEA2327.java
@@ -0,0 +1,10 @@
+// "Create Method 'test'" "true"
+public class Test {
+    public Test() {
+        assert test();
+    }
+
+    private boolean test() {
+        <caret><selection>return false;  //To change body of created methods use File | Settings | File Templates.</selection>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterIDEADEV6068.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterIDEADEV6068.java
new file mode 100644
index 0000000..412f4f7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterIDEADEV6068.java
@@ -0,0 +1,13 @@
+// "Create Method 'toMulti'" "true"
+import java.util.Map;
+
+class BrokenCreateMethod {
+
+    public void foo(Map<String, String> bar) {
+        Map<String, String[]> multiBar = toMulti(bar);
+    }
+
+    private Map<String, String[]> toMulti(Map<String, String> bar) {
+        <selection>return null;  //To change body of created methods use File | Settings | File Templates.</selection>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterInterface.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterInterface.java
new file mode 100644
index 0000000..285b189
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterInterface.java
@@ -0,0 +1,12 @@
+// "Create Method 'test'" "true"
+public interface Test {
+
+    void test();
+}
+
+class Foo {
+  void bar() {
+    Test test = null;
+    test.test();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterLambdaArgument.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterLambdaArgument.java
new file mode 100644
index 0000000..96744f4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterLambdaArgument.java
@@ -0,0 +1,10 @@
+// "Create Method 'f'" "true"
+class A {
+    {
+         f(() -> {});
+    }
+
+    private void f(Object p0) {
+        <caret><selection>//To change body of created methods use File | Settings | File Templates.</selection>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterMethodReferenceArgument.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterMethodReferenceArgument.java
new file mode 100644
index 0000000..c5257c0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterMethodReferenceArgument.java
@@ -0,0 +1,14 @@
+// "Create Method 'f'" "true"
+class A {
+    {
+         f(A::foo);
+    }
+
+    private void f(Object foo) {
+        <selection>//To change body of created methods use File | Settings | File Templates.</selection>
+    }
+
+    static int foo() {
+      return 42;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterMethodTypeParamBecomeClassTypeParameter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterMethodTypeParamBecomeClassTypeParameter.java
new file mode 100644
index 0000000..8bfbe6f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterMethodTypeParamBecomeClassTypeParameter.java
@@ -0,0 +1,14 @@
+// "Create Method 'foo'" "true"
+class Test {
+    <R, D> R foo(T<R, D> t, D data) {
+        return t.foo(this, data);
+    }
+}
+
+class T<R, D> {
+
+
+    public R foo(Test test, D data) {
+        <selection>return null;  //To change body of created methods use File | Settings | File Templates.</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterMethodTypeParamUsed.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterMethodTypeParamUsed.java
new file mode 100644
index 0000000..f2437ae
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterMethodTypeParamUsed.java
@@ -0,0 +1,12 @@
+// "Create Method 'f'" "true"
+class A {
+    <T> T foo(){
+       B<T> x = f();
+    }
+
+    private <T> B<T> f() {
+        <selection>return null;  //To change body of created methods use File | Settings | File Templates.</selection>
+    }
+}
+
+class B<K>{}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterMethodTypeParamUsed1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterMethodTypeParamUsed1.java
new file mode 100644
index 0000000..1556205
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterMethodTypeParamUsed1.java
@@ -0,0 +1,11 @@
+// "Create Method 'f'" "true"
+public class CreateMethodTest {
+  public <T> T aMethod(T t) {
+    T result = f(t);
+    return result;
+  }
+
+    private <T> T f(T t) {
+        <selection>return null;  //To change body of created methods use File | Settings | File Templates.</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterMultipleTypes.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterMultipleTypes.java
new file mode 100644
index 0000000..adbac37
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterMultipleTypes.java
@@ -0,0 +1,11 @@
+// "Create Method 'bar'" "true"
+class A {
+    public void foo() {
+      Object x = bar();
+      String s = bar();
+    }
+
+    private String bar() {
+        <caret><selection>return null;  //To change body of created methods use File | Settings | File Templates.</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterNoQualification.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterNoQualification.java
new file mode 100644
index 0000000..0f3e698
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterNoQualification.java
@@ -0,0 +1,20 @@
+// "Create Method 'run'" "true"
+class Bug {
+
+  interface Foo<X> {
+    void run(X x);
+  }
+
+  public static void main(String[] args) {
+    new Foo<Bug>() {
+      @Override
+      public void run(Bug o) {
+        o.run();
+      }
+    };
+  }
+
+    private void run() {
+        <selection>//To change body of created methods use File | Settings | File Templates.</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterSCR6758.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterSCR6758.java
new file mode 100644
index 0000000..785fac5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterSCR6758.java
@@ -0,0 +1,15 @@
+// "Create Method 'someMethod'" "true"
+public class Test {
+
+    public Object get() {
+        return new Object() {
+            public boolean equals(Object obj) {
+                return someMethod(this);
+            }
+
+            private boolean someMethod(Object o) {
+                <caret><selection>return false;  //To change body of created methods use File | Settings | File Templates.</selection>
+            }
+        };
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterSCR6826.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterSCR6826.java
new file mode 100644
index 0000000..6030069
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterSCR6826.java
@@ -0,0 +1,15 @@
+// "Create Method 'f'" "true"
+class A {
+    {
+        new Runnable() {
+            public void run() {
+                B.f(this);
+            }
+        };
+    }
+}
+class B {
+    public static void f(Runnable runnable) {
+        <caret><selection>//To change body of created methods use File | Settings | File Templates.</selection>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterStaticMethodNotInInterface.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterStaticMethodNotInInterface.java
new file mode 100644
index 0000000..16a4e13
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterStaticMethodNotInInterface.java
@@ -0,0 +1,11 @@
+// "Create Method 'f'" "true"
+interface I {}
+class A implements I {
+  {
+    A.f();
+  }
+
+    private static void f() {
+        <selection>//To change body of created methods use File | Settings | File Templates.</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterThisCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterThisCall.java
new file mode 100644
index 0000000..7502248
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterThisCall.java
@@ -0,0 +1,13 @@
+// "Create Method 'f'" "true"
+public class A {
+    public A() {
+        this(f());
+    }
+
+    private static int f() {
+        <caret><selection>return 0;  //To change body of created methods use File | Settings | File Templates.</selection>
+    }
+
+    public A(int i) {
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/before1.java
new file mode 100644
index 0000000..b4298c6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/before1.java
@@ -0,0 +1,6 @@
+// "Create Method 'test'" "true"
+public class Test {
+    public Test() {
+        te<caret>st();
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/before2.java
new file mode 100644
index 0000000..0289284
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/before2.java
@@ -0,0 +1,6 @@
+// "Do not create method" "false"
+public class Test {
+    public Test() {
+        test(<caret>);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/before3.java
new file mode 100644
index 0000000..dbee623
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/before3.java
@@ -0,0 +1,6 @@
+// "Create Method 'test'" "true"
+public class Test {
+    public Test() {
+        test()<caret>;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/before4.java
new file mode 100644
index 0000000..56ecb13
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/before4.java
@@ -0,0 +1,6 @@
+// "Create Method 'test'" "true"
+public class Test {
+    public Test() {
+        test();<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/before5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/before5.java
new file mode 100644
index 0000000..70f7699
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/before5.java
@@ -0,0 +1,7 @@
+// "Create Method 'test'" "true"
+public class Test {
+    static void test(int i) {}
+    public Test() {
+        te<caret>st();
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeAlreadyExistSignature.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeAlreadyExistSignature.java
new file mode 100644
index 0000000..1e5a814
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeAlreadyExistSignature.java
@@ -0,0 +1,10 @@
+// "Create Method 'f'" "false"
+public class Foo {
+    void foo(Bar f) {
+        f.<caret>f(2);
+    }
+}
+class Bar {
+    private void f(int i){}
+    public void f(String s){}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeArrayTypeParam.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeArrayTypeParam.java
new file mode 100644
index 0000000..0e52200
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeArrayTypeParam.java
@@ -0,0 +1,7 @@
+// "Create Method 'test'" "true"
+public class Test {
+    public Test() {
+        byte[] bytes = new byte[0];
+        te<caret>st(bytes);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeAssertDescription.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeAssertDescription.java
new file mode 100644
index 0000000..a87acc2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeAssertDescription.java
@@ -0,0 +1,6 @@
+// "Create Method 'f'" "true"
+class A {
+    {
+         assert false: f<caret>();
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeClassTypeParamNotAvailable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeClassTypeParamNotAvailable.java
new file mode 100644
index 0000000..e131180
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeClassTypeParamNotAvailable.java
@@ -0,0 +1,23 @@
+// "Create Method 'makeOp'" "true"
+class Base<T> {
+    Base(Factory<T> factory, Operator<T> operator) {
+    }
+}
+
+interface MetaOperator<T> {
+}
+
+interface Operator<T> {
+}
+
+interface Factory<T> {
+}
+
+class Sup<T> extends Base<T> {
+    Sup(MetaOperator<T> mop) {
+        super(null, mak<caret>eOp(mop));
+    }
+
+   
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeExistingField.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeExistingField.java
new file mode 100644
index 0000000..a1ca74e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeExistingField.java
@@ -0,0 +1,7 @@
+// "Create Getter" "true"
+public class Test {
+    Integer field;
+    public foo() {
+        get<caret>Field();
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeGenerics1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeGenerics1.java
new file mode 100644
index 0000000..b89a031
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeGenerics1.java
@@ -0,0 +1,6 @@
+// "Create Method 'bar'" "true"
+public class Test {
+    <T extends String> void foo (T t1, T t2) {
+        <caret>bar (t1, t2);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeIDEA2327.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeIDEA2327.java
new file mode 100644
index 0000000..2bbe9057
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeIDEA2327.java
@@ -0,0 +1,6 @@
+// "Create Method 'test'" "true"
+public class Test {
+    public Test() {
+        assert <caret>test();
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeIDEADEV6068.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeIDEADEV6068.java
new file mode 100644
index 0000000..981fe68
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeIDEADEV6068.java
@@ -0,0 +1,9 @@
+// "Create Method 'toMulti'" "true"
+import java.util.Map;
+
+class BrokenCreateMethod {
+
+    public void foo(Map<String, String> bar) {
+        Map<String, String[]> multiBar = <caret>toMulti(bar);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeInterface.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeInterface.java
new file mode 100644
index 0000000..7b1f39b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeInterface.java
@@ -0,0 +1,11 @@
+// "Create Method 'test'" "true"
+public interface Test {
+
+}
+
+class Foo {
+  void bar() {
+    Test test = null;
+    test.te<caret>st();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeLambdaArgument.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeLambdaArgument.java
new file mode 100644
index 0000000..f7a3903
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeLambdaArgument.java
@@ -0,0 +1,6 @@
+// "Create Method 'f'" "true"
+class A {
+    {
+         f<caret>(() -> {});
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeMethodReferenceArgument.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeMethodReferenceArgument.java
new file mode 100644
index 0000000..9ef6b7b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeMethodReferenceArgument.java
@@ -0,0 +1,9 @@
+// "Create Method 'f'" "true"
+class A {
+    {
+         f<caret>(A::foo);
+    }
+    static int foo() {
+      return 42;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeMethodTypeParamBecomeClassTypeParameter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeMethodTypeParamBecomeClassTypeParameter.java
new file mode 100644
index 0000000..a91db40
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeMethodTypeParamBecomeClassTypeParameter.java
@@ -0,0 +1,11 @@
+// "Create Method 'foo'" "true"
+class Test {
+    <R, D> R foo(T<R, D> t, D data) {
+        return t.f<caret>oo(this, data);
+    }
+}
+
+class T<R, D> {
+
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeMethodTypeParamUsed.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeMethodTypeParamUsed.java
new file mode 100644
index 0000000..364f4fa
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeMethodTypeParamUsed.java
@@ -0,0 +1,8 @@
+// "Create Method 'f'" "true"
+class A {
+    <T> T foo(){
+       B<T> x = f<caret>();
+    }
+}
+
+class B<K>{}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeMethodTypeParamUsed1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeMethodTypeParamUsed1.java
new file mode 100644
index 0000000..8affcff
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeMethodTypeParamUsed1.java
@@ -0,0 +1,7 @@
+// "Create Method 'f'" "true"
+public class CreateMethodTest {
+  public <T> T aMethod(T t) {
+    T result = f<caret>(t);
+    return result;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeMultipleTypes.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeMultipleTypes.java
new file mode 100644
index 0000000..86b19b1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeMultipleTypes.java
@@ -0,0 +1,7 @@
+// "Create Method 'bar'" "true"
+class A {
+    public void foo() {
+      Object x = <caret>bar();
+      String s = bar();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeNoQualification.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeNoQualification.java
new file mode 100644
index 0000000..e5407e52
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeNoQualification.java
@@ -0,0 +1,16 @@
+// "Create Method 'run'" "true"
+class Bug {
+
+  interface Foo<X> {
+    void run(X x);
+  }
+
+  public static void main(String[] args) {
+    new Foo<Bug>() {
+      @Override
+      public void run(Bug o) {
+        o.ru<caret>n();
+      }
+    };
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeSCR6758.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeSCR6758.java
new file mode 100644
index 0000000..f3432646
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeSCR6758.java
@@ -0,0 +1,11 @@
+// "Create Method 'someMethod'" "true"
+public class Test {
+
+    public Object get() {
+        return new Object() {
+            public boolean equals(Object obj) {
+                return <caret>someMethod(this);
+            }
+        };
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeSCR6826.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeSCR6826.java
new file mode 100644
index 0000000..ff9219e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeSCR6826.java
@@ -0,0 +1,12 @@
+// "Create Method 'f'" "true"
+class A {
+    {
+        new Runnable() {
+            public void run() {
+                B.<caret>f(this);
+            }
+        };
+    }
+}
+class B {
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeStaticMethodNotInInterface.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeStaticMethodNotInInterface.java
new file mode 100644
index 0000000..bd0f582
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeStaticMethodNotInInterface.java
@@ -0,0 +1,7 @@
+// "Create Method 'f'" "true"
+interface I {}
+class A implements I {
+  {
+    A.<caret>f();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeThisCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeThisCall.java
new file mode 100644
index 0000000..a0c8d13
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeThisCall.java
@@ -0,0 +1,9 @@
+// "Create Method 'f'" "true"
+public class A {
+    public A() {
+        this(<caret>f());
+    }
+
+    public A(int i) {
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeUnresolvedArgList.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeUnresolvedArgList.java
new file mode 100644
index 0000000..5161e68
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeUnresolvedArgList.java
@@ -0,0 +1,6 @@
+// "Create Method 'f'" "false"
+class A {
+    {
+         f<caret>(xxx);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createParameterFromUsage/afterHierarchy.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createParameterFromUsage/afterHierarchy.java
new file mode 100644
index 0000000..dbdc236
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createParameterFromUsage/afterHierarchy.java
@@ -0,0 +1,11 @@
+// "Create Parameter 'popop'" "true"
+class Calculator {
+    public void printError(String detail, int line, String file, String popop) {
+        int i = popop;
+    }
+}
+class SSS extends Calculator {
+    public void printError(String detail, int line, String file, String popop) {
+        String s = <caret>popop;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createParameterFromUsage/afterSimple.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createParameterFromUsage/afterSimple.java
new file mode 100644
index 0000000..8cd393e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createParameterFromUsage/afterSimple.java
@@ -0,0 +1,6 @@
+// "Create Parameter 'popop'" "true"
+class Calculator {
+    public void printError(String detail, int line, String file, int popop) {
+        int i = <caret>popop;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createParameterFromUsage/beforeHierarchy.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createParameterFromUsage/beforeHierarchy.java
new file mode 100644
index 0000000..ed1cd95
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createParameterFromUsage/beforeHierarchy.java
@@ -0,0 +1,11 @@
+// "Create Parameter 'popop'" "true"
+class Calculator {
+    public void printError(String detail, int line, String file) {
+        int i = popop;
+    }
+}
+class SSS extends Calculator {
+    public void printError(String detail, int line, String file) {
+        String s = <caret>popop;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createParameterFromUsage/beforeSimple.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createParameterFromUsage/beforeSimple.java
new file mode 100644
index 0000000..ed6a66a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createParameterFromUsage/beforeSimple.java
@@ -0,0 +1,6 @@
+// "Create Parameter 'popop'" "true"
+class Calculator {
+    public void printError(String detail, int line, String file) {
+        int i = <caret>popop;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createPropertyFromUsage/afterFieldExist.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createPropertyFromUsage/afterFieldExist.java
new file mode 100644
index 0000000..e9baac3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createPropertyFromUsage/afterFieldExist.java
@@ -0,0 +1,16 @@
+// "Create Property" "true"
+class Calculator {
+    int i;
+
+    public void printError() {
+        setI(0);
+    }
+
+    public void setI(int i) {
+        this.i = i;
+    }
+
+    public int getI() {
+        return i;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createPropertyFromUsage/afterSimple.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createPropertyFromUsage/afterSimple.java
new file mode 100644
index 0000000..b28d93d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createPropertyFromUsage/afterSimple.java
@@ -0,0 +1,16 @@
+// "Create Property" "true"
+class Calculator {
+    private int i;
+
+    public void printError() {
+        setI(0);
+    }
+
+    public void setI(int i) {
+        this.i = i;
+    }
+
+    public int getI() {
+        return i;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createPropertyFromUsage/beforeFieldAndGetterExist.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createPropertyFromUsage/beforeFieldAndGetterExist.java
new file mode 100644
index 0000000..bec760f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createPropertyFromUsage/beforeFieldAndGetterExist.java
@@ -0,0 +1,8 @@
+// "Create Property" "false"
+class Calculator {
+    int i;
+    public void printError() {
+      set<caret>I(0); 
+    }
+    public int getI() {return i;}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createPropertyFromUsage/beforeFieldExist.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createPropertyFromUsage/beforeFieldExist.java
new file mode 100644
index 0000000..056457a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createPropertyFromUsage/beforeFieldExist.java
@@ -0,0 +1,7 @@
+// "Create Property" "true"
+class Calculator {
+    int i;
+    public void printError() {
+      set<caret>I(0); 
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createPropertyFromUsage/beforeSimple.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createPropertyFromUsage/beforeSimple.java
new file mode 100644
index 0000000..8d213ec
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createPropertyFromUsage/beforeSimple.java
@@ -0,0 +1,6 @@
+// "Create Property" "true"
+class Calculator {
+    public void printError() {
+      set<caret>I(0); 
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/after1.java
new file mode 100644
index 0000000..c235164
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/after1.java
@@ -0,0 +1,17 @@
+// "Defer assignment to 'n' using temp variable" "true"
+import java.io.*;
+
+class a {
+    void f(InputStream in) {
+        final int n;
+        int n1;
+        try {
+            n1 = in.read();
+        } catch (IOException e) {
+            <caret>n1 = -1;
+        }
+        n = n1;
+        int y = 4;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/after2.java
new file mode 100644
index 0000000..4010802
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/after2.java
@@ -0,0 +1,19 @@
+// "Defer assignment to 'n' using temp variable" "true"
+import java.io.*;
+
+class a {
+    void f(InputStream in) {
+        final int n;
+        int n1;
+        if (in==null) {
+            n1 = 2;
+            <caret>n1 = 2;
+        }
+        else {
+            n1 =4;
+        }
+        n = n1;
+        int p = 6;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/after3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/after3.java
new file mode 100644
index 0000000..f60e802
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/after3.java
@@ -0,0 +1,22 @@
+// "Defer assignment to 'n' using temp variable" "true"
+import java.io.*;
+
+class a {
+    void f(InputStream in) {
+        final int n;
+        int n1;
+        if (in==null) {
+            n1 = 2;
+            <caret>n1 = 2;
+            int h = n1;
+        }
+        else {
+            n1 =4;
+        }
+        n = n1;
+        f(n);
+        int p = n;
+    }
+    void f(int i) {}
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/after4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/after4.java
new file mode 100644
index 0000000..aa7c72b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/after4.java
@@ -0,0 +1,22 @@
+// "Defer assignment to 'n' using temp variable" "true"
+import java.io.*;
+
+class a {
+    final int n;
+    a(InputStream in) {
+        int n1;
+        if (in==null) {
+            n1 = 2;
+            <caret>n1 = 2;
+            int h = n1;
+        }
+        else {
+            n1 =4;
+        }
+        n = n1;
+        f(n);
+        int p = n;
+    }
+    void f(int i) {}
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/after5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/after5.java
new file mode 100644
index 0000000..15f40a0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/after5.java
@@ -0,0 +1,14 @@
+// "Defer assignment to 'i' using temp variable" "true"
+import java.io.*;
+
+class a {
+    void f(int k) {
+        final int i;
+        int i1;
+        i1 = 4;
+        <caret>i1 = 4;
+        i = i1;
+        f(i);
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/after6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/after6.java
new file mode 100644
index 0000000..d14eb5e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/after6.java
@@ -0,0 +1,12 @@
+// "Defer assignment to 'n' using temp variable" "true"
+import java.io.*;
+
+class a {
+    final int n;
+    {
+        int n1;
+        n1 =3;
+        <caret>n1 =3;
+        n = n1;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/after7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/after7.java
new file mode 100644
index 0000000..17e8d8a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/after7.java
@@ -0,0 +1,12 @@
+// "Defer assignment to 'n' using temp variable" "true"
+import java.io.*;
+
+class a {
+    final int n;
+    a(int n) {
+        int n1;
+        n1 =n;
+        <caret>n1 =n;
+        this.n = n1;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/after8.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/after8.java
new file mode 100644
index 0000000..9dccd3a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/after8.java
@@ -0,0 +1,18 @@
+// "Defer assignment to 'n' using temp variable" "true"
+import java.io.*;
+
+class a {
+    void f(InputStream in) {
+        final int n;
+        int n1;
+        try {
+            n1 = in.read();
+        } catch (IOException e) {
+            <caret>n1 = -1;
+            f(in);
+        }
+
+        n = n1;
+        int y = n;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/before1.java
new file mode 100644
index 0000000..4ac2482
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/before1.java
@@ -0,0 +1,15 @@
+// "Defer assignment to 'n' using temp variable" "true"
+import java.io.*;
+
+class a {
+    void f(InputStream in) {
+        final int n;
+        try {
+            n = in.read();
+        } catch (IOException e) {
+            <caret>n = -1;
+        }
+        int y = 4;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/before2.java
new file mode 100644
index 0000000..6e3ab7e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/before2.java
@@ -0,0 +1,17 @@
+// "Defer assignment to 'n' using temp variable" "true"
+import java.io.*;
+
+class a {
+    void f(InputStream in) {
+        final int n;
+        if (in==null) {
+            n= 2;
+            <caret>n= 2;
+        }
+        else {
+            n=4;
+        }
+        int p = 6;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/before3.java
new file mode 100644
index 0000000..d87af37
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/before3.java
@@ -0,0 +1,20 @@
+// "Defer assignment to 'n' using temp variable" "true"
+import java.io.*;
+
+class a {
+    void f(InputStream in) {
+        final int n;
+        if (in==null) {
+            n= 2;
+            <caret>n= 2;
+            int h = n;
+        }
+        else {
+            n=4;
+        }
+        f(n);
+        int p = n;
+    }
+    void f(int i) {}
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/before4.java
new file mode 100644
index 0000000..e297aec
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/before4.java
@@ -0,0 +1,20 @@
+// "Defer assignment to 'n' using temp variable" "true"
+import java.io.*;
+
+class a {
+    final int n;
+    a(InputStream in) {
+        if (in==null) {
+            n= 2;
+            <caret>n= 2;
+            int h = n;
+        }
+        else {
+            n=4;
+        }
+        f(n);
+        int p = n;
+    }
+    void f(int i) {}
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/before5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/before5.java
new file mode 100644
index 0000000..98d8e44
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/before5.java
@@ -0,0 +1,12 @@
+// "Defer assignment to 'i' using temp variable" "true"
+import java.io.*;
+
+class a {
+    void f(int k) {
+        final int i;
+        i = 4;
+        <caret>i = 4;
+        f(i);
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/before6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/before6.java
new file mode 100644
index 0000000..a73d1a4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/before6.java
@@ -0,0 +1,10 @@
+// "Defer assignment to 'n' using temp variable" "true"
+import java.io.*;
+
+class a {
+    final int n;
+    {
+        n=3;
+        <caret>n=3;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/before7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/before7.java
new file mode 100644
index 0000000..ca50205
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/before7.java
@@ -0,0 +1,10 @@
+// "Defer assignment to 'n' using temp variable" "true"
+import java.io.*;
+
+class a {
+    final int n;
+    a(int n) {
+        this.n=n;
+        <caret>this.n=n;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/before8.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/before8.java
new file mode 100644
index 0000000..2956634
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deferFinalAssignment/before8.java
@@ -0,0 +1,16 @@
+// "Defer assignment to 'n' using temp variable" "true"
+import java.io.*;
+
+class a {
+    void f(InputStream in) {
+        final int n;
+        try {
+            n = in.read();
+        } catch (IOException e) {
+            <caret>n = -1;
+            f(in);
+        }
+
+        int y = n;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/after1.java
new file mode 100644
index 0000000..f37bae2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/after1.java
@@ -0,0 +1,9 @@
+// "Generate delegated method with default parameter value" "true"
+class Test {
+    void foo() {
+      foo(<caret>);
+  }
+
+    void foo(int ii){
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/afterAbstractMethod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/afterAbstractMethod.java
new file mode 100644
index 0000000..0ee8f0b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/afterAbstractMethod.java
@@ -0,0 +1,8 @@
+// "Generate delegated method with default parameter value" "true"
+abstract class Test {
+    int foo(boolean... args) {
+      return foo(<caret>, args);
+  }
+
+    abstract int foo(int ii, boolean... args);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/afterCommentsInBody.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/afterCommentsInBody.java
new file mode 100644
index 0000000..a904476
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/afterCommentsInBody.java
@@ -0,0 +1,13 @@
+// "Generate delegated method with default parameter value" "true"
+class Test {
+    int foo() {
+      return foo();
+  }
+
+    int foo(int ii){
+    //comment1
+    System.out.println("");
+    //comment2
+    return 1;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/afterConstructor.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/afterConstructor.java
new file mode 100644
index 0000000..2ba4de2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/afterConstructor.java
@@ -0,0 +1,8 @@
+// "Generate delegated method with default parameter value" "true"
+class Test {
+    Test() {
+      this(<caret>);
+  }
+
+    Test(int ii){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/afterJavadoc.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/afterJavadoc.java
new file mode 100644
index 0000000..8637aaf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/afterJavadoc.java
@@ -0,0 +1,14 @@
+// "Generate delegated method with default parameter value" "true"
+class Test {
+    /**  
+   */
+  void foo() {
+      foo();
+  }
+
+    /**
+   * @param i
+   */
+  void foo(int ii){
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/afterReturnValue.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/afterReturnValue.java
new file mode 100644
index 0000000..39c8186
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/afterReturnValue.java
@@ -0,0 +1,10 @@
+// "Generate delegated method with default parameter value" "true"
+class Test {
+    int foo() {
+      return foo(<caret>);
+  }
+
+    int foo(int ii){
+    return 1;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/afterTypeParams.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/afterTypeParams.java
new file mode 100644
index 0000000..76d6ebe
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/afterTypeParams.java
@@ -0,0 +1,10 @@
+// "Generate delegated method with default parameter value" "true"
+class Test {
+    <T> int foo(boolean... args) {
+      return foo(<caret>, args);
+  }
+
+    <T> int foo(T ii, boolean... args){
+    return 1;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/afterVarargs.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/afterVarargs.java
new file mode 100644
index 0000000..f164579
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/afterVarargs.java
@@ -0,0 +1,10 @@
+// "Generate delegated method with default parameter value" "true"
+class Test {
+    int foo(boolean... args) {
+      return foo(<caret>, args);
+  }
+
+    int foo(int ii, boolean... args){
+    return 1;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/before1.java
new file mode 100644
index 0000000..22b7760
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/before1.java
@@ -0,0 +1,5 @@
+// "Generate delegated method with default parameter value" "true"
+class Test {
+  void foo(int i<caret>i){
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/beforeAbstractMethod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/beforeAbstractMethod.java
new file mode 100644
index 0000000..e298bc7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/beforeAbstractMethod.java
@@ -0,0 +1,4 @@
+// "Generate delegated method with default parameter value" "true"
+abstract class Test {
+  abstract int foo(int i<caret>i, boolean... args);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/beforeCommentsInBody.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/beforeCommentsInBody.java
new file mode 100644
index 0000000..bdd6fc8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/beforeCommentsInBody.java
@@ -0,0 +1,9 @@
+// "Generate delegated method with default parameter value" "true"
+class Test {
+  int foo(int i<caret>i){
+    //comment1
+    System.out.println("");
+    //comment2
+    return 1;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/beforeConstructor.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/beforeConstructor.java
new file mode 100644
index 0000000..0d75c39
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/beforeConstructor.java
@@ -0,0 +1,4 @@
+// "Generate delegated method with default parameter value" "true"
+class Test {
+  Test(int i<caret>i){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/beforeExistinMethod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/beforeExistinMethod.java
new file mode 100644
index 0000000..0d5ff1b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/beforeExistinMethod.java
@@ -0,0 +1,6 @@
+// "Generate delegated method with default parameter value" "false"
+class Test {
+  void foo(){}
+  void foo(int i<caret>i){
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/beforeInterface.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/beforeInterface.java
new file mode 100644
index 0000000..a18fdba
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/beforeInterface.java
@@ -0,0 +1,4 @@
+// "Generate delegated method with default parameter value" "false"
+interface Test {
+  void foo(int i<caret>i);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/beforeJavadoc.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/beforeJavadoc.java
new file mode 100644
index 0000000..76acc03
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/beforeJavadoc.java
@@ -0,0 +1,8 @@
+// "Generate delegated method with default parameter value" "true"
+class Test {
+  /**
+   * @param i
+   */
+  void foo(int i<caret>i){
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/beforeReturnValue.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/beforeReturnValue.java
new file mode 100644
index 0000000..f77d174
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/beforeReturnValue.java
@@ -0,0 +1,6 @@
+// "Generate delegated method with default parameter value" "true"
+class Test {
+  int foo(int i<caret>i){
+    return 1;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/beforeTypeParams.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/beforeTypeParams.java
new file mode 100644
index 0000000..19e77d4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/beforeTypeParams.java
@@ -0,0 +1,6 @@
+// "Generate delegated method with default parameter value" "true"
+class Test {
+  <T> int foo(T i<caret>i, boolean... args){
+    return 1;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/beforeVarargs.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/beforeVarargs.java
new file mode 100644
index 0000000..865e86d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/delegateWithDefaultValue/beforeVarargs.java
@@ -0,0 +1,6 @@
+// "Generate delegated method with default parameter value" "true"
+class Test {
+  int foo(int i<caret>i, boolean... args){
+    return 1;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteCatch/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteCatch/after1.java
new file mode 100644
index 0000000..95c406f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteCatch/after1.java
@@ -0,0 +1,10 @@
+// "Delete catch for 'java.io.IOException'" "true"
+import java.io.*;
+
+class a {
+ void f(int i) {
+     int p = 0;<caret>
+
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteCatch/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteCatch/after2.java
new file mode 100644
index 0000000..44049a6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteCatch/after2.java
@@ -0,0 +1,13 @@
+// "Delete catch for 'java.io.IOException'" "true"
+import java.io.*;
+
+class a {
+ void f(int i) {
+     try {
+         int p = 0;
+     }<caret> catch (Exception e)  {
+     }
+
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteCatch/after4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteCatch/after4.java
new file mode 100644
index 0000000..bd371ac
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteCatch/after4.java
@@ -0,0 +1,13 @@
+// "Delete catch for 'java.io.IOException'" "true"
+import java.io.*;
+
+class c {
+  void f() {
+      int id = 0;
+      try {
+
+      } catch (Exception e) {
+
+      }<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteCatch/after5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteCatch/after5.java
new file mode 100644
index 0000000..77922f0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteCatch/after5.java
@@ -0,0 +1,13 @@
+// "Delete catch for 'java.io.IOException'" "true"
+import java.io.*;
+
+class a {
+ void f(int i) {
+     // comm1
+     int p = 0;
+
+     // comm2
+
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteCatch/after6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteCatch/after6.java
new file mode 100644
index 0000000..fd5f0ca
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteCatch/after6.java
@@ -0,0 +1,11 @@
+// "Delete catch for 'java.io.IOException'" "true"
+import java.io.*;
+
+class a {
+    void f(boolean f) {
+        if (f) {
+            System.out.println();
+            System.out.println();
+        }
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteCatch/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteCatch/before1.java
new file mode 100644
index 0000000..bf4f21f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteCatch/before1.java
@@ -0,0 +1,14 @@
+// "Delete catch for 'java.io.IOException'" "true"
+import java.io.*;
+
+class a {
+ void f(int i) {
+     try {
+         int p = 0;
+     }
+     catch (<caret>IOException e)  {
+     }
+
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteCatch/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteCatch/before2.java
new file mode 100644
index 0000000..cece8ee
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteCatch/before2.java
@@ -0,0 +1,16 @@
+// "Delete catch for 'java.io.IOException'" "true"
+import java.io.*;
+
+class a {
+ void f(int i) {
+     try {
+         int p = 0;
+     }
+     catch (<caret>IOException e)  {
+     }
+     catch (Exception e)  {
+     }
+
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteCatch/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteCatch/before3.java
new file mode 100644
index 0000000..b618648
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteCatch/before3.java
@@ -0,0 +1,17 @@
+// "Delete catch for 'java.io.IOException'" "false"
+import java.io.*;
+
+class a {
+ void f(int i) {
+     try {
+         int p = 0;
+         throw new IOException();
+     }
+     catch (<caret>IOException e)  {
+     }
+     catch (Exception e)  {
+     }
+
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteCatch/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteCatch/before4.java
new file mode 100644
index 0000000..95da9ab
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteCatch/before4.java
@@ -0,0 +1,18 @@
+// "Delete catch for 'java.io.IOException'" "true"
+import java.io.*;
+
+class c {
+  void f() {
+    try {
+      int id = 0;
+      try {
+
+      } catch (Exception e) {
+
+      }
+    }
+    catch (<caret>IOException e) {
+
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteCatch/before5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteCatch/before5.java
new file mode 100644
index 0000000..8966787
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteCatch/before5.java
@@ -0,0 +1,18 @@
+// "Delete catch for 'java.io.IOException'" "true"
+import java.io.*;
+
+class a {
+ void f(int i) {
+     try {
+         // comm1
+         int p = 0;
+
+         // comm2
+
+     }
+     catch (<caret>IOException e)  {
+     }
+
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteCatch/before6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteCatch/before6.java
new file mode 100644
index 0000000..8b954f9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteCatch/before6.java
@@ -0,0 +1,13 @@
+// "Delete catch for 'java.io.IOException'" "true"
+import java.io.*;
+
+class a {
+    void f(boolean f) {
+        if (f)
+            try {
+                System.out.println();
+                System.out.println();
+            } catch (<caret>IOException e) {
+            }
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteMultiCatch/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteMultiCatch/after1.java
new file mode 100644
index 0000000..390205b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteMultiCatch/after1.java
@@ -0,0 +1,12 @@
+// "Delete catch for 'java.io.IOException'" "true"
+import java.io.*;
+
+class C {
+  void m() {
+    try {
+      int p = 0;
+    }
+    catch (/*somethihg*/ RuntimeException e) {
+    }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteMultiCatch/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteMultiCatch/after2.java
new file mode 100644
index 0000000..6cd28d3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteMultiCatch/after2.java
@@ -0,0 +1,12 @@
+// "Delete catch for 'java.io.FileNotFoundException'" "true"
+import java.io.*;
+
+class C {
+  void m() {
+    try {
+      int p = 0;
+    }
+    catch (EOFException /*somethihg*/ e) {
+    }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteMultiCatch/after3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteMultiCatch/after3.java
new file mode 100644
index 0000000..576c49c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteMultiCatch/after3.java
@@ -0,0 +1,12 @@
+// "Delete catch for 'java.io.FileNotFoundException'" "true"
+import java.io.*;
+
+class C {
+  void m() {
+    try {
+      int p = 0;
+    }
+    catch (EOFException | RuntimeException e) {
+    }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteMultiCatch/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteMultiCatch/before1.java
new file mode 100644
index 0000000..fb14ae4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteMultiCatch/before1.java
@@ -0,0 +1,12 @@
+// "Delete catch for 'java.io.IOException'" "true"
+import java.io.*;
+
+class C {
+  void m() {
+    try {
+      int p = 0;
+    }
+    catch (<caret>IOException | /*somethihg*/ RuntimeException e) {
+    }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteMultiCatch/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteMultiCatch/before2.java
new file mode 100644
index 0000000..bc6bf50
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteMultiCatch/before2.java
@@ -0,0 +1,12 @@
+// "Delete catch for 'java.io.FileNotFoundException'" "true"
+import java.io.*;
+
+class C {
+  void m() {
+    try {
+      int p = 0;
+    }
+    catch (EOFException | <caret>FileNotFoundException /*somethihg*/ e) {
+    }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteMultiCatch/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteMultiCatch/before3.java
new file mode 100644
index 0000000..3bfbe4c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteMultiCatch/before3.java
@@ -0,0 +1,12 @@
+// "Delete catch for 'java.io.FileNotFoundException'" "true"
+import java.io.*;
+
+class C {
+  void m() {
+    try {
+      int p = 0;
+    }
+    catch (EOFException | <caret>FileNotFoundException | RuntimeException e) {
+    }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/emptyIntention/LowPriority.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/emptyIntention/LowPriority.java
new file mode 100644
index 0000000..a696e6e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/emptyIntention/LowPriority.java
@@ -0,0 +1,6 @@
+class Test {
+  void method() {
+    final String i = "";
+    i<caret> = "";
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/emptyIntention/X.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/emptyIntention/X.java
new file mode 100644
index 0000000..0f6f474
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/emptyIntention/X.java
@@ -0,0 +1,3 @@
+class X {
+  String s = "ab<caret>";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/enableOptimizeImportsOnTheFly/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/enableOptimizeImportsOnTheFly/before1.java
new file mode 100644
index 0000000..315d525
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/enableOptimizeImportsOnTheFly/before1.java
@@ -0,0 +1,4 @@
+// "Enable 'Settings|Code Style|Imports|Optimize imports on the fly'" "true"
+import java.lang.String<caret>;
+
+class c {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/encapsulateField/beforeFinal.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/encapsulateField/beforeFinal.java
new file mode 100644
index 0000000..e082b01
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/encapsulateField/beforeFinal.java
@@ -0,0 +1,13 @@
+// "Encapsulate field" "false"
+
+class A {
+  public final boolean m_bool;
+}
+
+public class B {
+  void method() {
+    A a = new A();
+
+    a.m_bo<caret>ol = true;
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/encapsulateField/beforePrivate.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/encapsulateField/beforePrivate.java
new file mode 100644
index 0000000..061d152
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/encapsulateField/beforePrivate.java
@@ -0,0 +1,13 @@
+// "Encapsulate field" "false"
+
+class A {
+  private boolean m_bool;
+}
+
+public class B {
+  void method() {
+    A a = new A();
+
+    a.m_bo<caret>ol = true;
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/encapsulateField/beforeThisClass.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/encapsulateField/beforeThisClass.java
new file mode 100644
index 0000000..4721b75
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/encapsulateField/beforeThisClass.java
@@ -0,0 +1,9 @@
+// "Encapsulate field" "false"
+
+class A {
+  public final boolean m_bool;
+
+  void method() {
+    m_bo<caret>ol = true;
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/encapsulateField/beforeThisClassQualified.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/encapsulateField/beforeThisClassQualified.java
new file mode 100644
index 0000000..a4aa102c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/encapsulateField/beforeThisClassQualified.java
@@ -0,0 +1,9 @@
+// "Encapsulate field" "false"
+
+class A {
+  public final boolean m_bool;
+
+  void method() {
+    this.m_bo<caret>ol = true;
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/expandStaticImport/afterMultipleViaOnDemand.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/expandStaticImport/afterMultipleViaOnDemand.java
new file mode 100644
index 0000000..12a62b4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/expandStaticImport/afterMultipleViaOnDemand.java
@@ -0,0 +1,9 @@
+// "Expand static import to Arrays.sort" "true"
+import java.util.Arrays;
+
+class Test {
+    public void sendMessage(String... destinationAddressNames) {
+        Arrays.sort(destinationAddressNames);
+        Arrays.asList(destinationAddressNames)
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/expandStaticImport/afterSingle.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/expandStaticImport/afterSingle.java
new file mode 100644
index 0000000..729b346
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/expandStaticImport/afterSingle.java
@@ -0,0 +1,8 @@
+// "Expand static import to Arrays.sort" "true"
+import java.util.Arrays;
+
+class Test {
+    public void sendMessage(String... destinationAddressNames) {
+        Arrays.sort(destinationAddressNames);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/expandStaticImport/afterSingleViaOnDemand.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/expandStaticImport/afterSingleViaOnDemand.java
new file mode 100644
index 0000000..729b346
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/expandStaticImport/afterSingleViaOnDemand.java
@@ -0,0 +1,8 @@
+// "Expand static import to Arrays.sort" "true"
+import java.util.Arrays;
+
+class Test {
+    public void sendMessage(String... destinationAddressNames) {
+        Arrays.sort(destinationAddressNames);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/expandStaticImport/beforeMultipleViaOnDemand.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/expandStaticImport/beforeMultipleViaOnDemand.java
new file mode 100644
index 0000000..6d18668
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/expandStaticImport/beforeMultipleViaOnDemand.java
@@ -0,0 +1,9 @@
+// "Expand static import to Arrays.sort" "true"
+import static java.util.Arrays.*;
+
+class Test {
+    public void sendMessage(String... destinationAddressNames) {
+        s<caret>ort(destinationAddressNames);
+        asList(destinationAddressNames)
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/expandStaticImport/beforeSingle.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/expandStaticImport/beforeSingle.java
new file mode 100644
index 0000000..22e3423
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/expandStaticImport/beforeSingle.java
@@ -0,0 +1,8 @@
+// "Expand static import to Arrays.sort" "true"
+import static java.util.Arrays.sort;
+
+class Test {
+    public void sendMessage(String... destinationAddressNames) {
+        s<caret>ort(destinationAddressNames);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/expandStaticImport/beforeSingleViaOnDemand.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/expandStaticImport/beforeSingleViaOnDemand.java
new file mode 100644
index 0000000..fc52442
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/expandStaticImport/beforeSingleViaOnDemand.java
@@ -0,0 +1,8 @@
+// "Expand static import to Arrays.sort" "true"
+import static java.util.Arrays.*;
+
+class Test {
+    public void sendMessage(String... destinationAddressNames) {
+        s<caret>ort(destinationAddressNames);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2diamond/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2diamond/after1.java
new file mode 100644
index 0000000..a2577bb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2diamond/after1.java
@@ -0,0 +1,6 @@
+// "Replace with <>" "true"
+public class Test {
+  F<String> f = new F<>();
+}
+
+class F<T> {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2diamond/after5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2diamond/after5.java
new file mode 100644
index 0000000..dcc744c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2diamond/after5.java
@@ -0,0 +1,16 @@
+// "Replace with <>" "true"
+class Test {
+
+    void test() {
+        class Foo<X extends Number> {
+            Foo() {}
+            Foo(X x) {}
+        }
+        Foo<Number> f1 = new Foo<Number>(1);
+        Foo<?> f2 = new Foo<>();
+        Foo<?> f3 = new Foo<Integer>();
+        Foo<Number> f4 = new Foo<Number>(1) {};
+        Foo<?> f5 = new Foo<Number>() {};
+        Foo<?> f6 = new Foo<Integer>() {};
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2diamond/after6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2diamond/after6.java
new file mode 100644
index 0000000..3f9bf24
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2diamond/after6.java
@@ -0,0 +1,16 @@
+// "Replace with <>" "true"
+class Test {
+
+    void test() {
+        class Foo<X extends Number> {
+            Foo() {}
+            Foo(X x) {}
+        }
+        Foo<Number> f1 = new Foo<Number>(1);
+        Foo<?> f2 = new Foo<Number>();
+        Foo<?> f3 = new Foo<>();
+        Foo<Number> f4 = new Foo<Number>(1) {};
+        Foo<?> f5 = new Foo<Number>() {};
+        Foo<?> f6 = new Foo<Integer>() {};
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2diamond/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2diamond/before1.java
new file mode 100644
index 0000000..d3bd2c2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2diamond/before1.java
@@ -0,0 +1,6 @@
+// "Replace with <>" "true"
+public class Test {
+  F<String> f = new F<Str<caret>ing>();
+}
+
+class F<T> {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2diamond/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2diamond/before2.java
new file mode 100644
index 0000000..eb4a2cf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2diamond/before2.java
@@ -0,0 +1,7 @@
+// "Replace with <>" "false"
+public class Test {
+  F<F<String>> f = new FF<Str<caret>ing>();
+}
+
+class FF<X> extends F<X>{}
+class F<T> {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2diamond/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2diamond/before3.java
new file mode 100644
index 0000000..8a08536
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2diamond/before3.java
@@ -0,0 +1,11 @@
+// "Replace with <>" "false"
+public class Test {
+  void bar() {
+    foo(new FF<Str<caret>ing>());
+  }
+
+  void foo(F<F<String>> p) {}
+}
+
+class FF<X> extends F<X>{}
+class F<T> {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2diamond/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2diamond/before4.java
new file mode 100644
index 0000000..35cf273
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2diamond/before4.java
@@ -0,0 +1,16 @@
+// "Replace with <>" "false"
+class Test {
+
+    void test() {
+        class Foo<X extends Number> {
+            Foo() {}
+            Foo(X x) {}
+        }
+        Foo<Number> f1 = new Foo<Nu<caret>mber>(1);
+        Foo<?> f2 = new Foo<Number>();
+        Foo<?> f3 = new Foo<Integer>();
+        Foo<Number> f4 = new Foo<Number>(1) {};
+        Foo<?> f5 = new Foo<Number>() {};
+        Foo<?> f6 = new Foo<Integer>() {};
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2diamond/before5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2diamond/before5.java
new file mode 100644
index 0000000..6f8c506
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2diamond/before5.java
@@ -0,0 +1,16 @@
+// "Replace with <>" "true"
+class Test {
+
+    void test() {
+        class Foo<X extends Number> {
+            Foo() {}
+            Foo(X x) {}
+        }
+        Foo<Number> f1 = new Foo<Number>(1);
+        Foo<?> f2 = new Foo<Num<caret>ber>();
+        Foo<?> f3 = new Foo<Integer>();
+        Foo<Number> f4 = new Foo<Number>(1) {};
+        Foo<?> f5 = new Foo<Number>() {};
+        Foo<?> f6 = new Foo<Integer>() {};
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2diamond/before6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2diamond/before6.java
new file mode 100644
index 0000000..48666f4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2diamond/before6.java
@@ -0,0 +1,16 @@
+// "Replace with <>" "true"
+class Test {
+
+    void test() {
+        class Foo<X extends Number> {
+            Foo() {}
+            Foo(X x) {}
+        }
+        Foo<Number> f1 = new Foo<Number>(1);
+        Foo<?> f2 = new Foo<Number>();
+        Foo<?> f3 = new Foo<Inte<caret>ger>();
+        Foo<Number> f4 = new Foo<Number>(1) {};
+        Foo<?> f5 = new Foo<Number>() {};
+        Foo<?> f6 = new Foo<Integer>() {};
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2diamond/before7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2diamond/before7.java
new file mode 100644
index 0000000..1a0c0d4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2diamond/before7.java
@@ -0,0 +1,16 @@
+// "Replace with <>" "false"
+class Test {
+
+    void test() {
+        class Foo<X extends Number> {
+            Foo() {}
+            Foo(X x) {}
+        }
+        Foo<Number> f1 = new Foo<Number>(1);
+        Foo<?> f2 = new Foo<Number>();
+        Foo<?> f3 = new Foo<Integer>();
+        Foo<Number> f4 = new Foo<Nu<caret>mber>(1) {};
+        Foo<?> f5 = new Foo<Number>() {};
+        Foo<?> f6 = new Foo<Integer>() {};
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2diamond/before8.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2diamond/before8.java
new file mode 100644
index 0000000..ec6b601
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2diamond/before8.java
@@ -0,0 +1,16 @@
+// "Replace with <>" "false"
+class Test {
+
+    void test() {
+        class Foo<X extends Number> {
+            Foo() {}
+            Foo(X x) {}
+        }
+        Foo<Number> f1 = new Foo<Number>(1);
+        Foo<?> f2 = new Foo<Number>();
+        Foo<?> f3 = new Foo<Integer>();
+        Foo<Number> f4 = new Foo<Number>(1) {};
+        Foo<?> f5 = new Foo<Numb<caret>er>() {};
+        Foo<?> f6 = new Foo<Integer>() {};
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2diamond/before9.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2diamond/before9.java
new file mode 100644
index 0000000..48bff64
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2diamond/before9.java
@@ -0,0 +1,16 @@
+// "Replace with <>" "false"
+class Test {
+
+    void test() {
+        class Foo<X extends Number> {
+            Foo() {}
+            Foo(X x) {}
+        }
+        Foo<Number> f1 = new Foo<Number>(1);
+        Foo<?> f2 = new Foo<Number>();
+        Foo<?> f3 = new Foo<Integer>();
+        Foo<Number> f4 = new Foo<Number>(1) {};
+        Foo<?> f5 = new Foo<Number>() {};
+        Foo<?> f6 = new Foo<In<caret>teger>() {};
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2diamond/beforeInAnonymousInner.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2diamond/beforeInAnonymousInner.java
new file mode 100644
index 0000000..8f40278
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2diamond/beforeInAnonymousInner.java
@@ -0,0 +1,7 @@
+// "Replace with <>" "false"
+class Test {
+    class DiamondTest<T> {
+        DiamondTest<String> s = new DiamondTest<St<caret>ring>(){
+        }; // anonymous inner class
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2diamond/beforeInAnonymousInner1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2diamond/beforeInAnonymousInner1.java
new file mode 100644
index 0000000..00b852d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2diamond/beforeInAnonymousInner1.java
@@ -0,0 +1,6 @@
+// "Replace with <>" "false"
+class Test<T> {
+    Test<String> s = new Test<St<caret>ring>(){
+    }; // anonymous inner class
+
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fixAll/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fixAll/after1.java
new file mode 100644
index 0000000..f90b3db
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fixAll/after1.java
@@ -0,0 +1,7 @@
+// "Fix all 'Constant conditions & exceptions' problems" "true"
+public class Test {
+  void foo() {
+    int k = 0;
+    int i = 0;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fixAll/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fixAll/after2.java
new file mode 100644
index 0000000..877810e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fixAll/after2.java
@@ -0,0 +1,12 @@
+// "Fix all 'Constant conditions & exceptions' problems" "true"
+public class Test {
+  void foo1() {
+    int k = 0;
+    int i = 0;
+  }
+
+  void foo2() {
+    int k = 0;
+    int i = 0;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fixAll/afterAssertFalse.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fixAll/afterAssertFalse.java
new file mode 100644
index 0000000..5aba2e1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fixAll/afterAssertFalse.java
@@ -0,0 +1,8 @@
+// "Fix all 'Constant conditions & exceptions' problems" "true"
+public class Test {
+  void foo2() {
+    int k = 0;
+    int i = 0;
+    assert false;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fixAll/afterAssertTrue.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fixAll/afterAssertTrue.java
new file mode 100644
index 0000000..b251f03
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fixAll/afterAssertTrue.java
@@ -0,0 +1,8 @@
+// "Fix all 'Constant conditions & exceptions' problems" "true"
+public class Test {
+  void foo2() {
+    int k = 0;
+    int i = 0;
+      System.out.println();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fixAll/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fixAll/before1.java
new file mode 100644
index 0000000..f4fb018
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fixAll/before1.java
@@ -0,0 +1,13 @@
+// "Fix all 'Constant conditions & exceptions' problems" "true"
+public class Test {
+  void foo() {
+    int k = 0;
+    int i = 0;
+    if (<caret>i == k) {}
+    if (i == k) {}
+    if (i == k) {}
+    if (i == k) {}
+    if (i == k) {}
+    if (i == k) {}
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fixAll/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fixAll/before2.java
new file mode 100644
index 0000000..f41c6b8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fixAll/before2.java
@@ -0,0 +1,24 @@
+// "Fix all 'Constant conditions & exceptions' problems" "true"
+public class Test {
+  void foo1() {
+    int k = 0;
+    int i = 0;
+    if (i == k) {}
+    if (i == k) {}
+    if (i == k) {}
+    if (i == k) {}
+    if (i == k) {}
+    if (i == k) {}
+  }
+
+  void foo2() {
+    int k = 0;
+    int i = 0;
+    if (<caret>i == k) {}
+    if (i == k) {}
+    if (i == k) {}
+    if (i == k) {}
+    if (i == k) {}
+    if (i == k) {}
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fixAll/beforeAssertFalse.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fixAll/beforeAssertFalse.java
new file mode 100644
index 0000000..26e29d3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fixAll/beforeAssertFalse.java
@@ -0,0 +1,8 @@
+// "Fix all 'Constant conditions & exceptions' problems" "true"
+public class Test {
+  void foo2() {
+    int k = 0;
+    int i = 0;
+    assert <caret>i != k;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fixAll/beforeAssertTrue.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fixAll/beforeAssertTrue.java
new file mode 100644
index 0000000..204b086
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fixAll/beforeAssertTrue.java
@@ -0,0 +1,12 @@
+// "Fix all 'Constant conditions & exceptions' problems" "true"
+public class Test {
+  void foo2() {
+    int k = 0;
+    int i = 0;
+    assert <caret>i == k;
+    assert i == k;
+    if (i == k) {
+      System.out.println();
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fixAllAnnotator/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fixAllAnnotator/after1.java
new file mode 100644
index 0000000..1a0aba5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fixAllAnnotator/after1.java
@@ -0,0 +1,7 @@
+// "Fix all 'Annotator' problems" "true"
+public class Test {
+  void fooF() {
+  }
+  
+  void barF(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fixAllAnnotator/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fixAllAnnotator/before1.java
new file mode 100644
index 0000000..8006731
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fixAllAnnotator/before1.java
@@ -0,0 +1,7 @@
+// "Fix all 'Annotator' problems" "true"
+public class Test {
+  void f<caret>oo() {
+  }
+  
+  void bar(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/generalizeCatch/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/generalizeCatch/after1.java
new file mode 100644
index 0000000..6e613e8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/generalizeCatch/after1.java
@@ -0,0 +1,16 @@
+// "Generalize catch for 'java.io.FileNotFoundException' to 'java.io.IOException'" "true"
+import java.io.*;
+
+
+public class c1 {
+    void f() {
+        FileInputStream fis = null;
+        try {
+            fis = new FileInputStream("");
+            DataInputStream dis = new DataInputStream(fis);
+            <caret>dis.readInt();
+        } catch (IOException e) {
+            e.printStackTrace();  
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/generalizeCatch/after3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/generalizeCatch/after3.java
new file mode 100644
index 0000000..156c244
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/generalizeCatch/after3.java
@@ -0,0 +1,17 @@
+// "Generalize catch for 'C.E1' to 'C.E'" "true"
+class C {
+    static class E extends Exception { }
+    static class E1 extends E { }
+
+    static class MyResource implements AutoCloseable {
+        public MyResource() throws E1 { }
+        public void close() throws E { }
+    }
+
+    void f() {
+        try (MyResource r = new MyResource()) {
+        } catch (E e) {
+            e.printStackTrace();  
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/generalizeCatch/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/generalizeCatch/before1.java
new file mode 100644
index 0000000..e5da9d7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/generalizeCatch/before1.java
@@ -0,0 +1,16 @@
+// "Generalize catch for 'java.io.FileNotFoundException' to 'java.io.IOException'" "true"
+import java.io.*;
+
+
+public class c1 {
+    void f() {
+        FileInputStream fis = null;
+        try {
+            fis = new FileInputStream("");
+            DataInputStream dis = new DataInputStream(fis);
+            <caret>dis.readInt();
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();  
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/generalizeCatch/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/generalizeCatch/before2.java
new file mode 100644
index 0000000..9c36129
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/generalizeCatch/before2.java
@@ -0,0 +1,16 @@
+// "Generalize catch for 'java.io.FileNotFoundException' to 'java.lang.IllegalAccessException'" "false"
+import java.io.*;
+
+
+public class c1 {
+    void f() {
+        FileInputStream fis = null;
+        try {
+            fis = new FileInputStream("");
+            DataInputStream dis = new DataInputStream(fis);
+            <caret>throw new IllegalAccessException();
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();  
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/generalizeCatch/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/generalizeCatch/before3.java
new file mode 100644
index 0000000..b1f0395
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/generalizeCatch/before3.java
@@ -0,0 +1,17 @@
+// "Generalize catch for 'C.E1' to 'C.E'" "true"
+class C {
+    static class E extends Exception { }
+    static class E1 extends E { }
+
+    static class MyResource implements AutoCloseable {
+        public MyResource() throws E1 { }
+        public void close() throws E { }
+    }
+
+    void f() {
+        try (<caret>MyResource r = new MyResource()) {
+        } catch (E1 e) {
+            e.printStackTrace();  
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/genericCreateFromUsage/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/genericCreateFromUsage/after1.java
new file mode 100644
index 0000000..0b54419
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/genericCreateFromUsage/after1.java
@@ -0,0 +1,13 @@
+// "Create Method 'get'" "true"
+class W<T> {
+    public T get(T s) {
+        <selection>return null;  //To change body of created methods use File | Settings | File Templates.</selection>
+    }
+}
+
+class C {
+    void foo () {
+        W<String> w = new W<String>();
+        String s = w.get("");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/genericCreateFromUsage/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/genericCreateFromUsage/after2.java
new file mode 100644
index 0000000..1631612
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/genericCreateFromUsage/after2.java
@@ -0,0 +1,12 @@
+// "Create Method 'get'" "true"
+class Generic<T> {
+    public T get() {
+        <caret><selection>return null;  //To change body of created methods use File | Settings | File Templates.</selection>
+    }
+}
+
+class WWW {
+    <E> void foo (Generic<E> p) {
+        E e = p.get();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/genericCreateFromUsage/after3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/genericCreateFromUsage/after3.java
new file mode 100644
index 0000000..138b06a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/genericCreateFromUsage/after3.java
@@ -0,0 +1,16 @@
+// "Create Method 'foo'" "true"
+interface Int<T> {
+}
+
+class A1<T> implements Int<T> {
+    public void foo(Int<T> c) {
+        <caret><selection>//To change body of created methods use File | Settings | File Templates.</selection>
+    }
+}
+
+class B1 {
+    A1<String> a;
+    void foo (Int<String> c) {
+        a.foo(c);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/genericCreateFromUsage/after4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/genericCreateFromUsage/after4.java
new file mode 100644
index 0000000..dd4899a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/genericCreateFromUsage/after4.java
@@ -0,0 +1,20 @@
+// "Create Method 'foo'" "true"
+interface Comparable<T> {
+}
+
+class R implements Comparable<R> {
+
+}
+
+class A1<T> {
+    public T foo() {
+        <caret><selection>return null;  //To change body of created methods use File | Settings | File Templates.</selection>
+    }
+}
+
+class B1 {
+    A1<R> a;
+    void foo (Comparable<R> c) {
+        c = a.foo();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/genericCreateFromUsage/after5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/genericCreateFromUsage/after5.java
new file mode 100644
index 0000000..a5d70c5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/genericCreateFromUsage/after5.java
@@ -0,0 +1,16 @@
+// "Create Constructor" "true"
+public class Seq<T> {
+    public Seq() {}
+
+    public Seq(T x, Seq<T> xs) {
+        <selection>//To change body of created methods use File | Settings | File Templates.</selection>
+    }
+
+    static <T> Seq<T> nil () {
+        return new Seq<T> ();
+    }
+
+    static <V> Seq<V> cons (V x, Seq<V> xs) {
+        return new Seq<V> (x, xs);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/genericCreateFromUsage/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/genericCreateFromUsage/before1.java
new file mode 100644
index 0000000..97c2eb0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/genericCreateFromUsage/before1.java
@@ -0,0 +1,10 @@
+// "Create Method 'get'" "true"
+class W<T> {
+}
+
+class C {
+    void foo () {
+        W<String> w = new W<String>();
+        String s = w.<caret>get("");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/genericCreateFromUsage/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/genericCreateFromUsage/before2.java
new file mode 100644
index 0000000..0de5f53
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/genericCreateFromUsage/before2.java
@@ -0,0 +1,9 @@
+// "Create Method 'get'" "true"
+class Generic<T> {
+}
+
+class WWW {
+    <E> void foo (Generic<E> p) {
+        E e = p.g<caret>et();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/genericCreateFromUsage/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/genericCreateFromUsage/before3.java
new file mode 100644
index 0000000..fd89d8b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/genericCreateFromUsage/before3.java
@@ -0,0 +1,13 @@
+// "Create Method 'foo'" "true"
+interface Int<T> {
+}
+
+class A1<T> implements Int<T> {
+}
+
+class B1 {
+    A1<String> a;
+    void foo (Int<String> c) {
+        a.<caret>foo(c);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/genericCreateFromUsage/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/genericCreateFromUsage/before4.java
new file mode 100644
index 0000000..415e68d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/genericCreateFromUsage/before4.java
@@ -0,0 +1,17 @@
+// "Create Method 'foo'" "true"
+interface Comparable<T> {
+}
+
+class R implements Comparable<R> {
+
+}
+
+class A1<T> {
+}
+
+class B1 {
+    A1<R> a;
+    void foo (Comparable<R> c) {
+        c = a.<caret>foo();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/genericCreateFromUsage/before5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/genericCreateFromUsage/before5.java
new file mode 100644
index 0000000..287f5c7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/genericCreateFromUsage/before5.java
@@ -0,0 +1,12 @@
+// "Create Constructor" "true"
+public class Seq<T> {
+    public Seq() {}
+
+    static <T> Seq<T> nil () {
+        return new Seq<T> ();
+    }
+
+    static <V> Seq<V> cons (V x, Seq<V> xs) {
+        return new Seq<V> (x, xs)<caret>;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/generifyFile/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/generifyFile/before1.java
new file mode 100644
index 0000000..db14fe4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/generifyFile/before1.java
@@ -0,0 +1,13 @@
+// "Try to generify 'before1.java'" "true"
+
+class c<T> {
+  void put(T t ) {
+  }
+}
+
+class Use {
+  void f() {
+    c c = new c();
+    <caret>c.put("");
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/afterNonNlsCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/afterNonNlsCall.java
new file mode 100644
index 0000000..b4b7f54
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/afterNonNlsCall.java
@@ -0,0 +1,9 @@
+import org.jetbrains.annotations.NonNls;
+
+// "Annotate variable 'a' as @NonNls" "true"
+class Foo {
+  public boolean doTest() {
+    @NonNls String a;
+    return a.startsWith("te<caret>st");
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/afterNonNlsConstructor.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/afterNonNlsConstructor.java
new file mode 100644
index 0000000..c9b03be
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/afterNonNlsConstructor.java
@@ -0,0 +1,8 @@
+import org.jetbrains.annotations.NonNls;
+
+// "Annotate variable 'a' as @NonNls" "true"
+class Foo {
+  public void doTest() {
+    @NonNls String a = new String("test");
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/afterNonNlsConstructorAssignment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/afterNonNlsConstructorAssignment.java
new file mode 100644
index 0000000..bbfa238
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/afterNonNlsConstructorAssignment.java
@@ -0,0 +1,9 @@
+import org.jetbrains.annotations.NonNls;
+
+// "Annotate variable 'a' as @NonNls" "true"
+class Foo {
+  public void doTest() {
+    @NonNls String a;
+     a = new String("test");
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/afterNonNlsEquals.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/afterNonNlsEquals.java
new file mode 100644
index 0000000..6b35367
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/afterNonNlsEquals.java
@@ -0,0 +1,9 @@
+import org.jetbrains.annotations.NonNls;
+
+// "Annotate variable 'a' as @NonNls" "true"
+class Foo {
+  public boolean doTest() {
+    @NonNls String a;
+    return "test".equals(a)
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/afterNonNlsField.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/afterNonNlsField.java
new file mode 100644
index 0000000..1520d52
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/afterNonNlsField.java
@@ -0,0 +1,7 @@
+import org.jetbrains.annotations.NonNls;
+
+// "Annotate field 'field' as @NonNls" "true"
+class Foo {
+  @NonNls
+  String field = "text";
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/afterNonNlsParam.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/afterNonNlsParam.java
new file mode 100644
index 0000000..d0bcc06
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/afterNonNlsParam.java
@@ -0,0 +1,11 @@
+import org.jetbrains.annotations.NonNls;
+
+// "Annotate parameter 's' as @NonNls" "true"
+class Foo {
+  public void doTest() {
+    doStringTest("test");
+  }
+
+  private void doStringTest(@NonNls String s) {
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/afterNonNlsReturn.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/afterNonNlsReturn.java
new file mode 100644
index 0000000..8b25a27
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/afterNonNlsReturn.java
@@ -0,0 +1,9 @@
+import org.jetbrains.annotations.NonNls;
+
+// "Annotate method 'doTest' as @NonNls" "true"
+class Foo {
+  @NonNls
+  public String doTest() {
+    return "text";
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/afterNonNlsVariable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/afterNonNlsVariable.java
new file mode 100644
index 0000000..f424c02
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/afterNonNlsVariable.java
@@ -0,0 +1,8 @@
+import org.jetbrains.annotations.NonNls;
+
+// "Annotate variable 'a' as @NonNls" "true"
+class Foo {
+  public void doTest() {
+    @NonNls String a = "test";
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/afterSystemCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/afterSystemCall.java
new file mode 100644
index 0000000..263c3c1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/afterSystemCall.java
@@ -0,0 +1,6 @@
+// "Annotate field 'out' as @NonNls" "true"
+class Foo {
+  public void doTest() {
+    System.out.println("Test");
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/beforeNonNlsCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/beforeNonNlsCall.java
new file mode 100644
index 0000000..3742326
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/beforeNonNlsCall.java
@@ -0,0 +1,7 @@
+// "Annotate variable 'a' as @NonNls" "true"
+class Foo {
+  public boolean doTest() {
+    String a;
+    return a.startsWith("te<caret>st");
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/beforeNonNlsConstructor.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/beforeNonNlsConstructor.java
new file mode 100644
index 0000000..9c87a59
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/beforeNonNlsConstructor.java
@@ -0,0 +1,6 @@
+// "Annotate variable 'a' as @NonNls" "true"
+class Foo {
+  public void doTest() {
+    String a = new String("te<caret>st");
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/beforeNonNlsConstructorAssignment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/beforeNonNlsConstructorAssignment.java
new file mode 100644
index 0000000..27ddbcc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/beforeNonNlsConstructorAssignment.java
@@ -0,0 +1,7 @@
+// "Annotate variable 'a' as @NonNls" "true"
+class Foo {
+  public void doTest() {
+    String a;
+     a = new String("te<caret>st");
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/beforeNonNlsEquals.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/beforeNonNlsEquals.java
new file mode 100644
index 0000000..3672b4a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/beforeNonNlsEquals.java
@@ -0,0 +1,7 @@
+// "Annotate variable 'a' as @NonNls" "true"
+class Foo {
+  public boolean doTest() {
+    String a;
+    return "te<caret>st".equals(a)
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/beforeNonNlsField.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/beforeNonNlsField.java
new file mode 100644
index 0000000..04a00d6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/beforeNonNlsField.java
@@ -0,0 +1,4 @@
+// "Annotate field 'field' as @NonNls" "true"
+class Foo {
+  String field = "t<caret>ext";
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/beforeNonNlsParam.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/beforeNonNlsParam.java
new file mode 100644
index 0000000..8eb60a5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/beforeNonNlsParam.java
@@ -0,0 +1,9 @@
+// "Annotate parameter 's' as @NonNls" "true"
+class Foo {
+  public void doTest() {
+    doStringTest("te<caret>st");
+  }
+
+  private void doStringTest(String s) {
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/beforeNonNlsReturn.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/beforeNonNlsReturn.java
new file mode 100644
index 0000000..de41f93
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/beforeNonNlsReturn.java
@@ -0,0 +1,6 @@
+// "Annotate method 'doTest' as @NonNls" "true"
+class Foo {
+  public String doTest() {
+    return "t<caret>ext";
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/beforeNonNlsVariable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/beforeNonNlsVariable.java
new file mode 100644
index 0000000..630ed93
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/beforeNonNlsVariable.java
@@ -0,0 +1,6 @@
+// "Annotate variable 'a' as @NonNls" "true"
+class Foo {
+  public void doTest() {
+    String a = "t<caret>est";
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/beforeSystemCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/beforeSystemCall.java
new file mode 100644
index 0000000..ca8762a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18n/beforeSystemCall.java
@@ -0,0 +1,6 @@
+// "Annotate field 'out' as @NonNls" "true"
+class Foo {
+  public void doTest() {
+    System.out.println("Te<caret>st");
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18nize/afterCaretAtPlus.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18nize/afterCaretAtPlus.java
new file mode 100644
index 0000000..9e59cb1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18nize/afterCaretAtPlus.java
@@ -0,0 +1,5 @@
+class a {
+    void f() {
+      String s = i18nizedExpr;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18nize/afterLiteral.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18nize/afterLiteral.java
new file mode 100644
index 0000000..9e59cb1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18nize/afterLiteral.java
@@ -0,0 +1,5 @@
+class a {
+    void f() {
+      String s = i18nizedExpr;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18nize/afterLiteralRightSubSelection.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18nize/afterLiteralRightSubSelection.java
new file mode 100644
index 0000000..9ecbef4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18nize/afterLiteralRightSubSelection.java
@@ -0,0 +1,3 @@
+class s {
+        String i = "te" + i18nizedExpr;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18nize/afterLongConcat.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18nize/afterLongConcat.java
new file mode 100644
index 0000000..9e59cb1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18nize/afterLongConcat.java
@@ -0,0 +1,5 @@
+class a {
+    void f() {
+      String s = i18nizedExpr;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18nize/beforeCaretAtPlus.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18nize/beforeCaretAtPlus.java
new file mode 100644
index 0000000..f50723e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18nize/beforeCaretAtPlus.java
@@ -0,0 +1,5 @@
+class a {
+    void f() {
+      String s = "xxxxx" + this <caret>+ "yyyy";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18nize/beforeCharacterLiteral.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18nize/beforeCharacterLiteral.java
new file mode 100644
index 0000000..6310d24
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18nize/beforeCharacterLiteral.java
@@ -0,0 +1,5 @@
+class a {
+    void f() {
+      char c = '<caret>y';
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18nize/beforeLiteral.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18nize/beforeLiteral.java
new file mode 100644
index 0000000..e3f5ba0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18nize/beforeLiteral.java
@@ -0,0 +1,5 @@
+class a {
+    void f() {
+      String s = "<caret>xxxxx";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18nize/beforeLiteralRightSubSelection.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18nize/beforeLiteralRightSubSelection.java
new file mode 100644
index 0000000..05dc000
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18nize/beforeLiteralRightSubSelection.java
@@ -0,0 +1,3 @@
+class s {
+        String i = "te<caret><selection>st</selection>";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18nize/beforeLongConcat.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18nize/beforeLongConcat.java
new file mode 100644
index 0000000..e288c2b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18nize/beforeLongConcat.java
@@ -0,0 +1,5 @@
+class a {
+    void f() {
+      String s = <caret>"xxxxx" + this + "yyyy" + this;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18nize/beforeOutsideLiteral.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18nize/beforeOutsideLiteral.java
new file mode 100644
index 0000000..cd9e103
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/i18nize/beforeOutsideLiteral.java
@@ -0,0 +1,5 @@
+class a {
+    void f() {
+      <caret>String s = "xxxxx";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/implementAbstractFromNew/beforeImplementInterface.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/implementAbstractFromNew/beforeImplementInterface.java
new file mode 100644
index 0000000..9423d0e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/implementAbstractFromNew/beforeImplementInterface.java
@@ -0,0 +1,9 @@
+// "Implement Methods" "true"
+class c {
+ void foo() {
+   new I<String>()<caret>
+ }
+}
+interface I<T> {
+  foo(T t);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/implementAbstractFromNew/beforeImplementInterfaceIncomplete.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/implementAbstractFromNew/beforeImplementInterfaceIncomplete.java
new file mode 100644
index 0000000..6279236
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/implementAbstractFromNew/beforeImplementInterfaceIncomplete.java
@@ -0,0 +1,9 @@
+// "Implement Methods" "true"
+class c {
+ void foo() {
+   new I<String>(<caret>
+ }
+}
+interface I<T> {
+  foo(T t);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/implementAbstractFromNew/beforeImplementInterfaceIncompleteInavailable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/implementAbstractFromNew/beforeImplementInterfaceIncompleteInavailable.java
new file mode 100644
index 0000000..72c05f4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/implementAbstractFromNew/beforeImplementInterfaceIncompleteInavailable.java
@@ -0,0 +1,9 @@
+// "Implement Methods" "false"
+class c {
+ void foo() {
+   new I<String>(new String(<caret>
+ }
+}
+interface I<T> {
+  foo(T t);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/implementAbstractFromNew/beforeImplementsRunnable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/implementAbstractFromNew/beforeImplementsRunnable.java
new file mode 100644
index 0000000..15409ce
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/implementAbstractFromNew/beforeImplementsRunnable.java
@@ -0,0 +1,6 @@
+// "Implement Methods" "true"
+class c {
+ void foo() {
+   new Runnable()<caret>
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/initializeFinalFieldInConstructor/afterMultipleInvoke.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/initializeFinalFieldInConstructor/afterMultipleInvoke.java
new file mode 100644
index 0000000..899b5e6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/initializeFinalFieldInConstructor/afterMultipleInvoke.java
@@ -0,0 +1,12 @@
+// "Initialize in constructor" "true"
+class A {
+  private final int var;
+
+  private Main() {
+      var = <caret><selection>0</selection>;
+  }
+
+  private Main(int var) {
+      this.var = 0;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/initializeFinalFieldInConstructor/afterParamWithSameName.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/initializeFinalFieldInConstructor/afterParamWithSameName.java
new file mode 100644
index 0000000..b4672ad
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/initializeFinalFieldInConstructor/afterParamWithSameName.java
@@ -0,0 +1,8 @@
+// "Initialize in constructor" "true"
+class A {
+  private final int var;
+
+  private Main(int var) {
+      this.var = <caret><selection>0</selection>;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/initializeFinalFieldInConstructor/afterSimpleInvoke.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/initializeFinalFieldInConstructor/afterSimpleInvoke.java
new file mode 100644
index 0000000..b594c43
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/initializeFinalFieldInConstructor/afterSimpleInvoke.java
@@ -0,0 +1,8 @@
+// "Initialize in constructor" "true"
+class A {
+  private final int var;
+
+  private Main() {
+      var = <caret><selection>0</selection>;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/initializeFinalFieldInConstructor/beforeMultipleInvoke.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/initializeFinalFieldInConstructor/beforeMultipleInvoke.java
new file mode 100644
index 0000000..e53edb2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/initializeFinalFieldInConstructor/beforeMultipleInvoke.java
@@ -0,0 +1,10 @@
+// "Initialize in constructor" "true"
+class A {
+  private final int v<caret>ar;
+
+  private Main() {
+  }
+
+  private Main(int var) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/initializeFinalFieldInConstructor/beforeParamWithSameName.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/initializeFinalFieldInConstructor/beforeParamWithSameName.java
new file mode 100644
index 0000000..f90a87b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/initializeFinalFieldInConstructor/beforeParamWithSameName.java
@@ -0,0 +1,7 @@
+// "Initialize in constructor" "true"
+class A {
+  private final int v<caret>ar;
+
+  private Main(int var) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/initializeFinalFieldInConstructor/beforeSimpleInvoke.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/initializeFinalFieldInConstructor/beforeSimpleInvoke.java
new file mode 100644
index 0000000..a166f8c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/initializeFinalFieldInConstructor/beforeSimpleInvoke.java
@@ -0,0 +1,7 @@
+// "Initialize in constructor" "true"
+class A {
+  private final int v<caret>ar;
+
+  private Main() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/insertNew/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/insertNew/after1.java
new file mode 100644
index 0000000..4cbd15a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/insertNew/after1.java
@@ -0,0 +1,7 @@
+// "Insert new" "true"
+class a {
+ void f() {
+     <caret>new RuntimeException();
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/insertNew/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/insertNew/after2.java
new file mode 100644
index 0000000..5e1d6f4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/insertNew/after2.java
@@ -0,0 +1,7 @@
+// "Insert new" "true"
+class a {
+ void f() {
+     throw <caret>new RuntimeException();
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/insertNew/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/insertNew/before1.java
new file mode 100644
index 0000000..13e89102
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/insertNew/before1.java
@@ -0,0 +1,7 @@
+// "Insert new" "true"
+class a {
+ void f() {
+     <caret>RuntimeException();
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/insertNew/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/insertNew/before2.java
new file mode 100644
index 0000000..099a722
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/insertNew/before2.java
@@ -0,0 +1,7 @@
+// "Insert new" "true"
+class a {
+ void f() {
+     throw <caret>RuntimeException();
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/insertSuper/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/insertSuper/after1.java
new file mode 100644
index 0000000..2b64fa0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/insertSuper/after1.java
@@ -0,0 +1,14 @@
+// "Insert 'super();'" "true"
+import java.io.*;
+
+class c {
+ public c(int i) {
+ }
+}
+class a extends c {
+ a() {
+     super(<caret>);
+     int i = 9;
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/insertSuper/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/insertSuper/before1.java
new file mode 100644
index 0000000..43f90af
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/insertSuper/before1.java
@@ -0,0 +1,13 @@
+// "Insert 'super();'" "true"
+import java.io.*;
+
+class c {
+ public c(int i) {
+ }
+}
+class a extends c {
+ <caret>a() {
+     int i = 9;
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/introduceVariable/beforeAssignmentExpression.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/introduceVariable/beforeAssignmentExpression.java
new file mode 100644
index 0000000..35f7e09
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/introduceVariable/beforeAssignmentExpression.java
@@ -0,0 +1,9 @@
+// "Introduce local variable" "false"
+
+class a {
+  void a() {
+    int i;
+    i = Integer.par<caret>seInt("10");
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/introduceVariable/beforeInitialization.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/introduceVariable/beforeInitialization.java
new file mode 100644
index 0000000..9f5f594
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/introduceVariable/beforeInitialization.java
@@ -0,0 +1,8 @@
+// "Introduce local variable" "false"
+
+class a {
+  void a() {
+    int i = Integer.par<caret>seInt("10");
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/introduceVariable/beforeVoid.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/introduceVariable/beforeVoid.java
new file mode 100644
index 0000000..834f192
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/introduceVariable/beforeVoid.java
@@ -0,0 +1,9 @@
+// "Introduce local variable" "false"
+
+class a {
+  void a() {
+    a<caret>();
+  }
+
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/iterateOver/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/iterateOver/after1.java
new file mode 100644
index 0000000..a587322
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/iterateOver/after1.java
@@ -0,0 +1,11 @@
+import java.lang.annotation.Annotation;
+
+// "Iterate" "true"
+class Test {
+  void foo() {
+      for (Annotation annotation : getClass().getAnnotations()) {
+          
+      }
+
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/iterateOver/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/iterateOver/after2.java
new file mode 100644
index 0000000..a587322
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/iterateOver/after2.java
@@ -0,0 +1,11 @@
+import java.lang.annotation.Annotation;
+
+// "Iterate" "true"
+class Test {
+  void foo() {
+      for (Annotation annotation : getClass().getAnnotations()) {
+          
+      }
+
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/iterateOver/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/iterateOver/before1.java
new file mode 100644
index 0000000..d309549
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/iterateOver/before1.java
@@ -0,0 +1,6 @@
+// "Iterate" "true"
+class Test {
+  void foo() {
+    getClass().getAnnotatio<caret>ns()
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/iterateOver/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/iterateOver/before2.java
new file mode 100644
index 0000000..d0785fb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/iterateOver/before2.java
@@ -0,0 +1,6 @@
+// "Iterate" "true"
+class Test {
+  void foo() {
+    getClass().getAnnotations()<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/iterateOver/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/iterateOver/before3.java
new file mode 100644
index 0000000..b9ea90a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/iterateOver/before3.java
@@ -0,0 +1,6 @@
+// "Iterate" "false"
+class Test {
+  void foo() {
+    final Annotation[] annotations = getClass().getAnnotat<caret>ions();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/javadocTags/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/javadocTags/after1.java
new file mode 100644
index 0000000..d1517c0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/javadocTags/after1.java
@@ -0,0 +1,9 @@
+// "Add tag @throws java.lang.Exception" "true"
+class a {
+/**
+ * @throws Exception
+ */
+public void <caret>run() throws Exception {
+
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/javadocTags/after3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/javadocTags/after3.java
new file mode 100644
index 0000000..9fd637b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/javadocTags/after3.java
@@ -0,0 +1,11 @@
+// "Add tag @param for parameter 'a'" "true"
+class a {
+
+/**
+ * @param a
+ * @param b
+*/
+public void <caret>foo(int a, int b, in c){
+
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/javadocTags/after4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/javadocTags/after4.java
new file mode 100644
index 0000000..eeefcd3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/javadocTags/after4.java
@@ -0,0 +1,6 @@
+// "Add tag @param <T>" "true"
+/**
+ * @param <T>
+ */
+class <caret>a<T> {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/javadocTags/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/javadocTags/before1.java
new file mode 100644
index 0000000..2896875
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/javadocTags/before1.java
@@ -0,0 +1,8 @@
+// "Add tag @throws java.lang.Exception" "true"
+class a {
+/**
+*/
+public void <caret>run() throws Exception {
+
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/javadocTags/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/javadocTags/before2.java
new file mode 100644
index 0000000..0c0656f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/javadocTags/before2.java
@@ -0,0 +1,10 @@
+// "Add tag @throws java.langException" "false"
+class a {
+
+/**
+* @throws java.lang.Exception
+*/
+public void <caret>run() throws Exception{
+
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/javadocTags/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/javadocTags/before3.java
new file mode 100644
index 0000000..673b725
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/javadocTags/before3.java
@@ -0,0 +1,10 @@
+// "Add tag @param for parameter 'a'" "true"
+class a {
+
+/**
+ * @param b
+*/
+public void <caret>foo(int a, int b, in c){
+
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/javadocTags/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/javadocTags/before4.java
new file mode 100644
index 0000000..5e73234
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/javadocTags/before4.java
@@ -0,0 +1,5 @@
+// "Add tag @param <T>" "true"
+/**
+ */
+class <caret>a<T> {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/afterConstructorReceiverNonStaticInner.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/afterConstructorReceiverNonStaticInner.java
new file mode 100644
index 0000000..56cc62b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/afterConstructorReceiverNonStaticInner.java
@@ -0,0 +1,13 @@
+// "Replace lambda with method reference" "true"
+class NonStaticInner {
+  class Inner {
+    Inner() {}
+  }
+
+  interface I1 {
+    Inner m(NonStaticInner rec);
+  }
+  static {
+    I1 i1 = Inner::new;
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/afterConstructorReceiverStaticInner.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/afterConstructorReceiverStaticInner.java
new file mode 100644
index 0000000..beb01f1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/afterConstructorReceiverStaticInner.java
@@ -0,0 +1,17 @@
+// "Replace lambda with method reference" "true"
+class StaticInner {
+
+  static class Inner {
+    Inner(StaticInner outer) {}
+  }
+
+
+  interface I1 {
+    Inner m(StaticInner rec);
+  }
+
+
+  static {
+    I1 i1 = Inner::new;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/afterConstructorRef.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/afterConstructorRef.java
new file mode 100644
index 0000000..c33e1c4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/afterConstructorRef.java
@@ -0,0 +1,13 @@
+// "Replace lambda with method reference" "true"
+class MyTest2<X> {
+    MyTest2(X x) {
+    }
+
+    interface I<Z> {
+        MyTest2<Z> m(Z z);
+    }
+
+    public static void main(String[] args) {
+        I<String> s = MyTest2::new;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/afterConstructorRef1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/afterConstructorRef1.java
new file mode 100644
index 0000000..56129022
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/afterConstructorRef1.java
@@ -0,0 +1,33 @@
+// "Replace lambda with method reference" "true"
+class NonStaticInner3 {
+    class Foo {
+        Foo(Integer i) {}
+        Foo() {}
+    }
+
+    interface I1<X> {
+        X m(int i);
+    }
+
+    interface I2<X> {
+        X m();
+    }
+
+    interface I3<X> {
+        X m(NonStaticInner3 rec, int i);
+    }
+
+    interface I4<X> {
+        X m(NonStaticInner3 rec);
+    }
+
+    {
+        I1<Foo> b1 = Foo::new;
+        I2<Foo> b2 = () -> new Foo();
+    }
+
+    {
+        I3<Foo> b1 = (rec, i) -> rec.new Foo(i);
+        I4<Foo> b2 = (rec) -> rec.new Foo();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/afterConstructorRef2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/afterConstructorRef2.java
new file mode 100644
index 0000000..48061d0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/afterConstructorRef2.java
@@ -0,0 +1,33 @@
+// "Replace lambda with method reference" "true"
+class NonStaticInner3 {
+    class Foo {
+        Foo(Integer i) {}
+        Foo() {}
+    }
+
+    interface I1<X> {
+        X m(int i);
+    }
+
+    interface I2<X> {
+        X m();
+    }
+
+    interface I3<X> {
+        X m(NonStaticInner3 rec, int i);
+    }
+
+    interface I4<X> {
+        X m(NonStaticInner3 rec);
+    }
+
+    {
+        I1<Foo> b1 = (i) -> new Foo(i);
+        I2<Foo> b2 = Foo::new;
+    }
+
+    {
+        I3<Foo> b1 = (rec, i) -> rec.new Foo(i);
+        I4<Foo> b2 = (rec) -> rec.new Foo();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/afterConstructorRef3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/afterConstructorRef3.java
new file mode 100644
index 0000000..ae02fa4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/afterConstructorRef3.java
@@ -0,0 +1,33 @@
+// "Replace lambda with method reference" "true"
+class NonStaticInner3 {
+    class Foo {
+        Foo(Integer i) {}
+        Foo() {}
+    }
+
+    interface I1<X> {
+        X m(int i);
+    }
+
+    interface I2<X> {
+        X m();
+    }
+
+    interface I3<X> {
+        X m(NonStaticInner3 rec, int i);
+    }
+
+    interface I4<X> {
+        X m(NonStaticInner3 rec);
+    }
+
+    {
+        I1<Foo> b1 = (i) -> new Foo(i);
+        I2<Foo> b2 = () -> new Foo();
+    }
+
+    {
+        I3<Foo> b1 = Foo::new;
+        I4<Foo> b2 = (rec) -> rec.new Foo();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/afterConstructorRef4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/afterConstructorRef4.java
new file mode 100644
index 0000000..159685e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/afterConstructorRef4.java
@@ -0,0 +1,33 @@
+// "Replace lambda with method reference" "true"
+class NonStaticInner3 {
+    class Foo {
+        Foo(Integer i) {}
+        Foo() {}
+    }
+
+    interface I1<X> {
+        X m(int i);
+    }
+
+    interface I2<X> {
+        X m();
+    }
+
+    interface I3<X> {
+        X m(NonStaticInner3 rec, int i);
+    }
+
+    interface I4<X> {
+        X m(NonStaticInner3 rec);
+    }
+
+    {
+        I1<Foo> b1 = (i) -> new Foo(i);
+        I2<Foo> b2 = () -> new Foo();
+    }
+
+    {
+        I3<Foo> b1 = (rec, i) -> rec.new Foo(i);
+        I4<Foo> b2 = Foo::new;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/afterConstructorRef6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/afterConstructorRef6.java
new file mode 100644
index 0000000..8b55c0f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/afterConstructorRef6.java
@@ -0,0 +1,13 @@
+// "Replace lambda with method reference" "true"
+class NonStaticInner3 {
+    class Foo {
+    }
+
+    interface I1<X> {
+        X m();
+    }
+
+    {
+        I1<Foo> b2 = Foo::new;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/afterNoParams.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/afterNoParams.java
new file mode 100644
index 0000000..e3d8ea2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/afterNoParams.java
@@ -0,0 +1,9 @@
+// "Replace lambda with method reference" "true"
+class Example {
+  public void m() {
+  }
+
+  {
+    Runnable r = this::m;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/afterNoParamsStatic.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/afterNoParamsStatic.java
new file mode 100644
index 0000000..b9a25dc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/afterNoParamsStatic.java
@@ -0,0 +1,9 @@
+// "Replace lambda with method reference" "true"
+class Example {
+  public static void m() {
+  }
+
+  {
+    Runnable r = Example::m;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/afterReceiverType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/afterReceiverType.java
new file mode 100644
index 0000000..eb125f1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/afterReceiverType.java
@@ -0,0 +1,12 @@
+// "Replace lambda with method reference" "true"
+class Example {
+  interface I {
+    void foo(Example e);
+  }
+
+  void m() {}
+
+  {
+    I i = Example::m;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/afterSameParams.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/afterSameParams.java
new file mode 100644
index 0000000..69739e1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/afterSameParams.java
@@ -0,0 +1,12 @@
+// "Replace lambda with method reference" "true"
+class Example {
+  interface I {
+      void foo(int i);
+    }
+  
+    void m(int i) {}
+  
+    {
+      I i = this::m;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeAnonymous.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeAnonymous.java
new file mode 100644
index 0000000..168aec9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeAnonymous.java
@@ -0,0 +1,13 @@
+// "Replace lambda with method reference" "false"
+class NonStaticInner3 {
+    class Foo {
+    }
+
+    interface I1<X> {
+        X m();
+    }
+
+    {
+        I1<Foo> b2 = () -> <caret>new Foo(){};
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeConstructorReceiverNonStaticInner.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeConstructorReceiverNonStaticInner.java
new file mode 100644
index 0000000..70c2300
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeConstructorReceiverNonStaticInner.java
@@ -0,0 +1,13 @@
+// "Replace lambda with method reference" "true"
+class NonStaticInner {
+  class Inner {
+    Inner() {}
+  }
+
+  interface I1 {
+    Inner m(NonStaticInner rec);
+  }
+  static {
+    I1 i1 = (rec) -> r<caret>ec.new Inner();
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeConstructorReceiverStaticInner.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeConstructorReceiverStaticInner.java
new file mode 100644
index 0000000..e6d055c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeConstructorReceiverStaticInner.java
@@ -0,0 +1,17 @@
+// "Replace lambda with method reference" "true"
+class StaticInner {
+
+  static class Inner {
+    Inner(StaticInner outer) {}
+  }
+
+
+  interface I1 {
+    Inner m(StaticInner rec);
+  }
+
+
+  static {
+    I1 i1 = (rec) -> <caret>new Inner(rec);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeConstructorRef.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeConstructorRef.java
new file mode 100644
index 0000000..fbf4a44
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeConstructorRef.java
@@ -0,0 +1,13 @@
+// "Replace lambda with method reference" "true"
+class MyTest2<X> {
+    MyTest2(X x) {
+    }
+
+    interface I<Z> {
+        MyTest2<Z> m(Z z);
+    }
+
+    public static void main(String[] args) {
+        I<String> s = (z) -> new MyTe<caret>st2<String>(z);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeConstructorRef1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeConstructorRef1.java
new file mode 100644
index 0000000..788b762
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeConstructorRef1.java
@@ -0,0 +1,33 @@
+// "Replace lambda with method reference" "true"
+class NonStaticInner3 {
+    class Foo {
+        Foo(Integer i) {}
+        Foo() {}
+    }
+
+    interface I1<X> {
+        X m(int i);
+    }
+
+    interface I2<X> {
+        X m();
+    }
+
+    interface I3<X> {
+        X m(NonStaticInner3 rec, int i);
+    }
+
+    interface I4<X> {
+        X m(NonStaticInner3 rec);
+    }
+
+    {
+        I1<Foo> b1 = (i) -> <caret>new Foo(i);
+        I2<Foo> b2 = () -> new Foo();
+    }
+
+    {
+        I3<Foo> b1 = (rec, i) -> rec.new Foo(i);
+        I4<Foo> b2 = (rec) -> rec.new Foo();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeConstructorRef2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeConstructorRef2.java
new file mode 100644
index 0000000..5a7768e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeConstructorRef2.java
@@ -0,0 +1,33 @@
+// "Replace lambda with method reference" "true"
+class NonStaticInner3 {
+    class Foo {
+        Foo(Integer i) {}
+        Foo() {}
+    }
+
+    interface I1<X> {
+        X m(int i);
+    }
+
+    interface I2<X> {
+        X m();
+    }
+
+    interface I3<X> {
+        X m(NonStaticInner3 rec, int i);
+    }
+
+    interface I4<X> {
+        X m(NonStaticInner3 rec);
+    }
+
+    {
+        I1<Foo> b1 = (i) -> new Foo(i);
+        I2<Foo> b2 = () -> <caret>new Foo();
+    }
+
+    {
+        I3<Foo> b1 = (rec, i) -> rec.new Foo(i);
+        I4<Foo> b2 = (rec) -> rec.new Foo();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeConstructorRef3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeConstructorRef3.java
new file mode 100644
index 0000000..e1c181a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeConstructorRef3.java
@@ -0,0 +1,33 @@
+// "Replace lambda with method reference" "true"
+class NonStaticInner3 {
+    class Foo {
+        Foo(Integer i) {}
+        Foo() {}
+    }
+
+    interface I1<X> {
+        X m(int i);
+    }
+
+    interface I2<X> {
+        X m();
+    }
+
+    interface I3<X> {
+        X m(NonStaticInner3 rec, int i);
+    }
+
+    interface I4<X> {
+        X m(NonStaticInner3 rec);
+    }
+
+    {
+        I1<Foo> b1 = (i) -> new Foo(i);
+        I2<Foo> b2 = () -> new Foo();
+    }
+
+    {
+        I3<Foo> b1 = (rec, i) -> <caret>rec.new Foo(i);
+        I4<Foo> b2 = (rec) -> rec.new Foo();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeConstructorRef4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeConstructorRef4.java
new file mode 100644
index 0000000..2e61342
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeConstructorRef4.java
@@ -0,0 +1,33 @@
+// "Replace lambda with method reference" "true"
+class NonStaticInner3 {
+    class Foo {
+        Foo(Integer i) {}
+        Foo() {}
+    }
+
+    interface I1<X> {
+        X m(int i);
+    }
+
+    interface I2<X> {
+        X m();
+    }
+
+    interface I3<X> {
+        X m(NonStaticInner3 rec, int i);
+    }
+
+    interface I4<X> {
+        X m(NonStaticInner3 rec);
+    }
+
+    {
+        I1<Foo> b1 = (i) -> new Foo(i);
+        I2<Foo> b2 = () -> new Foo();
+    }
+
+    {
+        I3<Foo> b1 = (rec, i) -> rec.new Foo(i);
+        I4<Foo> b2 = (rec) -> <caret>rec.new Foo();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeConstructorRef5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeConstructorRef5.java
new file mode 100644
index 0000000..b142ba0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeConstructorRef5.java
@@ -0,0 +1,33 @@
+// "Replace lambda with method reference" "false"
+class NonStaticInner3 {
+    class Foo {
+        Foo(Integer i) {}
+        Foo() {}
+    }
+
+    interface I1<X> {
+        X m(int i);
+    }
+
+    interface I2<X> {
+        X m();
+    }
+
+    interface I3<X> {
+        X m(NonStaticInner3 rec, int i);
+    }
+
+    interface I4<X> {
+        X m(NonStaticInner3 rec);
+    }
+
+    {
+        I1<Foo> b1 = (i) -> new Foo(i);
+        I2<Foo> b2 = () -> new Foo();
+    }
+
+    {
+        I3<Foo> b1 = (rec, i) -> rec.new Foo(i);
+        I4<Foo> b2 = (rec) -> <caret>new Foo();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeConstructorRef6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeConstructorRef6.java
new file mode 100644
index 0000000..3b1bc8a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeConstructorRef6.java
@@ -0,0 +1,13 @@
+// "Replace lambda with method reference" "true"
+class NonStaticInner3 {
+    class Foo {
+    }
+
+    interface I1<X> {
+        X m();
+    }
+
+    {
+        I1<Foo> b2 = () -> <caret>new Foo();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeNoParams.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeNoParams.java
new file mode 100644
index 0000000..f06b9d9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeNoParams.java
@@ -0,0 +1,9 @@
+// "Replace lambda with method reference" "true"
+class Example {
+  public void m() {
+  }
+
+  {
+    Runnable r = () -> <caret>m();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeNoParamsStatic.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeNoParamsStatic.java
new file mode 100644
index 0000000..9014749
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeNoParamsStatic.java
@@ -0,0 +1,9 @@
+// "Replace lambda with method reference" "true"
+class Example {
+  public static void m() {
+  }
+
+  {
+    Runnable r = () -> <caret>m();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeReceiverType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeReceiverType.java
new file mode 100644
index 0000000..c6468d2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeReceiverType.java
@@ -0,0 +1,12 @@
+// "Replace lambda with method reference" "true"
+class Example {
+  interface I {
+    void foo(Example e);
+  }
+
+  void m() {}
+
+  {
+    I i = (e) -> e<caret>.m();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeReceiverTypeWrongQualifier.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeReceiverTypeWrongQualifier.java
new file mode 100644
index 0000000..fac26c1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeReceiverTypeWrongQualifier.java
@@ -0,0 +1,12 @@
+// "Replace lambda with method reference" "false"
+class Example {
+  interface I {
+    void foo(Example e);
+  }
+
+  void m() {}
+
+  {
+    I i = (e) -> <caret>.m();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeSameParams.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeSameParams.java
new file mode 100644
index 0000000..3744ce0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeSameParams.java
@@ -0,0 +1,12 @@
+// "Replace lambda with method reference" "true"
+class Example {
+  interface I {
+      void foo(int i);
+    }
+  
+    void m(int i) {}
+  
+    {
+      I i = (i1) -> <caret>m(i1);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeSameParamsModified.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeSameParamsModified.java
new file mode 100644
index 0000000..e6fc8a4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeSameParamsModified.java
@@ -0,0 +1,12 @@
+// "Replace lambda with method reference" "false"
+class Example {
+  interface I {
+      void foo(int i);
+    }
+  
+    void m(int i) {}
+  
+    {
+      I i = (i1) -> <caret>m(i1 + 1);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambdaCodeBlock2Expr/afterComparable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambdaCodeBlock2Expr/afterComparable.java
new file mode 100644
index 0000000..ea14626
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambdaCodeBlock2Expr/afterComparable.java
@@ -0,0 +1,6 @@
+// "Replace with one line expression" "true"
+class Test {
+  {
+    Comparable<String> c = (o) -> 0;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambdaCodeBlock2Expr/afterVoid.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambdaCodeBlock2Expr/afterVoid.java
new file mode 100644
index 0000000..a1c4e15
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambdaCodeBlock2Expr/afterVoid.java
@@ -0,0 +1,6 @@
+// "Replace with one line expression" "true"
+class Test {
+  {
+    Runnable c = () -> System.out.println();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambdaCodeBlock2Expr/afterVoidInCodeblock.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambdaCodeBlock2Expr/afterVoidInCodeblock.java
new file mode 100644
index 0000000..a1c4e15
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambdaCodeBlock2Expr/afterVoidInCodeblock.java
@@ -0,0 +1,6 @@
+// "Replace with one line expression" "true"
+class Test {
+  {
+    Runnable c = () -> System.out.println();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambdaCodeBlock2Expr/beforeComparable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambdaCodeBlock2Expr/beforeComparable.java
new file mode 100644
index 0000000..e586cce
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambdaCodeBlock2Expr/beforeComparable.java
@@ -0,0 +1,6 @@
+// "Replace with one line expression" "true"
+class Test {
+  {
+    Comparable<String> c = (o) -> {r<caret>eturn 0;};
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambdaCodeBlock2Expr/beforeReturnTypeInExpressionStatement.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambdaCodeBlock2Expr/beforeReturnTypeInExpressionStatement.java
new file mode 100644
index 0000000..cd86ba2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambdaCodeBlock2Expr/beforeReturnTypeInExpressionStatement.java
@@ -0,0 +1,8 @@
+// "Replace with one line expression" "false"
+class Test {
+  {
+    Runnable c = () -> <caret>{foo();};
+  }
+  
+  int foo() {return 1;}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambdaCodeBlock2Expr/beforeVoid.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambdaCodeBlock2Expr/beforeVoid.java
new file mode 100644
index 0000000..4adb4dc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambdaCodeBlock2Expr/beforeVoid.java
@@ -0,0 +1,6 @@
+// "Replace with one line expression" "true"
+class Test {
+  {
+    Runnable c = () -> <caret>{System.out.println();};
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambdaCodeBlock2Expr/beforeVoidInCodeblock.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambdaCodeBlock2Expr/beforeVoidInCodeblock.java
new file mode 100644
index 0000000..40da172
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambdaCodeBlock2Expr/beforeVoidInCodeblock.java
@@ -0,0 +1,6 @@
+// "Replace with one line expression" "true"
+class Test {
+  {
+    Runnable c = () -> <caret>{{System.out.println();}};
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/makeTypeGeneric/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/makeTypeGeneric/after1.java
new file mode 100644
index 0000000..f3ede7a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/makeTypeGeneric/after1.java
@@ -0,0 +1,10 @@
+// "Change type of TT to java.util.Comparator<java.lang.String>" "true"
+import java.util.*;
+class CCCC {
+  private final static Comparator<String> <caret>TT = new Comparator<String>() {
+    @Override
+    public int compare(String o1, String o2) {
+      return 0;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+  };
+  }
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/makeTypeGeneric/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/makeTypeGeneric/before1.java
new file mode 100644
index 0000000..cc651ff
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/makeTypeGeneric/before1.java
@@ -0,0 +1,10 @@
+// "Change type of TT to java.util.Comparator<java.lang.String>" "true"
+import java.util.*;
+class CCCC {
+  private final static Comparator <caret>TT = new Comparator<String>() {
+    @Override
+    public int compare(String o1, String o2) {
+      return 0;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+  };
+  }
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/makeTypeGeneric/beforeImplementedRaw.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/makeTypeGeneric/beforeImplementedRaw.java
new file mode 100644
index 0000000..9ed3937
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/makeTypeGeneric/beforeImplementedRaw.java
@@ -0,0 +1,9 @@
+// "Change type of TTT to java.util.Comparator" "false"
+import java.util.*;
+class CCCC implements Comparator {
+    private final static Comparator <caret>TTT = new CCCC();
+    @Override
+    public int compare(Object o1, Object o2) {
+      return 0;
+    }
+  }
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/after1.java
new file mode 100644
index 0000000..54cd868
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/after1.java
@@ -0,0 +1,6 @@
+// "Make 'f' return 'int'" "true"
+class a {
+    int f() {
+        return <caret>1;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/after10.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/after10.java
new file mode 100644
index 0000000..08a95e7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/after10.java
@@ -0,0 +1,10 @@
+// "Make 'call' return 'Callable<java.lang.Integer>'" "true"
+public class a extends Callable<Integer> {
+  public Callable<Integer> call() {
+    return new Callable<Integer>();
+  }
+}
+
+class Callable<T> {
+  Callable<T> call(){return null;}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/after11.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/after11.java
new file mode 100644
index 0000000..ff7d044
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/after11.java
@@ -0,0 +1,12 @@
+// "Make 'call' return 'Callable<java.lang.Integer>'" "true"
+public class a extends CallableEx<Integer> {
+  public Callable<Integer> call() {
+    return new Callable<Integer>();
+  }
+}
+
+class Callable<T> {
+  Callable<T> call(){return null;}
+}
+
+class CallableEx<TE> extends Callable<TE>{}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/after2.java
new file mode 100644
index 0000000..d99deda
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/after2.java
@@ -0,0 +1,6 @@
+// "Make 'f' return 'long'" "true"
+class a {
+    long f() {
+        return <caret>1L;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/after3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/after3.java
new file mode 100644
index 0000000..dc29f4c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/after3.java
@@ -0,0 +1,6 @@
+// "Make 'f' return 'java.lang.String'" "true"
+class a {
+    String f() {
+        return <caret>"";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/after4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/after4.java
new file mode 100644
index 0000000..14b93b8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/after4.java
@@ -0,0 +1,6 @@
+// "Make 'f' return 'void'" "true"
+class a {
+    void f() {
+        return <caret>;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/after6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/after6.java
new file mode 100644
index 0000000..481cc81
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/after6.java
@@ -0,0 +1,14 @@
+// "Make 'call' return 'java.lang.Integer'" "true"
+public class a {
+ String f() {
+   return new Callable<Integer>() {
+     public Integer call() {
+       return new Integer(0);
+     }
+   }.call();
+ }
+}
+
+interface Callable<T> {
+  T call();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/after7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/after7.java
new file mode 100644
index 0000000..0b01b9e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/after7.java
@@ -0,0 +1,10 @@
+// "Make 'call' return 'java.lang.Integer'" "true"
+public class a implements Callable<Integer> {
+  public Integer call() {
+    return new Integer(0);
+  }
+}
+
+interface Callable<T> {
+  T call();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/after8.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/after8.java
new file mode 100644
index 0000000..098baca
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/after8.java
@@ -0,0 +1,10 @@
+// "Make 'call' return 'int'" "true"
+public class a implements Callable<Integer> {
+  public Integer call() {
+    return 42;
+  }
+}
+
+interface Callable<T> {
+  T call();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/after9.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/after9.java
new file mode 100644
index 0000000..4c727cd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/after9.java
@@ -0,0 +1,6 @@
+// "Make 'getTT' return 'int'" "true"
+public class a  {
+  <TT> int getTT() {
+    return 42;
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/afterBrokenControlFlow.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/afterBrokenControlFlow.java
new file mode 100644
index 0000000..df7daad
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/afterBrokenControlFlow.java
@@ -0,0 +1,16 @@
+// "Make 'getDrawerAppsList' return 'java.util.ArrayList<ResolveInfo>'" "true"
+import java.util.*;
+class Test {
+  
+    public static ArrayList<ResolveInfo> getDrawerAppsList(ArrayList<ResolveInfo> appsList) {
+        for (ResolveInfo appInfo : appsList) {
+            if () {
+
+                appsList.remove(appInfo);
+            }
+        }
+
+        return  appsList;
+
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/afterChangeClassTypeParams.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/afterChangeClassTypeParams.java
new file mode 100644
index 0000000..7daec2c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/afterChangeClassTypeParams.java
@@ -0,0 +1,10 @@
+// "Make 'doin' return 'int'" "true"
+abstract class AsyncTask<A, B, C> {
+    abstract C doin(A... a);
+}
+class AAsync extends AsyncTask<String,Integer,Integer> {
+    @Override
+    Integer doin(String... a) {
+        return 1;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/before1.java
new file mode 100644
index 0000000..354bb11
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/before1.java
@@ -0,0 +1,6 @@
+// "Make 'f' return 'int'" "true"
+class a {
+    void f() {
+        return <caret>1;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/before10.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/before10.java
new file mode 100644
index 0000000..c297eba
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/before10.java
@@ -0,0 +1,10 @@
+// "Make 'call' return 'Callable<java.lang.Integer>'" "true"
+public class a extends Callable<String> {
+  public Callable<String> call() {
+    return new Callable<Inte<caret>ger>();
+  }
+}
+
+class Callable<T> {
+  Callable<T> call(){return null;}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/before11.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/before11.java
new file mode 100644
index 0000000..649c6db
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/before11.java
@@ -0,0 +1,12 @@
+// "Make 'call' return 'Callable<java.lang.Integer>'" "true"
+public class a extends CallableEx<String> {
+  public Callable<String> call() {
+    return new Callable<Inte<caret>ger>();
+  }
+}
+
+class Callable<T> {
+  Callable<T> call(){return null;}
+}
+
+class CallableEx<TE> extends Callable<TE>{}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/before2.java
new file mode 100644
index 0000000..de7536b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/before2.java
@@ -0,0 +1,6 @@
+// "Make 'f' return 'long'" "true"
+class a {
+    int f() {
+        return <caret>1L;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/before3.java
new file mode 100644
index 0000000..843fc3b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/before3.java
@@ -0,0 +1,6 @@
+// "Make 'f' return 'java.lang.String'" "true"
+class a {
+    int f() {
+        return <caret>"";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/before4.java
new file mode 100644
index 0000000..e6548f7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/before4.java
@@ -0,0 +1,6 @@
+// "Make 'f' return 'void'" "true"
+class a {
+    int f() {
+        return <caret>;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/before5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/before5.java
new file mode 100644
index 0000000..e2ac20b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/before5.java
@@ -0,0 +1,6 @@
+// "Make 'f' return 'null'" "false"
+class a {
+ int f() {
+   return <caret>null;
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/before6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/before6.java
new file mode 100644
index 0000000..276ecfa
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/before6.java
@@ -0,0 +1,14 @@
+// "Make 'call' return 'java.lang.Integer'" "true"
+public class a {
+ String f() {
+   return new Callable<String>() {
+     public String call() {
+       return new Int<caret>eger(0);
+     }
+   }.call();
+ }
+}
+
+interface Callable<T> {
+  T call();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/before7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/before7.java
new file mode 100644
index 0000000..356c1e4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/before7.java
@@ -0,0 +1,10 @@
+// "Make 'call' return 'java.lang.Integer'" "true"
+public class a implements Callable<String> {
+  public String call() {
+    return new Int<caret>eger(0);
+  }
+}
+
+interface Callable<T> {
+  T call();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/before8.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/before8.java
new file mode 100644
index 0000000..bc97de3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/before8.java
@@ -0,0 +1,10 @@
+// "Make 'call' return 'int'" "true"
+public class a implements Callable<String> {
+  public String call() {
+    return 4<caret>2;
+  }
+}
+
+interface Callable<T> {
+  T call();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/before9.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/before9.java
new file mode 100644
index 0000000..28419d4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/before9.java
@@ -0,0 +1,6 @@
+// "Make 'getTT' return 'int'" "true"
+public class a  {
+  <TT> TT getTT() {
+    return 4<caret>2;
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/beforeBrokenControlFlow.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/beforeBrokenControlFlow.java
new file mode 100644
index 0000000..d3ecc6e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/beforeBrokenControlFlow.java
@@ -0,0 +1,16 @@
+// "Make 'getDrawerAppsList' return 'java.util.ArrayList<ResolveInfo>'" "true"
+import java.util.*;
+class Test {
+  
+    public static List<AppInfo> getDrawerAppsList(ArrayList<ResolveInfo> appsList) {
+        for (ResolveInfo appInfo : appsList) {
+            if () {
+
+                appsList.remove(appInfo);
+            }
+        }
+
+        return  <caret>appsList;
+
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/beforeChangeClassTypeParams.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/beforeChangeClassTypeParams.java
new file mode 100644
index 0000000..c17a513
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/beforeChangeClassTypeParams.java
@@ -0,0 +1,10 @@
+// "Make 'doin' return 'int'" "true"
+abstract class AsyncTask<A, B, C> {
+    abstract C doin(A... a);
+}
+class AAsync extends AsyncTask<String, Integer, Long> {
+    @Override
+    Long doin(String... a) {
+        return <caret>1;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturnBooleanFix/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturnBooleanFix/after1.java
new file mode 100644
index 0000000..5ab67ff
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturnBooleanFix/after1.java
@@ -0,0 +1,16 @@
+// "Make 'victim' return 'boolean'" "true"
+class Test {
+    public void trigger() {
+        if (victim()) {
+            System.out.println("***");
+        }
+    }
+
+    public boolean victim() {
+        final int something = 1;
+        final boolean value = false;
+        int another = 10;
+        final boolean secondBoolean = another == something;
+        return <caret><selection>value</selection>;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturnBooleanFix/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturnBooleanFix/after2.java
new file mode 100644
index 0000000..5569c7f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturnBooleanFix/after2.java
@@ -0,0 +1,14 @@
+// "Make 'victim' return 'boolean'" "true"
+class Test {
+    public void trigger() {
+        if (victim()) {
+            System.out.println("***");
+        }
+    }
+
+    public boolean victim() {
+        final int something = 1;
+        int another = 10;
+        return <caret><selection>false</selection>;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturnBooleanFix/after3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturnBooleanFix/after3.java
new file mode 100644
index 0000000..8770d1d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturnBooleanFix/after3.java
@@ -0,0 +1,15 @@
+// "Make 'victim' return 'boolean'" "true"
+class Test {
+    public void trigger() {
+        if (victim(false, 0, false)) {
+            System.out.println("***");
+        }
+    }
+
+    public boolean victim(final boolean param1, final int param2, final boolean param3) {
+        final int something = 1;
+        int another = 10;
+        boolean someValue = true;
+        return <caret><selection>someValue</selection>;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturnBooleanFix/after4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturnBooleanFix/after4.java
new file mode 100644
index 0000000..d9f8c5a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturnBooleanFix/after4.java
@@ -0,0 +1,14 @@
+// "Make 'victim' return 'boolean'" "true"
+class Test {
+    public void trigger() {
+        if (victim(false, 0, false)) {
+            System.out.println("***");
+        }
+    }
+
+    public boolean victim(final boolean param1, final int param2, final boolean param3) {
+        final int something = 1;
+        int another = 10;
+        return <caret><selection>param1</selection>;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturnBooleanFix/after5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturnBooleanFix/after5.java
new file mode 100644
index 0000000..93bc313
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturnBooleanFix/after5.java
@@ -0,0 +1,31 @@
+// "Make 'victim' return 'boolean'" "true"
+public class External {
+    void m1() {
+        if (new Out().victim(null)) {
+            System.out.println("Something");
+        }
+    }
+}
+
+class Out {
+    public boolean victim(final Collection coll) {
+        if (System.currentTimeMillis() > 2321321L) {
+            final boolean value;
+
+            return value;
+        }
+
+        final boolean inTheMiddle = false;
+        for (Object o : coll) {
+            return inTheMiddle;
+        }
+
+        for (Iterator iterator = coll.iterator(); iterator.hasNext();) {
+            Object o = (Object) iterator.next();
+            boolean insideFor = false;
+
+            return inTheMiddle;
+        }
+        return <caret><selection>inTheMiddle</selection>;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturnBooleanFix/after6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturnBooleanFix/after6.java
new file mode 100644
index 0000000..13c0cd5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturnBooleanFix/after6.java
@@ -0,0 +1,31 @@
+// "Make 'm1' return 'boolean'" "true"
+interface A {
+    boolean m1();
+}
+
+class B {
+    public boolean m1() {
+        boolean candidate;
+        return candidate;
+    }
+}
+
+class C extends B implements A {
+    private final boolean myBoolean;
+
+    public boolean m1() {
+        return false;
+    }
+}
+
+public class D extends C {
+    public void user() {
+        while (m1()) {
+            System.out.println("m1");
+        }
+    }
+
+    public boolean m1() {
+        return <caret><selection>false</selection>;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturnBooleanFix/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturnBooleanFix/before1.java
new file mode 100644
index 0000000..ae1816d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturnBooleanFix/before1.java
@@ -0,0 +1,15 @@
+// "Make 'victim' return 'boolean'" "true"
+class Test {
+    public void trigger() {
+        if (<caret>victim()) {
+            System.out.println("***");
+        }
+    }
+
+    public void victim() {
+        final int something = 1;
+        final boolean value = false;
+        int another = 10;
+        final boolean secondBoolean = another == something;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturnBooleanFix/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturnBooleanFix/before2.java
new file mode 100644
index 0000000..9b6035f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturnBooleanFix/before2.java
@@ -0,0 +1,13 @@
+// "Make 'victim' return 'boolean'" "true"
+class Test {
+    public void trigger() {
+        if (<caret>victim()) {
+            System.out.println("***");
+        }
+    }
+
+    public void victim() {
+        final int something = 1;
+        int another = 10;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturnBooleanFix/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturnBooleanFix/before3.java
new file mode 100644
index 0000000..42aa699
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturnBooleanFix/before3.java
@@ -0,0 +1,14 @@
+// "Make 'victim' return 'boolean'" "true"
+class Test {
+    public void trigger() {
+        if (<caret>victim(false, 0, false)) {
+            System.out.println("***");
+        }
+    }
+
+    public void victim(final boolean param1, final int param2, final boolean param3) {
+        final int something = 1;
+        int another = 10;
+        boolean someValue = true;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturnBooleanFix/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturnBooleanFix/before4.java
new file mode 100644
index 0000000..9a15e99
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturnBooleanFix/before4.java
@@ -0,0 +1,13 @@
+// "Make 'victim' return 'boolean'" "true"
+class Test {
+    public void trigger() {
+        if (<caret>victim(false, 0, false)) {
+            System.out.println("***");
+        }
+    }
+
+    public void victim(final boolean param1, final int param2, final boolean param3) {
+        final int something = 1;
+        int another = 10;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturnBooleanFix/before5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturnBooleanFix/before5.java
new file mode 100644
index 0000000..3c7bc2f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturnBooleanFix/before5.java
@@ -0,0 +1,30 @@
+// "Make 'victim' return 'boolean'" "true"
+public class External {
+    void m1() {
+        if (new Out().<caret>victim(null)) {
+            System.out.println("Something");
+        }
+    }
+}
+
+class Out {
+    public void victim(final Collection coll) {
+        if (System.currentTimeMillis() > 2321321L) {
+            final boolean value;
+
+            return;
+        }
+
+        final boolean inTheMiddle = false;
+        for (Object o : coll) {
+            return;
+        }
+
+        for (Iterator iterator = coll.iterator(); iterator.hasNext();) {
+            Object o = (Object) iterator.next();
+            boolean insideFor = false;
+
+            return;
+        }
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturnBooleanFix/before6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturnBooleanFix/before6.java
new file mode 100644
index 0000000..a469ed5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturnBooleanFix/before6.java
@@ -0,0 +1,28 @@
+// "Make 'm1' return 'boolean'" "true"
+interface A {
+    void m1();
+}
+
+class B {
+    public void m1() {
+        boolean candidate;
+    }
+}
+
+class C extends B implements A {
+    private final boolean myBoolean;
+
+    public void m1() {
+    }
+}
+
+public class D extends C {
+    public void user() {
+        while (<caret>m1()) {
+            System.out.println("m1");
+        }
+    }
+
+    public void m1() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodThrows/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodThrows/after1.java
new file mode 100644
index 0000000..7b7c1c3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodThrows/after1.java
@@ -0,0 +1,13 @@
+// "Remove 'java.io.IOException' from 'f' throws list" "true"
+import java.io.*;
+
+class a {
+ void f() {
+ }
+}
+
+class b extends a {
+ void f() <caret>{
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodThrows/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodThrows/after2.java
new file mode 100644
index 0000000..7e2d2dc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodThrows/after2.java
@@ -0,0 +1,13 @@
+// "Add 'java.io.IOException' to 'a.f' throws list" "true"
+import java.io.*;
+
+class a {
+ void f() throws IOException {
+ }
+}
+
+class b extends a {
+ void f() throws <caret>IOException {
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodThrows/after3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodThrows/after3.java
new file mode 100644
index 0000000..048457f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodThrows/after3.java
@@ -0,0 +1,8 @@
+// "Remove 'java.io.IOException' from 'f' throws list" "true"
+import java.io.*;
+
+class a {
+ private void f() <caret>{
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodThrows/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodThrows/before1.java
new file mode 100644
index 0000000..7e330a9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodThrows/before1.java
@@ -0,0 +1,13 @@
+// "Remove 'java.io.IOException' from 'f' throws list" "true"
+import java.io.*;
+
+class a {
+ void f() {
+ }
+}
+
+class b extends a {
+ void f() throws <caret>IOException {
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodThrows/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodThrows/before2.java
new file mode 100644
index 0000000..0dfe388
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodThrows/before2.java
@@ -0,0 +1,13 @@
+// "Add 'java.io.IOException' to 'a.f' throws list" "true"
+import java.io.*;
+
+class a {
+ void f() {
+ }
+}
+
+class b extends a {
+ void f() throws <caret>IOException {
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodThrows/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodThrows/before3.java
new file mode 100644
index 0000000..499aced
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodThrows/before3.java
@@ -0,0 +1,8 @@
+// "Remove 'java.io.IOException' from 'f' throws list" "true"
+import java.io.*;
+
+class a {
+ private void f() throws <caret>IOException {
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodThrows/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodThrows/before4.java
new file mode 100644
index 0000000..544b2db
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodThrows/before4.java
@@ -0,0 +1,9 @@
+// "Remove 'java.io.IOException' from 'f' throws list" "false"
+import java.io.*;
+
+class a {
+ private void f() throws <caret>IOException {
+   throw new IOException();
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodThrows/before5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodThrows/before5.java
new file mode 100644
index 0000000..30e57ef
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodThrows/before5.java
@@ -0,0 +1,13 @@
+// "Remove 'java.io.IOException' from 'f' throws list" "false"
+import java.io.*;
+
+class a {
+ void f() throws IOException {
+ }
+}
+
+class b extends a {
+ void f() throws <caret>IOException {
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after1.java
new file mode 100644
index 0000000..7afc4af
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after1.java
@@ -0,0 +1,9 @@
+// "Make 'a' not abstract" "true"
+import java.io.*;
+
+class a {
+  void f() {
+    new <caret>a();
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after10.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after10.java
new file mode 100644
index 0000000..09ae6a28
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after10.java
@@ -0,0 +1,9 @@
+// "Make 'inner class initializer' not static" "true"
+import java.io.*;
+
+class a {
+  class inner {
+    <caret>{
+    }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after10_1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after10_1.java
new file mode 100644
index 0000000..cdd4613
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after10_1.java
@@ -0,0 +1,11 @@
+// "Make 'Anonymous class derived from a class initializer' not static" "true"
+import java.io.*;
+
+class a {
+  void f() {
+    new a() {
+      <caret>{
+      }
+    };
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after11.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after11.java
new file mode 100644
index 0000000..1064459
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after11.java
@@ -0,0 +1,9 @@
+// "Make 'inner' static" "true"
+import java.io.*;
+
+class a {
+  static class inner {
+    <caret>static {
+    }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after12.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after12.java
new file mode 100644
index 0000000..2247424
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after12.java
@@ -0,0 +1,9 @@
+// "Make 'ininner' not static" "true"
+import java.io.*;
+
+class a {
+  class inner {
+    <caret>class ininner {
+    }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after13.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after13.java
new file mode 100644
index 0000000..6e328f5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after13.java
@@ -0,0 +1,9 @@
+// "Make 'inner' static" "true"
+import java.io.*;
+
+class a {
+  static class inner {
+    <caret>static class ininner {
+    }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after14.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after14.java
new file mode 100644
index 0000000..87ad0d8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after14.java
@@ -0,0 +1,7 @@
+// "Make 'a' not final" "true"
+import java.io.*;
+
+class a {
+}
+class b extends <caret>a {
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after15.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after15.java
new file mode 100644
index 0000000..79f4eb7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after15.java
@@ -0,0 +1,9 @@
+// "Make 'i' not final" "true"
+import java.io.*;
+
+final class a {
+  void f() {
+    int i = 0;
+    <caret>i = 8;
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after17.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after17.java
new file mode 100644
index 0000000..ef50d95
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after17.java
@@ -0,0 +1,10 @@
+// "Make 'f' public" "true"
+import java.io.*;
+
+class a {
+  public void f() {
+  }
+}
+class b extends a {
+  public void <caret>f() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after18.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after18.java
new file mode 100644
index 0000000..2d5dcf9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after18.java
@@ -0,0 +1,10 @@
+// "Make 'a.f' not final" "true"
+import java.io.*;
+
+class a {
+  public void f() {
+  }
+}
+class b extends a {
+  <caret>public void f() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after19.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after19.java
new file mode 100644
index 0000000..978e5e1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after19.java
@@ -0,0 +1,6 @@
+// "Make 'f' abstract" "true"
+import java.io.*;
+
+class a {
+  <caret>public abstract void f();
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after21.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after21.java
new file mode 100644
index 0000000..8af03ff
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after21.java
@@ -0,0 +1,9 @@
+// "Make 'f' not static" "true"
+import java.io.*;
+
+class a {
+  public void f() {}
+}
+class b extends a {
+  <caret>public void f() {}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after22.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after22.java
new file mode 100644
index 0000000..bdea684
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after22.java
@@ -0,0 +1,9 @@
+// "Make 'a.f' static" "true"
+import java.io.*;
+
+class a {
+  public static void f() {}
+}
+class b extends a {
+  <caret>public static void f() {}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after23.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after23.java
new file mode 100644
index 0000000..6e909c8d5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after23.java
@@ -0,0 +1,11 @@
+// "Make 'a.i' package local" "true"
+import java.io.*;
+
+class a {
+  int i;
+}
+class b extends a {
+  void f() {
+    int p = <caret>i;
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after24.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after24.java
new file mode 100644
index 0000000..41aa0af
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after24.java
@@ -0,0 +1,11 @@
+// "Make 'a.i' public" "true"
+import java.io.*;
+
+class a {
+  public int i;
+}
+class b extends a {
+  void f() {
+    int p = <caret>i;
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after25.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after25.java
new file mode 100644
index 0000000..bc252ea
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after25.java
@@ -0,0 +1,6 @@
+// "Make 'f' not abstract" "true"
+import java.io.*;
+
+class a {
+  <caret>final void f() {}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after26.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after26.java
new file mode 100644
index 0000000..fe31966
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after26.java
@@ -0,0 +1,6 @@
+// "Make 'i' not abstract" "true"
+import java.io.*;
+
+class a {
+  <caret>int i;
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after27.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after27.java
new file mode 100644
index 0000000..4941c93
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after27.java
@@ -0,0 +1,9 @@
+// "Make 'i' static" "true"
+import java.io.*;
+
+class a {
+  static int i;
+  static void f() {
+    int p = <caret>i;
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after29.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after29.java
new file mode 100644
index 0000000..1847cbd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after29.java
@@ -0,0 +1,12 @@
+// "Make 'c class initializer' not static" "true"
+import java.io.*;
+
+class c {
+    class inner {
+        class ininner {}
+    }
+
+    {
+        <caret>new inner();
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after30.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after30.java
new file mode 100644
index 0000000..bcd34ef
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after30.java
@@ -0,0 +1,12 @@
+// "Make 'inner' static" "true"
+import java.io.*;
+
+class c {
+    static class inner {
+        class ininner {}
+    }
+
+    static {
+        <caret>new inner();
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after31.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after31.java
new file mode 100644
index 0000000..3d51e31
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after31.java
@@ -0,0 +1,10 @@
+// "Make 'c class initializer' not static" "true"
+import java.io.*;
+
+class c {
+    void f() {}
+
+    {
+        <caret>f();
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after4.java
new file mode 100644
index 0000000..6a12d9d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after4.java
@@ -0,0 +1,8 @@
+// "Make 'a' abstract" "true"
+import java.io.*;
+
+abstract class <caret>a {
+  void f() {
+  }
+  abstract void f2();
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after5.java
new file mode 100644
index 0000000..fcc7b9d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after5.java
@@ -0,0 +1,8 @@
+// "Make 'a' not final" "true"
+import java.io.*;
+
+class a {
+  void f() {
+    new <caret>a() {};
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after6.java
new file mode 100644
index 0000000..1e0e169
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after6.java
@@ -0,0 +1,10 @@
+// "Make 'i' not static" "true"
+import java.io.*;
+
+class a {
+  class inner {
+    <caret>int i;
+  }
+  void f() {
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after7.java
new file mode 100644
index 0000000..558f198
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after7.java
@@ -0,0 +1,10 @@
+// "Make 'inner' static" "true"
+import java.io.*;
+
+class a {
+  static class inner {
+    <caret>static int i;
+  }
+  void f() {
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after8.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after8.java
new file mode 100644
index 0000000..c712d14
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after8.java
@@ -0,0 +1,8 @@
+// "Make 'f' not static" "true"
+import java.io.*;
+
+class a {
+  class inner {
+    <caret>void f() {}
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after9.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after9.java
new file mode 100644
index 0000000..b68fa7b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/after9.java
@@ -0,0 +1,8 @@
+// "Make 'inner' static" "true"
+import java.io.*;
+
+class a {
+  static class inner {
+    <caret>static void f() {}
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/afterDenormalized.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/afterDenormalized.java
new file mode 100644
index 0000000..14dbed5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/afterDenormalized.java
@@ -0,0 +1,8 @@
+// "Make 'f' static" "true"
+public class Foo {
+    int g;
+    static int f;
+    static void foo() {
+        <caret>f = 0;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/afterInAnonymous.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/afterInAnonymous.java
new file mode 100644
index 0000000..66dcd4c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/afterInAnonymous.java
@@ -0,0 +1,13 @@
+// "Make 'Bar.f' protected" "true"
+public class Foo extends Bar{
+    void foo() {
+        new Runnable(){
+          public void run() {
+            f();
+          }
+        };
+    }
+}
+class Bar {
+    protected void f(){}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/afterRefName.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/afterRefName.java
new file mode 100644
index 0000000..6f6467e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/afterRefName.java
@@ -0,0 +1,12 @@
+// "Make 'Bar.f' public" "true"
+public class Foo {
+    void foo(Bar f) {
+        f.<caret>f(2);
+    }
+}
+class Bar {
+    public void f(int i){}
+    public void f(String s){}
+
+
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before1.java
new file mode 100644
index 0000000..4b19d01
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before1.java
@@ -0,0 +1,9 @@
+// "Make 'a' not abstract" "true"
+import java.io.*;
+
+abstract class a {
+  void f() {
+    new <caret>a();
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before10.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before10.java
new file mode 100644
index 0000000..7e03e75
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before10.java
@@ -0,0 +1,9 @@
+// "Make 'inner class initializer' not static" "true"
+import java.io.*;
+
+class a {
+  class inner {
+    <caret>static {
+    }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before10_1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before10_1.java
new file mode 100644
index 0000000..9c9594d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before10_1.java
@@ -0,0 +1,11 @@
+// "Make 'Anonymous class derived from a class initializer' not static" "true"
+import java.io.*;
+
+class a {
+  void f() {
+    new a() {
+      <caret>static {
+      }
+    };
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before11.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before11.java
new file mode 100644
index 0000000..8c205a5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before11.java
@@ -0,0 +1,9 @@
+// "Make 'inner' static" "true"
+import java.io.*;
+
+class a {
+  class inner {
+    <caret>static {
+    }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before12.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before12.java
new file mode 100644
index 0000000..2d7bebf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before12.java
@@ -0,0 +1,9 @@
+// "Make 'ininner' not static" "true"
+import java.io.*;
+
+class a {
+  class inner {
+    <caret>static class ininner {
+    }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before13.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before13.java
new file mode 100644
index 0000000..432e867
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before13.java
@@ -0,0 +1,9 @@
+// "Make 'inner' static" "true"
+import java.io.*;
+
+class a {
+  class inner {
+    <caret>static class ininner {
+    }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before14.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before14.java
new file mode 100644
index 0000000..5b7baa5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before14.java
@@ -0,0 +1,7 @@
+// "Make 'a' not final" "true"
+import java.io.*;
+
+final class a {
+}
+class b extends <caret>a {
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before15.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before15.java
new file mode 100644
index 0000000..7d5f484
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before15.java
@@ -0,0 +1,9 @@
+// "Make 'i' not final" "true"
+import java.io.*;
+
+final class a {
+  void f() {
+    final int i = 0;
+    <caret>i = 8;
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before16.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before16.java
new file mode 100644
index 0000000..3564d57
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before16.java
@@ -0,0 +1,9 @@
+// "Make 'i' not final" "false"
+import java.io.*;
+
+final class a {
+  void f() {
+    final int i;
+    <caret>i = 8;
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before17.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before17.java
new file mode 100644
index 0000000..a4224a3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before17.java
@@ -0,0 +1,10 @@
+// "Make 'f' public" "true"
+import java.io.*;
+
+class a {
+  public void f() {
+  }
+}
+class b extends a {
+  void <caret>f() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before18.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before18.java
new file mode 100644
index 0000000..acc7cc1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before18.java
@@ -0,0 +1,10 @@
+// "Make 'a.f' not final" "true"
+import java.io.*;
+
+class a {
+  final public void f() {
+  }
+}
+class b extends a {
+  <caret>public void f() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before19.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before19.java
new file mode 100644
index 0000000..2e50945
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before19.java
@@ -0,0 +1,6 @@
+// "Make 'f' abstract" "true"
+import java.io.*;
+
+class a {
+  <caret>public void f();
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before2.java
new file mode 100644
index 0000000..21aa941
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before2.java
@@ -0,0 +1,10 @@
+// "Make 'a' not abstract" "false"
+import java.io.*;
+
+abstract class a {
+  void f() {
+    new <caret>a();
+  }
+  abstract void f2();
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before20.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before20.java
new file mode 100644
index 0000000..e7a0677
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before20.java
@@ -0,0 +1,6 @@
+// "Make 'f' abstract" "false"
+import java.io.*;
+
+class a {
+  <caret>public final void f();
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before21.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before21.java
new file mode 100644
index 0000000..9fc05e1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before21.java
@@ -0,0 +1,9 @@
+// "Make 'f' not static" "true"
+import java.io.*;
+
+class a {
+  public void f() {}
+}
+class b extends a {
+  <caret>public static void f() {}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before22.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before22.java
new file mode 100644
index 0000000..2fafa00
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before22.java
@@ -0,0 +1,9 @@
+// "Make 'a.f' static" "true"
+import java.io.*;
+
+class a {
+  public void f() {}
+}
+class b extends a {
+  <caret>public static void f() {}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before23.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before23.java
new file mode 100644
index 0000000..be750cc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before23.java
@@ -0,0 +1,11 @@
+// "Make 'a.i' package local" "true"
+import java.io.*;
+
+class a {
+  private int i;
+}
+class b extends a {
+  void f() {
+    int p = <caret>i;
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before24.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before24.java
new file mode 100644
index 0000000..69ad1b3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before24.java
@@ -0,0 +1,11 @@
+// "Make 'a.i' public" "true"
+import java.io.*;
+
+class a {
+  private int i;
+}
+class b extends a {
+  void f() {
+    int p = <caret>i;
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before25.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before25.java
new file mode 100644
index 0000000..b06be46
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before25.java
@@ -0,0 +1,6 @@
+// "Make 'f' not abstract" "true"
+import java.io.*;
+
+class a {
+  <caret>abstract final void f() {}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before26.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before26.java
new file mode 100644
index 0000000..a32226b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before26.java
@@ -0,0 +1,6 @@
+// "Make 'i' not abstract" "true"
+import java.io.*;
+
+class a {
+  <caret>abstract int i;
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before27.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before27.java
new file mode 100644
index 0000000..ac7c7b0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before27.java
@@ -0,0 +1,9 @@
+// "Make 'i' static" "true"
+import java.io.*;
+
+class a {
+  int i;
+  static void f() {
+    int p = <caret>i;
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before28.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before28.java
new file mode 100644
index 0000000..078f9a7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before28.java
@@ -0,0 +1,11 @@
+// "Make 'MyInterface.myMethod' static" "false"
+import java.io.*;
+
+interface MyInterface
+{
+    public void myMethod();
+}
+class MyInterfaceImpl implements MyInterface 
+{
+    <caret>public static void myMethod() { /* implementation goes here */ }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before29.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before29.java
new file mode 100644
index 0000000..a616ee2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before29.java
@@ -0,0 +1,12 @@
+// "Make 'c class initializer' not static" "true"
+import java.io.*;
+
+class c {
+    class inner {
+        class ininner {}
+    }
+
+    static {
+        <caret>new inner();
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before3.java
new file mode 100644
index 0000000..e44e1ef
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before3.java
@@ -0,0 +1,10 @@
+// "Make 'i' not abstract" "false"
+import java.io.*;
+
+class a {
+  void f() {
+    new <caret>i();
+  }
+}
+interface i {
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before30.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before30.java
new file mode 100644
index 0000000..4c6f69d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before30.java
@@ -0,0 +1,12 @@
+// "Make 'inner' static" "true"
+import java.io.*;
+
+class c {
+    class inner {
+        class ininner {}
+    }
+
+    static {
+        <caret>new inner();
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before31.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before31.java
new file mode 100644
index 0000000..7ee4113
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before31.java
@@ -0,0 +1,10 @@
+// "Make 'c class initializer' not static" "true"
+import java.io.*;
+
+class c {
+    void f() {}
+
+    static {
+        <caret>f();
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before32.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before32.java
new file mode 100644
index 0000000..fc083de
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before32.java
@@ -0,0 +1,11 @@
+// "Make 'ss.s' public" "false"
+// do not suggest intention because of statics problem
+
+class ss {
+  private int s;
+}
+class d extends ss {
+  static void f() {
+    int t = <caret>s;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before33.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before33.java
new file mode 100644
index 0000000..a032ae6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before33.java
@@ -0,0 +1,12 @@
+// "Make 'e' not final" "false"
+
+class C {
+  static {
+    try {
+      throw new Exception();
+    }
+    catch (RuntimeException | IOException e) {
+      <caret>e = null;
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before34.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before34.java
new file mode 100644
index 0000000..4aca069
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before34.java
@@ -0,0 +1,9 @@
+// "Make 'r' not final" "false"
+
+class C {
+  void m() throws Exception {
+    try (AutoCloseable r = null) {
+      <caret>r = null;
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before35.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before35.java
new file mode 100644
index 0000000..1bee6da
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before35.java
@@ -0,0 +1,16 @@
+// "Make 'e' final" "false"
+
+class C {
+  static {
+    try {
+      throw new Exception();
+    }
+    catch (RuntimeException | IOException e) {
+      new Runnable() {
+        public void run() {
+          System.out.println(<caret>e);
+        }
+      }.run();
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before36.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before36.java
new file mode 100644
index 0000000..04c4cdd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before36.java
@@ -0,0 +1,13 @@
+// "Make 'r' final" "false"
+
+class C {
+  void m() throws Exception {
+    try (AutoCloseable r = null) {
+      new Runnable() {
+        public void run() {
+          System.out.println(<caret>r);
+        }
+      }.run();
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before4.java
new file mode 100644
index 0000000..a7dddb5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before4.java
@@ -0,0 +1,8 @@
+// "Make 'a' abstract" "true"
+import java.io.*;
+
+class <caret>a {
+  void f() {
+  }
+  abstract void f2();
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before5.java
new file mode 100644
index 0000000..71c08f1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before5.java
@@ -0,0 +1,8 @@
+// "Make 'a' not final" "true"
+import java.io.*;
+
+final class a {
+  void f() {
+    new <caret>a() {};
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before6.java
new file mode 100644
index 0000000..08bd904
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before6.java
@@ -0,0 +1,10 @@
+// "Make 'i' not static" "true"
+import java.io.*;
+
+class a {
+  class inner {
+    <caret>static int i;
+  }
+  void f() {
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before7.java
new file mode 100644
index 0000000..5ccc13c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before7.java
@@ -0,0 +1,10 @@
+// "Make 'inner' static" "true"
+import java.io.*;
+
+class a {
+  class inner {
+    <caret>static int i;
+  }
+  void f() {
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before8.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before8.java
new file mode 100644
index 0000000..3fdd965
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before8.java
@@ -0,0 +1,8 @@
+// "Make 'f' not static" "true"
+import java.io.*;
+
+class a {
+  class inner {
+    <caret>static void f() {}
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before9.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before9.java
new file mode 100644
index 0000000..0f1a721
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before9.java
@@ -0,0 +1,8 @@
+// "Make 'inner' static" "true"
+import java.io.*;
+
+class a {
+  class inner {
+    <caret>static void f() {}
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/beforeDenormalized.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/beforeDenormalized.java
new file mode 100644
index 0000000..9532fae
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/beforeDenormalized.java
@@ -0,0 +1,7 @@
+// "Make 'f' static" "true"
+public class Foo {
+    int g,f;
+    static void foo() {
+        <caret>f = 0;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/beforeInAnonymous.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/beforeInAnonymous.java
new file mode 100644
index 0000000..30a3224
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/beforeInAnonymous.java
@@ -0,0 +1,13 @@
+// "Make 'Bar.f' protected" "true"
+public class Foo extends Bar{
+    void foo() {
+        new Runnable(){
+          public void run() {
+            f<caret>();
+          }
+        };
+    }
+}
+class Bar {
+    private void f(){}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/beforeRefName.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/beforeRefName.java
new file mode 100644
index 0000000..ea70f7b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/beforeRefName.java
@@ -0,0 +1,12 @@
+// "Make 'Bar.f' public" "true"
+public class Foo {
+    void foo(Bar f) {
+        f.<caret>f(2);
+    }
+}
+class Bar {
+    private void f(int i){}
+    public void f(String s){}
+
+
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/beforeSenselessStaticFix.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/beforeSenselessStaticFix.java
new file mode 100644
index 0000000..5db5cdf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/beforeSenselessStaticFix.java
@@ -0,0 +1,10 @@
+// "Make 'main' not static" "false"
+class DateFormat {
+
+  public void parse(String s){}
+}
+class TestParse {
+    public static void main(String[] args) {
+      DateFormat.<caret>parse("20070724T174800");
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveBoundClassToFront/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveBoundClassToFront/after1.java
new file mode 100644
index 0000000..886e728
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveBoundClassToFront/after1.java
@@ -0,0 +1,4 @@
+// "Move bound 'java.lang.Number' to the beginning of the bounds list of type parameter 'X'" "true"
+class C <X extends Number & Runnable<caret>> {
+    X x;
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveBoundClassToFront/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveBoundClassToFront/before1.java
new file mode 100644
index 0000000..fd2abab
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveBoundClassToFront/before1.java
@@ -0,0 +1,4 @@
+// "Move bound 'java.lang.Number' to the beginning of the bounds list of type parameter 'X'" "true"
+class C <X extends Runnable & <caret>Number> {
+    X x;
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveCatchUp/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveCatchUp/after1.java
new file mode 100644
index 0000000..f4fcc28
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveCatchUp/after1.java
@@ -0,0 +1,16 @@
+// "Move catch for 'java.io.IOException' before 'java.lang.Exception'" "true"
+import java.io.*;
+
+class a {
+ void f(int i) {
+     try {
+         if (i==0) throw new IOException();
+     } catch (IOException e)  {
+       int ioexcep = 0;
+     } catch (Exception e) {
+       int excep = 0;
+     }<caret>
+
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveCatchUp/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveCatchUp/before1.java
new file mode 100644
index 0000000..34453b9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveCatchUp/before1.java
@@ -0,0 +1,16 @@
+// "Move catch for 'java.io.IOException' before 'java.lang.Exception'" "true"
+import java.io.*;
+
+class a {
+ void f(int i) {
+     try {
+         if (i==0) throw new IOException();
+     } catch (Exception e) {
+       int excep = 0;
+     } catch (<caret>IOException e)  {
+       int ioexcep = 0;
+     }
+
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveCatchUp/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveCatchUp/before2.java
new file mode 100644
index 0000000..befbc3f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveCatchUp/before2.java
@@ -0,0 +1,18 @@
+// "Move catch for 'java.io.IOException' before 'java.io.FileNotFoundException'" "false"
+import java.io.*;
+
+class a {
+ void f(int i) {
+     try {
+         int p = 0;
+     }
+     catch (FileNotFoundException e) {
+       int excep = 0;
+     }
+     catch (<caret>IOException e)  {
+       int ioexcep = 0;
+     }
+
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/after1.java
new file mode 100644
index 0000000..f6ec45f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/after1.java
@@ -0,0 +1,7 @@
+// "Move assignment to field declaration" "true"
+
+class X {
+  int f = 0;
+  X() {
+  <caret>}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/after2.java
new file mode 100644
index 0000000..92813fb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/after2.java
@@ -0,0 +1,12 @@
+// "Move assignment to field declaration" "true"
+
+class X {
+  int f = 0;
+  X() {
+  <caret>}
+  X(int i) {
+   if (1==1) ;
+   else {
+   }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/after3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/after3.java
new file mode 100644
index 0000000..cc03353
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/after3.java
@@ -0,0 +1,15 @@
+// "Move assignment to field declaration" "true"
+
+class X {
+  static int f = 0;
+  static {
+  <caret>}
+  X(int i) {
+  }
+  void x() {
+    int i = f;
+  }
+  void x2() {
+    f = 9;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/after4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/after4.java
new file mode 100644
index 0000000..e62b3c8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/after4.java
@@ -0,0 +1,24 @@
+// "Move assignment to field declaration" "true"
+
+class X {
+  Object f = new Runnable() {
+    void x(int p) {
+      int f = p;
+    }
+
+    public void run() {
+
+    }
+  };
+  X() {
+      <caret>//
+  }
+
+  void x() {
+    int i = f;
+  }
+
+  void x2() {
+    f = 9;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/after5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/after5.java
new file mode 100644
index 0000000..2af2fd1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/after5.java
@@ -0,0 +1,12 @@
+// "Move assignment to field declaration" "true"
+
+class X {
+  int f = 9;
+  X() {
+  }
+  void x() {
+    int i = f;
+  }
+  void x2() {
+  <caret>}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/afterCBrackets.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/afterCBrackets.java
new file mode 100644
index 0000000..f8d3e4b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/afterCBrackets.java
@@ -0,0 +1,8 @@
+// "Move assignment to field declaration" "true"
+public class Foo {
+
+    protected boolean isString[] = new boolean[123];
+
+    public Foo() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/before1.java
new file mode 100644
index 0000000..24e890cc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/before1.java
@@ -0,0 +1,8 @@
+// "Move assignment to field declaration" "true"
+
+class X {
+  int f;
+  X() {
+    f = <caret>0;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/before2.java
new file mode 100644
index 0000000..9e23a80
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/before2.java
@@ -0,0 +1,13 @@
+// "Move assignment to field declaration" "true"
+
+class X {
+  int f;
+  X() {
+    f = <caret>0;
+  }
+  X(int i) {
+   if (1==1) f=0; else {
+       f =   0;//sds
+   }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/before3.java
new file mode 100644
index 0000000..9cf21e6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/before3.java
@@ -0,0 +1,16 @@
+// "Move assignment to field declaration" "true"
+
+class X {
+  static int f;
+  static {
+    f = <caret>0;
+  }
+  X(int i) {
+  }
+  void x() {
+    int i = f;
+  }
+  void x2() {
+    f = 9;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/before4.java
new file mode 100644
index 0000000..f0e05e1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/before4.java
@@ -0,0 +1,25 @@
+// "Move assignment to field declaration" "true"
+
+class X {
+  Object f;
+  X() {
+    <caret>f = new Runnable() {
+      void x(int p) {
+        int f = p;
+      }
+
+      public void run() {
+
+      }
+    };
+    //
+  }
+
+  void x() {
+    int i = f;
+  }
+
+  void x2() {
+    f = 9;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/before5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/before5.java
new file mode 100644
index 0000000..534f2d7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/before5.java
@@ -0,0 +1,13 @@
+// "Move assignment to field declaration" "true"
+
+class X {
+  int f;
+  X() {
+  }
+  void x() {
+    int i = f;
+  }
+  void x2() {
+    <caret>f = 9;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/beforeAnonymous.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/beforeAnonymous.java
new file mode 100644
index 0000000..4eb9ca2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/beforeAnonymous.java
@@ -0,0 +1,16 @@
+// "Move assignment to field declaration" "false"
+class UU extends U {
+    Runnable f;
+    int f2;
+
+    public UU() {
+       final int outer = 0;
+       f <caret>= new Runnable() {
+           int t;
+           public void run() {
+              t=0;
+              t = outer;
+           }
+       };
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/beforeCBrackets.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/beforeCBrackets.java
new file mode 100644
index 0000000..deb30681
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/beforeCBrackets.java
@@ -0,0 +1,9 @@
+// "Move assignment to field declaration" "true"
+public class Foo {
+
+    protected boolean isString[]    ;
+
+    public Foo() {
+        isSt<caret>ring = new boolean[123];
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/beforeInitialized.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/beforeInitialized.java
new file mode 100644
index 0000000..2d89a86
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/beforeInitialized.java
@@ -0,0 +1,7 @@
+// "Move assignment to field declaration" "false"
+public class X {
+    int i=7;
+    {
+      i=<caret>0;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/beforeLocal.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/beforeLocal.java
new file mode 100644
index 0000000..6cee3e5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/beforeLocal.java
@@ -0,0 +1,8 @@
+// "Move assignment to field declaration" "false"
+public class X {
+    int i;
+    X(int from)
+    {
+      <caret>i=from;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/beforeTwiceAssigned.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/beforeTwiceAssigned.java
new file mode 100644
index 0000000..31a6e9d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/beforeTwiceAssigned.java
@@ -0,0 +1,8 @@
+// "Move assignment to field declaration" "false"
+public class X {
+    int i;
+    {
+      i = 0;
+      i = <caret>2;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/beforeWrongPlace.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/beforeWrongPlace.java
new file mode 100644
index 0000000..bf35461
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/beforeWrongPlace.java
@@ -0,0 +1,7 @@
+// "Move assignment to field declaration" "false"
+public class X {
+    int <caret>i=7;
+    {
+      i=0;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/beforeWrongPlace2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/beforeWrongPlace2.java
new file mode 100644
index 0000000..26e845b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveFieldAssignmentToInitializer/beforeWrongPlace2.java
@@ -0,0 +1,11 @@
+// "Move assignment to field declaration" "false"
+public class X {
+    int i;
+    void f()
+    {
+      <caret>i=0;
+    }
+    {
+      i=1;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/after0.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/after0.java
new file mode 100644
index 0000000..80556e1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/after0.java
@@ -0,0 +1,8 @@
+// "Move initializer to constructor" "true"
+public class X {
+    <caret>int i;
+
+    public X() {
+        i = 7;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/after1.java
new file mode 100644
index 0000000..d60028b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/after1.java
@@ -0,0 +1,15 @@
+// "Move initializer to constructor" "true"
+public class X {
+    final int i<caret>;
+
+    public X(String s) {
+        i = 0;
+    }
+    public X() {
+        this(0);
+    }
+    public X(int i) {
+        this.i = 0;
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/after2.java
new file mode 100644
index 0000000..35cda53
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/after2.java
@@ -0,0 +1,17 @@
+// "Move initializer to constructor" "true"
+public class X {
+    final int s=0;
+    <caret>final int i;
+
+    public X(String s) {
+        super();
+        i = this.s;
+    }
+    public X() {
+        this(0);
+    }
+    public X(int i) {
+        this.i = s;
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/after3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/after3.java
new file mode 100644
index 0000000..76b93cf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/after3.java
@@ -0,0 +1,22 @@
+// "Move initializer to constructor" "true"
+public class X {
+    <caret>final int fi;
+
+    public X(String s) {
+        super();
+        fi = 0;
+        int k = fi;
+        k++;
+    }
+    public X() {
+        this(0);
+    }
+    public X(int i) {
+        // f
+        int g = 0;
+        fi = 0;
+        int f = fi;
+        g += f;
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/afterArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/afterArray.java
new file mode 100644
index 0000000..899bf18
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/afterArray.java
@@ -0,0 +1,8 @@
+// "Move initializer to constructor" "true"
+public class X {
+    <caret>String[] i;
+
+    public X() {
+        i = new String[]{"ss", "xx"};
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/afterNoBody.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/afterNoBody.java
new file mode 100644
index 0000000..a85a0b2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/afterNoBody.java
@@ -0,0 +1,10 @@
+// "Move initializer to constructor" "true"
+public class X {
+    <caret>final int fi;
+
+    public X(String s) {
+        //To change body of created methods use File | Settings | File Templates.
+        fi = 0;
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/afterParameters.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/afterParameters.java
new file mode 100644
index 0000000..ed93c7f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/afterParameters.java
@@ -0,0 +1,17 @@
+// "Move initializer to constructor" "true"
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+public class XXX {
+    public final ActionListener listener<caret>;
+
+    public XXX() {
+        listener = new ActionListener() {
+                public void actionPerformed(ActionEvent e) {
+                    XXX.doit(e);
+                }
+            };
+    }
+
+    private static void doit(ActionEvent e) {
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/before0.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/before0.java
new file mode 100644
index 0000000..8257412
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/before0.java
@@ -0,0 +1,4 @@
+// "Move initializer to constructor" "true"
+public class X {
+    <caret>int i=7;
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/before1.java
new file mode 100644
index 0000000..bb80c80
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/before1.java
@@ -0,0 +1,13 @@
+// "Move initializer to constructor" "true"
+public class X {
+    final int i = 0<caret>;
+
+    public X(String s) {
+    }
+    public X() {
+        this(0);
+    }
+    public X(int i) {
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/before2.java
new file mode 100644
index 0000000..056858f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/before2.java
@@ -0,0 +1,15 @@
+// "Move initializer to constructor" "true"
+public class X {
+    final int s=0;
+    <caret>final int i=s;
+
+    public X(String s) {
+        super();
+    }
+    public X() {
+        this(0);
+    }
+    public X(int i) {
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/before3.java
new file mode 100644
index 0000000..4398461
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/before3.java
@@ -0,0 +1,20 @@
+// "Move initializer to constructor" "true"
+public class X {
+    <caret>final int fi=0;
+
+    public X(String s) {
+        super();
+        int k = fi;
+        k++;
+    }
+    public X() {
+        this(0);
+    }
+    public X(int i) {
+        // f
+        int g = 0;
+        int f = fi;
+        g += f;
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/beforeAnon.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/beforeAnon.java
new file mode 100644
index 0000000..858d864
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/beforeAnon.java
@@ -0,0 +1,11 @@
+// "Move initializer to constructor" "false"
+public class X {
+  {
+
+new Runnable() {
+ int <caret>i=0;
+ public void run() {
+ }
+}.run();
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/beforeArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/beforeArray.java
new file mode 100644
index 0000000..7a167d9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/beforeArray.java
@@ -0,0 +1,4 @@
+// "Move initializer to constructor" "true"
+public class X {
+    <caret>String[] i={"ss", "xx"};
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/beforeInterface.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/beforeInterface.java
new file mode 100644
index 0000000..f426eb5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/beforeInterface.java
@@ -0,0 +1,4 @@
+// "Move initializer to constructor" "false"
+public interface X {
+    int <caret>i=0;
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/beforeJavadoc.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/beforeJavadoc.java
new file mode 100644
index 0000000..0b201ca
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/beforeJavadoc.java
@@ -0,0 +1,5 @@
+// "Move initializer to constructor" "false"
+public class X {
+    /** <caret> */
+    int i=7;
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/beforeNoBody.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/beforeNoBody.java
new file mode 100644
index 0000000..22fc2ad
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/beforeNoBody.java
@@ -0,0 +1,7 @@
+// "Move initializer to constructor" "true"
+public class X {
+    <caret>final int fi=0;
+
+    public X(String s);
+
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/beforeParameters.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/beforeParameters.java
new file mode 100644
index 0000000..39a52da
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/beforeParameters.java
@@ -0,0 +1,16 @@
+// "Move initializer to constructor" "true"
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+public class XXX {
+    public final ActionListener listener <caret>= new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                XXX.doit(e);
+            }
+        };
+
+    public XXX() {
+    }
+
+    private static void doit(ActionEvent e) {
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/beforeStatic.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/beforeStatic.java
new file mode 100644
index 0000000..744b31b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/beforeStatic.java
@@ -0,0 +1,7 @@
+// "Move initializer to constructor" "false"
+public class X {
+    final static int <caret>i=7;
+
+    X() {
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/beforeWrongPlace.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/beforeWrongPlace.java
new file mode 100644
index 0000000..3f26c69
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/beforeWrongPlace.java
@@ -0,0 +1,4 @@
+// "Move initializer to constructor" "false"
+public class <caret>X {
+    int i=7;
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToSetUp/afterJUnit3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToSetUp/afterJUnit3.java
new file mode 100644
index 0000000..0456916
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToSetUp/afterJUnit3.java
@@ -0,0 +1,15 @@
+// "Move initializer to setUp method" "true"
+package junit.framework;
+
+public class X extends TestCase {
+  int i;
+
+    public void setUp() throws Exception {
+        super.setUp();
+        i = 7;
+    }
+}
+
+//HACK: making test possible without attaching jUnit
+public abstract class TestCase {
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToSetUp/afterTestNG.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToSetUp/afterTestNG.java
new file mode 100644
index 0000000..7bfbf55
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToSetUp/afterTestNG.java
@@ -0,0 +1,13 @@
+// "Move initializer to setUp method" "true"
+public class X {
+  <caret>int i;
+
+    @org.testng.annotations.BeforeMethod
+    public void setUp() throws Exception {
+        i = 7;
+    }
+
+    @org.testng.annotations.Test
+  public void test() {
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToSetUp/afterjUnit4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToSetUp/afterjUnit4.java
new file mode 100644
index 0000000..a5288ff
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToSetUp/afterjUnit4.java
@@ -0,0 +1,13 @@
+// "Move initializer to setUp method" "true"
+public class X {
+  <caret>int i;
+
+    @org.junit.Before
+    public void setUp() throws Exception {
+        i = 7;
+    }
+
+    @org.junit.Test
+  public void test() {
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToSetUp/beforeJUnit3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToSetUp/beforeJUnit3.java
new file mode 100644
index 0000000..931598d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToSetUp/beforeJUnit3.java
@@ -0,0 +1,10 @@
+// "Move initializer to setUp method" "true"
+package junit.framework;
+
+public class X extends TestCase {
+  <caret>int i = 7;
+}
+
+//HACK: making test possible without attaching jUnit
+public abstract class TestCase {
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToSetUp/beforeNotTest.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToSetUp/beforeNotTest.java
new file mode 100644
index 0000000..ca76098
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToSetUp/beforeNotTest.java
@@ -0,0 +1,4 @@
+// "Move initializer to setUp method" "false"
+public class X {
+  <caret>int i = 7;
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToSetUp/beforeTestNG.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToSetUp/beforeTestNG.java
new file mode 100644
index 0000000..e10228b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToSetUp/beforeTestNG.java
@@ -0,0 +1,8 @@
+// "Move initializer to setUp method" "true"
+public class X {
+  <caret>int i = 7;
+
+  @org.testng.annotations.Test
+  public void test() {
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToSetUp/beforejUnit4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToSetUp/beforejUnit4.java
new file mode 100644
index 0000000..75ca6a7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToSetUp/beforejUnit4.java
@@ -0,0 +1,8 @@
+// "Move initializer to setUp method" "true"
+public class X {
+  <caret>int i = 7;
+
+  @org.junit.Test
+  public void test() {
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/after1.java
new file mode 100644
index 0000000..407726c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/after1.java
@@ -0,0 +1,14 @@
+// "Make 'i' final" "true"
+import java.io.*;
+
+class a {
+ void f() {
+     final int i = 0;
+     new Runnable() {
+       public void run() {
+         int ii = <caret>i;
+       }
+     };
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/after10.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/after10.java
new file mode 100644
index 0000000..d2d93d5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/after10.java
@@ -0,0 +1,18 @@
+// "Copy 'a' to temp final variable" "true"
+public class DoubleTrouble {
+    public void test() {
+        int a = 1;
+        a = 2;
+        final int finalA = a;
+        class s {
+          public void run() {
+            new Runnable() {
+              public void run() {
+                System.out.println(<caret>finalA);
+              }
+            }.run();
+          }
+        }
+      }
+
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/after2.java
new file mode 100644
index 0000000..90baeec
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/after2.java
@@ -0,0 +1,16 @@
+// "Copy 'i' to temp final variable" "true"
+import java.io.*;
+
+class a {
+ void f() {
+     int i = 0;
+     final int finalI = i;
+     new Runnable() {
+       public void run() {
+         int ii = <caret>finalI;
+       }
+     };
+     i++;
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/after3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/after3.java
new file mode 100644
index 0000000..c70f9f4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/after3.java
@@ -0,0 +1,14 @@
+// "Transform 'i' into final one element array" "true"
+import java.io.*;
+
+class a {
+ void f() {
+     final int[] i = {0};
+     new Runnable() {
+       public void run() {
+          <caret>i[0] = 0;
+       }
+     };
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/after5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/after5.java
new file mode 100644
index 0000000..0996ebe
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/after5.java
@@ -0,0 +1,19 @@
+// "Transform 'i' into final one element array" "true"
+import java.io.*;
+
+class aa {
+ void f() {
+     final int[] i = {9};
+     new Runnable() {
+       public void run() {
+         int p = i[0];
+       }
+     };
+     new Runnable() {
+       public void run() {
+         i[0] = 0;
+       }
+     };
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/after6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/after6.java
new file mode 100644
index 0000000..ef7d694
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/after6.java
@@ -0,0 +1,24 @@
+// "Transform 'i' into final one element array" "true"
+import java.io.*;
+
+class aa {
+ void f() {
+     final int[] i = {4};
+     Runnable runnable = new Runnable() {
+         public void run() {
+             new Runnable() {
+                 public void run() {
+                     int o= i[0];
+                     i[0] =o;
+                 }
+             };
+             new Runnable() {
+                 public void run() {
+                     int o=<caret> i[0];
+                 }
+             };
+         }
+     };
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/after7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/after7.java
new file mode 100644
index 0000000..6f89bb0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/after7.java
@@ -0,0 +1,15 @@
+// "Transform 'i' into final one element array" "true"
+import java.io.*;
+
+class aa {
+ void f() {
+     final int[] i = new int[1];
+     Runnable runnable = new Runnable() {
+         public void run() {
+             <caret>i[0] = 5;
+         }
+     };
+    int f = i[0];
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/after8.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/after8.java
new file mode 100644
index 0000000..6f89bb0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/after8.java
@@ -0,0 +1,15 @@
+// "Transform 'i' into final one element array" "true"
+import java.io.*;
+
+class aa {
+ void f() {
+     final int[] i = new int[1];
+     Runnable runnable = new Runnable() {
+         public void run() {
+             <caret>i[0] = 5;
+         }
+     };
+    int f = i[0];
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/afterAllVars.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/afterAllVars.java
new file mode 100644
index 0000000..7d04659
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/afterAllVars.java
@@ -0,0 +1,15 @@
+// "Make variables final" "true"
+import java.io.*;
+
+class a {
+ void f() {
+     final int i = 0;
+     final int j = 0;
+     new Runnable() {
+       public void run() {
+         int ii = <caret>i + j;
+       }
+     };
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/afterCopyLambdaParam.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/afterCopyLambdaParam.java
new file mode 100644
index 0000000..b8f8895
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/afterCopyLambdaParam.java
@@ -0,0 +1,17 @@
+// "Copy 'o' to temp final variable" "true"
+class Test1 {
+    void foo(){}
+    {
+        Comparable<String> a = o->{
+            o = "";
+            final String finalO = o;
+            new Runnable() {
+                @Override
+                public void run() {
+                    System.out.println(finalO);
+                }
+            }.run();
+            return 0;
+        };
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/afterOneVar.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/afterOneVar.java
new file mode 100644
index 0000000..54e959c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/afterOneVar.java
@@ -0,0 +1,15 @@
+// "Make 'i' final" "true"
+import java.io.*;
+
+class a {
+ void f() {
+     final int i = 0;
+     int j = 0;
+     new Runnable() {
+       public void run() {
+         int ii = <caret>i;
+       }
+     };
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/before1.java
new file mode 100644
index 0000000..dd23210
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/before1.java
@@ -0,0 +1,14 @@
+// "Make 'i' final" "true"
+import java.io.*;
+
+class a {
+ void f() {
+     int i = 0;
+     new Runnable() {
+       public void run() {
+         int ii = <caret>i;
+       }
+     };
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/before10.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/before10.java
new file mode 100644
index 0000000..b0ccfe1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/before10.java
@@ -0,0 +1,17 @@
+// "Copy 'a' to temp final variable" "true"
+public class DoubleTrouble {
+    public void test() {
+        int a = 1;
+        a = 2;
+        class s {
+          public void run() {
+            new Runnable() {
+              public void run() {
+                System.out.println(<caret>a);
+              }
+            }.run();
+          }
+        }
+      }
+
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/before2.java
new file mode 100644
index 0000000..a86dd82
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/before2.java
@@ -0,0 +1,15 @@
+// "Copy 'i' to temp final variable" "true"
+import java.io.*;
+
+class a {
+ void f() {
+     int i = 0;
+     new Runnable() {
+       public void run() {
+         int ii = <caret>i;
+       }
+     };
+     i++;
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/before3.java
new file mode 100644
index 0000000..728e9d4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/before3.java
@@ -0,0 +1,14 @@
+// "Transform 'i' into final one element array" "true"
+import java.io.*;
+
+class a {
+ void f() {
+     int i = 0;
+     new Runnable() {
+       public void run() {
+          <caret>i = 0;
+       }
+     };
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/before4.java
new file mode 100644
index 0000000..496b648
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/before4.java
@@ -0,0 +1,13 @@
+// "Transform 'i' into final one element array" "false"
+import java.io.*;
+
+class aa {
+ void f(int i) {
+     new Runnable() {
+       public void run() {
+         <caret>i = 9;
+       }
+     };
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/before5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/before5.java
new file mode 100644
index 0000000..45e6301
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/before5.java
@@ -0,0 +1,19 @@
+// "Transform 'i' into final one element array" "true"
+import java.io.*;
+
+class aa {
+ void f() {
+     int i=9;
+     new Runnable() {
+       public void run() {
+         int p = <caret>i;
+       }
+     };
+     new Runnable() {
+       public void run() {
+         i = 0;
+       }
+     };
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/before6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/before6.java
new file mode 100644
index 0000000..fc7a866
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/before6.java
@@ -0,0 +1,24 @@
+// "Transform 'i' into final one element array" "true"
+import java.io.*;
+
+class aa {
+ void f() {
+     int i = 4;
+     Runnable runnable = new Runnable() {
+         public void run() {
+             new Runnable() {
+                 public void run() {
+                     int o=i;
+                     i=o;
+                 }
+             };
+             new Runnable() {
+                 public void run() {
+                     int o=<caret>i;
+                 }
+             };
+         }
+     };
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/before7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/before7.java
new file mode 100644
index 0000000..9e6a148
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/before7.java
@@ -0,0 +1,15 @@
+// "Transform 'i' into final one element array" "true"
+import java.io.*;
+
+class aa {
+ void f() {
+     int i;
+     Runnable runnable = new Runnable() {
+         public void run() {
+             <caret>i = 5;
+         }
+     };
+    int f = i;
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/before8.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/before8.java
new file mode 100644
index 0000000..f76f243
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/before8.java
@@ -0,0 +1,15 @@
+// "Transform 'i' into final one element array" "true"
+import java.io.*;
+
+class aa {
+ void f() {
+     final int i;
+     Runnable runnable = new Runnable() {
+         public void run() {
+             <caret>i = 5;
+         }
+     };
+    int f = i;
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/before9.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/before9.java
new file mode 100644
index 0000000..b92cdfc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/before9.java
@@ -0,0 +1,15 @@
+// "Copy 'i' to temp final variable" "false"
+interface I {
+    int f();
+}
+
+class C {
+    void foo() {
+        int i = new I() {
+            public int f() {
+                return <caret>i;
+            }
+
+        }.f();
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/beforeAllVars.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/beforeAllVars.java
new file mode 100644
index 0000000..700aeb4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/beforeAllVars.java
@@ -0,0 +1,15 @@
+// "Make variables final" "true"
+import java.io.*;
+
+class a {
+ void f() {
+     int i = 0;
+     int j = 0;
+     new Runnable() {
+       public void run() {
+         int ii = <caret>i + j;
+       }
+     };
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/beforeCopyLambdaParam.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/beforeCopyLambdaParam.java
new file mode 100644
index 0000000..941d6f9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/beforeCopyLambdaParam.java
@@ -0,0 +1,16 @@
+// "Copy 'o' to temp final variable" "true"
+class Test1 {
+    void foo(){}
+    {
+        Comparable<String> a = o->{
+            o = "";
+            new Runnable() {
+                @Override
+                public void run() {
+                    System.out.println(<caret>o);
+                }
+            }.run();
+            return 0;
+        };
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/beforeOneVar.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/beforeOneVar.java
new file mode 100644
index 0000000..853cffb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal/beforeOneVar.java
@@ -0,0 +1,15 @@
+// "Make 'i' final" "true"
+import java.io.*;
+
+class a {
+ void f() {
+     int i = 0;
+     int j = 0;
+     new Runnable() {
+       public void run() {
+         int ii = <caret>i;
+       }
+     };
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal18/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal18/before1.java
new file mode 100644
index 0000000..db4e780
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mustBeFinal18/before1.java
@@ -0,0 +1,14 @@
+// "Make 'i' final" "false"
+import java.io.*;
+
+class a {
+ void f() {
+     int i = 0;
+     new Runnable() {
+       public void run() {
+         int ii = <caret>i;
+       }
+     };
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/negationBroadScope/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/negationBroadScope/after1.java
new file mode 100644
index 0000000..5b618a1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/negationBroadScope/after1.java
@@ -0,0 +1,6 @@
+// "Change to '!(1 == 1)'" "true"
+public class Foo {
+    void task() {
+        if (<caret>!(1 ==   1)) {}
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/negationBroadScope/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/negationBroadScope/after2.java
new file mode 100644
index 0000000..5185360
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/negationBroadScope/after2.java
@@ -0,0 +1,6 @@
+// "Change to '!(this instanceof Object)'" "true"
+public class Foo {
+    void task() {
+        if (<caret>!(this instanceof Object)) {}
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/negationBroadScope/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/negationBroadScope/before1.java
new file mode 100644
index 0000000..cd2d700
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/negationBroadScope/before1.java
@@ -0,0 +1,6 @@
+// "Change to '!(1 == 1)'" "true"
+public class Foo {
+    void task() {
+        if (!<caret>1 ==   1) {}
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/negationBroadScope/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/negationBroadScope/before2.java
new file mode 100644
index 0000000..499f675
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/negationBroadScope/before2.java
@@ -0,0 +1,6 @@
+// "Change to '!(this instanceof Object)'" "true"
+public class Foo {
+    void task() {
+        if (<caret>!this instanceof Object) {}
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/orderEntry/A/A.iml b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/orderEntry/A/A.iml
new file mode 100644
index 0000000..5bb4d0e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/orderEntry/A/A.iml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module version="4" relativePaths="true" type="JAVA_MODULE">
+  <component name="ModuleRootManager" />
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" name="Lib" level="project" />
+    <orderEntryProperties />
+  </component>
+</module>
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/orderEntry/A/src/x/DoTest.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/orderEntry/A/src/x/DoTest.java
new file mode 100644
index 0000000..2421a35
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/orderEntry/A/src/x/DoTest.java
@@ -0,0 +1,5 @@
+// "Add 'junit.jar' to classpath" "true"
+package x;
+public class DoTest extends TestCase<caret>{
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/orderEntry/A/src/x/DoTest4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/orderEntry/A/src/x/DoTest4.java
new file mode 100644
index 0000000..9856b2d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/orderEntry/A/src/x/DoTest4.java
@@ -0,0 +1,9 @@
+// "Add 'junit.jar' to classpath" "true"
+package x;
+
+public class DoTest4 {
+ @Test<caret>
+ void f() {
+
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/orderEntry/A/src/x/DoTest4junit.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/orderEntry/A/src/x/DoTest4junit.java
new file mode 100644
index 0000000..8a776a6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/orderEntry/A/src/x/DoTest4junit.java
@@ -0,0 +1,9 @@
+// "Add 'junit.jar' to classpath" "true"
+package x;
+
+public class DoTest4junit {
+ @org.ju<caret>nit.Test
+ void f() {
+
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/orderEntry/A/src/x/InA.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/orderEntry/A/src/x/InA.java
new file mode 100644
index 0000000..1f4651d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/orderEntry/A/src/x/InA.java
@@ -0,0 +1,11 @@
+package x;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: cdr
+ * Date: Aug 22, 2006
+ * Time: 11:09:04 AM
+ * To change this template use File | Settings | File Templates.
+ */
+public class InA {
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/orderEntry/B/B.iml b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/orderEntry/B/B.iml
new file mode 100644
index 0000000..2416aa4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/orderEntry/B/B.iml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module version="4" relativePaths="true" type="JAVA_MODULE">
+  <component name="ModuleRootManager" />
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" name="MockJunit" level="project" />
+    <orderEntryProperties />
+  </component>
+</module>
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/orderEntry/B/src/y/AddDependency.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/orderEntry/B/src/y/AddDependency.java
new file mode 100644
index 0000000..ae08fa9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/orderEntry/B/src/y/AddDependency.java
@@ -0,0 +1,13 @@
+// "Add dependency on module 'A'" "true"
+package y;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: cdr
+ * Date: Aug 22, 2006
+ * Time: 11:09:25 AM
+ * To change this template use File | Settings | File Templates.
+ */
+public class AddDependency {
+    InA<caret> a;
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/orderEntry/B/src/y/AddExistingJunit.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/orderEntry/B/src/y/AddExistingJunit.java
new file mode 100644
index 0000000..6998d6b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/orderEntry/B/src/y/AddExistingJunit.java
@@ -0,0 +1,5 @@
+// "Add 'junit.jar' to classpath" "false"
+package y;
+
+public class AddExistingJunit extends <caret>TestCase {
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/orderEntry/B/src/y/AddLibrary.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/orderEntry/B/src/y/AddLibrary.java
new file mode 100644
index 0000000..38eacdf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/orderEntry/B/src/y/AddLibrary.java
@@ -0,0 +1,13 @@
+// "Add library 'Lib' to classpath" "true"
+package y;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: cdr
+ * Date: Aug 22, 2006
+ * Time: 11:13:00 AM
+ * To change this template use File | Settings | File Templates.
+ */
+public class AddLibrary {
+    InLib<caret> l;
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/orderEntry/lib/lib.iml b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/orderEntry/lib/lib.iml
new file mode 100644
index 0000000..9c3a0a6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/orderEntry/lib/lib.iml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module version="4" relativePaths="true" type="JAVA_MODULE">
+  <component name="ModuleRootManager" />
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntryProperties />
+  </component>
+</module>
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/orderEntry/lib/lib.jar b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/orderEntry/lib/lib.jar
new file mode 100644
index 0000000..5b7ca99
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/orderEntry/lib/lib.jar
Binary files differ
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/orderEntry/lib/mockjunit.jar b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/orderEntry/lib/mockjunit.jar
new file mode 100644
index 0000000..88b8cec
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/orderEntry/lib/mockjunit.jar
Binary files differ
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/orderEntry/lib/src/l/InLib.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/orderEntry/lib/src/l/InLib.java
new file mode 100644
index 0000000..c3be4e0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/orderEntry/lib/src/l/InLib.java
@@ -0,0 +1,11 @@
+package l;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: cdr
+ * Date: Aug 22, 2006
+ * Time: 11:10:35 AM
+ * To change this template use File | Settings | File Templates.
+ */
+public class InLib {
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/orderEntry/orderEntry.ipr b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/orderEntry/orderEntry.ipr
new file mode 100644
index 0000000..d0d9446
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/orderEntry/orderEntry.ipr
@@ -0,0 +1,278 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4" relativePaths="false">
+  <component name="AntConfiguration">
+    <defaultAnt bundledAnt="true" />
+  </component>
+  <component name="BuildJarProjectSettings">
+    <option name="BUILD_JARS_ON_MAKE" value="false" />
+  </component>
+  <component name="CodeStyleProjectProfileManger">
+    <option name="PROJECT_PROFILE" />
+    <option name="USE_PROJECT_LEVEL_SETTINGS" value="false" />
+    <scopes />
+    <profiles />
+  </component>
+  <component name="CodeStyleSettingsManager">
+    <option name="PER_PROJECT_SETTINGS" />
+    <option name="USE_PER_PROJECT_SETTINGS" value="false" />
+  </component>
+  <component name="CompilerConfiguration">
+    <option name="DEFAULT_COMPILER" value="Javac" />
+    <option name="DEPLOY_AFTER_MAKE" value="0" />
+    <resourceExtensions>
+      <entry name=".+\.(properties|xml|html|dtd|tld)" />
+      <entry name=".+\.(gif|png|jpeg|jpg)" />
+    </resourceExtensions>
+    <wildcardResourcePatterns>
+      <entry name="?*.properties" />
+      <entry name="?*.xml" />
+      <entry name="?*.gif" />
+      <entry name="?*.png" />
+      <entry name="?*.jpeg" />
+      <entry name="?*.jpg" />
+      <entry name="?*.html" />
+      <entry name="?*.dtd" />
+      <entry name="?*.tld" />
+    </wildcardResourcePatterns>
+  </component>
+  <component name="DataSourceManagerImpl" />
+  <component name="DependenciesAnalyzeManager">
+    <option name="myForwardDirection" value="false" />
+  </component>
+  <component name="DependencyValidationManager" />
+  <component name="EclipseCompilerSettings">
+    <option name="DEBUGGING_INFO" value="true" />
+    <option name="GENERATE_NO_WARNINGS" value="true" />
+    <option name="DEPRECATION" value="false" />
+    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+    <option name="MAXIMUM_HEAP_SIZE" value="128" />
+  </component>
+  <component name="EclipseEmbeddedCompilerSettings">
+    <option name="DEBUGGING_INFO" value="true" />
+    <option name="GENERATE_NO_WARNINGS" value="true" />
+    <option name="DEPRECATION" value="false" />
+    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+    <option name="MAXIMUM_HEAP_SIZE" value="128" />
+  </component>
+  <component name="EntryPointsManager">
+    <entry_points />
+  </component>
+  <component name="ExportToHTMLSettings">
+    <option name="PRINT_LINE_NUMBERS" value="false" />
+    <option name="OPEN_IN_BROWSER" value="false" />
+    <option name="OUTPUT_DIRECTORY" />
+  </component>
+  <component name="GUI Designer component loader factory" />
+  <component name="InspectionProjectProfileManager">
+    <option name="PROJECT_PROFILE" value="Project Default" />
+    <option name="USE_PROJECT_LEVEL_SETTINGS" value="false" />
+    <scopes />
+    <profiles>
+      <profile version="1.0" is_locked="false">
+        <option name="myName" value="Project Default" />
+        <option name="myLocal" value="false" />
+      </profile>
+    </profiles>
+  </component>
+  <component name="JavacSettings">
+    <option name="DEBUGGING_INFO" value="true" />
+    <option name="GENERATE_NO_WARNINGS" value="false" />
+    <option name="DEPRECATION" value="true" />
+    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+    <option name="MAXIMUM_HEAP_SIZE" value="128" />
+  </component>
+  <component name="JavadocGenerationManager">
+    <option name="OUTPUT_DIRECTORY" />
+    <option name="OPTION_SCOPE" value="protected" />
+    <option name="OPTION_HIERARCHY" value="true" />
+    <option name="OPTION_NAVIGATOR" value="true" />
+    <option name="OPTION_INDEX" value="true" />
+    <option name="OPTION_SEPARATE_INDEX" value="true" />
+    <option name="OPTION_DOCUMENT_TAG_USE" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_AUTHOR" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_VERSION" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_DEPRECATED" value="true" />
+    <option name="OPTION_DEPRECATED_LIST" value="true" />
+    <option name="OTHER_OPTIONS" value="" />
+    <option name="HEAP_SIZE" />
+    <option name="LOCALE" />
+    <option name="OPEN_IN_BROWSER" value="true" />
+  </component>
+  <component name="JikesSettings">
+    <option name="JIKES_PATH" value="" />
+    <option name="DEBUGGING_INFO" value="true" />
+    <option name="DEPRECATION" value="true" />
+    <option name="GENERATE_NO_WARNINGS" value="false" />
+    <option name="IS_EMACS_ERRORS_MODE" value="true" />
+    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+  </component>
+  <component name="LogConsolePreferences">
+    <option name="FILTER_ERRORS" value="false" />
+    <option name="FILTER_WARNINGS" value="false" />
+    <option name="FILTER_INFO" value="true" />
+    <option name="CUSTOM_FILTER" />
+  </component>
+  <component name="Palette2">
+    <group name="Swing">
+      <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
+      </item>
+      <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
+        <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
+        <initial-values>
+          <property name="text" value="Button" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="RadioButton" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="CheckBox" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="Label" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
+          <preferred-size width="-1" height="20" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
+      </item>
+    </group>
+  </component>
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/A/A.iml" filepath="$PROJECT_DIR$/A/A.iml" />
+      <module fileurl="file://$PROJECT_DIR$/B/B.iml" filepath="$PROJECT_DIR$/B/B.iml" />
+    </modules>
+  </component>
+  <component name="ProjectRootManager" version="2" assert-keyword="true" jdk-15="true" project-jdk-name="1.5" project-jdk-type="JavaSDK">
+    <output url="file://$PROJECT_DIR$/classes" />
+  </component>
+  <component name="ProjectRunConfigurationManager" />
+  <component name="RmicSettings">
+    <option name="IS_EANABLED" value="false" />
+    <option name="DEBUGGING_INFO" value="true" />
+    <option name="GENERATE_NO_WARNINGS" value="false" />
+    <option name="GENERATE_IIOP_STUBS" value="false" />
+    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+  </component>
+  <component name="StarteamVcsAdapter" />
+  <component name="VssVcs" />
+  <component name="libraryTable">
+    <library name="Lib">
+      <CLASSES>
+        <root url="jar://$PROJECT_DIR$/lib/lib.jar!/" />
+      </CLASSES>
+      <JAVADOC />
+      <SOURCES />
+    </library>
+    <library name="MockJunit">
+      <CLASSES>
+        <root url="jar://$PROJECT_DIR$/lib/mockjunit.jar!/" />
+      </CLASSES>
+      <JAVADOC />
+      <SOURCES />
+    </library>
+  </component>
+  <component name="uidesigner-configuration">
+    <option name="INSTRUMENT_CLASSES" value="true" />
+    <option name="COPY_FORMS_RUNTIME_TO_OUTPUT" value="true" />
+    <option name="DEFAULT_LAYOUT_MANAGER" value="GridLayoutManager" />
+  </component>
+  <UsedPathMacros />
+</project>
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/overrideMethod/afterAbstractMethod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/overrideMethod/afterAbstractMethod.java
new file mode 100644
index 0000000..c9dc72c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/overrideMethod/afterAbstractMethod.java
@@ -0,0 +1,11 @@
+// "Implement method 'foo'" "true"
+abstract class Test {
+  abstract void foo();
+}
+
+class TImple extends Test {
+    @Override
+    void foo() {
+        <selection>//To change body of implemented methods use File | Settings | File Templates.</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/overrideMethod/afterProtectedMethod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/overrideMethod/afterProtectedMethod.java
new file mode 100644
index 0000000..d5f20a3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/overrideMethod/afterProtectedMethod.java
@@ -0,0 +1,11 @@
+// "Override method 'foo'" "true"
+class Test {
+  protected void foo(){}
+}
+
+class TImple extends Test {
+    @Override
+    protected void foo() {
+        <selection>super.foo();    //To change body of overridden methods use File | Settings | File Templates.</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/overrideMethod/afterSkipUnresolvedNullable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/overrideMethod/afterSkipUnresolvedNullable.java
new file mode 100644
index 0000000..f9ef728
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/overrideMethod/afterSkipUnresolvedNullable.java
@@ -0,0 +1,13 @@
+import org.jetbrains.annotations.Nullable;
+
+// "Implement method 'foo'" "true"
+abstract class Test {
+  public abstract void foo(@org.jetbrains.annotations.Nullable String a);
+}
+
+class TImple extends Test {
+    @Override
+    public void foo(@Nullable String a) {
+        <selection>//To change body of implemented methods use File | Settings | File Templates.</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/overrideMethod/beforeAbstractMethod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/overrideMethod/beforeAbstractMethod.java
new file mode 100644
index 0000000..a08094e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/overrideMethod/beforeAbstractMethod.java
@@ -0,0 +1,6 @@
+// "Implement method 'foo'" "true"
+abstract class Test {
+  abstract void f<caret>oo();
+}
+
+class TImple extends Test {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/overrideMethod/beforeAbstractMethod1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/overrideMethod/beforeAbstractMethod1.java
new file mode 100644
index 0000000..8230fbc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/overrideMethod/beforeAbstractMethod1.java
@@ -0,0 +1,8 @@
+// "Implement method 'foo'" "false"
+abstract class Test {
+  abstract void f<caret>oo();
+}
+
+class TImple extends Test {
+  void foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/overrideMethod/beforeAbstractMethod2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/overrideMethod/beforeAbstractMethod2.java
new file mode 100644
index 0000000..bb3cb67
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/overrideMethod/beforeAbstractMethod2.java
@@ -0,0 +1,4 @@
+// "Implement method 'foo'" "false"
+abstract class Test {
+  abstract void f<caret>oo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/overrideMethod/beforeExistButPrivate.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/overrideMethod/beforeExistButPrivate.java
new file mode 100644
index 0000000..d6688a0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/overrideMethod/beforeExistButPrivate.java
@@ -0,0 +1,8 @@
+// "Implement method 'foo'" "false"
+abstract class Test {
+  public abstract void f<caret>oo();
+}
+
+class TImple extends Test {
+  private void foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/overrideMethod/beforePrivateMethod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/overrideMethod/beforePrivateMethod.java
new file mode 100644
index 0000000..f06ad32
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/overrideMethod/beforePrivateMethod.java
@@ -0,0 +1,6 @@
+// "Override method 'foo'" "false"
+class Test {
+  private void f<caret>oo(){}
+}
+
+class TImple extends Test {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/overrideMethod/beforeProtectedMethod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/overrideMethod/beforeProtectedMethod.java
new file mode 100644
index 0000000..239d850
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/overrideMethod/beforeProtectedMethod.java
@@ -0,0 +1,6 @@
+// "Override method 'foo'" "true"
+class Test {
+  protected void f<caret>oo(){}
+}
+
+class TImple extends Test {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/overrideMethod/beforeProtectedMethodCaretInside.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/overrideMethod/beforeProtectedMethodCaretInside.java
new file mode 100644
index 0000000..662688e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/overrideMethod/beforeProtectedMethodCaretInside.java
@@ -0,0 +1,6 @@
+// "Override method 'foo'" "false"
+class Test {
+  protected void foo(){<caret>}
+}
+
+class TImple extends Test {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/overrideMethod/beforeSkipUnresolvedNullable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/overrideMethod/beforeSkipUnresolvedNullable.java
new file mode 100644
index 0000000..92d515e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/overrideMethod/beforeSkipUnresolvedNullable.java
@@ -0,0 +1,6 @@
+// "Implement method 'foo'" "true"
+abstract class Test {
+  public abstract void f<caret>oo(@org.jetbrains.annotations.Nullable String a);
+}
+
+class TImple extends Test {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/overrideMethod/beforeStaticMethod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/overrideMethod/beforeStaticMethod.java
new file mode 100644
index 0000000..0b55560
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/overrideMethod/beforeStaticMethod.java
@@ -0,0 +1,6 @@
+// "Override method 'foo'" "false"
+abstract class Test {
+  protected static void fo<caret>o(){}
+}
+
+class TImple extends Test {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/permuteArguments/afterCtr.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/permuteArguments/afterCtr.java
new file mode 100644
index 0000000..b721bf3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/permuteArguments/afterCtr.java
@@ -0,0 +1,7 @@
+// "Permute arguments" "true"
+public class S {
+    public S(int i, String s){}
+    void f() {
+        new S(1, "")<caret>;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/permuteArguments/afterShiftLeft.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/permuteArguments/afterShiftLeft.java
new file mode 100644
index 0000000..61724d8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/permuteArguments/afterShiftLeft.java
@@ -0,0 +1,6 @@
+// "Permute arguments" "true"
+public class S {
+    void f(S k, int i, String s, Object o) {
+        f(this, 1, "", new Object());<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/permuteArguments/afterShiftRight.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/permuteArguments/afterShiftRight.java
new file mode 100644
index 0000000..69ffa73
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/permuteArguments/afterShiftRight.java
@@ -0,0 +1,7 @@
+// "Permute arguments" "true"
+public class S {
+    void f(S k, int i, String s, Object o) {
+        f(this,"",new Object(),1);
+        <caret>f(this, 1, "", new Object());
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/permuteArguments/afterSwap.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/permuteArguments/afterSwap.java
new file mode 100644
index 0000000..2f520f4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/permuteArguments/afterSwap.java
@@ -0,0 +1,6 @@
+// "Permute arguments" "true"
+public class S {
+    void f(S k, int i, String s, Object o) {
+        f(this,1, "",new Object());<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/permuteArguments/beforeCtr.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/permuteArguments/beforeCtr.java
new file mode 100644
index 0000000..2960dea
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/permuteArguments/beforeCtr.java
@@ -0,0 +1,7 @@
+// "Permute arguments" "true"
+public class S {
+    public S(int i, String s){}
+    void f() {
+        new S("",1)<caret>;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/permuteArguments/beforeShiftLeft.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/permuteArguments/beforeShiftLeft.java
new file mode 100644
index 0000000..6adadc9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/permuteArguments/beforeShiftLeft.java
@@ -0,0 +1,6 @@
+// "Permute arguments" "true"
+public class S {
+    void f(S k, int i, String s, Object o) {
+        f(this,"",new Object(),1);<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/permuteArguments/beforeShiftRight.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/permuteArguments/beforeShiftRight.java
new file mode 100644
index 0000000..9bf79a2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/permuteArguments/beforeShiftRight.java
@@ -0,0 +1,7 @@
+// "Permute arguments" "true"
+public class S {
+    void f(S k, int i, String s, Object o) {
+        f(this,"",new Object(),1);
+        <caret>f(this,new Object(),1,"");
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/permuteArguments/beforeSwap.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/permuteArguments/beforeSwap.java
new file mode 100644
index 0000000..38502e5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/permuteArguments/beforeSwap.java
@@ -0,0 +1,6 @@
+// "Permute arguments" "true"
+public class S {
+    void f(S k, int i, String s, Object o) {
+        f("",1,this,new Object());<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/pullUp/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/pullUp/after1.java
new file mode 100644
index 0000000..8a3a824
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/pullUp/after1.java
@@ -0,0 +1,9 @@
+// "Pull method 'foo' to 'Int'" "true"
+public class Test implements Int {
+    @Override
+    public void foo(){}
+}
+
+interface Int {
+    void foo();
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/pullUp/after3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/pullUp/after3.java
new file mode 100644
index 0000000..f6fc3da
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/pullUp/after3.java
@@ -0,0 +1,15 @@
+// "Pull method 'foo' up and make it abstract" "true"
+public class Test{
+    void main(){
+        new Int(){
+            @Override
+            void foo(){
+
+            }
+        };
+    }
+}
+
+abstract class Int {
+    abstract void foo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/pullUp/after6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/pullUp/after6.java
new file mode 100644
index 0000000..6934fb7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/pullUp/after6.java
@@ -0,0 +1,14 @@
+// "Pull method 'foo' to 'Foo' and make it abstract" "true"
+public class Test {
+  void bar() {
+    abstract class Foo {
+        abstract void foo();
+    }
+    class FooImpl extends Foo {
+      @Override
+      void foo(){}
+    }
+  }
+}
+
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/pullUp/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/pullUp/before1.java
new file mode 100644
index 0000000..75cbb92d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/pullUp/before1.java
@@ -0,0 +1,7 @@
+// "Pull method 'foo' to 'Int'" "true"
+public class Test implements Int {
+    @Overr<caret>ide
+    void foo(){}
+}
+
+interface Int {}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/pullUp/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/pullUp/before2.java
new file mode 100644
index 0000000..4e95750
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/pullUp/before2.java
@@ -0,0 +1,7 @@
+// "Pull method 'foo' to 'List'" "false"
+import java.util.List;
+
+public abstract class Test implements List{
+    @Overr<caret>ide
+    void foo(){}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/pullUp/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/pullUp/before3.java
new file mode 100644
index 0000000..f748ab9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/pullUp/before3.java
@@ -0,0 +1,13 @@
+// "Pull method 'foo' up and make it abstract" "true"
+public class Test{
+    void main(){
+        new Int(){
+            @Overr<caret>ide
+            void foo(){
+
+            }
+        };
+    }
+}
+
+class Int {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/pullUp/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/pullUp/before4.java
new file mode 100644
index 0000000..4dbd66c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/pullUp/before4.java
@@ -0,0 +1,13 @@
+// "Extract interface" "false"
+public class Test{
+    void main(){
+        new Int(){
+            @Overr<caret>ide
+            void foo(){
+
+            }
+        };
+    }
+}
+
+class Int {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/pullUp/before5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/pullUp/before5.java
new file mode 100644
index 0000000..2dd219f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/pullUp/before5.java
@@ -0,0 +1,7 @@
+import java.util.ArrayList;
+public abstract class Test extends ArrayList<String> implements Int {
+    @Overr<caret>ide
+    void foo(){}
+}
+
+interface Int {}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/pullUp/before6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/pullUp/before6.java
new file mode 100644
index 0000000..6cefa7b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/pullUp/before6.java
@@ -0,0 +1,12 @@
+// "Pull method 'foo' to 'Foo' and make it abstract" "true"
+public class Test {
+  void bar() {
+    class Foo {}
+    class FooImpl extends Foo {
+      @Overr<caret>ide
+      void foo(){}
+    }
+  }
+}
+
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/pushConditionInCall/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/pushConditionInCall/after1.java
new file mode 100644
index 0000000..360dda3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/pushConditionInCall/after1.java
@@ -0,0 +1,7 @@
+// "Push condition 'b' inside method call" "true"
+class Foo {
+  void bar(boolean b){
+    String s = foo(b ? "true" : "false");
+  }
+  String foo(String p) {return p;}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/pushConditionInCall/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/pushConditionInCall/before1.java
new file mode 100644
index 0000000..02705a2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/pushConditionInCall/before1.java
@@ -0,0 +1,7 @@
+// "Push condition 'b' inside method call" "true"
+class Foo {
+  void bar(boolean b){
+    String s = b <caret>? foo("true") : foo("false");
+  }
+  String foo(String p) {return p;}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/pushConditionInCall/beforeDifferentMethods.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/pushConditionInCall/beforeDifferentMethods.java
new file mode 100644
index 0000000..6cd06d4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/pushConditionInCall/beforeDifferentMethods.java
@@ -0,0 +1,8 @@
+// "Push condition 'b' inside method call" "false"
+class Foo {
+  void bar(boolean b){
+    String s = b <caret>? foo("true") : foo(false);
+  }
+  String foo(String p) {return p;}
+  String foo(boolean b) {return "false";}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/pushConditionInCall/beforeMultipleArgs.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/pushConditionInCall/beforeMultipleArgs.java
new file mode 100644
index 0000000..5e99fb7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/pushConditionInCall/beforeMultipleArgs.java
@@ -0,0 +1,7 @@
+// "Push condition 'b' inside method call" "false"
+class Foo {
+  void bar(boolean b){
+    String s = b <caret>? foo("true", true) : foo("false", false);
+  }
+  String foo(String p, boolean b) {return p;}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/qualifyThis/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/qualifyThis/after1.java
new file mode 100644
index 0000000..8a65f89
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/qualifyThis/after1.java
@@ -0,0 +1,10 @@
+// "Qualify this expression with 'Test'" "true"
+class Test {
+  void foo(Test t){}
+  class Foo {
+    Foo() {
+      foo(Test.this);
+    }
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/qualifyThis/after5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/qualifyThis/after5.java
new file mode 100644
index 0000000..c270a5e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/qualifyThis/after5.java
@@ -0,0 +1,18 @@
+// "Qualify this expression with 'Test.Foo'" "true"
+class Test {
+  void foo(Foo m) {
+  }
+
+
+  class Foo {
+    void bar() {
+      new Runnable() {
+        @Override
+        public void run() {
+          foo(Foo.this);
+        }
+      }.run();
+    }
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/qualifyThis/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/qualifyThis/before1.java
new file mode 100644
index 0000000..f4a9833
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/qualifyThis/before1.java
@@ -0,0 +1,10 @@
+// "Qualify this expression with 'Test'" "true"
+class Test {
+  void foo(Test t){}
+  class Foo {
+    Foo() {
+      foo(thi<caret>s);
+    }
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/qualifyThis/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/qualifyThis/before2.java
new file mode 100644
index 0000000..13f6aac
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/qualifyThis/before2.java
@@ -0,0 +1,10 @@
+// "Qualify this expression with 'Test'" "false"
+class Test {
+  void foo(Test t){}
+  static class Foo {
+    Foo() {
+      foo(thi<caret>s);
+    }
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/qualifyThis/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/qualifyThis/before3.java
new file mode 100644
index 0000000..f794b9d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/qualifyThis/before3.java
@@ -0,0 +1,10 @@
+// "Qualify this expression with 'Test'" "false"
+class Test {
+  void foo(String t){}
+  static class Foo {
+    Foo() {
+      foo(thi<caret>s);
+    }
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/qualifyThis/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/qualifyThis/before4.java
new file mode 100644
index 0000000..d973a36
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/qualifyThis/before4.java
@@ -0,0 +1,24 @@
+// "Qualify this expression with 'Test.Foo'" "false"
+class Test {
+  public void main() {
+    new Foo() {
+      void bar() {
+        new Runnable() {
+          @Override
+          public void run() {
+            foo(th<caret>is);
+          }
+        }.run();
+      }
+    }.toString();
+  }
+
+  void foo(Foo m) {
+  }
+
+
+  class Foo {
+
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/qualifyThis/before5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/qualifyThis/before5.java
new file mode 100644
index 0000000..757174d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/qualifyThis/before5.java
@@ -0,0 +1,18 @@
+// "Qualify this expression with 'Test.Foo'" "true"
+class Test {
+  void foo(Foo m) {
+  }
+
+
+  class Foo {
+    void bar() {
+      new Runnable() {
+        @Override
+        public void run() {
+          foo(th<caret>is);
+        }
+      }.run();
+    }
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/qualifyWithThisInSuperCall/afterQualifyWithThis.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/qualifyWithThisInSuperCall/afterQualifyWithThis.java
new file mode 100644
index 0000000..3a51862
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/qualifyWithThisInSuperCall/afterQualifyWithThis.java
@@ -0,0 +1,15 @@
+// "Qualify with Test.this" "true"
+class Test {
+  String myStr;
+  class Foo extends Super {
+    Foo() {
+      super(Test.this.myStr);
+    }
+  }
+}
+
+class Super {
+  protected String myStr;
+  Super(String s) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/qualifyWithThisInSuperCall/beforeAlreadyQualified.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/qualifyWithThisInSuperCall/beforeAlreadyQualified.java
new file mode 100644
index 0000000..516b429
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/qualifyWithThisInSuperCall/beforeAlreadyQualified.java
@@ -0,0 +1,15 @@
+// "Qualify with Test.this" "false"
+class Test {
+  String myStr;
+  class Foo extends Super {
+    Foo(Test t) {
+      super(t.my<caret>Str);
+    }
+  }
+}
+
+class Super {
+  protected String myStr;
+  Super(String s) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/qualifyWithThisInSuperCall/beforeNoCandidate.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/qualifyWithThisInSuperCall/beforeNoCandidate.java
new file mode 100644
index 0000000..8ebd043
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/qualifyWithThisInSuperCall/beforeNoCandidate.java
@@ -0,0 +1,14 @@
+// "Qualify with Test.this" "false"
+class Test {
+  class Foo extends Super {
+    Foo() {
+      super(my<caret>Str);
+    }
+  }
+}
+
+class Super {
+  protected String myStr;
+  Super(String s) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/qualifyWithThisInSuperCall/beforeQualifyWithThis.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/qualifyWithThisInSuperCall/beforeQualifyWithThis.java
new file mode 100644
index 0000000..9d579aa
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/qualifyWithThisInSuperCall/beforeQualifyWithThis.java
@@ -0,0 +1,15 @@
+// "Qualify with Test.this" "true"
+class Test {
+  String myStr;
+  class Foo extends Super {
+    Foo() {
+      super(my<caret>Str);
+    }
+  }
+}
+
+class Super {
+  protected String myStr;
+  Super(String s) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/qualifyWithThisInSuperCall/beforeThisInaccessible.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/qualifyWithThisInSuperCall/beforeThisInaccessible.java
new file mode 100644
index 0000000..fa5ba50
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/qualifyWithThisInSuperCall/beforeThisInaccessible.java
@@ -0,0 +1,15 @@
+// "Qualify with Test.this" "false"
+class Test {
+  String myStr;
+  static class Foo extends Super {
+    Foo() {
+      super(my<caret>Str);
+    }
+  }
+}
+
+class Super {
+  protected String myStr;
+  Super(String s) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantLambdaParameterType/afterAssignment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantLambdaParameterType/afterAssignment.java
new file mode 100644
index 0000000..dd9055e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantLambdaParameterType/afterAssignment.java
@@ -0,0 +1,6 @@
+// "Remove redundant types" "true"
+class Test {
+  {
+    Comparable<String> r = o -> 1;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantLambdaParameterType/afterCallWithTypeArgs.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantLambdaParameterType/afterCallWithTypeArgs.java
new file mode 100644
index 0000000..e1b6195
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantLambdaParameterType/afterCallWithTypeArgs.java
@@ -0,0 +1,16 @@
+// "Remove redundant types" "true"
+class Test2 {
+    class Y<T>{
+        T t;
+    }
+
+    interface I<X> {
+        X foo(Y<X> list);
+    }
+
+    static <T> I<T> bar(I<T> i){return i;}
+
+    {
+        Test2.<String>bar(y -> y.t);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantLambdaParameterType/afterInferredFromOtherArgs.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantLambdaParameterType/afterInferredFromOtherArgs.java
new file mode 100644
index 0000000..0b4c56a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantLambdaParameterType/afterInferredFromOtherArgs.java
@@ -0,0 +1,15 @@
+// "Remove redundant types" "true"
+class ReturnTypeCompatibility {
+
+    interface I1<L> {
+        L m(L x);
+    }
+
+    static <P> void call(P p, I1<P> i2) {
+        i2.m(null);
+    }
+
+    public static void main(String[] args) {
+        call("",  i -> "");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantLambdaParameterType/beforeAssignment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantLambdaParameterType/beforeAssignment.java
new file mode 100644
index 0000000..35f16c7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantLambdaParameterType/beforeAssignment.java
@@ -0,0 +1,6 @@
+// "Remove redundant types" "true"
+class Test {
+  {
+    Comparable<String> r = (St<caret>ring o) -> 1;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantLambdaParameterType/beforeAssignmentNoParams.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantLambdaParameterType/beforeAssignmentNoParams.java
new file mode 100644
index 0000000..5aa85e4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantLambdaParameterType/beforeAssignmentNoParams.java
@@ -0,0 +1,6 @@
+// "Remove redundant types" "false"
+class Test {
+  {
+    Runnable r = (<caret>) -> {};
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantLambdaParameterType/beforeAssignmentNoTypes.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantLambdaParameterType/beforeAssignmentNoTypes.java
new file mode 100644
index 0000000..ebe9f29
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantLambdaParameterType/beforeAssignmentNoTypes.java
@@ -0,0 +1,6 @@
+// "Remove redundant types" "false"
+class Test {
+  {
+    Comparable<String> r = <caret>o -> 1;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantLambdaParameterType/beforeCallNoTypeArgs.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantLambdaParameterType/beforeCallNoTypeArgs.java
new file mode 100644
index 0000000..094dbbe
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantLambdaParameterType/beforeCallNoTypeArgs.java
@@ -0,0 +1,16 @@
+// "Remove redundant types" "false"
+class Test2 {
+    class Y<T>{
+        T t;
+    }
+
+    interface I<X> {
+        X foo(Y<X> list);
+    }
+
+    static <T> I<T> bar(I<T> i){return i;}
+
+    {
+        Test2.bar((Y<St<caret>ring> y) -> y.t);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantLambdaParameterType/beforeCallNoTypeArgs1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantLambdaParameterType/beforeCallNoTypeArgs1.java
new file mode 100644
index 0000000..64eb6e2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantLambdaParameterType/beforeCallNoTypeArgs1.java
@@ -0,0 +1,13 @@
+// "Remove redundant types" "false"
+class NoInferenceResult {
+    interface I<A, B>  {
+      B foo(A a);
+    }
+
+    <A, B> I<A, B> m(I<A, B>  f) { return null; }
+
+    void test() {
+        m((Stri<caret>ng s1) -> s1.length());
+        m((String s1) -> s1);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantLambdaParameterType/beforeCallWithTypeArgs.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantLambdaParameterType/beforeCallWithTypeArgs.java
new file mode 100644
index 0000000..ca48d5d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantLambdaParameterType/beforeCallWithTypeArgs.java
@@ -0,0 +1,16 @@
+// "Remove redundant types" "true"
+class Test2 {
+    class Y<T>{
+        T t;
+    }
+
+    interface I<X> {
+        X foo(Y<X> list);
+    }
+
+    static <T> I<T> bar(I<T> i){return i;}
+
+    {
+        Test2.<String>bar((Y<St<caret>ring> y) -> y.t);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantLambdaParameterType/beforeInferredFromOtherArgs.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantLambdaParameterType/beforeInferredFromOtherArgs.java
new file mode 100644
index 0000000..abf7228
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantLambdaParameterType/beforeInferredFromOtherArgs.java
@@ -0,0 +1,15 @@
+// "Remove redundant types" "true"
+class ReturnTypeCompatibility {
+
+    interface I1<L> {
+        L m(L x);
+    }
+
+    static <P> void call(P p, I1<P> i2) {
+        i2.m(null);
+    }
+
+    public static void main(String[] args) {
+        call("",  (Str<caret>ing  i) -> "");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantLambdaParameterType/beforeTypeParam.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantLambdaParameterType/beforeTypeParam.java
new file mode 100644
index 0000000..ae481bb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantLambdaParameterType/beforeTypeParam.java
@@ -0,0 +1,10 @@
+// "Remove redundant types" "false"
+class Test3 {
+  interface I<Y> {
+    void m(Y y);
+  }
+
+  static <T> void bar(I<T> i, List<T> l){
+    bar((<caret>T x) -> {}, null);
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/after1.java
new file mode 100644
index 0000000..516ff79
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/after1.java
@@ -0,0 +1,13 @@
+// "Remove 'unchecked' suppression" "true"
+import java.util.ArrayList;
+
+public class Test {
+  @SafeVarargs
+  static <T> void foo(T... t){
+  }
+
+  void foo() {
+      foo(new ArrayList<String>());
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/after2.java
new file mode 100644
index 0000000..369ca37
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/after2.java
@@ -0,0 +1,14 @@
+// "Remove 'unchecked' suppression" "true"
+import java.util.ArrayList;
+
+public class Test {
+  @SafeVarargs
+  static <T> void foo(T... t){
+  }
+
+  void foo() {
+      // noinspection blah-blah-toolid
+    foo(new ArrayList<String>());
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/after4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/after4.java
new file mode 100644
index 0000000..0c1a695
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/after4.java
@@ -0,0 +1,14 @@
+// "Remove 'unchecked' suppression" "true"
+import java.util.*;
+
+public class Test {
+  @SafeVarargs
+  static <T> List<T> foo(T... t){
+    return null;
+  }
+
+  void foo() {
+      List<ArrayList<String>> list = foo(new ArrayList<String>());
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/after5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/after5.java
new file mode 100644
index 0000000..e59eac4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/after5.java
@@ -0,0 +1,14 @@
+// "Remove 'unchecked' suppression" "true"
+import java.util.*;
+
+public class Test {
+  @SafeVarargs
+  static <T> List<T> foo(T... t){
+    return null;
+  }
+
+  void foo() {
+    List<ArrayList<String>> list = foo(new ArrayList<String>());
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/after6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/after6.java
new file mode 100644
index 0000000..e59eac4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/after6.java
@@ -0,0 +1,14 @@
+// "Remove 'unchecked' suppression" "true"
+import java.util.*;
+
+public class Test {
+  @SafeVarargs
+  static <T> List<T> foo(T... t){
+    return null;
+  }
+
+  void foo() {
+    List<ArrayList<String>> list = foo(new ArrayList<String>());
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/after9.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/after9.java
new file mode 100644
index 0000000..3a4bb6d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/after9.java
@@ -0,0 +1,15 @@
+// "Remove 'unchecked' suppression" "true"
+import java.util.*;
+
+@SuppressWarnings({"bla-blah-toolid"})
+public class Test {
+  @SafeVarargs
+  static <T> List<T> foo(T... t){
+    return null;
+  }
+
+  void foo() {
+    List<ArrayList<String>> list = foo(new ArrayList<String>());
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before1.java
new file mode 100644
index 0000000..e87940e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before1.java
@@ -0,0 +1,14 @@
+// "Remove 'unchecked' suppression" "true"
+import java.util.ArrayList;
+
+public class Test {
+  @SafeVarargs
+  static <T> void foo(T... t){
+  }
+
+  void fo<caret>o() {
+    //noinspection unchecked
+    foo(new ArrayList<String>());
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before10.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before10.java
new file mode 100644
index 0000000..cdc84930
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before10.java
@@ -0,0 +1,11 @@
+// "Remove 'unchecked' suppression" "false"
+
+@SuppressWarnings({"unchecked", "bla-blah-toolid"})
+public enum Planet {
+  MERCURY(),
+  VENUS();
+
+  <T> Plan<caret>et(T... ts) {
+  }
+
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before11.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before11.java
new file mode 100644
index 0000000..847ae2b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before11.java
@@ -0,0 +1,19 @@
+// "Remove 'unchecked' suppression" "false"
+import java.util.*;
+
+public class SampleSafeVarargs {
+
+    @SafeVarargs
+    static <T> List<T> asList(T... tt) {
+        System.out.println(tt);
+        return null;
+    }
+
+    @SuppressWarnings({"unchecked"})
+    void foo() {
+        asList(new ArrayList<String>());
+        List<Object> l ;
+        ArrayList strings = new ArrayList<String>();
+        l = strings;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before2.java
new file mode 100644
index 0000000..837351a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before2.java
@@ -0,0 +1,14 @@
+// "Remove 'unchecked' suppression" "true"
+import java.util.ArrayList;
+
+public class Test {
+  @SafeVarargs
+  static <T> void foo(T... t){
+  }
+
+  void f<caret>oo() {
+    //noinspection unchecked,blah-blah-toolid
+    foo(new ArrayList<String>());
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before3.java
new file mode 100644
index 0000000..b4107cf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before3.java
@@ -0,0 +1,19 @@
+// "Remove 'unchecked' suppression" "false"
+import java.util.*;
+
+public class Test {
+  @SafeVarargs
+  static <T> List<T> foo(T... t){
+    return null;
+  }
+
+  static <T> List<T> foo1(T... t){
+    return null;
+  }
+
+  void fo<caret>o() {
+    //noinspection unchecked
+    foo(new ArrayList<String>()).addAll(foo1(new ArrayList<String>()));
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before4.java
new file mode 100644
index 0000000..a6dc51d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before4.java
@@ -0,0 +1,15 @@
+// "Remove 'unchecked' suppression" "true"
+import java.util.*;
+
+public class Test {
+  @SafeVarargs
+  static <T> List<T> foo(T... t){
+    return null;
+  }
+
+  void fo<caret>o() {
+    //noinspection unchecked
+    List<ArrayList<String>> list = foo(new ArrayList<String>());
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before5.java
new file mode 100644
index 0000000..b294d2d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before5.java
@@ -0,0 +1,15 @@
+// "Remove 'unchecked' suppression" "true"
+import java.util.*;
+
+public class Test {
+  @SafeVarargs
+  static <T> List<T> foo(T... t){
+    return null;
+  }
+
+  @SuppressWarnings("unchecked")
+  void fo<caret>o() {
+    List<ArrayList<String>> list = foo(new ArrayList<String>());
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before6.java
new file mode 100644
index 0000000..60f4268
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before6.java
@@ -0,0 +1,15 @@
+// "Remove 'unchecked' suppression" "true"
+import java.util.*;
+
+@SuppressWarnings("unchecked")
+public class Te<caret>st {
+  @SafeVarargs
+  static <T> List<T> foo(T... t){
+    return null;
+  }
+
+  void foo() {
+    List<ArrayList<String>> list = foo(new ArrayList<String>());
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before7.java
new file mode 100644
index 0000000..da98e46
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before7.java
@@ -0,0 +1,19 @@
+// "Remove 'unchecked' suppression" "false"
+import java.util.*;
+
+public class Test {
+  @SafeVarargs
+  static <T> List<T> foo(T... t){
+    return null;
+  }
+
+  static <T> List<T> foo1(T... t){
+    return null;
+  }
+
+  @SuppressWarnings("unchecked")
+  void foo() {
+    foo(new ArrayList<String>()).addAll(foo1(new ArrayList<String>);
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before8.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before8.java
new file mode 100644
index 0000000..382b201
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before8.java
@@ -0,0 +1,15 @@
+// "Remove 'unchecked' suppression" "false"
+import java.util.*;
+
+@SuppressWarnings("ALL")
+public class Te<caret>st {
+  @SafeVarargs
+  static <T> List<T> foo(T... t){
+    return null;
+  }
+
+  void foo() {
+    List<ArrayList<String>> list = foo(new ArrayList<String>());
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before9.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before9.java
new file mode 100644
index 0000000..e34ee0e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before9.java
@@ -0,0 +1,15 @@
+// "Remove 'unchecked' suppression" "true"
+import java.util.*;
+
+@SuppressWarnings({"unchecked", "bla-blah-toolid"})
+public class Tes<caret>t {
+  @SafeVarargs
+  static <T> List<T> foo(T... t){
+    return null;
+  }
+
+  void foo() {
+    List<ArrayList<String>> list = foo(new ArrayList<String>());
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeNewQualifier/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeNewQualifier/after1.java
new file mode 100644
index 0000000..1d63a53
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeNewQualifier/after1.java
@@ -0,0 +1,14 @@
+// "Remove qualifier" "true"
+
+class i2 {
+    class A {
+        A(b b) {
+          <caret>new b.c();
+        }
+    }
+
+    static class b {
+      static class c {}
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeNewQualifier/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeNewQualifier/after2.java
new file mode 100644
index 0000000..563eefc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeNewQualifier/after2.java
@@ -0,0 +1,9 @@
+// "Remove qualifier" "true"
+
+    static class A {
+        static class B {
+        }
+        {
+            <caret>new B();
+        }
+    }
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeNewQualifier/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeNewQualifier/before1.java
new file mode 100644
index 0000000..ebfb4ed
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeNewQualifier/before1.java
@@ -0,0 +1,14 @@
+// "Remove qualifier" "true"
+
+class i2 {
+    class A {
+        A(b b) {
+          <caret>b.new c();
+        }
+    }
+
+    static class b {
+      static class c {}
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeNewQualifier/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeNewQualifier/before2.java
new file mode 100644
index 0000000..0fa5b1f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeNewQualifier/before2.java
@@ -0,0 +1,23 @@
+// "Remove qualifier" "true"
+
+    static class A {
+        static class B {
+        }
+        {
+            new A() {
+               void f() {
+
+
+
+
+
+                     <caret>
+
+
+
+
+               }
+             }
+            .new B();
+        }
+    }
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeQualifier/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeQualifier/after1.java
new file mode 100644
index 0000000..77e2e34
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeQualifier/after1.java
@@ -0,0 +1,15 @@
+// "Remove Qualifier" "true"
+class E {
+    class Outer {
+    class S {
+        public static final int SS = 0;
+    }
+    }
+
+    Outer f() {
+        int s = <caret>Outer.S.SS;
+        // int s1 = <error descr="Expected class or package">this</error>.Outer.S.SS;
+        int s2 = Outer.S.SS;
+        return null;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeQualifier/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeQualifier/after2.java
new file mode 100644
index 0000000..53e1fed
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeQualifier/after2.java
@@ -0,0 +1,14 @@
+// "Remove Qualifier" "true"
+class E {
+    class Outer {
+        public static final int SS = 0;
+    class S {
+        public static final int SS = 0;
+    }
+    }
+
+    Outer f() {
+        int s = <caret>Outer.SS;
+        return null;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeQualifier/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeQualifier/before1.java
new file mode 100644
index 0000000..d4ef0a3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeQualifier/before1.java
@@ -0,0 +1,15 @@
+// "Remove Qualifier" "true"
+class E {
+    class Outer {
+    class S {
+        public static final int SS = 0;
+    }
+    }
+
+    Outer f() {
+        int s = <caret>f().S.SS;
+        // int s1 = <error descr="Expected class or package">this</error>.Outer.S.SS;
+        int s2 = Outer.S.SS;
+        return null;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeQualifier/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeQualifier/before2.java
new file mode 100644
index 0000000..8f9e091
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeQualifier/before2.java
@@ -0,0 +1,14 @@
+// "Remove Qualifier" "true"
+class E {
+    class Outer {
+        public static final int SS = 0;
+    class S {
+        public static final int SS = 0;
+    }
+    }
+
+    Outer f() {
+        int s = this<caret>.Outer.SS;
+        return null;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeRedundantArgument/afterBoxed.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeRedundantArgument/afterBoxed.java
new file mode 100644
index 0000000..71cdd4d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeRedundantArgument/afterBoxed.java
@@ -0,0 +1,9 @@
+// "Remove redundant arguments to call 'method(int, Integer)'" "true"
+class A {
+  public A() {
+    method(new Integer(5), 5);
+  }
+
+  private void method(int i, Integer i2) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeRedundantArgument/afterGeneric.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeRedundantArgument/afterGeneric.java
new file mode 100644
index 0000000..ae462e0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeRedundantArgument/afterGeneric.java
@@ -0,0 +1,9 @@
+// "Remove redundant arguments to call 'method(int, T)'" "true"
+class A {
+  public A() {
+    method(5, new Exception());
+  }
+
+  private <T extends Exception> void method(int i, T t) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeRedundantArgument/afterSimple.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeRedundantArgument/afterSimple.java
new file mode 100644
index 0000000..7da7927
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeRedundantArgument/afterSimple.java
@@ -0,0 +1,9 @@
+// "Remove redundant arguments to call 'method(int, String)'" "true"
+class A {
+  public A() {
+    method(5, "");
+  }
+
+  private void method(int s, String s2) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeRedundantArgument/beforeBoxed.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeRedundantArgument/beforeBoxed.java
new file mode 100644
index 0000000..f53689b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeRedundantArgument/beforeBoxed.java
@@ -0,0 +1,9 @@
+// "Remove redundant arguments to call 'method(int, Integer)'" "true"
+class A {
+  public A() {
+    method(new Integer(5), 5,<caret> "", new String());
+  }
+
+  private void method(int i, Integer i2) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeRedundantArgument/beforeGeneric.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeRedundantArgument/beforeGeneric.java
new file mode 100644
index 0000000..e3df640
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeRedundantArgument/beforeGeneric.java
@@ -0,0 +1,9 @@
+// "Remove redundant arguments to call 'method(int, T)'" "true"
+class A {
+  public A() {
+    method(5,<caret> new Exception(), new Exception(), "", 3);
+  }
+
+  private <T extends Exception> void method(int i, T t) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeRedundantArgument/beforeSimple.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeRedundantArgument/beforeSimple.java
new file mode 100644
index 0000000..9cc0946
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeRedundantArgument/beforeSimple.java
@@ -0,0 +1,9 @@
+// "Remove redundant arguments to call 'method(int, String)'" "true"
+class A {
+  public A() {
+    method(5, "",<caret> 10);
+  }
+
+  private void method(int s, String s2) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeRedundantElse/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeRedundantElse/after1.java
new file mode 100644
index 0000000..f10dc5d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeRedundantElse/after1.java
@@ -0,0 +1,13 @@
+// "Remove Redundant 'else'" "true"
+class a {
+  void foo() {
+    int a = 0;
+    int b = 0;
+    if (a != b) {
+      return;
+    }
+      a = b;
+      a++;
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeRedundantElse/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeRedundantElse/before1.java
new file mode 100644
index 0000000..874a052
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeRedundantElse/before1.java
@@ -0,0 +1,14 @@
+// "Remove Redundant 'else'" "true"
+class a {
+  void foo() {
+    int a = 0;
+    int b = 0;
+    if (a != b) {
+      return;
+    } e<caret>lse {
+      a = b;
+    }
+    a++;
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeRedundantElse/beforeIfElseChain.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeRedundantElse/beforeIfElseChain.java
new file mode 100644
index 0000000..25127d3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeRedundantElse/beforeIfElseChain.java
@@ -0,0 +1,17 @@
+// "Remove Redundant 'else'" "false"
+class a {
+  void foo() {
+    int a = 0;
+    int b = 0;
+    if (a != b) {
+      a = 10;
+    } else if (a + 1 == b) {
+      return;
+    }
+    e<caret>lse {
+      a = b;
+    }
+    a++;
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeTypeArguments/afterRemoveAll.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeTypeArguments/afterRemoveAll.java
new file mode 100644
index 0000000..6717f08
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeTypeArguments/afterRemoveAll.java
@@ -0,0 +1,7 @@
+// "Remove type arguments" "true"
+abstract class SomeClass<K, T> implements Some<K, T> {
+    public abstract void doSomething(K key, Node<caret> root);
+}
+class Node {}
+interface Some<II, OO>{}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeTypeArguments/beforeRemoveAll.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeTypeArguments/beforeRemoveAll.java
new file mode 100644
index 0000000..b80e08c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeTypeArguments/beforeRemoveAll.java
@@ -0,0 +1,7 @@
+// "Remove type arguments" "true"
+abstract class SomeClass<K, T> implements Some<K, T> {
+    public abstract void doSomething(K key, Node<caret><K, T> root);
+}
+class Node {}
+interface Some<II, OO>{}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeTypeArguments/beforeRemoveUnavailable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeTypeArguments/beforeRemoveUnavailable.java
new file mode 100644
index 0000000..23363b2c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeTypeArguments/beforeRemoveUnavailable.java
@@ -0,0 +1,7 @@
+// "Remove type arguments" "false"
+abstract class SomeClass<K, T> implements Some<K, T> {
+    public abstract void doSomething(K key, Node<caret><K, T> root);
+}
+class Node<G> {}
+interface Some<II, OO>{}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedParameter/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedParameter/after1.java
new file mode 100644
index 0000000..646e1ea
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedParameter/after1.java
@@ -0,0 +1,8 @@
+// "Remove Parameter 'i'" "true"
+import java.io.*;
+
+class a {
+ private void run(<caret>) {
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedParameter/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedParameter/after2.java
new file mode 100644
index 0000000..e0746a5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedParameter/after2.java
@@ -0,0 +1,8 @@
+// "Remove Parameter 'i'" "true"
+import java.io.*;
+
+class a {
+ private void run(int i1, <caret>int ee) {
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedParameter/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedParameter/before1.java
new file mode 100644
index 0000000..b08cecf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedParameter/before1.java
@@ -0,0 +1,8 @@
+// "Remove Parameter 'i'" "true"
+import java.io.*;
+
+class a {
+ private void run(int <caret>i) {
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedParameter/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedParameter/before2.java
new file mode 100644
index 0000000..044a778
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedParameter/before2.java
@@ -0,0 +1,8 @@
+// "Remove Parameter 'i'" "true"
+import java.io.*;
+
+class a {
+ private void run(int i1, int <caret>i, int ee) {
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after1.java
new file mode 100644
index 0000000..3600053
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after1.java
@@ -0,0 +1,8 @@
+// "Remove variable 'i'" "true"
+import java.io.*;
+
+class a {
+ public void run() {
+ <caret>}
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after10.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after10.java
new file mode 100644
index 0000000..7a96d10
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after10.java
@@ -0,0 +1,12 @@
+// "Remove variable 'oo'" "true"
+import java.io.*;
+
+class a {
+    int k;
+    private int run() {
+      Object o1 = /**fffff*/ this /*ddddd*/<caret>, i = null;
+
+      return 0;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after11.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after11.java
new file mode 100644
index 0000000..9aafed3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after11.java
@@ -0,0 +1,12 @@
+// "Remove variable 'oo'" "true"
+import java.io.*;
+
+class a {
+    int k;
+    private int run() {
+        Object o1 = /**fffff*/ this; /*ddddd*/<caret>
+
+        return 0;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after12.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after12.java
new file mode 100644
index 0000000..943d07d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after12.java
@@ -0,0 +1,12 @@
+// "Remove variable 'o1'" "true"
+import java.io.*;
+
+class a {
+    int k;
+    private int run() {
+      /*ddddd*/ Object oo = (Object) new Integer(0);
+
+      return 0;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after13.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after13.java
new file mode 100644
index 0000000..0a15446
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after13.java
@@ -0,0 +1,12 @@
+// "Remove variable 'o1'" "true"
+import java.io.*;
+
+class a {
+    int k;
+    private int run() {
+      Object o0<caret>, /*ddddd*/ oo = (Object) new Integer(0);
+
+      return 0;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after14.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after14.java
new file mode 100644
index 0000000..94a5129
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after14.java
@@ -0,0 +1,12 @@
+// "Remove variable 'o1'" "true"
+import java.io.*;
+
+class a {
+    int k;
+    private int run() {
+        Object o0, oo;<caret>
+
+        return 0;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after15.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after15.java
new file mode 100644
index 0000000..a8d27a2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after15.java
@@ -0,0 +1,10 @@
+// "Remove variable 'o'" "true"
+import java.io.*;
+
+class a {
+    private int run() {<caret>
+
+        return 0;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after16.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after16.java
new file mode 100644
index 0000000..d5e49c3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after16.java
@@ -0,0 +1,11 @@
+// "Remove variable 'o'" "true"
+import java.io.*;
+
+class a {
+    int k;
+    private int run() {<caret>
+
+        return 0;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after17.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after17.java
new file mode 100644
index 0000000..3ea7c95
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after17.java
@@ -0,0 +1,12 @@
+// "Remove variable 'o'" "true"
+import java.io.*;
+
+class a {
+    int k;
+    private int run() {
+        int a = 0;<caret>
+
+        return a;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after2.java
new file mode 100644
index 0000000..231ef0c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after2.java
@@ -0,0 +1,9 @@
+// "Remove variable 'i'" "true"
+import java.io.*;
+
+class a {
+ private void run() {
+     int j;
+ <caret>}
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after4.java
new file mode 100644
index 0000000..bf6d147
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after4.java
@@ -0,0 +1,10 @@
+// "Remove field 'i'" "true"
+import java.io.*;
+
+class a {
+    <caret>private void run() {
+        int j;
+        int i;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after5.java
new file mode 100644
index 0000000..5511c8d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after5.java
@@ -0,0 +1,11 @@
+// "Remove field 'i'" "true"
+import java.io.*;
+
+class a {
+    <caret>private void run() {
+        int j;
+        int k = 9;
+        if (3 ==0) ;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after6.java
new file mode 100644
index 0000000..9e4c304
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after6.java
@@ -0,0 +1,13 @@
+// "Remove variable 'i'" "true"
+import java.io.*;
+
+class a {
+    private int run() {
+        <caret>int j;
+        int k = 9;
+        if (3 ==0) ;
+        else return k;
+        return 0;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after7.java
new file mode 100644
index 0000000..8ad41cf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after7.java
@@ -0,0 +1,11 @@
+// "Remove variable 'i'" "true"
+import java.io.*;
+
+class a {
+    int k;
+    private void run() {
+        <caret>while (1 > 0) ;
+        for (;; ) ;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after8.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after8.java
new file mode 100644
index 0000000..4e68ab3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after8.java
@@ -0,0 +1,12 @@
+// "Remove variable 'oo'" "true"
+import java.io.*;
+
+class a {
+    int k;
+    private int run() {
+        new a();
+
+        return 0;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after9.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after9.java
new file mode 100644
index 0000000..02da989
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/after9.java
@@ -0,0 +1,12 @@
+// "Remove variable 'oo'" "true"
+import java.io.*;
+
+class a {
+    int k;
+    private int run() {
+      <caret>Object i = null;
+
+      return 0;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/afterField.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/afterField.java
new file mode 100644
index 0000000..d09d50f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/afterField.java
@@ -0,0 +1,7 @@
+// "Remove field 'k'" "true"
+import java.io.*;
+
+class a {
+    private int lll;
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/afterField2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/afterField2.java
new file mode 100644
index 0000000..2f1207f8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/afterField2.java
@@ -0,0 +1,7 @@
+// "Remove field 'k'" "true"
+import java.io.*;
+
+class a {
+    private int xxx;
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before1.java
new file mode 100644
index 0000000..8fdef8b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before1.java
@@ -0,0 +1,11 @@
+// "Remove variable 'i'" "true"
+import java.io.*;
+
+class a {
+ public void run() {
+    int <caret>i = 0;
+    i++;
+    i++;
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before10.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before10.java
new file mode 100644
index 0000000..ebb9292
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before10.java
@@ -0,0 +1,12 @@
+// "Remove variable 'oo'" "true"
+import java.io.*;
+
+class a {
+    int k;
+    private int run() {
+      Object o1 = /**fffff*/ this, /*ddddd*/<caret>oo = (Object) new Integer(0), i = null;
+
+      return 0;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before11.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before11.java
new file mode 100644
index 0000000..92fe399
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before11.java
@@ -0,0 +1,12 @@
+// "Remove variable 'oo'" "true"
+import java.io.*;
+
+class a {
+    int k;
+    private int run() {
+        Object o1 = /**fffff*/ this, /*ddddd*/<caret>oo = (Object) new Integer(0);
+
+        return 0;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before12.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before12.java
new file mode 100644
index 0000000..b79ddb1f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before12.java
@@ -0,0 +1,12 @@
+// "Remove variable 'o1'" "true"
+import java.io.*;
+
+class a {
+    int k;
+    private int run() {
+      Object <caret>o1, /*ddddd*/ oo = (Object) new Integer(0);
+
+      return 0;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before13.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before13.java
new file mode 100644
index 0000000..38efe59
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before13.java
@@ -0,0 +1,12 @@
+// "Remove variable 'o1'" "true"
+import java.io.*;
+
+class a {
+    int k;
+    private int run() {
+      Object o0, <caret>o1, /*ddddd*/ oo = (Object) new Integer(0);
+
+      return 0;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before14.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before14.java
new file mode 100644
index 0000000..a7672f7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before14.java
@@ -0,0 +1,12 @@
+// "Remove variable 'o1'" "true"
+import java.io.*;
+
+class a {
+    int k;
+    private int run() {
+        Object o0, oo, <caret>o1;
+
+        return 0;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before15.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before15.java
new file mode 100644
index 0000000..251ed05
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before15.java
@@ -0,0 +1,13 @@
+// "Remove variable 'o'" "true"
+import java.io.*;
+
+class a {
+    private int run() {
+        Object <caret>o = new java.lang.RuntimeException(new String(
+                ""+new java.lang.Integer(""+new java.lang.Long(""+new java.lang.Boolean()))),
+                new java.lang.Throwable("",new IOException(""+new Object())));
+
+        return 0;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before16.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before16.java
new file mode 100644
index 0000000..accc42d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before16.java
@@ -0,0 +1,12 @@
+// "Remove variable 'o'" "true"
+import java.io.*;
+
+class a {
+    int k;
+    private int run() {
+        Object[] <caret>o = new Object[] { null };
+
+        return 0;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before17.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before17.java
new file mode 100644
index 0000000..a5d79e5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before17.java
@@ -0,0 +1,13 @@
+// "Remove variable 'o'" "true"
+import java.io.*;
+
+class a {
+    int k;
+    private int run() {
+        int a = 0;
+        Object[] <caret>o = new Object[1];
+
+        return a;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before2.java
new file mode 100644
index 0000000..b9f41c9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before2.java
@@ -0,0 +1,10 @@
+// "Remove variable 'i'" "true"
+import java.io.*;
+
+class a {
+ private void run() {
+     int j;
+     int <caret>i;
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before3.java
new file mode 100644
index 0000000..0a56bc0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before3.java
@@ -0,0 +1,8 @@
+// "Remove variable 'i'" "false"
+import java.io.*;
+
+class a {
+ private void run(int <caret>i) {
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before4.java
new file mode 100644
index 0000000..42d3045
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before4.java
@@ -0,0 +1,11 @@
+// "Remove field 'i'" "true"
+import java.io.*;
+
+class a {
+    private int <caret>i;
+    private void run() {
+        int j;
+        int i;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before5.java
new file mode 100644
index 0000000..c8768ce
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before5.java
@@ -0,0 +1,15 @@
+// "Remove field 'i'" "true"
+import java.io.*;
+
+class a {
+    private int <caret>i = 0;
+    private void run() {
+        int j;
+        i++;
+        int k = 9;
+        i=(i=(k=9)==0 ? k=8 : 0);
+        i = 9;
+        if ((i=3)==0) i=0;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before6.java
new file mode 100644
index 0000000..fbcad1c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before6.java
@@ -0,0 +1,17 @@
+// "Remove variable 'i'" "true"
+import java.io.*;
+
+class a {
+    private int run() {
+        int <caret>i = 0;
+        int j;
+        i++;
+        int k = 9;
+        i=(i=(k=9)==0 ? k=8 : 0);
+        i = 9;
+        if ((i=3)==0) i=0;
+        else return i=(k);
+        return i=i=0;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before7.java
new file mode 100644
index 0000000..6e5f89c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before7.java
@@ -0,0 +1,15 @@
+// "Remove variable 'i'" "true"
+import java.io.*;
+
+class a {
+    int k;
+    private void run() {
+        int <caret>i = ((k=9));
+        i+=k;
+        i=(i=(k=9)==0 ? k=8 : 0);
+        i = 9;
+        while ((i=1) > 0) i=1;
+        for (;;i++) i=0;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before8.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before8.java
new file mode 100644
index 0000000..ab290a66
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before8.java
@@ -0,0 +1,12 @@
+// "Remove variable 'oo'" "true"
+import java.io.*;
+
+class a {
+    int k;
+    private int run() {
+        Object <caret>oo = (Object) new a();
+
+        return 0;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before9.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before9.java
new file mode 100644
index 0000000..1c21639
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/before9.java
@@ -0,0 +1,12 @@
+// "Remove variable 'oo'" "true"
+import java.io.*;
+
+class a {
+    int k;
+    private int run() {
+      Object <caret>oo = (Object) new Integer(0), i = null;
+
+      return 0;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/beforeField.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/beforeField.java
new file mode 100644
index 0000000..ef93ee0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/beforeField.java
@@ -0,0 +1,7 @@
+// "Remove field 'k'" "true"
+import java.io.*;
+
+class a {
+    private int <caret>k, lll;
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/beforeField2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/beforeField2.java
new file mode 100644
index 0000000..ed477d6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeUnusedVariable/beforeField2.java
@@ -0,0 +1,7 @@
+// "Remove field 'k'" "true"
+import java.io.*;
+
+class a {
+    private int xxx,<caret>k;
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/renameConstructorMatchingClass/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/renameConstructorMatchingClass/after1.java
new file mode 100644
index 0000000..c491ea1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/renameConstructorMatchingClass/after1.java
@@ -0,0 +1,4 @@
+// "Rename 'Foo' to 'Bar'" "true"
+class Bar {
+  Bar(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/renameConstructorMatchingClass/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/renameConstructorMatchingClass/before1.java
new file mode 100644
index 0000000..18ef075
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/renameConstructorMatchingClass/before1.java
@@ -0,0 +1,4 @@
+// "Rename 'Foo' to 'Bar'" "true"
+class Bar {
+  Fo<caret>o(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/renameWrongReference/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/renameWrongReference/before1.java
new file mode 100644
index 0000000..4617960
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/renameWrongReference/before1.java
@@ -0,0 +1,6 @@
+// "Rename Reference" "true"
+class c {
+ void () {
+   int i = <caret>x;
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/renameWrongReference/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/renameWrongReference/before2.java
new file mode 100644
index 0000000..478c029
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/renameWrongReference/before2.java
@@ -0,0 +1,11 @@
+// "Rename Reference" "true"
+class c {
+ void foo(boolean b) {
+   if (b) {
+     int i = 0;
+     i++;
+   } else {
+     i<caret>++;
+   }
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/renameWrongReference/beforeResolvedMethod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/renameWrongReference/beforeResolvedMethod.java
new file mode 100644
index 0000000..4696f8e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/renameWrongReference/beforeResolvedMethod.java
@@ -0,0 +1,9 @@
+// "Rename Reference" "false"
+class Foo {
+    void bar(int x) {
+    }
+
+    void buzz() {
+        b<caret>ar(); // Try to rename bar with Shift+F6
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/renameWrongReference/beforeResolvedWithInvalidAccessField.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/renameWrongReference/beforeResolvedWithInvalidAccessField.java
new file mode 100644
index 0000000..6dd73db
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/renameWrongReference/beforeResolvedWithInvalidAccessField.java
@@ -0,0 +1,10 @@
+// "Rename Reference" "true"
+class FooInterface {
+  private int myInt;
+}
+
+class Foo {
+    void buzz() {
+        myI<caret>nt + myInt;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceAddAllArrayToCollections/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceAddAllArrayToCollections/after1.java
new file mode 100644
index 0000000..5780fac
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceAddAllArrayToCollections/after1.java
@@ -0,0 +1,11 @@
+// "Replace l.addAll(objs) with java.util.Collections.addAll(l, objs)" "true"
+import java.util.Collections;
+import java.util.List;
+
+class A {
+  public static void main(String[] args){
+    List l = new List();
+    Object [] objs = new Object[0];
+    Collections.addAll(l, objs);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceAddAllArrayToCollections/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceAddAllArrayToCollections/after2.java
new file mode 100644
index 0000000..df8feb09
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceAddAllArrayToCollections/after2.java
@@ -0,0 +1,10 @@
+// "Replace addAll(objs) with java.util.Collections.addAll(this, objs)" "true"
+import java.util.Collections;
+import java.util.List;
+
+class A implements List {
+  public static void main(String[] args){
+    Object[] objs = new Object[0];
+    Collections.addAll(this, objs);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceAddAllArrayToCollections/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceAddAllArrayToCollections/before1.java
new file mode 100644
index 0000000..c5a8ef3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceAddAllArrayToCollections/before1.java
@@ -0,0 +1,10 @@
+// "Replace l.addAll(objs) with java.util.Collections.addAll(l, objs)" "true"
+import java.util.List;
+
+class A {
+  public static void main(String[] args){
+    List l = new List();
+    Object [] objs = new Object[0];
+    l.addAll(<caret>objs);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceAddAllArrayToCollections/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceAddAllArrayToCollections/before2.java
new file mode 100644
index 0000000..f45708b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceAddAllArrayToCollections/before2.java
@@ -0,0 +1,9 @@
+// "Replace addAll(objs) with java.util.Collections.addAll(this, objs)" "true"
+import java.util.List;
+
+class A implements List {
+  public static void main(String[] args){
+    Object[] objs = new Object[0];
+    addAll(<caret>objs);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceAddAllArrayToCollections/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceAddAllArrayToCollections/before3.java
new file mode 100644
index 0000000..87308e2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceAddAllArrayToCollections/before3.java
@@ -0,0 +1,8 @@
+// "Replace l.removeAll(objs) with java.util.Collections.addAll(l, objs)" "false"
+class T {
+  public static void main(String[] args){
+    List l = new List();
+    Object[] objs = new Object[0];
+    l.removeAll(<caret>objs);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/afterChangedAfterCastingVar.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/afterChangedAfterCastingVar.java
new file mode 100644
index 0000000..3e55d37
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/afterChangedAfterCastingVar.java
@@ -0,0 +1,13 @@
+// "Replace '(FooBar)foo' with 'foobar'" "true"
+
+import java.lang.Object;
+
+class FooBar {
+  public int baz;
+
+  int method(Object foo) {
+    FooBar foobar = (FooBar)foo;
+    Object o = foobar.baz;
+    foo = null;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/afterChangedAfterVar.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/afterChangedAfterVar.java
new file mode 100644
index 0000000..616d26b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/afterChangedAfterVar.java
@@ -0,0 +1,13 @@
+// "Replace '(FooBar)foo' with 'foobar'" "true"
+
+import java.lang.Object;
+
+class FooBar {
+  public int baz;
+
+  int method(Object foo) {
+    FooBar foobar = (FooBar)foo;
+    Object o = foobar.baz;
+    foobar = null;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/afterChangedBeforeCastingVar.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/afterChangedBeforeCastingVar.java
new file mode 100644
index 0000000..466cf92
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/afterChangedBeforeCastingVar.java
@@ -0,0 +1,11 @@
+// "Replace '(FooBar)foo' with 'foobar'" "true"
+
+class FooBar {
+  public int baz;
+
+  int method(Object foo) {
+    foo = null;
+    FooBar foobar = (FooBar)foo;
+    return foobar.baz;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/afterChangedBeforeVar.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/afterChangedBeforeVar.java
new file mode 100644
index 0000000..acffa08
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/afterChangedBeforeVar.java
@@ -0,0 +1,11 @@
+// "Replace '(FooBar)foo' with 'foobar'" "true"
+
+class FooBar {
+  public int baz;
+
+  int method(Object foo) {
+    foobar = null;
+    FooBar foobar = (FooBar)foo;
+    return foobar.baz;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/afterChangedTwice.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/afterChangedTwice.java
new file mode 100644
index 0000000..52dab0f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/afterChangedTwice.java
@@ -0,0 +1,13 @@
+// "Replace '(FooBar)foo' with 'foobar'" "true"
+
+class FooBar {
+  public int baz;
+
+  int method(Object foo) {
+    FooBar foobar = (FooBar)foo;
+    foobar = null;
+    foo = null;
+    foobar = (FooBar)foo;
+    return foobar.baz;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/afterSimple.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/afterSimple.java
new file mode 100644
index 0000000..9f5cc41
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/afterSimple.java
@@ -0,0 +1,10 @@
+// "Replace '(FooBar)foo' with 'foobar'" "true"
+
+class FooBar {
+  public int baz;
+
+  int method(Object foo) {
+    FooBar foobar = (FooBar)foo;
+    return foobar.baz;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/afterTwoVars.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/afterTwoVars.java
new file mode 100644
index 0000000..d40620d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/afterTwoVars.java
@@ -0,0 +1,12 @@
+// "Replace '(FooBar)foo' with 'foobar2'" "true"
+
+class FooBar {
+  public int baz;
+
+  int method(Object foo) {
+    FooBar foobar = (FooBar)foo;
+    foobar = null;
+    FooBar foobar2 = (FooBar)foo;
+    return foobar2.baz;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/beforeChangedAfterCastingVar.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/beforeChangedAfterCastingVar.java
new file mode 100644
index 0000000..1882c91
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/beforeChangedAfterCastingVar.java
@@ -0,0 +1,13 @@
+// "Replace '(FooBar)foo' with 'foobar'" "true"
+
+import java.lang.Object;
+
+class FooBar {
+  public int baz;
+
+  int method(Object foo) {
+    FooBar foobar = (FooBar)foo;
+    Object o = ((FooBar<caret>)foo).baz;
+    foo = null;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/beforeChangedAfterVar.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/beforeChangedAfterVar.java
new file mode 100644
index 0000000..443752f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/beforeChangedAfterVar.java
@@ -0,0 +1,13 @@
+// "Replace '(FooBar)foo' with 'foobar'" "true"
+
+import java.lang.Object;
+
+class FooBar {
+  public int baz;
+
+  int method(Object foo) {
+    FooBar foobar = (FooBar)foo;
+    Object o = ((FooBar<caret>)foo).baz;
+    foobar = null;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/beforeChangedBeforeCastingVar.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/beforeChangedBeforeCastingVar.java
new file mode 100644
index 0000000..ceecf01
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/beforeChangedBeforeCastingVar.java
@@ -0,0 +1,11 @@
+// "Replace '(FooBar)foo' with 'foobar'" "true"
+
+class FooBar {
+  public int baz;
+
+  int method(Object foo) {
+    foo = null;
+    FooBar foobar = (FooBar)foo;
+    return ((FooBar<caret>)foo).baz;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/beforeChangedBeforeVar.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/beforeChangedBeforeVar.java
new file mode 100644
index 0000000..3084db0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/beforeChangedBeforeVar.java
@@ -0,0 +1,11 @@
+// "Replace '(FooBar)foo' with 'foobar'" "true"
+
+class FooBar {
+  public int baz;
+
+  int method(Object foo) {
+    foobar = null;
+    FooBar foobar = (FooBar)foo;
+    return ((FooBar<caret>)foo).baz;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/beforeChangedCastingVar.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/beforeChangedCastingVar.java
new file mode 100644
index 0000000..5f4e71d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/beforeChangedCastingVar.java
@@ -0,0 +1,11 @@
+// "Replace '(FooBar)foo' with 'foobar'" "false"
+
+class FooBar {
+  public int baz;
+
+  int method(Object foo) {
+    FooBar foobar = (FooBar)foo;
+    foo = null;
+    return ((FooBar<caret>)foo).baz;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/beforeChangedTwice.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/beforeChangedTwice.java
new file mode 100644
index 0000000..1429bdc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/beforeChangedTwice.java
@@ -0,0 +1,13 @@
+// "Replace '(FooBar)foo' with 'foobar'" "true"
+
+class FooBar {
+  public int baz;
+
+  int method(Object foo) {
+    FooBar foobar = (FooBar)foo;
+    foobar = null;
+    foo = null;
+    foobar = (FooBar)foo;
+    return ((FooBar<caret>)foo).baz;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/beforeChangedVar.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/beforeChangedVar.java
new file mode 100644
index 0000000..edd6279
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/beforeChangedVar.java
@@ -0,0 +1,11 @@
+// "Replace '(FooBar)foo' with 'foobar'" "false"
+
+class FooBar {
+  public int baz;
+
+  int method(Object foo) {
+    FooBar foobar = (FooBar)foo;
+    foobar = null;
+    return ((FooBar<caret>)foo).baz;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/beforeSimple.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/beforeSimple.java
new file mode 100644
index 0000000..f4905e4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/beforeSimple.java
@@ -0,0 +1,10 @@
+// "Replace '(FooBar)foo' with 'foobar'" "true"
+
+class FooBar {
+  public int baz;
+
+  int method(Object foo) {
+    FooBar foobar = (FooBar)foo;
+    return ((FooBar<caret>)foo).baz;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/beforeTwoVars.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/beforeTwoVars.java
new file mode 100644
index 0000000..28c88d1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceCastWithVariable/beforeTwoVars.java
@@ -0,0 +1,12 @@
+// "Replace '(FooBar)foo' with 'foobar2'" "true"
+
+class FooBar {
+  public int baz;
+
+  int method(Object foo) {
+    FooBar foobar = (FooBar)foo;
+    foobar = null;
+    FooBar foobar2 = (FooBar)foo;
+    return ((FooBar<caret>)foo).baz;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceFieldWithGetterSetter/after3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceFieldWithGetterSetter/after3.java
new file mode 100644
index 0000000..92b9f84
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceFieldWithGetterSetter/after3.java
@@ -0,0 +1,14 @@
+// "Replace with getter" "true"
+class Test {
+  private int i;
+
+  public int getI() {
+    return i;
+  }
+}
+
+class Foo {
+  void foo(Test t) {
+    System.out.println(t.getI());
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceFieldWithGetterSetter/after5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceFieldWithGetterSetter/after5.java
new file mode 100644
index 0000000..8e2774c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceFieldWithGetterSetter/after5.java
@@ -0,0 +1,14 @@
+// "Replace with setter" "true"
+class Test {
+  private int i;
+
+  public void setI(int i) {
+    this.i = i;
+  }
+}
+
+class Foo {
+  void foo(Test t) {
+    t.setI(0);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceFieldWithGetterSetter/after6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceFieldWithGetterSetter/after6.java
new file mode 100644
index 0000000..cdd32fb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceFieldWithGetterSetter/after6.java
@@ -0,0 +1,8 @@
+// "Replace with getter" "true"
+import java.io.File;
+
+class Foo {
+  void foo(File f) {
+    String ss = f.getPath();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceFieldWithGetterSetter/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceFieldWithGetterSetter/before1.java
new file mode 100644
index 0000000..c10705b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceFieldWithGetterSetter/before1.java
@@ -0,0 +1,10 @@
+// "Replace with getter" "false"
+class Test {
+  private int i;
+}
+
+class Foo {
+  void foo(Test t) {
+    System.out.println(t.<caret>i);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceFieldWithGetterSetter/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceFieldWithGetterSetter/before2.java
new file mode 100644
index 0000000..950ac62
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceFieldWithGetterSetter/before2.java
@@ -0,0 +1,10 @@
+// "Replace with setter" "false"
+class Test {
+  private int i;
+}
+
+class Foo {
+  void foo(Test t) {
+    System.out.println(t.<caret>i);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceFieldWithGetterSetter/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceFieldWithGetterSetter/before3.java
new file mode 100644
index 0000000..f3fecb7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceFieldWithGetterSetter/before3.java
@@ -0,0 +1,14 @@
+// "Replace with getter" "true"
+class Test {
+  private int i;
+
+  public int getI() {
+    return i;
+  }
+}
+
+class Foo {
+  void foo(Test t) {
+    System.out.println(t.<caret>i);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceFieldWithGetterSetter/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceFieldWithGetterSetter/before4.java
new file mode 100644
index 0000000..b36e2f1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceFieldWithGetterSetter/before4.java
@@ -0,0 +1,14 @@
+// "Replace with getter" "false"
+class Test {
+  private int i;
+
+  public int getI() {
+    return i;
+  }
+}
+
+class Foo {
+  void foo(Test t) {
+    t.<caret>i = 0;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceFieldWithGetterSetter/before5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceFieldWithGetterSetter/before5.java
new file mode 100644
index 0000000..706127f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceFieldWithGetterSetter/before5.java
@@ -0,0 +1,14 @@
+// "Replace with setter" "true"
+class Test {
+  private int i;
+
+  public void setI(int i) {
+    this.i = i;
+  }
+}
+
+class Foo {
+  void foo(Test t) {
+    t.<caret>i = 0;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceFieldWithGetterSetter/before6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceFieldWithGetterSetter/before6.java
new file mode 100644
index 0000000..e70541a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceFieldWithGetterSetter/before6.java
@@ -0,0 +1,8 @@
+// "Replace with getter" "true"
+import java.io.File;
+
+class Foo {
+  void foo(File f) {
+    String ss = f.<caret>path;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replacePrimitiveWithBoxed/afterPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replacePrimitiveWithBoxed/afterPrimitive.java
new file mode 100644
index 0000000..e964aa4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replacePrimitiveWithBoxed/afterPrimitive.java
@@ -0,0 +1,6 @@
+// "Convert 'int' to 'java.lang.Integer'" "true"
+import java.util.*;
+
+class Test {
+  Set<Integer> f;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replacePrimitiveWithBoxed/afterWildcard.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replacePrimitiveWithBoxed/afterWildcard.java
new file mode 100644
index 0000000..5b8d218
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replacePrimitiveWithBoxed/afterWildcard.java
@@ -0,0 +1,6 @@
+// "Convert 'int' to 'java.lang.Integer'" "true"
+import java.util.*;
+
+class Test {
+  Set<? extends Integer> f;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replacePrimitiveWithBoxed/beforePrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replacePrimitiveWithBoxed/beforePrimitive.java
new file mode 100644
index 0000000..c4b340d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replacePrimitiveWithBoxed/beforePrimitive.java
@@ -0,0 +1,6 @@
+// "Convert 'int' to 'java.lang.Integer'" "true"
+import java.util.*;
+
+class Test {
+  Set<in<caret>t> f;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replacePrimitiveWithBoxed/beforeWildcard.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replacePrimitiveWithBoxed/beforeWildcard.java
new file mode 100644
index 0000000..edb14c0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replacePrimitiveWithBoxed/beforeWildcard.java
@@ -0,0 +1,6 @@
+// "Convert 'int' to 'java.lang.Integer'" "true"
+import java.util.*;
+
+class Test {
+  Set<? extends in<caret>t> f;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithListAccess/afterExpression.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithListAccess/afterExpression.java
new file mode 100644
index 0000000..a3c59d2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithListAccess/afterExpression.java
@@ -0,0 +1,10 @@
+// "Replace with list access" "true"
+
+import java.lang.Math;
+import java.util.List;
+
+class A {
+  void test(List<List> lists) {
+    System.out.println(lists.get(Math.max(Math.abs(-2), 3)));
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithListAccess/afterIdexIsBoxedInteger.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithListAccess/afterIdexIsBoxedInteger.java
new file mode 100644
index 0000000..e51dad2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithListAccess/afterIdexIsBoxedInteger.java
@@ -0,0 +1,10 @@
+// "Replace with list access" "true"
+
+import java.lang.Integer;
+import java.util.ArrayList;
+
+class A {
+  void test(ArrayList list) {
+    System.out.println(list.get(new Integer(0)));
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithListAccess/afterListOfLists.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithListAccess/afterListOfLists.java
new file mode 100644
index 0000000..88de14c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithListAccess/afterListOfLists.java
@@ -0,0 +1,9 @@
+// "Replace with list access" "true"
+
+import java.util.List;
+
+class A {
+  void test(List<List> lists) {
+    System.out.println(lists.get(0).get(0));
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithListAccess/afterSetStatement.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithListAccess/afterSetStatement.java
new file mode 100644
index 0000000..4996ab4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithListAccess/afterSetStatement.java
@@ -0,0 +1,9 @@
+// "Replace with list access" "true"
+
+import java.util.ArrayList;
+
+class A {
+  void test(ArrayList<Integer> list) {
+    list.set(0, 5);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithListAccess/afterSimple.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithListAccess/afterSimple.java
new file mode 100644
index 0000000..b724741
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithListAccess/afterSimple.java
@@ -0,0 +1,9 @@
+// "Replace with list access" "true"
+
+import java.util.ArrayList;
+
+class A {
+  void test(ArrayList list) {
+    System.out.println(list.get(0));
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithListAccess/beforeAssignmentInIfCondition.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithListAccess/beforeAssignmentInIfCondition.java
new file mode 100644
index 0000000..0ddfbf3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithListAccess/beforeAssignmentInIfCondition.java
@@ -0,0 +1,11 @@
+// "Replace with list access" "false"
+
+import java.util.ArrayList;
+
+class A {
+  void test(ArrayList<Integer> list) {
+    if (lis<caret>t[0] = 5 == 5){
+
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithListAccess/beforeExpression.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithListAccess/beforeExpression.java
new file mode 100644
index 0000000..c24770f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithListAccess/beforeExpression.java
@@ -0,0 +1,10 @@
+// "Replace with list access" "true"
+
+import java.lang.Math;
+import java.util.List;
+
+class A {
+  void test(List<List> lists) {
+    System.out.println(lis<caret>ts[Math.max(Math.abs(-2),3)]);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithListAccess/beforeIdexIsBoxedInteger.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithListAccess/beforeIdexIsBoxedInteger.java
new file mode 100644
index 0000000..5aa0912
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithListAccess/beforeIdexIsBoxedInteger.java
@@ -0,0 +1,10 @@
+// "Replace with list access" "true"
+
+import java.lang.Integer;
+import java.util.ArrayList;
+
+class A {
+  void test(ArrayList list) {
+    System.out.println(lis<caret>t[new Integer(0)]);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithListAccess/beforeIndexNotInteger.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithListAccess/beforeIndexNotInteger.java
new file mode 100644
index 0000000..3e35713
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithListAccess/beforeIndexNotInteger.java
@@ -0,0 +1,10 @@
+// "Replace with list access" "false"
+
+import java.lang.Object;
+import java.util.ArrayList;
+
+class A {
+  void test(ArrayList list) {
+    System.out.println(lis<caret>t[new Object(3)]);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithListAccess/beforeListOfLists.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithListAccess/beforeListOfLists.java
new file mode 100644
index 0000000..c657db6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithListAccess/beforeListOfLists.java
@@ -0,0 +1,9 @@
+// "Replace with list access" "true"
+
+import java.util.List;
+
+class A {
+  void test(List<List> lists) {
+    System.out.println(li<caret>sts[0].get(0));
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithListAccess/beforeNotLIst.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithListAccess/beforeNotLIst.java
new file mode 100644
index 0000000..9b30417
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithListAccess/beforeNotLIst.java
@@ -0,0 +1,6 @@
+// "Replace with list access" "false"
+class A {
+  void test(Collection list) {
+    System.out.println(lis<caret>t[0]);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithListAccess/beforeSetStatement.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithListAccess/beforeSetStatement.java
new file mode 100644
index 0000000..fd50266
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithListAccess/beforeSetStatement.java
@@ -0,0 +1,9 @@
+// "Replace with list access" "true"
+
+import java.util.ArrayList;
+
+class A {
+  void test(ArrayList<Integer> list) {
+    lis<caret>t[0] = 5;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithListAccess/beforeSimple.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithListAccess/beforeSimple.java
new file mode 100644
index 0000000..4e96417
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithListAccess/beforeSimple.java
@@ -0,0 +1,9 @@
+// "Replace with list access" "true"
+
+import java.util.ArrayList;
+
+class A {
+  void test(ArrayList list) {
+    System.out.println(lis<caret>t[0]);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithTernaryOperator/afterMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithTernaryOperator/afterMethodCall.java
new file mode 100644
index 0000000..76fbe97
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithTernaryOperator/afterMethodCall.java
@@ -0,0 +1,10 @@
+// "Replace with 'list != null ?:'" "true"
+
+import org.jetbrains.annotations.NotNull;
+
+class A{
+  void test(@NotNull List l) {
+    final List list = null;
+    test(list != null ? list : <selection>null</selection>);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithTernaryOperator/afterPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithTernaryOperator/afterPrimitive.java
new file mode 100644
index 0000000..8547e45
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithTernaryOperator/afterPrimitive.java
@@ -0,0 +1,10 @@
+// "Replace with 'integer != null ?:'" "true"
+
+import java.lang.Integer;
+
+class A{
+  void test(){
+    Integer integer = null;
+    int i = integer != null ? integer.intValue() : <selection>0</selection>;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithTernaryOperator/afterSimple.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithTernaryOperator/afterSimple.java
new file mode 100644
index 0000000..aff3f94
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithTernaryOperator/afterSimple.java
@@ -0,0 +1,8 @@
+// "Replace with 'list != null ?:'" "true"
+
+class A{
+  void test(){
+    List list = null;
+    Object o = list != null ? list.get(0) : <selection>null</selection>;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithTernaryOperator/beforeExpressionStatement.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithTernaryOperator/beforeExpressionStatement.java
new file mode 100644
index 0000000..b072c84
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithTernaryOperator/beforeExpressionStatement.java
@@ -0,0 +1,7 @@
+// "Replace with 'list != null ?:'" "false"
+class A{
+  void test(){
+    List list = null;
+    li<caret>st.get(0);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithTernaryOperator/beforeMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithTernaryOperator/beforeMethodCall.java
new file mode 100644
index 0000000..9b5ec39
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithTernaryOperator/beforeMethodCall.java
@@ -0,0 +1,10 @@
+// "Replace with 'list != null ?:'" "true"
+
+import org.jetbrains.annotations.NotNull;
+
+class A{
+  void test(@NotNull List l) {
+    final List list = null;
+    test(li<caret>st);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithTernaryOperator/beforePrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithTernaryOperator/beforePrimitive.java
new file mode 100644
index 0000000..3af5be0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithTernaryOperator/beforePrimitive.java
@@ -0,0 +1,10 @@
+// "Replace with 'integer != null ?:'" "true"
+
+import java.lang.Integer;
+
+class A{
+  void test(){
+    Integer integer = null;
+    int i = in<caret>teger.intValue();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithTernaryOperator/beforeSimple.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithTernaryOperator/beforeSimple.java
new file mode 100644
index 0000000..8765249
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/replaceWithTernaryOperator/beforeSimple.java
@@ -0,0 +1,8 @@
+// "Replace with 'list != null ?:'" "true"
+
+class A{
+  void test(){
+    List list = null;
+    Object o = li<caret>st.get(0);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/reuseVariableDeclaration/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/reuseVariableDeclaration/after1.java
new file mode 100644
index 0000000..33c795e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/reuseVariableDeclaration/after1.java
@@ -0,0 +1,9 @@
+// "Reuse previous variable 'i' declaration" "true"
+import java.io.*;
+
+class a {
+    void f(int i) {
+        i = 234 / 5 + 7;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/reuseVariableDeclaration/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/reuseVariableDeclaration/after2.java
new file mode 100644
index 0000000..1adb834
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/reuseVariableDeclaration/after2.java
@@ -0,0 +1,11 @@
+// "Reuse previous variable 'k' declaration" "true"
+import java.io.*;
+
+class a {
+    void f(int i) {
+        int k = 234/5+7;
+        int h = 7;
+        k = 234 / 5 + 7;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/reuseVariableDeclaration/after3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/reuseVariableDeclaration/after3.java
new file mode 100644
index 0000000..5c57e37
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/reuseVariableDeclaration/after3.java
@@ -0,0 +1,9 @@
+// "Reuse previous variable 'i' declaration" "true"
+import java.io.*;
+
+class a {
+    void f(int i) {
+        int h = 7;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/reuseVariableDeclaration/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/reuseVariableDeclaration/before1.java
new file mode 100644
index 0000000..c522fd7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/reuseVariableDeclaration/before1.java
@@ -0,0 +1,9 @@
+// "Reuse previous variable 'i' declaration" "true"
+import java.io.*;
+
+class a {
+    void f(int i) {
+        int <caret>i = 234/5+7;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/reuseVariableDeclaration/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/reuseVariableDeclaration/before2.java
new file mode 100644
index 0000000..370a61a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/reuseVariableDeclaration/before2.java
@@ -0,0 +1,11 @@
+// "Reuse previous variable 'k' declaration" "true"
+import java.io.*;
+
+class a {
+    void f(int i) {
+        final int k = 234/5+7;
+        int h = 7;
+        int <caret>k = 234/5+7;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/reuseVariableDeclaration/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/reuseVariableDeclaration/before3.java
new file mode 100644
index 0000000..5377b63
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/reuseVariableDeclaration/before3.java
@@ -0,0 +1,10 @@
+// "Reuse previous variable 'i' declaration" "true"
+import java.io.*;
+
+class a {
+    void f(int i) {
+        final int <caret>i;
+        int h = 7;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/reuseVariableDeclaration/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/reuseVariableDeclaration/before4.java
new file mode 100644
index 0000000..7f10738
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/reuseVariableDeclaration/before4.java
@@ -0,0 +1,10 @@
+// "Reuse previous variable 'i' declaration" "false"
+import java.io.*;
+
+class a {
+    void f(int i) {
+        final short <caret>i;
+        int h = 7;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/reuseVariableDeclaration/before5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/reuseVariableDeclaration/before5.java
new file mode 100644
index 0000000..872b6f0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/reuseVariableDeclaration/before5.java
@@ -0,0 +1,11 @@
+// "Reuse previous variable 'i' declaration" "false"
+import java.io.*;
+
+class a {
+    int i;
+    void f() {
+        final int <caret>i;
+        int h = 7;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/reuseVariableDeclaration/before6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/reuseVariableDeclaration/before6.java
new file mode 100644
index 0000000..d6f5925
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/reuseVariableDeclaration/before6.java
@@ -0,0 +1,11 @@
+// "Reuse previous variable 'i' declaration" "false"
+import java.io.*;
+
+class a {
+    int i;
+    final int <caret>i;
+    void f() {
+        int h = 7;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/safeVarargs/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/safeVarargs/after1.java
new file mode 100644
index 0000000..0151ced
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/safeVarargs/after1.java
@@ -0,0 +1,8 @@
+// "Annotate as @SafeVarargs" "true"
+public class Test {
+  @SafeVarargs
+  public static <T> void main(T... args) {
+
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/safeVarargs/after7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/safeVarargs/after7.java
new file mode 100644
index 0000000..adf8bf3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/safeVarargs/after7.java
@@ -0,0 +1,9 @@
+// "Annotate as @SafeVarargs" "true"
+import java.util.List;
+public class Test {
+  public <T> @SafeVarargs
+             static void main(List<T>... args) {
+
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/safeVarargs/after8.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/safeVarargs/after8.java
new file mode 100644
index 0000000..2fa5b15
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/safeVarargs/after8.java
@@ -0,0 +1,8 @@
+// "Annotate as @SafeVarargs" "true"
+public class Test {
+  @SafeVarargs
+  public final <T> void main(T... args) {
+
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/safeVarargs/after9.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/safeVarargs/after9.java
new file mode 100644
index 0000000..a0bb3e71
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/safeVarargs/after9.java
@@ -0,0 +1,8 @@
+// "Make final and annotate as @SafeVarargs" "true"
+public class Test {
+  @SafeVarargs
+  public final <T> void m<caret>ain(T... args) {
+
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/safeVarargs/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/safeVarargs/before1.java
new file mode 100644
index 0000000..13949a0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/safeVarargs/before1.java
@@ -0,0 +1,7 @@
+// "Annotate as @SafeVarargs" "true"
+public class Test {
+  public static <T> void mai<caret>n(T... args) {
+
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/safeVarargs/before10.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/safeVarargs/before10.java
new file mode 100644
index 0000000..c50569d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/safeVarargs/before10.java
@@ -0,0 +1,5 @@
+// "Make final and annotate as @SafeVarargs" "false"
+public interface Test {
+  <T> void m<caret>ain(T... args);
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/safeVarargs/before11.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/safeVarargs/before11.java
new file mode 100644
index 0000000..3d17e69
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/safeVarargs/before11.java
@@ -0,0 +1,5 @@
+// "Make final and annotate as @SafeVarargs" "false"
+public abstract class Test {
+  abstract <T> void m<caret>ain(T... args);
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/safeVarargs/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/safeVarargs/before2.java
new file mode 100644
index 0000000..b435b94
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/safeVarargs/before2.java
@@ -0,0 +1,8 @@
+// "Annotate as @SafeVarargs" "false"
+public class Test {
+  @SafeVarargs
+  public static <T> void m<caret>ain(T... args) {
+
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/safeVarargs/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/safeVarargs/before3.java
new file mode 100644
index 0000000..dac1f55
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/safeVarargs/before3.java
@@ -0,0 +1,7 @@
+// "Annotate as @SafeVarargs" "false"
+public class Test {
+  public static void m<caret>ain(String... args) {
+
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/safeVarargs/before5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/safeVarargs/before5.java
new file mode 100644
index 0000000..18f0958
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/safeVarargs/before5.java
@@ -0,0 +1,7 @@
+// "Annotate as @SafeVarargs" "false"
+public class Test {
+  public <T> void m<caret>ain(T args) {
+
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/safeVarargs/before6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/safeVarargs/before6.java
new file mode 100644
index 0000000..cdab510
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/safeVarargs/before6.java
@@ -0,0 +1,8 @@
+// "Annotate as @SafeVarargs" "false"
+import java.util.List;
+public class Test {
+  public static void m<caret>ain(List<?>... args) {
+
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/safeVarargs/before7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/safeVarargs/before7.java
new file mode 100644
index 0000000..da51481
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/safeVarargs/before7.java
@@ -0,0 +1,8 @@
+// "Annotate as @SafeVarargs" "true"
+import java.util.List;
+public class Test {
+  public <T> static void m<caret>ain(List<T>... args) {
+
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/safeVarargs/before8.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/safeVarargs/before8.java
new file mode 100644
index 0000000..bcda64f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/safeVarargs/before8.java
@@ -0,0 +1,7 @@
+// "Annotate as @SafeVarargs" "true"
+public class Test {
+  public final <T> void m<caret>ain(T... args) {
+
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/safeVarargs/before9.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/safeVarargs/before9.java
new file mode 100644
index 0000000..d78a3cd1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/safeVarargs/before9.java
@@ -0,0 +1,7 @@
+// "Make final and annotate as @SafeVarargs" "true"
+public class Test {
+  public <T> void m<caret>ain(T... args) {
+
+  }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/after1.java
new file mode 100644
index 0000000..1caefaf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/after1.java
@@ -0,0 +1,6 @@
+// "Simplify boolean expression" "true"
+class X {
+    void f() {
+        <caret>return;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/after2.java
new file mode 100644
index 0000000..1caefaf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/after2.java
@@ -0,0 +1,6 @@
+// "Simplify boolean expression" "true"
+class X {
+    void f() {
+        <caret>return;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/after3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/after3.java
new file mode 100644
index 0000000..44d956f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/after3.java
@@ -0,0 +1,6 @@
+// "Simplify boolean expression" "true"
+class X {
+  void f() {
+    int i = 0<caret>;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/after4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/after4.java
new file mode 100644
index 0000000..efb7053d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/after4.java
@@ -0,0 +1,6 @@
+// "Simplify boolean expression" "true"
+class X {
+  void f() {
+        int i = 2;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/after5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/after5.java
new file mode 100644
index 0000000..7f98e68
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/after5.java
@@ -0,0 +1,9 @@
+// "Simplify boolean expression" "true"
+class X {
+    void f() {
+        int i = 2;
+        // begin
+        int o = 0; //mid
+        // end
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/after6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/after6.java
new file mode 100644
index 0000000..cf497a9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/after6.java
@@ -0,0 +1,6 @@
+// "Simplify boolean expression" "true"
+class X {
+    void f() {
+        //sdf
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/after7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/after7.java
new file mode 100644
index 0000000..fc8757f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/after7.java
@@ -0,0 +1,8 @@
+// "Simplify boolean expression" "true"
+class X {
+    void f(Object pVal, Object n) {
+        if (!pVal.equals(n))
+                pVal = null;
+            else <caret>pVal = n;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/afterEq.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/afterEq.java
new file mode 100644
index 0000000..6124438
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/afterEq.java
@@ -0,0 +1,6 @@
+// "Simplify boolean expression" "true"
+class X {
+    void f(boolean b) {
+        if (!b) return;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/afterMiddlePolyadic.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/afterMiddlePolyadic.java
new file mode 100644
index 0000000..50521f8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/afterMiddlePolyadic.java
@@ -0,0 +1,6 @@
+// "Simplify boolean expression" "true"
+class X {
+    void f(boolean b, boolean c) {
+        if (b && c) return;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/afterXor1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/afterXor1.java
new file mode 100644
index 0000000..faf0134
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/afterXor1.java
@@ -0,0 +1,9 @@
+// "Simplify boolean expression" "true"
+class A {
+    boolean a = true;
+    boolean b = true;
+    boolean x = a; // intention "simplify boolean expression" does nothing here, expected: boolean x = a;
+    boolean x1 = a ^ true; // expected: boolean x1 = !a; fails, does nothing
+    boolean y = a ^ true ^ b;  // intention replaces with a ^ b, expected !(a ^ b) fails
+    boolean y1 = a ^ false ^ b; // expected boolean y1 = a ^ b works correctly;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/afterXor2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/afterXor2.java
new file mode 100644
index 0000000..74bafa5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/afterXor2.java
@@ -0,0 +1,9 @@
+// "Simplify boolean expression" "true"
+class A {
+    boolean a = true;
+    boolean b = true;
+    boolean x = a ^ false; // intention "simplify boolean expression" does nothing here, expected: boolean x = a;
+    boolean x1 = !a; // expected: boolean x1 = !a; fails, does nothing
+    boolean y = a ^ true ^ b;  // intention replaces with a ^ b, expected !(a ^ b) fails
+    boolean y1 = a ^ false ^ b; // expected boolean y1 = a ^ b works correctly;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/afterXor3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/afterXor3.java
new file mode 100644
index 0000000..7a252cb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/afterXor3.java
@@ -0,0 +1,9 @@
+// "Simplify boolean expression" "true"
+class A {
+    boolean a = true;
+    boolean b = true;
+    boolean x = a ^ false; // intention "simplify boolean expression" does nothing here, expected: boolean x = a;
+    boolean x1 = a ^ true; // expected: boolean x1 = !a; fails, does nothing
+    boolean y = !(a ^ b);  // intention replaces with a ^ b, expected !(a ^ b) fails
+    boolean y1 = a ^ false ^ b; // expected boolean y1 = a ^ b works correctly;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/afterXor4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/afterXor4.java
new file mode 100644
index 0000000..fab1141
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/afterXor4.java
@@ -0,0 +1,9 @@
+// "Simplify boolean expression" "true"
+class A {
+    boolean a = true;
+    boolean b = true;
+    boolean x = a ^ false; // intention "simplify boolean expression" does nothing here, expected: boolean x = a;
+    boolean x1 = a ^ true; // expected: boolean x1 = !a; fails, does nothing
+    boolean y = a ^ true ^ b;  // intention replaces with a ^ b, expected !(a ^ b) fails
+    boolean y1 = a ^ b; // expected boolean y1 = a ^ b works correctly;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/before1.java
new file mode 100644
index 0000000..d417a90
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/before1.java
@@ -0,0 +1,6 @@
+// "Simplify boolean expression" "true"
+class X {
+    void f() {
+        if (false || <caret>true || this == null) return;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/before2.java
new file mode 100644
index 0000000..ededa12
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/before2.java
@@ -0,0 +1,6 @@
+// "Simplify boolean expression" "true"
+class X {
+    void f() {
+        if (false || (<caret>true && !(false))|| this == null) return;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/before3.java
new file mode 100644
index 0000000..82b6b90
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/before3.java
@@ -0,0 +1,6 @@
+// "Simplify boolean expression" "true"
+class X {
+  void f() {
+    int i = !(!false && true) || <caret>(true ? true & true : !!false | false) || this == null ? 0 : 1;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/before4.java
new file mode 100644
index 0000000..1e0f0cc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/before4.java
@@ -0,0 +1,9 @@
+// "Simplify boolean expression" "true"
+class X {
+  void f() {
+        int i = 2;
+        if (false<caret> && i==0) {   
+            //sdf
+        }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/before5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/before5.java
new file mode 100644
index 0000000..85d0df6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/before5.java
@@ -0,0 +1,14 @@
+// "Simplify boolean expression" "true"
+class X {
+    void f() {
+        int i = 2;
+        if (false<caret> !=false) {
+            //sdf
+        }
+        else {
+            // begin
+            int o = 0; //mid
+            // end
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/before6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/before6.java
new file mode 100644
index 0000000..24e8ae0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/before6.java
@@ -0,0 +1,8 @@
+// "Simplify boolean expression" "true"
+class X {
+    void f() {
+        if ((!(!((boolean)true))<caret> ==(true))) {
+            //sdf
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/before7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/before7.java
new file mode 100644
index 0000000..b37b187
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/before7.java
@@ -0,0 +1,9 @@
+// "Simplify boolean expression" "true"
+class X {
+    void f(Object pVal, Object n) {
+        if (!pVal.equals(n))
+                pVal = null;
+            else if (<caret>true==true)
+                pVal = n;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/beforeBrokenInsidePolyadic.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/beforeBrokenInsidePolyadic.java
new file mode 100644
index 0000000..0254dfb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/beforeBrokenInsidePolyadic.java
@@ -0,0 +1,6 @@
+// "Simplify boolean expression" "false"
+class X {
+    void f(int a, int b, int c) {
+        if ( b - a == b - c - <caret>== b) return;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/beforeEq.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/beforeEq.java
new file mode 100644
index 0000000..4448015
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/beforeEq.java
@@ -0,0 +1,6 @@
+// "Simplify boolean expression" "true"
+class X {
+    void f(boolean b) {
+        if (<caret>b == false) return;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/beforeMiddlePolyadic.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/beforeMiddlePolyadic.java
new file mode 100644
index 0000000..7593818
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/beforeMiddlePolyadic.java
@@ -0,0 +1,6 @@
+// "Simplify boolean expression" "true"
+class X {
+    void f(boolean b, boolean c) {
+        if (b && tr<caret>ue && c) return;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/beforeXor1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/beforeXor1.java
new file mode 100644
index 0000000..1c3c205
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/beforeXor1.java
@@ -0,0 +1,9 @@
+// "Simplify boolean expression" "true"
+class A {
+    boolean a = true;
+    boolean b = true;
+    boolean x = a <caret>^ false; // intention "simplify boolean expression" does nothing here, expected: boolean x = a;
+    boolean x1 = a ^ true; // expected: boolean x1 = !a; fails, does nothing
+    boolean y = a ^ true ^ b;  // intention replaces with a ^ b, expected !(a ^ b) fails
+    boolean y1 = a ^ false ^ b; // expected boolean y1 = a ^ b works correctly;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/beforeXor2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/beforeXor2.java
new file mode 100644
index 0000000..a301561
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/beforeXor2.java
@@ -0,0 +1,9 @@
+// "Simplify boolean expression" "true"
+class A {
+    boolean a = true;
+    boolean b = true;
+    boolean x = a ^ false; // intention "simplify boolean expression" does nothing here, expected: boolean x = a;
+    boolean x1 = a <caret>^ true; // expected: boolean x1 = !a; fails, does nothing
+    boolean y = a ^ true ^ b;  // intention replaces with a ^ b, expected !(a ^ b) fails
+    boolean y1 = a ^ false ^ b; // expected boolean y1 = a ^ b works correctly;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/beforeXor3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/beforeXor3.java
new file mode 100644
index 0000000..956c8bf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/beforeXor3.java
@@ -0,0 +1,9 @@
+// "Simplify boolean expression" "true"
+class A {
+    boolean a = true;
+    boolean b = true;
+    boolean x = a ^ false; // intention "simplify boolean expression" does nothing here, expected: boolean x = a;
+    boolean x1 = a ^ true; // expected: boolean x1 = !a; fails, does nothing
+    boolean y = a ^ <caret>true ^ b;  // intention replaces with a ^ b, expected !(a ^ b) fails
+    boolean y1 = a ^ false ^ b; // expected boolean y1 = a ^ b works correctly;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/beforeXor4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/beforeXor4.java
new file mode 100644
index 0000000..dd5d0bc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpression/beforeXor4.java
@@ -0,0 +1,9 @@
+// "Simplify boolean expression" "true"
+class A {
+    boolean a = true;
+    boolean b = true;
+    boolean x = a ^ false; // intention "simplify boolean expression" does nothing here, expected: boolean x = a;
+    boolean x1 = a ^ true; // expected: boolean x1 = !a; fails, does nothing
+    boolean y = a ^ true ^ b;  // intention replaces with a ^ b, expected !(a ^ b) fails
+    boolean y1 = a ^ <caret>false ^ b; // expected boolean y1 = a ^ b works correctly;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/staticImportMethod/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/staticImportMethod/after1.java
new file mode 100644
index 0000000..bc4688b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/staticImportMethod/after1.java
@@ -0,0 +1,8 @@
+import static java.lang.Integer.parseInt;
+
+// "Static Import Method 'java.lang.Integer.parseInt'" "true"
+public class X {
+    {
+        <caret>parseInt("",10);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/staticImportMethod/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/staticImportMethod/after2.java
new file mode 100644
index 0000000..2c75d38
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/staticImportMethod/after2.java
@@ -0,0 +1,30 @@
+// "Static Import Method..." "true"
+package p;
+
+import static p.FFF.myEqualTo;
+
+public class X {
+  public void test() throws Exception {
+    assertMe("", myEqualTo(""));
+  }
+
+  <V> void assertMe(V v, M<V> m) {
+  }
+}
+
+
+class M<T> {
+}
+
+class FFF {
+  public static <T> M<T> myEqualTo(T operand) {
+    return null;
+  }
+}
+
+
+class LLL {
+  public static M<String> myEqualTo(String string) {
+    return null;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/staticImportMethod/afterReplaceAllRefs.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/staticImportMethod/afterReplaceAllRefs.java
new file mode 100644
index 0000000..5e27455
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/staticImportMethod/afterReplaceAllRefs.java
@@ -0,0 +1,9 @@
+import static java.lang.String.format;
+
+// "Static Import Method 'java.lang.String.format'" "true"
+public class X {
+    {
+      format("");
+      format("");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/staticImportMethod/afterReturnType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/staticImportMethod/afterReturnType.java
new file mode 100644
index 0000000..3dce0b5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/staticImportMethod/afterReturnType.java
@@ -0,0 +1,21 @@
+// "Static Import Method 'foo.B.aaaaaaa'" "true"
+package foo;
+
+import static foo.B.aaaaaaa;
+
+public class X {
+    {
+        Integer i = aaaaaaa("", 10);
+    }
+}
+
+class B {
+  public static  Integer aaaaaaa(String s, int i) {
+    return 1;
+  }
+}
+class B1 {
+  public static String aaaaaaa(String s, int i) {
+    return "";
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/staticImportMethod/afterVarargs.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/staticImportMethod/afterVarargs.java
new file mode 100644
index 0000000..3a187fb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/staticImportMethod/afterVarargs.java
@@ -0,0 +1,23 @@
+// "Static Import Method 'foo.B.aaaaaaa'" "true"
+package foo;
+
+import static foo.B.aaaaaaa;
+
+public class X {
+    {
+        foo(1, 2, aaaaaaa(""));
+    }
+  
+    void foo(Integer... p) {}
+}
+
+class B {
+  public static  Integer aaaaaaa(String s) {
+    return 1;
+  }
+}
+class B1 {
+  public static String aaaaaaa(String s) {
+    return "";
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/staticImportMethod/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/staticImportMethod/before1.java
new file mode 100644
index 0000000..ffab3da
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/staticImportMethod/before1.java
@@ -0,0 +1,6 @@
+// "Static Import Method 'java.lang.Integer.parseInt'" "true"
+public class X {
+    {
+        <caret>parseInt("",10);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/staticImportMethod/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/staticImportMethod/before2.java
new file mode 100644
index 0000000..bc37881
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/staticImportMethod/before2.java
@@ -0,0 +1,27 @@
+// "Static Import Method..." "true"
+package p;
+public class X {
+  public void test() throws Exception {
+    assertMe("", my<caret>EqualTo(""));
+  }
+
+  <V> void assertMe(V v, M<V> m) {
+  }
+}
+
+
+class M<T> {
+}
+
+class FFF {
+  public static <T> M<T> myEqualTo(T operand) {
+    return null;
+  }
+}
+
+
+class LLL {
+  public static M<String> myEqualTo(String string) {
+    return null;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/staticImportMethod/beforeQualified.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/staticImportMethod/beforeQualified.java
new file mode 100644
index 0000000..88b6fb2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/staticImportMethod/beforeQualified.java
@@ -0,0 +1,6 @@
+// "Static Import Method 'java.lang.Integer.parseInt'" "false"
+public class X {
+    {
+        this.<caret>parseInt("",10);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/staticImportMethod/beforeReplaceAllRefs.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/staticImportMethod/beforeReplaceAllRefs.java
new file mode 100644
index 0000000..cc7ad27
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/staticImportMethod/beforeReplaceAllRefs.java
@@ -0,0 +1,7 @@
+// "Static Import Method 'java.lang.String.format'" "true"
+public class X {
+    {
+      String.format("");
+      <caret>format("");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/staticImportMethod/beforeReturnType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/staticImportMethod/beforeReturnType.java
new file mode 100644
index 0000000..4193932
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/staticImportMethod/beforeReturnType.java
@@ -0,0 +1,18 @@
+// "Static Import Method 'foo.B.aaaaaaa'" "true"
+package foo;
+public class X {
+    {
+        Integer i = <caret>aaaaaaa("", 10);
+    }
+}
+
+class B {
+  public static  Integer aaaaaaa(String s, int i) {
+    return 1;
+  }
+}
+class B1 {
+  public static String aaaaaaa(String s, int i) {
+    return "";
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/staticImportMethod/beforeVarargs.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/staticImportMethod/beforeVarargs.java
new file mode 100644
index 0000000..86bbea1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/staticImportMethod/beforeVarargs.java
@@ -0,0 +1,21 @@
+// "Static Import Method 'foo.B.aaaaaaa'" "true"
+package foo;
+
+public class X {
+    {
+        foo(1, 2, <caret>aaaaaaa(""));
+    }
+  
+    void foo(Integer... p) {}
+}
+
+class B {
+  public static  Integer aaaaaaa(String s) {
+    return 1;
+  }
+}
+class B1 {
+  public static String aaaaaaa(String s) {
+    return "";
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/after1.java
new file mode 100644
index 0000000..811ded3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/after1.java
@@ -0,0 +1,10 @@
+// "Change "1" to '1' (to char literal)" "true"
+class Simple {
+    public void m(char ch) {
+
+    }
+
+    public void test() {
+        m(<caret>'1');
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/after10.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/after10.java
new file mode 100644
index 0000000..8d9d1aa
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/after10.java
@@ -0,0 +1,8 @@
+// "Change "'" to '\'' (to char literal)" "true"
+class Quotes {
+    void m1(char ch) {}
+
+    void test() {
+        m1(<caret>'\'');
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/after11.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/after11.java
new file mode 100644
index 0000000..4213da2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/after11.java
@@ -0,0 +1,8 @@
+// "Change "\'" to '\'' (to char literal)" "true"
+class Quotes {
+    void m1(char ch) {}
+
+    void test() {
+        m1(<caret>'\'');
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/after12.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/after12.java
new file mode 100644
index 0000000..906a847
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/after12.java
@@ -0,0 +1,8 @@
+// "Change '"' to "\"" (to String literal)" "true"
+class Quotes {
+    void m1(String s) {}
+
+    void test() {
+        m1(<caret>"\"");
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/after13.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/after13.java
new file mode 100644
index 0000000..e78c495
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/after13.java
@@ -0,0 +1,8 @@
+// "Change "\\" to '\\' (to char literal)" "true"
+class A {
+  void m(char x) {}
+
+  {
+    m(<caret>'\\');
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/after4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/after4.java
new file mode 100644
index 0000000..f687f89
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/after4.java
@@ -0,0 +1,16 @@
+// "Change "1" to '1' (to char literal)" "true"
+class Simple extends Ancestor {
+    public void m(int i) {
+
+    }
+
+    public void test() {
+        m(<caret>'1');
+    }
+}
+
+class Ancestor {
+    public void m(char ch) {
+
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/after5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/after5.java
new file mode 100644
index 0000000..552c258
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/after5.java
@@ -0,0 +1,10 @@
+// "Change "1" to '1' (to char literal)" "true"
+class Simple {
+    Simple() {}
+    Simple(int i) {}
+    Simple(char ch) {}
+
+    public static void test() {
+        final Simple instance = new Simple(<caret>'1');
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/after7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/after7.java
new file mode 100644
index 0000000..b1a6ca6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/after7.java
@@ -0,0 +1,5 @@
+// "Change '1' to "1" (to String literal)" "true"
+class Simple {
+    Simple() {this(<caret>"1");}
+    Simple(String s) {}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/after8.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/after8.java
new file mode 100644
index 0000000..f8d2cfb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/after8.java
@@ -0,0 +1,9 @@
+// "Change "1" to '1' (to char literal)" "true"
+class Simple {
+    Simple(int i) {}
+    Simple(char ch) {}
+}
+
+class Descendant extends Simple {
+    Descendant() {super(<caret>'1');}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/after9.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/after9.java
new file mode 100644
index 0000000..4fb13b5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/after9.java
@@ -0,0 +1,8 @@
+// "Change "1" to '1' (to char literal)" "true"
+class Simple {
+    public void m1(final int i, final char ch) {}
+
+    public void test() {
+        m1("does not matter", <caret>'1');
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/before1.java
new file mode 100644
index 0000000..08f2f32
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/before1.java
@@ -0,0 +1,10 @@
+// "Change "1" to '1' (to char literal)" "true"
+class Simple {
+    public void m(char ch) {
+
+    }
+
+    public void test() {
+        m(<caret>"1");
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/before10.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/before10.java
new file mode 100644
index 0000000..898ce20
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/before10.java
@@ -0,0 +1,8 @@
+// "Change "'" to '\'' (to char literal)" "true"
+class Quotes {
+    void m1(char ch) {}
+
+    void test() {
+        m1(<caret>"'");
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/before11.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/before11.java
new file mode 100644
index 0000000..73b921f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/before11.java
@@ -0,0 +1,8 @@
+// "Change "\'" to '\'' (to char literal)" "true"
+class Quotes {
+    void m1(char ch) {}
+
+    void test() {
+        m1(<caret>"\'");
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/before12.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/before12.java
new file mode 100644
index 0000000..e008dfb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/before12.java
@@ -0,0 +1,8 @@
+// "Change '"' to "\"" (to String literal)" "true"
+class Quotes {
+    void m1(String s) {}
+
+    void test() {
+        m1(<caret>'"');
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/before13.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/before13.java
new file mode 100644
index 0000000..c5716fa
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/before13.java
@@ -0,0 +1,8 @@
+// "Change "\\" to '\\' (to char literal)" "true"
+class A {
+  void m(char x) {}
+
+  {
+    m(<caret>"\\");
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/before2.java
new file mode 100644
index 0000000..ed999c2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/before2.java
@@ -0,0 +1,10 @@
+// "Change "1" to '1' (to char literal)" "false"
+class Simple {
+    public void m(int i, char ch) {
+
+    }
+
+    public void test() {
+        m(<caret>"1");
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/before3.java
new file mode 100644
index 0000000..14b1837
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/before3.java
@@ -0,0 +1,14 @@
+// "Change "1" to '1' (to char literal)" "false"
+class Simple {
+    public void m(char ch) {
+
+    }
+
+    public void m(String s) {
+
+    }
+
+    public void test() {
+        m(<caret>"1");
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/before4.java
new file mode 100644
index 0000000..6a13389
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/before4.java
@@ -0,0 +1,16 @@
+// "Change "1" to '1' (to char literal)" "true"
+class Simple extends Ancestor {
+    public void m(int i) {
+
+    }
+
+    public void test() {
+        m(<caret>"1");
+    }
+}
+
+class Ancestor {
+    public void m(char ch) {
+
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/before5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/before5.java
new file mode 100644
index 0000000..ef9bdf7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/before5.java
@@ -0,0 +1,10 @@
+// "Change "1" to '1' (to char literal)" "true"
+class Simple {
+    Simple() {}
+    Simple(int i) {}
+    Simple(char ch) {}
+
+    public static void test() {
+        final Simple instance = new Simple(<caret>"1");
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/before6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/before6.java
new file mode 100644
index 0000000..73b1461
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/before6.java
@@ -0,0 +1,11 @@
+// "Change "1" to '1' (to char literal)" "false"
+class Simple {
+    Simple() {}
+    Simple(int i) {}
+    Simple(char ch) {}
+    Simple(String s) {}
+
+    public static void test() {
+        final Simple instance = new Simple(<caret>"1", );
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/before7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/before7.java
new file mode 100644
index 0000000..65522d4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/before7.java
@@ -0,0 +1,5 @@
+// "Change '1' to "1" (to String literal)" "true"
+class Simple {
+    Simple() {this(<caret>'1');}
+    Simple(String s) {}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/before8.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/before8.java
new file mode 100644
index 0000000..700412a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/before8.java
@@ -0,0 +1,9 @@
+// "Change "1" to '1' (to char literal)" "true"
+class Simple {
+    Simple(int i) {}
+    Simple(char ch) {}
+}
+
+class Descendant extends Simple {
+    Descendant() {super(<caret>"1");}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/before9.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/before9.java
new file mode 100644
index 0000000..142a3db
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/stringToCharacterLiteral/before9.java
@@ -0,0 +1,8 @@
+// "Change "1" to '1' (to char literal)" "true"
+class Simple {
+    public void m1(final int i, final char ch) {}
+
+    public void test() {
+        m1("does not matter", <caret>"1");
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/superMethodReturn/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/superMethodReturn/after1.java
new file mode 100644
index 0000000..234b29e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/superMethodReturn/after1.java
@@ -0,0 +1,12 @@
+// "Make 'f' return 'void'" "true"
+class a {
+ void f() {
+   return ;
+ }
+}
+
+class b extends a {
+  <caret>void f() {
+    return 0;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/superMethodReturn/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/superMethodReturn/after2.java
new file mode 100644
index 0000000..6bf647a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/superMethodReturn/after2.java
@@ -0,0 +1,12 @@
+// "Make 'a.f' return 'int'" "true"
+class a {
+ int f() {
+   return ;
+ }
+}
+
+class b extends a {
+  <caret>int f() {
+    return 0;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/superMethodReturn/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/superMethodReturn/before1.java
new file mode 100644
index 0000000..931eedb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/superMethodReturn/before1.java
@@ -0,0 +1,12 @@
+// "Make 'f' return 'void'" "true"
+class a {
+ void f() {
+   return ;
+ }
+}
+
+class b extends a {
+  <caret>int f() {
+    return 0;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/superMethodReturn/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/superMethodReturn/before2.java
new file mode 100644
index 0000000..a2f653f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/superMethodReturn/before2.java
@@ -0,0 +1,12 @@
+// "Make 'a.f' return 'int'" "true"
+class a {
+ void f() {
+   return ;
+ }
+}
+
+class b extends a {
+  <caret>int f() {
+    return 0;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/superMethodReturn/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/superMethodReturn/before3.java
new file mode 100644
index 0000000..fad461a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/superMethodReturn/before3.java
@@ -0,0 +1,12 @@
+// "Make 'a.f' return 'int'" "false"
+class a {
+ private void f() {
+   return ;
+ }
+}
+
+class b extends a {
+  <caret>int f() {
+    return 0;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/superMethodReturn/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/superMethodReturn/before4.java
new file mode 100644
index 0000000..a5d5f6d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/superMethodReturn/before4.java
@@ -0,0 +1,12 @@
+// "Make 'f' return 'void'" "false"
+class a {
+ private void f() {
+   return ;
+ }
+}
+
+class b extends a {
+  <caret>int f() {
+    return 0;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/superMethodReturn/before5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/superMethodReturn/before5.java
new file mode 100644
index 0000000..c3e6064
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/superMethodReturn/before5.java
@@ -0,0 +1,12 @@
+// "Make 'f' return 'void'" "false"
+class a {
+ void f(int i) {
+   return ;
+ }
+}
+
+class b extends a {
+  <caret>int f() {
+    return 0;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppress15Inspections/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppress15Inspections/after1.java
new file mode 100644
index 0000000..19c2109
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppress15Inspections/after1.java
@@ -0,0 +1,6 @@
+// "Suppress all inspections for class" "true"
+@SuppressWarnings("ALL")
+public class Test {
+  public void run(int <caret>i) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppress15Inspections/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppress15Inspections/after2.java
new file mode 100644
index 0000000..f2a1850
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppress15Inspections/after2.java
@@ -0,0 +1,6 @@
+// "Suppress for statement" "true"
+public class Test {
+  public void run() {
+    @SuppressWarnings("UnusedDeclaration") int <caret>i;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppress15Inspections/after3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppress15Inspections/after3.java
new file mode 100644
index 0000000..127d57d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppress15Inspections/after3.java
@@ -0,0 +1,7 @@
+// "Suppress for statement" "true"
+public class Test {
+  public void run() {
+      //noinspection id,UnusedDeclaration
+    int <caret>i;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppress15Inspections/afterSuppressUnusedParameter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppress15Inspections/afterSuppressUnusedParameter.java
new file mode 100644
index 0000000..27ec49d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppress15Inspections/afterSuppressUnusedParameter.java
@@ -0,0 +1,9 @@
+// "Suppress for parameter" "true"
+public class Test {
+  private void run(@SuppressWarnings("UnusedParameters") String s<caret>ss) {
+  }
+
+  public static void main(String[] args) {
+    new Test().run(null);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppress15Inspections/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppress15Inspections/before1.java
new file mode 100644
index 0000000..5a5a244
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppress15Inspections/before1.java
@@ -0,0 +1,6 @@
+// "Suppress all inspections for class" "true"
[email protected]({"tt"})
+public class Test {
+  public void run(int <caret>i) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppress15Inspections/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppress15Inspections/before2.java
new file mode 100644
index 0000000..1093785
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppress15Inspections/before2.java
@@ -0,0 +1,6 @@
+// "Suppress for statement" "true"
+public class Test {
+  public void run() {
+    int <caret>i;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppress15Inspections/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppress15Inspections/before3.java
new file mode 100644
index 0000000..977200d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppress15Inspections/before3.java
@@ -0,0 +1,7 @@
+// "Suppress for statement" "true"
+public class Test {
+  public void run() {
+    //noinspection id
+    int <caret>i;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppress15Inspections/beforeSuppressUnusedParameter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppress15Inspections/beforeSuppressUnusedParameter.java
new file mode 100644
index 0000000..31739ff
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppress15Inspections/beforeSuppressUnusedParameter.java
@@ -0,0 +1,9 @@
+// "Suppress for parameter" "true"
+public class Test {
+  private void run(String s<caret>ss) {
+  }
+
+  public static void main(String[] args) {
+    new Test().run(null);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/after1.java
new file mode 100644
index 0000000..985e593
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/after1.java
@@ -0,0 +1,6 @@
+// "Suppress for method" "true"
+class a {
+/** @noinspection LocalCanBeFinal*/
+public void run(int <caret>i) {
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/after10.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/after10.java
new file mode 100644
index 0000000..30deb8c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/after10.java
@@ -0,0 +1,15 @@
+// "Suppress for method" "true"
+import java.awt.event.ActionListener;
+import java.awt.event.ActionEvent;
+
+class Test {
+    public static void main(String[] args) {
+        ActionListener listener = new ActionListener() {
+            /** @noinspection LocalCanBeFinal*/
+            public void actionPerformed(ActionEvent e) {
+                int i = 0;
+                System.out.println(i);
+            }
+        };
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/after11.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/after11.java
new file mode 100644
index 0000000..7cf9165
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/after11.java
@@ -0,0 +1,15 @@
+// "Suppress for class" "true"
+import java.awt.event.ActionListener;
+import java.awt.event.ActionEvent;
+
+/** @noinspection LocalCanBeFinal*/
+class Test {
+    public static void main(String[] args) {
+        ActionListener listener = new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                int i = 0;
+                System.out.println(i);
+            }
+        };
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/after2.java
new file mode 100644
index 0000000..ecbef9e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/after2.java
@@ -0,0 +1,8 @@
+// "Suppress for statement" "true"
+class a {
+public void run() {
+//noinspection LocalCanBeFinal
+    int <caret>i = 0;
+System.out.println(i);
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/after8.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/after8.java
new file mode 100644
index 0000000..4a4a6c1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/after8.java
@@ -0,0 +1,15 @@
+// "Suppress for class" "true"
+import java.awt.event.ActionListener;
+import java.awt.event.ActionEvent;
+
+/** @noinspection LocalCanBeFinal*/
+class Test {
+    public static void main(String[] args) {
+        ActionListener listener = new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                int <caret>i = 0;
+                System.out.println(i);
+            }
+        };
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/after9.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/after9.java
new file mode 100644
index 0000000..91b5dea
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/after9.java
@@ -0,0 +1,15 @@
+// "Suppress for class" "true"
+import java.awt.event.ActionListener;
+import java.awt.event.ActionEvent;
+class Test {
+    public static void main(String[] args) {
+
+        /** @noinspection LocalCanBeFinal*/
+        class T {
+          void foo() {
+            int i = 0;
+            System.out.println(i);
+          }
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/before1.java
new file mode 100644
index 0000000..9a48f68
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/before1.java
@@ -0,0 +1,5 @@
+// "Suppress for method" "true"
+class a {
+public void run(int <caret>i) {
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/before10.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/before10.java
new file mode 100644
index 0000000..c4927e6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/before10.java
@@ -0,0 +1,14 @@
+// "Suppress for method" "true"
+import java.awt.event.ActionListener;
+import java.awt.event.ActionEvent;
+
+class Test {
+    public static void main(String[] args) {
+        ActionListener listener = new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                int <caret>i = 0;
+                System.out.println(i);
+            }
+        };
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/before11.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/before11.java
new file mode 100644
index 0000000..920c9d8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/before11.java
@@ -0,0 +1,14 @@
+// "Suppress for class" "true"
+import java.awt.event.ActionListener;
+import java.awt.event.ActionEvent;
+
+class Test {
+    public static void main(String[] args) {
+        ActionListener listener = new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                int <caret>i = 0;
+                System.out.println(i);
+            }
+        };
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/before12.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/before12.java
new file mode 100644
index 0000000..9ca3462
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/before12.java
@@ -0,0 +1,16 @@
+// "Suppress for class" "false"
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+class Test {
+    @javax.annotation.Generated(value = "unknown")
+    public static void main(String[] args) {
+        ActionListener listener = new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                int <caret>i = 0;
+                System.out.println(i);
+            }
+        };
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/before2.java
new file mode 100644
index 0000000..2266dbe
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/before2.java
@@ -0,0 +1,7 @@
+// "Suppress for statement" "true"
+class a {
+public void run() {
+int <caret>i = 0;
+System.out.println(i);
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/before3.java
new file mode 100644
index 0000000..ff75b90
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/before3.java
@@ -0,0 +1,8 @@
+// "Suppress for statement" "false"
+class a {
+public void run() {
+        //    noinspection     LocalCanBeFinal
+    int <caret>i = 0;
+    System.out.println(i);
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/before4.java
new file mode 100644
index 0000000..ec87ed9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/before4.java
@@ -0,0 +1,8 @@
+// "Suppress for method" "false"
+/** @noinspection LocalCanBeFinal*/
+class a {
+public void run() {
+int <caret>i = 0;
+System.out.println(i);
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/before6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/before6.java
new file mode 100644
index 0000000..36fd61a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/before6.java
@@ -0,0 +1,5 @@
+// "Suppress for field" "false"
+/** @noinspection ALL*/
+class a {
+ static private  String mm = "00";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/before7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/before7.java
new file mode 100644
index 0000000..3f05431
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/before7.java
@@ -0,0 +1,7 @@
+// "Suppress for method" "false"
+/** @noinspection ALL*/
+class a {
+public void run() {
+int <caret>i = 0;
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/before8.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/before8.java
new file mode 100644
index 0000000..920c9d8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/before8.java
@@ -0,0 +1,14 @@
+// "Suppress for class" "true"
+import java.awt.event.ActionListener;
+import java.awt.event.ActionEvent;
+
+class Test {
+    public static void main(String[] args) {
+        ActionListener listener = new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                int <caret>i = 0;
+                System.out.println(i);
+            }
+        };
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/before9.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/before9.java
new file mode 100644
index 0000000..afdbab0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/before9.java
@@ -0,0 +1,14 @@
+// "Suppress for class" "true"
+import java.awt.event.ActionListener;
+import java.awt.event.ActionEvent;
+class Test {
+    public static void main(String[] args) {
+
+        class T {
+          void foo() {
+            int <caret>i = 0;
+            System.out.println(i);
+          }
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/after1.java
new file mode 100644
index 0000000..7b83a8c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/after1.java
@@ -0,0 +1,7 @@
+// "Suppress for statement" "true"
+class a {
+public void run() {
+//noinspection UnusedDeclaration
+    int <caret>i = 0;
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/after2.java
new file mode 100644
index 0000000..70a41fa
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/after2.java
@@ -0,0 +1,6 @@
+// "Suppress for method" "true"
+class a {
+/** @noinspection UnusedDeclaration*/
+private void <caret>run() {
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/after3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/after3.java
new file mode 100644
index 0000000..b91ba7c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/after3.java
@@ -0,0 +1,7 @@
+// "Suppress for method" "true"
+import java.io.IOException;
+class a {
+/** @noinspection RedundantThrowsDeclaration*/
+private void run() throws <caret>IOException{
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/after4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/after4.java
new file mode 100644
index 0000000..91e2756
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/after4.java
@@ -0,0 +1,11 @@
+// "Suppress for statement" "true"
+class a {
+/**
+* @deprecated
+*/
+int b;
+private void aa(){
+    //noinspection deprecation
+    b++;
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/after5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/after5.java
new file mode 100644
index 0000000..e450174
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/after5.java
@@ -0,0 +1,13 @@
+// "Suppress for statement" "true"
+class a {
+/**
+ * @deprecated
+ */
+public void aa(){
+}
+
+private void aaa(){
+    //noinspection deprecation
+    <caret>aa();
+}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/after6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/after6.java
new file mode 100644
index 0000000..b6ab71e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/after6.java
@@ -0,0 +1,8 @@
+// "Suppress for statement" "true"
+class a {
+  public void aa(){
+     int a = 0;
+      //noinspection SillyAssignment
+      <caret>a = a;
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/after7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/after7.java
new file mode 100644
index 0000000..c9fa103
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/after7.java
@@ -0,0 +1,9 @@
+// "Suppress for statement" "true"
+class a {
+static void setA(){
+}
+void b(){
+    //noinspection AccessStaticViaInstance
+    <caret>new a().setA();
+}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/after9.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/after9.java
new file mode 100644
index 0000000..d795e62
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/after9.java
@@ -0,0 +1,19 @@
+// "Suppress for class" "true"
+public class Test {
+
+  public void test() {
+    Inner inner = new Inner();
+  }
+
+  /** @noinspection deprecation*/
+  private static class Inner {
+
+    /**
+     * @deprecated
+     */
+    int i;
+    public void unused() {
+      i++;
+    }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/before1.java
new file mode 100644
index 0000000..ed7868d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/before1.java
@@ -0,0 +1,6 @@
+// "Suppress for statement" "true"
+class a {
+public void run() {
+int <caret>i = 0;
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/before2.java
new file mode 100644
index 0000000..edcb90e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/before2.java
@@ -0,0 +1,5 @@
+// "Suppress for method" "true"
+class a {
+private void <caret>run() {
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/before3.java
new file mode 100644
index 0000000..cddd510
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/before3.java
@@ -0,0 +1,6 @@
+// "Suppress for method" "true"
+import java.io.IOException;
+class a {
+private void run() throws <caret>IOException{
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/before4.java
new file mode 100644
index 0000000..223f218
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/before4.java
@@ -0,0 +1,10 @@
+// "Suppress for statement" "true"
+class a {
+/**
+* @deprecated
+*/
+int b;
+private void aa(){
+ <caret>b++;
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/before5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/before5.java
new file mode 100644
index 0000000..86da5e3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/before5.java
@@ -0,0 +1,12 @@
+// "Suppress for statement" "true"
+class a {
+/**
+ * @deprecated
+ */
+public void aa(){
+}
+
+private void aaa(){
+    <caret>aa();
+}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/before6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/before6.java
new file mode 100644
index 0000000..e3142ec6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/before6.java
@@ -0,0 +1,7 @@
+// "Suppress for statement" "true"
+class a {
+  public void aa(){
+     int a = 0;
+     <caret>a = a;
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/before7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/before7.java
new file mode 100644
index 0000000..a095c8c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/before7.java
@@ -0,0 +1,8 @@
+// "Suppress for statement" "true"
+class a {
+static void setA(){
+}
+void b(){
+  <caret>new a().setA();
+}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/before8.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/before8.java
new file mode 100644
index 0000000..0897593
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/before8.java
@@ -0,0 +1,6 @@
+// "Suppress for method" "false"
+/** @noinspection UNUSED_SYMBOL*/
+class a {
+private void run() {
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/before9.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/before9.java
new file mode 100644
index 0000000..aa94e7e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressNonInspections/before9.java
@@ -0,0 +1,18 @@
+// "Suppress for class" "true"
+public class Test {
+
+  public void test() {
+    Inner inner = new Inner();
+  }
+
+  private static class Inner {
+
+    /**
+     * @deprecated
+     */
+    int i;
+    public void unused() {
+      <caret>i++;
+    }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/after1.java
new file mode 100644
index 0000000..2e3a2c92
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/after1.java
@@ -0,0 +1,9 @@
+// "Surround with array initialization" "true"
+class A {
+  void bar(String[] args){
+  }
+
+  void foo(String s){
+    bar(new String[]{s});
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/after10.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/after10.java
new file mode 100644
index 0000000..dfc4c03
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/after10.java
@@ -0,0 +1,9 @@
+// "Surround with array initialization" "true"
+class A {
+
+  void foo(){
+    sort(new String[]{"String"}, "String");
+  }
+
+  <T extends String, Q> void sort(T[] a, Q q){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/after3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/after3.java
new file mode 100644
index 0000000..b9ad347
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/after3.java
@@ -0,0 +1,9 @@
+// "Surround with array initialization" "true"
+class A {
+  void bar(int i, String[] args){
+  }
+
+  void foo(String s){
+    bar(1, new String[]{s});
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/after5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/after5.java
new file mode 100644
index 0000000..ef528fc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/after5.java
@@ -0,0 +1,11 @@
+// "Surround with array initialization" "true"
+class A {
+  void bar(int i, String[] args){
+  }
+
+  void bar(int i, int j){}
+
+  void foo(String s){
+    bar(1, new String[]{s});
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/after6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/after6.java
new file mode 100644
index 0000000..619eea2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/after6.java
@@ -0,0 +1,8 @@
+// "Surround with array initialization" "true"
+class A {
+  A(String[] s){}
+
+  void foo(String s){
+    new A(new String[]{s});
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/after7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/after7.java
new file mode 100644
index 0000000..f4b674b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/after7.java
@@ -0,0 +1,7 @@
+// "Surround with array initialization" "true"
+class A {
+
+  String[] foo(){
+    return new String[]{""};
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/after8.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/after8.java
new file mode 100644
index 0000000..5595734
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/after8.java
@@ -0,0 +1,12 @@
+// "Surround with array initialization" "true"
+import java.util.*;
+class A {
+
+  void foo(){
+    Arrays.sort(new String[]{"Str"}, new Comparator<String>(){
+            public int compare(String o1, String o2) {
+                return 0;
+            }
+        });
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/before1.java
new file mode 100644
index 0000000..ead0470
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/before1.java
@@ -0,0 +1,9 @@
+// "Surround with array initialization" "true"
+class A {
+  void bar(String[] args){
+  }
+
+  void foo(String s){
+    bar(<caret>s);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/before10.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/before10.java
new file mode 100644
index 0000000..c84071f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/before10.java
@@ -0,0 +1,9 @@
+// "Surround with array initialization" "true"
+class A {
+
+  void foo(){
+    sort(<caret>"String", "String");
+  }
+
+  <T extends String, Q> void sort(T[] a, Q q){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/before2.java
new file mode 100644
index 0000000..b27e4ad
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/before2.java
@@ -0,0 +1,9 @@
+// "Surround with array initialization" "false"
+class A {
+  void bar(int arg){
+  }
+
+  void foo(String s){
+    bar(<caret>s);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/before3.java
new file mode 100644
index 0000000..3f6e0fd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/before3.java
@@ -0,0 +1,9 @@
+// "Surround with array initialization" "true"
+class A {
+  void bar(int i, String[] args){
+  }
+
+  void foo(String s){
+    bar(1, <caret>s);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/before4.java
new file mode 100644
index 0000000..acab87d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/before4.java
@@ -0,0 +1,9 @@
+// "Surround with array initialization" "false"
+class A {
+  void bar(int i, String[] args){
+  }
+
+  void foo(String s){
+    bar(<caret>1, s);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/before5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/before5.java
new file mode 100644
index 0000000..69ffce6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/before5.java
@@ -0,0 +1,11 @@
+// "Surround with array initialization" "true"
+class A {
+  void bar(int i, String[] args){
+  }
+
+  void bar(int i, int j){}
+
+  void foo(String s){
+    bar(1, <caret>s);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/before6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/before6.java
new file mode 100644
index 0000000..fd44dc4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/before6.java
@@ -0,0 +1,8 @@
+// "Surround with array initialization" "true"
+class A {
+  A(String[] s){}
+
+  void foo(String s){
+    new A(<caret>s);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/before7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/before7.java
new file mode 100644
index 0000000..0df1e53
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/before7.java
@@ -0,0 +1,7 @@
+// "Surround with array initialization" "true"
+class A {
+
+  String[] foo(){
+    return <caret>"";
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/before8.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/before8.java
new file mode 100644
index 0000000..fbd204c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/before8.java
@@ -0,0 +1,12 @@
+// "Surround with array initialization" "true"
+import java.util.*;
+class A {
+
+  void foo(){
+    Arrays.sort(<caret>"Str", new Comparator<String>(){
+            public int compare(String o1, String o2) {
+                return 0;
+            }
+        });
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/before9.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/before9.java
new file mode 100644
index 0000000..cd085d9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithArray/before9.java
@@ -0,0 +1,9 @@
+// "Surround with array initialization" "false"
+class A {
+
+  void foo(){
+    sort(<caret>"String", "String");
+  }
+
+  <T extends Integer, Q> void sort(T[] a, Q q){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithIf/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithIf/after1.java
new file mode 100644
index 0000000..536555e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithIf/after1.java
@@ -0,0 +1,9 @@
+// "Surround with 'if (i != null)'" "true"
+class A {
+    void foo(){
+        String i = null;
+        if (i != null<caret>) {
+            i.hashCode();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithIf/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithIf/after2.java
new file mode 100644
index 0000000..edee2c2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithIf/after2.java
@@ -0,0 +1,9 @@
+// "Surround with 'if (s != null)'" "true"
+class A {
+    void foo(){
+        String s = null;
+        if (s != null<caret>) {
+            for (int i=0; i!=s.hashCode();i++){}
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithIf/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithIf/before1.java
new file mode 100644
index 0000000..df3b176
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithIf/before1.java
@@ -0,0 +1,7 @@
+// "Surround with 'if (i != null)'" "true"
+class A {
+    void foo(){
+        String i = null;
+        <caret>i.hashCode();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithIf/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithIf/before2.java
new file mode 100644
index 0000000..3a8e1ac
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithIf/before2.java
@@ -0,0 +1,7 @@
+// "Surround with 'if (s != null)'" "true"
+class A {
+    void foo(){
+        String s = null;
+        for (int i=0; i!=<caret>s.hashCode();i++){}
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithIf/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithIf/before3.java
new file mode 100644
index 0000000..aff730b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithIf/before3.java
@@ -0,0 +1,7 @@
+// "Surround with 'if (s != null)'" "false"
+class A {
+    void foo(){
+        String s = null;
+        for (int i=<caret>s.toString().hashCode(); i==0; ) {}
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithTry/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithTry/after1.java
new file mode 100644
index 0000000..b446303
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithTry/after1.java
@@ -0,0 +1,17 @@
+// "Surround with try/catch" "true"
+class C {
+    static class E1 extends Exception { }
+
+    static class MyResource implements AutoCloseable {
+        public void close() throws E1 { }
+    }
+
+    void m() {
+        try {
+            try (MyResource r = new MyResource()) {
+            }
+        } catch (E1 e1) {
+            <selection>e1.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.</selection>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithTry/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithTry/before1.java
new file mode 100644
index 0000000..50f6b43
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/surroundWithTry/before1.java
@@ -0,0 +1,13 @@
+// "Surround with try/catch" "true"
+class C {
+    static class E1 extends Exception { }
+
+    static class MyResource implements AutoCloseable {
+        public void close() throws E1 { }
+    }
+
+    void m() {
+        try (<caret>MyResource r = new MyResource()) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unimplement/after2String.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unimplement/after2String.java
new file mode 100644
index 0000000..cf3c7bf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unimplement/after2String.java
@@ -0,0 +1,8 @@
+// "Unimplement Interface" "true"
+class A {
+  public String toString() {
+    return super.toString();
+  }
+}
+
+interface II {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unimplement/afterGenerics.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unimplement/afterGenerics.java
new file mode 100644
index 0000000..e050a74
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unimplement/afterGenerics.java
@@ -0,0 +1,11 @@
+// "Unimplement Interface" "true"
+class A {
+  public String toString() {
+    return super.toString();
+  }
+
+}
+
+interface II<T> {
+  void foo(T ty);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unimplement/afterLastPosition.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unimplement/afterLastPosition.java
new file mode 100644
index 0000000..2e76b0b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unimplement/afterLastPosition.java
@@ -0,0 +1,11 @@
+// "Unimplement Interface" "true"
+class A {
+  public String toString() {
+    return super.toString();
+  }
+
+    public void foo(String ty){}
+}
+
+interface II {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unimplement/before2String.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unimplement/before2String.java
new file mode 100644
index 0000000..637f86f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unimplement/before2String.java
@@ -0,0 +1,8 @@
+// "Unimplement Interface" "true"
+class A implements I<caret>I {
+  public String toString() {
+    return super.toString();
+  }
+}
+
+interface II {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unimplement/beforeGenerics.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unimplement/beforeGenerics.java
new file mode 100644
index 0000000..efeddf0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unimplement/beforeGenerics.java
@@ -0,0 +1,12 @@
+// "Unimplement Interface" "true"
+class A implements II<S<caret>tring> {
+  public String toString() {
+    return super.toString();
+  }
+
+    public void foo(String ty){}
+}
+
+interface II<T> {
+  void foo(T ty);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unimplement/beforeLastPosition.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unimplement/beforeLastPosition.java
new file mode 100644
index 0000000..d81882d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unimplement/beforeLastPosition.java
@@ -0,0 +1,11 @@
+// "Unimplement Interface" "true"
+class A implements II<caret> {
+  public String toString() {
+    return super.toString();
+  }
+
+    public void foo(String ty){}
+}
+
+interface II {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/varTypeFromCall/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/varTypeFromCall/after1.java
new file mode 100644
index 0000000..a89027d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/varTypeFromCall/after1.java
@@ -0,0 +1,11 @@
+// "Change 'list' type to 'List<java.lang.Integer>'" "true"
+public class Test {
+  void foo()  {
+    List<Integer> list = new List<>();
+    list.add(new Integer(0));
+  }
+}
+
+class List<T> {
+  void add(T t){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/varTypeFromCall/after2TypeParamsInOneCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/varTypeFromCall/after2TypeParamsInOneCall.java
new file mode 100644
index 0000000..622c3e2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/varTypeFromCall/after2TypeParamsInOneCall.java
@@ -0,0 +1,11 @@
+// "Change 'list' type to 'Lost<java.lang.String,java.lang.Integer>'" "true"
+public class Test {
+  void foo()  {
+    Lost<String, Integer> list = new Lost<>();
+    list.add("", new Integer(42));
+  }
+}
+
+class Lost<T, K> {
+  void add(T lt, K t){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/varTypeFromCall/afterAnotherParamTypeChange.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/varTypeFromCall/afterAnotherParamTypeChange.java
new file mode 100644
index 0000000..1b85916
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/varTypeFromCall/afterAnotherParamTypeChange.java
@@ -0,0 +1,11 @@
+// "Change 'list' type to 'Lost<java.lang.Integer>'" "true"
+public class Test {
+  void foo()  {
+    Lost<Integer> list = new Lost<>();
+    list.addd(new Lost<Integer>(), new Integer(9));
+  }
+}
+
+class Lost<T> {
+  void addd(Lost<T> lt, T t){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/varTypeFromCall/afterBoxing.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/varTypeFromCall/afterBoxing.java
new file mode 100644
index 0000000..1b43850
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/varTypeFromCall/afterBoxing.java
@@ -0,0 +1,11 @@
+// "Change 'list' type to 'List<java.lang.Integer>'" "true"
+public class Test {
+  void foo()  {
+    List<Integer> list = new List<>();
+    list.add(42);
+  }
+}
+
+class List<T> {
+  void add(T t){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/varTypeFromCall/afterCompound.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/varTypeFromCall/afterCompound.java
new file mode 100644
index 0000000..a6e6d60
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/varTypeFromCall/afterCompound.java
@@ -0,0 +1,11 @@
+// "Change 'list' type to 'Lost<java.lang.Integer>'" "true"
+public class Test {
+  void foo()  {
+    Lost<Integer> list = new Lost<>();
+    list.add(new Lost<Integer>());
+  }
+}
+
+class Lost<T> {
+  void add(Lost<T> t){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/varTypeFromCall/afterMixed.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/varTypeFromCall/afterMixed.java
new file mode 100644
index 0000000..802baaf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/varTypeFromCall/afterMixed.java
@@ -0,0 +1,11 @@
+// "Change 'list' type to 'Lost<java.lang.Integer>'" "true"
+public class Test {
+  void foo()  {
+    Lost<Integer> list = new Lost<>();
+    list.add(new Lost<Integer>(), new Integer(42));
+  }
+}
+
+class Lost<T> {
+  void add(Lost<T> lt, T t){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/varTypeFromCall/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/varTypeFromCall/before1.java
new file mode 100644
index 0000000..c14b834
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/varTypeFromCall/before1.java
@@ -0,0 +1,11 @@
+// "Change 'list' type to 'List<java.lang.Integer>'" "true"
+public class Test {
+  void foo()  {
+    List<String> list = new List<String>();
+    list.add(new In<caret>teger(0));
+  }
+}
+
+class List<T> {
+  void add(T t){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/varTypeFromCall/before2TypeParamsInOneCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/varTypeFromCall/before2TypeParamsInOneCall.java
new file mode 100644
index 0000000..ee27ed3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/varTypeFromCall/before2TypeParamsInOneCall.java
@@ -0,0 +1,11 @@
+// "Change 'list' type to 'Lost<java.lang.String,java.lang.Integer>'" "true"
+public class Test {
+  void foo()  {
+    Lost<String, String> list = new Lost<String, String>();
+    list.add("", new Int<caret>eger(42));
+  }
+}
+
+class Lost<T, K> {
+  void add(T lt, K t){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/varTypeFromCall/beforeAnotherParamTypeChange.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/varTypeFromCall/beforeAnotherParamTypeChange.java
new file mode 100644
index 0000000..61e8684
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/varTypeFromCall/beforeAnotherParamTypeChange.java
@@ -0,0 +1,11 @@
+// "Change 'list' type to 'Lost<java.lang.Integer>'" "true"
+public class Test {
+  void foo()  {
+    Lost<String> list = new Lost<String>();
+    list.addd(new Lost<Integer>(), new Int<caret>eger(9));
+  }
+}
+
+class Lost<T> {
+  void addd(Lost<T> lt, T t){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/varTypeFromCall/beforeBoxing.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/varTypeFromCall/beforeBoxing.java
new file mode 100644
index 0000000..1d02b91
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/varTypeFromCall/beforeBoxing.java
@@ -0,0 +1,11 @@
+// "Change 'list' type to 'List<java.lang.Integer>'" "true"
+public class Test {
+  void foo()  {
+    List<String> list = new List<String>();
+    list.add(4<caret>2);
+  }
+}
+
+class List<T> {
+  void add(T t){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/varTypeFromCall/beforeChangeSignatureAvailable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/varTypeFromCall/beforeChangeSignatureAvailable.java
new file mode 100644
index 0000000..9f5ec3b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/varTypeFromCall/beforeChangeSignatureAvailable.java
@@ -0,0 +1,11 @@
+// "Change 'var' type to 'Foo" "false"
+public class Test {
+  void foo()  {
+    final Foo var = new Foo();
+    var.foo("", 6<caret>6);
+  }
+}
+
+class Foo {
+  void foo(String str, String str1){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/varTypeFromCall/beforeCompound.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/varTypeFromCall/beforeCompound.java
new file mode 100644
index 0000000..aa2eb0c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/varTypeFromCall/beforeCompound.java
@@ -0,0 +1,11 @@
+// "Change 'list' type to 'Lost<java.lang.Integer>'" "true"
+public class Test {
+  void foo()  {
+    Lost<String> list = new Lost<String>();
+    list.add(new Lost<Integ<caret>er>());
+  }
+}
+
+class Lost<T> {
+  void add(Lost<T> t){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/varTypeFromCall/beforeMixed.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/varTypeFromCall/beforeMixed.java
new file mode 100644
index 0000000..b0d6cab
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/varTypeFromCall/beforeMixed.java
@@ -0,0 +1,11 @@
+// "Change 'list' type to 'Lost<java.lang.Integer>'" "true"
+public class Test {
+  void foo()  {
+    Lost<String> list = new Lost<String>();
+    list.add(new Lost<Integ<caret>er>(), new Integer(42));
+  }
+}
+
+class Lost<T> {
+  void add(Lost<T> lt, T t){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/after1.java
new file mode 100644
index 0000000..b7f7e63
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/after1.java
@@ -0,0 +1,6 @@
+// "Change 'test' type to 'int[][]'" "true"
+class A {
+    void m() {
+        final int[][] test = {new int<caret>[]{1}};
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/after10.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/after10.java
new file mode 100644
index 0000000..7e8136fb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/after10.java
@@ -0,0 +1,6 @@
+// "Change 'new Long[]' to 'new char[][]'" "true"
+class A {
+    void m() {
+        final char[][] test = new char[][]{<caret>{'a'}, {'1'}};
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/after2.java
new file mode 100644
index 0000000..1cadb61
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/after2.java
@@ -0,0 +1,6 @@
+// "Change 'test' type to 'int[][]'" "true"
+class A {
+    void m() {
+        int[][] test = new int[][]{<caret>{1}, {2}};
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/after3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/after3.java
new file mode 100644
index 0000000..1cadb61
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/after3.java
@@ -0,0 +1,6 @@
+// "Change 'test' type to 'int[][]'" "true"
+class A {
+    void m() {
+        int[][] test = new int[][]{<caret>{1}, {2}};
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/after4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/after4.java
new file mode 100644
index 0000000..89ddf94
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/after4.java
@@ -0,0 +1,6 @@
+// "Change 'test' type to 'int[][]'" "true"
+class A {
+    void m() {
+        int[][] test = new int[][]{{<caret>1}, {2}};
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/after5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/after5.java
new file mode 100644
index 0000000..8893a91
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/after5.java
@@ -0,0 +1,6 @@
+// "Change 'test' type to 'char[]'" "true"
+class A {
+    void m() {
+        final char[] test = new char[]{<caret>'a'};
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/after6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/after6.java
new file mode 100644
index 0000000..0debead
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/after6.java
@@ -0,0 +1,6 @@
+// "Change 'test' type to 'char[]'" "true"
+class A {
+    void m() {
+        final char[] test = {<caret>'a'};
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/after9.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/after9.java
new file mode 100644
index 0000000..a74a518
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/after9.java
@@ -0,0 +1,10 @@
+// "Change 'myArr' type to 'char[][]'" "true"
+class A extends B {
+    void m() {
+        myArr = new char[][]{{<caret>'a'}};
+    }
+}
+
+class B {
+  protected char[][] myArr;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/before1.java
new file mode 100644
index 0000000..34cc492
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/before1.java
@@ -0,0 +1,6 @@
+// "Change 'test' type to 'int[][]'" "true"
+class A {
+    void m() {
+        final Long[][] test = {new int<caret>[]{1}};
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/before10.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/before10.java
new file mode 100644
index 0000000..f3561a6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/before10.java
@@ -0,0 +1,6 @@
+// "Change 'new Long[]' to 'new char[][]'" "true"
+class A {
+    void m() {
+        final char[][] test = new Long[]{<caret>{'a'}, {'1'}};
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/before2.java
new file mode 100644
index 0000000..be9e287
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/before2.java
@@ -0,0 +1,6 @@
+// "Change 'test' type to 'int[][]'" "true"
+class A {
+    void m() {
+        Long[][][] test = new Long[]{<caret>{1}, {2}};
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/before3.java
new file mode 100644
index 0000000..35e45cd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/before3.java
@@ -0,0 +1,6 @@
+// "Change 'test' type to 'int[][]'" "true"
+class A {
+    void m() {
+        Long[] test = new Long[]{<caret>{1}, {2}};
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/before4.java
new file mode 100644
index 0000000..007800e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/before4.java
@@ -0,0 +1,6 @@
+// "Change 'test' type to 'int[][]'" "true"
+class A {
+    void m() {
+        Long test = new Long[][][][]{{<caret>1}, {2}};
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/before5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/before5.java
new file mode 100644
index 0000000..a048c22
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/before5.java
@@ -0,0 +1,6 @@
+// "Change 'test' type to 'char[]'" "true"
+class A {
+    void m() {
+        final Long[] test = new Long[]{<caret>'a'};
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/before6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/before6.java
new file mode 100644
index 0000000..2e5b97f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/before6.java
@@ -0,0 +1,6 @@
+// "Change 'test' type to 'char[]'" "true"
+class A {
+    void m() {
+        final Long[] test = {<caret>'a'};
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/before7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/before7.java
new file mode 100644
index 0000000..769d870
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/before7.java
@@ -0,0 +1,6 @@
+// "Change 'test' type to 'char[]'" "false"
+class A {
+    void m() {
+        final Long[] test = {<caret>'a', 1};
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/before8.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/before8.java
new file mode 100644
index 0000000..0d64ee5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/before8.java
@@ -0,0 +1,6 @@
+// "Change 'test' type to 'char[][]'" "false"
+class A {
+    void m() {
+        final Long[] test = {<caret>{'a'}, {1}};
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/before9.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/before9.java
new file mode 100644
index 0000000..de63666
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableArrayType/before9.java
@@ -0,0 +1,10 @@
+// "Change 'myArr' type to 'char[][]'" "true"
+class A extends B {
+    void m() {
+        myArr = new String[][]{{<caret>'a'}};
+    }
+}
+
+class B {
+  protected String[][] myArr;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableParameterizedType/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableParameterizedType/after1.java
new file mode 100644
index 0000000..ea910a3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableParameterizedType/after1.java
@@ -0,0 +1,19 @@
+// "Change 'i' type to 'a.i.ii<java.lang.String>'" "true"
+class a
+{
+  class i {
+    class ii<E> {
+
+    }
+  }
+  class i2 {
+    class ii {
+
+    }
+  }
+
+   public void foo()
+   {
+      i.ii<<caret>String> i;
+   }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableParameterizedType/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableParameterizedType/before1.java
new file mode 100644
index 0000000..defc656
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableParameterizedType/before1.java
@@ -0,0 +1,19 @@
+// "Change 'i' type to 'a.i.ii<java.lang.String>'" "true"
+class a
+{
+  class i {
+    class ii<E> {
+
+    }
+  }
+  class i2 {
+    class ii {
+
+    }
+  }
+
+   public void foo()
+   {
+      i2.ii<<caret>String> i;
+   }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableParameterizedType/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableParameterizedType/before2.java
new file mode 100644
index 0000000..88cad2e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableParameterizedType/before2.java
@@ -0,0 +1,18 @@
+// "Change 's' type to 'O.f<java.lang.String>'" "false"
+
+class O {
+
+    f f() {
+        return null;
+    }
+
+    class f <T> {
+    }
+
+    void g() {
+
+        final f s = this.<<caret>String>f();
+
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableType/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableType/after1.java
new file mode 100644
index 0000000..a588bf7c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableType/after1.java
@@ -0,0 +1,10 @@
+// "Change 'i' type to 'double'" "true"
+import java.io.*;
+
+class a {
+ void f() {
+   double i;
+   <caret>i = 6.6;
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableType/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableType/after2.java
new file mode 100644
index 0000000..3ee033e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableType/after2.java
@@ -0,0 +1,10 @@
+// "Change 'i' type to 'java.lang.String'" "true"
+import java.io.*;
+
+class a {
+ void f() {
+   String i;
+   <caret>i = "dd";
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableType/after3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableType/after3.java
new file mode 100644
index 0000000..61d52c1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableType/after3.java
@@ -0,0 +1,9 @@
+// "Change 'i' type to 'char'" "true"
+import java.io.*;
+
+class a {
+ void f() {
+   <caret>char i = 'd';
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableType/after4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableType/after4.java
new file mode 100644
index 0000000..d7b4163
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableType/after4.java
@@ -0,0 +1,8 @@
+// "Change 's' type to 'java.lang.Runnable'" "true"
+
+class a {
+    Runnable s = new Runnable() {
+        public void run() { }
+    };
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableType/after5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableType/after5.java
new file mode 100644
index 0000000..6a7f841
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableType/after5.java
@@ -0,0 +1,12 @@
+// "Change 'i' type to 'java.lang.String'" "true"
+
+class Base {
+ void foo(String i) {}
+}
+
+class Ex extends Base {
+ @Override
+ void foo(String i) {
+   i = "abc"; // when I invoke "Change type of 'i' to 'String'", base method is ignored so method overriding is lost
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableType/afterInCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableType/afterInCall.java
new file mode 100644
index 0000000..35b2904
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableType/afterInCall.java
@@ -0,0 +1,8 @@
+// "Change 'i' type to 'java.lang.String'" "true"
+
+class Ex{
+ void foo(String i) {
+   bar(i);
+ }
+ void bar(String s) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableType/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableType/before1.java
new file mode 100644
index 0000000..4e8742b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableType/before1.java
@@ -0,0 +1,10 @@
+// "Change 'i' type to 'double'" "true"
+import java.io.*;
+
+class a {
+ void f() {
+   int i;
+   <caret>i = 6.6;
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableType/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableType/before2.java
new file mode 100644
index 0000000..6b80da6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableType/before2.java
@@ -0,0 +1,10 @@
+// "Change 'i' type to 'java.lang.String'" "true"
+import java.io.*;
+
+class a {
+ void f() {
+   int i;
+   <caret>i = "dd";
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableType/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableType/before3.java
new file mode 100644
index 0000000..f94ad9a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableType/before3.java
@@ -0,0 +1,9 @@
+// "Change 'i' type to 'char'" "true"
+import java.io.*;
+
+class a {
+ void f() {
+   <caret>String i = 'd';
+ }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableType/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableType/before4.java
new file mode 100644
index 0000000..6265e56
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableType/before4.java
@@ -0,0 +1,8 @@
+// "Change 's' type to 'java.lang.Runnable'" "true"
+
+class a {
+    String s = <caret>new Runnable() {
+        public void run() { }
+    };
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableType/before5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableType/before5.java
new file mode 100644
index 0000000..7ead738
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableType/before5.java
@@ -0,0 +1,12 @@
+// "Change 'i' type to 'java.lang.String'" "true"
+
+class Base {
+ void foo(int i) {}
+}
+
+class Ex extends Base {
+ @Override
+ void foo(int i) {
+   i = <caret>"abc"; // when I invoke "Change type of 'i' to 'String'", base method is ignored so method overriding is lost
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableType/beforeInCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableType/beforeInCall.java
new file mode 100644
index 0000000..92a32c9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableType/beforeInCall.java
@@ -0,0 +1,8 @@
+// "Change 'i' type to 'java.lang.String'" "true"
+
+class Ex{
+ void foo(int i) {
+   bar(<caret>i);
+ }
+ void bar(String s) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableType/beforeInLibCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableType/beforeInLibCall.java
new file mode 100644
index 0000000..337af8a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/variableType/beforeInLibCall.java
@@ -0,0 +1,9 @@
+// "Change 'i' type to 'long'" "false"
+
+class M extends Thread {
+  @Override
+  public boolean equals(Object obj) {
+    Thread.sleep(<caret>obj);
+    return super.equals(obj);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/wrapExpression/afterParseAssignment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/wrapExpression/afterParseAssignment.java
new file mode 100644
index 0000000..ea20b87
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/wrapExpression/afterParseAssignment.java
@@ -0,0 +1,4 @@
+// "Wrap using 'Long.parseLong'" "true"
+public class Test {
+  private long lo = Long.parseLong("42");
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/wrapExpression/afterParseInCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/wrapExpression/afterParseInCall.java
new file mode 100644
index 0000000..5ce32b3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/wrapExpression/afterParseInCall.java
@@ -0,0 +1,8 @@
+// "Wrap using 'Long.parseLong'" "true"
+public class Test {
+  void ba() {
+    fa(Long.parseLong("42"));
+  }
+
+  void fa(long l){}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/wrapExpression/afterParseInVarargsCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/wrapExpression/afterParseInVarargsCall.java
new file mode 100644
index 0000000..3170613
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/wrapExpression/afterParseInVarargsCall.java
@@ -0,0 +1,8 @@
+// "Wrap using 'Long.parseLong'" "true"
+public class Test {
+  void ba(long l) {
+    fa(l, Long.parseLong("42"));
+  }
+
+  void fa(long... l){}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/wrapExpression/afterValueofAssignment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/wrapExpression/afterValueofAssignment.java
new file mode 100644
index 0000000..1ac02ad
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/wrapExpression/afterValueofAssignment.java
@@ -0,0 +1,4 @@
+// "Wrap using 'Long.valueOf'" "true"
+public class Test {
+  private Long lo = Long.valueOf("42");
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/wrapExpression/afterValueofCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/wrapExpression/afterValueofCall.java
new file mode 100644
index 0000000..19333ac
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/wrapExpression/afterValueofCall.java
@@ -0,0 +1,8 @@
+// "Wrap using 'Long.valueOf'" "true"
+public class Test {
+  void ba() {
+    fa(Long.valueOf("42"));
+  }
+
+  void fa(Long l){}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/wrapExpression/afterValueofInVarargsCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/wrapExpression/afterValueofInVarargsCall.java
new file mode 100644
index 0000000..11e61b1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/wrapExpression/afterValueofInVarargsCall.java
@@ -0,0 +1,8 @@
+// "Wrap using 'Long.valueOf'" "true"
+public class Test {
+  void ba(Long l) {
+    fa(l, Long.valueOf("42"));
+  }
+
+  void fa(Long... l){}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/wrapExpression/afterValueofVarargsCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/wrapExpression/afterValueofVarargsCall.java
new file mode 100644
index 0000000..4291e43
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/wrapExpression/afterValueofVarargsCall.java
@@ -0,0 +1,8 @@
+// "Wrap using 'Long.valueOf'" "true"
+public class Test {
+  void ba() {
+    fa(Long.valueOf("42"));
+  }
+
+  void fa(Long l, int... ii){}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/wrapExpression/beforeParseAssignment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/wrapExpression/beforeParseAssignment.java
new file mode 100644
index 0000000..0700d00
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/wrapExpression/beforeParseAssignment.java
@@ -0,0 +1,4 @@
+// "Wrap using 'Long.parseLong'" "true"
+public class Test {
+  private long l<caret>o = "42";
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/wrapExpression/beforeParseInCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/wrapExpression/beforeParseInCall.java
new file mode 100644
index 0000000..d4d0283e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/wrapExpression/beforeParseInCall.java
@@ -0,0 +1,8 @@
+// "Wrap using 'Long.parseLong'" "true"
+public class Test {
+  void ba() {
+    fa("4<caret>2");
+  }
+
+  void fa(long l){}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/wrapExpression/beforeParseInVarargsCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/wrapExpression/beforeParseInVarargsCall.java
new file mode 100644
index 0000000..62ca613
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/wrapExpression/beforeParseInVarargsCall.java
@@ -0,0 +1,8 @@
+// "Wrap using 'Long.parseLong'" "true"
+public class Test {
+  void ba(long l) {
+    fa(l, "4<caret>2");
+  }
+
+  void fa(long... l){}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/wrapExpression/beforeValueofAssignment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/wrapExpression/beforeValueofAssignment.java
new file mode 100644
index 0000000..8b81211
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/wrapExpression/beforeValueofAssignment.java
@@ -0,0 +1,4 @@
+// "Wrap using 'Long.valueOf'" "true"
+public class Test {
+  private Long l<caret>o = "42";
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/wrapExpression/beforeValueofCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/wrapExpression/beforeValueofCall.java
new file mode 100644
index 0000000..17604b2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/wrapExpression/beforeValueofCall.java
@@ -0,0 +1,8 @@
+// "Wrap using 'Long.valueOf'" "true"
+public class Test {
+  void ba() {
+    fa("4<caret>2");
+  }
+
+  void fa(Long l){}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/wrapExpression/beforeValueofInVarargsCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/wrapExpression/beforeValueofInVarargsCall.java
new file mode 100644
index 0000000..a49a329
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/wrapExpression/beforeValueofInVarargsCall.java
@@ -0,0 +1,8 @@
+// "Wrap using 'Long.valueOf'" "true"
+public class Test {
+  void ba(Long l) {
+    fa(l, "4<caret>2");
+  }
+
+  void fa(Long... l){}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/wrapExpression/beforeValueofVarargsCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/wrapExpression/beforeValueofVarargsCall.java
new file mode 100644
index 0000000..7dd6f91
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/wrapExpression/beforeValueofVarargsCall.java
@@ -0,0 +1,8 @@
+// "Wrap using 'Long.valueOf'" "true"
+public class Test {
+  void ba() {
+    fa("4<caret>2");
+  }
+
+  void fa(Long l, int... ii){}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/after1.java
new file mode 100644
index 0000000..ba203d4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/after1.java
@@ -0,0 +1,12 @@
+import static I.FOO;
+
+// "Replace Implements with Static Import" "true"
+public class X {
+  void foo() {
+    System.out.println(FOO);
+  }
+}
+
+interface I {
+  String FOO = "foo";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/after10.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/after10.java
new file mode 100644
index 0000000..e961ace
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/after10.java
@@ -0,0 +1,25 @@
+import static In.FOO;
+
+// "Replace Implements with Static Import" "true"
+interface In {
+    int FOO = 0;
+}
+
+class II {
+    public static void main(String[] args) {
+        System.out.println(FOO);
+    }
+}
+
+class II1 {
+    public static void main(String[] args) {
+        System.out.println(FOO);
+    }
+}
+
+class Uc {
+    static final String FOO = "";
+    void g() {
+        System.out.println("" + In.FOO);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/after11.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/after11.java
new file mode 100644
index 0000000..2cf3a0e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/after11.java
@@ -0,0 +1,28 @@
+import static In.FOO;
+
+// "Replace Implements with Static Import" "true"
+interface In {
+    int FOO = 0;
+}
+
+class II {
+    public static void main(String[] args) {
+        System.out.println(FOO);
+    }
+}
+
+/**
+ * {@link In.FOO}
+ */
+class II1 {
+    public static void main(String[] args) {
+        System.out.println(FOO);
+    }
+}
+
+class Uc {
+    static final String FOO = "";
+    void g() {
+        System.out.println("" + In.FOO);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/after12.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/after12.java
new file mode 100644
index 0000000..9356e3d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/after12.java
@@ -0,0 +1,28 @@
+import static In.FOO;
+
+// "Replace Implements with Static Import" "true"
+interface In {
+    int FOO = 0;
+}
+
+class II {
+    public static void main(String[] args) {
+        System.out.println(FOO);
+    }
+}
+
+/**
+ * {@link I#FOO}
+ */
+class II1 {
+    public static void main(String[] args) {
+        System.out.println(FOO);
+    }
+}
+
+class Uc {
+    static final String FOO = "";
+    void g() {
+        System.out.println("" + In.FOO);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/after2.java
new file mode 100644
index 0000000..338c51f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/after2.java
@@ -0,0 +1,22 @@
+import static I.*;
+
+// "Replace Implements with Static Import" "true"
+public class X {
+  void foo() {
+    System.out.println(FOO);
+    System.out.println(FOO1);
+    System.out.println(FOO2);
+    System.out.println(FOO3);
+    System.out.println(FOO4);
+    System.out.println(FOO5);
+  }
+}
+
+interface I {
+  String FOO = "foo";
+  String FOO1 = "foo";
+  String FOO2 = "foo";
+  String FOO3 = "foo";
+  String FOO4 = "foo";
+  String FOO5 = "foo";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/after6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/after6.java
new file mode 100644
index 0000000..858e76c1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/after6.java
@@ -0,0 +1,18 @@
+import static I.FOO;
+import static I1.BAZZ;
+
+// "Replace Implements with Static Import" "true"
+public class X {
+  void bar() {
+    System.out.println(FOO);
+    System.out.println(BAZZ);
+  }
+}
+
+interface I extends I1{
+  String FOO = "foo";
+}
+
+interface I1 {
+  String BAZZ = "bazz";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/after7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/after7.java
new file mode 100644
index 0000000..8bac821f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/after7.java
@@ -0,0 +1,17 @@
+import static I1.BAZZ;
+
+// "Replace Implements with Static Import" "true"
+public class X implements I {
+  void bar() {
+    System.out.println(FOO);
+    System.out.println(BAZZ);
+  }
+}
+
+interface I {
+  String FOO = "foo";
+}
+
+interface I1 {
+  String BAZZ = "bazz";
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/after8.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/after8.java
new file mode 100644
index 0000000..9858e52
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/after8.java
@@ -0,0 +1,18 @@
+import static I1.BAZZ;
+import static II.FOO;
+
+// "Replace Implements with Static Import" "true"
+public class X {
+  void bar() {
+    System.out.println(FOO);
+    System.out.println(BAZZ);
+  }
+}
+
+interface II extends I1{
+  String FOO = "foo";
+}
+
+interface I1 {
+  String BAZZ = "bazz";
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/after9.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/after9.java
new file mode 100644
index 0000000..7c0da42
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/after9.java
@@ -0,0 +1,19 @@
+import static In.FOO;
+
+// "Replace Implements with Static Import" "true"
+interface In {
+    int FOO = 0;
+}
+
+class II {
+    public static void main(String[] args) {
+        System.out.println(FOO);
+    }
+}
+
+class II1 {
+    int FOO = 9;
+    public static void main(String[] args) {
+        System.out.println(In.FOO);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/before1.java
new file mode 100644
index 0000000..deb45e5b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/before1.java
@@ -0,0 +1,10 @@
+// "Replace Implements with Static Import" "true"
+public class X implements <caret>I {
+  void foo() {
+    System.out.println(FOO);
+  }
+}
+
+interface I {
+  String FOO = "foo";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/before10.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/before10.java
new file mode 100644
index 0000000..a870d34
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/before10.java
@@ -0,0 +1,23 @@
+// "Replace Implements with Static Import" "true"
+interface I<caret>n {
+    int FOO = 0;
+}
+
+class II implements In {
+    public static void main(String[] args) {
+        System.out.println(FOO);
+    }
+}
+
+class II1 implements In {
+    public static void main(String[] args) {
+        System.out.println(II1.FOO);
+    }
+}
+
+class Uc {
+    static final String FOO = "";
+    void g() {
+        System.out.println("" + II.FOO);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/before11.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/before11.java
new file mode 100644
index 0000000..5d159ce
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/before11.java
@@ -0,0 +1,26 @@
+// "Replace Implements with Static Import" "true"
+interface I<caret>n {
+    int FOO = 0;
+}
+
+class II implements In {
+    public static void main(String[] args) {
+        System.out.println(FOO);
+    }
+}
+
+/**
+ * {@link In.FOO}
+ */
+class II1 implements In {
+    public static void main(String[] args) {
+        System.out.println(II1.FOO);
+    }
+}
+
+class Uc {
+    static final String FOO = "";
+    void g() {
+        System.out.println("" + II.FOO);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/before12.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/before12.java
new file mode 100644
index 0000000..1db75ff
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/before12.java
@@ -0,0 +1,26 @@
+// "Replace Implements with Static Import" "true"
+interface I<caret>n {
+    int FOO = 0;
+}
+
+class II implements In {
+    public static void main(String[] args) {
+        System.out.println(FOO);
+    }
+}
+
+/**
+ * {@link I#FOO}
+ */
+class II1 implements In {
+    public static void main(String[] args) {
+        System.out.println(II1.FOO);
+    }
+}
+
+class Uc {
+    static final String FOO = "";
+    void g() {
+        System.out.println("" + II.FOO);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/before2.java
new file mode 100644
index 0000000..d42b7e1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/before2.java
@@ -0,0 +1,20 @@
+// "Replace Implements with Static Import" "true"
+public class X implements <caret>I {
+  void foo() {
+    System.out.println(FOO);
+    System.out.println(FOO1);
+    System.out.println(FOO2);
+    System.out.println(FOO3);
+    System.out.println(FOO4);
+    System.out.println(FOO5);
+  }
+}
+
+interface I {
+  String FOO = "foo";
+  String FOO1 = "foo";
+  String FOO2 = "foo";
+  String FOO3 = "foo";
+  String FOO4 = "foo";
+  String FOO5 = "foo";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/before3.java
new file mode 100644
index 0000000..9eb5c7f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/before3.java
@@ -0,0 +1,22 @@
+// "Replace Implements with Static Import" "false"
+public class X implements <caret>I {
+  void foo() {
+    System.out.println(FOO);
+    System.out.println(FOO1);
+    System.out.println(FOO2);
+    System.out.println(FOO3);
+    System.out.println(FOO4);
+    System.out.println(FOO5);
+  }
+}
+
+interface I {
+  String FOO = "foo";
+  String FOO1 = "foo";
+  String FOO2 = "foo";
+  String FOO3 = "foo";
+  String FOO4 = "foo";
+  String FOO5 = "foo";
+
+  void foo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/before4.java
new file mode 100644
index 0000000..0002d5d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/before4.java
@@ -0,0 +1,7 @@
+// "Replace Implements with Static Import" "false"
+public class X implements <caret>I {
+  void bar() {}
+}
+
+interface I {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/before5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/before5.java
new file mode 100644
index 0000000..e0216db
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/before5.java
@@ -0,0 +1,14 @@
+// "Replace Implements with Static Import" "false"
+public class X implements <caret>I {
+  void bar() {
+    System.out.println(FOO);
+  }
+}
+
+interface I extends I1{
+  String FOO = "foo";
+}
+
+interface I1 {
+  void foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/before6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/before6.java
new file mode 100644
index 0000000..539ef71
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/before6.java
@@ -0,0 +1,15 @@
+// "Replace Implements with Static Import" "true"
+public class X implements <caret>I {
+  void bar() {
+    System.out.println(FOO);
+    System.out.println(BAZZ);
+  }
+}
+
+interface I extends I1{
+  String FOO = "foo";
+}
+
+interface I1 {
+  String BAZZ = "bazz";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/before7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/before7.java
new file mode 100644
index 0000000..bada6cc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/before7.java
@@ -0,0 +1,15 @@
+// "Replace Implements with Static Import" "true"
+public class X implements I {
+  void bar() {
+    System.out.println(FOO);
+    System.out.println(BAZZ);
+  }
+}
+
+interface I extends I1{
+  String FOO = "foo";
+}
+
+interface I<caret>1 {
+  String BAZZ = "bazz";
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/before8.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/before8.java
new file mode 100644
index 0000000..e75d5eb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/before8.java
@@ -0,0 +1,15 @@
+// "Replace Implements with Static Import" "true"
+public class X implements II {
+  void bar() {
+    System.out.println(FOO);
+    System.out.println(BAZZ);
+  }
+}
+
+interface I<caret>I extends I1{
+  String FOO = "foo";
+}
+
+interface I1 {
+  String BAZZ = "bazz";
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/before9.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/before9.java
new file mode 100644
index 0000000..6bb182f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/replaceImplementsWithStaticImport/before9.java
@@ -0,0 +1,17 @@
+// "Replace Implements with Static Import" "true"
+interface I<caret>n {
+    int FOO = 0;
+}
+
+class II implements In {
+    public static void main(String[] args) {
+        System.out.println(FOO);
+    }
+}
+
+class II1 implements In {
+    int FOO = 9;
+    public static void main(String[] args) {
+        System.out.println(In.FOO);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/typeMatching/AndAnd1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/typeMatching/AndAnd1.java
new file mode 100644
index 0000000..8993dfc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/typeMatching/AndAnd1.java
@@ -0,0 +1,5 @@
+class Test{
+  {
+    if (<error>"aaa"</error> || true){}
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/typeMatching/AndAnd2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/typeMatching/AndAnd2.java
new file mode 100644
index 0000000..405f682
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/typeMatching/AndAnd2.java
@@ -0,0 +1,5 @@
+class Test{
+  {
+    if (<error>"aaa"</error> ||<EOLError/>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/typeMatching/For1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/typeMatching/For1.java
new file mode 100644
index 0000000..584c1b3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/typeMatching/For1.java
@@ -0,0 +1,5 @@
+class Test{
+  {
+    for(int i = 0; <error>i = 10</error>; i++) {}
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/typeMatching/For2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/typeMatching/For2.java
new file mode 100644
index 0000000..5202f60
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/typeMatching/For2.java
@@ -0,0 +1,5 @@
+class Test{
+  {
+    for(int i = 0; <error>i</error>; i++) {}
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/typeMatching/If.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/typeMatching/If.java
new file mode 100644
index 0000000..212aa18
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/typeMatching/If.java
@@ -0,0 +1,5 @@
+class Test{
+  void foo(){
+    if (<error>10</error>) return;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/typeMatching/ShortConstWithCast.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/typeMatching/ShortConstWithCast.java
new file mode 100644
index 0000000..db415ba
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/typeMatching/ShortConstWithCast.java
@@ -0,0 +1,4 @@
+interface Foo{
+  short AAAA = (short)(2 + 2);
+  short BBBB = AAAA + 1;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/typeMatching/While.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/typeMatching/While.java
new file mode 100644
index 0000000..9dd8e2b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/typeMatching/While.java
@@ -0,0 +1,5 @@
+class Test{
+  {
+    while(<error>10</error>) ;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/For1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/For1.java
new file mode 100644
index 0000000..93e6649
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/For1.java
@@ -0,0 +1,5 @@
+class Test{
+  {
+    for<EOLError/>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/For10.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/For10.java
new file mode 100644
index 0000000..a33adf9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/For10.java
@@ -0,0 +1,5 @@
+class Foo{
+  void foo(){
+    for(int i = 0; i < 0<error>)</error> foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/For2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/For2.java
new file mode 100644
index 0000000..ac8af5e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/For2.java
@@ -0,0 +1,5 @@
+class Test{
+  {
+    for(<EOLError/>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/For3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/For3.java
new file mode 100644
index 0000000..8dab35c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/For3.java
@@ -0,0 +1,5 @@
+class Test{
+  {
+    for(int i = 0;;<EOLError/>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/For4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/For4.java
new file mode 100644
index 0000000..9cc5f3b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/For4.java
@@ -0,0 +1,5 @@
+class Test{
+  {
+    for(int i = 0; i < 10<EOLError/>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/For5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/For5.java
new file mode 100644
index 0000000..71165d7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/For5.java
@@ -0,0 +1,5 @@
+class Test{
+  {
+    for(int i = 0; i < 10;<EOLError/>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/For6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/For6.java
new file mode 100644
index 0000000..59bc42e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/For6.java
@@ -0,0 +1,5 @@
+class Test{
+  {
+    for(int i = 0; i < 10; i++<EOLError/>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/For7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/For7.java
new file mode 100644
index 0000000..9c89842
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/For7.java
@@ -0,0 +1,5 @@
+class Test{
+  {
+    for(int i = 0; i < 10; i++)<EOLError/>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/For8.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/For8.java
new file mode 100644
index 0000000..44d9b59
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/For8.java
@@ -0,0 +1,5 @@
+class Foo{
+  void foo(){
+    for(<error>)</error> foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/For9.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/For9.java
new file mode 100644
index 0000000..0e7b7d2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/For9.java
@@ -0,0 +1,5 @@
+class Foo{
+  void foo(){
+    for(int i = 0;<error>)</error> foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/If1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/If1.java
new file mode 100644
index 0000000..5810ffa
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/If1.java
@@ -0,0 +1,5 @@
+class Test{
+  {
+    if<EOLError/>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/If2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/If2.java
new file mode 100644
index 0000000..69ff9dc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/If2.java
@@ -0,0 +1,5 @@
+class Test{
+  {
+    if (<EOLError/>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/If3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/If3.java
new file mode 100644
index 0000000..6ee18c9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/If3.java
@@ -0,0 +1,5 @@
+class Test{
+  {
+    if (true<EOLError/>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/If4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/If4.java
new file mode 100644
index 0000000..3d03d70
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/If4.java
@@ -0,0 +1,5 @@
+class Test{
+  {
+    if (true)<EOLError/>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/If5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/If5.java
new file mode 100644
index 0000000..98faf99
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/If5.java
@@ -0,0 +1,5 @@
+class Test{
+  {
+    if (<error>)</error>{}
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/If6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/If6.java
new file mode 100644
index 0000000..27802e8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/If6.java
@@ -0,0 +1,7 @@
+class Test{
+  {
+    if (true){
+    }
+    else<EOLError/>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/Return1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/Return1.java
new file mode 100644
index 0000000..fb89187
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/Return1.java
@@ -0,0 +1,5 @@
+class Test{
+  void foo(){
+    return<EOLError/>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/Return2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/Return2.java
new file mode 100644
index 0000000..faef71a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/Return2.java
@@ -0,0 +1,5 @@
+class Test{
+  int foo(){
+    return 1<EOLError/>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/While1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/While1.java
new file mode 100644
index 0000000..1d23739f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/While1.java
@@ -0,0 +1,5 @@
+class Test{
+  {
+    while<EOLError/>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/While2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/While2.java
new file mode 100644
index 0000000..94f65c4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/While2.java
@@ -0,0 +1,5 @@
+class Test{
+  {
+    while(<EOLError/>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/While3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/While3.java
new file mode 100644
index 0000000..478924c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/While3.java
@@ -0,0 +1,5 @@
+class Test{
+  {
+    while(true<EOLError/>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/While4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/While4.java
new file mode 100644
index 0000000..1a1412ee
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/While4.java
@@ -0,0 +1,5 @@
+class Test{
+  {
+    while(true)<EOLError/>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/While5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/While5.java
new file mode 100644
index 0000000..ac26d2e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/uncompleteConstructs/While5.java
@@ -0,0 +1,5 @@
+class Test{
+  {
+    while(<error>)</error>{}
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedDecls/ChangeInsideCodeBlock.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedDecls/ChangeInsideCodeBlock.java
new file mode 100644
index 0000000..4a35c70
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedDecls/ChangeInsideCodeBlock.java
@@ -0,0 +1,6 @@
+class Test{
+  public void test(){
+   <caret>f();
+  }
+  private void f(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedDecls/InjectedAnno.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedDecls/InjectedAnno.java
new file mode 100644
index 0000000..abdfe33
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedDecls/InjectedAnno.java
@@ -0,0 +1,29 @@
+package javax.annotation;
+
+/*
+* Copyright 2000-2011 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.
+*/
+@interface Resource {}
+class Test{
+  @Resource
+  private int <warning descr="Private field 'field' is assigned but never accessed">field</warning>;
+
+  @Resource
+  private int field2;
+
+  int f() {
+    return field2;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedDecls/InnerClass.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedDecls/InnerClass.java
new file mode 100644
index 0000000..f3f2a61
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedDecls/InnerClass.java
@@ -0,0 +1,3 @@
+class Test{
+  private class <warning>Inner</warning>{}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedDecls/InnerUsesSelf.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedDecls/InnerUsesSelf.java
new file mode 100644
index 0000000..4650625
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedDecls/InnerUsesSelf.java
@@ -0,0 +1,5 @@
+class Test{
+  private class <warning>Inner</warning>{
+    Inner next;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedDecls/LocalClass.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedDecls/LocalClass.java
new file mode 100644
index 0000000..5aea6bf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedDecls/LocalClass.java
@@ -0,0 +1,7 @@
+public class Test { 
+    public static void main() {
+	class Inner1{};
+	class <warning>Inner2</warning> {};
+	new Inner1();
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedImports/1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedImports/1.java
new file mode 100644
index 0000000..b12e3d2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedImports/1.java
@@ -0,0 +1,6 @@
+<warning>import javax.swing.JPanel;</warning>
+import javax.swing.JComponent;
+
+class Test{
+  JComponent component;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedImports/2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedImports/2.java
new file mode 100644
index 0000000..6593830
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedImports/2.java
@@ -0,0 +1,6 @@
+<warning>import java.awt.*;</warning>
+import javax.swing.*;
+
+class Test{
+  JComponent component;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedImports/InnersOnDemand1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedImports/InnersOnDemand1.java
new file mode 100644
index 0000000..40843ad
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedImports/InnersOnDemand1.java
@@ -0,0 +1,11 @@
+import <error descr="Cannot resolve symbol 'OuterClass'">OuterClass</error>.*;
+
+class OuterClass{
+  class Inner{}
+}
+
+class X{
+  Inner inner;
+}
+
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedImports/InnersOnDemand2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedImports/InnersOnDemand2.java
new file mode 100644
index 0000000..a76b531
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedImports/InnersOnDemand2.java
@@ -0,0 +1,7 @@
+<warning descr="Unused import statement">import <error descr="Cannot resolve symbol 'OuterClass'">OuterClass</error>.*;</warning>
+
+class OuterClass{
+  class Inner{}
+}
+
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedImports/Qualified.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedImports/Qualified.java
new file mode 100644
index 0000000..b98b592
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedImports/Qualified.java
@@ -0,0 +1,5 @@
+<warning>import javax.swing.*;</warning>
+
+class Test{
+  javax.swing.JComponent component;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedImports/StaticImportingInner.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedImports/StaticImportingInner.java
new file mode 100644
index 0000000..b6d384b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedImports/StaticImportingInner.java
@@ -0,0 +1,6 @@
+import static package1.c.*;
+<warning>import static package1.c.*;</warning>
+
+public class a {
+     int x = MyInner.a;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedImports/Unclosed.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedImports/Unclosed.java
new file mode 100644
index 0000000..9acc284
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedImports/Unclosed.java
@@ -0,0 +1,4 @@
+import javax.swing.JPanel<EOLError/>
+
+class Test{
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedImports/WithHighlightingOff.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedImports/WithHighlightingOff.java
new file mode 100644
index 0000000..0a00e6d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedImports/WithHighlightingOff.java
@@ -0,0 +1,5 @@
+import javax.swing.JComponent;
+
+class Test{
+  JComponent component;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedImports/package1/a.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedImports/package1/a.java
new file mode 100644
index 0000000..8d4989a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedImports/package1/a.java
@@ -0,0 +1,7 @@
+package package1;
+
+<warning descr="Unused import statement">import package1.b;</warning>
+
+class a {
+ b b = null;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedImports/package1/b.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedImports/package1/b.java
new file mode 100644
index 0000000..851bb24
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedImports/package1/b.java
@@ -0,0 +1,7 @@
+package package1;
+
+<warning descr="Unused import statement">import package1.*;</warning>
+
+class b {
+ a a = null;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedImports/package1/c.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedImports/package1/c.java
new file mode 100644
index 0000000..4feb13d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedImports/package1/c.java
@@ -0,0 +1,10 @@
+package package1;
+
+public interface c
+{
+    public interface MyInner
+    {
+        int a = 1;
+        int b = 2;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertBraceOnEnter.cs b/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertBraceOnEnter.cs
new file mode 100644
index 0000000..529d16b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertBraceOnEnter.cs
@@ -0,0 +1 @@
+function aaa() {<caret>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertBraceOnEnterJavaFx.fx b/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertBraceOnEnterJavaFx.fx
new file mode 100644
index 0000000..46ac656
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertBraceOnEnterJavaFx.fx
@@ -0,0 +1 @@
+var sxy = Timeline {<caret>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertBraceOnEnterJavaFx_after.fx b/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertBraceOnEnterJavaFx_after.fx
new file mode 100644
index 0000000..1b73de9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertBraceOnEnterJavaFx_after.fx
@@ -0,0 +1,3 @@
+var sxy = Timeline {
+<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertBraceOnEnter_after.cs b/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertBraceOnEnter_after.cs
new file mode 100644
index 0000000..442ed69
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertBraceOnEnter_after.cs
@@ -0,0 +1,3 @@
+function aaa() {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteBracket.cs b/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteBracket.cs
new file mode 100644
index 0000000..a86cfc8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteBracket.cs
@@ -0,0 +1 @@
+document<caret>
diff --git a/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteBracket_after.cs b/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteBracket_after.cs
new file mode 100644
index 0000000..12473f9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteBracket_after.cs
@@ -0,0 +1 @@
+document[<caret>]
diff --git a/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteBracket_after2.cs b/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteBracket_after2.cs
new file mode 100644
index 0000000..b54f862
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteBracket_after2.cs
@@ -0,0 +1 @@
+document[]<caret>
diff --git a/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteParenth.cs b/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteParenth.cs
new file mode 100644
index 0000000..a86cfc8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteParenth.cs
@@ -0,0 +1 @@
+document<caret>
diff --git a/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteParenth2.cs b/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteParenth2.cs
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteParenth2.cs
diff --git a/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteParenth2_2.cs b/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteParenth2_2.cs
new file mode 100644
index 0000000..523940e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteParenth2_2.cs
@@ -0,0 +1 @@
+document<caret>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteParenth2_2_after.cs b/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteParenth2_2_after.cs
new file mode 100644
index 0000000..7c7c4de
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteParenth2_2_after.cs
@@ -0,0 +1 @@
+document(<caret>)
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteParenth2_after.cs b/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteParenth2_after.cs
new file mode 100644
index 0000000..bd27bb5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteParenth2_after.cs
@@ -0,0 +1 @@
+(<caret>)
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteParenth_after.cs b/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteParenth_after.cs
new file mode 100644
index 0000000..6f9429d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteParenth_after.cs
@@ -0,0 +1 @@
+document(<caret>)
diff --git a/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteParenth_after2.cs b/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteParenth_after2.cs
new file mode 100644
index 0000000..6122582
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteParenth_after2.cs
@@ -0,0 +1 @@
+document()<caret>
diff --git a/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteQuote.aj b/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteQuote.aj
new file mode 100644
index 0000000..455e3a8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteQuote.aj
@@ -0,0 +1,6 @@
+aspect GetInfo {
+   Object C.about() {
+      println(<caret>)
+      return result;
+   }
+}
diff --git a/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteQuote.cs b/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteQuote.cs
new file mode 100644
index 0000000..11d220e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteQuote.cs
@@ -0,0 +1 @@
+document.write(<caret>);
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteQuote.pl b/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteQuote.pl
new file mode 100644
index 0000000..1f41ffa
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteQuote.pl
@@ -0,0 +1 @@
+$a = <caret>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteQuote_after.aj b/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteQuote_after.aj
new file mode 100644
index 0000000..9f24a2b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteQuote_after.aj
@@ -0,0 +1,6 @@
+aspect GetInfo {
+   Object C.about() {
+      println("<caret>")
+      return result;
+   }
+}
diff --git a/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteQuote_after.cs b/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteQuote_after.cs
new file mode 100644
index 0000000..024997f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteQuote_after.cs
@@ -0,0 +1 @@
+document.write("<caret>");
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteQuote_after.pl b/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteQuote_after.pl
new file mode 100644
index 0000000..6272423
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/defaultAction/customFileType/InsertDeleteQuote_after.pl
@@ -0,0 +1 @@
+$a = "<caret>"
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/defaultAction/customFileType/blockNavigation.cs b/java/java-tests/testData/codeInsight/defaultAction/customFileType/blockNavigation.cs
new file mode 100644
index 0000000..e591e07
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/defaultAction/customFileType/blockNavigation.cs
@@ -0,0 +1,3 @@
+function a () <caret>{
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/defaultAction/customFileType/blockNavigation_after.cs b/java/java-tests/testData/codeInsight/defaultAction/customFileType/blockNavigation_after.cs
new file mode 100644
index 0000000..82cc0eb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/defaultAction/customFileType/blockNavigation_after.cs
@@ -0,0 +1,3 @@
+function a () {
+
+}<caret>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/externalAnnotations/content/anno/p/annotations.xml b/java/java-tests/testData/codeInsight/externalAnnotations/content/anno/p/annotations.xml
new file mode 100644
index 0000000..4d905a4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/externalAnnotations/content/anno/p/annotations.xml
@@ -0,0 +1,8 @@
+<root>
+  <item name='p.TestDeannotation java.lang.String get()'>
+    <annotation name='org.jetbrains.annotations.NotNull'/>
+  </item>
+  <item name='p.TestDeannotation1 java.lang.String get(java.lang.String) 0'>
+    <annotation name='org.jetbrains.annotations.NotNull'/>
+  </item>
+</root>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/externalAnnotations/content/anno/p/annotationsAnnotateLibrary_after.xml b/java/java-tests/testData/codeInsight/externalAnnotations/content/anno/p/annotationsAnnotateLibrary_after.xml
new file mode 100644
index 0000000..97d0dd5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/externalAnnotations/content/anno/p/annotationsAnnotateLibrary_after.xml
@@ -0,0 +1,11 @@
+<root>
+  <item name='p.TestDeannotation java.lang.String get()'>
+    <annotation name='org.jetbrains.annotations.NotNull'/>
+  </item>
+  <item name='p.TestDeannotation1 java.lang.String get(java.lang.String) 0'>
+    <annotation name='org.jetbrains.annotations.NotNull'/>
+  </item>
+    <item name='p.Test java.lang.String get()'>
+        <annotation name='org.jetbrains.annotations.NotNull'/>
+    </item>
+</root>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/externalAnnotations/content/anno/p/annotationsDeannotation1_after.xml b/java/java-tests/testData/codeInsight/externalAnnotations/content/anno/p/annotationsDeannotation1_after.xml
new file mode 100644
index 0000000..62fa98b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/externalAnnotations/content/anno/p/annotationsDeannotation1_after.xml
@@ -0,0 +1,5 @@
+<root>
+  <item name='p.TestDeannotation java.lang.String get()'>
+    <annotation name='org.jetbrains.annotations.NotNull'/>
+  </item>
+</root>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/externalAnnotations/content/anno/p/annotationsDeannotation_after.xml b/java/java-tests/testData/codeInsight/externalAnnotations/content/anno/p/annotationsDeannotation_after.xml
new file mode 100644
index 0000000..7b5c7f7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/externalAnnotations/content/anno/p/annotationsDeannotation_after.xml
@@ -0,0 +1,5 @@
+<root>
+    <item name='p.TestDeannotation1 java.lang.String get(java.lang.String) 0'>
+    <annotation name='org.jetbrains.annotations.NotNull'/>
+  </item>
+</root>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/externalAnnotations/content/anno/persistence/annotations.xml b/java/java-tests/testData/codeInsight/externalAnnotations/content/anno/persistence/annotations.xml
new file mode 100644
index 0000000..ae9ad0f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/externalAnnotations/content/anno/persistence/annotations.xml
@@ -0,0 +1,14 @@
+<root>
+  <item name='persistence.Test java.lang.String<T> getString(java.util.Map.Entry<T,T>) 0'>
+    <annotation name='org.jetbrains.annotations.NotNull'/>
+  </item>
+  <item name='persistence.Test java.lang.String<T> getString(java.util.Map.Entry<T, T>) 0'>
+    <annotation name='org.jetbrains.annotations.NonNls'/>
+  </item>
+  <item name='persistence.Test java.lang.String&lt;T&gt; getString(java.util.Map.Entry&lt;T,T&gt;)'>
+    <annotation name='org.jetbrains.annotations.Nullable'/>
+  </item>
+  <item name='persistence.Test java.lang.String&lt;T&gt; getString(java.util.Map.Entry&lt;T, T&gt;)'>
+    <annotation name='org.jetbrains.annotations.Nls'/>
+  </item>
+</root>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/externalAnnotations/content/anno/suppressed/annotations.xml b/java/java-tests/testData/codeInsight/externalAnnotations/content/anno/suppressed/annotations.xml
new file mode 100644
index 0000000..0144363
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/externalAnnotations/content/anno/suppressed/annotations.xml
@@ -0,0 +1,10 @@
+<root>
+  <item name='suppressed.ExistingExternalName java.lang.String foo()'>
+    <annotation name='org.jetbrains.annotations.NotNull'/>
+  </item>
+  <item name='suppressed.SecondSuppression void second()'>
+    <annotation name='java.lang.SuppressWarnings'>
+      <val val="{DoesntMatterWhat}"/>
+    </annotation>
+  </item>
+</root>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/externalAnnotations/content/anno/suppressed/annotationsExistingExternalName_after.xml b/java/java-tests/testData/codeInsight/externalAnnotations/content/anno/suppressed/annotationsExistingExternalName_after.xml
new file mode 100644
index 0000000..3ea7936
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/externalAnnotations/content/anno/suppressed/annotationsExistingExternalName_after.xml
@@ -0,0 +1,13 @@
+<root>
+  <item name='suppressed.ExistingExternalName java.lang.String foo()'>
+    <annotation name='org.jetbrains.annotations.NotNull'/>
+      <annotation name='java.lang.SuppressWarnings'>
+          <val val="&quot;SillyAssignment&quot;"/>
+      </annotation>
+  </item>
+  <item name='suppressed.SecondSuppression void second()'>
+    <annotation name='java.lang.SuppressWarnings'>
+      <val val="{DoesntMatterWhat}"/>
+    </annotation>
+  </item>
+</root>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/externalAnnotations/content/anno/suppressed/annotationsNewSuppress_after.xml b/java/java-tests/testData/codeInsight/externalAnnotations/content/anno/suppressed/annotationsNewSuppress_after.xml
new file mode 100644
index 0000000..03f8c40
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/externalAnnotations/content/anno/suppressed/annotationsNewSuppress_after.xml
@@ -0,0 +1,15 @@
+<root>
+  <item name='suppressed.ExistingExternalName java.lang.String foo()'>
+    <annotation name='org.jetbrains.annotations.NotNull'/>
+  </item>
+  <item name='suppressed.SecondSuppression void second()'>
+    <annotation name='java.lang.SuppressWarnings'>
+      <val val="{DoesntMatterWhat}"/>
+    </annotation>
+  </item>
+    <item name='suppressed.NewSuppress void barr()'>
+        <annotation name='java.lang.SuppressWarnings'>
+            <val val="&quot;SillyAssignment&quot;"/>
+        </annotation>
+    </item>
+</root>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/externalAnnotations/content/anno/suppressed/annotationsSecondSuppression_after.xml b/java/java-tests/testData/codeInsight/externalAnnotations/content/anno/suppressed/annotationsSecondSuppression_after.xml
new file mode 100644
index 0000000..afdf153
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/externalAnnotations/content/anno/suppressed/annotationsSecondSuppression_after.xml
@@ -0,0 +1,10 @@
+<root>
+  <item name='suppressed.ExistingExternalName java.lang.String foo()'>
+    <annotation name='org.jetbrains.annotations.NotNull'/>
+  </item>
+  <item name='suppressed.SecondSuppression void second()'>
+      <annotation name='java.lang.SuppressWarnings'>
+          <val val="{DoesntMatterWhat, &quot;SillyAssignment&quot;}"/>
+      </annotation>
+  </item>
+</root>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/externalAnnotations/content/annoMultiRoot/root1/multiRoot/annotations.xml b/java/java-tests/testData/codeInsight/externalAnnotations/content/annoMultiRoot/root1/multiRoot/annotations.xml
new file mode 100644
index 0000000..36aa8d8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/externalAnnotations/content/annoMultiRoot/root1/multiRoot/annotations.xml
@@ -0,0 +1,7 @@
+<root>
+  <item name='multiRoot.Test java.lang.String get(java.lang.String) 0'>
+    <annotation name='org.jetbrains.annotations.NotNull'>
+      <val name="value" val="&quot;foo&quot;"/>
+    </annotation>
+  </item>
+</root>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/externalAnnotations/content/annoMultiRoot/root1/multiRoot/annotations_after.xml b/java/java-tests/testData/codeInsight/externalAnnotations/content/annoMultiRoot/root1/multiRoot/annotations_after.xml
new file mode 100644
index 0000000..f635a33
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/externalAnnotations/content/annoMultiRoot/root1/multiRoot/annotations_after.xml
@@ -0,0 +1,7 @@
+<root>
+  <item name='multiRoot.Test java.lang.String get(java.lang.String) 0'>
+      <annotation name='org.jetbrains.annotations.NotNull'>
+          <val name="value" val="&quot;bar&quot;"/>
+      </annotation>
+  </item>
+</root>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/externalAnnotations/content/annoMultiRoot/root2/multiRoot/annotations.xml b/java/java-tests/testData/codeInsight/externalAnnotations/content/annoMultiRoot/root2/multiRoot/annotations.xml
new file mode 100644
index 0000000..e497a6e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/externalAnnotations/content/annoMultiRoot/root2/multiRoot/annotations.xml
@@ -0,0 +1,7 @@
+<root>
+  <item name='multiRoot.Test java.lang.String get(java.lang.String)'>
+    <annotation name='org.jetbrains.annotations.Nullable'>
+      <val name="value" val="&quot;foo&quot;"/>
+    </annotation>
+  </item>
+</root>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/externalAnnotations/content/annoMultiRoot/root2/multiRoot/annotations_after.xml b/java/java-tests/testData/codeInsight/externalAnnotations/content/annoMultiRoot/root2/multiRoot/annotations_after.xml
new file mode 100644
index 0000000..60e041c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/externalAnnotations/content/annoMultiRoot/root2/multiRoot/annotations_after.xml
@@ -0,0 +1,7 @@
+<root>
+  <item name='multiRoot.Test java.lang.String get(java.lang.String)'>
+      <annotation name='org.jetbrains.annotations.Nullable'>
+          <val name="value" val="&quot;bar&quot;"/>
+      </annotation>
+  </item>
+</root>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/externalAnnotations/lib/multiRoot/Test.java b/java/java-tests/testData/codeInsight/externalAnnotations/lib/multiRoot/Test.java
new file mode 100644
index 0000000..e478fac
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/externalAnnotations/lib/multiRoot/Test.java
@@ -0,0 +1,7 @@
+package multiRoot;
+
+class Test {
+  String get(String param) {
+    return null;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/externalAnnotations/lib/p/Test.java b/java/java-tests/testData/codeInsight/externalAnnotations/lib/p/Test.java
new file mode 100644
index 0000000..2cb4d8c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/externalAnnotations/lib/p/Test.java
@@ -0,0 +1,6 @@
+package p;
+class Test {
+  String g<caret>et() {
+    return null;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/externalAnnotations/lib/p/TestAnnotated.java b/java/java-tests/testData/codeInsight/externalAnnotations/lib/p/TestAnnotated.java
new file mode 100644
index 0000000..306ac0a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/externalAnnotations/lib/p/TestAnnotated.java
@@ -0,0 +1,11 @@
+package p;
+
+import org.jetbrains.annotations.NotNull;
+
+class Test {
+
+  @NotNull
+  String g<caret>et() {
+    return null;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/externalAnnotations/lib/p/TestDeannotation.java b/java/java-tests/testData/codeInsight/externalAnnotations/lib/p/TestDeannotation.java
new file mode 100644
index 0000000..f175b9f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/externalAnnotations/lib/p/TestDeannotation.java
@@ -0,0 +1,8 @@
+package p;
+
+public class TestDeannotation {
+
+  String g<caret>et() {
+    return null;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/externalAnnotations/lib/p/TestDeannotation1.java b/java/java-tests/testData/codeInsight/externalAnnotations/lib/p/TestDeannotation1.java
new file mode 100644
index 0000000..b40b940
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/externalAnnotations/lib/p/TestDeannotation1.java
@@ -0,0 +1,8 @@
+package p;
+
+public class TestDeannotation1 {
+
+  String get(String s<caret>s) {
+    return null;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/externalAnnotations/lib/p/TestPrimitive.java b/java/java-tests/testData/codeInsight/externalAnnotations/lib/p/TestPrimitive.java
new file mode 100644
index 0000000..0be49a9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/externalAnnotations/lib/p/TestPrimitive.java
@@ -0,0 +1,6 @@
+package p;
+class Test {
+  boolean g<caret>et() {
+    return false;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/externalAnnotations/lib/persistence/Test.java b/java/java-tests/testData/codeInsight/externalAnnotations/lib/persistence/Test.java
new file mode 100644
index 0000000..461e374
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/externalAnnotations/lib/persistence/Test.java
@@ -0,0 +1,9 @@
+package persistence;
+
+import java.util.*;
+
+class Test {
+  String <T> getString(Map.Entry<T, T> entry) {
+    return null;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/externalAnnotations/src/suppressed/ExistingExternalName.java b/java/java-tests/testData/codeInsight/externalAnnotations/src/suppressed/ExistingExternalName.java
new file mode 100644
index 0000000..6a875f8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/externalAnnotations/src/suppressed/ExistingExternalName.java
@@ -0,0 +1,8 @@
+package suppressed;
+class ExistingExternalName {
+  String foo(){
+    String str = "";
+    s<caret>tr = str;
+    return str;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/externalAnnotations/src/suppressed/NewSuppress.java b/java/java-tests/testData/codeInsight/externalAnnotations/src/suppressed/NewSuppress.java
new file mode 100644
index 0000000..cf61cb1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/externalAnnotations/src/suppressed/NewSuppress.java
@@ -0,0 +1,7 @@
+package suppressed;
+class NewSuppress {
+  void barr() {
+    String str = "";
+    st<caret>r = str;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/externalAnnotations/src/suppressed/SecondSuppression.java b/java/java-tests/testData/codeInsight/externalAnnotations/src/suppressed/SecondSuppression.java
new file mode 100644
index 0000000..70f4b18
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/externalAnnotations/src/suppressed/SecondSuppression.java
@@ -0,0 +1,7 @@
+package suppressed;
+class SecondSuppression {
+  void second() {
+    String str = "";
+    st<caret>r = str;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/externalJavadoc/String/6/expected.html b/java/java-tests/testData/codeInsight/externalJavadoc/String/6/expected.html
new file mode 100644
index 0000000..d5f96bf
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/externalJavadoc/String/6/expected.html
@@ -0,0 +1,99 @@
+<HTML><style type="text/css">  ul.inheritance {
+      margin:0;
+      padding:0;
+  }
+  ul.inheritance li {
+       display:inline;
+       list-style:none;
+  }
+  ul.inheritance li ul.inheritance {
+    margin-left:15px;
+    padding-left:15px;
+    padding-top:1px;
+  }
+</style><!-- ======== START OF CLASS DATA ======== -->
+<H2>
+    <FONT SIZE="-1">
+        java.lang</FONT>
+    <BR>
+    Class String</H2>
+<PRE>
+<A HREF="../../java/lang/Object.html" title="class in java.lang">java.lang.Object</A>
+  <IMG SRC="../../resources/inherit.gif" ALT="extended by "><B>java.lang.String</B>
+</PRE>
+<DL><DL>
+    <DT><BR><PRE>public final class <B>String</B><DT><BR>extends <A HREF="../../java/lang/Object.html" title="class in java.lang">Object</A><DT><BR>implements <A HREF="../../java/io/Serializable.html" title="interface in java.io">Serializable</A>, <A HREF="../../java/lang/Comparable.html" title="interface in java.lang">Comparable</A>&lt;<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&gt;, <A HREF="../../java/lang/CharSequence.html" title="interface in java.lang">CharSequence</A></DL>
+</PRE>
+
+    <DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../java/io/Serializable.html" title="interface in java.io">Serializable</A>, <A HREF="../../java/lang/CharSequence.html" title="interface in java.lang">CharSequence</A>, <A HREF="../../java/lang/Comparable.html" title="interface in java.lang">Comparable</A>&lt;<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&gt;</DD>
+</DL>
+<P>    The <code>String</code> class represents character strings. All
+    string literals in Java programs, such as <code>"abc"</code>, are
+    implemented as instances of this class.
+<p>
+    Strings are constant; their values cannot be changed after they
+    are created. String buffers support mutable strings.
+    Because String objects are immutable they can be shared. For example:
+<p><blockquote><pre>
+     String str = "abc";
+ </pre></blockquote><p>
+    is equivalent to:
+<p><blockquote><pre>
+     char data[] = {'a', 'b', 'c'};
+     String str = new String(data);
+ </pre></blockquote><p>
+    Here are some more examples of how strings can be used:
+<p><blockquote><pre>
+     System.out.println("abc");
+     String cde = "cde";
+     System.out.println("abc" + cde);
+     String c = "abc".substring(2,3);
+     String d = cde.substring(1, 2);
+ </pre></blockquote>
+<p>
+    The class <code>String</code> includes methods for examining
+    individual characters of the sequence, for comparing strings, for
+    searching strings, for extracting substrings, and for creating a
+    copy of a string with all characters translated to uppercase or to
+    lowercase. Case mapping is based on the Unicode Standard version
+    specified by the <A HREF="../../java/lang/Character.html" title="class in java.lang"><CODE>Character</CODE></A> class.
+<p>
+    The Java language provides special support for the string
+    concatenation operator (&nbsp;+&nbsp;), and for conversion of
+    other objects to strings. String concatenation is implemented
+    through the <code>StringBuilder</code>(or <code>StringBuffer</code>)
+    class and its <code>append</code> method.
+    String conversions are implemented through the method
+    <code>toString</code>, defined by <code>Object</code> and
+    inherited by all classes in Java. For additional information on
+    string concatenation and conversion, see Gosling, Joy, and Steele,
+    <i>The Java Language Specification</i>.
+
+<p> Unless otherwise noted, passing a <tt>null</tt> argument to a constructor
+    or method in this class will cause a <A HREF="../../java/lang/NullPointerException.html" title="class in java.lang"><CODE>NullPointerException</CODE></A> to be
+    thrown.
+
+<p>A <code>String</code> represents a string in the UTF-16 format
+    in which <em>supplementary characters</em> are represented by <em>surrogate
+        pairs</em> (see the section <a href="Character.html#unicode">Unicode
+        Character Representations</a> in the <code>Character</code> class for
+    more information).
+    Index values refer to <code>char</code> code units, so a supplementary
+    character uses two positions in a <code>String</code>.
+<p>The <code>String</code> class provides methods for dealing with
+    Unicode code points (i.e., characters), in addition to those for
+    dealing with Unicode code units (i.e., <code>char</code> values).
+<P>
+
+<P>
+<DL>
+    <DT><B>Since:</B></DT>
+    <DD>JDK1.0</DD>
+    <DT><B>See Also:</B><DD><A HREF="../../java/lang/Object.html#toString()"><CODE>Object.toString()</CODE></A>,
+    <A HREF="../../java/lang/StringBuffer.html" title="class in java.lang"><CODE>StringBuffer</CODE></A>,
+    <A HREF="../../java/lang/StringBuilder.html" title="class in java.lang"><CODE>StringBuilder</CODE></A>,
+    <A HREF="../../java/nio/charset/Charset.html" title="class in java.nio.charset"><CODE>Charset</CODE></A>,
+    <A HREF="../../serialized-form.html#java.lang.String">Serialized Form</A></DL>
+
+<P>
+</HTML>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/externalJavadoc/String/6/expectedToLowerCase.html b/java/java-tests/testData/codeInsight/externalJavadoc/String/6/expectedToLowerCase.html
new file mode 100644
index 0000000..01db756
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/externalJavadoc/String/6/expectedToLowerCase.html
@@ -0,0 +1,44 @@
+<HTML><style type="text/css">  ul.inheritance {
+      margin:0;
+      padding:0;
+  }
+  ul.inheritance li {
+       display:inline;
+       list-style:none;
+  }
+  ul.inheritance li ul.inheritance {
+    margin-left:15px;
+    padding-left:15px;
+    padding-top:1px;
+  }
+</style><A NAME="toLowerCase()"><!-- --></A><H3>
+    toLowerCase</H3>
+<PRE>
+public <A HREF="../../java/lang/String.html" title="class in java.lang">String</A> <B>toLowerCase</B>()</PRE>
+<DL>
+    <DD>Converts all of the characters in this <code>String</code> to lower
+        case using the rules of the default locale. This is equivalent to calling
+        <code>toLowerCase(Locale.getDefault())</code>.
+        <p>
+            <b>Note:</b> This method is locale sensitive, and may produce unexpected
+            results if used for strings that are intended to be interpreted locale
+            independently.
+            Examples are programming language identifiers, protocol keys, and HTML
+            tags.
+            For instance, <code>"TITLE".toLowerCase()</code> in a Turkish locale
+            returns <code>"t?tle"</code>, where '?' is the LATIN SMALL
+            LETTER DOTLESS I character.
+            To obtain correct results for locale insensitive strings, use
+            <code>toLowerCase(Locale.ENGLISH)</code>.
+        <p>
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+
+        <DT><B>Returns:</B><DD>the <code>String</code>, converted to lowercase.<DT><B>See Also:</B><DD><A HREF="../../java/lang/String.html#toLowerCase(java.util.Locale)"><CODE>toLowerCase(Locale)</CODE></A></DL>
+    </DD>
+</DL>
+
+</HTML>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/externalJavadoc/String/6/page.html b/java/java-tests/testData/codeInsight/externalJavadoc/String/6/page.html
new file mode 100644
index 0000000..c39ce67
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/externalJavadoc/String/6/page.html
@@ -0,0 +1,3544 @@
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+    <!-- Generated by javadoc (build 1.6.0_27) on Wed Aug 10 15:58:01 PDT 2011 -->
+    <TITLE>
+        String (Java Platform SE 6)
+    </TITLE>
+
+    <META NAME="date" CONTENT="2011-08-10">
+    <META NAME="keywords" CONTENT="java.lang.String class">
+    <META NAME="keywords" CONTENT="CASE_INSENSITIVE_ORDER">
+    <META NAME="keywords" CONTENT="length()">
+    <META NAME="keywords" CONTENT="isEmpty()">
+    <META NAME="keywords" CONTENT="charAt()">
+    <META NAME="keywords" CONTENT="codePointAt()">
+    <META NAME="keywords" CONTENT="codePointBefore()">
+    <META NAME="keywords" CONTENT="codePointCount()">
+    <META NAME="keywords" CONTENT="offsetByCodePoints()">
+    <META NAME="keywords" CONTENT="getChars()">
+    <META NAME="keywords" CONTENT="getBytes()">
+    <META NAME="keywords" CONTENT="equals()">
+    <META NAME="keywords" CONTENT="contentEquals()">
+    <META NAME="keywords" CONTENT="equalsIgnoreCase()">
+    <META NAME="keywords" CONTENT="compareTo()">
+    <META NAME="keywords" CONTENT="compareToIgnoreCase()">
+    <META NAME="keywords" CONTENT="regionMatches()">
+    <META NAME="keywords" CONTENT="startsWith()">
+    <META NAME="keywords" CONTENT="endsWith()">
+    <META NAME="keywords" CONTENT="hashCode()">
+    <META NAME="keywords" CONTENT="indexOf()">
+    <META NAME="keywords" CONTENT="lastIndexOf()">
+    <META NAME="keywords" CONTENT="substring()">
+    <META NAME="keywords" CONTENT="subSequence()">
+    <META NAME="keywords" CONTENT="concat()">
+    <META NAME="keywords" CONTENT="replace()">
+    <META NAME="keywords" CONTENT="matches()">
+    <META NAME="keywords" CONTENT="contains()">
+    <META NAME="keywords" CONTENT="replaceFirst()">
+    <META NAME="keywords" CONTENT="replaceAll()">
+    <META NAME="keywords" CONTENT="split()">
+    <META NAME="keywords" CONTENT="toLowerCase()">
+    <META NAME="keywords" CONTENT="toUpperCase()">
+    <META NAME="keywords" CONTENT="trim()">
+    <META NAME="keywords" CONTENT="toString()">
+    <META NAME="keywords" CONTENT="toCharArray()">
+    <META NAME="keywords" CONTENT="format()">
+    <META NAME="keywords" CONTENT="valueOf()">
+    <META NAME="keywords" CONTENT="copyValueOf()">
+    <META NAME="keywords" CONTENT="intern()">
+
+    <LINK REL ="stylesheet" TYPE="text/css" HREF="../../stylesheet.css" TITLE="Style">
+
+    <SCRIPT type="text/javascript">
+        function windowTitle()
+        {
+            if (location.href.indexOf('is-external=true') == -1) {
+                parent.document.title="String (Java Platform SE 6)";
+            }
+        }
+    </SCRIPT>
+    <NOSCRIPT>
+    </NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+    <TR>
+        <TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+            <A NAME="navbar_top_firstrow"><!-- --></A>
+            <TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+                <TR ALIGN="center" VALIGN="top">
+                    <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+                    <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+                    <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+                    <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/String.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+                    <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+                    <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+                    <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+                    <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+                </TR>
+            </TABLE>
+        </TD>
+        <TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+            <b>Java&#x2122;&nbsp;Platform<br>Standard&nbsp;Ed.&nbsp;6</b></EM>
+        </TD>
+    </TR>
+
+    <TR>
+        <TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+            &nbsp;<A HREF="../../java/lang/StrictMath.html" title="class in java.lang"><B>PREV CLASS</B></A>&nbsp;
+            &nbsp;<A HREF="../../java/lang/StringBuffer.html" title="class in java.lang"><B>NEXT CLASS</B></A></FONT></TD>
+        <TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+            <A HREF="../../index.html?java/lang/String.html" target="_top"><B>FRAMES</B></A>  &nbsp;
+            &nbsp;<A HREF="String.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
+            &nbsp;<SCRIPT type="text/javascript">
+            <!--
+            if(window==top) {
+                document.writeln('<A HREF="../../allclasses-noframe.html"><B>All Classes</B></A>');
+            }
+            //-->
+        </SCRIPT>
+            <NOSCRIPT>
+                <A HREF="../../allclasses-noframe.html"><B>All Classes</B></A>
+            </NOSCRIPT>
+
+
+        </FONT></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+            SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+        <TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+            DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+    </TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+    <FONT SIZE="-1">
+        java.lang</FONT>
+    <BR>
+    Class String</H2>
+<PRE>
+<A HREF="../../java/lang/Object.html" title="class in java.lang">java.lang.Object</A>
+  <IMG SRC="../../resources/inherit.gif" ALT="extended by "><B>java.lang.String</B>
+</PRE>
+<DL>
+    <DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../java/io/Serializable.html" title="interface in java.io">Serializable</A>, <A HREF="../../java/lang/CharSequence.html" title="interface in java.lang">CharSequence</A>, <A HREF="../../java/lang/Comparable.html" title="interface in java.lang">Comparable</A>&lt;<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&gt;</DD>
+</DL>
+<HR>
+<DL>
+    <DT><PRE>public final class <B>String</B><DT>extends <A HREF="../../java/lang/Object.html" title="class in java.lang">Object</A><DT>implements <A HREF="../../java/io/Serializable.html" title="interface in java.io">Serializable</A>, <A HREF="../../java/lang/Comparable.html" title="interface in java.lang">Comparable</A>&lt;<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&gt;, <A HREF="../../java/lang/CharSequence.html" title="interface in java.lang">CharSequence</A></DL>
+</PRE>
+
+<P>
+    The <code>String</code> class represents character strings. All
+    string literals in Java programs, such as <code>"abc"</code>, are
+    implemented as instances of this class.
+<p>
+    Strings are constant; their values cannot be changed after they
+    are created. String buffers support mutable strings.
+    Because String objects are immutable they can be shared. For example:
+<p><blockquote><pre>
+     String str = "abc";
+ </pre></blockquote><p>
+    is equivalent to:
+<p><blockquote><pre>
+     char data[] = {'a', 'b', 'c'};
+     String str = new String(data);
+ </pre></blockquote><p>
+    Here are some more examples of how strings can be used:
+<p><blockquote><pre>
+     System.out.println("abc");
+     String cde = "cde";
+     System.out.println("abc" + cde);
+     String c = "abc".substring(2,3);
+     String d = cde.substring(1, 2);
+ </pre></blockquote>
+<p>
+    The class <code>String</code> includes methods for examining
+    individual characters of the sequence, for comparing strings, for
+    searching strings, for extracting substrings, and for creating a
+    copy of a string with all characters translated to uppercase or to
+    lowercase. Case mapping is based on the Unicode Standard version
+    specified by the <A HREF="../../java/lang/Character.html" title="class in java.lang"><CODE>Character</CODE></A> class.
+<p>
+    The Java language provides special support for the string
+    concatenation operator (&nbsp;+&nbsp;), and for conversion of
+    other objects to strings. String concatenation is implemented
+    through the <code>StringBuilder</code>(or <code>StringBuffer</code>)
+    class and its <code>append</code> method.
+    String conversions are implemented through the method
+    <code>toString</code>, defined by <code>Object</code> and
+    inherited by all classes in Java. For additional information on
+    string concatenation and conversion, see Gosling, Joy, and Steele,
+    <i>The Java Language Specification</i>.
+
+<p> Unless otherwise noted, passing a <tt>null</tt> argument to a constructor
+    or method in this class will cause a <A HREF="../../java/lang/NullPointerException.html" title="class in java.lang"><CODE>NullPointerException</CODE></A> to be
+    thrown.
+
+<p>A <code>String</code> represents a string in the UTF-16 format
+    in which <em>supplementary characters</em> are represented by <em>surrogate
+        pairs</em> (see the section <a href="Character.html#unicode">Unicode
+        Character Representations</a> in the <code>Character</code> class for
+    more information).
+    Index values refer to <code>char</code> code units, so a supplementary
+    character uses two positions in a <code>String</code>.
+<p>The <code>String</code> class provides methods for dealing with
+    Unicode code points (i.e., characters), in addition to those for
+    dealing with Unicode code units (i.e., <code>char</code> values).
+<P>
+
+<P>
+<DL>
+    <DT><B>Since:</B></DT>
+    <DD>JDK1.0</DD>
+    <DT><B>See Also:</B><DD><A HREF="../../java/lang/Object.html#toString()"><CODE>Object.toString()</CODE></A>,
+    <A HREF="../../java/lang/StringBuffer.html" title="class in java.lang"><CODE>StringBuffer</CODE></A>,
+    <A HREF="../../java/lang/StringBuilder.html" title="class in java.lang"><CODE>StringBuilder</CODE></A>,
+    <A HREF="../../java/nio/charset/Charset.html" title="class in java.nio.charset"><CODE>Charset</CODE></A>,
+    <A HREF="../../serialized-form.html#java.lang.String">Serialized Form</A></DL>
+<HR>
+
+<P>
+    <!-- =========== FIELD SUMMARY =========== -->
+
+    <A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+    <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+        <TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+            <B>Field Summary</B></FONT></TH>
+    </TR>
+    <TR BGCOLOR="white" CLASS="TableRowColor">
+        <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+            <CODE>static&nbsp;<A HREF="../../java/util/Comparator.html" title="interface in java.util">Comparator</A>&lt;<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&gt;</CODE></FONT></TD>
+        <TD><CODE><B><A HREF="../../java/lang/String.html#CASE_INSENSITIVE_ORDER">CASE_INSENSITIVE_ORDER</A></B></CODE>
+
+            <BR>
+            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A Comparator that orders <code>String</code> objects as by
+            <code>compareToIgnoreCase</code>.</TD>
+    </TR>
+</TABLE>
+&nbsp;
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+    <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+        <TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+            <B>Constructor Summary</B></FONT></TH>
+    </TR>
+    <TR BGCOLOR="white" CLASS="TableRowColor">
+        <TD><CODE><B><A HREF="../../java/lang/String.html#String()">String</A></B>()</CODE>
+
+            <BR>
+            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Initializes a newly created <code>String</code> object so that it represents
+            an empty character sequence.</TD>
+    </TR>
+    <TR BGCOLOR="white" CLASS="TableRowColor">
+        <TD><CODE><B><A HREF="../../java/lang/String.html#String(byte[])">String</A></B>(byte[]&nbsp;bytes)</CODE>
+
+            <BR>
+            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a new <code>String</code> by decoding the specified array of bytes
+            using the platform's default charset.</TD>
+    </TR>
+    <TR BGCOLOR="white" CLASS="TableRowColor">
+        <TD><CODE><B><A HREF="../../java/lang/String.html#String(byte[], java.nio.charset.Charset)">String</A></B>(byte[]&nbsp;bytes,
+            <A HREF="../../java/nio/charset/Charset.html" title="class in java.nio.charset">Charset</A>&nbsp;charset)</CODE>
+
+            <BR>
+            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a new <code>String</code> by decoding the specified array of
+            bytes using the specified <A HREF="../../java/nio/charset/Charset.html" title="class in java.nio.charset">charset</A>.</TD>
+    </TR>
+    <TR BGCOLOR="white" CLASS="TableRowColor">
+        <TD><CODE><B><A HREF="../../java/lang/String.html#String(byte[], int)">String</A></B>(byte[]&nbsp;ascii,
+            int&nbsp;hibyte)</CODE>
+
+            <BR>
+            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>This method does not properly convert bytes into
+                characters.  As of JDK&nbsp;1.1, the preferred way to do this is via the
+                <code>String</code> constructors that take a <A HREF="../../java/nio/charset/Charset.html" title="class in java.nio.charset"><CODE>Charset</CODE></A>, charset name, or that use the platform's
+                default charset.</I></TD>
+    </TR>
+    <TR BGCOLOR="white" CLASS="TableRowColor">
+        <TD><CODE><B><A HREF="../../java/lang/String.html#String(byte[], int, int)">String</A></B>(byte[]&nbsp;bytes,
+            int&nbsp;offset,
+            int&nbsp;length)</CODE>
+
+            <BR>
+            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a new <code>String</code> by decoding the specified subarray of
+            bytes using the platform's default charset.</TD>
+    </TR>
+    <TR BGCOLOR="white" CLASS="TableRowColor">
+        <TD><CODE><B><A HREF="../../java/lang/String.html#String(byte[], int, int, java.nio.charset.Charset)">String</A></B>(byte[]&nbsp;bytes,
+            int&nbsp;offset,
+            int&nbsp;length,
+            <A HREF="../../java/nio/charset/Charset.html" title="class in java.nio.charset">Charset</A>&nbsp;charset)</CODE>
+
+            <BR>
+            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a new <code>String</code> by decoding the specified subarray of
+            bytes using the specified <A HREF="../../java/nio/charset/Charset.html" title="class in java.nio.charset">charset</A>.</TD>
+    </TR>
+    <TR BGCOLOR="white" CLASS="TableRowColor">
+        <TD><CODE><B><A HREF="../../java/lang/String.html#String(byte[], int, int, int)">String</A></B>(byte[]&nbsp;ascii,
+            int&nbsp;hibyte,
+            int&nbsp;offset,
+            int&nbsp;count)</CODE>
+
+            <BR>
+            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>This method does not properly convert bytes into characters.
+                As of JDK&nbsp;1.1, the preferred way to do this is via the
+                <code>String</code> constructors that take a <A HREF="../../java/nio/charset/Charset.html" title="class in java.nio.charset"><CODE>Charset</CODE></A>, charset name, or that use the platform's
+                default charset.</I></TD>
+    </TR>
+    <TR BGCOLOR="white" CLASS="TableRowColor">
+        <TD><CODE><B><A HREF="../../java/lang/String.html#String(byte[], int, int, java.lang.String)">String</A></B>(byte[]&nbsp;bytes,
+            int&nbsp;offset,
+            int&nbsp;length,
+            <A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;charsetName)</CODE>
+
+            <BR>
+            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a new <code>String</code> by decoding the specified subarray of
+            bytes using the specified charset.</TD>
+    </TR>
+    <TR BGCOLOR="white" CLASS="TableRowColor">
+        <TD><CODE><B><A HREF="../../java/lang/String.html#String(byte[], java.lang.String)">String</A></B>(byte[]&nbsp;bytes,
+            <A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;charsetName)</CODE>
+
+            <BR>
+            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a new <code>String</code> by decoding the specified array of bytes
+            using the specified <A HREF="../../java/nio/charset/Charset.html" title="class in java.nio.charset">charset</A>.</TD>
+    </TR>
+    <TR BGCOLOR="white" CLASS="TableRowColor">
+        <TD><CODE><B><A HREF="../../java/lang/String.html#String(char[])">String</A></B>(char[]&nbsp;value)</CODE>
+
+            <BR>
+            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Allocates a new <code>String</code> so that it represents the sequence of
+            characters currently contained in the character array argument.</TD>
+    </TR>
+    <TR BGCOLOR="white" CLASS="TableRowColor">
+        <TD><CODE><B><A HREF="../../java/lang/String.html#String(char[], int, int)">String</A></B>(char[]&nbsp;value,
+            int&nbsp;offset,
+            int&nbsp;count)</CODE>
+
+            <BR>
+            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Allocates a new <code>String</code> that contains characters from a subarray
+            of the character array argument.</TD>
+    </TR>
+    <TR BGCOLOR="white" CLASS="TableRowColor">
+        <TD><CODE><B><A HREF="../../java/lang/String.html#String(int[], int, int)">String</A></B>(int[]&nbsp;codePoints,
+            int&nbsp;offset,
+            int&nbsp;count)</CODE>
+
+            <BR>
+            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Allocates a new <code>String</code> that contains characters from a subarray
+            of the Unicode code point array argument.</TD>
+    </TR>
+    <TR BGCOLOR="white" CLASS="TableRowColor">
+        <TD><CODE><B><A HREF="../../java/lang/String.html#String(java.lang.String)">String</A></B>(<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;original)</CODE>
+
+            <BR>
+            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Initializes a newly created <code>String</code> object so that it represents
+            the same sequence of characters as the argument; in other words, the
+            newly created string is a copy of the argument string.</TD>
+    </TR>
+    <TR BGCOLOR="white" CLASS="TableRowColor">
+        <TD><CODE><B><A HREF="../../java/lang/String.html#String(java.lang.StringBuffer)">String</A></B>(<A HREF="../../java/lang/StringBuffer.html" title="class in java.lang">StringBuffer</A>&nbsp;buffer)</CODE>
+
+            <BR>
+            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Allocates a new string that contains the sequence of characters
+            currently contained in the string buffer argument.</TD>
+    </TR>
+    <TR BGCOLOR="white" CLASS="TableRowColor">
+        <TD><CODE><B><A HREF="../../java/lang/String.html#String(java.lang.StringBuilder)">String</A></B>(<A HREF="../../java/lang/StringBuilder.html" title="class in java.lang">StringBuilder</A>&nbsp;builder)</CODE>
+
+            <BR>
+            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Allocates a new string that contains the sequence of characters
+            currently contained in the string builder argument.</TD>
+    </TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+    <TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+        <B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;char</CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#charAt(int)">charAt</A></B>(int&nbsp;index)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the <code>char</code> value at the
+        specified index.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;int</CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#codePointAt(int)">codePointAt</A></B>(int&nbsp;index)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the character (Unicode code point) at the specified
+        index.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;int</CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#codePointBefore(int)">codePointBefore</A></B>(int&nbsp;index)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the character (Unicode code point) before the specified
+        index.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;int</CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#codePointCount(int, int)">codePointCount</A></B>(int&nbsp;beginIndex,
+        int&nbsp;endIndex)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of Unicode code points in the specified text
+        range of this <code>String</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;int</CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#compareTo(java.lang.String)">compareTo</A></B>(<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;anotherString)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares two strings lexicographically.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;int</CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#compareToIgnoreCase(java.lang.String)">compareToIgnoreCase</A></B>(<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;str)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares two strings lexicographically, ignoring case
+        differences.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;<A HREF="../../java/lang/String.html" title="class in java.lang">String</A></CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#concat(java.lang.String)">concat</A></B>(<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;str)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Concatenates the specified string to the end of this string.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;boolean</CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#contains(java.lang.CharSequence)">contains</A></B>(<A HREF="../../java/lang/CharSequence.html" title="interface in java.lang">CharSequence</A>&nbsp;s)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns true if and only if this string contains the specified
+        sequence of char values.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;boolean</CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#contentEquals(java.lang.CharSequence)">contentEquals</A></B>(<A HREF="../../java/lang/CharSequence.html" title="interface in java.lang">CharSequence</A>&nbsp;cs)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares this string to the specified <code>CharSequence</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;boolean</CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#contentEquals(java.lang.StringBuffer)">contentEquals</A></B>(<A HREF="../../java/lang/StringBuffer.html" title="class in java.lang">StringBuffer</A>&nbsp;sb)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares this string to the specified <code>StringBuffer</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>static&nbsp;<A HREF="../../java/lang/String.html" title="class in java.lang">String</A></CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#copyValueOf(char[])">copyValueOf</A></B>(char[]&nbsp;data)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a String that represents the character sequence in the
+        array specified.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>static&nbsp;<A HREF="../../java/lang/String.html" title="class in java.lang">String</A></CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#copyValueOf(char[], int, int)">copyValueOf</A></B>(char[]&nbsp;data,
+        int&nbsp;offset,
+        int&nbsp;count)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a String that represents the character sequence in the
+        array specified.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;boolean</CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#endsWith(java.lang.String)">endsWith</A></B>(<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;suffix)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tests if this string ends with the specified suffix.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;boolean</CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#equals(java.lang.Object)">equals</A></B>(<A HREF="../../java/lang/Object.html" title="class in java.lang">Object</A>&nbsp;anObject)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares this string to the specified object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;boolean</CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#equalsIgnoreCase(java.lang.String)">equalsIgnoreCase</A></B>(<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;anotherString)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares this <code>String</code> to another <code>String</code>, ignoring case
+        considerations.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>static&nbsp;<A HREF="../../java/lang/String.html" title="class in java.lang">String</A></CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#format(java.util.Locale, java.lang.String, java.lang.Object...)">format</A></B>(<A HREF="../../java/util/Locale.html" title="class in java.util">Locale</A>&nbsp;l,
+        <A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;format,
+        <A HREF="../../java/lang/Object.html" title="class in java.lang">Object</A>...&nbsp;args)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a formatted string using the specified locale, format string,
+        and arguments.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>static&nbsp;<A HREF="../../java/lang/String.html" title="class in java.lang">String</A></CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#format(java.lang.String, java.lang.Object...)">format</A></B>(<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;format,
+        <A HREF="../../java/lang/Object.html" title="class in java.lang">Object</A>...&nbsp;args)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a formatted string using the specified format string and
+        arguments.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;byte[]</CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#getBytes()">getBytes</A></B>()</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Encodes this <code>String</code> into a sequence of bytes using the
+        platform's default charset, storing the result into a new byte array.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;byte[]</CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#getBytes(java.nio.charset.Charset)">getBytes</A></B>(<A HREF="../../java/nio/charset/Charset.html" title="class in java.nio.charset">Charset</A>&nbsp;charset)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Encodes this <code>String</code> into a sequence of bytes using the given
+        <A HREF="../../java/nio/charset/Charset.html" title="class in java.nio.charset">charset</A>, storing the result into a
+        new byte array.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;void</CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#getBytes(int, int, byte[], int)">getBytes</A></B>(int&nbsp;srcBegin,
+        int&nbsp;srcEnd,
+        byte[]&nbsp;dst,
+        int&nbsp;dstBegin)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>This method does not properly convert characters into
+            bytes.  As of JDK&nbsp;1.1, the preferred way to do this is via the
+            <A HREF="../../java/lang/String.html#getBytes()"><CODE>getBytes()</CODE></A> method, which uses the platform's default charset.</I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;byte[]</CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#getBytes(java.lang.String)">getBytes</A></B>(<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;charsetName)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Encodes this <code>String</code> into a sequence of bytes using the named
+        charset, storing the result into a new byte array.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;void</CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#getChars(int, int, char[], int)">getChars</A></B>(int&nbsp;srcBegin,
+        int&nbsp;srcEnd,
+        char[]&nbsp;dst,
+        int&nbsp;dstBegin)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies characters from this string into the destination character
+        array.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;int</CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#hashCode()">hashCode</A></B>()</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a hash code for this string.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;int</CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#indexOf(int)">indexOf</A></B>(int&nbsp;ch)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index within this string of the first occurrence of
+        the specified character.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;int</CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#indexOf(int, int)">indexOf</A></B>(int&nbsp;ch,
+        int&nbsp;fromIndex)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index within this string of the first occurrence of the
+        specified character, starting the search at the specified index.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;int</CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#indexOf(java.lang.String)">indexOf</A></B>(<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;str)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index within this string of the first occurrence of the
+        specified substring.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;int</CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#indexOf(java.lang.String, int)">indexOf</A></B>(<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;str,
+        int&nbsp;fromIndex)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index within this string of the first occurrence of the
+        specified substring, starting at the specified index.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;<A HREF="../../java/lang/String.html" title="class in java.lang">String</A></CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#intern()">intern</A></B>()</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a canonical representation for the string object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;boolean</CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#isEmpty()">isEmpty</A></B>()</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <tt>true</tt> if, and only if, <A HREF="../../java/lang/String.html#length()"><CODE>length()</CODE></A> is <tt>0</tt>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;int</CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#lastIndexOf(int)">lastIndexOf</A></B>(int&nbsp;ch)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index within this string of the last occurrence of
+        the specified character.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;int</CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#lastIndexOf(int, int)">lastIndexOf</A></B>(int&nbsp;ch,
+        int&nbsp;fromIndex)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index within this string of the last occurrence of
+        the specified character, searching backward starting at the
+        specified index.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;int</CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#lastIndexOf(java.lang.String)">lastIndexOf</A></B>(<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;str)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index within this string of the rightmost occurrence
+        of the specified substring.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;int</CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#lastIndexOf(java.lang.String, int)">lastIndexOf</A></B>(<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;str,
+        int&nbsp;fromIndex)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index within this string of the last occurrence of the
+        specified substring, searching backward starting at the specified index.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;int</CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#length()">length</A></B>()</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the length of this string.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;boolean</CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#matches(java.lang.String)">matches</A></B>(<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;regex)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tells whether or not this string matches the given <a
+                href="../util/regex/Pattern.html#sum">regular expression</a>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;int</CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#offsetByCodePoints(int, int)">offsetByCodePoints</A></B>(int&nbsp;index,
+        int&nbsp;codePointOffset)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index within this <code>String</code> that is
+        offset from the given <code>index</code> by
+        <code>codePointOffset</code> code points.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;boolean</CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#regionMatches(boolean, int, java.lang.String, int, int)">regionMatches</A></B>(boolean&nbsp;ignoreCase,
+        int&nbsp;toffset,
+        <A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;other,
+        int&nbsp;ooffset,
+        int&nbsp;len)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tests if two string regions are equal.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;boolean</CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#regionMatches(int, java.lang.String, int, int)">regionMatches</A></B>(int&nbsp;toffset,
+        <A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;other,
+        int&nbsp;ooffset,
+        int&nbsp;len)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tests if two string regions are equal.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;<A HREF="../../java/lang/String.html" title="class in java.lang">String</A></CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#replace(char, char)">replace</A></B>(char&nbsp;oldChar,
+        char&nbsp;newChar)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new string resulting from replacing all occurrences of
+        <code>oldChar</code> in this string with <code>newChar</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;<A HREF="../../java/lang/String.html" title="class in java.lang">String</A></CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#replace(java.lang.CharSequence, java.lang.CharSequence)">replace</A></B>(<A HREF="../../java/lang/CharSequence.html" title="interface in java.lang">CharSequence</A>&nbsp;target,
+        <A HREF="../../java/lang/CharSequence.html" title="interface in java.lang">CharSequence</A>&nbsp;replacement)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Replaces each substring of this string that matches the literal target
+        sequence with the specified literal replacement sequence.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;<A HREF="../../java/lang/String.html" title="class in java.lang">String</A></CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#replaceAll(java.lang.String, java.lang.String)">replaceAll</A></B>(<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;regex,
+        <A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;replacement)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Replaces each substring of this string that matches the given <a
+                href="../util/regex/Pattern.html#sum">regular expression</a> with the
+        given replacement.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;<A HREF="../../java/lang/String.html" title="class in java.lang">String</A></CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#replaceFirst(java.lang.String, java.lang.String)">replaceFirst</A></B>(<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;regex,
+        <A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;replacement)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Replaces the first substring of this string that matches the given <a
+                href="../util/regex/Pattern.html#sum">regular expression</a> with the
+        given replacement.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>[]</CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#split(java.lang.String)">split</A></B>(<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;regex)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Splits this string around matches of the given <a
+                href="../util/regex/Pattern.html#sum">regular expression</a>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>[]</CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#split(java.lang.String, int)">split</A></B>(<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;regex,
+        int&nbsp;limit)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Splits this string around matches of the given
+        <a href="../util/regex/Pattern.html#sum">regular expression</a>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;boolean</CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#startsWith(java.lang.String)">startsWith</A></B>(<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;prefix)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tests if this string starts with the specified prefix.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;boolean</CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#startsWith(java.lang.String, int)">startsWith</A></B>(<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;prefix,
+        int&nbsp;toffset)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tests if the substring of this string beginning at the
+        specified index starts with the specified prefix.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;<A HREF="../../java/lang/CharSequence.html" title="interface in java.lang">CharSequence</A></CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#subSequence(int, int)">subSequence</A></B>(int&nbsp;beginIndex,
+        int&nbsp;endIndex)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new character sequence that is a subsequence of this sequence.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;<A HREF="../../java/lang/String.html" title="class in java.lang">String</A></CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#substring(int)">substring</A></B>(int&nbsp;beginIndex)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new string that is a substring of this string.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;<A HREF="../../java/lang/String.html" title="class in java.lang">String</A></CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#substring(int, int)">substring</A></B>(int&nbsp;beginIndex,
+        int&nbsp;endIndex)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new string that is a substring of this string.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;char[]</CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#toCharArray()">toCharArray</A></B>()</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts this string to a new character array.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;<A HREF="../../java/lang/String.html" title="class in java.lang">String</A></CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#toLowerCase()">toLowerCase</A></B>()</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts all of the characters in this <code>String</code> to lower
+        case using the rules of the default locale.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;<A HREF="../../java/lang/String.html" title="class in java.lang">String</A></CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#toLowerCase(java.util.Locale)">toLowerCase</A></B>(<A HREF="../../java/util/Locale.html" title="class in java.util">Locale</A>&nbsp;locale)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts all of the characters in this <code>String</code> to lower
+        case using the rules of the given <code>Locale</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;<A HREF="../../java/lang/String.html" title="class in java.lang">String</A></CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#toString()">toString</A></B>()</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This object (which is already a string!) is itself returned.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;<A HREF="../../java/lang/String.html" title="class in java.lang">String</A></CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#toUpperCase()">toUpperCase</A></B>()</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts all of the characters in this <code>String</code> to upper
+        case using the rules of the default locale.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;<A HREF="../../java/lang/String.html" title="class in java.lang">String</A></CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#toUpperCase(java.util.Locale)">toUpperCase</A></B>(<A HREF="../../java/util/Locale.html" title="class in java.util">Locale</A>&nbsp;locale)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts all of the characters in this <code>String</code> to upper
+        case using the rules of the given <code>Locale</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>&nbsp;<A HREF="../../java/lang/String.html" title="class in java.lang">String</A></CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#trim()">trim</A></B>()</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a copy of the string, with leading and trailing whitespace
+        omitted.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>static&nbsp;<A HREF="../../java/lang/String.html" title="class in java.lang">String</A></CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#valueOf(boolean)">valueOf</A></B>(boolean&nbsp;b)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the string representation of the <code>boolean</code> argument.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>static&nbsp;<A HREF="../../java/lang/String.html" title="class in java.lang">String</A></CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#valueOf(char)">valueOf</A></B>(char&nbsp;c)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the string representation of the <code>char</code>
+        argument.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>static&nbsp;<A HREF="../../java/lang/String.html" title="class in java.lang">String</A></CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#valueOf(char[])">valueOf</A></B>(char[]&nbsp;data)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the string representation of the <code>char</code> array
+        argument.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>static&nbsp;<A HREF="../../java/lang/String.html" title="class in java.lang">String</A></CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#valueOf(char[], int, int)">valueOf</A></B>(char[]&nbsp;data,
+        int&nbsp;offset,
+        int&nbsp;count)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the string representation of a specific subarray of the
+        <code>char</code> array argument.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>static&nbsp;<A HREF="../../java/lang/String.html" title="class in java.lang">String</A></CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#valueOf(double)">valueOf</A></B>(double&nbsp;d)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the string representation of the <code>double</code> argument.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>static&nbsp;<A HREF="../../java/lang/String.html" title="class in java.lang">String</A></CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#valueOf(float)">valueOf</A></B>(float&nbsp;f)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the string representation of the <code>float</code> argument.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>static&nbsp;<A HREF="../../java/lang/String.html" title="class in java.lang">String</A></CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#valueOf(int)">valueOf</A></B>(int&nbsp;i)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the string representation of the <code>int</code> argument.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>static&nbsp;<A HREF="../../java/lang/String.html" title="class in java.lang">String</A></CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#valueOf(long)">valueOf</A></B>(long&nbsp;l)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the string representation of the <code>long</code> argument.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+    <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+        <CODE>static&nbsp;<A HREF="../../java/lang/String.html" title="class in java.lang">String</A></CODE></FONT></TD>
+    <TD><CODE><B><A HREF="../../java/lang/String.html#valueOf(java.lang.Object)">valueOf</A></B>(<A HREF="../../java/lang/Object.html" title="class in java.lang">Object</A>&nbsp;obj)</CODE>
+
+        <BR>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the string representation of the <code>Object</code> argument.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+    <TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+        <TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="../../java/lang/Object.html" title="class in java.lang">Object</A></B></TH>
+    </TR>
+    <TR BGCOLOR="white" CLASS="TableRowColor">
+        <TD><CODE><A HREF="../../java/lang/Object.html#clone()">clone</A>, <A HREF="../../java/lang/Object.html#finalize()">finalize</A>, <A HREF="../../java/lang/Object.html#getClass()">getClass</A>, <A HREF="../../java/lang/Object.html#notify()">notify</A>, <A HREF="../../java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="../../java/lang/Object.html#wait()">wait</A>, <A HREF="../../java/lang/Object.html#wait(long)">wait</A>, <A HREF="../../java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+    </TR>
+</TABLE>
+&nbsp;
+<P>
+
+    <!-- ============ FIELD DETAIL =========== -->
+
+    <A NAME="field_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+    <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+        <TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+            <B>Field Detail</B></FONT></TH>
+    </TR>
+</TABLE>
+
+<A NAME="CASE_INSENSITIVE_ORDER"><!-- --></A><H3>
+    CASE_INSENSITIVE_ORDER</H3>
+<PRE>
+public static final <A HREF="../../java/util/Comparator.html" title="interface in java.util">Comparator</A>&lt;<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&gt; <B>CASE_INSENSITIVE_ORDER</B></PRE>
+<DL>
+    <DD>A Comparator that orders <code>String</code> objects as by
+        <code>compareToIgnoreCase</code>. This comparator is serializable.
+        <p>
+            Note that this Comparator does <em>not</em> take locale into account,
+            and will result in an unsatisfactory ordering for certain locales.
+            The java.text package provides <em>Collators</em> to allow
+            locale-sensitive ordering.
+        <P>
+        <DL>
+            <DT><B>Since:</B></DT>
+            <DD>1.2</DD>
+            <DT><B>See Also:</B><DD><A HREF="../../java/text/Collator.html#compare(java.lang.String, java.lang.String)"><CODE>Collator.compare(String, String)</CODE></A></DL>
+</DL>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+    <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+        <TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+            <B>Constructor Detail</B></FONT></TH>
+    </TR>
+</TABLE>
+
+<A NAME="String()"><!-- --></A><H3>
+    String</H3>
+<PRE>
+public <B>String</B>()</PRE>
+<DL>
+    <DD>Initializes a newly created <code>String</code> object so that it represents
+        an empty character sequence.  Note that use of this constructor is
+        unnecessary since Strings are immutable.
+        <P>
+</DL>
+<HR>
+
+<A NAME="String(java.lang.String)"><!-- --></A><H3>
+    String</H3>
+<PRE>
+public <B>String</B>(<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;original)</PRE>
+<DL>
+    <DD>Initializes a newly created <code>String</code> object so that it represents
+        the same sequence of characters as the argument; in other words, the
+        newly created string is a copy of the argument string. Unless an
+        explicit copy of <code>original</code> is needed, use of this constructor is
+        unnecessary since Strings are immutable.
+        <P>
+        <DL>
+            <DT><B>Parameters:</B><DD><CODE>original</CODE> - A <code>String</code></DL>
+</DL>
+<HR>
+
+<A NAME="String(char[])"><!-- --></A><H3>
+    String</H3>
+<PRE>
+public <B>String</B>(char[]&nbsp;value)</PRE>
+<DL>
+    <DD>Allocates a new <code>String</code> so that it represents the sequence of
+        characters currently contained in the character array argument. The
+        contents of the character array are copied; subsequent modification of
+        the character array does not affect the newly created string.
+        <P>
+        <DL>
+            <DT><B>Parameters:</B><DD><CODE>value</CODE> - The initial value of the string</DL>
+</DL>
+<HR>
+
+<A NAME="String(char[], int, int)"><!-- --></A><H3>
+    String</H3>
+<PRE>
+public <B>String</B>(char[]&nbsp;value,
+              int&nbsp;offset,
+              int&nbsp;count)</PRE>
+<DL>
+    <DD>Allocates a new <code>String</code> that contains characters from a subarray
+        of the character array argument. The <code>offset</code> argument is the
+        index of the first character of the subarray and the <code>count</code>
+        argument specifies the length of the subarray. The contents of the
+        subarray are copied; subsequent modification of the character array does
+        not affect the newly created string.
+        <P>
+        <DL>
+            <DT><B>Parameters:</B><DD><CODE>value</CODE> - Array that is the source of characters<DD><CODE>offset</CODE> - The initial offset<DD><CODE>count</CODE> - The length
+            <DT><B>Throws:</B>
+            <DD><CODE><A HREF="../../java/lang/IndexOutOfBoundsException.html" title="class in java.lang">IndexOutOfBoundsException</A></CODE> - If the <code>offset</code> and <code>count</code> arguments index
+                characters outside the bounds of the <code>value</code> array</DL>
+</DL>
+<HR>
+
+<A NAME="String(int[], int, int)"><!-- --></A><H3>
+    String</H3>
+<PRE>
+public <B>String</B>(int[]&nbsp;codePoints,
+              int&nbsp;offset,
+              int&nbsp;count)</PRE>
+<DL>
+    <DD>Allocates a new <code>String</code> that contains characters from a subarray
+        of the Unicode code point array argument. The <code>offset</code> argument
+        is the index of the first code point of the subarray and the
+        <code>count</code> argument specifies the length of the subarray. The
+        contents of the subarray are converted to <code>char</code>s; subsequent
+        modification of the <code>int</code> array does not affect the newly created
+        string.
+        <P>
+        <DL>
+            <DT><B>Parameters:</B><DD><CODE>codePoints</CODE> - Array that is the source of Unicode code points<DD><CODE>offset</CODE> - The initial offset<DD><CODE>count</CODE> - The length
+            <DT><B>Throws:</B>
+            <DD><CODE><A HREF="../../java/lang/IllegalArgumentException.html" title="class in java.lang">IllegalArgumentException</A></CODE> - If any invalid Unicode code point is found in <code>codePoints</code>
+            <DD><CODE><A HREF="../../java/lang/IndexOutOfBoundsException.html" title="class in java.lang">IndexOutOfBoundsException</A></CODE> - If the <code>offset</code> and <code>count</code> arguments index
+                characters outside the bounds of the <code>codePoints</code> array<DT><B>Since:</B></DT>
+            <DD>1.5</DD>
+        </DL>
+</DL>
+<HR>
+
+<A NAME="String(byte[], int, int, int)"><!-- --></A><H3>
+    String</H3>
+<PRE>
+<FONT SIZE="-1"><A HREF="../../java/lang/Deprecated.html" title="annotation in java.lang">@Deprecated</A>
+</FONT>public <B>String</B>(byte[]&nbsp;ascii,
+                         int&nbsp;hibyte,
+                         int&nbsp;offset,
+                         int&nbsp;count)</PRE>
+<DL>
+    <DD><B>Deprecated.</B>&nbsp;<I>This method does not properly convert bytes into characters.
+        As of JDK&nbsp;1.1, the preferred way to do this is via the
+        <code>String</code> constructors that take a <A HREF="../../java/nio/charset/Charset.html" title="class in java.nio.charset"><CODE>Charset</CODE></A>, charset name, or that use the platform's
+        default charset.</I>
+        <P>
+            <DD>Allocates a new <code>String</code> constructed from a subarray of an array
+                of 8-bit integer values.
+
+        <p> The <code>offset</code> argument is the index of the first byte of the
+            subarray, and the <code>count</code> argument specifies the length of the
+            subarray.
+
+        <p> Each <code>byte</code> in the subarray is converted to a <code>char</code> as
+            specified in the method above.
+        <P>
+        <DL>
+            <DT><B>Parameters:</B><DD><CODE>ascii</CODE> - The bytes to be converted to characters<DD><CODE>hibyte</CODE> - The top 8 bits of each 16-bit Unicode code unit<DD><CODE>offset</CODE> - The initial offset<DD><CODE>count</CODE> - The length
+            <DT><B>Throws:</B>
+            <DD><CODE><A HREF="../../java/lang/IndexOutOfBoundsException.html" title="class in java.lang">IndexOutOfBoundsException</A></CODE> - If the <code>offset</code> or <code>count</code> argument is invalid<DT><B>See Also:</B><DD><A HREF="../../java/lang/String.html#String(byte[], int)"><CODE>String(byte[], int)</CODE></A>,
+            <A HREF="../../java/lang/String.html#String(byte[], int, int, java.lang.String)"><CODE>String(byte[], int, int, java.lang.String)</CODE></A>,
+            <A HREF="../../java/lang/String.html#String(byte[], int, int, java.nio.charset.Charset)"><CODE>String(byte[], int, int, java.nio.charset.Charset)</CODE></A>,
+            <A HREF="../../java/lang/String.html#String(byte[], int, int)"><CODE>String(byte[], int, int)</CODE></A>,
+            <A HREF="../../java/lang/String.html#String(byte[], java.lang.String)"><CODE>String(byte[], java.lang.String)</CODE></A>,
+            <A HREF="../../java/lang/String.html#String(byte[], java.nio.charset.Charset)"><CODE>String(byte[], java.nio.charset.Charset)</CODE></A>,
+            <A HREF="../../java/lang/String.html#String(byte[])"><CODE>String(byte[])</CODE></A></DL>
+</DL>
+<HR>
+
+<A NAME="String(byte[], int)"><!-- --></A><H3>
+    String</H3>
+<PRE>
+<FONT SIZE="-1"><A HREF="../../java/lang/Deprecated.html" title="annotation in java.lang">@Deprecated</A>
+</FONT>public <B>String</B>(byte[]&nbsp;ascii,
+                         int&nbsp;hibyte)</PRE>
+<DL>
+    <DD><B>Deprecated.</B>&nbsp;<I>This method does not properly convert bytes into
+        characters.  As of JDK&nbsp;1.1, the preferred way to do this is via the
+        <code>String</code> constructors that take a <A HREF="../../java/nio/charset/Charset.html" title="class in java.nio.charset"><CODE>Charset</CODE></A>, charset name, or that use the platform's
+        default charset.</I>
+        <P>
+            <DD>Allocates a new <code>String</code> containing characters constructed from
+                an array of 8-bit integer values. Each character <i>c</i>in the
+                resulting string is constructed from the corresponding component
+                <i>b</i> in the byte array such that:
+
+                <blockquote><pre>
+     <b><i>c</i></b> == (char)(((hibyte &amp; 0xff) &lt;&lt; 8)
+                         | (<b><i>b</i></b> &amp; 0xff))
+ </pre></blockquote>
+        <P>
+        <DL>
+            <DT><B>Parameters:</B><DD><CODE>ascii</CODE> - The bytes to be converted to characters<DD><CODE>hibyte</CODE> - The top 8 bits of each 16-bit Unicode code unit<DT><B>See Also:</B><DD><A HREF="../../java/lang/String.html#String(byte[], int, int, java.lang.String)"><CODE>String(byte[], int, int, java.lang.String)</CODE></A>,
+            <A HREF="../../java/lang/String.html#String(byte[], int, int, java.nio.charset.Charset)"><CODE>String(byte[], int, int, java.nio.charset.Charset)</CODE></A>,
+            <A HREF="../../java/lang/String.html#String(byte[], int, int)"><CODE>String(byte[], int, int)</CODE></A>,
+            <A HREF="../../java/lang/String.html#String(byte[], java.lang.String)"><CODE>String(byte[], java.lang.String)</CODE></A>,
+            <A HREF="../../java/lang/String.html#String(byte[], java.nio.charset.Charset)"><CODE>String(byte[], java.nio.charset.Charset)</CODE></A>,
+            <A HREF="../../java/lang/String.html#String(byte[])"><CODE>String(byte[])</CODE></A></DL>
+</DL>
+<HR>
+
+<A NAME="String(byte[], int, int, java.lang.String)"><!-- --></A><H3>
+    String</H3>
+<PRE>
+public <B>String</B>(byte[]&nbsp;bytes,
+              int&nbsp;offset,
+              int&nbsp;length,
+              <A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;charsetName)
+       throws <A HREF="../../java/io/UnsupportedEncodingException.html" title="class in java.io">UnsupportedEncodingException</A></PRE>
+<DL>
+    <DD>Constructs a new <code>String</code> by decoding the specified subarray of
+        bytes using the specified charset.  The length of the new <code>String</code>
+        is a function of the charset, and hence may not be equal to the length
+        of the subarray.
+
+        <p> The behavior of this constructor when the given bytes are not valid
+            in the given charset is unspecified.  The <A HREF="../../java/nio/charset/CharsetDecoder.html" title="class in java.nio.charset"><CODE>CharsetDecoder</CODE></A> class should be used when more control
+            over the decoding process is required.
+        <P>
+        <DL>
+            <DT><B>Parameters:</B><DD><CODE>bytes</CODE> - The bytes to be decoded into characters<DD><CODE>offset</CODE> - The index of the first byte to decode<DD><CODE>length</CODE> - The number of bytes to decode<DD><CODE>charsetName</CODE> - The name of a supported <A HREF="../../java/nio/charset/Charset.html" title="class in java.nio.charset">charset</A>
+            <DT><B>Throws:</B>
+            <DD><CODE><A HREF="../../java/io/UnsupportedEncodingException.html" title="class in java.io">UnsupportedEncodingException</A></CODE> - If the named charset is not supported
+            <DD><CODE><A HREF="../../java/lang/IndexOutOfBoundsException.html" title="class in java.lang">IndexOutOfBoundsException</A></CODE> - If the <code>offset</code> and <code>length</code> arguments index
+                characters outside the bounds of the <code>bytes</code> array<DT><B>Since:</B></DT>
+            <DD>JDK1.1</DD>
+        </DL>
+</DL>
+<HR>
+
+<A NAME="String(byte[], int, int, java.nio.charset.Charset)"><!-- --></A><H3>
+    String</H3>
+<PRE>
+public <B>String</B>(byte[]&nbsp;bytes,
+              int&nbsp;offset,
+              int&nbsp;length,
+              <A HREF="../../java/nio/charset/Charset.html" title="class in java.nio.charset">Charset</A>&nbsp;charset)</PRE>
+<DL>
+    <DD>Constructs a new <code>String</code> by decoding the specified subarray of
+        bytes using the specified <A HREF="../../java/nio/charset/Charset.html" title="class in java.nio.charset">charset</A>.
+        The length of the new <code>String</code> is a function of the charset, and
+        hence may not be equal to the length of the subarray.
+
+        <p> This method always replaces malformed-input and unmappable-character
+            sequences with this charset's default replacement string.  The <A HREF="../../java/nio/charset/CharsetDecoder.html" title="class in java.nio.charset"><CODE>CharsetDecoder</CODE></A> class should be used when more control
+            over the decoding process is required.
+        <P>
+        <DL>
+            <DT><B>Parameters:</B><DD><CODE>bytes</CODE> - The bytes to be decoded into characters<DD><CODE>offset</CODE> - The index of the first byte to decode<DD><CODE>length</CODE> - The number of bytes to decode<DD><CODE>charset</CODE> - The <A HREF="../../java/nio/charset/Charset.html" title="class in java.nio.charset">charset</A> to be used to
+            decode the <code>bytes</code>
+            <DT><B>Throws:</B>
+            <DD><CODE><A HREF="../../java/lang/IndexOutOfBoundsException.html" title="class in java.lang">IndexOutOfBoundsException</A></CODE> - If the <code>offset</code> and <code>length</code> arguments index
+                characters outside the bounds of the <code>bytes</code> array<DT><B>Since:</B></DT>
+            <DD>1.6</DD>
+        </DL>
+</DL>
+<HR>
+
+<A NAME="String(byte[], java.lang.String)"><!-- --></A><H3>
+    String</H3>
+<PRE>
+public <B>String</B>(byte[]&nbsp;bytes,
+              <A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;charsetName)
+       throws <A HREF="../../java/io/UnsupportedEncodingException.html" title="class in java.io">UnsupportedEncodingException</A></PRE>
+<DL>
+    <DD>Constructs a new <code>String</code> by decoding the specified array of bytes
+        using the specified <A HREF="../../java/nio/charset/Charset.html" title="class in java.nio.charset">charset</A>.  The
+        length of the new <code>String</code> is a function of the charset, and hence
+        may not be equal to the length of the byte array.
+
+        <p> The behavior of this constructor when the given bytes are not valid
+            in the given charset is unspecified.  The <A HREF="../../java/nio/charset/CharsetDecoder.html" title="class in java.nio.charset"><CODE>CharsetDecoder</CODE></A> class should be used when more control
+            over the decoding process is required.
+        <P>
+        <DL>
+            <DT><B>Parameters:</B><DD><CODE>bytes</CODE> - The bytes to be decoded into characters<DD><CODE>charsetName</CODE> - The name of a supported <A HREF="../../java/nio/charset/Charset.html" title="class in java.nio.charset">charset</A>
+            <DT><B>Throws:</B>
+            <DD><CODE><A HREF="../../java/io/UnsupportedEncodingException.html" title="class in java.io">UnsupportedEncodingException</A></CODE> - If the named charset is not supported<DT><B>Since:</B></DT>
+            <DD>JDK1.1</DD>
+        </DL>
+</DL>
+<HR>
+
+<A NAME="String(byte[], java.nio.charset.Charset)"><!-- --></A><H3>
+    String</H3>
+<PRE>
+public <B>String</B>(byte[]&nbsp;bytes,
+              <A HREF="../../java/nio/charset/Charset.html" title="class in java.nio.charset">Charset</A>&nbsp;charset)</PRE>
+<DL>
+    <DD>Constructs a new <code>String</code> by decoding the specified array of
+        bytes using the specified <A HREF="../../java/nio/charset/Charset.html" title="class in java.nio.charset">charset</A>.
+        The length of the new <code>String</code> is a function of the charset, and
+        hence may not be equal to the length of the byte array.
+
+        <p> This method always replaces malformed-input and unmappable-character
+            sequences with this charset's default replacement string.  The <A HREF="../../java/nio/charset/CharsetDecoder.html" title="class in java.nio.charset"><CODE>CharsetDecoder</CODE></A> class should be used when more control
+            over the decoding process is required.
+        <P>
+        <DL>
+            <DT><B>Parameters:</B><DD><CODE>bytes</CODE> - The bytes to be decoded into characters<DD><CODE>charset</CODE> - The <A HREF="../../java/nio/charset/Charset.html" title="class in java.nio.charset">charset</A> to be used to
+            decode the <code>bytes</code><DT><B>Since:</B></DT>
+            <DD>1.6</DD>
+        </DL>
+</DL>
+<HR>
+
+<A NAME="String(byte[], int, int)"><!-- --></A><H3>
+    String</H3>
+<PRE>
+public <B>String</B>(byte[]&nbsp;bytes,
+              int&nbsp;offset,
+              int&nbsp;length)</PRE>
+<DL>
+    <DD>Constructs a new <code>String</code> by decoding the specified subarray of
+        bytes using the platform's default charset.  The length of the new
+        <code>String</code> is a function of the charset, and hence may not be equal
+        to the length of the subarray.
+
+        <p> The behavior of this constructor when the given bytes are not valid
+            in the default charset is unspecified.  The <A HREF="../../java/nio/charset/CharsetDecoder.html" title="class in java.nio.charset"><CODE>CharsetDecoder</CODE></A> class should be used when more control
+            over the decoding process is required.
+        <P>
+        <DL>
+            <DT><B>Parameters:</B><DD><CODE>bytes</CODE> - The bytes to be decoded into characters<DD><CODE>offset</CODE> - The index of the first byte to decode<DD><CODE>length</CODE> - The number of bytes to decode
+            <DT><B>Throws:</B>
+            <DD><CODE><A HREF="../../java/lang/IndexOutOfBoundsException.html" title="class in java.lang">IndexOutOfBoundsException</A></CODE> - If the <code>offset</code> and the <code>length</code> arguments index
+                characters outside the bounds of the <code>bytes</code> array<DT><B>Since:</B></DT>
+            <DD>JDK1.1</DD>
+        </DL>
+</DL>
+<HR>
+
+<A NAME="String(byte[])"><!-- --></A><H3>
+    String</H3>
+<PRE>
+public <B>String</B>(byte[]&nbsp;bytes)</PRE>
+<DL>
+    <DD>Constructs a new <code>String</code> by decoding the specified array of bytes
+        using the platform's default charset.  The length of the new <code>String</code> is a function of the charset, and hence may not be equal to the
+        length of the byte array.
+
+        <p> The behavior of this constructor when the given bytes are not valid
+            in the default charset is unspecified.  The <A HREF="../../java/nio/charset/CharsetDecoder.html" title="class in java.nio.charset"><CODE>CharsetDecoder</CODE></A> class should be used when more control
+            over the decoding process is required.
+        <P>
+        <DL>
+            <DT><B>Parameters:</B><DD><CODE>bytes</CODE> - The bytes to be decoded into characters<DT><B>Since:</B></DT>
+            <DD>JDK1.1</DD>
+        </DL>
+</DL>
+<HR>
+
+<A NAME="String(java.lang.StringBuffer)"><!-- --></A><H3>
+    String</H3>
+<PRE>
+public <B>String</B>(<A HREF="../../java/lang/StringBuffer.html" title="class in java.lang">StringBuffer</A>&nbsp;buffer)</PRE>
+<DL>
+    <DD>Allocates a new string that contains the sequence of characters
+        currently contained in the string buffer argument. The contents of the
+        string buffer are copied; subsequent modification of the string buffer
+        does not affect the newly created string.
+        <P>
+        <DL>
+            <DT><B>Parameters:</B><DD><CODE>buffer</CODE> - A <code>StringBuffer</code></DL>
+</DL>
+<HR>
+
+<A NAME="String(java.lang.StringBuilder)"><!-- --></A><H3>
+    String</H3>
+<PRE>
+public <B>String</B>(<A HREF="../../java/lang/StringBuilder.html" title="class in java.lang">StringBuilder</A>&nbsp;builder)</PRE>
+<DL>
+    <DD>Allocates a new string that contains the sequence of characters
+        currently contained in the string builder argument. The contents of the
+        string builder are copied; subsequent modification of the string builder
+        does not affect the newly created string.
+
+        <p> This constructor is provided to ease migration to <code>StringBuilder</code>. Obtaining a string from a string builder via the <code>toString</code> method is likely to run faster and is generally preferred.
+        <P>
+        <DL>
+            <DT><B>Parameters:</B><DD><CODE>builder</CODE> - A <code>StringBuilder</code><DT><B>Since:</B></DT>
+            <DD>1.5</DD>
+        </DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+    <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+        <TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+            <B>Method Detail</B></FONT></TH>
+    </TR>
+</TABLE>
+
+<A NAME="length()"><!-- --></A><H3>
+    length</H3>
+<PRE>
+public int <B>length</B>()</PRE>
+<DL>
+    <DD>Returns the length of this string.
+        The length is equal to the number of <a href="Character.html#unicode">Unicode
+            code units</a> in the string.
+        <P>
+    <DD><DL>
+        <DT><B>Specified by:</B><DD><CODE><A HREF="../../java/lang/CharSequence.html#length()">length</A></CODE> in interface <CODE><A HREF="../../java/lang/CharSequence.html" title="interface in java.lang">CharSequence</A></CODE></DL>
+    </DD>
+    <DD><DL>
+
+        <DT><B>Returns:</B><DD>the length of the sequence of characters represented by this
+        object.</DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="isEmpty()"><!-- --></A><H3>
+    isEmpty</H3>
+<PRE>
+public boolean <B>isEmpty</B>()</PRE>
+<DL>
+    <DD>Returns <tt>true</tt> if, and only if, <A HREF="../../java/lang/String.html#length()"><CODE>length()</CODE></A> is <tt>0</tt>.
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+
+        <DT><B>Returns:</B><DD><tt>true</tt> if <A HREF="../../java/lang/String.html#length()"><CODE>length()</CODE></A> is <tt>0</tt>, otherwise
+        <tt>false</tt><DT><B>Since:</B></DT>
+        <DD>1.6</DD>
+    </DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="charAt(int)"><!-- --></A><H3>
+    charAt</H3>
+<PRE>
+public char <B>charAt</B>(int&nbsp;index)</PRE>
+<DL>
+    <DD>Returns the <code>char</code> value at the
+        specified index. An index ranges from <code>0</code> to
+        <code>length() - 1</code>. The first <code>char</code> value of the sequence
+        is at index <code>0</code>, the next at index <code>1</code>,
+        and so on, as for array indexing.
+
+        <p>If the <code>char</code> value specified by the index is a
+            <a href="Character.html#unicode">surrogate</a>, the surrogate
+            value is returned.
+        <P>
+    <DD><DL>
+        <DT><B>Specified by:</B><DD><CODE><A HREF="../../java/lang/CharSequence.html#charAt(int)">charAt</A></CODE> in interface <CODE><A HREF="../../java/lang/CharSequence.html" title="interface in java.lang">CharSequence</A></CODE></DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>index</CODE> - the index of the <code>char</code> value.
+        <DT><B>Returns:</B><DD>the <code>char</code> value at the specified index of this string.
+        The first <code>char</code> value is at index <code>0</code>.
+        <DT><B>Throws:</B>
+        <DD><CODE><A HREF="../../java/lang/IndexOutOfBoundsException.html" title="class in java.lang">IndexOutOfBoundsException</A></CODE> - if the <code>index</code>
+            argument is negative or not less than the length of this
+            string.</DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="codePointAt(int)"><!-- --></A><H3>
+    codePointAt</H3>
+<PRE>
+public int <B>codePointAt</B>(int&nbsp;index)</PRE>
+<DL>
+    <DD>Returns the character (Unicode code point) at the specified
+        index. The index refers to <code>char</code> values
+        (Unicode code units) and ranges from <code>0</code> to
+        <A HREF="../../java/lang/String.html#length()"><CODE>length()</CODE></A><code> - 1</code>.
+
+        <p> If the <code>char</code> value specified at the given index
+            is in the high-surrogate range, the following index is less
+            than the length of this <code>String</code>, and the
+            <code>char</code> value at the following index is in the
+            low-surrogate range, then the supplementary code point
+            corresponding to this surrogate pair is returned. Otherwise,
+            the <code>char</code> value at the given index is returned.
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>index</CODE> - the index to the <code>char</code> values
+        <DT><B>Returns:</B><DD>the code point value of the character at the
+        <code>index</code>
+        <DT><B>Throws:</B>
+        <DD><CODE><A HREF="../../java/lang/IndexOutOfBoundsException.html" title="class in java.lang">IndexOutOfBoundsException</A></CODE> - if the <code>index</code>
+            argument is negative or not less than the length of this
+            string.<DT><B>Since:</B></DT>
+        <DD>1.5</DD>
+    </DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="codePointBefore(int)"><!-- --></A><H3>
+    codePointBefore</H3>
+<PRE>
+public int <B>codePointBefore</B>(int&nbsp;index)</PRE>
+<DL>
+    <DD>Returns the character (Unicode code point) before the specified
+        index. The index refers to <code>char</code> values
+        (Unicode code units) and ranges from <code>1</code> to <A HREF="../../java/lang/CharSequence.html#length()"><CODE>length</CODE></A>.
+
+        <p> If the <code>char</code> value at <code>(index - 1)</code>
+            is in the low-surrogate range, <code>(index - 2)</code> is not
+            negative, and the <code>char</code> value at <code>(index -
+                2)</code> is in the high-surrogate range, then the
+            supplementary code point value of the surrogate pair is
+            returned. If the <code>char</code> value at <code>index -
+                1</code> is an unpaired low-surrogate or a high-surrogate, the
+            surrogate value is returned.
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>index</CODE> - the index following the code point that should be returned
+        <DT><B>Returns:</B><DD>the Unicode code point value before the given index.
+        <DT><B>Throws:</B>
+        <DD><CODE><A HREF="../../java/lang/IndexOutOfBoundsException.html" title="class in java.lang">IndexOutOfBoundsException</A></CODE> - if the <code>index</code>
+            argument is less than 1 or greater than the length
+            of this string.<DT><B>Since:</B></DT>
+        <DD>1.5</DD>
+    </DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="codePointCount(int, int)"><!-- --></A><H3>
+    codePointCount</H3>
+<PRE>
+public int <B>codePointCount</B>(int&nbsp;beginIndex,
+                          int&nbsp;endIndex)</PRE>
+<DL>
+    <DD>Returns the number of Unicode code points in the specified text
+        range of this <code>String</code>. The text range begins at the
+        specified <code>beginIndex</code> and extends to the
+        <code>char</code> at index <code>endIndex - 1</code>. Thus the
+        length (in <code>char</code>s) of the text range is
+        <code>endIndex-beginIndex</code>. Unpaired surrogates within
+        the text range count as one code point each.
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>beginIndex</CODE> - the index to the first <code>char</code> of
+        the text range.<DD><CODE>endIndex</CODE> - the index after the last <code>char</code> of
+        the text range.
+        <DT><B>Returns:</B><DD>the number of Unicode code points in the specified text
+        range
+        <DT><B>Throws:</B>
+        <DD><CODE><A HREF="../../java/lang/IndexOutOfBoundsException.html" title="class in java.lang">IndexOutOfBoundsException</A></CODE> - if the
+            <code>beginIndex</code> is negative, or <code>endIndex</code>
+            is larger than the length of this <code>String</code>, or
+            <code>beginIndex</code> is larger than <code>endIndex</code>.<DT><B>Since:</B></DT>
+        <DD>1.5</DD>
+    </DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="offsetByCodePoints(int, int)"><!-- --></A><H3>
+    offsetByCodePoints</H3>
+<PRE>
+public int <B>offsetByCodePoints</B>(int&nbsp;index,
+                              int&nbsp;codePointOffset)</PRE>
+<DL>
+    <DD>Returns the index within this <code>String</code> that is
+        offset from the given <code>index</code> by
+        <code>codePointOffset</code> code points. Unpaired surrogates
+        within the text range given by <code>index</code> and
+        <code>codePointOffset</code> count as one code point each.
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>index</CODE> - the index to be offset<DD><CODE>codePointOffset</CODE> - the offset in code points
+        <DT><B>Returns:</B><DD>the index within this <code>String</code>
+        <DT><B>Throws:</B>
+        <DD><CODE><A HREF="../../java/lang/IndexOutOfBoundsException.html" title="class in java.lang">IndexOutOfBoundsException</A></CODE> - if <code>index</code>
+            is negative or larger then the length of this
+            <code>String</code>, or if <code>codePointOffset</code> is positive
+            and the substring starting with <code>index</code> has fewer
+            than <code>codePointOffset</code> code points,
+            or if <code>codePointOffset</code> is negative and the substring
+            before <code>index</code> has fewer than the absolute value
+            of <code>codePointOffset</code> code points.<DT><B>Since:</B></DT>
+        <DD>1.5</DD>
+    </DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="getChars(int, int, char[], int)"><!-- --></A><H3>
+    getChars</H3>
+<PRE>
+public void <B>getChars</B>(int&nbsp;srcBegin,
+                     int&nbsp;srcEnd,
+                     char[]&nbsp;dst,
+                     int&nbsp;dstBegin)</PRE>
+<DL>
+    <DD>Copies characters from this string into the destination character
+        array.
+        <p>
+            The first character to be copied is at index <code>srcBegin</code>;
+            the last character to be copied is at index <code>srcEnd-1</code>
+            (thus the total number of characters to be copied is
+            <code>srcEnd-srcBegin</code>). The characters are copied into the
+            subarray of <code>dst</code> starting at index <code>dstBegin</code>
+            and ending at index:
+        <p><blockquote><pre>
+     dstbegin + (srcEnd-srcBegin) - 1
+ </pre></blockquote>
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>srcBegin</CODE> - index of the first character in the string
+        to copy.<DD><CODE>srcEnd</CODE> - index after the last character in the string
+        to copy.<DD><CODE>dst</CODE> - the destination array.<DD><CODE>dstBegin</CODE> - the start offset in the destination array.
+        <DT><B>Throws:</B>
+        <DD><CODE><A HREF="../../java/lang/IndexOutOfBoundsException.html" title="class in java.lang">IndexOutOfBoundsException</A></CODE> - If any of the following
+            is true:
+            <ul><li><code>srcBegin</code> is negative.
+                <li><code>srcBegin</code> is greater than <code>srcEnd</code>
+                <li><code>srcEnd</code> is greater than the length of this
+                    string
+                <li><code>dstBegin</code> is negative
+                <li><code>dstBegin+(srcEnd-srcBegin)</code> is larger than
+                    <code>dst.length</code></ul></DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="getBytes(int, int, byte[], int)"><!-- --></A><H3>
+    getBytes</H3>
+<PRE>
+<FONT SIZE="-1"><A HREF="../../java/lang/Deprecated.html" title="annotation in java.lang">@Deprecated</A>
+</FONT>public void <B>getBytes</B>(int&nbsp;srcBegin,
+                                int&nbsp;srcEnd,
+                                byte[]&nbsp;dst,
+                                int&nbsp;dstBegin)</PRE>
+<DL>
+    <DD><B>Deprecated.</B>&nbsp;<I>This method does not properly convert characters into
+        bytes.  As of JDK&nbsp;1.1, the preferred way to do this is via the
+        <A HREF="../../java/lang/String.html#getBytes()"><CODE>getBytes()</CODE></A> method, which uses the platform's default charset.</I>
+        <P>
+            <DD>Copies characters from this string into the destination byte array. Each
+                byte receives the 8 low-order bits of the corresponding character. The
+                eight high-order bits of each character are not copied and do not
+                participate in the transfer in any way.
+
+        <p> The first character to be copied is at index <code>srcBegin</code>; the
+            last character to be copied is at index <code>srcEnd-1</code>.  The total
+            number of characters to be copied is <code>srcEnd-srcBegin</code>. The
+            characters, converted to bytes, are copied into the subarray of <code>dst</code> starting at index <code>dstBegin</code> and ending at index:
+
+        <blockquote><pre>
+     dstbegin + (srcEnd-srcBegin) - 1
+ </pre></blockquote>
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>srcBegin</CODE> - Index of the first character in the string to copy<DD><CODE>srcEnd</CODE> - Index after the last character in the string to copy<DD><CODE>dst</CODE> - The destination array<DD><CODE>dstBegin</CODE> - The start offset in the destination array
+        <DT><B>Throws:</B>
+        <DD><CODE><A HREF="../../java/lang/IndexOutOfBoundsException.html" title="class in java.lang">IndexOutOfBoundsException</A></CODE> - If any of the following is true:
+            <ul>
+                <li> <code>srcBegin</code> is negative
+                <li> <code>srcBegin</code> is greater than <code>srcEnd</code>
+                <li> <code>srcEnd</code> is greater than the length of this String
+                <li> <code>dstBegin</code> is negative
+                <li> <code>dstBegin+(srcEnd-srcBegin)</code> is larger than <code>dst.length</code>
+            </ul></DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="getBytes(java.lang.String)"><!-- --></A><H3>
+    getBytes</H3>
+<PRE>
+public byte[] <B>getBytes</B>(<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;charsetName)
+                throws <A HREF="../../java/io/UnsupportedEncodingException.html" title="class in java.io">UnsupportedEncodingException</A></PRE>
+<DL>
+    <DD>Encodes this <code>String</code> into a sequence of bytes using the named
+        charset, storing the result into a new byte array.
+
+        <p> The behavior of this method when this string cannot be encoded in
+            the given charset is unspecified.  The <A HREF="../../java/nio/charset/CharsetEncoder.html" title="class in java.nio.charset"><CODE>CharsetEncoder</CODE></A> class should be used when more control
+            over the encoding process is required.
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>charsetName</CODE> - The name of a supported <A HREF="../../java/nio/charset/Charset.html" title="class in java.nio.charset">charset</A>
+        <DT><B>Returns:</B><DD>The resultant byte array
+        <DT><B>Throws:</B>
+        <DD><CODE><A HREF="../../java/io/UnsupportedEncodingException.html" title="class in java.io">UnsupportedEncodingException</A></CODE> - If the named charset is not supported<DT><B>Since:</B></DT>
+        <DD>JDK1.1</DD>
+    </DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="getBytes(java.nio.charset.Charset)"><!-- --></A><H3>
+    getBytes</H3>
+<PRE>
+public byte[] <B>getBytes</B>(<A HREF="../../java/nio/charset/Charset.html" title="class in java.nio.charset">Charset</A>&nbsp;charset)</PRE>
+<DL>
+    <DD>Encodes this <code>String</code> into a sequence of bytes using the given
+        <A HREF="../../java/nio/charset/Charset.html" title="class in java.nio.charset">charset</A>, storing the result into a
+        new byte array.
+
+        <p> This method always replaces malformed-input and unmappable-character
+            sequences with this charset's default replacement byte array.  The
+            <A HREF="../../java/nio/charset/CharsetEncoder.html" title="class in java.nio.charset"><CODE>CharsetEncoder</CODE></A> class should be used when more
+            control over the encoding process is required.
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>charset</CODE> - The <A HREF="../../java/nio/charset/Charset.html" title="class in java.nio.charset">Charset</A> to be used to encode
+        the <code>String</code>
+        <DT><B>Returns:</B><DD>The resultant byte array<DT><B>Since:</B></DT>
+        <DD>1.6</DD>
+    </DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="getBytes()"><!-- --></A><H3>
+    getBytes</H3>
+<PRE>
+public byte[] <B>getBytes</B>()</PRE>
+<DL>
+    <DD>Encodes this <code>String</code> into a sequence of bytes using the
+        platform's default charset, storing the result into a new byte array.
+
+        <p> The behavior of this method when this string cannot be encoded in
+            the default charset is unspecified.  The <A HREF="../../java/nio/charset/CharsetEncoder.html" title="class in java.nio.charset"><CODE>CharsetEncoder</CODE></A> class should be used when more control
+            over the encoding process is required.
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+
+        <DT><B>Returns:</B><DD>The resultant byte array<DT><B>Since:</B></DT>
+        <DD>JDK1.1</DD>
+    </DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
+    equals</H3>
+<PRE>
+public boolean <B>equals</B>(<A HREF="../../java/lang/Object.html" title="class in java.lang">Object</A>&nbsp;anObject)</PRE>
+<DL>
+    <DD>Compares this string to the specified object.  The result is <code>true</code> if and only if the argument is not <code>null</code> and is a <code>String</code> object that represents the same sequence of characters as this
+        object.
+        <P>
+    <DD><DL>
+        <DT><B>Overrides:</B><DD><CODE><A HREF="../../java/lang/Object.html#equals(java.lang.Object)">equals</A></CODE> in class <CODE><A HREF="../../java/lang/Object.html" title="class in java.lang">Object</A></CODE></DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>anObject</CODE> - The object to compare this <code>String</code> against
+        <DT><B>Returns:</B><DD><code>true</code> if the given object represents a <code>String</code>
+        equivalent to this string, <code>false</code> otherwise<DT><B>See Also:</B><DD><A HREF="../../java/lang/String.html#compareTo(java.lang.String)"><CODE>compareTo(String)</CODE></A>,
+        <A HREF="../../java/lang/String.html#equalsIgnoreCase(java.lang.String)"><CODE>equalsIgnoreCase(String)</CODE></A></DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="contentEquals(java.lang.StringBuffer)"><!-- --></A><H3>
+    contentEquals</H3>
+<PRE>
+public boolean <B>contentEquals</B>(<A HREF="../../java/lang/StringBuffer.html" title="class in java.lang">StringBuffer</A>&nbsp;sb)</PRE>
+<DL>
+    <DD>Compares this string to the specified <code>StringBuffer</code>.  The result
+        is <code>true</code> if and only if this <code>String</code> represents the same
+        sequence of characters as the specified <code>StringBuffer</code>.
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>sb</CODE> - The <code>StringBuffer</code> to compare this <code>String</code> against
+        <DT><B>Returns:</B><DD><code>true</code> if this <code>String</code> represents the same
+        sequence of characters as the specified <code>StringBuffer</code>,
+        <code>false</code> otherwise<DT><B>Since:</B></DT>
+        <DD>1.4</DD>
+    </DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="contentEquals(java.lang.CharSequence)"><!-- --></A><H3>
+    contentEquals</H3>
+<PRE>
+public boolean <B>contentEquals</B>(<A HREF="../../java/lang/CharSequence.html" title="interface in java.lang">CharSequence</A>&nbsp;cs)</PRE>
+<DL>
+    <DD>Compares this string to the specified <code>CharSequence</code>.  The result
+        is <code>true</code> if and only if this <code>String</code> represents the same
+        sequence of char values as the specified sequence.
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>cs</CODE> - The sequence to compare this <code>String</code> against
+        <DT><B>Returns:</B><DD><code>true</code> if this <code>String</code> represents the same
+        sequence of char values as the specified sequence, <code>false</code> otherwise<DT><B>Since:</B></DT>
+        <DD>1.5</DD>
+    </DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="equalsIgnoreCase(java.lang.String)"><!-- --></A><H3>
+    equalsIgnoreCase</H3>
+<PRE>
+public boolean <B>equalsIgnoreCase</B>(<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;anotherString)</PRE>
+<DL>
+    <DD>Compares this <code>String</code> to another <code>String</code>, ignoring case
+        considerations.  Two strings are considered equal ignoring case if they
+        are of the same length and corresponding characters in the two strings
+        are equal ignoring case.
+
+        <p> Two characters <code>c1</code> and <code>c2</code> are considered the same
+            ignoring case if at least one of the following is true:
+        <ul>
+            <li> The two characters are the same (as compared by the
+                <code>==</code> operator)
+            <li> Applying the method <A HREF="../../java/lang/Character.html#toUpperCase(char)"><CODE>Character.toUpperCase(char)</CODE></A> to each character
+                produces the same result
+            <li> Applying the method <A HREF="../../java/lang/Character.html#toLowerCase(char)"><CODE>Character.toLowerCase(char)</CODE></A> to each character
+                produces the same result
+        </ul>
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>anotherString</CODE> - The <code>String</code> to compare this <code>String</code> against
+        <DT><B>Returns:</B><DD><code>true</code> if the argument is not <code>null</code> and it
+        represents an equivalent <code>String</code> ignoring case; <code>false</code> otherwise<DT><B>See Also:</B><DD><A HREF="../../java/lang/String.html#equals(java.lang.Object)"><CODE>equals(Object)</CODE></A></DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="compareTo(java.lang.String)"><!-- --></A><H3>
+    compareTo</H3>
+<PRE>
+public int <B>compareTo</B>(<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;anotherString)</PRE>
+<DL>
+    <DD>Compares two strings lexicographically.
+        The comparison is based on the Unicode value of each character in
+        the strings. The character sequence represented by this
+        <code>String</code> object is compared lexicographically to the
+        character sequence represented by the argument string. The result is
+        a negative integer if this <code>String</code> object
+        lexicographically precedes the argument string. The result is a
+        positive integer if this <code>String</code> object lexicographically
+        follows the argument string. The result is zero if the strings
+        are equal; <code>compareTo</code> returns <code>0</code> exactly when
+        the <A HREF="../../java/lang/String.html#equals(java.lang.Object)"><CODE>equals(Object)</CODE></A> method would return <code>true</code>.
+        <p>
+            This is the definition of lexicographic ordering. If two strings are
+            different, then either they have different characters at some index
+            that is a valid index for both strings, or their lengths are different,
+            or both. If they have different characters at one or more index
+            positions, let <i>k</i> be the smallest such index; then the string
+            whose character at position <i>k</i> has the smaller value, as
+            determined by using the &lt; operator, lexicographically precedes the
+            other string. In this case, <code>compareTo</code> returns the
+            difference of the two character values at position <code>k</code> in
+            the two string -- that is, the value:
+        <blockquote><pre>
+ this.charAt(k)-anotherString.charAt(k)
+ </pre></blockquote>
+        If there is no index position at which they differ, then the shorter
+        string lexicographically precedes the longer string. In this case,
+        <code>compareTo</code> returns the difference of the lengths of the
+        strings -- that is, the value:
+        <blockquote><pre>
+ this.length()-anotherString.length()
+ </pre></blockquote>
+        <P>
+    <DD><DL>
+        <DT><B>Specified by:</B><DD><CODE><A HREF="../../java/lang/Comparable.html#compareTo(T)">compareTo</A></CODE> in interface <CODE><A HREF="../../java/lang/Comparable.html" title="interface in java.lang">Comparable</A>&lt;<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&gt;</CODE></DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>anotherString</CODE> - the <code>String</code> to be compared.
+        <DT><B>Returns:</B><DD>the value <code>0</code> if the argument string is equal to
+        this string; a value less than <code>0</code> if this string
+        is lexicographically less than the string argument; and a
+        value greater than <code>0</code> if this string is
+        lexicographically greater than the string argument.</DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="compareToIgnoreCase(java.lang.String)"><!-- --></A><H3>
+    compareToIgnoreCase</H3>
+<PRE>
+public int <B>compareToIgnoreCase</B>(<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;str)</PRE>
+<DL>
+    <DD>Compares two strings lexicographically, ignoring case
+        differences. This method returns an integer whose sign is that of
+        calling <code>compareTo</code> with normalized versions of the strings
+        where case differences have been eliminated by calling
+        <code>Character.toLowerCase(Character.toUpperCase(character))</code> on
+        each character.
+        <p>
+            Note that this method does <em>not</em> take locale into account,
+            and will result in an unsatisfactory ordering for certain locales.
+            The java.text package provides <em>collators</em> to allow
+            locale-sensitive ordering.
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>str</CODE> - the <code>String</code> to be compared.
+        <DT><B>Returns:</B><DD>a negative integer, zero, or a positive integer as the
+        specified String is greater than, equal to, or less
+        than this String, ignoring case considerations.<DT><B>Since:</B></DT>
+        <DD>1.2</DD>
+        <DT><B>See Also:</B><DD><A HREF="../../java/text/Collator.html#compare(java.lang.String, java.lang.String)"><CODE>Collator.compare(String, String)</CODE></A></DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="regionMatches(int, java.lang.String, int, int)"><!-- --></A><H3>
+    regionMatches</H3>
+<PRE>
+public boolean <B>regionMatches</B>(int&nbsp;toffset,
+                             <A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;other,
+                             int&nbsp;ooffset,
+                             int&nbsp;len)</PRE>
+<DL>
+    <DD>Tests if two string regions are equal.
+        <p>
+            A substring of this <tt>String</tt> object is compared to a substring
+            of the argument other. The result is true if these substrings
+            represent identical character sequences. The substring of this
+            <tt>String</tt> object to be compared begins at index <tt>toffset</tt>
+            and has length <tt>len</tt>. The substring of other to be compared
+            begins at index <tt>ooffset</tt> and has length <tt>len</tt>. The
+            result is <tt>false</tt> if and only if at least one of the following
+            is true:
+        <ul><li><tt>toffset</tt> is negative.
+            <li><tt>ooffset</tt> is negative.
+            <li><tt>toffset+len</tt> is greater than the length of this
+                <tt>String</tt> object.
+            <li><tt>ooffset+len</tt> is greater than the length of the other
+                argument.
+            <li>There is some nonnegative integer <i>k</i> less than <tt>len</tt>
+                such that:
+                <tt>this.charAt(toffset+<i>k</i>)&nbsp;!=&nbsp;other.charAt(ooffset+<i>k</i>)</tt>
+        </ul>
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>toffset</CODE> - the starting offset of the subregion in this string.<DD><CODE>other</CODE> - the string argument.<DD><CODE>ooffset</CODE> - the starting offset of the subregion in the string
+        argument.<DD><CODE>len</CODE> - the number of characters to compare.
+        <DT><B>Returns:</B><DD><code>true</code> if the specified subregion of this string
+        exactly matches the specified subregion of the string argument;
+        <code>false</code> otherwise.</DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="regionMatches(boolean, int, java.lang.String, int, int)"><!-- --></A><H3>
+    regionMatches</H3>
+<PRE>
+public boolean <B>regionMatches</B>(boolean&nbsp;ignoreCase,
+                             int&nbsp;toffset,
+                             <A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;other,
+                             int&nbsp;ooffset,
+                             int&nbsp;len)</PRE>
+<DL>
+    <DD>Tests if two string regions are equal.
+        <p>
+            A substring of this <tt>String</tt> object is compared to a substring
+            of the argument <tt>other</tt>. The result is <tt>true</tt> if these
+            substrings represent character sequences that are the same, ignoring
+            case if and only if <tt>ignoreCase</tt> is true. The substring of
+            this <tt>String</tt> object to be compared begins at index
+            <tt>toffset</tt> and has length <tt>len</tt>. The substring of
+            <tt>other</tt> to be compared begins at index <tt>ooffset</tt> and
+            has length <tt>len</tt>. The result is <tt>false</tt> if and only if
+            at least one of the following is true:
+        <ul><li><tt>toffset</tt> is negative.
+            <li><tt>ooffset</tt> is negative.
+            <li><tt>toffset+len</tt> is greater than the length of this
+                <tt>String</tt> object.
+            <li><tt>ooffset+len</tt> is greater than the length of the other
+                argument.
+            <li><tt>ignoreCase</tt> is <tt>false</tt> and there is some nonnegative
+                integer <i>k</i> less than <tt>len</tt> such that:
+                <blockquote><pre>
+ this.charAt(toffset+k) != other.charAt(ooffset+k)
+ </pre></blockquote>
+            <li><tt>ignoreCase</tt> is <tt>true</tt> and there is some nonnegative
+                integer <i>k</i> less than <tt>len</tt> such that:
+                <blockquote><pre>
+ Character.toLowerCase(this.charAt(toffset+k)) !=
+               Character.toLowerCase(other.charAt(ooffset+k))
+ </pre></blockquote>
+                and:
+                <blockquote><pre>
+ Character.toUpperCase(this.charAt(toffset+k)) !=
+         Character.toUpperCase(other.charAt(ooffset+k))
+ </pre></blockquote>
+        </ul>
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>ignoreCase</CODE> - if <code>true</code>, ignore case when comparing
+        characters.<DD><CODE>toffset</CODE> - the starting offset of the subregion in this
+        string.<DD><CODE>other</CODE> - the string argument.<DD><CODE>ooffset</CODE> - the starting offset of the subregion in the string
+        argument.<DD><CODE>len</CODE> - the number of characters to compare.
+        <DT><B>Returns:</B><DD><code>true</code> if the specified subregion of this string
+        matches the specified subregion of the string argument;
+        <code>false</code> otherwise. Whether the matching is exact
+        or case insensitive depends on the <code>ignoreCase</code>
+        argument.</DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="startsWith(java.lang.String, int)"><!-- --></A><H3>
+    startsWith</H3>
+<PRE>
+public boolean <B>startsWith</B>(<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;prefix,
+                          int&nbsp;toffset)</PRE>
+<DL>
+    <DD>Tests if the substring of this string beginning at the
+        specified index starts with the specified prefix.
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>prefix</CODE> - the prefix.<DD><CODE>toffset</CODE> - where to begin looking in this string.
+        <DT><B>Returns:</B><DD><code>true</code> if the character sequence represented by the
+        argument is a prefix of the substring of this object starting
+        at index <code>toffset</code>; <code>false</code> otherwise.
+        The result is <code>false</code> if <code>toffset</code> is
+        negative or greater than the length of this
+        <code>String</code> object; otherwise the result is the same
+        as the result of the expression
+          <pre>
+          this.substring(toffset).startsWith(prefix)
+          </pre></DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="startsWith(java.lang.String)"><!-- --></A><H3>
+    startsWith</H3>
+<PRE>
+public boolean <B>startsWith</B>(<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;prefix)</PRE>
+<DL>
+    <DD>Tests if this string starts with the specified prefix.
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>prefix</CODE> - the prefix.
+        <DT><B>Returns:</B><DD><code>true</code> if the character sequence represented by the
+        argument is a prefix of the character sequence represented by
+        this string; <code>false</code> otherwise.
+        Note also that <code>true</code> will be returned if the
+        argument is an empty string or is equal to this
+        <code>String</code> object as determined by the
+        <A HREF="../../java/lang/String.html#equals(java.lang.Object)"><CODE>equals(Object)</CODE></A> method.<DT><B>Since:</B></DT>
+        <DD>1. 0</DD>
+    </DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="endsWith(java.lang.String)"><!-- --></A><H3>
+    endsWith</H3>
+<PRE>
+public boolean <B>endsWith</B>(<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;suffix)</PRE>
+<DL>
+    <DD>Tests if this string ends with the specified suffix.
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>suffix</CODE> - the suffix.
+        <DT><B>Returns:</B><DD><code>true</code> if the character sequence represented by the
+        argument is a suffix of the character sequence represented by
+        this object; <code>false</code> otherwise. Note that the
+        result will be <code>true</code> if the argument is the
+        empty string or is equal to this <code>String</code> object
+        as determined by the <A HREF="../../java/lang/String.html#equals(java.lang.Object)"><CODE>equals(Object)</CODE></A> method.</DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="hashCode()"><!-- --></A><H3>
+    hashCode</H3>
+<PRE>
+public int <B>hashCode</B>()</PRE>
+<DL>
+    <DD>Returns a hash code for this string. The hash code for a
+        <code>String</code> object is computed as
+        <blockquote><pre>
+ s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
+ </pre></blockquote>
+        using <code>int</code> arithmetic, where <code>s[i]</code> is the
+        <i>i</i>th character of the string, <code>n</code> is the length of
+        the string, and <code>^</code> indicates exponentiation.
+        (The hash value of the empty string is zero.)
+        <P>
+    <DD><DL>
+        <DT><B>Overrides:</B><DD><CODE><A HREF="../../java/lang/Object.html#hashCode()">hashCode</A></CODE> in class <CODE><A HREF="../../java/lang/Object.html" title="class in java.lang">Object</A></CODE></DL>
+    </DD>
+    <DD><DL>
+
+        <DT><B>Returns:</B><DD>a hash code value for this object.<DT><B>See Also:</B><DD><A HREF="../../java/lang/Object.html#equals(java.lang.Object)"><CODE>Object.equals(java.lang.Object)</CODE></A>,
+        <A HREF="../../java/util/Hashtable.html" title="class in java.util"><CODE>Hashtable</CODE></A></DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="indexOf(int)"><!-- --></A><H3>
+    indexOf</H3>
+<PRE>
+public int <B>indexOf</B>(int&nbsp;ch)</PRE>
+<DL>
+    <DD>Returns the index within this string of the first occurrence of
+        the specified character. If a character with value
+        <code>ch</code> occurs in the character sequence represented by
+        this <code>String</code> object, then the index (in Unicode
+        code units) of the first such occurrence is returned. For
+        values of <code>ch</code> in the range from 0 to 0xFFFF
+        (inclusive), this is the smallest value <i>k</i> such that:
+        <blockquote><pre>
+ this.charAt(<i>k</i>) == ch
+ </pre></blockquote>
+        is true. For other values of <code>ch</code>, it is the
+        smallest value <i>k</i> such that:
+        <blockquote><pre>
+ this.codePointAt(<i>k</i>) == ch
+ </pre></blockquote>
+        is true. In either case, if no such character occurs in this
+        string, then <code>-1</code> is returned.
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>ch</CODE> - a character (Unicode code point).
+        <DT><B>Returns:</B><DD>the index of the first occurrence of the character in the
+        character sequence represented by this object, or
+        <code>-1</code> if the character does not occur.</DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="indexOf(int, int)"><!-- --></A><H3>
+    indexOf</H3>
+<PRE>
+public int <B>indexOf</B>(int&nbsp;ch,
+                   int&nbsp;fromIndex)</PRE>
+<DL>
+    <DD>Returns the index within this string of the first occurrence of the
+        specified character, starting the search at the specified index.
+        <p>
+            If a character with value <code>ch</code> occurs in the
+            character sequence represented by this <code>String</code>
+            object at an index no smaller than <code>fromIndex</code>, then
+            the index of the first such occurrence is returned. For values
+            of <code>ch</code> in the range from 0 to 0xFFFF (inclusive),
+            this is the smallest value <i>k</i> such that:
+        <blockquote><pre>
+ (this.charAt(<i>k</i>) == ch) && (<i>k</i> &gt;= fromIndex)
+ </pre></blockquote>
+        is true. For other values of <code>ch</code>, it is the
+        smallest value <i>k</i> such that:
+        <blockquote><pre>
+ (this.codePointAt(<i>k</i>) == ch) && (<i>k</i> &gt;= fromIndex)
+ </pre></blockquote>
+        is true. In either case, if no such character occurs in this
+        string at or after position <code>fromIndex</code>, then
+        <code>-1</code> is returned.
+
+        <p>
+            There is no restriction on the value of <code>fromIndex</code>. If it
+            is negative, it has the same effect as if it were zero: this entire
+            string may be searched. If it is greater than the length of this
+            string, it has the same effect as if it were equal to the length of
+            this string: <code>-1</code> is returned.
+
+        <p>All indices are specified in <code>char</code> values
+            (Unicode code units).
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>ch</CODE> - a character (Unicode code point).<DD><CODE>fromIndex</CODE> - the index to start the search from.
+        <DT><B>Returns:</B><DD>the index of the first occurrence of the character in the
+        character sequence represented by this object that is greater
+        than or equal to <code>fromIndex</code>, or <code>-1</code>
+        if the character does not occur.</DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="lastIndexOf(int)"><!-- --></A><H3>
+    lastIndexOf</H3>
+<PRE>
+public int <B>lastIndexOf</B>(int&nbsp;ch)</PRE>
+<DL>
+    <DD>Returns the index within this string of the last occurrence of
+        the specified character. For values of <code>ch</code> in the
+        range from 0 to 0xFFFF (inclusive), the index (in Unicode code
+        units) returned is the largest value <i>k</i> such that:
+        <blockquote><pre>
+ this.charAt(<i>k</i>) == ch
+ </pre></blockquote>
+        is true. For other values of <code>ch</code>, it is the
+        largest value <i>k</i> such that:
+        <blockquote><pre>
+ this.codePointAt(<i>k</i>) == ch
+ </pre></blockquote>
+        is true.  In either case, if no such character occurs in this
+        string, then <code>-1</code> is returned.  The
+        <code>String</code> is searched backwards starting at the last
+        character.
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>ch</CODE> - a character (Unicode code point).
+        <DT><B>Returns:</B><DD>the index of the last occurrence of the character in the
+        character sequence represented by this object, or
+        <code>-1</code> if the character does not occur.</DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="lastIndexOf(int, int)"><!-- --></A><H3>
+    lastIndexOf</H3>
+<PRE>
+public int <B>lastIndexOf</B>(int&nbsp;ch,
+                       int&nbsp;fromIndex)</PRE>
+<DL>
+    <DD>Returns the index within this string of the last occurrence of
+        the specified character, searching backward starting at the
+        specified index. For values of <code>ch</code> in the range
+        from 0 to 0xFFFF (inclusive), the index returned is the largest
+        value <i>k</i> such that:
+        <blockquote><pre>
+ (this.charAt(<i>k</i>) == ch) && (<i>k</i> &lt;= fromIndex)
+ </pre></blockquote>
+        is true. For other values of <code>ch</code>, it is the
+        largest value <i>k</i> such that:
+        <blockquote><pre>
+ (this.codePointAt(<i>k</i>) == ch) && (<i>k</i> &lt;= fromIndex)
+ </pre></blockquote>
+        is true. In either case, if no such character occurs in this
+        string at or before position <code>fromIndex</code>, then
+        <code>-1</code> is returned.
+
+        <p>All indices are specified in <code>char</code> values
+            (Unicode code units).
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>ch</CODE> - a character (Unicode code point).<DD><CODE>fromIndex</CODE> - the index to start the search from. There is no
+        restriction on the value of <code>fromIndex</code>. If it is
+        greater than or equal to the length of this string, it has
+        the same effect as if it were equal to one less than the
+        length of this string: this entire string may be searched.
+        If it is negative, it has the same effect as if it were -1:
+        -1 is returned.
+        <DT><B>Returns:</B><DD>the index of the last occurrence of the character in the
+        character sequence represented by this object that is less
+        than or equal to <code>fromIndex</code>, or <code>-1</code>
+        if the character does not occur before that point.</DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="indexOf(java.lang.String)"><!-- --></A><H3>
+    indexOf</H3>
+<PRE>
+public int <B>indexOf</B>(<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;str)</PRE>
+<DL>
+    <DD>Returns the index within this string of the first occurrence of the
+        specified substring. The integer returned is the smallest value
+        <i>k</i> such that:
+        <blockquote><pre>
+ this.startsWith(str, <i>k</i>)
+ </pre></blockquote>
+        is <code>true</code>.
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>str</CODE> - any string.
+        <DT><B>Returns:</B><DD>if the string argument occurs as a substring within this
+        object, then the index of the first character of the first
+        such substring is returned; if it does not occur as a
+        substring, <code>-1</code> is returned.</DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="indexOf(java.lang.String, int)"><!-- --></A><H3>
+    indexOf</H3>
+<PRE>
+public int <B>indexOf</B>(<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;str,
+                   int&nbsp;fromIndex)</PRE>
+<DL>
+    <DD>Returns the index within this string of the first occurrence of the
+        specified substring, starting at the specified index.  The integer
+        returned is the smallest value <tt>k</tt> for which:
+        <blockquote><pre>
+     k &gt;= Math.min(fromIndex, this.length()) && this.startsWith(str, k)
+ </pre></blockquote>
+        If no such value of <i>k</i> exists, then -1 is returned.
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>str</CODE> - the substring for which to search.<DD><CODE>fromIndex</CODE> - the index from which to start the search.
+        <DT><B>Returns:</B><DD>the index within this string of the first occurrence of the
+        specified substring, starting at the specified index.</DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="lastIndexOf(java.lang.String)"><!-- --></A><H3>
+    lastIndexOf</H3>
+<PRE>
+public int <B>lastIndexOf</B>(<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;str)</PRE>
+<DL>
+    <DD>Returns the index within this string of the rightmost occurrence
+        of the specified substring.  The rightmost empty string "" is
+        considered to occur at the index value <code>this.length()</code>.
+        The returned index is the largest value <i>k</i> such that
+        <blockquote><pre>
+ this.startsWith(str, k)
+ </pre></blockquote>
+        is true.
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>str</CODE> - the substring to search for.
+        <DT><B>Returns:</B><DD>if the string argument occurs one or more times as a substring
+        within this object, then the index of the first character of
+        the last such substring is returned. If it does not occur as
+        a substring, <code>-1</code> is returned.</DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="lastIndexOf(java.lang.String, int)"><!-- --></A><H3>
+    lastIndexOf</H3>
+<PRE>
+public int <B>lastIndexOf</B>(<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;str,
+                       int&nbsp;fromIndex)</PRE>
+<DL>
+    <DD>Returns the index within this string of the last occurrence of the
+        specified substring, searching backward starting at the specified index.
+        The integer returned is the largest value <i>k</i> such that:
+        <blockquote><pre>
+     k &lt;= Math.min(fromIndex, this.length()) && this.startsWith(str, k)
+ </pre></blockquote>
+        If no such value of <i>k</i> exists, then -1 is returned.
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>str</CODE> - the substring to search for.<DD><CODE>fromIndex</CODE> - the index to start the search from.
+        <DT><B>Returns:</B><DD>the index within this string of the last occurrence of the
+        specified substring.</DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="substring(int)"><!-- --></A><H3>
+    substring</H3>
+<PRE>
+public <A HREF="../../java/lang/String.html" title="class in java.lang">String</A> <B>substring</B>(int&nbsp;beginIndex)</PRE>
+<DL>
+    <DD>Returns a new string that is a substring of this string. The
+        substring begins with the character at the specified index and
+        extends to the end of this string. <p>
+            Examples:
+        <blockquote><pre>
+ "unhappy".substring(2) returns "happy"
+ "Harbison".substring(3) returns "bison"
+ "emptiness".substring(9) returns "" (an empty string)
+ </pre></blockquote>
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>beginIndex</CODE> - the beginning index, inclusive.
+        <DT><B>Returns:</B><DD>the specified substring.
+        <DT><B>Throws:</B>
+        <DD><CODE><A HREF="../../java/lang/IndexOutOfBoundsException.html" title="class in java.lang">IndexOutOfBoundsException</A></CODE> - if
+            <code>beginIndex</code> is negative or larger than the
+            length of this <code>String</code> object.</DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="substring(int, int)"><!-- --></A><H3>
+    substring</H3>
+<PRE>
+public <A HREF="../../java/lang/String.html" title="class in java.lang">String</A> <B>substring</B>(int&nbsp;beginIndex,
+                        int&nbsp;endIndex)</PRE>
+<DL>
+    <DD>Returns a new string that is a substring of this string. The
+        substring begins at the specified <code>beginIndex</code> and
+        extends to the character at index <code>endIndex - 1</code>.
+        Thus the length of the substring is <code>endIndex-beginIndex</code>.
+        <p>
+            Examples:
+        <blockquote><pre>
+ "hamburger".substring(4, 8) returns "urge"
+ "smiles".substring(1, 5) returns "mile"
+ </pre></blockquote>
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>beginIndex</CODE> - the beginning index, inclusive.<DD><CODE>endIndex</CODE> - the ending index, exclusive.
+        <DT><B>Returns:</B><DD>the specified substring.
+        <DT><B>Throws:</B>
+        <DD><CODE><A HREF="../../java/lang/IndexOutOfBoundsException.html" title="class in java.lang">IndexOutOfBoundsException</A></CODE> - if the
+            <code>beginIndex</code> is negative, or
+            <code>endIndex</code> is larger than the length of
+            this <code>String</code> object, or
+            <code>beginIndex</code> is larger than
+            <code>endIndex</code>.</DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="subSequence(int, int)"><!-- --></A><H3>
+    subSequence</H3>
+<PRE>
+public <A HREF="../../java/lang/CharSequence.html" title="interface in java.lang">CharSequence</A> <B>subSequence</B>(int&nbsp;beginIndex,
+                                int&nbsp;endIndex)</PRE>
+<DL>
+    <DD>Returns a new character sequence that is a subsequence of this sequence.
+
+        <p> An invocation of this method of the form
+
+        <blockquote><pre>
+ str.subSequence(begin,&nbsp;end)</pre></blockquote>
+
+        behaves in exactly the same way as the invocation
+
+        <blockquote><pre>
+ str.substring(begin,&nbsp;end)</pre></blockquote>
+
+        This method is defined so that the <tt>String</tt> class can implement
+        the <A HREF="../../java/lang/CharSequence.html" title="interface in java.lang"><CODE>CharSequence</CODE></A> interface. </p>
+        <P>
+    <DD><DL>
+        <DT><B>Specified by:</B><DD><CODE><A HREF="../../java/lang/CharSequence.html#subSequence(int, int)">subSequence</A></CODE> in interface <CODE><A HREF="../../java/lang/CharSequence.html" title="interface in java.lang">CharSequence</A></CODE></DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>beginIndex</CODE> - the begin index, inclusive.<DD><CODE>endIndex</CODE> - the end index, exclusive.
+        <DT><B>Returns:</B><DD>the specified subsequence.
+        <DT><B>Throws:</B>
+        <DD><CODE><A HREF="../../java/lang/IndexOutOfBoundsException.html" title="class in java.lang">IndexOutOfBoundsException</A></CODE> - if <tt>beginIndex</tt> or <tt>endIndex</tt> are negative,
+            if <tt>endIndex</tt> is greater than <tt>length()</tt>,
+            or if <tt>beginIndex</tt> is greater than <tt>startIndex</tt><DT><B>Since:</B></DT>
+        <DD>1.4</DD>
+    </DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="concat(java.lang.String)"><!-- --></A><H3>
+    concat</H3>
+<PRE>
+public <A HREF="../../java/lang/String.html" title="class in java.lang">String</A> <B>concat</B>(<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;str)</PRE>
+<DL>
+    <DD>Concatenates the specified string to the end of this string.
+        <p>
+            If the length of the argument string is <code>0</code>, then this
+            <code>String</code> object is returned. Otherwise, a new
+            <code>String</code> object is created, representing a character
+            sequence that is the concatenation of the character sequence
+            represented by this <code>String</code> object and the character
+            sequence represented by the argument string.<p>
+            Examples:
+        <blockquote><pre>
+ "cares".concat("s") returns "caress"
+ "to".concat("get").concat("her") returns "together"
+ </pre></blockquote>
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>str</CODE> - the <code>String</code> that is concatenated to the end
+        of this <code>String</code>.
+        <DT><B>Returns:</B><DD>a string that represents the concatenation of this object's
+        characters followed by the string argument's characters.</DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="replace(char, char)"><!-- --></A><H3>
+    replace</H3>
+<PRE>
+public <A HREF="../../java/lang/String.html" title="class in java.lang">String</A> <B>replace</B>(char&nbsp;oldChar,
+                      char&nbsp;newChar)</PRE>
+<DL>
+    <DD>Returns a new string resulting from replacing all occurrences of
+        <code>oldChar</code> in this string with <code>newChar</code>.
+        <p>
+            If the character <code>oldChar</code> does not occur in the
+            character sequence represented by this <code>String</code> object,
+            then a reference to this <code>String</code> object is returned.
+            Otherwise, a new <code>String</code> object is created that
+            represents a character sequence identical to the character sequence
+            represented by this <code>String</code> object, except that every
+            occurrence of <code>oldChar</code> is replaced by an occurrence
+            of <code>newChar</code>.
+        <p>
+            Examples:
+        <blockquote><pre>
+ "mesquite in your cellar".replace('e', 'o')
+         returns "mosquito in your collar"
+ "the war of baronets".replace('r', 'y')
+         returns "the way of bayonets"
+ "sparring with a purple porpoise".replace('p', 't')
+         returns "starring with a turtle tortoise"
+ "JonL".replace('q', 'x') returns "JonL" (no change)
+ </pre></blockquote>
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>oldChar</CODE> - the old character.<DD><CODE>newChar</CODE> - the new character.
+        <DT><B>Returns:</B><DD>a string derived from this string by replacing every
+        occurrence of <code>oldChar</code> with <code>newChar</code>.</DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="matches(java.lang.String)"><!-- --></A><H3>
+    matches</H3>
+<PRE>
+public boolean <B>matches</B>(<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;regex)</PRE>
+<DL>
+    <DD>Tells whether or not this string matches the given <a
+            href="../util/regex/Pattern.html#sum">regular expression</a>.
+
+        <p> An invocation of this method of the form
+            <i>str</i><tt>.matches(</tt><i>regex</i><tt>)</tt> yields exactly the
+            same result as the expression
+
+        <blockquote><tt> <A HREF="../../java/util/regex/Pattern.html" title="class in java.util.regex"><CODE>Pattern</CODE></A>.<A HREF="../../java/util/regex/Pattern.html#matches(java.lang.String, java.lang.CharSequence)"><CODE>matches</CODE></A>(</tt><i>regex</i><tt>,</tt> <i>str</i><tt>)</tt></blockquote>
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>regex</CODE> - the regular expression to which this string is to be matched
+        <DT><B>Returns:</B><DD><tt>true</tt> if, and only if, this string matches the
+        given regular expression
+        <DT><B>Throws:</B>
+        <DD><CODE><A HREF="../../java/util/regex/PatternSyntaxException.html" title="class in java.util.regex">PatternSyntaxException</A></CODE> - if the regular expression's syntax is invalid<DT><B>Since:</B></DT>
+        <DD>1.4</DD>
+        <DT><B>See Also:</B><DD><A HREF="../../java/util/regex/Pattern.html" title="class in java.util.regex"><CODE>Pattern</CODE></A></DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="contains(java.lang.CharSequence)"><!-- --></A><H3>
+    contains</H3>
+<PRE>
+public boolean <B>contains</B>(<A HREF="../../java/lang/CharSequence.html" title="interface in java.lang">CharSequence</A>&nbsp;s)</PRE>
+<DL>
+    <DD>Returns true if and only if this string contains the specified
+        sequence of char values.
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>s</CODE> - the sequence to search for
+        <DT><B>Returns:</B><DD>true if this string contains <code>s</code>, false otherwise
+        <DT><B>Throws:</B>
+        <DD><CODE><A HREF="../../java/lang/NullPointerException.html" title="class in java.lang">NullPointerException</A></CODE> - if <code>s</code> is <code>null</code><DT><B>Since:</B></DT>
+        <DD>1.5</DD>
+    </DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="replaceFirst(java.lang.String, java.lang.String)"><!-- --></A><H3>
+    replaceFirst</H3>
+<PRE>
+public <A HREF="../../java/lang/String.html" title="class in java.lang">String</A> <B>replaceFirst</B>(<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;regex,
+                           <A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;replacement)</PRE>
+<DL>
+    <DD>Replaces the first substring of this string that matches the given <a
+            href="../util/regex/Pattern.html#sum">regular expression</a> with the
+        given replacement.
+
+        <p> An invocation of this method of the form
+            <i>str</i><tt>.replaceFirst(</tt><i>regex</i><tt>,</tt> <i>repl</i><tt>)</tt>
+            yields exactly the same result as the expression
+
+        <blockquote><tt>
+            <A HREF="../../java/util/regex/Pattern.html" title="class in java.util.regex"><CODE>Pattern</CODE></A>.<A HREF="../../java/util/regex/Pattern.html#compile(java.lang.String)"><CODE>compile</CODE></A>(</tt><i>regex</i><tt>).<A HREF="../../java/util/regex/Pattern.html#matcher(java.lang.CharSequence)"><CODE>matcher</CODE></A>(</tt><i>str</i><tt>).<A HREF="../../java/util/regex/Matcher.html#replaceFirst(java.lang.String)"><CODE>replaceFirst</CODE></A>(</tt><i>repl</i><tt>)</tt></blockquote>
+
+        <p>
+            Note that backslashes (<tt>\</tt>) and dollar signs (<tt>$</tt>) in the
+            replacement string may cause the results to be different than if it were
+            being treated as a literal replacement string; see
+            <A HREF="../../java/util/regex/Matcher.html#replaceFirst(java.lang.String)"><CODE>Matcher.replaceFirst(java.lang.String)</CODE></A>.
+            Use <A HREF="../../java/util/regex/Matcher.html#quoteReplacement(java.lang.String)"><CODE>Matcher.quoteReplacement(java.lang.String)</CODE></A> to suppress the special
+            meaning of these characters, if desired.
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>regex</CODE> - the regular expression to which this string is to be matched<DD><CODE>replacement</CODE> - the string to be substituted for the first match
+        <DT><B>Returns:</B><DD>The resulting <tt>String</tt>
+        <DT><B>Throws:</B>
+        <DD><CODE><A HREF="../../java/util/regex/PatternSyntaxException.html" title="class in java.util.regex">PatternSyntaxException</A></CODE> - if the regular expression's syntax is invalid<DT><B>Since:</B></DT>
+        <DD>1.4</DD>
+        <DT><B>See Also:</B><DD><A HREF="../../java/util/regex/Pattern.html" title="class in java.util.regex"><CODE>Pattern</CODE></A></DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="replaceAll(java.lang.String, java.lang.String)"><!-- --></A><H3>
+    replaceAll</H3>
+<PRE>
+public <A HREF="../../java/lang/String.html" title="class in java.lang">String</A> <B>replaceAll</B>(<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;regex,
+                         <A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;replacement)</PRE>
+<DL>
+    <DD>Replaces each substring of this string that matches the given <a
+            href="../util/regex/Pattern.html#sum">regular expression</a> with the
+        given replacement.
+
+        <p> An invocation of this method of the form
+            <i>str</i><tt>.replaceAll(</tt><i>regex</i><tt>,</tt> <i>repl</i><tt>)</tt>
+            yields exactly the same result as the expression
+
+        <blockquote><tt>
+            <A HREF="../../java/util/regex/Pattern.html" title="class in java.util.regex"><CODE>Pattern</CODE></A>.<A HREF="../../java/util/regex/Pattern.html#compile(java.lang.String)"><CODE>compile</CODE></A>(</tt><i>regex</i><tt>).<A HREF="../../java/util/regex/Pattern.html#matcher(java.lang.CharSequence)"><CODE>matcher</CODE></A>(</tt><i>str</i><tt>).<A HREF="../../java/util/regex/Matcher.html#replaceAll(java.lang.String)"><CODE>replaceAll</CODE></A>(</tt><i>repl</i><tt>)</tt></blockquote>
+
+        <p>
+            Note that backslashes (<tt>\</tt>) and dollar signs (<tt>$</tt>) in the
+            replacement string may cause the results to be different than if it were
+            being treated as a literal replacement string; see
+            <A HREF="../../java/util/regex/Matcher.html#replaceAll(java.lang.String)"><CODE>Matcher.replaceAll</CODE></A>.
+            Use <A HREF="../../java/util/regex/Matcher.html#quoteReplacement(java.lang.String)"><CODE>Matcher.quoteReplacement(java.lang.String)</CODE></A> to suppress the special
+            meaning of these characters, if desired.
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>regex</CODE> - the regular expression to which this string is to be matched<DD><CODE>replacement</CODE> - the string to be substituted for each match
+        <DT><B>Returns:</B><DD>The resulting <tt>String</tt>
+        <DT><B>Throws:</B>
+        <DD><CODE><A HREF="../../java/util/regex/PatternSyntaxException.html" title="class in java.util.regex">PatternSyntaxException</A></CODE> - if the regular expression's syntax is invalid<DT><B>Since:</B></DT>
+        <DD>1.4</DD>
+        <DT><B>See Also:</B><DD><A HREF="../../java/util/regex/Pattern.html" title="class in java.util.regex"><CODE>Pattern</CODE></A></DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="replace(java.lang.CharSequence, java.lang.CharSequence)"><!-- --></A><H3>
+    replace</H3>
+<PRE>
+public <A HREF="../../java/lang/String.html" title="class in java.lang">String</A> <B>replace</B>(<A HREF="../../java/lang/CharSequence.html" title="interface in java.lang">CharSequence</A>&nbsp;target,
+                      <A HREF="../../java/lang/CharSequence.html" title="interface in java.lang">CharSequence</A>&nbsp;replacement)</PRE>
+<DL>
+    <DD>Replaces each substring of this string that matches the literal target
+        sequence with the specified literal replacement sequence. The
+        replacement proceeds from the beginning of the string to the end, for
+        example, replacing "aa" with "b" in the string "aaa" will result in
+        "ba" rather than "ab".
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>target</CODE> - The sequence of char values to be replaced<DD><CODE>replacement</CODE> - The replacement sequence of char values
+        <DT><B>Returns:</B><DD>The resulting string
+        <DT><B>Throws:</B>
+        <DD><CODE><A HREF="../../java/lang/NullPointerException.html" title="class in java.lang">NullPointerException</A></CODE> - if <code>target</code> or
+            <code>replacement</code> is <code>null</code>.<DT><B>Since:</B></DT>
+        <DD>1.5</DD>
+    </DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="split(java.lang.String, int)"><!-- --></A><H3>
+    split</H3>
+<PRE>
+public <A HREF="../../java/lang/String.html" title="class in java.lang">String</A>[] <B>split</B>(<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;regex,
+                      int&nbsp;limit)</PRE>
+<DL>
+    <DD>Splits this string around matches of the given
+        <a href="../util/regex/Pattern.html#sum">regular expression</a>.
+
+        <p> The array returned by this method contains each substring of this
+            string that is terminated by another substring that matches the given
+            expression or is terminated by the end of the string.  The substrings in
+            the array are in the order in which they occur in this string.  If the
+            expression does not match any part of the input then the resulting array
+            has just one element, namely this string.
+
+        <p> The <tt>limit</tt> parameter controls the number of times the
+            pattern is applied and therefore affects the length of the resulting
+            array.  If the limit <i>n</i> is greater than zero then the pattern
+            will be applied at most <i>n</i>&nbsp;-&nbsp;1 times, the array's
+            length will be no greater than <i>n</i>, and the array's last entry
+            will contain all input beyond the last matched delimiter.  If <i>n</i>
+            is non-positive then the pattern will be applied as many times as
+            possible and the array can have any length.  If <i>n</i> is zero then
+            the pattern will be applied as many times as possible, the array can
+            have any length, and trailing empty strings will be discarded.
+
+        <p> The string <tt>"boo:and:foo"</tt>, for example, yields the
+            following results with these parameters:
+
+        <blockquote><table cellpadding=1 cellspacing=0 summary="Split example showing regex, limit, and result">
+            <tr>
+                <th>Regex</th>
+                <th>Limit</th>
+                <th>Result</th>
+            </tr>
+            <tr><td align=center>:</td>
+                <td align=center>2</td>
+                <td><tt>{ "boo", "and:foo" }</tt></td></tr>
+            <tr><td align=center>:</td>
+                <td align=center>5</td>
+                <td><tt>{ "boo", "and", "foo" }</tt></td></tr>
+            <tr><td align=center>:</td>
+                <td align=center>-2</td>
+                <td><tt>{ "boo", "and", "foo" }</tt></td></tr>
+            <tr><td align=center>o</td>
+                <td align=center>5</td>
+                <td><tt>{ "b", "", ":and:f", "", "" }</tt></td></tr>
+            <tr><td align=center>o</td>
+                <td align=center>-2</td>
+                <td><tt>{ "b", "", ":and:f", "", "" }</tt></td></tr>
+            <tr><td align=center>o</td>
+                <td align=center>0</td>
+                <td><tt>{ "b", "", ":and:f" }</tt></td></tr>
+        </table></blockquote>
+
+        <p> An invocation of this method of the form
+            <i>str.</i><tt>split(</tt><i>regex</i><tt>,</tt>&nbsp;<i>n</i><tt>)</tt>
+            yields the same result as the expression
+
+        <blockquote>
+            <A HREF="../../java/util/regex/Pattern.html" title="class in java.util.regex"><CODE>Pattern</CODE></A>.<A HREF="../../java/util/regex/Pattern.html#compile(java.lang.String)"><CODE>compile</CODE></A><tt>(</tt><i>regex</i><tt>)</tt>.<A HREF="../../java/util/regex/Pattern.html#split(java.lang.CharSequence, int)"><CODE>split</CODE></A><tt>(</tt><i>str</i><tt>,</tt>&nbsp;<i>n</i><tt>)</tt>
+        </blockquote>
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>regex</CODE> - the delimiting regular expression<DD><CODE>limit</CODE> - the result threshold, as described above
+        <DT><B>Returns:</B><DD>the array of strings computed by splitting this string
+        around matches of the given regular expression
+        <DT><B>Throws:</B>
+        <DD><CODE><A HREF="../../java/util/regex/PatternSyntaxException.html" title="class in java.util.regex">PatternSyntaxException</A></CODE> - if the regular expression's syntax is invalid<DT><B>Since:</B></DT>
+        <DD>1.4</DD>
+        <DT><B>See Also:</B><DD><A HREF="../../java/util/regex/Pattern.html" title="class in java.util.regex"><CODE>Pattern</CODE></A></DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="split(java.lang.String)"><!-- --></A><H3>
+    split</H3>
+<PRE>
+public <A HREF="../../java/lang/String.html" title="class in java.lang">String</A>[] <B>split</B>(<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;regex)</PRE>
+<DL>
+    <DD>Splits this string around matches of the given <a
+            href="../util/regex/Pattern.html#sum">regular expression</a>.
+
+        <p> This method works as if by invoking the two-argument <A HREF="../../java/lang/String.html#split(java.lang.String, int)"><CODE>split</CODE></A> method with the given expression and a limit
+            argument of zero.  Trailing empty strings are therefore not included in
+            the resulting array.
+
+        <p> The string <tt>"boo:and:foo"</tt>, for example, yields the following
+            results with these expressions:
+
+        <blockquote><table cellpadding=1 cellspacing=0 summary="Split examples showing regex and result">
+            <tr>
+                <th>Regex</th>
+                <th>Result</th>
+            </tr>
+            <tr><td align=center>:</td>
+                <td><tt>{ "boo", "and", "foo" }</tt></td></tr>
+            <tr><td align=center>o</td>
+                <td><tt>{ "b", "", ":and:f" }</tt></td></tr>
+        </table></blockquote>
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>regex</CODE> - the delimiting regular expression
+        <DT><B>Returns:</B><DD>the array of strings computed by splitting this string
+        around matches of the given regular expression
+        <DT><B>Throws:</B>
+        <DD><CODE><A HREF="../../java/util/regex/PatternSyntaxException.html" title="class in java.util.regex">PatternSyntaxException</A></CODE> - if the regular expression's syntax is invalid<DT><B>Since:</B></DT>
+        <DD>1.4</DD>
+        <DT><B>See Also:</B><DD><A HREF="../../java/util/regex/Pattern.html" title="class in java.util.regex"><CODE>Pattern</CODE></A></DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="toLowerCase(java.util.Locale)"><!-- --></A><H3>
+    toLowerCase</H3>
+<PRE>
+public <A HREF="../../java/lang/String.html" title="class in java.lang">String</A> <B>toLowerCase</B>(<A HREF="../../java/util/Locale.html" title="class in java.util">Locale</A>&nbsp;locale)</PRE>
+<DL>
+    <DD>Converts all of the characters in this <code>String</code> to lower
+        case using the rules of the given <code>Locale</code>.  Case mapping is based
+        on the Unicode Standard version specified by the <A HREF="../../java/lang/Character.html" title="class in java.lang"><CODE>Character</CODE></A>
+        class. Since case mappings are not always 1:1 char mappings, the resulting
+        <code>String</code> may be a different length than the original <code>String</code>.
+        <p>
+            Examples of lowercase  mappings are in the following table:
+        <table border="1" summary="Lowercase mapping examples showing language code of locale, upper case, lower case, and description">
+            <tr>
+                <th>Language Code of Locale</th>
+                <th>Upper Case</th>
+                <th>Lower Case</th>
+                <th>Description</th>
+            </tr>
+            <tr>
+                <td>tr (Turkish)</td>
+                <td>&#92;u0130</td>
+                <td>&#92;u0069</td>
+                <td>capital letter I with dot above -&gt; small letter i</td>
+            </tr>
+            <tr>
+                <td>tr (Turkish)</td>
+                <td>&#92;u0049</td>
+                <td>&#92;u0131</td>
+                <td>capital letter I -&gt; small letter dotless i </td>
+            </tr>
+            <tr>
+                <td>(all)</td>
+                <td>French Fries</td>
+                <td>french fries</td>
+                <td>lowercased all chars in String</td>
+            </tr>
+            <tr>
+                <td>(all)</td>
+                <td><img src="doc-files/capiota.gif" alt="capiota"><img src="doc-files/capchi.gif" alt="capchi">
+                    <img src="doc-files/captheta.gif" alt="captheta"><img src="doc-files/capupsil.gif" alt="capupsil">
+                    <img src="doc-files/capsigma.gif" alt="capsigma"></td>
+                <td><img src="doc-files/iota.gif" alt="iota"><img src="doc-files/chi.gif" alt="chi">
+                    <img src="doc-files/theta.gif" alt="theta"><img src="doc-files/upsilon.gif" alt="upsilon">
+                    <img src="doc-files/sigma1.gif" alt="sigma"></td>
+                <td>lowercased all chars in String</td>
+            </tr>
+        </table>
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>locale</CODE> - use the case transformation rules for this locale
+        <DT><B>Returns:</B><DD>the <code>String</code>, converted to lowercase.<DT><B>Since:</B></DT>
+        <DD>1.1</DD>
+        <DT><B>See Also:</B><DD><A HREF="../../java/lang/String.html#toLowerCase()"><CODE>toLowerCase()</CODE></A>,
+        <A HREF="../../java/lang/String.html#toUpperCase()"><CODE>toUpperCase()</CODE></A>,
+        <A HREF="../../java/lang/String.html#toUpperCase(java.util.Locale)"><CODE>toUpperCase(Locale)</CODE></A></DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="toLowerCase()"><!-- --></A><H3>
+    toLowerCase</H3>
+<PRE>
+public <A HREF="../../java/lang/String.html" title="class in java.lang">String</A> <B>toLowerCase</B>()</PRE>
+<DL>
+    <DD>Converts all of the characters in this <code>String</code> to lower
+        case using the rules of the default locale. This is equivalent to calling
+        <code>toLowerCase(Locale.getDefault())</code>.
+        <p>
+            <b>Note:</b> This method is locale sensitive, and may produce unexpected
+            results if used for strings that are intended to be interpreted locale
+            independently.
+            Examples are programming language identifiers, protocol keys, and HTML
+            tags.
+            For instance, <code>"TITLE".toLowerCase()</code> in a Turkish locale
+            returns <code>"t?tle"</code>, where '?' is the LATIN SMALL
+            LETTER DOTLESS I character.
+            To obtain correct results for locale insensitive strings, use
+            <code>toLowerCase(Locale.ENGLISH)</code>.
+        <p>
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+
+        <DT><B>Returns:</B><DD>the <code>String</code>, converted to lowercase.<DT><B>See Also:</B><DD><A HREF="../../java/lang/String.html#toLowerCase(java.util.Locale)"><CODE>toLowerCase(Locale)</CODE></A></DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="toUpperCase(java.util.Locale)"><!-- --></A><H3>
+    toUpperCase</H3>
+<PRE>
+public <A HREF="../../java/lang/String.html" title="class in java.lang">String</A> <B>toUpperCase</B>(<A HREF="../../java/util/Locale.html" title="class in java.util">Locale</A>&nbsp;locale)</PRE>
+<DL>
+    <DD>Converts all of the characters in this <code>String</code> to upper
+        case using the rules of the given <code>Locale</code>. Case mapping is based
+        on the Unicode Standard version specified by the <A HREF="../../java/lang/Character.html" title="class in java.lang"><CODE>Character</CODE></A>
+        class. Since case mappings are not always 1:1 char mappings, the resulting
+        <code>String</code> may be a different length than the original <code>String</code>.
+        <p>
+            Examples of locale-sensitive and 1:M case mappings are in the following table.
+        <p>
+        <table border="1" summary="Examples of locale-sensitive and 1:M case mappings. Shows Language code of locale, lower case, upper case, and description.">
+            <tr>
+                <th>Language Code of Locale</th>
+                <th>Lower Case</th>
+                <th>Upper Case</th>
+                <th>Description</th>
+            </tr>
+            <tr>
+                <td>tr (Turkish)</td>
+                <td>&#92;u0069</td>
+                <td>&#92;u0130</td>
+                <td>small letter i -&gt; capital letter I with dot above</td>
+            </tr>
+            <tr>
+                <td>tr (Turkish)</td>
+                <td>&#92;u0131</td>
+                <td>&#92;u0049</td>
+                <td>small letter dotless i -&gt; capital letter I</td>
+            </tr>
+            <tr>
+                <td>(all)</td>
+                <td>&#92;u00df</td>
+                <td>&#92;u0053 &#92;u0053</td>
+                <td>small letter sharp s -&gt; two letters: SS</td>
+            </tr>
+            <tr>
+                <td>(all)</td>
+                <td>Fahrvergn&uuml;gen</td>
+                <td>FAHRVERGN&Uuml;GEN</td>
+                <td></td>
+            </tr>
+        </table>
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>locale</CODE> - use the case transformation rules for this locale
+        <DT><B>Returns:</B><DD>the <code>String</code>, converted to uppercase.<DT><B>Since:</B></DT>
+        <DD>1.1</DD>
+        <DT><B>See Also:</B><DD><A HREF="../../java/lang/String.html#toUpperCase()"><CODE>toUpperCase()</CODE></A>,
+        <A HREF="../../java/lang/String.html#toLowerCase()"><CODE>toLowerCase()</CODE></A>,
+        <A HREF="../../java/lang/String.html#toLowerCase(java.util.Locale)"><CODE>toLowerCase(Locale)</CODE></A></DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="toUpperCase()"><!-- --></A><H3>
+    toUpperCase</H3>
+<PRE>
+public <A HREF="../../java/lang/String.html" title="class in java.lang">String</A> <B>toUpperCase</B>()</PRE>
+<DL>
+    <DD>Converts all of the characters in this <code>String</code> to upper
+        case using the rules of the default locale. This method is equivalent to
+        <code>toUpperCase(Locale.getDefault())</code>.
+        <p>
+            <b>Note:</b> This method is locale sensitive, and may produce unexpected
+            results if used for strings that are intended to be interpreted locale
+            independently.
+            Examples are programming language identifiers, protocol keys, and HTML
+            tags.
+            For instance, <code>"title".toUpperCase()</code> in a Turkish locale
+            returns <code>"T?TLE"</code>, where '?' is the LATIN CAPITAL
+            LETTER I WITH DOT ABOVE character.
+            To obtain correct results for locale insensitive strings, use
+            <code>toUpperCase(Locale.ENGLISH)</code>.
+        <p>
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+
+        <DT><B>Returns:</B><DD>the <code>String</code>, converted to uppercase.<DT><B>See Also:</B><DD><A HREF="../../java/lang/String.html#toUpperCase(java.util.Locale)"><CODE>toUpperCase(Locale)</CODE></A></DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="trim()"><!-- --></A><H3>
+    trim</H3>
+<PRE>
+public <A HREF="../../java/lang/String.html" title="class in java.lang">String</A> <B>trim</B>()</PRE>
+<DL>
+    <DD>Returns a copy of the string, with leading and trailing whitespace
+        omitted.
+        <p>
+            If this <code>String</code> object represents an empty character
+            sequence, or the first and last characters of character sequence
+            represented by this <code>String</code> object both have codes
+            greater than <code>'&#92;u0020'</code> (the space character), then a
+            reference to this <code>String</code> object is returned.
+        <p>
+            Otherwise, if there is no character with a code greater than
+            <code>'&#92;u0020'</code> in the string, then a new
+            <code>String</code> object representing an empty string is created
+            and returned.
+        <p>
+            Otherwise, let <i>k</i> be the index of the first character in the
+            string whose code is greater than <code>'&#92;u0020'</code>, and let
+            <i>m</i> be the index of the last character in the string whose code
+            is greater than <code>'&#92;u0020'</code>. A new <code>String</code>
+            object is created, representing the substring of this string that
+            begins with the character at index <i>k</i> and ends with the
+            character at index <i>m</i>-that is, the result of
+            <code>this.substring(<i>k</i>,&nbsp;<i>m</i>+1)</code>.
+        <p>
+            This method may be used to trim whitespace (as defined above) from
+            the beginning and end of a string.
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+
+        <DT><B>Returns:</B><DD>A copy of this string with leading and trailing white
+        space removed, or this string if it has no leading or
+        trailing white space.</DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+    toString</H3>
+<PRE>
+public <A HREF="../../java/lang/String.html" title="class in java.lang">String</A> <B>toString</B>()</PRE>
+<DL>
+    <DD>This object (which is already a string!) is itself returned.
+        <P>
+    <DD><DL>
+        <DT><B>Specified by:</B><DD><CODE><A HREF="../../java/lang/CharSequence.html#toString()">toString</A></CODE> in interface <CODE><A HREF="../../java/lang/CharSequence.html" title="interface in java.lang">CharSequence</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../java/lang/Object.html#toString()">toString</A></CODE> in class <CODE><A HREF="../../java/lang/Object.html" title="class in java.lang">Object</A></CODE></DL>
+    </DD>
+    <DD><DL>
+
+        <DT><B>Returns:</B><DD>the string itself.</DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="toCharArray()"><!-- --></A><H3>
+    toCharArray</H3>
+<PRE>
+public char[] <B>toCharArray</B>()</PRE>
+<DL>
+    <DD>Converts this string to a new character array.
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+
+        <DT><B>Returns:</B><DD>a newly allocated character array whose length is the length
+        of this string and whose contents are initialized to contain
+        the character sequence represented by this string.</DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="format(java.lang.String, java.lang.Object...)"><!-- --></A><H3>
+    format</H3>
+<PRE>
+public static <A HREF="../../java/lang/String.html" title="class in java.lang">String</A> <B>format</B>(<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;format,
+                            <A HREF="../../java/lang/Object.html" title="class in java.lang">Object</A>...&nbsp;args)</PRE>
+<DL>
+    <DD>Returns a formatted string using the specified format string and
+        arguments.
+
+        <p> The locale always used is the one returned by <A HREF="../../java/util/Locale.html#getDefault()"><CODE>Locale.getDefault()</CODE></A>.
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>format</CODE> - A <a href="../util/Formatter.html#syntax">format string</a><DD><CODE>args</CODE> - Arguments referenced by the format specifiers in the format
+        string.  If there are more arguments than format specifiers, the
+        extra arguments are ignored.  The number of arguments is
+        variable and may be zero.  The maximum number of arguments is
+        limited by the maximum dimension of a Java array as defined by
+        the <a href="http://java.sun.com/docs/books/vmspec/">Java
+            Virtual Machine Specification</a>.  The behaviour on a
+        <tt>null</tt> argument depends on the <a
+                href="../util/Formatter.html#syntax">conversion</a>.
+        <DT><B>Returns:</B><DD>A formatted string
+        <DT><B>Throws:</B>
+        <DD><CODE>IllegalFormatException</CODE> - If a format string contains an illegal syntax, a format
+            specifier that is incompatible with the given arguments,
+            insufficient arguments given the format string, or other
+            illegal conditions.  For specification of all possible
+            formatting errors, see the <a
+                    href="../util/Formatter.html#detail">Details</a> section of the
+            formatter class specification.
+        <DD><CODE><A HREF="../../java/lang/NullPointerException.html" title="class in java.lang">NullPointerException</A></CODE> - If the <tt>format</tt> is <tt>null</tt><DT><B>Since:</B></DT>
+        <DD>1.5</DD>
+        <DT><B>See Also:</B><DD><A HREF="../../java/util/Formatter.html" title="class in java.util"><CODE>Formatter</CODE></A></DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="format(java.util.Locale, java.lang.String, java.lang.Object...)"><!-- --></A><H3>
+    format</H3>
+<PRE>
+public static <A HREF="../../java/lang/String.html" title="class in java.lang">String</A> <B>format</B>(<A HREF="../../java/util/Locale.html" title="class in java.util">Locale</A>&nbsp;l,
+                            <A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&nbsp;format,
+                            <A HREF="../../java/lang/Object.html" title="class in java.lang">Object</A>...&nbsp;args)</PRE>
+<DL>
+    <DD>Returns a formatted string using the specified locale, format string,
+        and arguments.
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>l</CODE> - The <A HREF="../../java/util/Locale.html" title="class in java.util">locale</A> to apply during
+        formatting.  If <tt>l</tt> is <tt>null</tt> then no localization
+        is applied.<DD><CODE>format</CODE> - A <a href="../util/Formatter.html#syntax">format string</a><DD><CODE>args</CODE> - Arguments referenced by the format specifiers in the format
+        string.  If there are more arguments than format specifiers, the
+        extra arguments are ignored.  The number of arguments is
+        variable and may be zero.  The maximum number of arguments is
+        limited by the maximum dimension of a Java array as defined by
+        the <a href="http://java.sun.com/docs/books/vmspec/">Java
+            Virtual Machine Specification</a>.  The behaviour on a
+        <tt>null</tt> argument depends on the <a
+                href="../util/Formatter.html#syntax">conversion</a>.
+        <DT><B>Returns:</B><DD>A formatted string
+        <DT><B>Throws:</B>
+        <DD><CODE>IllegalFormatException</CODE> - If a format string contains an illegal syntax, a format
+            specifier that is incompatible with the given arguments,
+            insufficient arguments given the format string, or other
+            illegal conditions.  For specification of all possible
+            formatting errors, see the <a
+                    href="../util/Formatter.html#detail">Details</a> section of the
+            formatter class specification
+        <DD><CODE><A HREF="../../java/lang/NullPointerException.html" title="class in java.lang">NullPointerException</A></CODE> - If the <tt>format</tt> is <tt>null</tt><DT><B>Since:</B></DT>
+        <DD>1.5</DD>
+        <DT><B>See Also:</B><DD><A HREF="../../java/util/Formatter.html" title="class in java.util"><CODE>Formatter</CODE></A></DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="valueOf(java.lang.Object)"><!-- --></A><H3>
+    valueOf</H3>
+<PRE>
+public static <A HREF="../../java/lang/String.html" title="class in java.lang">String</A> <B>valueOf</B>(<A HREF="../../java/lang/Object.html" title="class in java.lang">Object</A>&nbsp;obj)</PRE>
+<DL>
+    <DD>Returns the string representation of the <code>Object</code> argument.
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>obj</CODE> - an <code>Object</code>.
+        <DT><B>Returns:</B><DD>if the argument is <code>null</code>, then a string equal to
+        <code>"null"</code>; otherwise, the value of
+        <code>obj.toString()</code> is returned.<DT><B>See Also:</B><DD><A HREF="../../java/lang/Object.html#toString()"><CODE>Object.toString()</CODE></A></DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="valueOf(char[])"><!-- --></A><H3>
+    valueOf</H3>
+<PRE>
+public static <A HREF="../../java/lang/String.html" title="class in java.lang">String</A> <B>valueOf</B>(char[]&nbsp;data)</PRE>
+<DL>
+    <DD>Returns the string representation of the <code>char</code> array
+        argument. The contents of the character array are copied; subsequent
+        modification of the character array does not affect the newly
+        created string.
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>data</CODE> - a <code>char</code> array.
+        <DT><B>Returns:</B><DD>a newly allocated string representing the same sequence of
+        characters contained in the character array argument.</DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="valueOf(char[], int, int)"><!-- --></A><H3>
+    valueOf</H3>
+<PRE>
+public static <A HREF="../../java/lang/String.html" title="class in java.lang">String</A> <B>valueOf</B>(char[]&nbsp;data,
+                             int&nbsp;offset,
+                             int&nbsp;count)</PRE>
+<DL>
+    <DD>Returns the string representation of a specific subarray of the
+        <code>char</code> array argument.
+        <p>
+            The <code>offset</code> argument is the index of the first
+            character of the subarray. The <code>count</code> argument
+            specifies the length of the subarray. The contents of the subarray
+            are copied; subsequent modification of the character array does not
+            affect the newly created string.
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>data</CODE> - the character array.<DD><CODE>offset</CODE> - the initial offset into the value of the
+        <code>String</code>.<DD><CODE>count</CODE> - the length of the value of the <code>String</code>.
+        <DT><B>Returns:</B><DD>a string representing the sequence of characters contained
+        in the subarray of the character array argument.
+        <DT><B>Throws:</B>
+        <DD><CODE><A HREF="../../java/lang/IndexOutOfBoundsException.html" title="class in java.lang">IndexOutOfBoundsException</A></CODE> - if <code>offset</code> is
+            negative, or <code>count</code> is negative, or
+            <code>offset+count</code> is larger than
+            <code>data.length</code>.</DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="copyValueOf(char[], int, int)"><!-- --></A><H3>
+    copyValueOf</H3>
+<PRE>
+public static <A HREF="../../java/lang/String.html" title="class in java.lang">String</A> <B>copyValueOf</B>(char[]&nbsp;data,
+                                 int&nbsp;offset,
+                                 int&nbsp;count)</PRE>
+<DL>
+    <DD>Returns a String that represents the character sequence in the
+        array specified.
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>data</CODE> - the character array.<DD><CODE>offset</CODE> - initial offset of the subarray.<DD><CODE>count</CODE> - length of the subarray.
+        <DT><B>Returns:</B><DD>a <code>String</code> that contains the characters of the
+        specified subarray of the character array.</DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="copyValueOf(char[])"><!-- --></A><H3>
+    copyValueOf</H3>
+<PRE>
+public static <A HREF="../../java/lang/String.html" title="class in java.lang">String</A> <B>copyValueOf</B>(char[]&nbsp;data)</PRE>
+<DL>
+    <DD>Returns a String that represents the character sequence in the
+        array specified.
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>data</CODE> - the character array.
+        <DT><B>Returns:</B><DD>a <code>String</code> that contains the characters of the
+        character array.</DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="valueOf(boolean)"><!-- --></A><H3>
+    valueOf</H3>
+<PRE>
+public static <A HREF="../../java/lang/String.html" title="class in java.lang">String</A> <B>valueOf</B>(boolean&nbsp;b)</PRE>
+<DL>
+    <DD>Returns the string representation of the <code>boolean</code> argument.
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>b</CODE> - a <code>boolean</code>.
+        <DT><B>Returns:</B><DD>if the argument is <code>true</code>, a string equal to
+        <code>"true"</code> is returned; otherwise, a string equal to
+        <code>"false"</code> is returned.</DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="valueOf(char)"><!-- --></A><H3>
+    valueOf</H3>
+<PRE>
+public static <A HREF="../../java/lang/String.html" title="class in java.lang">String</A> <B>valueOf</B>(char&nbsp;c)</PRE>
+<DL>
+    <DD>Returns the string representation of the <code>char</code>
+        argument.
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>c</CODE> - a <code>char</code>.
+        <DT><B>Returns:</B><DD>a string of length <code>1</code> containing
+        as its single character the argument <code>c</code>.</DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="valueOf(int)"><!-- --></A><H3>
+    valueOf</H3>
+<PRE>
+public static <A HREF="../../java/lang/String.html" title="class in java.lang">String</A> <B>valueOf</B>(int&nbsp;i)</PRE>
+<DL>
+    <DD>Returns the string representation of the <code>int</code> argument.
+        <p>
+            The representation is exactly the one returned by the
+            <code>Integer.toString</code> method of one argument.
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>i</CODE> - an <code>int</code>.
+        <DT><B>Returns:</B><DD>a string representation of the <code>int</code> argument.<DT><B>See Also:</B><DD><A HREF="../../java/lang/Integer.html#toString(int, int)"><CODE>Integer.toString(int, int)</CODE></A></DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="valueOf(long)"><!-- --></A><H3>
+    valueOf</H3>
+<PRE>
+public static <A HREF="../../java/lang/String.html" title="class in java.lang">String</A> <B>valueOf</B>(long&nbsp;l)</PRE>
+<DL>
+    <DD>Returns the string representation of the <code>long</code> argument.
+        <p>
+            The representation is exactly the one returned by the
+            <code>Long.toString</code> method of one argument.
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>l</CODE> - a <code>long</code>.
+        <DT><B>Returns:</B><DD>a string representation of the <code>long</code> argument.<DT><B>See Also:</B><DD><A HREF="../../java/lang/Long.html#toString(long)"><CODE>Long.toString(long)</CODE></A></DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="valueOf(float)"><!-- --></A><H3>
+    valueOf</H3>
+<PRE>
+public static <A HREF="../../java/lang/String.html" title="class in java.lang">String</A> <B>valueOf</B>(float&nbsp;f)</PRE>
+<DL>
+    <DD>Returns the string representation of the <code>float</code> argument.
+        <p>
+            The representation is exactly the one returned by the
+            <code>Float.toString</code> method of one argument.
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>f</CODE> - a <code>float</code>.
+        <DT><B>Returns:</B><DD>a string representation of the <code>float</code> argument.<DT><B>See Also:</B><DD><A HREF="../../java/lang/Float.html#toString(float)"><CODE>Float.toString(float)</CODE></A></DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="valueOf(double)"><!-- --></A><H3>
+    valueOf</H3>
+<PRE>
+public static <A HREF="../../java/lang/String.html" title="class in java.lang">String</A> <B>valueOf</B>(double&nbsp;d)</PRE>
+<DL>
+    <DD>Returns the string representation of the <code>double</code> argument.
+        <p>
+            The representation is exactly the one returned by the
+            <code>Double.toString</code> method of one argument.
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+        <DT><B>Parameters:</B><DD><CODE>d</CODE> - a <code>double</code>.
+        <DT><B>Returns:</B><DD>a  string representation of the <code>double</code> argument.<DT><B>See Also:</B><DD><A HREF="../../java/lang/Double.html#toString(double)"><CODE>Double.toString(double)</CODE></A></DL>
+    </DD>
+</DL>
+<HR>
+
+<A NAME="intern()"><!-- --></A><H3>
+    intern</H3>
+<PRE>
+public <A HREF="../../java/lang/String.html" title="class in java.lang">String</A> <B>intern</B>()</PRE>
+<DL>
+    <DD>Returns a canonical representation for the string object.
+        <p>
+            A pool of strings, initially empty, is maintained privately by the
+            class <code>String</code>.
+        <p>
+            When the intern method is invoked, if the pool already contains a
+            string equal to this <code>String</code> object as determined by
+            the <A HREF="../../java/lang/String.html#equals(java.lang.Object)"><CODE>equals(Object)</CODE></A> method, then the string from the pool is
+            returned. Otherwise, this <code>String</code> object is added to the
+            pool and a reference to this <code>String</code> object is returned.
+        <p>
+            It follows that for any two strings <code>s</code> and <code>t</code>,
+            <code>s.intern()&nbsp;==&nbsp;t.intern()</code> is <code>true</code>
+            if and only if <code>s.equals(t)</code> is <code>true</code>.
+        <p>
+            All literal strings and string-valued constant expressions are
+            interned. String literals are defined in &sect;3.10.5 of the
+            <a href="http://java.sun.com/docs/books/jls/html/">Java Language
+                Specification</a>
+        <P>
+    <DD><DL>
+    </DL>
+    </DD>
+    <DD><DL>
+
+        <DT><B>Returns:</B><DD>a string that has the same contents as this string, but is
+        guaranteed to be from a pool of unique strings.</DL>
+    </DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+    <TR>
+        <TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+            <A NAME="navbar_bottom_firstrow"><!-- --></A>
+            <TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+                <TR ALIGN="center" VALIGN="top">
+                    <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+                    <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+                    <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+                    <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/String.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+                    <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+                    <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+                    <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+                    <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+                </TR>
+            </TABLE>
+        </TD>
+        <TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+            <b>Java&#x2122;&nbsp;Platform<br>Standard&nbsp;Ed.&nbsp;6</b></EM>
+        </TD>
+    </TR>
+
+    <TR>
+        <TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+            &nbsp;<A HREF="../../java/lang/StrictMath.html" title="class in java.lang"><B>PREV CLASS</B></A>&nbsp;
+            &nbsp;<A HREF="../../java/lang/StringBuffer.html" title="class in java.lang"><B>NEXT CLASS</B></A></FONT></TD>
+        <TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+            <A HREF="../../index.html?java/lang/String.html" target="_top"><B>FRAMES</B></A>  &nbsp;
+            &nbsp;<A HREF="String.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
+            &nbsp;<SCRIPT type="text/javascript">
+            <!--
+            if(window==top) {
+                document.writeln('<A HREF="../../allclasses-noframe.html"><B>All Classes</B></A>');
+            }
+            //-->
+        </SCRIPT>
+            <NOSCRIPT>
+                <A HREF="../../allclasses-noframe.html"><B>All Classes</B></A>
+            </NOSCRIPT>
+
+
+        </FONT></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+            SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+        <TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+            DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+    </TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size="-1"> <a href="http://bugs.sun.com/services/bugreport/index.jsp">Submit a bug or feature</a><br>For further API reference and developer documentation, see <a href="http://java.sun.com/javase/6/webnotes/devdocs-vs-specs.html">Java SE Developer Documentation</a>. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.<p> <a href="../../../legal/cpyr.html">Copyright</a> &#x00a9; 1993, 2011, Oracle and/or its affiliates.  All rights reserved. </font>
+<!-- Start SiteCatalyst code   -->
+<script language="JavaScript" src="http://www.oracle.com/ocom/groups/systemobject/@mktg_admin/documents/systemobject/s_code_download.js"></script>
+<script language="JavaScript" src="http://www.oracle.com/ocom/groups/systemobject/@mktg_admin/documents/systemobject/s_code.js"></script>
+
+<!-- ********** DO NOT ALTER ANYTHING BELOW THIS LINE ! *********** -->
+<!--  Below code will send the info to Omniture server -->
+<script language="javascript">var s_code=s.t();if(s_code)document.write(s_code)</script>
+
+<!-- End SiteCatalyst code -->
+<noscript>
+    <p>Scripting on this page tracks web page traffic, but does not change the content in any way.</p>
+</noscript>
+</BODY>
+</HTML>
diff --git a/java/java-tests/testData/codeInsight/externalJavadoc/String/7/expected.html b/java/java-tests/testData/codeInsight/externalJavadoc/String/7/expected.html
new file mode 100644
index 0000000..3d2ceef
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/externalJavadoc/String/7/expected.html
@@ -0,0 +1,105 @@
+<HTML><style type="text/css">  ul.inheritance {
+      margin:0;
+      padding:0;
+  }
+  ul.inheritance li {
+       display:inline;
+       list-style:none;
+  }
+  ul.inheritance li ul.inheritance {
+    margin-left:15px;
+    padding-left:15px;
+    padding-top:1px;
+  }
+</style><!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+    <div class="subTitle">java.lang</div>
+    <h2 title="Class String" class="title">Class String</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+    <li><a href="../../java/lang/Object.html" title="class in java.lang">java.lang.Object</a></li>
+    <li>
+        <ul class="inheritance">
+            <li>java.lang.String</li>
+        </ul>
+    </li>
+</ul>
+<DL>    <ul class="blockList">
+        <li class="blockList">
+            <dl>
+                <dt>All Implemented Interfaces:</dt>
+                <dd><a href="../../java/io/Serializable.html" title="interface in java.io">Serializable</a>, <a href="../../java/lang/CharSequence.html" title="interface in java.lang">CharSequence</a>, <a href="../../java/lang/Comparable.html" title="interface in java.lang">Comparable</a>&lt;<a href="../../java/lang/String.html" title="class in java.lang">String</a>&gt;</dd>
+            </dl>
+            <hr>
+            <br>
+<pre>public final class <span class="strong">String</span>
+extends <a href="../../java/lang/Object.html" title="class in java.lang">Object</a>
+implements <a href="../../java/io/Serializable.html" title="interface in java.io">Serializable</a>, <a href="../../java/lang/Comparable.html" title="interface in java.lang">Comparable</a>&lt;<a href="../../java/lang/String.html" title="class in java.lang">String</a>&gt;, <a href="../../java/lang/CharSequence.html" title="interface in java.lang">CharSequence</a></pre>
+            <div class="block">The <code>String</code> class represents character strings. All
+                string literals in Java programs, such as <code>"abc"</code>, are
+                implemented as instances of this class.
+                <p>
+                    Strings are constant; their values cannot be changed after they
+                    are created. String buffers support mutable strings.
+                    Because String objects are immutable they can be shared. For example:
+                <p><blockquote><pre>
+     String str = "abc";
+ </pre></blockquote><p>
+                    is equivalent to:
+                <p><blockquote><pre>
+     char data[] = {'a', 'b', 'c'};
+     String str = new String(data);
+ </pre></blockquote><p>
+                    Here are some more examples of how strings can be used:
+                <p><blockquote><pre>
+     System.out.println("abc");
+     String cde = "cde";
+     System.out.println("abc" + cde);
+     String c = "abc".substring(2,3);
+     String d = cde.substring(1, 2);
+ </pre></blockquote>
+                <p>
+                    The class <code>String</code> includes methods for examining
+                    individual characters of the sequence, for comparing strings, for
+                    searching strings, for extracting substrings, and for creating a
+                    copy of a string with all characters translated to uppercase or to
+                    lowercase. Case mapping is based on the Unicode Standard version
+                    specified by the <a href="../../java/lang/Character.html" title="class in java.lang"><code>Character</code></a> class.
+                <p>
+                    The Java language provides special support for the string
+                    concatenation operator (&nbsp;+&nbsp;), and for conversion of
+                    other objects to strings. String concatenation is implemented
+                    through the <code>StringBuilder</code>(or <code>StringBuffer</code>)
+                    class and its <code>append</code> method.
+                    String conversions are implemented through the method
+                    <code>toString</code>, defined by <code>Object</code> and
+                    inherited by all classes in Java. For additional information on
+                    string concatenation and conversion, see Gosling, Joy, and Steele,
+                    <i>The Java Language Specification</i>.
+
+                <p> Unless otherwise noted, passing a <tt>null</tt> argument to a constructor
+                    or method in this class will cause a <a href="../../java/lang/NullPointerException.html" title="class in java.lang"><code>NullPointerException</code></a> to be
+                    thrown.
+
+                <p>A <code>String</code> represents a string in the UTF-16 format
+                    in which <em>supplementary characters</em> are represented by <em>surrogate
+                        pairs</em> (see the section <a href="Character.html#unicode">Unicode
+                        Character Representations</a> in the <code>Character</code> class for
+                    more information).
+                    Index values refer to <code>char</code> code units, so a supplementary
+                    character uses two positions in a <code>String</code>.
+                <p>The <code>String</code> class provides methods for dealing with
+                    Unicode code points (i.e., characters), in addition to those for
+                    dealing with Unicode code units (i.e., <code>char</code> values).</div>
+            <dl><dt><span class="strong">Since:</span></dt>
+                <dd>JDK1.0</dd>
+                <dt><span class="strong">See Also:</span></dt><dd><a href="../../java/lang/Object.html#toString()"><code>Object.toString()</code></a>,
+                    <a href="../../java/lang/StringBuffer.html" title="class in java.lang"><code>StringBuffer</code></a>,
+                    <a href="../../java/lang/StringBuilder.html" title="class in java.lang"><code>StringBuilder</code></a>,
+                    <a href="../../java/nio/charset/Charset.html" title="class in java.nio.charset"><code>Charset</code></a>,
+                    <a href="../../serialized-form.html#java.lang.String">Serialized Form</a></dd></dl>
+        </li>
+    </ul>
+</div>
+</HTML>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/externalJavadoc/String/7/expectedToLowerCase.html b/java/java-tests/testData/codeInsight/externalJavadoc/String/7/expectedToLowerCase.html
new file mode 100644
index 0000000..3ff8e42
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/externalJavadoc/String/7/expectedToLowerCase.html
@@ -0,0 +1,37 @@
+<HTML><style type="text/css">  ul.inheritance {
+      margin:0;
+      padding:0;
+  }
+  ul.inheritance li {
+       display:inline;
+       list-style:none;
+  }
+  ul.inheritance li ul.inheritance {
+    margin-left:15px;
+    padding-left:15px;
+    padding-top:1px;
+  }
+</style><a name="toLowerCase()">
+    <!--   -->
+</a>
+        <h4>toLowerCase</h4>
+        <pre>public&nbsp;<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;toLowerCase()</pre>
+        <div class="block">Converts all of the characters in this <code>String</code> to lower
+            case using the rules of the default locale. This is equivalent to calling
+            <code>toLowerCase(Locale.getDefault())</code>.
+            <p>
+                <b>Note:</b> This method is locale sensitive, and may produce unexpected
+                results if used for strings that are intended to be interpreted locale
+                independently.
+                Examples are programming language identifiers, protocol keys, and HTML
+                tags.
+                For instance, <code>"TITLE".toLowerCase()</code> in a Turkish locale
+                returns <code>"t\u0131tle"</code>, where '\u0131' is the
+                LATIN SMALL LETTER DOTLESS I character.
+                To obtain correct results for locale insensitive strings, use
+                <code>toLowerCase(Locale.ENGLISH)</code>.
+            <p></div>
+        <dl><dt><span class="strong">Returns:</span></dt><dd>the <code>String</code>, converted to lowercase.</dd><dt><span class="strong">See Also:</span></dt><dd><a href="../../java/lang/String.html#toLowerCase(java.util.Locale)"><code>toLowerCase(Locale)</code></a></dd></dl>
+    </li>
+</ul>
+</HTML>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/externalJavadoc/String/7/page.html b/java/java-tests/testData/codeInsight/externalJavadoc/String/7/page.html
new file mode 100644
index 0000000..cb9eb1f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/externalJavadoc/String/7/page.html
@@ -0,0 +1,3071 @@
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+    <!-- Generated by javadoc (version 1.6.0_14) on Wed Jul 13 05:19:32 PDT 2011 -->
+    <title>String (Java Platform SE 7 )</title>
+    <meta name="date" content="2011-07-13">
+    <meta name="keywords" content="java.lang.String class">
+    <meta name="keywords" content="CASE_INSENSITIVE_ORDER">
+    <meta name="keywords" content="length()">
+    <meta name="keywords" content="isEmpty()">
+    <meta name="keywords" content="charAt()">
+    <meta name="keywords" content="codePointAt()">
+    <meta name="keywords" content="codePointBefore()">
+    <meta name="keywords" content="codePointCount()">
+    <meta name="keywords" content="offsetByCodePoints()">
+    <meta name="keywords" content="getChars()">
+    <meta name="keywords" content="getBytes()">
+    <meta name="keywords" content="equals()">
+    <meta name="keywords" content="contentEquals()">
+    <meta name="keywords" content="equalsIgnoreCase()">
+    <meta name="keywords" content="compareTo()">
+    <meta name="keywords" content="compareToIgnoreCase()">
+    <meta name="keywords" content="regionMatches()">
+    <meta name="keywords" content="startsWith()">
+    <meta name="keywords" content="endsWith()">
+    <meta name="keywords" content="hashCode()">
+    <meta name="keywords" content="indexOf()">
+    <meta name="keywords" content="lastIndexOf()">
+    <meta name="keywords" content="substring()">
+    <meta name="keywords" content="subSequence()">
+    <meta name="keywords" content="concat()">
+    <meta name="keywords" content="replace()">
+    <meta name="keywords" content="matches()">
+    <meta name="keywords" content="contains()">
+    <meta name="keywords" content="replaceFirst()">
+    <meta name="keywords" content="replaceAll()">
+    <meta name="keywords" content="split()">
+    <meta name="keywords" content="toLowerCase()">
+    <meta name="keywords" content="toUpperCase()">
+    <meta name="keywords" content="trim()">
+    <meta name="keywords" content="toString()">
+    <meta name="keywords" content="toCharArray()">
+    <meta name="keywords" content="format()">
+    <meta name="keywords" content="valueOf()">
+    <meta name="keywords" content="copyValueOf()">
+    <meta name="keywords" content="intern()">
+    <link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+if (location.href.indexOf('is-external=true') == -1) {
+    parent.document.title="String (Java Platform SE 7 )";
+}
+//-->
+</script>
+<noscript>
+    <div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+    <!--   -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+    <!--   -->
+</a>
+    <ul class="navList" title="Navigation">
+        <li><a href="../../overview-summary.html">Overview</a></li>
+        <li><a href="package-summary.html">Package</a></li>
+        <li class="navBarCell1Rev">Class</li>
+        <li><a href="class-use/String.html">Use</a></li>
+        <li><a href="package-tree.html">Tree</a></li>
+        <li><a href="../../deprecated-list.html">Deprecated</a></li>
+        <li><a href="../../index-files/index-1.html">Index</a></li>
+        <li><a href="../../help-doc.html">Help</a></li>
+    </ul>
+    <div class="aboutLanguage"><em><strong>Java&trade;&nbsp;Platform<br>Standard&nbsp;Ed.&nbsp;7</strong></em></div>
+</div>
+<div class="subNav">
+    <ul class="navList">
+        <li><a href="../../java/lang/StrictMath.html" title="class in java.lang"><span class="strong">Prev Class</span></a></li>
+        <li><a href="../../java/lang/StringBuffer.html" title="class in java.lang"><span class="strong">Next Class</span></a></li>
+    </ul>
+    <ul class="navList">
+        <li><a href="../../index.html?java/lang/String.html" target="_top">Frames</a></li>
+        <li><a href="String.html" target="_top">No Frames</a></li>
+    </ul>
+    <ul class="navList" id="allclasses_navbar_top">
+        <li><a href="../../allclasses-noframe.html">All Classes</a></li>
+    </ul>
+    <div>
+        <script type="text/javascript"><!--
+        allClassesLink = document.getElementById("allclasses_navbar_top");
+        if(window==top) {
+            allClassesLink.style.display = "block";
+        }
+        else {
+            allClassesLink.style.display = "none";
+        }
+        //-->
+        </script>
+    </div>
+    <div>
+        <ul class="subNavList">
+            <li>Summary:&nbsp;</li>
+            <li>Nested&nbsp;|&nbsp;</li>
+            <li><a href="#field_summary">Field</a>&nbsp;|&nbsp;</li>
+            <li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+            <li><a href="#method_summary">Method</a></li>
+        </ul>
+        <ul class="subNavList">
+            <li>Detail:&nbsp;</li>
+            <li><a href="#field_detail">Field</a>&nbsp;|&nbsp;</li>
+            <li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+            <li><a href="#method_detail">Method</a></li>
+        </ul>
+    </div>
+    <a name="skip-navbar_top">
+        <!--   -->
+    </a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+    <div class="subTitle">java.lang</div>
+    <h2 title="Class String" class="title">Class String</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+    <li><a href="../../java/lang/Object.html" title="class in java.lang">java.lang.Object</a></li>
+    <li>
+        <ul class="inheritance">
+            <li>java.lang.String</li>
+        </ul>
+    </li>
+</ul>
+<div class="description">
+    <ul class="blockList">
+        <li class="blockList">
+            <dl>
+                <dt>All Implemented Interfaces:</dt>
+                <dd><a href="../../java/io/Serializable.html" title="interface in java.io">Serializable</a>, <a href="../../java/lang/CharSequence.html" title="interface in java.lang">CharSequence</a>, <a href="../../java/lang/Comparable.html" title="interface in java.lang">Comparable</a>&lt;<a href="../../java/lang/String.html" title="class in java.lang">String</a>&gt;</dd>
+            </dl>
+            <hr>
+            <br>
+<pre>public final class <span class="strong">String</span>
+extends <a href="../../java/lang/Object.html" title="class in java.lang">Object</a>
+implements <a href="../../java/io/Serializable.html" title="interface in java.io">Serializable</a>, <a href="../../java/lang/Comparable.html" title="interface in java.lang">Comparable</a>&lt;<a href="../../java/lang/String.html" title="class in java.lang">String</a>&gt;, <a href="../../java/lang/CharSequence.html" title="interface in java.lang">CharSequence</a></pre>
+            <div class="block">The <code>String</code> class represents character strings. All
+                string literals in Java programs, such as <code>"abc"</code>, are
+                implemented as instances of this class.
+                <p>
+                    Strings are constant; their values cannot be changed after they
+                    are created. String buffers support mutable strings.
+                    Because String objects are immutable they can be shared. For example:
+                <p><blockquote><pre>
+     String str = "abc";
+ </pre></blockquote><p>
+                    is equivalent to:
+                <p><blockquote><pre>
+     char data[] = {'a', 'b', 'c'};
+     String str = new String(data);
+ </pre></blockquote><p>
+                    Here are some more examples of how strings can be used:
+                <p><blockquote><pre>
+     System.out.println("abc");
+     String cde = "cde";
+     System.out.println("abc" + cde);
+     String c = "abc".substring(2,3);
+     String d = cde.substring(1, 2);
+ </pre></blockquote>
+                <p>
+                    The class <code>String</code> includes methods for examining
+                    individual characters of the sequence, for comparing strings, for
+                    searching strings, for extracting substrings, and for creating a
+                    copy of a string with all characters translated to uppercase or to
+                    lowercase. Case mapping is based on the Unicode Standard version
+                    specified by the <a href="../../java/lang/Character.html" title="class in java.lang"><code>Character</code></a> class.
+                <p>
+                    The Java language provides special support for the string
+                    concatenation operator (&nbsp;+&nbsp;), and for conversion of
+                    other objects to strings. String concatenation is implemented
+                    through the <code>StringBuilder</code>(or <code>StringBuffer</code>)
+                    class and its <code>append</code> method.
+                    String conversions are implemented through the method
+                    <code>toString</code>, defined by <code>Object</code> and
+                    inherited by all classes in Java. For additional information on
+                    string concatenation and conversion, see Gosling, Joy, and Steele,
+                    <i>The Java Language Specification</i>.
+
+                <p> Unless otherwise noted, passing a <tt>null</tt> argument to a constructor
+                    or method in this class will cause a <a href="../../java/lang/NullPointerException.html" title="class in java.lang"><code>NullPointerException</code></a> to be
+                    thrown.
+
+                <p>A <code>String</code> represents a string in the UTF-16 format
+                    in which <em>supplementary characters</em> are represented by <em>surrogate
+                        pairs</em> (see the section <a href="Character.html#unicode">Unicode
+                        Character Representations</a> in the <code>Character</code> class for
+                    more information).
+                    Index values refer to <code>char</code> code units, so a supplementary
+                    character uses two positions in a <code>String</code>.
+                <p>The <code>String</code> class provides methods for dealing with
+                    Unicode code points (i.e., characters), in addition to those for
+                    dealing with Unicode code units (i.e., <code>char</code> values).</div>
+            <dl><dt><span class="strong">Since:</span></dt>
+                <dd>JDK1.0</dd>
+                <dt><span class="strong">See Also:</span></dt><dd><a href="../../java/lang/Object.html#toString()"><code>Object.toString()</code></a>,
+                    <a href="../../java/lang/StringBuffer.html" title="class in java.lang"><code>StringBuffer</code></a>,
+                    <a href="../../java/lang/StringBuilder.html" title="class in java.lang"><code>StringBuilder</code></a>,
+                    <a href="../../java/nio/charset/Charset.html" title="class in java.nio.charset"><code>Charset</code></a>,
+                    <a href="../../serialized-form.html#java.lang.String">Serialized Form</a></dd></dl>
+        </li>
+    </ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+    <li class="blockList"><a name="field_summary">
+        <!--   -->
+    </a>
+        <h3>Field Summary</h3>
+        <table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+            <caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+            <tr>
+                <th class="colFirst" scope="col">Modifier and Type</th>
+                <th class="colLast" scope="col">Field and Description</th>
+            </tr>
+            <tr class="altColor">
+                <td class="colFirst"><code>static <a href="../../java/util/Comparator.html" title="interface in java.util">Comparator</a>&lt;<a href="../../java/lang/String.html" title="class in java.lang">String</a>&gt;</code></td>
+                <td class="colLast"><code><strong><a href="../../java/lang/String.html#CASE_INSENSITIVE_ORDER">CASE_INSENSITIVE_ORDER</a></strong></code>
+                    <div class="block">A Comparator that orders <code>String</code> objects as by
+                        <code>compareToIgnoreCase</code>.</div>
+                </td>
+            </tr>
+        </table>
+    </li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+    <li class="blockList"><a name="constructor_summary">
+        <!--   -->
+    </a>
+        <h3>Constructor Summary</h3>
+        <table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+            <caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+            <tr>
+                <th class="colOne" scope="col">Constructor and Description</th>
+            </tr>
+            <tr class="altColor">
+                <td class="colOne"><code><strong><a href="../../java/lang/String.html#String()">String</a></strong>()</code>
+                    <div class="block">Initializes a newly created <code>String</code> object so that it represents
+                        an empty character sequence.</div>
+                </td>
+            </tr>
+            <tr class="rowColor">
+                <td class="colOne"><code><strong><a href="../../java/lang/String.html#String(byte[])">String</a></strong>(byte[]&nbsp;bytes)</code>
+                    <div class="block">Constructs a new <code>String</code> by decoding the specified array of bytes
+                        using the platform's default charset.</div>
+                </td>
+            </tr>
+            <tr class="altColor">
+                <td class="colOne"><code><strong><a href="../../java/lang/String.html#String(byte[], java.nio.charset.Charset)">String</a></strong>(byte[]&nbsp;bytes,
+                    <a href="../../java/nio/charset/Charset.html" title="class in java.nio.charset">Charset</a>&nbsp;charset)</code>
+                    <div class="block">Constructs a new <code>String</code> by decoding the specified array of
+                        bytes using the specified <a href="../../java/nio/charset/Charset.html" title="class in java.nio.charset">charset</a>.</div>
+                </td>
+            </tr>
+            <tr class="rowColor">
+                <td class="colOne"><code><strong><a href="../../java/lang/String.html#String(byte[], int)">String</a></strong>(byte[]&nbsp;ascii,
+                    int&nbsp;hibyte)</code>
+                    <div class="block"><strong>Deprecated.</strong>&nbsp;
+                        <div class="block"><i>This method does not properly convert bytes into
+                            characters.  As of JDK&nbsp;1.1, the preferred way to do this is via the
+                            <code>String</code> constructors that take a <a href="../../java/nio/charset/Charset.html" title="class in java.nio.charset"><code>Charset</code></a>, charset name, or that use the platform's
+                            default charset.</i></div>
+                    </div>
+                </td>
+            </tr>
+            <tr class="altColor">
+                <td class="colOne"><code><strong><a href="../../java/lang/String.html#String(byte[], int, int)">String</a></strong>(byte[]&nbsp;bytes,
+                    int&nbsp;offset,
+                    int&nbsp;length)</code>
+                    <div class="block">Constructs a new <code>String</code> by decoding the specified subarray of
+                        bytes using the platform's default charset.</div>
+                </td>
+            </tr>
+            <tr class="rowColor">
+                <td class="colOne"><code><strong><a href="../../java/lang/String.html#String(byte[], int, int, java.nio.charset.Charset)">String</a></strong>(byte[]&nbsp;bytes,
+                    int&nbsp;offset,
+                    int&nbsp;length,
+                    <a href="../../java/nio/charset/Charset.html" title="class in java.nio.charset">Charset</a>&nbsp;charset)</code>
+                    <div class="block">Constructs a new <code>String</code> by decoding the specified subarray of
+                        bytes using the specified <a href="../../java/nio/charset/Charset.html" title="class in java.nio.charset">charset</a>.</div>
+                </td>
+            </tr>
+            <tr class="altColor">
+                <td class="colOne"><code><strong><a href="../../java/lang/String.html#String(byte[], int, int, int)">String</a></strong>(byte[]&nbsp;ascii,
+                    int&nbsp;hibyte,
+                    int&nbsp;offset,
+                    int&nbsp;count)</code>
+                    <div class="block"><strong>Deprecated.</strong>&nbsp;
+                        <div class="block"><i>This method does not properly convert bytes into characters.
+                            As of JDK&nbsp;1.1, the preferred way to do this is via the
+                            <code>String</code> constructors that take a <a href="../../java/nio/charset/Charset.html" title="class in java.nio.charset"><code>Charset</code></a>, charset name, or that use the platform's
+                            default charset.</i></div>
+                    </div>
+                </td>
+            </tr>
+            <tr class="rowColor">
+                <td class="colOne"><code><strong><a href="../../java/lang/String.html#String(byte[], int, int, java.lang.String)">String</a></strong>(byte[]&nbsp;bytes,
+                    int&nbsp;offset,
+                    int&nbsp;length,
+                    <a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;charsetName)</code>
+                    <div class="block">Constructs a new <code>String</code> by decoding the specified subarray of
+                        bytes using the specified charset.</div>
+                </td>
+            </tr>
+            <tr class="altColor">
+                <td class="colOne"><code><strong><a href="../../java/lang/String.html#String(byte[], java.lang.String)">String</a></strong>(byte[]&nbsp;bytes,
+                    <a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;charsetName)</code>
+                    <div class="block">Constructs a new <code>String</code> by decoding the specified array of bytes
+                        using the specified <a href="../../java/nio/charset/Charset.html" title="class in java.nio.charset">charset</a>.</div>
+                </td>
+            </tr>
+            <tr class="rowColor">
+                <td class="colOne"><code><strong><a href="../../java/lang/String.html#String(char[])">String</a></strong>(char[]&nbsp;value)</code>
+                    <div class="block">Allocates a new <code>String</code> so that it represents the sequence of
+                        characters currently contained in the character array argument.</div>
+                </td>
+            </tr>
+            <tr class="altColor">
+                <td class="colOne"><code><strong><a href="../../java/lang/String.html#String(char[], int, int)">String</a></strong>(char[]&nbsp;value,
+                    int&nbsp;offset,
+                    int&nbsp;count)</code>
+                    <div class="block">Allocates a new <code>String</code> that contains characters from a subarray
+                        of the character array argument.</div>
+                </td>
+            </tr>
+            <tr class="rowColor">
+                <td class="colOne"><code><strong><a href="../../java/lang/String.html#String(int[], int, int)">String</a></strong>(int[]&nbsp;codePoints,
+                    int&nbsp;offset,
+                    int&nbsp;count)</code>
+                    <div class="block">Allocates a new <code>String</code> that contains characters from a subarray
+                        of the <a href="Character.html#unicode">Unicode code point</a> array
+                        argument.</div>
+                </td>
+            </tr>
+            <tr class="altColor">
+                <td class="colOne"><code><strong><a href="../../java/lang/String.html#String(java.lang.String)">String</a></strong>(<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;original)</code>
+                    <div class="block">Initializes a newly created <code>String</code> object so that it represents
+                        the same sequence of characters as the argument; in other words, the
+                        newly created string is a copy of the argument string.</div>
+                </td>
+            </tr>
+            <tr class="rowColor">
+                <td class="colOne"><code><strong><a href="../../java/lang/String.html#String(java.lang.StringBuffer)">String</a></strong>(<a href="../../java/lang/StringBuffer.html" title="class in java.lang">StringBuffer</a>&nbsp;buffer)</code>
+                    <div class="block">Allocates a new string that contains the sequence of characters
+                        currently contained in the string buffer argument.</div>
+                </td>
+            </tr>
+            <tr class="altColor">
+                <td class="colOne"><code><strong><a href="../../java/lang/String.html#String(java.lang.StringBuilder)">String</a></strong>(<a href="../../java/lang/StringBuilder.html" title="class in java.lang">StringBuilder</a>&nbsp;builder)</code>
+                    <div class="block">Allocates a new string that contains the sequence of characters
+                        currently contained in the string builder argument.</div>
+                </td>
+            </tr>
+        </table>
+    </li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_summary">
+    <!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+    <th class="colFirst" scope="col">Modifier and Type</th>
+    <th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr class="altColor">
+    <td class="colFirst"><code>char</code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#charAt(int)">charAt</a></strong>(int&nbsp;index)</code>
+        <div class="block">Returns the <code>char</code> value at the
+            specified index.</div>
+    </td>
+</tr>
+<tr class="rowColor">
+    <td class="colFirst"><code>int</code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#codePointAt(int)">codePointAt</a></strong>(int&nbsp;index)</code>
+        <div class="block">Returns the character (Unicode code point) at the specified
+            index.</div>
+    </td>
+</tr>
+<tr class="altColor">
+    <td class="colFirst"><code>int</code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#codePointBefore(int)">codePointBefore</a></strong>(int&nbsp;index)</code>
+        <div class="block">Returns the character (Unicode code point) before the specified
+            index.</div>
+    </td>
+</tr>
+<tr class="rowColor">
+    <td class="colFirst"><code>int</code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#codePointCount(int, int)">codePointCount</a></strong>(int&nbsp;beginIndex,
+        int&nbsp;endIndex)</code>
+        <div class="block">Returns the number of Unicode code points in the specified text
+            range of this <code>String</code>.</div>
+    </td>
+</tr>
+<tr class="altColor">
+    <td class="colFirst"><code>int</code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#compareTo(java.lang.String)">compareTo</a></strong>(<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;anotherString)</code>
+        <div class="block">Compares two strings lexicographically.</div>
+    </td>
+</tr>
+<tr class="rowColor">
+    <td class="colFirst"><code>int</code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#compareToIgnoreCase(java.lang.String)">compareToIgnoreCase</a></strong>(<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;str)</code>
+        <div class="block">Compares two strings lexicographically, ignoring case
+            differences.</div>
+    </td>
+</tr>
+<tr class="altColor">
+    <td class="colFirst"><code><a href="../../java/lang/String.html" title="class in java.lang">String</a></code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#concat(java.lang.String)">concat</a></strong>(<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;str)</code>
+        <div class="block">Concatenates the specified string to the end of this string.</div>
+    </td>
+</tr>
+<tr class="rowColor">
+    <td class="colFirst"><code>boolean</code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#contains(java.lang.CharSequence)">contains</a></strong>(<a href="../../java/lang/CharSequence.html" title="interface in java.lang">CharSequence</a>&nbsp;s)</code>
+        <div class="block">Returns true if and only if this string contains the specified
+            sequence of char values.</div>
+    </td>
+</tr>
+<tr class="altColor">
+    <td class="colFirst"><code>boolean</code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#contentEquals(java.lang.CharSequence)">contentEquals</a></strong>(<a href="../../java/lang/CharSequence.html" title="interface in java.lang">CharSequence</a>&nbsp;cs)</code>
+        <div class="block">Compares this string to the specified <code>CharSequence</code>.</div>
+    </td>
+</tr>
+<tr class="rowColor">
+    <td class="colFirst"><code>boolean</code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#contentEquals(java.lang.StringBuffer)">contentEquals</a></strong>(<a href="../../java/lang/StringBuffer.html" title="class in java.lang">StringBuffer</a>&nbsp;sb)</code>
+        <div class="block">Compares this string to the specified <code>StringBuffer</code>.</div>
+    </td>
+</tr>
+<tr class="altColor">
+    <td class="colFirst"><code>static <a href="../../java/lang/String.html" title="class in java.lang">String</a></code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#copyValueOf(char[])">copyValueOf</a></strong>(char[]&nbsp;data)</code>
+        <div class="block">Returns a String that represents the character sequence in the
+            array specified.</div>
+    </td>
+</tr>
+<tr class="rowColor">
+    <td class="colFirst"><code>static <a href="../../java/lang/String.html" title="class in java.lang">String</a></code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#copyValueOf(char[], int, int)">copyValueOf</a></strong>(char[]&nbsp;data,
+        int&nbsp;offset,
+        int&nbsp;count)</code>
+        <div class="block">Returns a String that represents the character sequence in the
+            array specified.</div>
+    </td>
+</tr>
+<tr class="altColor">
+    <td class="colFirst"><code>boolean</code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#endsWith(java.lang.String)">endsWith</a></strong>(<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;suffix)</code>
+        <div class="block">Tests if this string ends with the specified suffix.</div>
+    </td>
+</tr>
+<tr class="rowColor">
+    <td class="colFirst"><code>boolean</code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#equals(java.lang.Object)">equals</a></strong>(<a href="../../java/lang/Object.html" title="class in java.lang">Object</a>&nbsp;anObject)</code>
+        <div class="block">Compares this string to the specified object.</div>
+    </td>
+</tr>
+<tr class="altColor">
+    <td class="colFirst"><code>boolean</code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#equalsIgnoreCase(java.lang.String)">equalsIgnoreCase</a></strong>(<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;anotherString)</code>
+        <div class="block">Compares this <code>String</code> to another <code>String</code>, ignoring case
+            considerations.</div>
+    </td>
+</tr>
+<tr class="rowColor">
+    <td class="colFirst"><code>static <a href="../../java/lang/String.html" title="class in java.lang">String</a></code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#format(java.util.Locale, java.lang.String, java.lang.Object...)">format</a></strong>(<a href="../../java/util/Locale.html" title="class in java.util">Locale</a>&nbsp;l,
+        <a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;format,
+        <a href="../../java/lang/Object.html" title="class in java.lang">Object</a>...&nbsp;args)</code>
+        <div class="block">Returns a formatted string using the specified locale, format string,
+            and arguments.</div>
+    </td>
+</tr>
+<tr class="altColor">
+    <td class="colFirst"><code>static <a href="../../java/lang/String.html" title="class in java.lang">String</a></code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#format(java.lang.String, java.lang.Object...)">format</a></strong>(<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;format,
+        <a href="../../java/lang/Object.html" title="class in java.lang">Object</a>...&nbsp;args)</code>
+        <div class="block">Returns a formatted string using the specified format string and
+            arguments.</div>
+    </td>
+</tr>
+<tr class="rowColor">
+    <td class="colFirst"><code>byte[]</code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#getBytes()">getBytes</a></strong>()</code>
+        <div class="block">Encodes this <code>String</code> into a sequence of bytes using the
+            platform's default charset, storing the result into a new byte array.</div>
+    </td>
+</tr>
+<tr class="altColor">
+    <td class="colFirst"><code>byte[]</code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#getBytes(java.nio.charset.Charset)">getBytes</a></strong>(<a href="../../java/nio/charset/Charset.html" title="class in java.nio.charset">Charset</a>&nbsp;charset)</code>
+        <div class="block">Encodes this <code>String</code> into a sequence of bytes using the given
+            <a href="../../java/nio/charset/Charset.html" title="class in java.nio.charset">charset</a>, storing the result into a
+            new byte array.</div>
+    </td>
+</tr>
+<tr class="rowColor">
+    <td class="colFirst"><code>void</code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#getBytes(int, int, byte[], int)">getBytes</a></strong>(int&nbsp;srcBegin,
+        int&nbsp;srcEnd,
+        byte[]&nbsp;dst,
+        int&nbsp;dstBegin)</code>
+        <div class="block"><strong>Deprecated.</strong>&nbsp;
+            <div class="block"><i>This method does not properly convert characters into
+                bytes.  As of JDK&nbsp;1.1, the preferred way to do this is via the
+                <a href="../../java/lang/String.html#getBytes()"><code>getBytes()</code></a> method, which uses the platform's default charset.</i></div>
+        </div>
+    </td>
+</tr>
+<tr class="altColor">
+    <td class="colFirst"><code>byte[]</code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#getBytes(java.lang.String)">getBytes</a></strong>(<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;charsetName)</code>
+        <div class="block">Encodes this <code>String</code> into a sequence of bytes using the named
+            charset, storing the result into a new byte array.</div>
+    </td>
+</tr>
+<tr class="rowColor">
+    <td class="colFirst"><code>void</code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#getChars(int, int, char[], int)">getChars</a></strong>(int&nbsp;srcBegin,
+        int&nbsp;srcEnd,
+        char[]&nbsp;dst,
+        int&nbsp;dstBegin)</code>
+        <div class="block">Copies characters from this string into the destination character
+            array.</div>
+    </td>
+</tr>
+<tr class="altColor">
+    <td class="colFirst"><code>int</code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#hashCode()">hashCode</a></strong>()</code>
+        <div class="block">Returns a hash code for this string.</div>
+    </td>
+</tr>
+<tr class="rowColor">
+    <td class="colFirst"><code>int</code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#indexOf(int)">indexOf</a></strong>(int&nbsp;ch)</code>
+        <div class="block">Returns the index within this string of the first occurrence of
+            the specified character.</div>
+    </td>
+</tr>
+<tr class="altColor">
+    <td class="colFirst"><code>int</code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#indexOf(int, int)">indexOf</a></strong>(int&nbsp;ch,
+        int&nbsp;fromIndex)</code>
+        <div class="block">Returns the index within this string of the first occurrence of the
+            specified character, starting the search at the specified index.</div>
+    </td>
+</tr>
+<tr class="rowColor">
+    <td class="colFirst"><code>int</code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#indexOf(java.lang.String)">indexOf</a></strong>(<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;str)</code>
+        <div class="block">Returns the index within this string of the first occurrence of the
+            specified substring.</div>
+    </td>
+</tr>
+<tr class="altColor">
+    <td class="colFirst"><code>int</code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#indexOf(java.lang.String, int)">indexOf</a></strong>(<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;str,
+        int&nbsp;fromIndex)</code>
+        <div class="block">Returns the index within this string of the first occurrence of the
+            specified substring, starting at the specified index.</div>
+    </td>
+</tr>
+<tr class="rowColor">
+    <td class="colFirst"><code><a href="../../java/lang/String.html" title="class in java.lang">String</a></code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#intern()">intern</a></strong>()</code>
+        <div class="block">Returns a canonical representation for the string object.</div>
+    </td>
+</tr>
+<tr class="altColor">
+    <td class="colFirst"><code>boolean</code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#isEmpty()">isEmpty</a></strong>()</code>
+        <div class="block">Returns <tt>true</tt> if, and only if, <a href="../../java/lang/String.html#length()"><code>length()</code></a> is <tt>0</tt>.</div>
+    </td>
+</tr>
+<tr class="rowColor">
+    <td class="colFirst"><code>int</code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#lastIndexOf(int)">lastIndexOf</a></strong>(int&nbsp;ch)</code>
+        <div class="block">Returns the index within this string of the last occurrence of
+            the specified character.</div>
+    </td>
+</tr>
+<tr class="altColor">
+    <td class="colFirst"><code>int</code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#lastIndexOf(int, int)">lastIndexOf</a></strong>(int&nbsp;ch,
+        int&nbsp;fromIndex)</code>
+        <div class="block">Returns the index within this string of the last occurrence of
+            the specified character, searching backward starting at the
+            specified index.</div>
+    </td>
+</tr>
+<tr class="rowColor">
+    <td class="colFirst"><code>int</code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#lastIndexOf(java.lang.String)">lastIndexOf</a></strong>(<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;str)</code>
+        <div class="block">Returns the index within this string of the last occurrence of the
+            specified substring.</div>
+    </td>
+</tr>
+<tr class="altColor">
+    <td class="colFirst"><code>int</code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#lastIndexOf(java.lang.String, int)">lastIndexOf</a></strong>(<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;str,
+        int&nbsp;fromIndex)</code>
+        <div class="block">Returns the index within this string of the last occurrence of the
+            specified substring, searching backward starting at the specified index.</div>
+    </td>
+</tr>
+<tr class="rowColor">
+    <td class="colFirst"><code>int</code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#length()">length</a></strong>()</code>
+        <div class="block">Returns the length of this string.</div>
+    </td>
+</tr>
+<tr class="altColor">
+    <td class="colFirst"><code>boolean</code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#matches(java.lang.String)">matches</a></strong>(<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;regex)</code>
+        <div class="block">Tells whether or not this string matches the given <a
+                href="../util/regex/Pattern.html#sum">regular expression</a>.</div>
+    </td>
+</tr>
+<tr class="rowColor">
+    <td class="colFirst"><code>int</code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#offsetByCodePoints(int, int)">offsetByCodePoints</a></strong>(int&nbsp;index,
+        int&nbsp;codePointOffset)</code>
+        <div class="block">Returns the index within this <code>String</code> that is
+            offset from the given <code>index</code> by
+            <code>codePointOffset</code> code points.</div>
+    </td>
+</tr>
+<tr class="altColor">
+    <td class="colFirst"><code>boolean</code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#regionMatches(boolean, int, java.lang.String, int, int)">regionMatches</a></strong>(boolean&nbsp;ignoreCase,
+        int&nbsp;toffset,
+        <a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;other,
+        int&nbsp;ooffset,
+        int&nbsp;len)</code>
+        <div class="block">Tests if two string regions are equal.</div>
+    </td>
+</tr>
+<tr class="rowColor">
+    <td class="colFirst"><code>boolean</code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#regionMatches(int, java.lang.String, int, int)">regionMatches</a></strong>(int&nbsp;toffset,
+        <a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;other,
+        int&nbsp;ooffset,
+        int&nbsp;len)</code>
+        <div class="block">Tests if two string regions are equal.</div>
+    </td>
+</tr>
+<tr class="altColor">
+    <td class="colFirst"><code><a href="../../java/lang/String.html" title="class in java.lang">String</a></code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#replace(char, char)">replace</a></strong>(char&nbsp;oldChar,
+        char&nbsp;newChar)</code>
+        <div class="block">Returns a new string resulting from replacing all occurrences of
+            <code>oldChar</code> in this string with <code>newChar</code>.</div>
+    </td>
+</tr>
+<tr class="rowColor">
+    <td class="colFirst"><code><a href="../../java/lang/String.html" title="class in java.lang">String</a></code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#replace(java.lang.CharSequence, java.lang.CharSequence)">replace</a></strong>(<a href="../../java/lang/CharSequence.html" title="interface in java.lang">CharSequence</a>&nbsp;target,
+        <a href="../../java/lang/CharSequence.html" title="interface in java.lang">CharSequence</a>&nbsp;replacement)</code>
+        <div class="block">Replaces each substring of this string that matches the literal target
+            sequence with the specified literal replacement sequence.</div>
+    </td>
+</tr>
+<tr class="altColor">
+    <td class="colFirst"><code><a href="../../java/lang/String.html" title="class in java.lang">String</a></code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#replaceAll(java.lang.String, java.lang.String)">replaceAll</a></strong>(<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;regex,
+        <a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;replacement)</code>
+        <div class="block">Replaces each substring of this string that matches the given <a
+                href="../util/regex/Pattern.html#sum">regular expression</a> with the
+            given replacement.</div>
+    </td>
+</tr>
+<tr class="rowColor">
+    <td class="colFirst"><code><a href="../../java/lang/String.html" title="class in java.lang">String</a></code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#replaceFirst(java.lang.String, java.lang.String)">replaceFirst</a></strong>(<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;regex,
+        <a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;replacement)</code>
+        <div class="block">Replaces the first substring of this string that matches the given <a
+                href="../util/regex/Pattern.html#sum">regular expression</a> with the
+            given replacement.</div>
+    </td>
+</tr>
+<tr class="altColor">
+    <td class="colFirst"><code><a href="../../java/lang/String.html" title="class in java.lang">String</a>[]</code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#split(java.lang.String)">split</a></strong>(<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;regex)</code>
+        <div class="block">Splits this string around matches of the given <a
+                href="../util/regex/Pattern.html#sum">regular expression</a>.</div>
+    </td>
+</tr>
+<tr class="rowColor">
+    <td class="colFirst"><code><a href="../../java/lang/String.html" title="class in java.lang">String</a>[]</code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#split(java.lang.String, int)">split</a></strong>(<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;regex,
+        int&nbsp;limit)</code>
+        <div class="block">Splits this string around matches of the given
+            <a href="../util/regex/Pattern.html#sum">regular expression</a>.</div>
+    </td>
+</tr>
+<tr class="altColor">
+    <td class="colFirst"><code>boolean</code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#startsWith(java.lang.String)">startsWith</a></strong>(<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;prefix)</code>
+        <div class="block">Tests if this string starts with the specified prefix.</div>
+    </td>
+</tr>
+<tr class="rowColor">
+    <td class="colFirst"><code>boolean</code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#startsWith(java.lang.String, int)">startsWith</a></strong>(<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;prefix,
+        int&nbsp;toffset)</code>
+        <div class="block">Tests if the substring of this string beginning at the
+            specified index starts with the specified prefix.</div>
+    </td>
+</tr>
+<tr class="altColor">
+    <td class="colFirst"><code><a href="../../java/lang/CharSequence.html" title="interface in java.lang">CharSequence</a></code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#subSequence(int, int)">subSequence</a></strong>(int&nbsp;beginIndex,
+        int&nbsp;endIndex)</code>
+        <div class="block">Returns a new character sequence that is a subsequence of this sequence.</div>
+    </td>
+</tr>
+<tr class="rowColor">
+    <td class="colFirst"><code><a href="../../java/lang/String.html" title="class in java.lang">String</a></code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#substring(int)">substring</a></strong>(int&nbsp;beginIndex)</code>
+        <div class="block">Returns a new string that is a substring of this string.</div>
+    </td>
+</tr>
+<tr class="altColor">
+    <td class="colFirst"><code><a href="../../java/lang/String.html" title="class in java.lang">String</a></code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#substring(int, int)">substring</a></strong>(int&nbsp;beginIndex,
+        int&nbsp;endIndex)</code>
+        <div class="block">Returns a new string that is a substring of this string.</div>
+    </td>
+</tr>
+<tr class="rowColor">
+    <td class="colFirst"><code>char[]</code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#toCharArray()">toCharArray</a></strong>()</code>
+        <div class="block">Converts this string to a new character array.</div>
+    </td>
+</tr>
+<tr class="altColor">
+    <td class="colFirst"><code><a href="../../java/lang/String.html" title="class in java.lang">String</a></code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#toLowerCase()">toLowerCase</a></strong>()</code>
+        <div class="block">Converts all of the characters in this <code>String</code> to lower
+            case using the rules of the default locale.</div>
+    </td>
+</tr>
+<tr class="rowColor">
+    <td class="colFirst"><code><a href="../../java/lang/String.html" title="class in java.lang">String</a></code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#toLowerCase(java.util.Locale)">toLowerCase</a></strong>(<a href="../../java/util/Locale.html" title="class in java.util">Locale</a>&nbsp;locale)</code>
+        <div class="block">Converts all of the characters in this <code>String</code> to lower
+            case using the rules of the given <code>Locale</code>.</div>
+    </td>
+</tr>
+<tr class="altColor">
+    <td class="colFirst"><code><a href="../../java/lang/String.html" title="class in java.lang">String</a></code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#toString()">toString</a></strong>()</code>
+        <div class="block">This object (which is already a string!) is itself returned.</div>
+    </td>
+</tr>
+<tr class="rowColor">
+    <td class="colFirst"><code><a href="../../java/lang/String.html" title="class in java.lang">String</a></code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#toUpperCase()">toUpperCase</a></strong>()</code>
+        <div class="block">Converts all of the characters in this <code>String</code> to upper
+            case using the rules of the default locale.</div>
+    </td>
+</tr>
+<tr class="altColor">
+    <td class="colFirst"><code><a href="../../java/lang/String.html" title="class in java.lang">String</a></code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#toUpperCase(java.util.Locale)">toUpperCase</a></strong>(<a href="../../java/util/Locale.html" title="class in java.util">Locale</a>&nbsp;locale)</code>
+        <div class="block">Converts all of the characters in this <code>String</code> to upper
+            case using the rules of the given <code>Locale</code>.</div>
+    </td>
+</tr>
+<tr class="rowColor">
+    <td class="colFirst"><code><a href="../../java/lang/String.html" title="class in java.lang">String</a></code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#trim()">trim</a></strong>()</code>
+        <div class="block">Returns a copy of the string, with leading and trailing whitespace
+            omitted.</div>
+    </td>
+</tr>
+<tr class="altColor">
+    <td class="colFirst"><code>static <a href="../../java/lang/String.html" title="class in java.lang">String</a></code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#valueOf(boolean)">valueOf</a></strong>(boolean&nbsp;b)</code>
+        <div class="block">Returns the string representation of the <code>boolean</code> argument.</div>
+    </td>
+</tr>
+<tr class="rowColor">
+    <td class="colFirst"><code>static <a href="../../java/lang/String.html" title="class in java.lang">String</a></code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#valueOf(char)">valueOf</a></strong>(char&nbsp;c)</code>
+        <div class="block">Returns the string representation of the <code>char</code>
+            argument.</div>
+    </td>
+</tr>
+<tr class="altColor">
+    <td class="colFirst"><code>static <a href="../../java/lang/String.html" title="class in java.lang">String</a></code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#valueOf(char[])">valueOf</a></strong>(char[]&nbsp;data)</code>
+        <div class="block">Returns the string representation of the <code>char</code> array
+            argument.</div>
+    </td>
+</tr>
+<tr class="rowColor">
+    <td class="colFirst"><code>static <a href="../../java/lang/String.html" title="class in java.lang">String</a></code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#valueOf(char[], int, int)">valueOf</a></strong>(char[]&nbsp;data,
+        int&nbsp;offset,
+        int&nbsp;count)</code>
+        <div class="block">Returns the string representation of a specific subarray of the
+            <code>char</code> array argument.</div>
+    </td>
+</tr>
+<tr class="altColor">
+    <td class="colFirst"><code>static <a href="../../java/lang/String.html" title="class in java.lang">String</a></code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#valueOf(double)">valueOf</a></strong>(double&nbsp;d)</code>
+        <div class="block">Returns the string representation of the <code>double</code> argument.</div>
+    </td>
+</tr>
+<tr class="rowColor">
+    <td class="colFirst"><code>static <a href="../../java/lang/String.html" title="class in java.lang">String</a></code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#valueOf(float)">valueOf</a></strong>(float&nbsp;f)</code>
+        <div class="block">Returns the string representation of the <code>float</code> argument.</div>
+    </td>
+</tr>
+<tr class="altColor">
+    <td class="colFirst"><code>static <a href="../../java/lang/String.html" title="class in java.lang">String</a></code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#valueOf(int)">valueOf</a></strong>(int&nbsp;i)</code>
+        <div class="block">Returns the string representation of the <code>int</code> argument.</div>
+    </td>
+</tr>
+<tr class="rowColor">
+    <td class="colFirst"><code>static <a href="../../java/lang/String.html" title="class in java.lang">String</a></code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#valueOf(long)">valueOf</a></strong>(long&nbsp;l)</code>
+        <div class="block">Returns the string representation of the <code>long</code> argument.</div>
+    </td>
+</tr>
+<tr class="altColor">
+    <td class="colFirst"><code>static <a href="../../java/lang/String.html" title="class in java.lang">String</a></code></td>
+    <td class="colLast"><code><strong><a href="../../java/lang/String.html#valueOf(java.lang.Object)">valueOf</a></strong>(<a href="../../java/lang/Object.html" title="class in java.lang">Object</a>&nbsp;obj)</code>
+        <div class="block">Returns the string representation of the <code>Object</code> argument.</div>
+    </td>
+</tr>
+</table>
+<ul class="blockList">
+    <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
+        <!--   -->
+    </a>
+        <h3>Methods inherited from class&nbsp;java.lang.<a href="../../java/lang/Object.html" title="class in java.lang">Object</a></h3>
+        <code><a href="../../java/lang/Object.html#clone()">clone</a>, <a href="../../java/lang/Object.html#finalize()">finalize</a>, <a href="../../java/lang/Object.html#getClass()">getClass</a>, <a href="../../java/lang/Object.html#notify()">notify</a>, <a href="../../java/lang/Object.html#notifyAll()">notifyAll</a>, <a href="../../java/lang/Object.html#wait()">wait</a>, <a href="../../java/lang/Object.html#wait(long)">wait</a>, <a href="../../java/lang/Object.html#wait(long, int)">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+    <li class="blockList"><a name="field_detail">
+        <!--   -->
+    </a>
+        <h3>Field Detail</h3>
+        <a name="CASE_INSENSITIVE_ORDER">
+            <!--   -->
+        </a>
+        <ul class="blockListLast">
+            <li class="blockList">
+                <h4>CASE_INSENSITIVE_ORDER</h4>
+                <pre>public static final&nbsp;<a href="../../java/util/Comparator.html" title="interface in java.util">Comparator</a>&lt;<a href="../../java/lang/String.html" title="class in java.lang">String</a>&gt; CASE_INSENSITIVE_ORDER</pre>
+                <div class="block">A Comparator that orders <code>String</code> objects as by
+                    <code>compareToIgnoreCase</code>. This comparator is serializable.
+                    <p>
+                        Note that this Comparator does <em>not</em> take locale into account,
+                        and will result in an unsatisfactory ordering for certain locales.
+                        The java.text package provides <em>Collators</em> to allow
+                        locale-sensitive ordering.</div>
+                <dl><dt><span class="strong">Since:</span></dt>
+                    <dd>1.2</dd>
+                    <dt><span class="strong">See Also:</span></dt><dd><a href="../../java/text/Collator.html#compare(java.lang.String, java.lang.String)"><code>Collator.compare(String, String)</code></a></dd></dl>
+            </li>
+        </ul>
+    </li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_detail">
+    <!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="String()">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>String</h4>
+        <pre>public&nbsp;String()</pre>
+        <div class="block">Initializes a newly created <code>String</code> object so that it represents
+            an empty character sequence.  Note that use of this constructor is
+            unnecessary since Strings are immutable.</div>
+    </li>
+</ul>
+<a name="String(java.lang.String)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>String</h4>
+        <pre>public&nbsp;String(<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;original)</pre>
+        <div class="block">Initializes a newly created <code>String</code> object so that it represents
+            the same sequence of characters as the argument; in other words, the
+            newly created string is a copy of the argument string. Unless an
+            explicit copy of <code>original</code> is needed, use of this constructor is
+            unnecessary since Strings are immutable.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>original</code> - A <code>String</code></dd></dl>
+    </li>
+</ul>
+<a name="String(char[])">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>String</h4>
+        <pre>public&nbsp;String(char[]&nbsp;value)</pre>
+        <div class="block">Allocates a new <code>String</code> so that it represents the sequence of
+            characters currently contained in the character array argument. The
+            contents of the character array are copied; subsequent modification of
+            the character array does not affect the newly created string.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>value</code> - The initial value of the string</dd></dl>
+    </li>
+</ul>
+<a name="String(char[], int, int)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>String</h4>
+<pre>public&nbsp;String(char[]&nbsp;value,
+      int&nbsp;offset,
+      int&nbsp;count)</pre>
+        <div class="block">Allocates a new <code>String</code> that contains characters from a subarray
+            of the character array argument. The <code>offset</code> argument is the
+            index of the first character of the subarray and the <code>count</code>
+            argument specifies the length of the subarray. The contents of the
+            subarray are copied; subsequent modification of the character array does
+            not affect the newly created string.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>value</code> - Array that is the source of characters</dd><dd><code>offset</code> - The initial offset</dd><dd><code>count</code> - The length</dd>
+            <dt><span class="strong">Throws:</span></dt>
+            <dd><code><a href="../../java/lang/IndexOutOfBoundsException.html" title="class in java.lang">IndexOutOfBoundsException</a></code> - If the <code>offset</code> and <code>count</code> arguments index
+                characters outside the bounds of the <code>value</code> array</dd></dl>
+    </li>
+</ul>
+<a name="String(int[], int, int)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>String</h4>
+<pre>public&nbsp;String(int[]&nbsp;codePoints,
+      int&nbsp;offset,
+      int&nbsp;count)</pre>
+        <div class="block">Allocates a new <code>String</code> that contains characters from a subarray
+            of the <a href="Character.html#unicode">Unicode code point</a> array
+            argument.  The <code>offset</code> argument is the index of the first code
+            point of the subarray and the <code>count</code> argument specifies the
+            length of the subarray.  The contents of the subarray are converted to
+            <code>char</code>s; subsequent modification of the <code>int</code> array does not
+            affect the newly created string.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>codePoints</code> - Array that is the source of Unicode code points</dd><dd><code>offset</code> - The initial offset</dd><dd><code>count</code> - The length</dd>
+            <dt><span class="strong">Throws:</span></dt>
+            <dd><code><a href="../../java/lang/IllegalArgumentException.html" title="class in java.lang">IllegalArgumentException</a></code> - If any invalid Unicode code point is found in <code>codePoints</code></dd>
+            <dd><code><a href="../../java/lang/IndexOutOfBoundsException.html" title="class in java.lang">IndexOutOfBoundsException</a></code> - If the <code>offset</code> and <code>count</code> arguments index
+                characters outside the bounds of the <code>codePoints</code> array</dd><dt><span class="strong">Since:</span></dt>
+            <dd>1.5</dd></dl>
+    </li>
+</ul>
+<a name="String(byte[], int, int, int)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>String</h4>
+<pre><a href="../../java/lang/Deprecated.html" title="annotation in java.lang">@Deprecated</a>
+public&nbsp;String(byte[]&nbsp;ascii,
+                 int&nbsp;hibyte,
+                 int&nbsp;offset,
+                 int&nbsp;count)</pre>
+        <div class="block"><span class="strong">Deprecated.</span>&nbsp;<i>This method does not properly convert bytes into characters.
+            As of JDK&nbsp;1.1, the preferred way to do this is via the
+            <code>String</code> constructors that take a <a href="../../java/nio/charset/Charset.html" title="class in java.nio.charset"><code>Charset</code></a>, charset name, or that use the platform's
+            default charset.</i></div>
+        <div class="block">Allocates a new <code>String</code> constructed from a subarray of an array
+            of 8-bit integer values.
+
+            <p> The <code>offset</code> argument is the index of the first byte of the
+                subarray, and the <code>count</code> argument specifies the length of the
+                subarray.
+
+            <p> Each <code>byte</code> in the subarray is converted to a <code>char</code> as
+                specified in the method above.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>ascii</code> - The bytes to be converted to characters</dd><dd><code>hibyte</code> - The top 8 bits of each 16-bit Unicode code unit</dd><dd><code>offset</code> - The initial offset</dd><dd><code>count</code> - The length</dd>
+            <dt><span class="strong">Throws:</span></dt>
+            <dd><code><a href="../../java/lang/IndexOutOfBoundsException.html" title="class in java.lang">IndexOutOfBoundsException</a></code> - If the <code>offset</code> or <code>count</code> argument is invalid</dd><dt><span class="strong">See Also:</span></dt><dd><a href="../../java/lang/String.html#String(byte[], int)"><code>String(byte[], int)</code></a>,
+                <a href="../../java/lang/String.html#String(byte[], int, int, java.lang.String)"><code>String(byte[], int, int, java.lang.String)</code></a>,
+                <a href="../../java/lang/String.html#String(byte[], int, int, java.nio.charset.Charset)"><code>String(byte[], int, int, java.nio.charset.Charset)</code></a>,
+                <a href="../../java/lang/String.html#String(byte[], int, int)"><code>String(byte[], int, int)</code></a>,
+                <a href="../../java/lang/String.html#String(byte[], java.lang.String)"><code>String(byte[], java.lang.String)</code></a>,
+                <a href="../../java/lang/String.html#String(byte[], java.nio.charset.Charset)"><code>String(byte[], java.nio.charset.Charset)</code></a>,
+                <a href="../../java/lang/String.html#String(byte[])"><code>String(byte[])</code></a></dd></dl>
+    </li>
+</ul>
+<a name="String(byte[], int)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>String</h4>
+<pre><a href="../../java/lang/Deprecated.html" title="annotation in java.lang">@Deprecated</a>
+public&nbsp;String(byte[]&nbsp;ascii,
+                 int&nbsp;hibyte)</pre>
+        <div class="block"><span class="strong">Deprecated.</span>&nbsp;<i>This method does not properly convert bytes into
+            characters.  As of JDK&nbsp;1.1, the preferred way to do this is via the
+            <code>String</code> constructors that take a <a href="../../java/nio/charset/Charset.html" title="class in java.nio.charset"><code>Charset</code></a>, charset name, or that use the platform's
+            default charset.</i></div>
+        <div class="block">Allocates a new <code>String</code> containing characters constructed from
+            an array of 8-bit integer values. Each character <i>c</i>in the
+            resulting string is constructed from the corresponding component
+            <i>b</i> in the byte array such that:
+
+            <blockquote><pre>
+     <b><i>c</i></b> == (char)(((hibyte &amp; 0xff) &lt;&lt; 8)
+                         | (<b><i>b</i></b> &amp; 0xff))
+ </pre></blockquote></div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>ascii</code> - The bytes to be converted to characters</dd><dd><code>hibyte</code> - The top 8 bits of each 16-bit Unicode code unit</dd><dt><span class="strong">See Also:</span></dt><dd><a href="../../java/lang/String.html#String(byte[], int, int, java.lang.String)"><code>String(byte[], int, int, java.lang.String)</code></a>,
+            <a href="../../java/lang/String.html#String(byte[], int, int, java.nio.charset.Charset)"><code>String(byte[], int, int, java.nio.charset.Charset)</code></a>,
+            <a href="../../java/lang/String.html#String(byte[], int, int)"><code>String(byte[], int, int)</code></a>,
+            <a href="../../java/lang/String.html#String(byte[], java.lang.String)"><code>String(byte[], java.lang.String)</code></a>,
+            <a href="../../java/lang/String.html#String(byte[], java.nio.charset.Charset)"><code>String(byte[], java.nio.charset.Charset)</code></a>,
+            <a href="../../java/lang/String.html#String(byte[])"><code>String(byte[])</code></a></dd></dl>
+    </li>
+</ul>
+<a name="String(byte[], int, int, java.lang.String)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>String</h4>
+<pre>public&nbsp;String(byte[]&nbsp;bytes,
+      int&nbsp;offset,
+      int&nbsp;length,
+      <a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;charsetName)
+       throws <a href="../../java/io/UnsupportedEncodingException.html" title="class in java.io">UnsupportedEncodingException</a></pre>
+        <div class="block">Constructs a new <code>String</code> by decoding the specified subarray of
+            bytes using the specified charset.  The length of the new <code>String</code>
+            is a function of the charset, and hence may not be equal to the length
+            of the subarray.
+
+            <p> The behavior of this constructor when the given bytes are not valid
+                in the given charset is unspecified.  The <a href="../../java/nio/charset/CharsetDecoder.html" title="class in java.nio.charset"><code>CharsetDecoder</code></a> class should be used when more control
+                over the decoding process is required.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>bytes</code> - The bytes to be decoded into characters</dd><dd><code>offset</code> - The index of the first byte to decode</dd><dd><code>length</code> - The number of bytes to decode</dd><dd><code>charsetName</code> - The name of a supported <a href="../../java/nio/charset/Charset.html" title="class in java.nio.charset">charset</a></dd>
+            <dt><span class="strong">Throws:</span></dt>
+            <dd><code><a href="../../java/io/UnsupportedEncodingException.html" title="class in java.io">UnsupportedEncodingException</a></code> - If the named charset is not supported</dd>
+            <dd><code><a href="../../java/lang/IndexOutOfBoundsException.html" title="class in java.lang">IndexOutOfBoundsException</a></code> - If the <code>offset</code> and <code>length</code> arguments index
+                characters outside the bounds of the <code>bytes</code> array</dd><dt><span class="strong">Since:</span></dt>
+            <dd>JDK1.1</dd></dl>
+    </li>
+</ul>
+<a name="String(byte[], int, int, java.nio.charset.Charset)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>String</h4>
+<pre>public&nbsp;String(byte[]&nbsp;bytes,
+      int&nbsp;offset,
+      int&nbsp;length,
+      <a href="../../java/nio/charset/Charset.html" title="class in java.nio.charset">Charset</a>&nbsp;charset)</pre>
+        <div class="block">Constructs a new <code>String</code> by decoding the specified subarray of
+            bytes using the specified <a href="../../java/nio/charset/Charset.html" title="class in java.nio.charset">charset</a>.
+            The length of the new <code>String</code> is a function of the charset, and
+            hence may not be equal to the length of the subarray.
+
+            <p> This method always replaces malformed-input and unmappable-character
+                sequences with this charset's default replacement string.  The <a href="../../java/nio/charset/CharsetDecoder.html" title="class in java.nio.charset"><code>CharsetDecoder</code></a> class should be used when more control
+                over the decoding process is required.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>bytes</code> - The bytes to be decoded into characters</dd><dd><code>offset</code> - The index of the first byte to decode</dd><dd><code>length</code> - The number of bytes to decode</dd><dd><code>charset</code> - The <a href="../../java/nio/charset/Charset.html" title="class in java.nio.charset">charset</a> to be used to
+            decode the <code>bytes</code></dd>
+            <dt><span class="strong">Throws:</span></dt>
+            <dd><code><a href="../../java/lang/IndexOutOfBoundsException.html" title="class in java.lang">IndexOutOfBoundsException</a></code> - If the <code>offset</code> and <code>length</code> arguments index
+                characters outside the bounds of the <code>bytes</code> array</dd><dt><span class="strong">Since:</span></dt>
+            <dd>1.6</dd></dl>
+    </li>
+</ul>
+<a name="String(byte[], java.lang.String)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>String</h4>
+<pre>public&nbsp;String(byte[]&nbsp;bytes,
+      <a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;charsetName)
+       throws <a href="../../java/io/UnsupportedEncodingException.html" title="class in java.io">UnsupportedEncodingException</a></pre>
+        <div class="block">Constructs a new <code>String</code> by decoding the specified array of bytes
+            using the specified <a href="../../java/nio/charset/Charset.html" title="class in java.nio.charset">charset</a>.  The
+            length of the new <code>String</code> is a function of the charset, and hence
+            may not be equal to the length of the byte array.
+
+            <p> The behavior of this constructor when the given bytes are not valid
+                in the given charset is unspecified.  The <a href="../../java/nio/charset/CharsetDecoder.html" title="class in java.nio.charset"><code>CharsetDecoder</code></a> class should be used when more control
+                over the decoding process is required.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>bytes</code> - The bytes to be decoded into characters</dd><dd><code>charsetName</code> - The name of a supported <a href="../../java/nio/charset/Charset.html" title="class in java.nio.charset">charset</a></dd>
+            <dt><span class="strong">Throws:</span></dt>
+            <dd><code><a href="../../java/io/UnsupportedEncodingException.html" title="class in java.io">UnsupportedEncodingException</a></code> - If the named charset is not supported</dd><dt><span class="strong">Since:</span></dt>
+            <dd>JDK1.1</dd></dl>
+    </li>
+</ul>
+<a name="String(byte[], java.nio.charset.Charset)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>String</h4>
+<pre>public&nbsp;String(byte[]&nbsp;bytes,
+      <a href="../../java/nio/charset/Charset.html" title="class in java.nio.charset">Charset</a>&nbsp;charset)</pre>
+        <div class="block">Constructs a new <code>String</code> by decoding the specified array of
+            bytes using the specified <a href="../../java/nio/charset/Charset.html" title="class in java.nio.charset">charset</a>.
+            The length of the new <code>String</code> is a function of the charset, and
+            hence may not be equal to the length of the byte array.
+
+            <p> This method always replaces malformed-input and unmappable-character
+                sequences with this charset's default replacement string.  The <a href="../../java/nio/charset/CharsetDecoder.html" title="class in java.nio.charset"><code>CharsetDecoder</code></a> class should be used when more control
+                over the decoding process is required.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>bytes</code> - The bytes to be decoded into characters</dd><dd><code>charset</code> - The <a href="../../java/nio/charset/Charset.html" title="class in java.nio.charset">charset</a> to be used to
+            decode the <code>bytes</code></dd><dt><span class="strong">Since:</span></dt>
+            <dd>1.6</dd></dl>
+    </li>
+</ul>
+<a name="String(byte[], int, int)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>String</h4>
+<pre>public&nbsp;String(byte[]&nbsp;bytes,
+      int&nbsp;offset,
+      int&nbsp;length)</pre>
+        <div class="block">Constructs a new <code>String</code> by decoding the specified subarray of
+            bytes using the platform's default charset.  The length of the new
+            <code>String</code> is a function of the charset, and hence may not be equal
+            to the length of the subarray.
+
+            <p> The behavior of this constructor when the given bytes are not valid
+                in the default charset is unspecified.  The <a href="../../java/nio/charset/CharsetDecoder.html" title="class in java.nio.charset"><code>CharsetDecoder</code></a> class should be used when more control
+                over the decoding process is required.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>bytes</code> - The bytes to be decoded into characters</dd><dd><code>offset</code> - The index of the first byte to decode</dd><dd><code>length</code> - The number of bytes to decode</dd>
+            <dt><span class="strong">Throws:</span></dt>
+            <dd><code><a href="../../java/lang/IndexOutOfBoundsException.html" title="class in java.lang">IndexOutOfBoundsException</a></code> - If the <code>offset</code> and the <code>length</code> arguments index
+                characters outside the bounds of the <code>bytes</code> array</dd><dt><span class="strong">Since:</span></dt>
+            <dd>JDK1.1</dd></dl>
+    </li>
+</ul>
+<a name="String(byte[])">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>String</h4>
+        <pre>public&nbsp;String(byte[]&nbsp;bytes)</pre>
+        <div class="block">Constructs a new <code>String</code> by decoding the specified array of bytes
+            using the platform's default charset.  The length of the new <code>String</code> is a function of the charset, and hence may not be equal to the
+            length of the byte array.
+
+            <p> The behavior of this constructor when the given bytes are not valid
+                in the default charset is unspecified.  The <a href="../../java/nio/charset/CharsetDecoder.html" title="class in java.nio.charset"><code>CharsetDecoder</code></a> class should be used when more control
+                over the decoding process is required.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>bytes</code> - The bytes to be decoded into characters</dd><dt><span class="strong">Since:</span></dt>
+            <dd>JDK1.1</dd></dl>
+    </li>
+</ul>
+<a name="String(java.lang.StringBuffer)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>String</h4>
+        <pre>public&nbsp;String(<a href="../../java/lang/StringBuffer.html" title="class in java.lang">StringBuffer</a>&nbsp;buffer)</pre>
+        <div class="block">Allocates a new string that contains the sequence of characters
+            currently contained in the string buffer argument. The contents of the
+            string buffer are copied; subsequent modification of the string buffer
+            does not affect the newly created string.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>buffer</code> - A <code>StringBuffer</code></dd></dl>
+    </li>
+</ul>
+<a name="String(java.lang.StringBuilder)">
+    <!--   -->
+</a>
+<ul class="blockListLast">
+    <li class="blockList">
+        <h4>String</h4>
+        <pre>public&nbsp;String(<a href="../../java/lang/StringBuilder.html" title="class in java.lang">StringBuilder</a>&nbsp;builder)</pre>
+        <div class="block">Allocates a new string that contains the sequence of characters
+            currently contained in the string builder argument. The contents of the
+            string builder are copied; subsequent modification of the string builder
+            does not affect the newly created string.
+
+            <p> This constructor is provided to ease migration to <code>StringBuilder</code>. Obtaining a string from a string builder via the <code>toString</code> method is likely to run faster and is generally preferred.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>builder</code> - A <code>StringBuilder</code></dd><dt><span class="strong">Since:</span></dt>
+            <dd>1.5</dd></dl>
+    </li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_detail">
+    <!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="length()">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>length</h4>
+        <pre>public&nbsp;int&nbsp;length()</pre>
+        <div class="block">Returns the length of this string.
+            The length is equal to the number of <a href="Character.html#unicode">Unicode
+                code units</a> in the string.</div>
+        <dl>
+            <dt><strong>Specified by:</strong></dt>
+            <dd><code><a href="../../java/lang/CharSequence.html#length()">length</a></code>&nbsp;in interface&nbsp;<code><a href="../../java/lang/CharSequence.html" title="interface in java.lang">CharSequence</a></code></dd>
+            <dt><span class="strong">Returns:</span></dt><dd>the length of the sequence of characters represented by this
+            object.</dd></dl>
+    </li>
+</ul>
+<a name="isEmpty()">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>isEmpty</h4>
+        <pre>public&nbsp;boolean&nbsp;isEmpty()</pre>
+        <div class="block">Returns <tt>true</tt> if, and only if, <a href="../../java/lang/String.html#length()"><code>length()</code></a> is <tt>0</tt>.</div>
+        <dl><dt><span class="strong">Returns:</span></dt><dd><tt>true</tt> if <a href="../../java/lang/String.html#length()"><code>length()</code></a> is <tt>0</tt>, otherwise
+            <tt>false</tt></dd><dt><span class="strong">Since:</span></dt>
+            <dd>1.6</dd></dl>
+    </li>
+</ul>
+<a name="charAt(int)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>charAt</h4>
+        <pre>public&nbsp;char&nbsp;charAt(int&nbsp;index)</pre>
+        <div class="block">Returns the <code>char</code> value at the
+            specified index. An index ranges from <code>0</code> to
+            <code>length() - 1</code>. The first <code>char</code> value of the sequence
+            is at index <code>0</code>, the next at index <code>1</code>,
+            and so on, as for array indexing.
+
+            <p>If the <code>char</code> value specified by the index is a
+                <a href="Character.html#unicode">surrogate</a>, the surrogate
+                value is returned.</div>
+        <dl>
+            <dt><strong>Specified by:</strong></dt>
+            <dd><code><a href="../../java/lang/CharSequence.html#charAt(int)">charAt</a></code>&nbsp;in interface&nbsp;<code><a href="../../java/lang/CharSequence.html" title="interface in java.lang">CharSequence</a></code></dd>
+            <dt><span class="strong">Parameters:</span></dt><dd><code>index</code> - the index of the <code>char</code> value.</dd>
+            <dt><span class="strong">Returns:</span></dt><dd>the <code>char</code> value at the specified index of this string.
+            The first <code>char</code> value is at index <code>0</code>.</dd>
+            <dt><span class="strong">Throws:</span></dt>
+            <dd><code><a href="../../java/lang/IndexOutOfBoundsException.html" title="class in java.lang">IndexOutOfBoundsException</a></code> - if the <code>index</code>
+                argument is negative or not less than the length of this
+                string.</dd></dl>
+    </li>
+</ul>
+<a name="codePointAt(int)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>codePointAt</h4>
+        <pre>public&nbsp;int&nbsp;codePointAt(int&nbsp;index)</pre>
+        <div class="block">Returns the character (Unicode code point) at the specified
+            index. The index refers to <code>char</code> values
+            (Unicode code units) and ranges from <code>0</code> to
+            <a href="../../java/lang/String.html#length()"><code>length()</code></a><code> - 1</code>.
+
+            <p> If the <code>char</code> value specified at the given index
+                is in the high-surrogate range, the following index is less
+                than the length of this <code>String</code>, and the
+                <code>char</code> value at the following index is in the
+                low-surrogate range, then the supplementary code point
+                corresponding to this surrogate pair is returned. Otherwise,
+                the <code>char</code> value at the given index is returned.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>index</code> - the index to the <code>char</code> values</dd>
+            <dt><span class="strong">Returns:</span></dt><dd>the code point value of the character at the
+                <code>index</code></dd>
+            <dt><span class="strong">Throws:</span></dt>
+            <dd><code><a href="../../java/lang/IndexOutOfBoundsException.html" title="class in java.lang">IndexOutOfBoundsException</a></code> - if the <code>index</code>
+                argument is negative or not less than the length of this
+                string.</dd><dt><span class="strong">Since:</span></dt>
+            <dd>1.5</dd></dl>
+    </li>
+</ul>
+<a name="codePointBefore(int)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>codePointBefore</h4>
+        <pre>public&nbsp;int&nbsp;codePointBefore(int&nbsp;index)</pre>
+        <div class="block">Returns the character (Unicode code point) before the specified
+            index. The index refers to <code>char</code> values
+            (Unicode code units) and ranges from <code>1</code> to <a href="../../java/lang/CharSequence.html#length()"><code>length</code></a>.
+
+            <p> If the <code>char</code> value at <code>(index - 1)</code>
+                is in the low-surrogate range, <code>(index - 2)</code> is not
+                negative, and the <code>char</code> value at <code>(index -
+                    2)</code> is in the high-surrogate range, then the
+                supplementary code point value of the surrogate pair is
+                returned. If the <code>char</code> value at <code>index -
+                    1</code> is an unpaired low-surrogate or a high-surrogate, the
+                surrogate value is returned.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>index</code> - the index following the code point that should be returned</dd>
+            <dt><span class="strong">Returns:</span></dt><dd>the Unicode code point value before the given index.</dd>
+            <dt><span class="strong">Throws:</span></dt>
+            <dd><code><a href="../../java/lang/IndexOutOfBoundsException.html" title="class in java.lang">IndexOutOfBoundsException</a></code> - if the <code>index</code>
+                argument is less than 1 or greater than the length
+                of this string.</dd><dt><span class="strong">Since:</span></dt>
+            <dd>1.5</dd></dl>
+    </li>
+</ul>
+<a name="codePointCount(int, int)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>codePointCount</h4>
+<pre>public&nbsp;int&nbsp;codePointCount(int&nbsp;beginIndex,
+                 int&nbsp;endIndex)</pre>
+        <div class="block">Returns the number of Unicode code points in the specified text
+            range of this <code>String</code>. The text range begins at the
+            specified <code>beginIndex</code> and extends to the
+            <code>char</code> at index <code>endIndex - 1</code>. Thus the
+            length (in <code>char</code>s) of the text range is
+            <code>endIndex-beginIndex</code>. Unpaired surrogates within
+            the text range count as one code point each.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>beginIndex</code> - the index to the first <code>char</code> of
+            the text range.</dd><dd><code>endIndex</code> - the index after the last <code>char</code> of
+            the text range.</dd>
+            <dt><span class="strong">Returns:</span></dt><dd>the number of Unicode code points in the specified text
+                range</dd>
+            <dt><span class="strong">Throws:</span></dt>
+            <dd><code><a href="../../java/lang/IndexOutOfBoundsException.html" title="class in java.lang">IndexOutOfBoundsException</a></code> - if the
+                <code>beginIndex</code> is negative, or <code>endIndex</code>
+                is larger than the length of this <code>String</code>, or
+                <code>beginIndex</code> is larger than <code>endIndex</code>.</dd><dt><span class="strong">Since:</span></dt>
+            <dd>1.5</dd></dl>
+    </li>
+</ul>
+<a name="offsetByCodePoints(int, int)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>offsetByCodePoints</h4>
+<pre>public&nbsp;int&nbsp;offsetByCodePoints(int&nbsp;index,
+                     int&nbsp;codePointOffset)</pre>
+        <div class="block">Returns the index within this <code>String</code> that is
+            offset from the given <code>index</code> by
+            <code>codePointOffset</code> code points. Unpaired surrogates
+            within the text range given by <code>index</code> and
+            <code>codePointOffset</code> count as one code point each.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>index</code> - the index to be offset</dd><dd><code>codePointOffset</code> - the offset in code points</dd>
+            <dt><span class="strong">Returns:</span></dt><dd>the index within this <code>String</code></dd>
+            <dt><span class="strong">Throws:</span></dt>
+            <dd><code><a href="../../java/lang/IndexOutOfBoundsException.html" title="class in java.lang">IndexOutOfBoundsException</a></code> - if <code>index</code>
+                is negative or larger then the length of this
+                <code>String</code>, or if <code>codePointOffset</code> is positive
+                and the substring starting with <code>index</code> has fewer
+                than <code>codePointOffset</code> code points,
+                or if <code>codePointOffset</code> is negative and the substring
+                before <code>index</code> has fewer than the absolute value
+                of <code>codePointOffset</code> code points.</dd><dt><span class="strong">Since:</span></dt>
+            <dd>1.5</dd></dl>
+    </li>
+</ul>
+<a name="getChars(int, int, char[], int)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>getChars</h4>
+<pre>public&nbsp;void&nbsp;getChars(int&nbsp;srcBegin,
+            int&nbsp;srcEnd,
+            char[]&nbsp;dst,
+            int&nbsp;dstBegin)</pre>
+        <div class="block">Copies characters from this string into the destination character
+            array.
+            <p>
+                The first character to be copied is at index <code>srcBegin</code>;
+                the last character to be copied is at index <code>srcEnd-1</code>
+                (thus the total number of characters to be copied is
+                <code>srcEnd-srcBegin</code>). The characters are copied into the
+                subarray of <code>dst</code> starting at index <code>dstBegin</code>
+                and ending at index:
+            <p><blockquote><pre>
+     dstbegin + (srcEnd-srcBegin) - 1
+ </pre></blockquote></div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>srcBegin</code> - index of the first character in the string
+            to copy.</dd><dd><code>srcEnd</code> - index after the last character in the string
+            to copy.</dd><dd><code>dst</code> - the destination array.</dd><dd><code>dstBegin</code> - the start offset in the destination array.</dd>
+            <dt><span class="strong">Throws:</span></dt>
+            <dd><code><a href="../../java/lang/IndexOutOfBoundsException.html" title="class in java.lang">IndexOutOfBoundsException</a></code> - If any of the following
+                is true:
+                <ul><li><code>srcBegin</code> is negative.
+                    <li><code>srcBegin</code> is greater than <code>srcEnd</code>
+                    <li><code>srcEnd</code> is greater than the length of this
+                        string
+                    <li><code>dstBegin</code> is negative
+                    <li><code>dstBegin+(srcEnd-srcBegin)</code> is larger than
+                        <code>dst.length</code></ul></dd></dl>
+    </li>
+</ul>
+<a name="getBytes(int, int, byte[], int)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>getBytes</h4>
+<pre><a href="../../java/lang/Deprecated.html" title="annotation in java.lang">@Deprecated</a>
+public&nbsp;void&nbsp;getBytes(int&nbsp;srcBegin,
+                       int&nbsp;srcEnd,
+                       byte[]&nbsp;dst,
+                       int&nbsp;dstBegin)</pre>
+        <div class="block"><span class="strong">Deprecated.</span>&nbsp;<i>This method does not properly convert characters into
+            bytes.  As of JDK&nbsp;1.1, the preferred way to do this is via the
+            <a href="../../java/lang/String.html#getBytes()"><code>getBytes()</code></a> method, which uses the platform's default charset.</i></div>
+        <div class="block">Copies characters from this string into the destination byte array. Each
+            byte receives the 8 low-order bits of the corresponding character. The
+            eight high-order bits of each character are not copied and do not
+            participate in the transfer in any way.
+
+            <p> The first character to be copied is at index <code>srcBegin</code>; the
+                last character to be copied is at index <code>srcEnd-1</code>.  The total
+                number of characters to be copied is <code>srcEnd-srcBegin</code>. The
+                characters, converted to bytes, are copied into the subarray of <code>dst</code> starting at index <code>dstBegin</code> and ending at index:
+
+            <blockquote><pre>
+     dstbegin + (srcEnd-srcBegin) - 1
+ </pre></blockquote></div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>srcBegin</code> - Index of the first character in the string to copy</dd><dd><code>srcEnd</code> - Index after the last character in the string to copy</dd><dd><code>dst</code> - The destination array</dd><dd><code>dstBegin</code> - The start offset in the destination array</dd>
+            <dt><span class="strong">Throws:</span></dt>
+            <dd><code><a href="../../java/lang/IndexOutOfBoundsException.html" title="class in java.lang">IndexOutOfBoundsException</a></code> - If any of the following is true:
+                <ul>
+                    <li> <code>srcBegin</code> is negative
+                    <li> <code>srcBegin</code> is greater than <code>srcEnd</code>
+                    <li> <code>srcEnd</code> is greater than the length of this String
+                    <li> <code>dstBegin</code> is negative
+                    <li> <code>dstBegin+(srcEnd-srcBegin)</code> is larger than <code>dst.length</code>
+                </ul></dd></dl>
+    </li>
+</ul>
+<a name="getBytes(java.lang.String)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>getBytes</h4>
+<pre>public&nbsp;byte[]&nbsp;getBytes(<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;charsetName)
+                throws <a href="../../java/io/UnsupportedEncodingException.html" title="class in java.io">UnsupportedEncodingException</a></pre>
+        <div class="block">Encodes this <code>String</code> into a sequence of bytes using the named
+            charset, storing the result into a new byte array.
+
+            <p> The behavior of this method when this string cannot be encoded in
+                the given charset is unspecified.  The <a href="../../java/nio/charset/CharsetEncoder.html" title="class in java.nio.charset"><code>CharsetEncoder</code></a> class should be used when more control
+                over the encoding process is required.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>charsetName</code> - The name of a supported <a href="../../java/nio/charset/Charset.html" title="class in java.nio.charset">charset</a></dd>
+            <dt><span class="strong">Returns:</span></dt><dd>The resultant byte array</dd>
+            <dt><span class="strong">Throws:</span></dt>
+            <dd><code><a href="../../java/io/UnsupportedEncodingException.html" title="class in java.io">UnsupportedEncodingException</a></code> - If the named charset is not supported</dd><dt><span class="strong">Since:</span></dt>
+            <dd>JDK1.1</dd></dl>
+    </li>
+</ul>
+<a name="getBytes(java.nio.charset.Charset)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>getBytes</h4>
+        <pre>public&nbsp;byte[]&nbsp;getBytes(<a href="../../java/nio/charset/Charset.html" title="class in java.nio.charset">Charset</a>&nbsp;charset)</pre>
+        <div class="block">Encodes this <code>String</code> into a sequence of bytes using the given
+            <a href="../../java/nio/charset/Charset.html" title="class in java.nio.charset">charset</a>, storing the result into a
+            new byte array.
+
+            <p> This method always replaces malformed-input and unmappable-character
+                sequences with this charset's default replacement byte array.  The
+                <a href="../../java/nio/charset/CharsetEncoder.html" title="class in java.nio.charset"><code>CharsetEncoder</code></a> class should be used when more
+                control over the encoding process is required.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>charset</code> - The <a href="../../java/nio/charset/Charset.html" title="class in java.nio.charset">Charset</a> to be used to encode
+            the <code>String</code></dd>
+            <dt><span class="strong">Returns:</span></dt><dd>The resultant byte array</dd><dt><span class="strong">Since:</span></dt>
+            <dd>1.6</dd></dl>
+    </li>
+</ul>
+<a name="getBytes()">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>getBytes</h4>
+        <pre>public&nbsp;byte[]&nbsp;getBytes()</pre>
+        <div class="block">Encodes this <code>String</code> into a sequence of bytes using the
+            platform's default charset, storing the result into a new byte array.
+
+            <p> The behavior of this method when this string cannot be encoded in
+                the default charset is unspecified.  The <a href="../../java/nio/charset/CharsetEncoder.html" title="class in java.nio.charset"><code>CharsetEncoder</code></a> class should be used when more control
+                over the encoding process is required.</div>
+        <dl><dt><span class="strong">Returns:</span></dt><dd>The resultant byte array</dd><dt><span class="strong">Since:</span></dt>
+            <dd>JDK1.1</dd></dl>
+    </li>
+</ul>
+<a name="equals(java.lang.Object)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>equals</h4>
+        <pre>public&nbsp;boolean&nbsp;equals(<a href="../../java/lang/Object.html" title="class in java.lang">Object</a>&nbsp;anObject)</pre>
+        <div class="block">Compares this string to the specified object.  The result is <code>true</code> if and only if the argument is not <code>null</code> and is a <code>String</code> object that represents the same sequence of characters as this
+            object.</div>
+        <dl>
+            <dt><strong>Overrides:</strong></dt>
+            <dd><code><a href="../../java/lang/Object.html#equals(java.lang.Object)">equals</a></code>&nbsp;in class&nbsp;<code><a href="../../java/lang/Object.html" title="class in java.lang">Object</a></code></dd>
+            <dt><span class="strong">Parameters:</span></dt><dd><code>anObject</code> - The object to compare this <code>String</code> against</dd>
+            <dt><span class="strong">Returns:</span></dt><dd><code>true</code> if the given object represents a <code>String</code>
+            equivalent to this string, <code>false</code> otherwise</dd><dt><span class="strong">See Also:</span></dt><dd><a href="../../java/lang/String.html#compareTo(java.lang.String)"><code>compareTo(String)</code></a>,
+            <a href="../../java/lang/String.html#equalsIgnoreCase(java.lang.String)"><code>equalsIgnoreCase(String)</code></a></dd></dl>
+    </li>
+</ul>
+<a name="contentEquals(java.lang.StringBuffer)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>contentEquals</h4>
+        <pre>public&nbsp;boolean&nbsp;contentEquals(<a href="../../java/lang/StringBuffer.html" title="class in java.lang">StringBuffer</a>&nbsp;sb)</pre>
+        <div class="block">Compares this string to the specified <code>StringBuffer</code>.  The result
+            is <code>true</code> if and only if this <code>String</code> represents the same
+            sequence of characters as the specified <code>StringBuffer</code>.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>sb</code> - The <code>StringBuffer</code> to compare this <code>String</code> against</dd>
+            <dt><span class="strong">Returns:</span></dt><dd><code>true</code> if this <code>String</code> represents the same
+                sequence of characters as the specified <code>StringBuffer</code>,
+                <code>false</code> otherwise</dd><dt><span class="strong">Since:</span></dt>
+            <dd>1.4</dd></dl>
+    </li>
+</ul>
+<a name="contentEquals(java.lang.CharSequence)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>contentEquals</h4>
+        <pre>public&nbsp;boolean&nbsp;contentEquals(<a href="../../java/lang/CharSequence.html" title="interface in java.lang">CharSequence</a>&nbsp;cs)</pre>
+        <div class="block">Compares this string to the specified <code>CharSequence</code>.  The result
+            is <code>true</code> if and only if this <code>String</code> represents the same
+            sequence of char values as the specified sequence.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>cs</code> - The sequence to compare this <code>String</code> against</dd>
+            <dt><span class="strong">Returns:</span></dt><dd><code>true</code> if this <code>String</code> represents the same
+                sequence of char values as the specified sequence, <code>false</code> otherwise</dd><dt><span class="strong">Since:</span></dt>
+            <dd>1.5</dd></dl>
+    </li>
+</ul>
+<a name="equalsIgnoreCase(java.lang.String)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>equalsIgnoreCase</h4>
+        <pre>public&nbsp;boolean&nbsp;equalsIgnoreCase(<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;anotherString)</pre>
+        <div class="block">Compares this <code>String</code> to another <code>String</code>, ignoring case
+            considerations.  Two strings are considered equal ignoring case if they
+            are of the same length and corresponding characters in the two strings
+            are equal ignoring case.
+
+            <p> Two characters <code>c1</code> and <code>c2</code> are considered the same
+                ignoring case if at least one of the following is true:
+            <ul>
+                <li> The two characters are the same (as compared by the
+                    <code>==</code> operator)
+                <li> Applying the method <a href="../../java/lang/Character.html#toUpperCase(char)"><code>Character.toUpperCase(char)</code></a> to each character
+                    produces the same result
+                <li> Applying the method <a href="../../java/lang/Character.html#toLowerCase(char)"><code>Character.toLowerCase(char)</code></a> to each character
+                    produces the same result
+            </ul></div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>anotherString</code> - The <code>String</code> to compare this <code>String</code> against</dd>
+            <dt><span class="strong">Returns:</span></dt><dd><code>true</code> if the argument is not <code>null</code> and it
+                represents an equivalent <code>String</code> ignoring case; <code>false</code> otherwise</dd><dt><span class="strong">See Also:</span></dt><dd><a href="../../java/lang/String.html#equals(java.lang.Object)"><code>equals(Object)</code></a></dd></dl>
+    </li>
+</ul>
+<a name="compareTo(java.lang.String)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>compareTo</h4>
+        <pre>public&nbsp;int&nbsp;compareTo(<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;anotherString)</pre>
+        <div class="block">Compares two strings lexicographically.
+            The comparison is based on the Unicode value of each character in
+            the strings. The character sequence represented by this
+            <code>String</code> object is compared lexicographically to the
+            character sequence represented by the argument string. The result is
+            a negative integer if this <code>String</code> object
+            lexicographically precedes the argument string. The result is a
+            positive integer if this <code>String</code> object lexicographically
+            follows the argument string. The result is zero if the strings
+            are equal; <code>compareTo</code> returns <code>0</code> exactly when
+            the <a href="../../java/lang/String.html#equals(java.lang.Object)"><code>equals(Object)</code></a> method would return <code>true</code>.
+            <p>
+                This is the definition of lexicographic ordering. If two strings are
+                different, then either they have different characters at some index
+                that is a valid index for both strings, or their lengths are different,
+                or both. If they have different characters at one or more index
+                positions, let <i>k</i> be the smallest such index; then the string
+                whose character at position <i>k</i> has the smaller value, as
+                determined by using the &lt; operator, lexicographically precedes the
+                other string. In this case, <code>compareTo</code> returns the
+                difference of the two character values at position <code>k</code> in
+                the two string -- that is, the value:
+            <blockquote><pre>
+ this.charAt(k)-anotherString.charAt(k)
+ </pre></blockquote>
+            If there is no index position at which they differ, then the shorter
+            string lexicographically precedes the longer string. In this case,
+            <code>compareTo</code> returns the difference of the lengths of the
+            strings -- that is, the value:
+            <blockquote><pre>
+ this.length()-anotherString.length()
+ </pre></blockquote></div>
+        <dl>
+            <dt><strong>Specified by:</strong></dt>
+            <dd><code><a href="../../java/lang/Comparable.html#compareTo(T)">compareTo</a></code>&nbsp;in interface&nbsp;<code><a href="../../java/lang/Comparable.html" title="interface in java.lang">Comparable</a>&lt;<a href="../../java/lang/String.html" title="class in java.lang">String</a>&gt;</code></dd>
+            <dt><span class="strong">Parameters:</span></dt><dd><code>anotherString</code> - the <code>String</code> to be compared.</dd>
+            <dt><span class="strong">Returns:</span></dt><dd>the value <code>0</code> if the argument string is equal to
+            this string; a value less than <code>0</code> if this string
+            is lexicographically less than the string argument; and a
+            value greater than <code>0</code> if this string is
+            lexicographically greater than the string argument.</dd></dl>
+    </li>
+</ul>
+<a name="compareToIgnoreCase(java.lang.String)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>compareToIgnoreCase</h4>
+        <pre>public&nbsp;int&nbsp;compareToIgnoreCase(<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;str)</pre>
+        <div class="block">Compares two strings lexicographically, ignoring case
+            differences. This method returns an integer whose sign is that of
+            calling <code>compareTo</code> with normalized versions of the strings
+            where case differences have been eliminated by calling
+            <code>Character.toLowerCase(Character.toUpperCase(character))</code> on
+            each character.
+            <p>
+                Note that this method does <em>not</em> take locale into account,
+                and will result in an unsatisfactory ordering for certain locales.
+                The java.text package provides <em>collators</em> to allow
+                locale-sensitive ordering.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>str</code> - the <code>String</code> to be compared.</dd>
+            <dt><span class="strong">Returns:</span></dt><dd>a negative integer, zero, or a positive integer as the
+                specified String is greater than, equal to, or less
+                than this String, ignoring case considerations.</dd><dt><span class="strong">Since:</span></dt>
+            <dd>1.2</dd>
+            <dt><span class="strong">See Also:</span></dt><dd><a href="../../java/text/Collator.html#compare(java.lang.String, java.lang.String)"><code>Collator.compare(String, String)</code></a></dd></dl>
+    </li>
+</ul>
+<a name="regionMatches(int, java.lang.String, int, int)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>regionMatches</h4>
+<pre>public&nbsp;boolean&nbsp;regionMatches(int&nbsp;toffset,
+                    <a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;other,
+                    int&nbsp;ooffset,
+                    int&nbsp;len)</pre>
+        <div class="block">Tests if two string regions are equal.
+            <p>
+                A substring of this <tt>String</tt> object is compared to a substring
+                of the argument other. The result is true if these substrings
+                represent identical character sequences. The substring of this
+                <tt>String</tt> object to be compared begins at index <tt>toffset</tt>
+                and has length <tt>len</tt>. The substring of other to be compared
+                begins at index <tt>ooffset</tt> and has length <tt>len</tt>. The
+                result is <tt>false</tt> if and only if at least one of the following
+                is true:
+            <ul><li><tt>toffset</tt> is negative.
+                <li><tt>ooffset</tt> is negative.
+                <li><tt>toffset+len</tt> is greater than the length of this
+                    <tt>String</tt> object.
+                <li><tt>ooffset+len</tt> is greater than the length of the other
+                    argument.
+                <li>There is some nonnegative integer <i>k</i> less than <tt>len</tt>
+                    such that:
+                    <tt>this.charAt(toffset+<i>k</i>)&nbsp;!=&nbsp;other.charAt(ooffset+<i>k</i>)</tt>
+            </ul></div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>toffset</code> - the starting offset of the subregion in this string.</dd><dd><code>other</code> - the string argument.</dd><dd><code>ooffset</code> - the starting offset of the subregion in the string
+            argument.</dd><dd><code>len</code> - the number of characters to compare.</dd>
+            <dt><span class="strong">Returns:</span></dt><dd><code>true</code> if the specified subregion of this string
+                exactly matches the specified subregion of the string argument;
+                <code>false</code> otherwise.</dd></dl>
+    </li>
+</ul>
+<a name="regionMatches(boolean, int, java.lang.String, int, int)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>regionMatches</h4>
+<pre>public&nbsp;boolean&nbsp;regionMatches(boolean&nbsp;ignoreCase,
+                    int&nbsp;toffset,
+                    <a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;other,
+                    int&nbsp;ooffset,
+                    int&nbsp;len)</pre>
+        <div class="block">Tests if two string regions are equal.
+            <p>
+                A substring of this <tt>String</tt> object is compared to a substring
+                of the argument <tt>other</tt>. The result is <tt>true</tt> if these
+                substrings represent character sequences that are the same, ignoring
+                case if and only if <tt>ignoreCase</tt> is true. The substring of
+                this <tt>String</tt> object to be compared begins at index
+                <tt>toffset</tt> and has length <tt>len</tt>. The substring of
+                <tt>other</tt> to be compared begins at index <tt>ooffset</tt> and
+                has length <tt>len</tt>. The result is <tt>false</tt> if and only if
+                at least one of the following is true:
+            <ul><li><tt>toffset</tt> is negative.
+                <li><tt>ooffset</tt> is negative.
+                <li><tt>toffset+len</tt> is greater than the length of this
+                    <tt>String</tt> object.
+                <li><tt>ooffset+len</tt> is greater than the length of the other
+                    argument.
+                <li><tt>ignoreCase</tt> is <tt>false</tt> and there is some nonnegative
+                    integer <i>k</i> less than <tt>len</tt> such that:
+                    <blockquote><pre>
+ this.charAt(toffset+k) != other.charAt(ooffset+k)
+ </pre></blockquote>
+                <li><tt>ignoreCase</tt> is <tt>true</tt> and there is some nonnegative
+                    integer <i>k</i> less than <tt>len</tt> such that:
+                    <blockquote><pre>
+ Character.toLowerCase(this.charAt(toffset+k)) !=
+               Character.toLowerCase(other.charAt(ooffset+k))
+ </pre></blockquote>
+                    and:
+                    <blockquote><pre>
+ Character.toUpperCase(this.charAt(toffset+k)) !=
+         Character.toUpperCase(other.charAt(ooffset+k))
+ </pre></blockquote>
+            </ul></div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>ignoreCase</code> - if <code>true</code>, ignore case when comparing
+            characters.</dd><dd><code>toffset</code> - the starting offset of the subregion in this
+            string.</dd><dd><code>other</code> - the string argument.</dd><dd><code>ooffset</code> - the starting offset of the subregion in the string
+            argument.</dd><dd><code>len</code> - the number of characters to compare.</dd>
+            <dt><span class="strong">Returns:</span></dt><dd><code>true</code> if the specified subregion of this string
+                matches the specified subregion of the string argument;
+                <code>false</code> otherwise. Whether the matching is exact
+                or case insensitive depends on the <code>ignoreCase</code>
+                argument.</dd></dl>
+    </li>
+</ul>
+<a name="startsWith(java.lang.String, int)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>startsWith</h4>
+<pre>public&nbsp;boolean&nbsp;startsWith(<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;prefix,
+                 int&nbsp;toffset)</pre>
+        <div class="block">Tests if the substring of this string beginning at the
+            specified index starts with the specified prefix.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>prefix</code> - the prefix.</dd><dd><code>toffset</code> - where to begin looking in this string.</dd>
+            <dt><span class="strong">Returns:</span></dt><dd><code>true</code> if the character sequence represented by the
+                argument is a prefix of the substring of this object starting
+                at index <code>toffset</code>; <code>false</code> otherwise.
+                The result is <code>false</code> if <code>toffset</code> is
+                negative or greater than the length of this
+                <code>String</code> object; otherwise the result is the same
+                as the result of the expression
+          <pre>
+          this.substring(toffset).startsWith(prefix)
+          </pre></dd></dl>
+    </li>
+</ul>
+<a name="startsWith(java.lang.String)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>startsWith</h4>
+        <pre>public&nbsp;boolean&nbsp;startsWith(<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;prefix)</pre>
+        <div class="block">Tests if this string starts with the specified prefix.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>prefix</code> - the prefix.</dd>
+            <dt><span class="strong">Returns:</span></dt><dd><code>true</code> if the character sequence represented by the
+                argument is a prefix of the character sequence represented by
+                this string; <code>false</code> otherwise.
+                Note also that <code>true</code> will be returned if the
+                argument is an empty string or is equal to this
+                <code>String</code> object as determined by the
+                <a href="../../java/lang/String.html#equals(java.lang.Object)"><code>equals(Object)</code></a> method.</dd><dt><span class="strong">Since:</span></dt>
+            <dd>1. 0</dd></dl>
+    </li>
+</ul>
+<a name="endsWith(java.lang.String)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>endsWith</h4>
+        <pre>public&nbsp;boolean&nbsp;endsWith(<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;suffix)</pre>
+        <div class="block">Tests if this string ends with the specified suffix.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>suffix</code> - the suffix.</dd>
+            <dt><span class="strong">Returns:</span></dt><dd><code>true</code> if the character sequence represented by the
+                argument is a suffix of the character sequence represented by
+                this object; <code>false</code> otherwise. Note that the
+                result will be <code>true</code> if the argument is the
+                empty string or is equal to this <code>String</code> object
+                as determined by the <a href="../../java/lang/String.html#equals(java.lang.Object)"><code>equals(Object)</code></a> method.</dd></dl>
+    </li>
+</ul>
+<a name="hashCode()">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>hashCode</h4>
+        <pre>public&nbsp;int&nbsp;hashCode()</pre>
+        <div class="block">Returns a hash code for this string. The hash code for a
+            <code>String</code> object is computed as
+            <blockquote><pre>
+ s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
+ </pre></blockquote>
+            using <code>int</code> arithmetic, where <code>s[i]</code> is the
+            <i>i</i>th character of the string, <code>n</code> is the length of
+            the string, and <code>^</code> indicates exponentiation.
+            (The hash value of the empty string is zero.)</div>
+        <dl>
+            <dt><strong>Overrides:</strong></dt>
+            <dd><code><a href="../../java/lang/Object.html#hashCode()">hashCode</a></code>&nbsp;in class&nbsp;<code><a href="../../java/lang/Object.html" title="class in java.lang">Object</a></code></dd>
+            <dt><span class="strong">Returns:</span></dt><dd>a hash code value for this object.</dd><dt><span class="strong">See Also:</span></dt><dd><a href="../../java/lang/Object.html#equals(java.lang.Object)"><code>Object.equals(java.lang.Object)</code></a>,
+            <a href="../../java/lang/System.html#identityHashCode(java.lang.Object)"><code>System.identityHashCode(java.lang.Object)</code></a></dd></dl>
+    </li>
+</ul>
+<a name="indexOf(int)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>indexOf</h4>
+        <pre>public&nbsp;int&nbsp;indexOf(int&nbsp;ch)</pre>
+        <div class="block">Returns the index within this string of the first occurrence of
+            the specified character. If a character with value
+            <code>ch</code> occurs in the character sequence represented by
+            this <code>String</code> object, then the index (in Unicode
+            code units) of the first such occurrence is returned. For
+            values of <code>ch</code> in the range from 0 to 0xFFFF
+            (inclusive), this is the smallest value <i>k</i> such that:
+            <blockquote><pre>
+ this.charAt(<i>k</i>) == ch
+ </pre></blockquote>
+            is true. For other values of <code>ch</code>, it is the
+            smallest value <i>k</i> such that:
+            <blockquote><pre>
+ this.codePointAt(<i>k</i>) == ch
+ </pre></blockquote>
+            is true. In either case, if no such character occurs in this
+            string, then <code>-1</code> is returned.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>ch</code> - a character (Unicode code point).</dd>
+            <dt><span class="strong">Returns:</span></dt><dd>the index of the first occurrence of the character in the
+                character sequence represented by this object, or
+                <code>-1</code> if the character does not occur.</dd></dl>
+    </li>
+</ul>
+<a name="indexOf(int, int)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>indexOf</h4>
+<pre>public&nbsp;int&nbsp;indexOf(int&nbsp;ch,
+          int&nbsp;fromIndex)</pre>
+        <div class="block">Returns the index within this string of the first occurrence of the
+            specified character, starting the search at the specified index.
+            <p>
+                If a character with value <code>ch</code> occurs in the
+                character sequence represented by this <code>String</code>
+                object at an index no smaller than <code>fromIndex</code>, then
+                the index of the first such occurrence is returned. For values
+                of <code>ch</code> in the range from 0 to 0xFFFF (inclusive),
+                this is the smallest value <i>k</i> such that:
+            <blockquote><pre>
+ (this.charAt(<i>k</i>) == ch) && (<i>k</i> &gt;= fromIndex)
+ </pre></blockquote>
+            is true. For other values of <code>ch</code>, it is the
+            smallest value <i>k</i> such that:
+            <blockquote><pre>
+ (this.codePointAt(<i>k</i>) == ch) && (<i>k</i> &gt;= fromIndex)
+ </pre></blockquote>
+            is true. In either case, if no such character occurs in this
+            string at or after position <code>fromIndex</code>, then
+            <code>-1</code> is returned.
+
+            <p>
+                There is no restriction on the value of <code>fromIndex</code>. If it
+                is negative, it has the same effect as if it were zero: this entire
+                string may be searched. If it is greater than the length of this
+                string, it has the same effect as if it were equal to the length of
+                this string: <code>-1</code> is returned.
+
+            <p>All indices are specified in <code>char</code> values
+                (Unicode code units).</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>ch</code> - a character (Unicode code point).</dd><dd><code>fromIndex</code> - the index to start the search from.</dd>
+            <dt><span class="strong">Returns:</span></dt><dd>the index of the first occurrence of the character in the
+                character sequence represented by this object that is greater
+                than or equal to <code>fromIndex</code>, or <code>-1</code>
+                if the character does not occur.</dd></dl>
+    </li>
+</ul>
+<a name="lastIndexOf(int)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>lastIndexOf</h4>
+        <pre>public&nbsp;int&nbsp;lastIndexOf(int&nbsp;ch)</pre>
+        <div class="block">Returns the index within this string of the last occurrence of
+            the specified character. For values of <code>ch</code> in the
+            range from 0 to 0xFFFF (inclusive), the index (in Unicode code
+            units) returned is the largest value <i>k</i> such that:
+            <blockquote><pre>
+ this.charAt(<i>k</i>) == ch
+ </pre></blockquote>
+            is true. For other values of <code>ch</code>, it is the
+            largest value <i>k</i> such that:
+            <blockquote><pre>
+ this.codePointAt(<i>k</i>) == ch
+ </pre></blockquote>
+            is true.  In either case, if no such character occurs in this
+            string, then <code>-1</code> is returned.  The
+            <code>String</code> is searched backwards starting at the last
+            character.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>ch</code> - a character (Unicode code point).</dd>
+            <dt><span class="strong">Returns:</span></dt><dd>the index of the last occurrence of the character in the
+                character sequence represented by this object, or
+                <code>-1</code> if the character does not occur.</dd></dl>
+    </li>
+</ul>
+<a name="lastIndexOf(int, int)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>lastIndexOf</h4>
+<pre>public&nbsp;int&nbsp;lastIndexOf(int&nbsp;ch,
+              int&nbsp;fromIndex)</pre>
+        <div class="block">Returns the index within this string of the last occurrence of
+            the specified character, searching backward starting at the
+            specified index. For values of <code>ch</code> in the range
+            from 0 to 0xFFFF (inclusive), the index returned is the largest
+            value <i>k</i> such that:
+            <blockquote><pre>
+ (this.charAt(<i>k</i>) == ch) && (<i>k</i> &lt;= fromIndex)
+ </pre></blockquote>
+            is true. For other values of <code>ch</code>, it is the
+            largest value <i>k</i> such that:
+            <blockquote><pre>
+ (this.codePointAt(<i>k</i>) == ch) && (<i>k</i> &lt;= fromIndex)
+ </pre></blockquote>
+            is true. In either case, if no such character occurs in this
+            string at or before position <code>fromIndex</code>, then
+            <code>-1</code> is returned.
+
+            <p>All indices are specified in <code>char</code> values
+                (Unicode code units).</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>ch</code> - a character (Unicode code point).</dd><dd><code>fromIndex</code> - the index to start the search from. There is no
+            restriction on the value of <code>fromIndex</code>. If it is
+            greater than or equal to the length of this string, it has
+            the same effect as if it were equal to one less than the
+            length of this string: this entire string may be searched.
+            If it is negative, it has the same effect as if it were -1:
+            -1 is returned.</dd>
+            <dt><span class="strong">Returns:</span></dt><dd>the index of the last occurrence of the character in the
+                character sequence represented by this object that is less
+                than or equal to <code>fromIndex</code>, or <code>-1</code>
+                if the character does not occur before that point.</dd></dl>
+    </li>
+</ul>
+<a name="indexOf(java.lang.String)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>indexOf</h4>
+        <pre>public&nbsp;int&nbsp;indexOf(<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;str)</pre>
+        <div class="block">Returns the index within this string of the first occurrence of the
+            specified substring.
+
+            <p>The returned index is the smallest value <i>k</i> for which:
+            <blockquote><pre>
+ this.startsWith(str, <i>k</i>)
+ </pre></blockquote>
+            If no such value of <i>k</i> exists, then <code>-1</code> is returned.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>str</code> - the substring to search for.</dd>
+            <dt><span class="strong">Returns:</span></dt><dd>the index of the first occurrence of the specified substring,
+                or <code>-1</code> if there is no such occurrence.</dd></dl>
+    </li>
+</ul>
+<a name="indexOf(java.lang.String, int)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>indexOf</h4>
+<pre>public&nbsp;int&nbsp;indexOf(<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;str,
+          int&nbsp;fromIndex)</pre>
+        <div class="block">Returns the index within this string of the first occurrence of the
+            specified substring, starting at the specified index.
+
+            <p>The returned index is the smallest value <i>k</i> for which:
+            <blockquote><pre>
+ <i>k</i> &gt;= fromIndex && this.startsWith(str, <i>k</i>)
+ </pre></blockquote>
+            If no such value of <i>k</i> exists, then <code>-1</code> is returned.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>str</code> - the substring to search for.</dd><dd><code>fromIndex</code> - the index from which to start the search.</dd>
+            <dt><span class="strong">Returns:</span></dt><dd>the index of the first occurrence of the specified substring,
+                starting at the specified index,
+                or <code>-1</code> if there is no such occurrence.</dd></dl>
+    </li>
+</ul>
+<a name="lastIndexOf(java.lang.String)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>lastIndexOf</h4>
+        <pre>public&nbsp;int&nbsp;lastIndexOf(<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;str)</pre>
+        <div class="block">Returns the index within this string of the last occurrence of the
+            specified substring.  The last occurrence of the empty string ""
+            is considered to occur at the index value <code>this.length()</code>.
+
+            <p>The returned index is the largest value <i>k</i> for which:
+            <blockquote><pre>
+ this.startsWith(str, <i>k</i>)
+ </pre></blockquote>
+            If no such value of <i>k</i> exists, then <code>-1</code> is returned.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>str</code> - the substring to search for.</dd>
+            <dt><span class="strong">Returns:</span></dt><dd>the index of the last occurrence of the specified substring,
+                or <code>-1</code> if there is no such occurrence.</dd></dl>
+    </li>
+</ul>
+<a name="lastIndexOf(java.lang.String, int)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>lastIndexOf</h4>
+<pre>public&nbsp;int&nbsp;lastIndexOf(<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;str,
+              int&nbsp;fromIndex)</pre>
+        <div class="block">Returns the index within this string of the last occurrence of the
+            specified substring, searching backward starting at the specified index.
+
+            <p>The returned index is the largest value <i>k</i> for which:
+            <blockquote><pre>
+ <i>k</i> &lt;= fromIndex && this.startsWith(str, <i>k</i>)
+ </pre></blockquote>
+            If no such value of <i>k</i> exists, then <code>-1</code> is returned.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>str</code> - the substring to search for.</dd><dd><code>fromIndex</code> - the index to start the search from.</dd>
+            <dt><span class="strong">Returns:</span></dt><dd>the index of the last occurrence of the specified substring,
+                searching backward from the specified index,
+                or <code>-1</code> if there is no such occurrence.</dd></dl>
+    </li>
+</ul>
+<a name="substring(int)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>substring</h4>
+        <pre>public&nbsp;<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;substring(int&nbsp;beginIndex)</pre>
+        <div class="block">Returns a new string that is a substring of this string. The
+            substring begins with the character at the specified index and
+            extends to the end of this string. <p>
+                Examples:
+            <blockquote><pre>
+ "unhappy".substring(2) returns "happy"
+ "Harbison".substring(3) returns "bison"
+ "emptiness".substring(9) returns "" (an empty string)
+ </pre></blockquote></div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>beginIndex</code> - the beginning index, inclusive.</dd>
+            <dt><span class="strong">Returns:</span></dt><dd>the specified substring.</dd>
+            <dt><span class="strong">Throws:</span></dt>
+            <dd><code><a href="../../java/lang/IndexOutOfBoundsException.html" title="class in java.lang">IndexOutOfBoundsException</a></code> - if
+                <code>beginIndex</code> is negative or larger than the
+                length of this <code>String</code> object.</dd></dl>
+    </li>
+</ul>
+<a name="substring(int, int)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>substring</h4>
+<pre>public&nbsp;<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;substring(int&nbsp;beginIndex,
+               int&nbsp;endIndex)</pre>
+        <div class="block">Returns a new string that is a substring of this string. The
+            substring begins at the specified <code>beginIndex</code> and
+            extends to the character at index <code>endIndex - 1</code>.
+            Thus the length of the substring is <code>endIndex-beginIndex</code>.
+            <p>
+                Examples:
+            <blockquote><pre>
+ "hamburger".substring(4, 8) returns "urge"
+ "smiles".substring(1, 5) returns "mile"
+ </pre></blockquote></div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>beginIndex</code> - the beginning index, inclusive.</dd><dd><code>endIndex</code> - the ending index, exclusive.</dd>
+            <dt><span class="strong">Returns:</span></dt><dd>the specified substring.</dd>
+            <dt><span class="strong">Throws:</span></dt>
+            <dd><code><a href="../../java/lang/IndexOutOfBoundsException.html" title="class in java.lang">IndexOutOfBoundsException</a></code> - if the
+                <code>beginIndex</code> is negative, or
+                <code>endIndex</code> is larger than the length of
+                this <code>String</code> object, or
+                <code>beginIndex</code> is larger than
+                <code>endIndex</code>.</dd></dl>
+    </li>
+</ul>
+<a name="subSequence(int, int)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>subSequence</h4>
+<pre>public&nbsp;<a href="../../java/lang/CharSequence.html" title="interface in java.lang">CharSequence</a>&nbsp;subSequence(int&nbsp;beginIndex,
+                       int&nbsp;endIndex)</pre>
+        <div class="block">Returns a new character sequence that is a subsequence of this sequence.
+
+            <p> An invocation of this method of the form
+
+            <blockquote><pre>
+ str.subSequence(begin,&nbsp;end)</pre></blockquote>
+
+            behaves in exactly the same way as the invocation
+
+            <blockquote><pre>
+ str.substring(begin,&nbsp;end)</pre></blockquote>
+
+            This method is defined so that the <tt>String</tt> class can implement
+            the <a href="../../java/lang/CharSequence.html" title="interface in java.lang"><code>CharSequence</code></a> interface. </p></div>
+        <dl>
+            <dt><strong>Specified by:</strong></dt>
+            <dd><code><a href="../../java/lang/CharSequence.html#subSequence(int, int)">subSequence</a></code>&nbsp;in interface&nbsp;<code><a href="../../java/lang/CharSequence.html" title="interface in java.lang">CharSequence</a></code></dd>
+            <dt><span class="strong">Parameters:</span></dt><dd><code>beginIndex</code> - the begin index, inclusive.</dd><dd><code>endIndex</code> - the end index, exclusive.</dd>
+            <dt><span class="strong">Returns:</span></dt><dd>the specified subsequence.</dd>
+            <dt><span class="strong">Throws:</span></dt>
+            <dd><code><a href="../../java/lang/IndexOutOfBoundsException.html" title="class in java.lang">IndexOutOfBoundsException</a></code> - if <tt>beginIndex</tt> or <tt>endIndex</tt> are negative,
+                if <tt>endIndex</tt> is greater than <tt>length()</tt>,
+                or if <tt>beginIndex</tt> is greater than <tt>startIndex</tt></dd><dt><span class="strong">Since:</span></dt>
+            <dd>1.4</dd></dl>
+    </li>
+</ul>
+<a name="concat(java.lang.String)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>concat</h4>
+        <pre>public&nbsp;<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;concat(<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;str)</pre>
+        <div class="block">Concatenates the specified string to the end of this string.
+            <p>
+                If the length of the argument string is <code>0</code>, then this
+                <code>String</code> object is returned. Otherwise, a new
+                <code>String</code> object is created, representing a character
+                sequence that is the concatenation of the character sequence
+                represented by this <code>String</code> object and the character
+                sequence represented by the argument string.<p>
+                Examples:
+            <blockquote><pre>
+ "cares".concat("s") returns "caress"
+ "to".concat("get").concat("her") returns "together"
+ </pre></blockquote></div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>str</code> - the <code>String</code> that is concatenated to the end
+            of this <code>String</code>.</dd>
+            <dt><span class="strong">Returns:</span></dt><dd>a string that represents the concatenation of this object's
+                characters followed by the string argument's characters.</dd></dl>
+    </li>
+</ul>
+<a name="replace(char, char)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>replace</h4>
+<pre>public&nbsp;<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;replace(char&nbsp;oldChar,
+             char&nbsp;newChar)</pre>
+        <div class="block">Returns a new string resulting from replacing all occurrences of
+            <code>oldChar</code> in this string with <code>newChar</code>.
+            <p>
+                If the character <code>oldChar</code> does not occur in the
+                character sequence represented by this <code>String</code> object,
+                then a reference to this <code>String</code> object is returned.
+                Otherwise, a new <code>String</code> object is created that
+                represents a character sequence identical to the character sequence
+                represented by this <code>String</code> object, except that every
+                occurrence of <code>oldChar</code> is replaced by an occurrence
+                of <code>newChar</code>.
+            <p>
+                Examples:
+            <blockquote><pre>
+ "mesquite in your cellar".replace('e', 'o')
+         returns "mosquito in your collar"
+ "the war of baronets".replace('r', 'y')
+         returns "the way of bayonets"
+ "sparring with a purple porpoise".replace('p', 't')
+         returns "starring with a turtle tortoise"
+ "JonL".replace('q', 'x') returns "JonL" (no change)
+ </pre></blockquote></div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>oldChar</code> - the old character.</dd><dd><code>newChar</code> - the new character.</dd>
+            <dt><span class="strong">Returns:</span></dt><dd>a string derived from this string by replacing every
+                occurrence of <code>oldChar</code> with <code>newChar</code>.</dd></dl>
+    </li>
+</ul>
+<a name="matches(java.lang.String)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>matches</h4>
+        <pre>public&nbsp;boolean&nbsp;matches(<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;regex)</pre>
+        <div class="block">Tells whether or not this string matches the given <a
+                href="../util/regex/Pattern.html#sum">regular expression</a>.
+
+            <p> An invocation of this method of the form
+                <i>str</i><tt>.matches(</tt><i>regex</i><tt>)</tt> yields exactly the
+                same result as the expression
+
+            <blockquote><tt> <a href="../../java/util/regex/Pattern.html" title="class in java.util.regex"><code>Pattern</code></a>.<a href="../../java/util/regex/Pattern.html#matches(java.lang.String, java.lang.CharSequence)"><code>matches</code></a>(</tt><i>regex</i><tt>,</tt> <i>str</i><tt>)</tt></blockquote></div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>regex</code> - the regular expression to which this string is to be matched</dd>
+            <dt><span class="strong">Returns:</span></dt><dd><tt>true</tt> if, and only if, this string matches the
+                given regular expression</dd>
+            <dt><span class="strong">Throws:</span></dt>
+            <dd><code><a href="../../java/util/regex/PatternSyntaxException.html" title="class in java.util.regex">PatternSyntaxException</a></code> - if the regular expression's syntax is invalid</dd><dt><span class="strong">Since:</span></dt>
+            <dd>1.4</dd>
+            <dt><span class="strong">See Also:</span></dt><dd><a href="../../java/util/regex/Pattern.html" title="class in java.util.regex"><code>Pattern</code></a></dd></dl>
+    </li>
+</ul>
+<a name="contains(java.lang.CharSequence)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>contains</h4>
+        <pre>public&nbsp;boolean&nbsp;contains(<a href="../../java/lang/CharSequence.html" title="interface in java.lang">CharSequence</a>&nbsp;s)</pre>
+        <div class="block">Returns true if and only if this string contains the specified
+            sequence of char values.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>s</code> - the sequence to search for</dd>
+            <dt><span class="strong">Returns:</span></dt><dd>true if this string contains <code>s</code>, false otherwise</dd>
+            <dt><span class="strong">Throws:</span></dt>
+            <dd><code><a href="../../java/lang/NullPointerException.html" title="class in java.lang">NullPointerException</a></code> - if <code>s</code> is <code>null</code></dd><dt><span class="strong">Since:</span></dt>
+            <dd>1.5</dd></dl>
+    </li>
+</ul>
+<a name="replaceFirst(java.lang.String, java.lang.String)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>replaceFirst</h4>
+<pre>public&nbsp;<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;replaceFirst(<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;regex,
+                  <a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;replacement)</pre>
+        <div class="block">Replaces the first substring of this string that matches the given <a
+                href="../util/regex/Pattern.html#sum">regular expression</a> with the
+            given replacement.
+
+            <p> An invocation of this method of the form
+                <i>str</i><tt>.replaceFirst(</tt><i>regex</i><tt>,</tt> <i>repl</i><tt>)</tt>
+                yields exactly the same result as the expression
+
+            <blockquote><tt>
+                <a href="../../java/util/regex/Pattern.html" title="class in java.util.regex"><code>Pattern</code></a>.<a href="../../java/util/regex/Pattern.html#compile(java.lang.String)"><code>compile</code></a>(</tt><i>regex</i><tt>).<a href="../../java/util/regex/Pattern.html#matcher(java.lang.CharSequence)"><code>matcher</code></a>(</tt><i>str</i><tt>).<a href="../../java/util/regex/Matcher.html#replaceFirst(java.lang.String)"><code>replaceFirst</code></a>(</tt><i>repl</i><tt>)</tt></blockquote>
+
+            <p>
+                Note that backslashes (<tt>\</tt>) and dollar signs (<tt>$</tt>) in the
+                replacement string may cause the results to be different than if it were
+                being treated as a literal replacement string; see
+                <a href="../../java/util/regex/Matcher.html#replaceFirst(java.lang.String)"><code>Matcher.replaceFirst(java.lang.String)</code></a>.
+                Use <a href="../../java/util/regex/Matcher.html#quoteReplacement(java.lang.String)"><code>Matcher.quoteReplacement(java.lang.String)</code></a> to suppress the special
+                meaning of these characters, if desired.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>regex</code> - the regular expression to which this string is to be matched</dd><dd><code>replacement</code> - the string to be substituted for the first match</dd>
+            <dt><span class="strong">Returns:</span></dt><dd>The resulting <tt>String</tt></dd>
+            <dt><span class="strong">Throws:</span></dt>
+            <dd><code><a href="../../java/util/regex/PatternSyntaxException.html" title="class in java.util.regex">PatternSyntaxException</a></code> - if the regular expression's syntax is invalid</dd><dt><span class="strong">Since:</span></dt>
+            <dd>1.4</dd>
+            <dt><span class="strong">See Also:</span></dt><dd><a href="../../java/util/regex/Pattern.html" title="class in java.util.regex"><code>Pattern</code></a></dd></dl>
+    </li>
+</ul>
+<a name="replaceAll(java.lang.String, java.lang.String)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>replaceAll</h4>
+<pre>public&nbsp;<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;replaceAll(<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;regex,
+                <a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;replacement)</pre>
+        <div class="block">Replaces each substring of this string that matches the given <a
+                href="../util/regex/Pattern.html#sum">regular expression</a> with the
+            given replacement.
+
+            <p> An invocation of this method of the form
+                <i>str</i><tt>.replaceAll(</tt><i>regex</i><tt>,</tt> <i>repl</i><tt>)</tt>
+                yields exactly the same result as the expression
+
+            <blockquote><tt>
+                <a href="../../java/util/regex/Pattern.html" title="class in java.util.regex"><code>Pattern</code></a>.<a href="../../java/util/regex/Pattern.html#compile(java.lang.String)"><code>compile</code></a>(</tt><i>regex</i><tt>).<a href="../../java/util/regex/Pattern.html#matcher(java.lang.CharSequence)"><code>matcher</code></a>(</tt><i>str</i><tt>).<a href="../../java/util/regex/Matcher.html#replaceAll(java.lang.String)"><code>replaceAll</code></a>(</tt><i>repl</i><tt>)</tt></blockquote>
+
+            <p>
+                Note that backslashes (<tt>\</tt>) and dollar signs (<tt>$</tt>) in the
+                replacement string may cause the results to be different than if it were
+                being treated as a literal replacement string; see
+                <a href="../../java/util/regex/Matcher.html#replaceAll(java.lang.String)"><code>Matcher.replaceAll</code></a>.
+                Use <a href="../../java/util/regex/Matcher.html#quoteReplacement(java.lang.String)"><code>Matcher.quoteReplacement(java.lang.String)</code></a> to suppress the special
+                meaning of these characters, if desired.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>regex</code> - the regular expression to which this string is to be matched</dd><dd><code>replacement</code> - the string to be substituted for each match</dd>
+            <dt><span class="strong">Returns:</span></dt><dd>The resulting <tt>String</tt></dd>
+            <dt><span class="strong">Throws:</span></dt>
+            <dd><code><a href="../../java/util/regex/PatternSyntaxException.html" title="class in java.util.regex">PatternSyntaxException</a></code> - if the regular expression's syntax is invalid</dd><dt><span class="strong">Since:</span></dt>
+            <dd>1.4</dd>
+            <dt><span class="strong">See Also:</span></dt><dd><a href="../../java/util/regex/Pattern.html" title="class in java.util.regex"><code>Pattern</code></a></dd></dl>
+    </li>
+</ul>
+<a name="replace(java.lang.CharSequence, java.lang.CharSequence)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>replace</h4>
+<pre>public&nbsp;<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;replace(<a href="../../java/lang/CharSequence.html" title="interface in java.lang">CharSequence</a>&nbsp;target,
+             <a href="../../java/lang/CharSequence.html" title="interface in java.lang">CharSequence</a>&nbsp;replacement)</pre>
+        <div class="block">Replaces each substring of this string that matches the literal target
+            sequence with the specified literal replacement sequence. The
+            replacement proceeds from the beginning of the string to the end, for
+            example, replacing "aa" with "b" in the string "aaa" will result in
+            "ba" rather than "ab".</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>target</code> - The sequence of char values to be replaced</dd><dd><code>replacement</code> - The replacement sequence of char values</dd>
+            <dt><span class="strong">Returns:</span></dt><dd>The resulting string</dd>
+            <dt><span class="strong">Throws:</span></dt>
+            <dd><code><a href="../../java/lang/NullPointerException.html" title="class in java.lang">NullPointerException</a></code> - if <code>target</code> or
+                <code>replacement</code> is <code>null</code>.</dd><dt><span class="strong">Since:</span></dt>
+            <dd>1.5</dd></dl>
+    </li>
+</ul>
+<a name="split(java.lang.String, int)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>split</h4>
+<pre>public&nbsp;<a href="../../java/lang/String.html" title="class in java.lang">String</a>[]&nbsp;split(<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;regex,
+             int&nbsp;limit)</pre>
+        <div class="block">Splits this string around matches of the given
+            <a href="../util/regex/Pattern.html#sum">regular expression</a>.
+
+            <p> The array returned by this method contains each substring of this
+                string that is terminated by another substring that matches the given
+                expression or is terminated by the end of the string.  The substrings in
+                the array are in the order in which they occur in this string.  If the
+                expression does not match any part of the input then the resulting array
+                has just one element, namely this string.
+
+            <p> The <tt>limit</tt> parameter controls the number of times the
+                pattern is applied and therefore affects the length of the resulting
+                array.  If the limit <i>n</i> is greater than zero then the pattern
+                will be applied at most <i>n</i>&nbsp;-&nbsp;1 times, the array's
+                length will be no greater than <i>n</i>, and the array's last entry
+                will contain all input beyond the last matched delimiter.  If <i>n</i>
+                is non-positive then the pattern will be applied as many times as
+                possible and the array can have any length.  If <i>n</i> is zero then
+                the pattern will be applied as many times as possible, the array can
+                have any length, and trailing empty strings will be discarded.
+
+            <p> The string <tt>"boo:and:foo"</tt>, for example, yields the
+                following results with these parameters:
+
+            <blockquote><table cellpadding=1 cellspacing=0 summary="Split example showing regex, limit, and result">
+                <tr>
+                    <th>Regex</th>
+                    <th>Limit</th>
+                    <th>Result</th>
+                </tr>
+                <tr><td align=center>:</td>
+                    <td align=center>2</td>
+                    <td><tt>{ "boo", "and:foo" }</tt></td></tr>
+                <tr><td align=center>:</td>
+                    <td align=center>5</td>
+                    <td><tt>{ "boo", "and", "foo" }</tt></td></tr>
+                <tr><td align=center>:</td>
+                    <td align=center>-2</td>
+                    <td><tt>{ "boo", "and", "foo" }</tt></td></tr>
+                <tr><td align=center>o</td>
+                    <td align=center>5</td>
+                    <td><tt>{ "b", "", ":and:f", "", "" }</tt></td></tr>
+                <tr><td align=center>o</td>
+                    <td align=center>-2</td>
+                    <td><tt>{ "b", "", ":and:f", "", "" }</tt></td></tr>
+                <tr><td align=center>o</td>
+                    <td align=center>0</td>
+                    <td><tt>{ "b", "", ":and:f" }</tt></td></tr>
+            </table></blockquote>
+
+            <p> An invocation of this method of the form
+                <i>str.</i><tt>split(</tt><i>regex</i><tt>,</tt>&nbsp;<i>n</i><tt>)</tt>
+                yields the same result as the expression
+
+            <blockquote>
+                <a href="../../java/util/regex/Pattern.html" title="class in java.util.regex"><code>Pattern</code></a>.<a href="../../java/util/regex/Pattern.html#compile(java.lang.String)"><code>compile</code></a><tt>(</tt><i>regex</i><tt>)</tt>.<a href="../../java/util/regex/Pattern.html#split(java.lang.CharSequence, int)"><code>split</code></a><tt>(</tt><i>str</i><tt>,</tt>&nbsp;<i>n</i><tt>)</tt>
+            </blockquote></div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>regex</code> - the delimiting regular expression</dd><dd><code>limit</code> - the result threshold, as described above</dd>
+            <dt><span class="strong">Returns:</span></dt><dd>the array of strings computed by splitting this string
+                around matches of the given regular expression</dd>
+            <dt><span class="strong">Throws:</span></dt>
+            <dd><code><a href="../../java/util/regex/PatternSyntaxException.html" title="class in java.util.regex">PatternSyntaxException</a></code> - if the regular expression's syntax is invalid</dd><dt><span class="strong">Since:</span></dt>
+            <dd>1.4</dd>
+            <dt><span class="strong">See Also:</span></dt><dd><a href="../../java/util/regex/Pattern.html" title="class in java.util.regex"><code>Pattern</code></a></dd></dl>
+    </li>
+</ul>
+<a name="split(java.lang.String)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>split</h4>
+        <pre>public&nbsp;<a href="../../java/lang/String.html" title="class in java.lang">String</a>[]&nbsp;split(<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;regex)</pre>
+        <div class="block">Splits this string around matches of the given <a
+                href="../util/regex/Pattern.html#sum">regular expression</a>.
+
+            <p> This method works as if by invoking the two-argument <a href="../../java/lang/String.html#split(java.lang.String, int)"><code>split</code></a> method with the given expression and a limit
+                argument of zero.  Trailing empty strings are therefore not included in
+                the resulting array.
+
+            <p> The string <tt>"boo:and:foo"</tt>, for example, yields the following
+                results with these expressions:
+
+            <blockquote><table cellpadding=1 cellspacing=0 summary="Split examples showing regex and result">
+                <tr>
+                    <th>Regex</th>
+                    <th>Result</th>
+                </tr>
+                <tr><td align=center>:</td>
+                    <td><tt>{ "boo", "and", "foo" }</tt></td></tr>
+                <tr><td align=center>o</td>
+                    <td><tt>{ "b", "", ":and:f" }</tt></td></tr>
+            </table></blockquote></div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>regex</code> - the delimiting regular expression</dd>
+            <dt><span class="strong">Returns:</span></dt><dd>the array of strings computed by splitting this string
+                around matches of the given regular expression</dd>
+            <dt><span class="strong">Throws:</span></dt>
+            <dd><code><a href="../../java/util/regex/PatternSyntaxException.html" title="class in java.util.regex">PatternSyntaxException</a></code> - if the regular expression's syntax is invalid</dd><dt><span class="strong">Since:</span></dt>
+            <dd>1.4</dd>
+            <dt><span class="strong">See Also:</span></dt><dd><a href="../../java/util/regex/Pattern.html" title="class in java.util.regex"><code>Pattern</code></a></dd></dl>
+    </li>
+</ul>
+<a name="toLowerCase(java.util.Locale)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>toLowerCase</h4>
+        <pre>public&nbsp;<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;toLowerCase(<a href="../../java/util/Locale.html" title="class in java.util">Locale</a>&nbsp;locale)</pre>
+        <div class="block">Converts all of the characters in this <code>String</code> to lower
+            case using the rules of the given <code>Locale</code>.  Case mapping is based
+            on the Unicode Standard version specified by the <a href="../../java/lang/Character.html" title="class in java.lang"><code>Character</code></a>
+            class. Since case mappings are not always 1:1 char mappings, the resulting
+            <code>String</code> may be a different length than the original <code>String</code>.
+            <p>
+                Examples of lowercase  mappings are in the following table:
+            <table border="1" summary="Lowercase mapping examples showing language code of locale, upper case, lower case, and description">
+                <tr>
+                    <th>Language Code of Locale</th>
+                    <th>Upper Case</th>
+                    <th>Lower Case</th>
+                    <th>Description</th>
+                </tr>
+                <tr>
+                    <td>tr (Turkish)</td>
+                    <td>&#92;u0130</td>
+                    <td>&#92;u0069</td>
+                    <td>capital letter I with dot above -&gt; small letter i</td>
+                </tr>
+                <tr>
+                    <td>tr (Turkish)</td>
+                    <td>&#92;u0049</td>
+                    <td>&#92;u0131</td>
+                    <td>capital letter I -&gt; small letter dotless i </td>
+                </tr>
+                <tr>
+                    <td>(all)</td>
+                    <td>French Fries</td>
+                    <td>french fries</td>
+                    <td>lowercased all chars in String</td>
+                </tr>
+                <tr>
+                    <td>(all)</td>
+                    <td><img src="doc-files/capiota.gif" alt="capiota"><img src="doc-files/capchi.gif" alt="capchi">
+                        <img src="doc-files/captheta.gif" alt="captheta"><img src="doc-files/capupsil.gif" alt="capupsil">
+                        <img src="doc-files/capsigma.gif" alt="capsigma"></td>
+                    <td><img src="doc-files/iota.gif" alt="iota"><img src="doc-files/chi.gif" alt="chi">
+                        <img src="doc-files/theta.gif" alt="theta"><img src="doc-files/upsilon.gif" alt="upsilon">
+                        <img src="doc-files/sigma1.gif" alt="sigma"></td>
+                    <td>lowercased all chars in String</td>
+                </tr>
+            </table></div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>locale</code> - use the case transformation rules for this locale</dd>
+            <dt><span class="strong">Returns:</span></dt><dd>the <code>String</code>, converted to lowercase.</dd><dt><span class="strong">Since:</span></dt>
+            <dd>1.1</dd>
+            <dt><span class="strong">See Also:</span></dt><dd><a href="../../java/lang/String.html#toLowerCase()"><code>toLowerCase()</code></a>,
+                <a href="../../java/lang/String.html#toUpperCase()"><code>toUpperCase()</code></a>,
+                <a href="../../java/lang/String.html#toUpperCase(java.util.Locale)"><code>toUpperCase(Locale)</code></a></dd></dl>
+    </li>
+</ul>
+<a name="toLowerCase()">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>toLowerCase</h4>
+        <pre>public&nbsp;<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;toLowerCase()</pre>
+        <div class="block">Converts all of the characters in this <code>String</code> to lower
+            case using the rules of the default locale. This is equivalent to calling
+            <code>toLowerCase(Locale.getDefault())</code>.
+            <p>
+                <b>Note:</b> This method is locale sensitive, and may produce unexpected
+                results if used for strings that are intended to be interpreted locale
+                independently.
+                Examples are programming language identifiers, protocol keys, and HTML
+                tags.
+                For instance, <code>"TITLE".toLowerCase()</code> in a Turkish locale
+                returns <code>"t\u0131tle"</code>, where '\u0131' is the
+                LATIN SMALL LETTER DOTLESS I character.
+                To obtain correct results for locale insensitive strings, use
+                <code>toLowerCase(Locale.ENGLISH)</code>.
+            <p></div>
+        <dl><dt><span class="strong">Returns:</span></dt><dd>the <code>String</code>, converted to lowercase.</dd><dt><span class="strong">See Also:</span></dt><dd><a href="../../java/lang/String.html#toLowerCase(java.util.Locale)"><code>toLowerCase(Locale)</code></a></dd></dl>
+    </li>
+</ul>
+<a name="toUpperCase(java.util.Locale)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>toUpperCase</h4>
+        <pre>public&nbsp;<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;toUpperCase(<a href="../../java/util/Locale.html" title="class in java.util">Locale</a>&nbsp;locale)</pre>
+        <div class="block">Converts all of the characters in this <code>String</code> to upper
+            case using the rules of the given <code>Locale</code>. Case mapping is based
+            on the Unicode Standard version specified by the <a href="../../java/lang/Character.html" title="class in java.lang"><code>Character</code></a>
+            class. Since case mappings are not always 1:1 char mappings, the resulting
+            <code>String</code> may be a different length than the original <code>String</code>.
+            <p>
+                Examples of locale-sensitive and 1:M case mappings are in the following table.
+            <p>
+            <table border="1" summary="Examples of locale-sensitive and 1:M case mappings. Shows Language code of locale, lower case, upper case, and description.">
+                <tr>
+                    <th>Language Code of Locale</th>
+                    <th>Lower Case</th>
+                    <th>Upper Case</th>
+                    <th>Description</th>
+                </tr>
+                <tr>
+                    <td>tr (Turkish)</td>
+                    <td>&#92;u0069</td>
+                    <td>&#92;u0130</td>
+                    <td>small letter i -&gt; capital letter I with dot above</td>
+                </tr>
+                <tr>
+                    <td>tr (Turkish)</td>
+                    <td>&#92;u0131</td>
+                    <td>&#92;u0049</td>
+                    <td>small letter dotless i -&gt; capital letter I</td>
+                </tr>
+                <tr>
+                    <td>(all)</td>
+                    <td>&#92;u00df</td>
+                    <td>&#92;u0053 &#92;u0053</td>
+                    <td>small letter sharp s -&gt; two letters: SS</td>
+                </tr>
+                <tr>
+                    <td>(all)</td>
+                    <td>Fahrvergn&uuml;gen</td>
+                    <td>FAHRVERGN&Uuml;GEN</td>
+                    <td></td>
+                </tr>
+            </table></div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>locale</code> - use the case transformation rules for this locale</dd>
+            <dt><span class="strong">Returns:</span></dt><dd>the <code>String</code>, converted to uppercase.</dd><dt><span class="strong">Since:</span></dt>
+            <dd>1.1</dd>
+            <dt><span class="strong">See Also:</span></dt><dd><a href="../../java/lang/String.html#toUpperCase()"><code>toUpperCase()</code></a>,
+                <a href="../../java/lang/String.html#toLowerCase()"><code>toLowerCase()</code></a>,
+                <a href="../../java/lang/String.html#toLowerCase(java.util.Locale)"><code>toLowerCase(Locale)</code></a></dd></dl>
+    </li>
+</ul>
+<a name="toUpperCase()">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>toUpperCase</h4>
+        <pre>public&nbsp;<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;toUpperCase()</pre>
+        <div class="block">Converts all of the characters in this <code>String</code> to upper
+            case using the rules of the default locale. This method is equivalent to
+            <code>toUpperCase(Locale.getDefault())</code>.
+            <p>
+                <b>Note:</b> This method is locale sensitive, and may produce unexpected
+                results if used for strings that are intended to be interpreted locale
+                independently.
+                Examples are programming language identifiers, protocol keys, and HTML
+                tags.
+                For instance, <code>"title".toUpperCase()</code> in a Turkish locale
+                returns <code>"T\u0130TLE"</code>, where '\u0130' is the
+                LATIN CAPITAL LETTER I WITH DOT ABOVE character.
+                To obtain correct results for locale insensitive strings, use
+                <code>toUpperCase(Locale.ENGLISH)</code>.
+            <p></div>
+        <dl><dt><span class="strong">Returns:</span></dt><dd>the <code>String</code>, converted to uppercase.</dd><dt><span class="strong">See Also:</span></dt><dd><a href="../../java/lang/String.html#toUpperCase(java.util.Locale)"><code>toUpperCase(Locale)</code></a></dd></dl>
+    </li>
+</ul>
+<a name="trim()">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>trim</h4>
+        <pre>public&nbsp;<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;trim()</pre>
+        <div class="block">Returns a copy of the string, with leading and trailing whitespace
+            omitted.
+            <p>
+                If this <code>String</code> object represents an empty character
+                sequence, or the first and last characters of character sequence
+                represented by this <code>String</code> object both have codes
+                greater than <code>'&#92;u0020'</code> (the space character), then a
+                reference to this <code>String</code> object is returned.
+            <p>
+                Otherwise, if there is no character with a code greater than
+                <code>'&#92;u0020'</code> in the string, then a new
+                <code>String</code> object representing an empty string is created
+                and returned.
+            <p>
+                Otherwise, let <i>k</i> be the index of the first character in the
+                string whose code is greater than <code>'&#92;u0020'</code>, and let
+                <i>m</i> be the index of the last character in the string whose code
+                is greater than <code>'&#92;u0020'</code>. A new <code>String</code>
+                object is created, representing the substring of this string that
+                begins with the character at index <i>k</i> and ends with the
+                character at index <i>m</i>-that is, the result of
+                <code>this.substring(<i>k</i>,&nbsp;<i>m</i>+1)</code>.
+            <p>
+                This method may be used to trim whitespace (as defined above) from
+                the beginning and end of a string.</div>
+        <dl><dt><span class="strong">Returns:</span></dt><dd>A copy of this string with leading and trailing white
+            space removed, or this string if it has no leading or
+            trailing white space.</dd></dl>
+    </li>
+</ul>
+<a name="toString()">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>toString</h4>
+        <pre>public&nbsp;<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;toString()</pre>
+        <div class="block">This object (which is already a string!) is itself returned.</div>
+        <dl>
+            <dt><strong>Specified by:</strong></dt>
+            <dd><code><a href="../../java/lang/CharSequence.html#toString()">toString</a></code>&nbsp;in interface&nbsp;<code><a href="../../java/lang/CharSequence.html" title="interface in java.lang">CharSequence</a></code></dd>
+            <dt><strong>Overrides:</strong></dt>
+            <dd><code><a href="../../java/lang/Object.html#toString()">toString</a></code>&nbsp;in class&nbsp;<code><a href="../../java/lang/Object.html" title="class in java.lang">Object</a></code></dd>
+            <dt><span class="strong">Returns:</span></dt><dd>the string itself.</dd></dl>
+    </li>
+</ul>
+<a name="toCharArray()">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>toCharArray</h4>
+        <pre>public&nbsp;char[]&nbsp;toCharArray()</pre>
+        <div class="block">Converts this string to a new character array.</div>
+        <dl><dt><span class="strong">Returns:</span></dt><dd>a newly allocated character array whose length is the length
+            of this string and whose contents are initialized to contain
+            the character sequence represented by this string.</dd></dl>
+    </li>
+</ul>
+<a name="format(java.lang.String, java.lang.Object...)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>format</h4>
+<pre>public static&nbsp;<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;format(<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;format,
+            <a href="../../java/lang/Object.html" title="class in java.lang">Object</a>...&nbsp;args)</pre>
+        <div class="block">Returns a formatted string using the specified format string and
+            arguments.
+
+            <p> The locale always used is the one returned by <a href="../../java/util/Locale.html#getDefault()"><code>Locale.getDefault()</code></a>.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>format</code> - A <a href="../util/Formatter.html#syntax">format string</a></dd><dd><code>args</code> - Arguments referenced by the format specifiers in the format
+            string.  If there are more arguments than format specifiers, the
+            extra arguments are ignored.  The number of arguments is
+            variable and may be zero.  The maximum number of arguments is
+            limited by the maximum dimension of a Java array as defined by
+            <cite>The Java&trade; Virtual Machine Specification</cite>.
+            The behaviour on a
+            <tt>null</tt> argument depends on the <a
+                    href="../util/Formatter.html#syntax">conversion</a>.</dd>
+            <dt><span class="strong">Returns:</span></dt><dd>A formatted string</dd>
+            <dt><span class="strong">Throws:</span></dt>
+            <dd><code>IllegalFormatException</code> - If a format string contains an illegal syntax, a format
+                specifier that is incompatible with the given arguments,
+                insufficient arguments given the format string, or other
+                illegal conditions.  For specification of all possible
+                formatting errors, see the <a
+                        href="../util/Formatter.html#detail">Details</a> section of the
+                formatter class specification.</dd>
+            <dd><code><a href="../../java/lang/NullPointerException.html" title="class in java.lang">NullPointerException</a></code> - If the <tt>format</tt> is <tt>null</tt></dd><dt><span class="strong">Since:</span></dt>
+            <dd>1.5</dd>
+            <dt><span class="strong">See Also:</span></dt><dd><a href="../../java/util/Formatter.html" title="class in java.util"><code>Formatter</code></a></dd></dl>
+    </li>
+</ul>
+<a name="format(java.util.Locale, java.lang.String, java.lang.Object...)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>format</h4>
+<pre>public static&nbsp;<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;format(<a href="../../java/util/Locale.html" title="class in java.util">Locale</a>&nbsp;l,
+            <a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;format,
+            <a href="../../java/lang/Object.html" title="class in java.lang">Object</a>...&nbsp;args)</pre>
+        <div class="block">Returns a formatted string using the specified locale, format string,
+            and arguments.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>l</code> - The <a href="../../java/util/Locale.html" title="class in java.util">locale</a> to apply during
+            formatting.  If <tt>l</tt> is <tt>null</tt> then no localization
+            is applied.</dd><dd><code>format</code> - A <a href="../util/Formatter.html#syntax">format string</a></dd><dd><code>args</code> - Arguments referenced by the format specifiers in the format
+            string.  If there are more arguments than format specifiers, the
+            extra arguments are ignored.  The number of arguments is
+            variable and may be zero.  The maximum number of arguments is
+            limited by the maximum dimension of a Java array as defined by
+            <cite>The Java&trade; Virtual Machine Specification</cite>.
+            The behaviour on a
+            <tt>null</tt> argument depends on the <a
+                    href="../util/Formatter.html#syntax">conversion</a>.</dd>
+            <dt><span class="strong">Returns:</span></dt><dd>A formatted string</dd>
+            <dt><span class="strong">Throws:</span></dt>
+            <dd><code>IllegalFormatException</code> - If a format string contains an illegal syntax, a format
+                specifier that is incompatible with the given arguments,
+                insufficient arguments given the format string, or other
+                illegal conditions.  For specification of all possible
+                formatting errors, see the <a
+                        href="../util/Formatter.html#detail">Details</a> section of the
+                formatter class specification</dd>
+            <dd><code><a href="../../java/lang/NullPointerException.html" title="class in java.lang">NullPointerException</a></code> - If the <tt>format</tt> is <tt>null</tt></dd><dt><span class="strong">Since:</span></dt>
+            <dd>1.5</dd>
+            <dt><span class="strong">See Also:</span></dt><dd><a href="../../java/util/Formatter.html" title="class in java.util"><code>Formatter</code></a></dd></dl>
+    </li>
+</ul>
+<a name="valueOf(java.lang.Object)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>valueOf</h4>
+        <pre>public static&nbsp;<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;valueOf(<a href="../../java/lang/Object.html" title="class in java.lang">Object</a>&nbsp;obj)</pre>
+        <div class="block">Returns the string representation of the <code>Object</code> argument.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>obj</code> - an <code>Object</code>.</dd>
+            <dt><span class="strong">Returns:</span></dt><dd>if the argument is <code>null</code>, then a string equal to
+                <code>"null"</code>; otherwise, the value of
+                <code>obj.toString()</code> is returned.</dd><dt><span class="strong">See Also:</span></dt><dd><a href="../../java/lang/Object.html#toString()"><code>Object.toString()</code></a></dd></dl>
+    </li>
+</ul>
+<a name="valueOf(char[])">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>valueOf</h4>
+        <pre>public static&nbsp;<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;valueOf(char[]&nbsp;data)</pre>
+        <div class="block">Returns the string representation of the <code>char</code> array
+            argument. The contents of the character array are copied; subsequent
+            modification of the character array does not affect the newly
+            created string.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>data</code> - a <code>char</code> array.</dd>
+            <dt><span class="strong">Returns:</span></dt><dd>a newly allocated string representing the same sequence of
+                characters contained in the character array argument.</dd></dl>
+    </li>
+</ul>
+<a name="valueOf(char[], int, int)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>valueOf</h4>
+<pre>public static&nbsp;<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;valueOf(char[]&nbsp;data,
+             int&nbsp;offset,
+             int&nbsp;count)</pre>
+        <div class="block">Returns the string representation of a specific subarray of the
+            <code>char</code> array argument.
+            <p>
+                The <code>offset</code> argument is the index of the first
+                character of the subarray. The <code>count</code> argument
+                specifies the length of the subarray. The contents of the subarray
+                are copied; subsequent modification of the character array does not
+                affect the newly created string.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>data</code> - the character array.</dd><dd><code>offset</code> - the initial offset into the value of the
+            <code>String</code>.</dd><dd><code>count</code> - the length of the value of the <code>String</code>.</dd>
+            <dt><span class="strong">Returns:</span></dt><dd>a string representing the sequence of characters contained
+                in the subarray of the character array argument.</dd>
+            <dt><span class="strong">Throws:</span></dt>
+            <dd><code><a href="../../java/lang/IndexOutOfBoundsException.html" title="class in java.lang">IndexOutOfBoundsException</a></code> - if <code>offset</code> is
+                negative, or <code>count</code> is negative, or
+                <code>offset+count</code> is larger than
+                <code>data.length</code>.</dd></dl>
+    </li>
+</ul>
+<a name="copyValueOf(char[], int, int)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>copyValueOf</h4>
+<pre>public static&nbsp;<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;copyValueOf(char[]&nbsp;data,
+                 int&nbsp;offset,
+                 int&nbsp;count)</pre>
+        <div class="block">Returns a String that represents the character sequence in the
+            array specified.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>data</code> - the character array.</dd><dd><code>offset</code> - initial offset of the subarray.</dd><dd><code>count</code> - length of the subarray.</dd>
+            <dt><span class="strong">Returns:</span></dt><dd>a <code>String</code> that contains the characters of the
+                specified subarray of the character array.</dd></dl>
+    </li>
+</ul>
+<a name="copyValueOf(char[])">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>copyValueOf</h4>
+        <pre>public static&nbsp;<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;copyValueOf(char[]&nbsp;data)</pre>
+        <div class="block">Returns a String that represents the character sequence in the
+            array specified.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>data</code> - the character array.</dd>
+            <dt><span class="strong">Returns:</span></dt><dd>a <code>String</code> that contains the characters of the
+                character array.</dd></dl>
+    </li>
+</ul>
+<a name="valueOf(boolean)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>valueOf</h4>
+        <pre>public static&nbsp;<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;valueOf(boolean&nbsp;b)</pre>
+        <div class="block">Returns the string representation of the <code>boolean</code> argument.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>b</code> - a <code>boolean</code>.</dd>
+            <dt><span class="strong">Returns:</span></dt><dd>if the argument is <code>true</code>, a string equal to
+                <code>"true"</code> is returned; otherwise, a string equal to
+                <code>"false"</code> is returned.</dd></dl>
+    </li>
+</ul>
+<a name="valueOf(char)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>valueOf</h4>
+        <pre>public static&nbsp;<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;valueOf(char&nbsp;c)</pre>
+        <div class="block">Returns the string representation of the <code>char</code>
+            argument.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>c</code> - a <code>char</code>.</dd>
+            <dt><span class="strong">Returns:</span></dt><dd>a string of length <code>1</code> containing
+                as its single character the argument <code>c</code>.</dd></dl>
+    </li>
+</ul>
+<a name="valueOf(int)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>valueOf</h4>
+        <pre>public static&nbsp;<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;valueOf(int&nbsp;i)</pre>
+        <div class="block">Returns the string representation of the <code>int</code> argument.
+            <p>
+                The representation is exactly the one returned by the
+                <code>Integer.toString</code> method of one argument.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>i</code> - an <code>int</code>.</dd>
+            <dt><span class="strong">Returns:</span></dt><dd>a string representation of the <code>int</code> argument.</dd><dt><span class="strong">See Also:</span></dt><dd><a href="../../java/lang/Integer.html#toString(int, int)"><code>Integer.toString(int, int)</code></a></dd></dl>
+    </li>
+</ul>
+<a name="valueOf(long)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>valueOf</h4>
+        <pre>public static&nbsp;<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;valueOf(long&nbsp;l)</pre>
+        <div class="block">Returns the string representation of the <code>long</code> argument.
+            <p>
+                The representation is exactly the one returned by the
+                <code>Long.toString</code> method of one argument.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>l</code> - a <code>long</code>.</dd>
+            <dt><span class="strong">Returns:</span></dt><dd>a string representation of the <code>long</code> argument.</dd><dt><span class="strong">See Also:</span></dt><dd><a href="../../java/lang/Long.html#toString(long)"><code>Long.toString(long)</code></a></dd></dl>
+    </li>
+</ul>
+<a name="valueOf(float)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>valueOf</h4>
+        <pre>public static&nbsp;<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;valueOf(float&nbsp;f)</pre>
+        <div class="block">Returns the string representation of the <code>float</code> argument.
+            <p>
+                The representation is exactly the one returned by the
+                <code>Float.toString</code> method of one argument.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>f</code> - a <code>float</code>.</dd>
+            <dt><span class="strong">Returns:</span></dt><dd>a string representation of the <code>float</code> argument.</dd><dt><span class="strong">See Also:</span></dt><dd><a href="../../java/lang/Float.html#toString(float)"><code>Float.toString(float)</code></a></dd></dl>
+    </li>
+</ul>
+<a name="valueOf(double)">
+    <!--   -->
+</a>
+<ul class="blockList">
+    <li class="blockList">
+        <h4>valueOf</h4>
+        <pre>public static&nbsp;<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;valueOf(double&nbsp;d)</pre>
+        <div class="block">Returns the string representation of the <code>double</code> argument.
+            <p>
+                The representation is exactly the one returned by the
+                <code>Double.toString</code> method of one argument.</div>
+        <dl><dt><span class="strong">Parameters:</span></dt><dd><code>d</code> - a <code>double</code>.</dd>
+            <dt><span class="strong">Returns:</span></dt><dd>a  string representation of the <code>double</code> argument.</dd><dt><span class="strong">See Also:</span></dt><dd><a href="../../java/lang/Double.html#toString(double)"><code>Double.toString(double)</code></a></dd></dl>
+    </li>
+</ul>
+<a name="intern()">
+    <!--   -->
+</a>
+<ul class="blockListLast">
+    <li class="blockList">
+        <h4>intern</h4>
+        <pre>public&nbsp;<a href="../../java/lang/String.html" title="class in java.lang">String</a>&nbsp;intern()</pre>
+        <div class="block">Returns a canonical representation for the string object.
+            <p>
+                A pool of strings, initially empty, is maintained privately by the
+                class <code>String</code>.
+            <p>
+                When the intern method is invoked, if the pool already contains a
+                string equal to this <code>String</code> object as determined by
+                the <a href="../../java/lang/String.html#equals(java.lang.Object)"><code>equals(Object)</code></a> method, then the string from the pool is
+                returned. Otherwise, this <code>String</code> object is added to the
+                pool and a reference to this <code>String</code> object is returned.
+            <p>
+                It follows that for any two strings <code>s</code> and <code>t</code>,
+                <code>s.intern()&nbsp;==&nbsp;t.intern()</code> is <code>true</code>
+                if and only if <code>s.equals(t)</code> is <code>true</code>.
+            <p>
+                All literal strings and string-valued constant expressions are
+                interned. String literals are defined in section 3.10.5 of the
+                <cite>The Java&trade; Language Specification</cite>.</div>
+        <dl><dt><span class="strong">Returns:</span></dt><dd>a string that has the same contents as this string, but is
+            guaranteed to be from a pool of unique strings.</dd></dl>
+    </li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+    <!--   -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+    <!--   -->
+</a>
+    <ul class="navList" title="Navigation">
+        <li><a href="../../overview-summary.html">Overview</a></li>
+        <li><a href="package-summary.html">Package</a></li>
+        <li class="navBarCell1Rev">Class</li>
+        <li><a href="class-use/String.html">Use</a></li>
+        <li><a href="package-tree.html">Tree</a></li>
+        <li><a href="../../deprecated-list.html">Deprecated</a></li>
+        <li><a href="../../index-files/index-1.html">Index</a></li>
+        <li><a href="../../help-doc.html">Help</a></li>
+    </ul>
+    <div class="aboutLanguage"><em><strong>Java&trade;&nbsp;Platform<br>Standard&nbsp;Ed.&nbsp;7</strong></em></div>
+</div>
+<div class="subNav">
+    <ul class="navList">
+        <li><a href="../../java/lang/StrictMath.html" title="class in java.lang"><span class="strong">Prev Class</span></a></li>
+        <li><a href="../../java/lang/StringBuffer.html" title="class in java.lang"><span class="strong">Next Class</span></a></li>
+    </ul>
+    <ul class="navList">
+        <li><a href="../../index.html?java/lang/String.html" target="_top">Frames</a></li>
+        <li><a href="String.html" target="_top">No Frames</a></li>
+    </ul>
+    <ul class="navList" id="allclasses_navbar_bottom">
+        <li><a href="../../allclasses-noframe.html">All Classes</a></li>
+    </ul>
+    <div>
+        <script type="text/javascript"><!--
+        allClassesLink = document.getElementById("allclasses_navbar_bottom");
+        if(window==top) {
+            allClassesLink.style.display = "block";
+        }
+        else {
+            allClassesLink.style.display = "none";
+        }
+        //-->
+        </script>
+    </div>
+    <div>
+        <ul class="subNavList">
+            <li>Summary:&nbsp;</li>
+            <li>Nested&nbsp;|&nbsp;</li>
+            <li><a href="#field_summary">Field</a>&nbsp;|&nbsp;</li>
+            <li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+            <li><a href="#method_summary">Method</a></li>
+        </ul>
+        <ul class="subNavList">
+            <li>Detail:&nbsp;</li>
+            <li><a href="#field_detail">Field</a>&nbsp;|&nbsp;</li>
+            <li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+            <li><a href="#method_detail">Method</a></li>
+        </ul>
+    </div>
+    <a name="skip-navbar_bottom">
+        <!--   -->
+    </a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small><font size="-1"> <a href="http://bugreport.sun.com/bugreport/">Submit a bug or feature</a> <br>For further API reference and developer documentation, see <a href="http://download.oracle.com/javase/7/docs/index.html" target="_blank">Java SE Documentation</a>. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.<br> <a href="../../../legal/cpyr.html">Copyright</a> &#x00a9; 1993, 2011, Oracle and/or its affiliates.  All rights reserved. </font></small></p>
+<!-- Start SiteCatalyst code   -->
+<script language="JavaScript" src="http://www.oracle.com/ocom/groups/systemobject/@mktg_admin/documents/systemobject/s_code_download.js"></script>
+<script language="JavaScript" src="http://www.oracle.com/ocom/groups/systemobject/@mktg_admin/documents/systemobject/s_code.js"></script>
+
+<!-- ********** DO NOT ALTER ANYTHING BELOW THIS LINE ! *********** -->
+<!--  Below code will send the info to Omniture server -->
+<script language="javascript">var s_code=s.t();if(s_code)document.write(s_code)</script>
+
+<!-- End SiteCatalyst code -->
+<noscript>
+    <p>Scripting on this page tracks web page traffic, but does not change the content in any way.</p>
+</noscript>
+</body>
+</html>
diff --git a/java/java-tests/testData/codeInsight/externalJavadoc/packageSummary/util/expected.html b/java/java-tests/testData/codeInsight/externalJavadoc/packageSummary/util/expected.html
new file mode 100644
index 0000000..32c2dd7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/externalJavadoc/packageSummary/util/expected.html
@@ -0,0 +1,38 @@
+<HTML><style type="text/css">  ul.inheritance {
+      margin:0;
+      padding:0;
+  }
+  ul.inheritance li {
+       display:inline;
+       list-style:none;
+  }
+  ul.inheritance li ul.inheritance {
+    margin-left:15px;
+    padding-left:15px;
+    padding-top:1px;
+  }
+</style><h2 title="Package java.util Description">Package java.util Description</h2>
+<div class="block">Contains the collections framework, legacy collection classes, event model,
+  date and time facilities, internationalization, and miscellaneous utility
+  classes (a string tokenizer, a random-number generator, and a bit array).
+
+  <h2>Package Specification</h2>
+  <ul>
+    <li><a href="../../../technotes/guides/collections/overview.html"><b>Collections Framework Overview</b></a>
+    <li><a href="../../../technotes/guides/collections/reference.html"><b>
+      Collections Framework Annotated Outline</b></a>
+  </ul>
+
+  <h2>Related Documentation</h2>
+  For overviews, tutorials, examples, guides, and tool documentation, please see:
+  <ul>
+    <li><a href="http://www.java.sun.com/docs/books/tutorial/collections/">
+      <b>Collections Framework Tutorial</b></a>
+    <li><a
+        href="../../../technotes/guides/collections/designfaq.html"><b>Collections
+      Framework Design FAQ</b></a>
+  </ul></div>
+<dl><dt><span class="strong">Since:</span></dt>
+  <dd>JDK1.0</dd></dl>
+</div>
+</HTML>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/externalJavadoc/packageSummary/util/page.html b/java/java-tests/testData/codeInsight/externalJavadoc/packageSummary/util/page.html
new file mode 100644
index 0000000..87c0858
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/externalJavadoc/packageSummary/util/page.html
@@ -0,0 +1,896 @@
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+  <!-- Generated by javadoc (version 1.6.0_14) on Thu Apr 12 05:45:03 PDT 2012 -->
+  <title>java.util (Java Platform SE 7 )</title>
+  <meta name="date" content="2012-04-12">
+  <meta name="keywords" content="java.util package">
+  <link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+    if (location.href.indexOf('is-external=true') == -1) {
+        parent.document.title="java.util (Java Platform SE 7 )";
+    }
+//-->
+</script>
+<noscript>
+  <div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+  <!--   -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+  <!--   -->
+</a>
+  <ul class="navList" title="Navigation">
+    <li><a href="../../overview-summary.html">Overview</a></li>
+    <li class="navBarCell1Rev">Package</li>
+    <li>Class</li>
+    <li><a href="package-use.html">Use</a></li>
+    <li><a href="package-tree.html">Tree</a></li>
+    <li><a href="../../deprecated-list.html">Deprecated</a></li>
+    <li><a href="../../index-files/index-1.html">Index</a></li>
+    <li><a href="../../help-doc.html">Help</a></li>
+  </ul>
+  <div class="aboutLanguage"><em><strong>Java&trade;&nbsp;Platform<br>Standard&nbsp;Ed.&nbsp;7</strong></em></div>
+</div>
+<div class="subNav">
+  <ul class="navList">
+    <li><a href="../../java/text/spi/package-summary.html">Prev Package</a></li>
+    <li><a href="../../java/util/concurrent/package-summary.html">Next Package</a></li>
+  </ul>
+  <ul class="navList">
+    <li><a href="../../index.html?java/util/package-summary.html" target="_top">Frames</a></li>
+    <li><a href="package-summary.html" target="_top">No Frames</a></li>
+  </ul>
+  <ul class="navList" id="allclasses_navbar_top">
+    <li><a href="../../allclasses-noframe.html">All Classes</a></li>
+  </ul>
+  <div>
+    <script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+    </script>
+  </div>
+  <a name="skip-navbar_top">
+    <!--   -->
+  </a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+  <h1 title="Package" class="title">Package&nbsp;java.util</h1>
+  <div class="docSummary">
+    <div class="block">Contains the collections framework, legacy collection classes, event model,
+      date and time facilities, internationalization, and miscellaneous utility
+      classes (a string tokenizer, a random-number generator, and a bit array).</div>
+  </div>
+  <p>See:&nbsp;<a href="#package_description">Description</a></p>
+</div>
+<div class="contentContainer">
+<ul class="blockList">
+<li class="blockList">
+  <table class="packageSummary" border="0" cellpadding="3" cellspacing="0" summary="Interface Summary table, listing interfaces, and an explanation">
+    <caption><span>Interface Summary</span><span class="tabEnd">&nbsp;</span></caption>
+    <tr>
+      <th class="colFirst" scope="col">Interface</th>
+      <th class="colLast" scope="col">Description</th>
+    </tr>
+    <tbody>
+    <tr class="altColor">
+      <td class="colFirst"><a href="../../java/util/Collection.html" title="interface in java.util">Collection</a>&lt;E&gt;</td>
+      <td class="colLast">
+        <div class="block">The root interface in the <i>collection hierarchy</i>.</div>
+      </td>
+    </tr>
+    <tr class="rowColor">
+      <td class="colFirst"><a href="../../java/util/Comparator.html" title="interface in java.util">Comparator</a>&lt;T&gt;</td>
+      <td class="colLast">
+        <div class="block">A comparison function, which imposes a <i>total ordering</i> on some
+          collection of objects.</div>
+      </td>
+    </tr>
+    <tr class="altColor">
+      <td class="colFirst"><a href="../../java/util/Deque.html" title="interface in java.util">Deque</a>&lt;E&gt;</td>
+      <td class="colLast">
+        <div class="block">A linear collection that supports element insertion and removal at
+          both ends.</div>
+      </td>
+    </tr>
+    <tr class="rowColor">
+      <td class="colFirst"><a href="../../java/util/Enumeration.html" title="interface in java.util">Enumeration</a>&lt;E&gt;</td>
+      <td class="colLast">
+        <div class="block">An object that implements the Enumeration interface generates a
+          series of elements, one at a time.</div>
+      </td>
+    </tr>
+    <tr class="altColor">
+      <td class="colFirst"><a href="../../java/util/EventListener.html" title="interface in java.util">EventListener</a></td>
+      <td class="colLast">
+        <div class="block">A tagging interface that all event listener interfaces must extend.</div>
+      </td>
+    </tr>
+    <tr class="rowColor">
+      <td class="colFirst"><a href="../../java/util/Formattable.html" title="interface in java.util">Formattable</a></td>
+      <td class="colLast">
+        <div class="block">The <tt>Formattable</tt> interface must be implemented by any class that
+          needs to perform custom formatting using the <tt>'s'</tt> conversion
+          specifier of <a href="../../java/util/Formatter.html" title="class in java.util"><code>Formatter</code></a>.</div>
+      </td>
+    </tr>
+    <tr class="altColor">
+      <td class="colFirst"><a href="../../java/util/Iterator.html" title="interface in java.util">Iterator</a>&lt;E&gt;</td>
+      <td class="colLast">
+        <div class="block">An iterator over a collection.</div>
+      </td>
+    </tr>
+    <tr class="rowColor">
+      <td class="colFirst"><a href="../../java/util/List.html" title="interface in java.util">List</a>&lt;E&gt;</td>
+      <td class="colLast">
+        <div class="block">An ordered collection (also known as a <i>sequence</i>).</div>
+      </td>
+    </tr>
+    <tr class="altColor">
+      <td class="colFirst"><a href="../../java/util/ListIterator.html" title="interface in java.util">ListIterator</a>&lt;E&gt;</td>
+      <td class="colLast">
+        <div class="block">An iterator for lists that allows the programmer
+          to traverse the list in either direction, modify
+          the list during iteration, and obtain the iterator's
+          current position in the list.</div>
+      </td>
+    </tr>
+    <tr class="rowColor">
+      <td class="colFirst"><a href="../../java/util/Map.html" title="interface in java.util">Map</a>&lt;K,V&gt;</td>
+      <td class="colLast">
+        <div class="block">An object that maps keys to values.</div>
+      </td>
+    </tr>
+    <tr class="altColor">
+      <td class="colFirst"><a href="../../java/util/Map.Entry.html" title="interface in java.util">Map.Entry</a>&lt;K,V&gt;</td>
+      <td class="colLast">
+        <div class="block">A map entry (key-value pair).</div>
+      </td>
+    </tr>
+    <tr class="rowColor">
+      <td class="colFirst"><a href="../../java/util/NavigableMap.html" title="interface in java.util">NavigableMap</a>&lt;K,V&gt;</td>
+      <td class="colLast">
+        <div class="block">A <a href="../../java/util/SortedMap.html" title="interface in java.util"><code>SortedMap</code></a> extended with navigation methods returning the
+          closest matches for given search targets.</div>
+      </td>
+    </tr>
+    <tr class="altColor">
+      <td class="colFirst"><a href="../../java/util/NavigableSet.html" title="interface in java.util">NavigableSet</a>&lt;E&gt;</td>
+      <td class="colLast">
+        <div class="block">A <a href="../../java/util/SortedSet.html" title="interface in java.util"><code>SortedSet</code></a> extended with navigation methods reporting
+          closest matches for given search targets.</div>
+      </td>
+    </tr>
+    <tr class="rowColor">
+      <td class="colFirst"><a href="../../java/util/Observer.html" title="interface in java.util">Observer</a></td>
+      <td class="colLast">
+        <div class="block">A class can implement the <code>Observer</code> interface when it
+          wants to be informed of changes in observable objects.</div>
+      </td>
+    </tr>
+    <tr class="altColor">
+      <td class="colFirst"><a href="../../java/util/Queue.html" title="interface in java.util">Queue</a>&lt;E&gt;</td>
+      <td class="colLast">
+        <div class="block">A collection designed for holding elements prior to processing.</div>
+      </td>
+    </tr>
+    <tr class="rowColor">
+      <td class="colFirst"><a href="../../java/util/RandomAccess.html" title="interface in java.util">RandomAccess</a></td>
+      <td class="colLast">
+        <div class="block">Marker interface used by <tt>List</tt> implementations to indicate that
+          they support fast (generally constant time) random access.</div>
+      </td>
+    </tr>
+    <tr class="altColor">
+      <td class="colFirst"><a href="../../java/util/Set.html" title="interface in java.util">Set</a>&lt;E&gt;</td>
+      <td class="colLast">
+        <div class="block">A collection that contains no duplicate elements.</div>
+      </td>
+    </tr>
+    <tr class="rowColor">
+      <td class="colFirst"><a href="../../java/util/SortedMap.html" title="interface in java.util">SortedMap</a>&lt;K,V&gt;</td>
+      <td class="colLast">
+        <div class="block">A <a href="../../java/util/Map.html" title="interface in java.util"><code>Map</code></a> that further provides a <em>total ordering</em> on its keys.</div>
+      </td>
+    </tr>
+    <tr class="altColor">
+      <td class="colFirst"><a href="../../java/util/SortedSet.html" title="interface in java.util">SortedSet</a>&lt;E&gt;</td>
+      <td class="colLast">
+        <div class="block">A <a href="../../java/util/Set.html" title="interface in java.util"><code>Set</code></a> that further provides a <i>total ordering</i> on its elements.</div>
+      </td>
+    </tr>
+    </tbody>
+  </table>
+</li>
+<li class="blockList">
+<table class="packageSummary" border="0" cellpadding="3" cellspacing="0" summary="Class Summary table, listing classes, and an explanation">
+<caption><span>Class Summary</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+  <th class="colFirst" scope="col">Class</th>
+  <th class="colLast" scope="col">Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+  <td class="colFirst"><a href="../../java/util/AbstractCollection.html" title="class in java.util">AbstractCollection</a>&lt;E&gt;</td>
+  <td class="colLast">
+    <div class="block">This class provides a skeletal implementation of the <tt>Collection</tt>
+      interface, to minimize the effort required to implement this interface.</div>
+  </td>
+</tr>
+<tr class="rowColor">
+  <td class="colFirst"><a href="../../java/util/AbstractList.html" title="class in java.util">AbstractList</a>&lt;E&gt;</td>
+  <td class="colLast">
+    <div class="block">This class provides a skeletal implementation of the <a href="../../java/util/List.html" title="interface in java.util"><code>List</code></a>
+      interface to minimize the effort required to implement this interface
+      backed by a "random access" data store (such as an array).</div>
+  </td>
+</tr>
+<tr class="altColor">
+  <td class="colFirst"><a href="../../java/util/AbstractMap.html" title="class in java.util">AbstractMap</a>&lt;K,V&gt;</td>
+  <td class="colLast">
+    <div class="block">This class provides a skeletal implementation of the <tt>Map</tt>
+      interface, to minimize the effort required to implement this interface.</div>
+  </td>
+</tr>
+<tr class="rowColor">
+  <td class="colFirst"><a href="../../java/util/AbstractMap.SimpleEntry.html" title="class in java.util">AbstractMap.SimpleEntry</a>&lt;K,V&gt;</td>
+  <td class="colLast">
+    <div class="block">An Entry maintaining a key and a value.</div>
+  </td>
+</tr>
+<tr class="altColor">
+  <td class="colFirst"><a href="../../java/util/AbstractMap.SimpleImmutableEntry.html" title="class in java.util">AbstractMap.SimpleImmutableEntry</a>&lt;K,V&gt;</td>
+  <td class="colLast">
+    <div class="block">An Entry maintaining an immutable key and value.</div>
+  </td>
+</tr>
+<tr class="rowColor">
+  <td class="colFirst"><a href="../../java/util/AbstractQueue.html" title="class in java.util">AbstractQueue</a>&lt;E&gt;</td>
+  <td class="colLast">
+    <div class="block">This class provides skeletal implementations of some <a href="../../java/util/Queue.html" title="interface in java.util"><code>Queue</code></a>
+      operations.</div>
+  </td>
+</tr>
+<tr class="altColor">
+  <td class="colFirst"><a href="../../java/util/AbstractSequentialList.html" title="class in java.util">AbstractSequentialList</a>&lt;E&gt;</td>
+  <td class="colLast">
+    <div class="block">This class provides a skeletal implementation of the <tt>List</tt>
+      interface to minimize the effort required to implement this interface
+      backed by a "sequential access" data store (such as a linked list).</div>
+  </td>
+</tr>
+<tr class="rowColor">
+  <td class="colFirst"><a href="../../java/util/AbstractSet.html" title="class in java.util">AbstractSet</a>&lt;E&gt;</td>
+  <td class="colLast">
+    <div class="block">This class provides a skeletal implementation of the <tt>Set</tt>
+      interface to minimize the effort required to implement this
+      interface.</div>
+  </td>
+</tr>
+<tr class="altColor">
+  <td class="colFirst"><a href="../../java/util/ArrayDeque.html" title="class in java.util">ArrayDeque</a>&lt;E&gt;</td>
+  <td class="colLast">
+    <div class="block">Resizable-array implementation of the <a href="../../java/util/Deque.html" title="interface in java.util"><code>Deque</code></a> interface.</div>
+  </td>
+</tr>
+<tr class="rowColor">
+  <td class="colFirst"><a href="../../java/util/ArrayList.html" title="class in java.util">ArrayList</a>&lt;E&gt;</td>
+  <td class="colLast">
+    <div class="block">Resizable-array implementation of the <tt>List</tt> interface.</div>
+  </td>
+</tr>
+<tr class="altColor">
+  <td class="colFirst"><a href="../../java/util/Arrays.html" title="class in java.util">Arrays</a></td>
+  <td class="colLast">
+    <div class="block">This class contains various methods for manipulating arrays (such as
+      sorting and searching).</div>
+  </td>
+</tr>
+<tr class="rowColor">
+  <td class="colFirst"><a href="../../java/util/BitSet.html" title="class in java.util">BitSet</a></td>
+  <td class="colLast">
+    <div class="block">This class implements a vector of bits that grows as needed.</div>
+  </td>
+</tr>
+<tr class="altColor">
+  <td class="colFirst"><a href="../../java/util/Calendar.html" title="class in java.util">Calendar</a></td>
+  <td class="colLast">
+    <div class="block">The <code>Calendar</code> class is an abstract class that provides methods
+      for converting between a specific instant in time and a set of <a href="../../java/util/Calendar.html#fields"><code>calendar fields</code></a> such as <code>YEAR</code>, <code>MONTH</code>,
+      <code>DAY_OF_MONTH</code>, <code>HOUR</code>, and so on, and for
+      manipulating the calendar fields, such as getting the date of the next
+      week.</div>
+  </td>
+</tr>
+<tr class="rowColor">
+  <td class="colFirst"><a href="../../java/util/Collections.html" title="class in java.util">Collections</a></td>
+  <td class="colLast">
+    <div class="block">This class consists exclusively of static methods that operate on or return
+      collections.</div>
+  </td>
+</tr>
+<tr class="altColor">
+  <td class="colFirst"><a href="../../java/util/Currency.html" title="class in java.util">Currency</a></td>
+  <td class="colLast">
+    <div class="block">Represents a currency.</div>
+  </td>
+</tr>
+<tr class="rowColor">
+  <td class="colFirst"><a href="../../java/util/Date.html" title="class in java.util">Date</a></td>
+  <td class="colLast">
+    <div class="block">The class <code>Date</code> represents a specific instant
+      in time, with millisecond precision.</div>
+  </td>
+</tr>
+<tr class="altColor">
+  <td class="colFirst"><a href="../../java/util/Dictionary.html" title="class in java.util">Dictionary</a>&lt;K,V&gt;</td>
+  <td class="colLast">
+    <div class="block">The <code>Dictionary</code> class is the abstract parent of any
+      class, such as <code>Hashtable</code>, which maps keys to values.</div>
+  </td>
+</tr>
+<tr class="rowColor">
+  <td class="colFirst"><a href="../../java/util/EnumMap.html" title="class in java.util">EnumMap</a>&lt;K extends <a href="../../java/lang/Enum.html" title="class in java.lang">Enum</a>&lt;K&gt;,V&gt;</td>
+  <td class="colLast">
+    <div class="block">A specialized <a href="../../java/util/Map.html" title="interface in java.util"><code>Map</code></a> implementation for use with enum type keys.</div>
+  </td>
+</tr>
+<tr class="altColor">
+  <td class="colFirst"><a href="../../java/util/EnumSet.html" title="class in java.util">EnumSet</a>&lt;E extends <a href="../../java/lang/Enum.html" title="class in java.lang">Enum</a>&lt;E&gt;&gt;</td>
+  <td class="colLast">
+    <div class="block">A specialized <a href="../../java/util/Set.html" title="interface in java.util"><code>Set</code></a> implementation for use with enum types.</div>
+  </td>
+</tr>
+<tr class="rowColor">
+  <td class="colFirst"><a href="../../java/util/EventListenerProxy.html" title="class in java.util">EventListenerProxy</a>&lt;T extends <a href="../../java/util/EventListener.html" title="interface in java.util">EventListener</a>&gt;</td>
+  <td class="colLast">
+    <div class="block">An abstract wrapper class for an <code>EventListener</code> class
+      which associates a set of additional parameters with the listener.</div>
+  </td>
+</tr>
+<tr class="altColor">
+  <td class="colFirst"><a href="../../java/util/EventObject.html" title="class in java.util">EventObject</a></td>
+  <td class="colLast">
+    <div class="block">
+      The root class from which all event state objects shall be derived.</div>
+  </td>
+</tr>
+<tr class="rowColor">
+  <td class="colFirst"><a href="../../java/util/FormattableFlags.html" title="class in java.util">FormattableFlags</a></td>
+  <td class="colLast">
+    <div class="block">FomattableFlags are passed to the <a href="../../java/util/Formattable.html#formatTo(java.util.Formatter, int, int, int)"><code>Formattable.formatTo()</code></a> method and modify the output format for <a href="../../java/util/Formattable.html" title="interface in java.util">Formattables</a>.</div>
+  </td>
+</tr>
+<tr class="altColor">
+  <td class="colFirst"><a href="../../java/util/Formatter.html" title="class in java.util">Formatter</a></td>
+  <td class="colLast">
+    <div class="block">An interpreter for printf-style format strings.</div>
+  </td>
+</tr>
+<tr class="rowColor">
+  <td class="colFirst"><a href="../../java/util/GregorianCalendar.html" title="class in java.util">GregorianCalendar</a></td>
+  <td class="colLast">
+    <div class="block"><code>GregorianCalendar</code> is a concrete subclass of
+      <code>Calendar</code> and provides the standard calendar system
+      used by most of the world.</div>
+  </td>
+</tr>
+<tr class="altColor">
+  <td class="colFirst"><a href="../../java/util/HashMap.html" title="class in java.util">HashMap</a>&lt;K,V&gt;</td>
+  <td class="colLast">
+    <div class="block">Hash table based implementation of the <tt>Map</tt> interface.</div>
+  </td>
+</tr>
+<tr class="rowColor">
+  <td class="colFirst"><a href="../../java/util/HashSet.html" title="class in java.util">HashSet</a>&lt;E&gt;</td>
+  <td class="colLast">
+    <div class="block">This class implements the <tt>Set</tt> interface, backed by a hash table
+      (actually a <tt>HashMap</tt> instance).</div>
+  </td>
+</tr>
+<tr class="altColor">
+  <td class="colFirst"><a href="../../java/util/Hashtable.html" title="class in java.util">Hashtable</a>&lt;K,V&gt;</td>
+  <td class="colLast">
+    <div class="block">This class implements a hash table, which maps keys to values.</div>
+  </td>
+</tr>
+<tr class="rowColor">
+  <td class="colFirst"><a href="../../java/util/IdentityHashMap.html" title="class in java.util">IdentityHashMap</a>&lt;K,V&gt;</td>
+  <td class="colLast">
+    <div class="block">This class implements the <tt>Map</tt> interface with a hash table, using
+      reference-equality in place of object-equality when comparing keys (and
+      values).</div>
+  </td>
+</tr>
+<tr class="altColor">
+  <td class="colFirst"><a href="../../java/util/LinkedHashMap.html" title="class in java.util">LinkedHashMap</a>&lt;K,V&gt;</td>
+  <td class="colLast">
+    <div class="block">Hash table and linked list implementation of the <tt>Map</tt> interface,
+      with predictable iteration order.</div>
+  </td>
+</tr>
+<tr class="rowColor">
+  <td class="colFirst"><a href="../../java/util/LinkedHashSet.html" title="class in java.util">LinkedHashSet</a>&lt;E&gt;</td>
+  <td class="colLast">
+    <div class="block">Hash table and linked list implementation of the <tt>Set</tt> interface,
+      with predictable iteration order.</div>
+  </td>
+</tr>
+<tr class="altColor">
+  <td class="colFirst"><a href="../../java/util/LinkedList.html" title="class in java.util">LinkedList</a>&lt;E&gt;</td>
+  <td class="colLast">
+    <div class="block">Doubly-linked list implementation of the <code>List</code> and <code>Deque</code>
+      interfaces.</div>
+  </td>
+</tr>
+<tr class="rowColor">
+  <td class="colFirst"><a href="../../java/util/ListResourceBundle.html" title="class in java.util">ListResourceBundle</a></td>
+  <td class="colLast">
+    <div class="block"><code>ListResourceBundle</code> is an abstract subclass of
+      <code>ResourceBundle</code> that manages resources for a locale
+      in a convenient and easy to use list.</div>
+  </td>
+</tr>
+<tr class="altColor">
+  <td class="colFirst"><a href="../../java/util/Locale.html" title="class in java.util">Locale</a></td>
+  <td class="colLast">
+    <div class="block">A <code>Locale</code> object represents a specific geographical, political,
+      or cultural region.</div>
+  </td>
+</tr>
+<tr class="rowColor">
+  <td class="colFirst"><a href="../../java/util/Locale.Builder.html" title="class in java.util">Locale.Builder</a></td>
+  <td class="colLast">
+    <div class="block"><code>Builder</code> is used to build instances of <code>Locale</code>
+      from values configured by the setters.</div>
+  </td>
+</tr>
+<tr class="altColor">
+  <td class="colFirst"><a href="../../java/util/Objects.html" title="class in java.util">Objects</a></td>
+  <td class="colLast">
+    <div class="block">This class consists of <code>static</code> utility methods for operating
+      on objects.</div>
+  </td>
+</tr>
+<tr class="rowColor">
+  <td class="colFirst"><a href="../../java/util/Observable.html" title="class in java.util">Observable</a></td>
+  <td class="colLast">
+    <div class="block">This class represents an observable object, or "data"
+      in the model-view paradigm.</div>
+  </td>
+</tr>
+<tr class="altColor">
+  <td class="colFirst"><a href="../../java/util/PriorityQueue.html" title="class in java.util">PriorityQueue</a>&lt;E&gt;</td>
+  <td class="colLast">
+    <div class="block">An unbounded priority <a href="../../java/util/Queue.html" title="interface in java.util">queue</a> based on a priority heap.</div>
+  </td>
+</tr>
+<tr class="rowColor">
+  <td class="colFirst"><a href="../../java/util/Properties.html" title="class in java.util">Properties</a></td>
+  <td class="colLast">
+    <div class="block">The <code>Properties</code> class represents a persistent set of
+      properties.</div>
+  </td>
+</tr>
+<tr class="altColor">
+  <td class="colFirst"><a href="../../java/util/PropertyPermission.html" title="class in java.util">PropertyPermission</a></td>
+  <td class="colLast">
+    <div class="block">This class is for property permissions.</div>
+  </td>
+</tr>
+<tr class="rowColor">
+  <td class="colFirst"><a href="../../java/util/PropertyResourceBundle.html" title="class in java.util">PropertyResourceBundle</a></td>
+  <td class="colLast">
+    <div class="block"><code>PropertyResourceBundle</code> is a concrete subclass of
+      <code>ResourceBundle</code> that manages resources for a locale
+      using a set of static strings from a property file.</div>
+  </td>
+</tr>
+<tr class="altColor">
+  <td class="colFirst"><a href="../../java/util/Random.html" title="class in java.util">Random</a></td>
+  <td class="colLast">
+    <div class="block">An instance of this class is used to generate a stream of
+      pseudorandom numbers.</div>
+  </td>
+</tr>
+<tr class="rowColor">
+  <td class="colFirst"><a href="../../java/util/ResourceBundle.html" title="class in java.util">ResourceBundle</a></td>
+  <td class="colLast">
+    <div class="block">Resource bundles contain locale-specific objects.</div>
+  </td>
+</tr>
+<tr class="altColor">
+  <td class="colFirst"><a href="../../java/util/ResourceBundle.Control.html" title="class in java.util">ResourceBundle.Control</a></td>
+  <td class="colLast">
+    <div class="block"><code>ResourceBundle.Control</code> defines a set of callback methods
+      that are invoked by the <a href="../../java/util/ResourceBundle.html#getBundle(java.lang.String, java.util.Locale, java.lang.ClassLoader, java.util.ResourceBundle.Control)"><code>ResourceBundle.getBundle</code></a> factory
+      methods during the bundle loading process.</div>
+  </td>
+</tr>
+<tr class="rowColor">
+  <td class="colFirst"><a href="../../java/util/Scanner.html" title="class in java.util">Scanner</a></td>
+  <td class="colLast">
+    <div class="block">A simple text scanner which can parse primitive types and strings using
+      regular expressions.</div>
+  </td>
+</tr>
+<tr class="altColor">
+  <td class="colFirst"><a href="../../java/util/ServiceLoader.html" title="class in java.util">ServiceLoader</a>&lt;S&gt;</td>
+  <td class="colLast">
+    <div class="block">A simple service-provider loading facility.</div>
+  </td>
+</tr>
+<tr class="rowColor">
+  <td class="colFirst"><a href="../../java/util/SimpleTimeZone.html" title="class in java.util">SimpleTimeZone</a></td>
+  <td class="colLast">
+    <div class="block"><code>SimpleTimeZone</code> is a concrete subclass of <code>TimeZone</code>
+      that represents a time zone for use with a Gregorian calendar.</div>
+  </td>
+</tr>
+<tr class="altColor">
+  <td class="colFirst"><a href="../../java/util/Stack.html" title="class in java.util">Stack</a>&lt;E&gt;</td>
+  <td class="colLast">
+    <div class="block">The <code>Stack</code> class represents a last-in-first-out
+      (LIFO) stack of objects.</div>
+  </td>
+</tr>
+<tr class="rowColor">
+  <td class="colFirst"><a href="../../java/util/StringTokenizer.html" title="class in java.util">StringTokenizer</a></td>
+  <td class="colLast">
+    <div class="block">The string tokenizer class allows an application to break a
+      string into tokens.</div>
+  </td>
+</tr>
+<tr class="altColor">
+  <td class="colFirst"><a href="../../java/util/Timer.html" title="class in java.util">Timer</a></td>
+  <td class="colLast">
+    <div class="block">A facility for threads to schedule tasks for future execution in a
+      background thread.</div>
+  </td>
+</tr>
+<tr class="rowColor">
+  <td class="colFirst"><a href="../../java/util/TimerTask.html" title="class in java.util">TimerTask</a></td>
+  <td class="colLast">
+    <div class="block">A task that can be scheduled for one-time or repeated execution by a Timer.</div>
+  </td>
+</tr>
+<tr class="altColor">
+  <td class="colFirst"><a href="../../java/util/TimeZone.html" title="class in java.util">TimeZone</a></td>
+  <td class="colLast">
+    <div class="block"><code>TimeZone</code> represents a time zone offset, and also figures out daylight
+      savings.</div>
+  </td>
+</tr>
+<tr class="rowColor">
+  <td class="colFirst"><a href="../../java/util/TreeMap.html" title="class in java.util">TreeMap</a>&lt;K,V&gt;</td>
+  <td class="colLast">
+    <div class="block">A Red-Black tree based <a href="../../java/util/NavigableMap.html" title="interface in java.util"><code>NavigableMap</code></a> implementation.</div>
+  </td>
+</tr>
+<tr class="altColor">
+  <td class="colFirst"><a href="../../java/util/TreeSet.html" title="class in java.util">TreeSet</a>&lt;E&gt;</td>
+  <td class="colLast">
+    <div class="block">A <a href="../../java/util/NavigableSet.html" title="interface in java.util"><code>NavigableSet</code></a> implementation based on a <a href="../../java/util/TreeMap.html" title="class in java.util"><code>TreeMap</code></a>.</div>
+  </td>
+</tr>
+<tr class="rowColor">
+  <td class="colFirst"><a href="../../java/util/UUID.html" title="class in java.util">UUID</a></td>
+  <td class="colLast">
+    <div class="block">A class that represents an immutable universally unique identifier (UUID).</div>
+  </td>
+</tr>
+<tr class="altColor">
+  <td class="colFirst"><a href="../../java/util/Vector.html" title="class in java.util">Vector</a>&lt;E&gt;</td>
+  <td class="colLast">
+    <div class="block">The <code>Vector</code> class implements a growable array of
+      objects.</div>
+  </td>
+</tr>
+<tr class="rowColor">
+  <td class="colFirst"><a href="../../java/util/WeakHashMap.html" title="class in java.util">WeakHashMap</a>&lt;K,V&gt;</td>
+  <td class="colLast">
+    <div class="block">Hash table based implementation of the <tt>Map</tt> interface, with
+      <em>weak keys</em>.</div>
+  </td>
+</tr>
+</tbody>
+</table>
+</li>
+<li class="blockList">
+  <table class="packageSummary" border="0" cellpadding="3" cellspacing="0" summary="Enum Summary table, listing enums, and an explanation">
+    <caption><span>Enum Summary</span><span class="tabEnd">&nbsp;</span></caption>
+    <tr>
+      <th class="colFirst" scope="col">Enum</th>
+      <th class="colLast" scope="col">Description</th>
+    </tr>
+    <tbody>
+    <tr class="altColor">
+      <td class="colFirst"><a href="../../java/util/Formatter.BigDecimalLayoutForm.html" title="enum in java.util">Formatter.BigDecimalLayoutForm</a></td>
+      <td class="colLast">&nbsp;</td>
+    </tr>
+    <tr class="rowColor">
+      <td class="colFirst"><a href="../../java/util/Locale.Category.html" title="enum in java.util">Locale.Category</a></td>
+      <td class="colLast">
+        <div class="block">Enum for locale categories.</div>
+      </td>
+    </tr>
+    </tbody>
+  </table>
+</li>
+<li class="blockList">
+  <table class="packageSummary" border="0" cellpadding="3" cellspacing="0" summary="Exception Summary table, listing exceptions, and an explanation">
+    <caption><span>Exception Summary</span><span class="tabEnd">&nbsp;</span></caption>
+    <tr>
+      <th class="colFirst" scope="col">Exception</th>
+      <th class="colLast" scope="col">Description</th>
+    </tr>
+    <tbody>
+    <tr class="altColor">
+      <td class="colFirst"><a href="../../java/util/ConcurrentModificationException.html" title="class in java.util">ConcurrentModificationException</a></td>
+      <td class="colLast">
+        <div class="block">This exception may be thrown by methods that have detected concurrent
+          modification of an object when such modification is not permissible.</div>
+      </td>
+    </tr>
+    <tr class="rowColor">
+      <td class="colFirst"><a href="../../java/util/DuplicateFormatFlagsException.html" title="class in java.util">DuplicateFormatFlagsException</a></td>
+      <td class="colLast">
+        <div class="block">Unchecked exception thrown when duplicate flags are provided in the format
+          specifier.</div>
+      </td>
+    </tr>
+    <tr class="altColor">
+      <td class="colFirst"><a href="../../java/util/EmptyStackException.html" title="class in java.util">EmptyStackException</a></td>
+      <td class="colLast">
+        <div class="block">Thrown by methods in the <code>Stack</code> class to indicate
+          that the stack is empty.</div>
+      </td>
+    </tr>
+    <tr class="rowColor">
+      <td class="colFirst"><a href="../../java/util/FormatFlagsConversionMismatchException.html" title="class in java.util">FormatFlagsConversionMismatchException</a></td>
+      <td class="colLast">
+        <div class="block">Unchecked exception thrown when a conversion and flag are incompatible.</div>
+      </td>
+    </tr>
+    <tr class="altColor">
+      <td class="colFirst"><a href="../../java/util/FormatterClosedException.html" title="class in java.util">FormatterClosedException</a></td>
+      <td class="colLast">
+        <div class="block">Unchecked exception thrown when the formatter has been closed.</div>
+      </td>
+    </tr>
+    <tr class="rowColor">
+      <td class="colFirst"><a href="../../java/util/IllegalFormatCodePointException.html" title="class in java.util">IllegalFormatCodePointException</a></td>
+      <td class="colLast">
+        <div class="block">Unchecked exception thrown when a character with an invalid Unicode code
+          point as defined by <a href="../../java/lang/Character.html#isValidCodePoint(int)"><code>Character.isValidCodePoint(int)</code></a> is passed to the
+          <a href="../../java/util/Formatter.html" title="class in java.util"><code>Formatter</code></a>.</div>
+      </td>
+    </tr>
+    <tr class="altColor">
+      <td class="colFirst"><a href="../../java/util/IllegalFormatConversionException.html" title="class in java.util">IllegalFormatConversionException</a></td>
+      <td class="colLast">
+        <div class="block">Unchecked exception thrown when the argument corresponding to the format
+          specifier is of an incompatible type.</div>
+      </td>
+    </tr>
+    <tr class="rowColor">
+      <td class="colFirst"><a href="../../java/util/IllegalFormatException.html" title="class in java.util">IllegalFormatException</a></td>
+      <td class="colLast">
+        <div class="block">Unchecked exception thrown when a format string contains an illegal syntax
+          or a format specifier that is incompatible with the given arguments.</div>
+      </td>
+    </tr>
+    <tr class="altColor">
+      <td class="colFirst"><a href="../../java/util/IllegalFormatFlagsException.html" title="class in java.util">IllegalFormatFlagsException</a></td>
+      <td class="colLast">
+        <div class="block">Unchecked exception thrown when an illegal combination flags is given.</div>
+      </td>
+    </tr>
+    <tr class="rowColor">
+      <td class="colFirst"><a href="../../java/util/IllegalFormatPrecisionException.html" title="class in java.util">IllegalFormatPrecisionException</a></td>
+      <td class="colLast">
+        <div class="block">Unchecked exception thrown when the precision is a negative value other than
+          <tt>-1</tt>, the conversion does not support a precision, or the value is
+          otherwise unsupported.</div>
+      </td>
+    </tr>
+    <tr class="altColor">
+      <td class="colFirst"><a href="../../java/util/IllegalFormatWidthException.html" title="class in java.util">IllegalFormatWidthException</a></td>
+      <td class="colLast">
+        <div class="block">Unchecked exception thrown when the format width is a negative value other
+          than <tt>-1</tt> or is otherwise unsupported.</div>
+      </td>
+    </tr>
+    <tr class="rowColor">
+      <td class="colFirst"><a href="../../java/util/IllformedLocaleException.html" title="class in java.util">IllformedLocaleException</a></td>
+      <td class="colLast">
+        <div class="block">Thrown by methods in <a href="../../java/util/Locale.html" title="class in java.util"><code>Locale</code></a> and <a href="../../java/util/Locale.Builder.html" title="class in java.util"><code>Locale.Builder</code></a> to
+          indicate that an argument is not a well-formed BCP 47 tag.</div>
+      </td>
+    </tr>
+    <tr class="altColor">
+      <td class="colFirst"><a href="../../java/util/InputMismatchException.html" title="class in java.util">InputMismatchException</a></td>
+      <td class="colLast">
+        <div class="block">Thrown by a <code>Scanner</code> to indicate that the token
+          retrieved does not match the pattern for the expected type, or
+          that the token is out of range for the expected type.</div>
+      </td>
+    </tr>
+    <tr class="rowColor">
+      <td class="colFirst"><a href="../../java/util/InvalidPropertiesFormatException.html" title="class in java.util">InvalidPropertiesFormatException</a></td>
+      <td class="colLast">
+        <div class="block">Thrown to indicate that an operation could not complete because
+          the input did not conform to the appropriate XML document type
+          for a collection of properties, as per the <a href="../../java/util/Properties.html" title="class in java.util"><code>Properties</code></a>
+          specification.</div>
+      </td>
+    </tr>
+    <tr class="altColor">
+      <td class="colFirst"><a href="../../java/util/MissingFormatArgumentException.html" title="class in java.util">MissingFormatArgumentException</a></td>
+      <td class="colLast">
+        <div class="block">Unchecked exception thrown when there is a format specifier which does not
+          have a corresponding argument or if an argument index refers to an argument
+          that does not exist.</div>
+      </td>
+    </tr>
+    <tr class="rowColor">
+      <td class="colFirst"><a href="../../java/util/MissingFormatWidthException.html" title="class in java.util">MissingFormatWidthException</a></td>
+      <td class="colLast">
+        <div class="block">Unchecked exception thrown when the format width is required.</div>
+      </td>
+    </tr>
+    <tr class="altColor">
+      <td class="colFirst"><a href="../../java/util/MissingResourceException.html" title="class in java.util">MissingResourceException</a></td>
+      <td class="colLast">
+        <div class="block">Signals that a resource is missing.</div>
+      </td>
+    </tr>
+    <tr class="rowColor">
+      <td class="colFirst"><a href="../../java/util/NoSuchElementException.html" title="class in java.util">NoSuchElementException</a></td>
+      <td class="colLast">
+        <div class="block">Thrown by the <code>nextElement</code> method of an
+          <code>Enumeration</code> to indicate that there are no more
+          elements in the enumeration.</div>
+      </td>
+    </tr>
+    <tr class="altColor">
+      <td class="colFirst"><a href="../../java/util/TooManyListenersException.html" title="class in java.util">TooManyListenersException</a></td>
+      <td class="colLast">
+        <div class="block">
+          The <code> TooManyListenersException </code> Exception is used as part of
+          the Java Event model to annotate and implement a unicast special case of
+          a multicast Event Source.</div>
+      </td>
+    </tr>
+    <tr class="rowColor">
+      <td class="colFirst"><a href="../../java/util/UnknownFormatConversionException.html" title="class in java.util">UnknownFormatConversionException</a></td>
+      <td class="colLast">
+        <div class="block">Unchecked exception thrown when an unknown conversion is given.</div>
+      </td>
+    </tr>
+    <tr class="altColor">
+      <td class="colFirst"><a href="../../java/util/UnknownFormatFlagsException.html" title="class in java.util">UnknownFormatFlagsException</a></td>
+      <td class="colLast">
+        <div class="block">Unchecked exception thrown when an unknown flag is given.</div>
+      </td>
+    </tr>
+    </tbody>
+  </table>
+</li>
+<li class="blockList">
+  <table class="packageSummary" border="0" cellpadding="3" cellspacing="0" summary="Error Summary table, listing errors, and an explanation">
+    <caption><span>Error Summary</span><span class="tabEnd">&nbsp;</span></caption>
+    <tr>
+      <th class="colFirst" scope="col">Error</th>
+      <th class="colLast" scope="col">Description</th>
+    </tr>
+    <tbody>
+    <tr class="altColor">
+      <td class="colFirst"><a href="../../java/util/ServiceConfigurationError.html" title="class in java.util">ServiceConfigurationError</a></td>
+      <td class="colLast">
+        <div class="block">Error thrown when something goes wrong while loading a service provider.</div>
+      </td>
+    </tr>
+    </tbody>
+  </table>
+</li>
+</ul>
+<a name="package_description">
+  <!--   -->
+</a>
+<h2 title="Package java.util Description">Package java.util Description</h2>
+<div class="block">Contains the collections framework, legacy collection classes, event model,
+  date and time facilities, internationalization, and miscellaneous utility
+  classes (a string tokenizer, a random-number generator, and a bit array).
+
+  <h2>Package Specification</h2>
+  <ul>
+    <li><a href="../../../technotes/guides/collections/overview.html"><b>Collections Framework Overview</b></a>
+    <li><a href="../../../technotes/guides/collections/reference.html"><b>
+      Collections Framework Annotated Outline</b></a>
+  </ul>
+
+  <h2>Related Documentation</h2>
+  For overviews, tutorials, examples, guides, and tool documentation, please see:
+  <ul>
+    <li><a href="http://www.java.sun.com/docs/books/tutorial/collections/">
+      <b>Collections Framework Tutorial</b></a>
+    <li><a
+        href="../../../technotes/guides/collections/designfaq.html"><b>Collections
+      Framework Design FAQ</b></a>
+  </ul></div>
+<dl><dt><span class="strong">Since:</span></dt>
+  <dd>JDK1.0</dd></dl>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+  <!--   -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+  <!--   -->
+</a>
+  <ul class="navList" title="Navigation">
+    <li><a href="../../overview-summary.html">Overview</a></li>
+    <li class="navBarCell1Rev">Package</li>
+    <li>Class</li>
+    <li><a href="package-use.html">Use</a></li>
+    <li><a href="package-tree.html">Tree</a></li>
+    <li><a href="../../deprecated-list.html">Deprecated</a></li>
+    <li><a href="../../index-files/index-1.html">Index</a></li>
+    <li><a href="../../help-doc.html">Help</a></li>
+  </ul>
+  <div class="aboutLanguage"><em><strong>Java&trade;&nbsp;Platform<br>Standard&nbsp;Ed.&nbsp;7</strong></em></div>
+</div>
+<div class="subNav">
+  <ul class="navList">
+    <li><a href="../../java/text/spi/package-summary.html">Prev Package</a></li>
+    <li><a href="../../java/util/concurrent/package-summary.html">Next Package</a></li>
+  </ul>
+  <ul class="navList">
+    <li><a href="../../index.html?java/util/package-summary.html" target="_top">Frames</a></li>
+    <li><a href="package-summary.html" target="_top">No Frames</a></li>
+  </ul>
+  <ul class="navList" id="allclasses_navbar_bottom">
+    <li><a href="../../allclasses-noframe.html">All Classes</a></li>
+  </ul>
+  <div>
+    <script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+    </script>
+  </div>
+  <a name="skip-navbar_bottom">
+    <!--   -->
+  </a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small><font size="-1"> <a href="http://bugreport.sun.com/bugreport/">Submit a bug or feature</a> <br>For further API reference and developer documentation, see <a href="http://download.oracle.com/javase/7/docs/index.html" target="_blank">Java SE Documentation</a>. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.<br> <a href="../../../legal/cpyr.html">Copyright</a> &#x00a9; 1993, 2012, Oracle and/or its affiliates.  All rights reserved. </font></small></p>
+<!-- Start SiteCatalyst code   -->
+<script type="text/JavaScript" src="http://www.oracle.com/ocom/groups/systemobject/@mktg_admin/documents/systemobject/s_code_download.js"></script>
+<script type="text/JavaScript" src="http://www.oracle.com/ocom/groups/systemobject/@mktg_admin/documents/systemobject/s_code.js"></script>
+
+<!-- ********** DO NOT ALTER ANYTHING BELOW THIS LINE ! *********** -->
+<!--  Below code will send the info to Omniture server -->
+<script type="text/javascript">var s_code=s.t();if(s_code)document.write(s_code)</script>
+
+<!-- End SiteCatalyst code -->
+<noscript>
+  <p>Scripting on this page tracks web page traffic, but does not change the content in any way.</p>
+</noscript>
+</body>
+</html>
diff --git a/java/java-tests/testData/codeInsight/folding/CustomFolding.java b/java/java-tests/testData/codeInsight/folding/CustomFolding.java
new file mode 100644
index 0000000..d68f535
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/folding/CustomFolding.java
@@ -0,0 +1,17 @@
+public class Test {
+  <fold text='My private fields'>// <editor-fold desc="My private fields">
+  private int x;
+  private int y;
+  // </editor-fold></fold>
+
+  <fold text='My methods'>// <editor-fold desc="My methods">
+  private void doSomething() <fold text='{...}'>{
+    StringBuilder s = new StringBuilder();
+    <fold text='My code'>// <editor-fold desc="My code">
+    s.append("a");
+    s.append("b");
+    // </editor-fold></fold>
+    System.out.println(s.toString());
+  }</fold>
+  // </editor-fold></fold>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/folding/EndOfLineComments.java b/java/java-tests/testData/codeInsight/folding/EndOfLineComments.java
new file mode 100644
index 0000000..d536fc3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/folding/EndOfLineComments.java
@@ -0,0 +1,14 @@
+class Test {
+  
+  <fold text='//...'>// class-level folding1
+  // class-level folding2</fold>
+  
+  public void foo() <fold text='{...}'>{
+    <fold text='//...'>// method-level folding1
+    // method-level folding2</fold>
+    int i = 1;
+    // method-level folding2
+  }</fold>
+
+  // class-level folding3
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generateConstructor/afterAbstractClass.java b/java/java-tests/testData/codeInsight/generateConstructor/afterAbstractClass.java
new file mode 100644
index 0000000..6e850b1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generateConstructor/afterAbstractClass.java
@@ -0,0 +1,4 @@
+public abstract class Test {
+    protected Test() {<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/generateConstructor/afterBoundComments.java b/java/java-tests/testData/codeInsight/generateConstructor/afterBoundComments.java
new file mode 100644
index 0000000..09c67c7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generateConstructor/afterBoundComments.java
@@ -0,0 +1,9 @@
+public class Foo {
+    public Foo() {<caret>
+    }
+    // Method comment
+
+    public String getSomeGetter() {
+        return null;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/generateConstructor/afterBoundCommentsKeepsBlankLine.java b/java/java-tests/testData/codeInsight/generateConstructor/afterBoundCommentsKeepsBlankLine.java
new file mode 100644
index 0000000..d3b335a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generateConstructor/afterBoundCommentsKeepsBlankLine.java
@@ -0,0 +1,11 @@
+public class Foo {
+
+    public Foo() {<caret>
+    }
+
+    // Method comment
+
+    public String getSomeGetter() {
+        return null;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/generateConstructor/afterEnumWithAbstractMethod.java b/java/java-tests/testData/codeInsight/generateConstructor/afterEnumWithAbstractMethod.java
new file mode 100644
index 0000000..f12bc94
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generateConstructor/afterEnumWithAbstractMethod.java
@@ -0,0 +1,12 @@
+public enum Operation {
+    PLUS {
+        int eval(int x, int y) {
+            return x + y;
+        }
+    };
+
+    abstract int eval(int x, int y);
+
+    private Operation() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generateConstructor/afterFinalFieldPreselection.java b/java/java-tests/testData/codeInsight/generateConstructor/afterFinalFieldPreselection.java
new file mode 100644
index 0000000..bd402a9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generateConstructor/afterFinalFieldPreselection.java
@@ -0,0 +1,11 @@
+class Test {
+    private int a;
+    private final int b;
+    private int c;
+    private final int d;
+
+    Test(int b, int d) {
+        this.b = b;
+        this.d = d;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generateConstructor/afterImmediatelyAfterRBrace.java b/java/java-tests/testData/codeInsight/generateConstructor/afterImmediatelyAfterRBrace.java
new file mode 100644
index 0000000..f5b9858
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generateConstructor/afterImmediatelyAfterRBrace.java
@@ -0,0 +1,5 @@
+class A
+{
+    A() {
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/generateConstructor/afterNoMoreConstructorsCanBeGenerated.java b/java/java-tests/testData/codeInsight/generateConstructor/afterNoMoreConstructorsCanBeGenerated.java
new file mode 100644
index 0000000..5e18f99
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generateConstructor/afterNoMoreConstructorsCanBeGenerated.java
@@ -0,0 +1,6 @@
+public class Test {
+  <caret>
+
+  public Test() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generateConstructor/afterPackageLocalClass.java b/java/java-tests/testData/codeInsight/generateConstructor/afterPackageLocalClass.java
new file mode 100644
index 0000000..0d9b0ad
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generateConstructor/afterPackageLocalClass.java
@@ -0,0 +1,4 @@
+class Test {
+    Test() {<caret>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/generateConstructor/afterPrivateClass.java b/java/java-tests/testData/codeInsight/generateConstructor/afterPrivateClass.java
new file mode 100644
index 0000000..1990616
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generateConstructor/afterPrivateClass.java
@@ -0,0 +1,6 @@
+class Test {
+  private class Foo {
+      private Foo() {<caret>
+      }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/generateConstructor/afterSameNamedFields.java b/java/java-tests/testData/codeInsight/generateConstructor/afterSameNamedFields.java
new file mode 100644
index 0000000..b388bc3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generateConstructor/afterSameNamedFields.java
@@ -0,0 +1,16 @@
+public class Clas extends Clas2{
+    int foo;
+
+    public Clas(int foo, int foo1) {<caret>
+        super(foo);
+        foo = foo1;
+    }
+}
+
+class Clas2 {
+    int foo;
+
+    Clas2(int foo) {
+        this.foo = foo;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/generateConstructor/afterSubstitution.java b/java/java-tests/testData/codeInsight/generateConstructor/afterSubstitution.java
new file mode 100644
index 0000000..f457956a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generateConstructor/afterSubstitution.java
@@ -0,0 +1,13 @@
+class Parent<T> {
+  T field;
+
+  public Parent(T field) {
+    this.field = field;
+  }
+}
+
+class Child<Integer> extends Parent<Integer> {
+    Child(Integer field) {
+        super(field);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/generateConstructor/beforeAbstractClass.java b/java/java-tests/testData/codeInsight/generateConstructor/beforeAbstractClass.java
new file mode 100644
index 0000000..4cf9a0c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generateConstructor/beforeAbstractClass.java
@@ -0,0 +1,3 @@
+public abstract class Test {
+  <caret>
+}
diff --git a/java/java-tests/testData/codeInsight/generateConstructor/beforeBoundComments.java b/java/java-tests/testData/codeInsight/generateConstructor/beforeBoundComments.java
new file mode 100644
index 0000000..3a5f851
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generateConstructor/beforeBoundComments.java
@@ -0,0 +1,9 @@
+public class Foo {
+    <caret>
+
+    // Method comment
+
+    public String getSomeGetter() {
+        return null;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/generateConstructor/beforeBoundCommentsKeepsBlankLine.java b/java/java-tests/testData/codeInsight/generateConstructor/beforeBoundCommentsKeepsBlankLine.java
new file mode 100644
index 0000000..ee0601b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generateConstructor/beforeBoundCommentsKeepsBlankLine.java
@@ -0,0 +1,10 @@
+public class Foo {
+
+    <caret>
+
+    // Method comment
+
+    public String getSomeGetter() {
+        return null;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/generateConstructor/beforeEnumWithAbstractMethod.java b/java/java-tests/testData/codeInsight/generateConstructor/beforeEnumWithAbstractMethod.java
new file mode 100644
index 0000000..8df408f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generateConstructor/beforeEnumWithAbstractMethod.java
@@ -0,0 +1,10 @@
+public enum Operation {
+    PLUS {
+        int eval(int x, int y) {
+            return x + y;
+        }
+    };
+
+    abstract int eval(int x, int y);
+    <caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generateConstructor/beforeFinalFieldPreselection.java b/java/java-tests/testData/codeInsight/generateConstructor/beforeFinalFieldPreselection.java
new file mode 100644
index 0000000..57459a5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generateConstructor/beforeFinalFieldPreselection.java
@@ -0,0 +1,6 @@
+class Test {
+    private int a;
+    private final int b;
+    private int c;
+    private final int d;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generateConstructor/beforeImmediatelyAfterRBrace.java b/java/java-tests/testData/codeInsight/generateConstructor/beforeImmediatelyAfterRBrace.java
new file mode 100644
index 0000000..a154ee1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generateConstructor/beforeImmediatelyAfterRBrace.java
@@ -0,0 +1,3 @@
+class A
+{<caret>
+}
diff --git a/java/java-tests/testData/codeInsight/generateConstructor/beforeNoMoreConstructorsCanBeGenerated.java b/java/java-tests/testData/codeInsight/generateConstructor/beforeNoMoreConstructorsCanBeGenerated.java
new file mode 100644
index 0000000..5e18f99
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generateConstructor/beforeNoMoreConstructorsCanBeGenerated.java
@@ -0,0 +1,6 @@
+public class Test {
+  <caret>
+
+  public Test() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generateConstructor/beforePackageLocalClass.java b/java/java-tests/testData/codeInsight/generateConstructor/beforePackageLocalClass.java
new file mode 100644
index 0000000..9125403
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generateConstructor/beforePackageLocalClass.java
@@ -0,0 +1,3 @@
+class Test {
+  <caret>
+}
diff --git a/java/java-tests/testData/codeInsight/generateConstructor/beforePrivateClass.java b/java/java-tests/testData/codeInsight/generateConstructor/beforePrivateClass.java
new file mode 100644
index 0000000..aec69f1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generateConstructor/beforePrivateClass.java
@@ -0,0 +1,5 @@
+class Test {
+  private class Foo {
+  <caret>
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/generateConstructor/beforeSameNamedFields.java b/java/java-tests/testData/codeInsight/generateConstructor/beforeSameNamedFields.java
new file mode 100644
index 0000000..e87a8f2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generateConstructor/beforeSameNamedFields.java
@@ -0,0 +1,12 @@
+public class Clas extends Clas2{
+    int foo;
+    <caret>
+}
+
+class Clas2 {
+    int foo;
+
+    Clas2(int foo) {
+        this.foo = foo;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/generateConstructor/beforeSubstitution.java b/java/java-tests/testData/codeInsight/generateConstructor/beforeSubstitution.java
new file mode 100644
index 0000000..e760b9e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generateConstructor/beforeSubstitution.java
@@ -0,0 +1,12 @@
+class Parent<T> {
+  T field;
+
+  public Parent(T field) {
+    this.field = field;
+  }
+}
+
+class Child<Integer> extends Parent<Integer> {
+   <caret>
+
+}
diff --git a/java/java-tests/testData/codeInsight/generateJavadoc/after1.java b/java/java-tests/testData/codeInsight/generateJavadoc/after1.java
new file mode 100644
index 0000000..1d7cc57
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generateJavadoc/after1.java
@@ -0,0 +1,7 @@
+class Test {
+    /**
+     * <caret>
+     * @return
+     */
+    public String foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generateJavadoc/after2.java b/java/java-tests/testData/codeInsight/generateJavadoc/after2.java
new file mode 100644
index 0000000..05ea916
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generateJavadoc/after2.java
@@ -0,0 +1,9 @@
+class Test {
+    /**
+     * <caret>
+     * @param a
+     * @param param
+     * @param ddd
+     */
+    public void foo(int a, String param, double ddd) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generateJavadoc/after3.java b/java/java-tests/testData/codeInsight/generateJavadoc/after3.java
new file mode 100644
index 0000000..8675eea
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generateJavadoc/after3.java
@@ -0,0 +1,7 @@
+class Test {
+    /**
+     * <caret>
+     * @throws IOException
+     */
+    public void foo() throws IOException {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generateJavadoc/afterIdeadev2328.java b/java/java-tests/testData/codeInsight/generateJavadoc/afterIdeadev2328.java
new file mode 100644
index 0000000..55e272a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generateJavadoc/afterIdeadev2328.java
@@ -0,0 +1,8 @@
+class Test {
+    /**
+     * <caret>
+     */
+  void test() {
+    String something = "/** something */";
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generateJavadoc/afterIdeadev2328_2.java b/java/java-tests/testData/codeInsight/generateJavadoc/afterIdeadev2328_2.java
new file mode 100644
index 0000000..4b6177d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generateJavadoc/afterIdeadev2328_2.java
@@ -0,0 +1,9 @@
+class Test {
+    /**
+     * <caret>
+     *
+     * "string" */
+  void test() {
+    String something = "";
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generateJavadoc/before1.java b/java/java-tests/testData/codeInsight/generateJavadoc/before1.java
new file mode 100644
index 0000000..27e2878
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generateJavadoc/before1.java
@@ -0,0 +1,4 @@
+class Test {
+    /**<caret>
+    public String foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generateJavadoc/before2.java b/java/java-tests/testData/codeInsight/generateJavadoc/before2.java
new file mode 100644
index 0000000..3b78d44
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generateJavadoc/before2.java
@@ -0,0 +1,4 @@
+class Test {
+    /**<caret>
+    public void foo(int a, String param, double ddd) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generateJavadoc/before3.java b/java/java-tests/testData/codeInsight/generateJavadoc/before3.java
new file mode 100644
index 0000000..e300157
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generateJavadoc/before3.java
@@ -0,0 +1,4 @@
+class Test {
+    /**<caret>
+    public void foo() throws IOException {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generateJavadoc/beforeIdeadev2328.java b/java/java-tests/testData/codeInsight/generateJavadoc/beforeIdeadev2328.java
new file mode 100644
index 0000000..5b95bac
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generateJavadoc/beforeIdeadev2328.java
@@ -0,0 +1,6 @@
+class Test {
+  /**<caret>
+  void test() {
+    String something = "/** something */";
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generateJavadoc/beforeIdeadev2328_2.java b/java/java-tests/testData/codeInsight/generateJavadoc/beforeIdeadev2328_2.java
new file mode 100644
index 0000000..7ce3c14
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generateJavadoc/beforeIdeadev2328_2.java
@@ -0,0 +1,8 @@
+class Test {
+    /**<caret>
+     *
+     * "string" */
+  void test() {
+    String something = "";
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstCodeBlockSurroundStatement.java b/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstCodeBlockSurroundStatement.java
new file mode 100644
index 0000000..cddd014
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstCodeBlockSurroundStatement.java
@@ -0,0 +1,6 @@
+class Test {
+    void foo() {
+        <selection>// This is comment"
+            int i = 1;</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstCodeBlockSurroundStatement_after.java b/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstCodeBlockSurroundStatement_after.java
new file mode 100644
index 0000000..01b293b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstCodeBlockSurroundStatement_after.java
@@ -0,0 +1,9 @@
+class Test {
+    void foo() {
+        {
+            // This is comment"
+            int i = 1;
+        }<caret>
+
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstDoWhileSurroundStatement.java b/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstDoWhileSurroundStatement.java
new file mode 100644
index 0000000..cddd014
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstDoWhileSurroundStatement.java
@@ -0,0 +1,6 @@
+class Test {
+    void foo() {
+        <selection>// This is comment"
+            int i = 1;</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstDoWhileSurroundStatement_after.java b/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstDoWhileSurroundStatement_after.java
new file mode 100644
index 0000000..96538b0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstDoWhileSurroundStatement_after.java
@@ -0,0 +1,8 @@
+class Test {
+    void foo() {
+        do {
+            // This is comment"
+            int i = 1;
+        } while (<caret><selection>true</selection>);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstForSurroundStatement.java b/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstForSurroundStatement.java
new file mode 100644
index 0000000..cddd014
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstForSurroundStatement.java
@@ -0,0 +1,6 @@
+class Test {
+    void foo() {
+        <selection>// This is comment"
+            int i = 1;</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstForSurroundStatement_after.java b/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstForSurroundStatement_after.java
new file mode 100644
index 0000000..3c042bd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstForSurroundStatement_after.java
@@ -0,0 +1,8 @@
+class Test {
+    void foo() {
+        for (<caret>) {
+            // This is comment"
+            int i = 1;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstIfElseSurroundStatement.java b/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstIfElseSurroundStatement.java
new file mode 100644
index 0000000..a15494a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstIfElseSurroundStatement.java
@@ -0,0 +1,6 @@
+class Test {
+    void foo() {
+        <selection>// This is comment"
+        int i = 1;</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstIfElseSurroundStatement_after.java b/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstIfElseSurroundStatement_after.java
new file mode 100644
index 0000000..bab33a5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstIfElseSurroundStatement_after.java
@@ -0,0 +1,9 @@
+class Test {
+    void foo() {
+        if (<caret>) {
+            // This is comment"
+            int i = 1;
+        } else {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstIfSurroundStatement.java b/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstIfSurroundStatement.java
new file mode 100644
index 0000000..cddd014
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstIfSurroundStatement.java
@@ -0,0 +1,6 @@
+class Test {
+    void foo() {
+        <selection>// This is comment"
+            int i = 1;</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstIfSurroundStatement_after.java b/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstIfSurroundStatement_after.java
new file mode 100644
index 0000000..4a8927a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstIfSurroundStatement_after.java
@@ -0,0 +1,8 @@
+class Test {
+    void foo() {
+        if (<caret>) {
+            // This is comment"
+            int i = 1;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstRunnableSurroundStatement.java b/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstRunnableSurroundStatement.java
new file mode 100644
index 0000000..c035be3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstRunnableSurroundStatement.java
@@ -0,0 +1,6 @@
+class Test {
+    void foo() {
+        <selection><caret>// This is comment"
+            int i = 1;
+</selection>    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstRunnableSurroundStatement_after.java b/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstRunnableSurroundStatement_after.java
new file mode 100644
index 0000000..30ae98a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstRunnableSurroundStatement_after.java
@@ -0,0 +1,10 @@
+class Test {
+    void foo() {
+        <caret>Runnable runnable = new Runnable() {
+            public void run() {
+                // This is comment"
+                int i = 1;
+            }
+        };
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstSynchronizedSurroundStatement.java b/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstSynchronizedSurroundStatement.java
new file mode 100644
index 0000000..cddd014
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstSynchronizedSurroundStatement.java
@@ -0,0 +1,6 @@
+class Test {
+    void foo() {
+        <selection>// This is comment"
+            int i = 1;</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstSynchronizedSurroundStatement_after.java b/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstSynchronizedSurroundStatement_after.java
new file mode 100644
index 0000000..0151b64
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstSynchronizedSurroundStatement_after.java
@@ -0,0 +1,8 @@
+class Test {
+    void foo() {
+        synchronized (<caret>) {
+            // This is comment"
+            int i = 1;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstTryCatchFinallySurroundStatement.java b/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstTryCatchFinallySurroundStatement.java
new file mode 100644
index 0000000..cddd014
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstTryCatchFinallySurroundStatement.java
@@ -0,0 +1,6 @@
+class Test {
+    void foo() {
+        <selection>// This is comment"
+            int i = 1;</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstTryCatchFinallySurroundStatement_after.java b/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstTryCatchFinallySurroundStatement_after.java
new file mode 100644
index 0000000..098d086
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstTryCatchFinallySurroundStatement_after.java
@@ -0,0 +1,11 @@
+class Test {
+    void foo() {
+        try {
+            // This is comment"
+            int i = 1;
+        } catch (Exception e) {
+            <caret><selection>e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.</selection>
+        } finally {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstTryCatchSurroundStatement.java b/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstTryCatchSurroundStatement.java
new file mode 100644
index 0000000..cddd014
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstTryCatchSurroundStatement.java
@@ -0,0 +1,6 @@
+class Test {
+    void foo() {
+        <selection>// This is comment"
+            int i = 1;</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstTryCatchSurroundStatement_after.java b/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstTryCatchSurroundStatement_after.java
new file mode 100644
index 0000000..6506ce8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstTryCatchSurroundStatement_after.java
@@ -0,0 +1,10 @@
+class Test {
+    void foo() {
+        try {
+            // This is comment"
+            int i = 1;
+        } catch (Exception e) {
+            <caret><selection>e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.</selection>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstTryFinallySurroundStatement.java b/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstTryFinallySurroundStatement.java
new file mode 100644
index 0000000..cddd014
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstTryFinallySurroundStatement.java
@@ -0,0 +1,6 @@
+class Test {
+    void foo() {
+        <selection>// This is comment"
+            int i = 1;</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstTryFinallySurroundStatement_after.java b/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstTryFinallySurroundStatement_after.java
new file mode 100644
index 0000000..5677a6c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstTryFinallySurroundStatement_after.java
@@ -0,0 +1,10 @@
+class Test {
+    void foo() {
+        try {
+            // This is comment"
+            int i = 1;
+        } finally {
+            <caret>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstWhileSurroundStatement.java b/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstWhileSurroundStatement.java
new file mode 100644
index 0000000..cddd014
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstWhileSurroundStatement.java
@@ -0,0 +1,6 @@
+class Test {
+    void foo() {
+        <selection>// This is comment"
+            int i = 1;</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstWhileSurroundStatement_after.java b/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstWhileSurroundStatement_after.java
new file mode 100644
index 0000000..73e2c78
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generation/surroundWith/java/CommentAsFirstWhileSurroundStatement_after.java
@@ -0,0 +1,8 @@
+class Test {
+    void foo() {
+        while (<caret><selection>true</selection>) {
+            // This is comment"
+            int i = 1;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundAssignmentWithCast.java b/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundAssignmentWithCast.java
new file mode 100644
index 0000000..8022768
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundAssignmentWithCast.java
@@ -0,0 +1,7 @@
+class Test {
+  void foo(int a, double b) {
+    if (<selection><caret>a = b</selection>) {
+
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundAssignmentWithCast_after.java b/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundAssignmentWithCast_after.java
new file mode 100644
index 0000000..5233cdb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundAssignmentWithCast_after.java
@@ -0,0 +1,7 @@
+class Test {
+  void foo(int a, double b) {
+    if (((<caret>) (a = b))) {
+
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundBinaryWithCast.java b/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundBinaryWithCast.java
new file mode 100644
index 0000000..bccc046
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundBinaryWithCast.java
@@ -0,0 +1,7 @@
+class Test {
+  void foo(int a, double b) {
+    if (<selection><caret>a + b + 1</selection>) {
+
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundBinaryWithCast_after.java b/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundBinaryWithCast_after.java
new file mode 100644
index 0000000..1d908a6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundBinaryWithCast_after.java
@@ -0,0 +1,7 @@
+class Test {
+  void foo(int a, double b) {
+    if (((<caret>) (a + b + 1))) {
+
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundConditionalWithCast.java b/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundConditionalWithCast.java
new file mode 100644
index 0000000..7b19459
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundConditionalWithCast.java
@@ -0,0 +1,7 @@
+class Test {
+  void foo(int a, double b) {
+    if (<selection><caret>true ? a : b</selection>) {
+
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundConditionalWithCast_after.java b/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundConditionalWithCast_after.java
new file mode 100644
index 0000000..16d9d00
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundConditionalWithCast_after.java
@@ -0,0 +1,7 @@
+class Test {
+  void foo(int a, double b) {
+    if (((<caret>) (true ? a : b))) {
+
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundExpressionWithCastEmptyLineAfter.java b/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundExpressionWithCastEmptyLineAfter.java
new file mode 100644
index 0000000..d057848
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundExpressionWithCastEmptyLineAfter.java
@@ -0,0 +1,6 @@
+class Test {
+  public static void main(String[] args) {
+      <selection>args</selection>
+
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundExpressionWithCastEmptyLineAfter_2.java b/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundExpressionWithCastEmptyLineAfter_2.java
new file mode 100644
index 0000000..d057848
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundExpressionWithCastEmptyLineAfter_2.java
@@ -0,0 +1,6 @@
+class Test {
+  public static void main(String[] args) {
+      <selection>args</selection>
+
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundExpressionWithCastEmptyLineAfter_2_after.java b/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundExpressionWithCastEmptyLineAfter_2_after.java
new file mode 100644
index 0000000..c9b245f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundExpressionWithCastEmptyLineAfter_2_after.java
@@ -0,0 +1,6 @@
+class Test {
+  public static void main(String[] args) {
+      (() args)<caret>
+
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundExpressionWithCastEmptyLineAfter_after.java b/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundExpressionWithCastEmptyLineAfter_after.java
new file mode 100644
index 0000000..5e49c25
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundExpressionWithCastEmptyLineAfter_after.java
@@ -0,0 +1,6 @@
+class Test {
+  public static void main(String[] args) {
+      ((var) args)<caret>
+
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundNonExpressionWithCast.java b/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundNonExpressionWithCast.java
new file mode 100644
index 0000000..72a18af
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundNonExpressionWithCast.java
@@ -0,0 +1,8 @@
+class Test {
+  void foo() {
+    String a = "", b = "", c = "";
+    if (a + <selection>b + c</selection>) {
+
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundNonExpressionWithCast_after.java b/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundNonExpressionWithCast_after.java
new file mode 100644
index 0000000..659e442
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundNonExpressionWithCast_after.java
@@ -0,0 +1,8 @@
+class Test {
+  void foo() {
+    String a = "", b = "", c = "";
+    if (a + (() (b + c))) {
+
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundNonExpressionWithNot.java b/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundNonExpressionWithNot.java
new file mode 100644
index 0000000..8f3f84b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundNonExpressionWithNot.java
@@ -0,0 +1,8 @@
+class Test {
+  void foo() {
+    boolean a = false, b = false, c = false;
+    if (a && <selection>b && c</selection>) {
+
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundNonExpressionWithNot_after.java b/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundNonExpressionWithNot_after.java
new file mode 100644
index 0000000..ee68c3af
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundNonExpressionWithNot_after.java
@@ -0,0 +1,8 @@
+class Test {
+  void foo() {
+    boolean a = false, b = false, c = false;
+    if (a && !(b && c)) {
+
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundNonExpressionWithParenthesis.java b/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundNonExpressionWithParenthesis.java
new file mode 100644
index 0000000..c484196
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundNonExpressionWithParenthesis.java
@@ -0,0 +1,8 @@
+class Test {
+  void foo() {
+    int a = 0, b = 0, c = 0;
+    if (a + <selection>b + c</selection>) {
+
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundNonExpressionWithParenthesis_after.java b/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundNonExpressionWithParenthesis_after.java
new file mode 100644
index 0000000..506055d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundNonExpressionWithParenthesis_after.java
@@ -0,0 +1,8 @@
+class Test {
+  void foo() {
+    int a = 0, b = 0, c = 0;
+    if (a + (b + c)) {
+
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundWithNotNullCheck.java b/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundWithNotNullCheck.java
new file mode 100644
index 0000000..9301021
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundWithNotNullCheck.java
@@ -0,0 +1,10 @@
+
+class Test {
+  String foo() {
+    return null;
+  }
+  
+  void bar() {
+    <selection>foo()</selection>.toLowerCase()
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundWithNotNullCheck_after.java b/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundWithNotNullCheck_after.java
new file mode 100644
index 0000000..f70a910
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundWithNotNullCheck_after.java
@@ -0,0 +1,12 @@
+
+class Test {
+  String foo() {
+    return null;
+  }
+  
+  void bar() {
+      if (foo() != null) {
+          foo().toLowerCase()<caret>
+      }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/highlightUsagesHandler/HighlightOverridden.java b/java/java-tests/testData/codeInsight/highlightUsagesHandler/HighlightOverridden.java
new file mode 100644
index 0000000..24bc9bc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/highlightUsagesHandler/HighlightOverridden.java
@@ -0,0 +1,7 @@
+class Usage extends<caret> Base{
+  void foo() {
+  }
+}
+class Base {
+void foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/highlightUsagesHandler/HighlightOverriddenImplements.java b/java/java-tests/testData/codeInsight/highlightUsagesHandler/HighlightOverriddenImplements.java
new file mode 100644
index 0000000..5941ffb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/highlightUsagesHandler/HighlightOverriddenImplements.java
@@ -0,0 +1,7 @@
+class Usage <caret>implements Base{
+  void foo() {
+  }
+}
+interface Base {
+void foo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/highlightUsagesHandler/HighlightOverriddenMultiple.java b/java/java-tests/testData/codeInsight/highlightUsagesHandler/HighlightOverriddenMultiple.java
new file mode 100644
index 0000000..3c1e181
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/highlightUsagesHandler/HighlightOverriddenMultiple.java
@@ -0,0 +1,11 @@
+class Usage <caret>implements Base, Other{
+  public void foo() {
+  }
+  public void other() {}
+}
+interface Base {
+void foo();
+}
+interface Other {
+void other();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/highlightUsagesHandler/HighlightOverriddenNothing.java b/java/java-tests/testData/codeInsight/highlightUsagesHandler/HighlightOverriddenNothing.java
new file mode 100644
index 0000000..5daa393
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/highlightUsagesHandler/HighlightOverriddenNothing.java
@@ -0,0 +1,7 @@
+class Usage <caret>extends Base{
+  void foo3() {
+  }
+}
+class Base {
+void foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/highlightUsagesHandler/SimpleThrows.java b/java/java-tests/testData/codeInsight/highlightUsagesHandler/SimpleThrows.java
new file mode 100644
index 0000000..0685241
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/highlightUsagesHandler/SimpleThrows.java
@@ -0,0 +1,5 @@
+class Calculator {
+    public void printError(String detail, int line, String file) <caret>throws Exception {
+        throw new Exception();
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/highlightUsagesHandler/ThrowsExpression.java b/java/java-tests/testData/codeInsight/highlightUsagesHandler/ThrowsExpression.java
new file mode 100644
index 0000000..193fa61
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/highlightUsagesHandler/ThrowsExpression.java
@@ -0,0 +1,5 @@
+class Calculator {
+    public void printError(Object detail, int line, String file) <caret>throws Exception {
+        throw (Exception)detail;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/highlightUsagesHandler/ThrowsReference.java b/java/java-tests/testData/codeInsight/highlightUsagesHandler/ThrowsReference.java
new file mode 100644
index 0000000..952b855
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/highlightUsagesHandler/ThrowsReference.java
@@ -0,0 +1,5 @@
+class Calculator {
+    public void printError(Exception detail, int line, String file) <caret>throws Exception {
+        throw detail;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/highlightUsagesHandler/UnselectUsage.java b/java/java-tests/testData/codeInsight/highlightUsagesHandler/UnselectUsage.java
new file mode 100644
index 0000000..5b24659
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/highlightUsagesHandler/UnselectUsage.java
@@ -0,0 +1,6 @@
+class Usage {
+  void foo() {
+     foo();
+     <caret>foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/afterCondition1.java b/java/java-tests/testData/codeInsight/invertIfCondition/afterCondition1.java
new file mode 100644
index 0000000..4edcda4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/afterCondition1.java
@@ -0,0 +1,11 @@
+// "Invert If Condition" "true"
+class A {
+    public void foo() {
+        <caret>if (!c) {
+            b();
+        }
+        else {
+            a();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/afterCondition2.java b/java/java-tests/testData/codeInsight/invertIfCondition/afterCondition2.java
new file mode 100644
index 0000000..1444562
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/afterCondition2.java
@@ -0,0 +1,11 @@
+// "Invert If Condition" "true"
+class A {
+    public void foo() {
+        <caret>if ((!c)) {
+            b();
+        }
+        else {
+            a();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/afterConditionEq.java b/java/java-tests/testData/codeInsight/invertIfCondition/afterConditionEq.java
new file mode 100644
index 0000000..1249590
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/afterConditionEq.java
@@ -0,0 +1,11 @@
+// "Invert If Condition" "true"
+class A {
+    public void foo() {
+        <caret>if (c != d) {
+            b();
+        }
+        else {
+            a();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/afterConditionNeq.java b/java/java-tests/testData/codeInsight/invertIfCondition/afterConditionNeq.java
new file mode 100644
index 0000000..c147783
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/afterConditionNeq.java
@@ -0,0 +1,11 @@
+// "Invert If Condition" "true"
+class A {
+    public void foo() {
+        <caret>if (c == d) {
+            b();
+        }
+        else {
+            a();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/afterConditionNot.java b/java/java-tests/testData/codeInsight/invertIfCondition/afterConditionNot.java
new file mode 100644
index 0000000..f144d81
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/afterConditionNot.java
@@ -0,0 +1,11 @@
+// "Invert If Condition" "true"
+class A {
+    public void foo() {
+        <caret>if (c) {
+            b();
+        }
+        else {
+            a();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/afterContinue1.java b/java/java-tests/testData/codeInsight/invertIfCondition/afterContinue1.java
new file mode 100644
index 0000000..f639171
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/afterContinue1.java
@@ -0,0 +1,11 @@
+// "Invert If Condition" "true"
+class A {
+    void foo () {
+      int a = 0, b = 0;
+      for (;;) {
+          <caret>if (a != b) {
+              a = b;
+          }
+      }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/afterContinue2.java b/java/java-tests/testData/codeInsight/invertIfCondition/afterContinue2.java
new file mode 100644
index 0000000..280712a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/afterContinue2.java
@@ -0,0 +1,11 @@
+// "Invert If Condition" "true"
+class A {
+    void foo() {
+        String[] entries = null;
+        for (String entry : entries) {
+            <caret>if (entry != null) {
+                System.out.println("not null");
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/afterDoNotRemoveReturn.java b/java/java-tests/testData/codeInsight/invertIfCondition/afterDoNotRemoveReturn.java
new file mode 100644
index 0000000..ee94454
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/afterDoNotRemoveReturn.java
@@ -0,0 +1,10 @@
+// "Invert If Condition" "true"
+class Test {
+    public static int create() {
+        if (true) {
+            return;
+        }
+        return "s";
+
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/afterElse1.java b/java/java-tests/testData/codeInsight/invertIfCondition/afterElse1.java
new file mode 100644
index 0000000..4448c79
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/afterElse1.java
@@ -0,0 +1,11 @@
+// "Invert If Condition" "true"
+class A {
+    public void foo() {
+        if (<caret>!c) {
+            b();
+        }
+        else {
+            a();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/afterElse2.java b/java/java-tests/testData/codeInsight/invertIfCondition/afterElse2.java
new file mode 100644
index 0000000..02e7371
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/afterElse2.java
@@ -0,0 +1,8 @@
+// "Invert If Condition" "true"
+class A {
+    public void foo() {
+        <caret>if (!c) {
+            b();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/afterFlow1.java b/java/java-tests/testData/codeInsight/invertIfCondition/afterFlow1.java
new file mode 100644
index 0000000..0807169
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/afterFlow1.java
@@ -0,0 +1,9 @@
+// "Invert If Condition" "true"
+class A {
+    public void foo() {
+        <caret>if (!c) {
+            return;
+        }
+        a();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/afterFlow2.java b/java/java-tests/testData/codeInsight/invertIfCondition/afterFlow2.java
new file mode 100644
index 0000000..f55988e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/afterFlow2.java
@@ -0,0 +1,10 @@
+// "Invert If Condition" "true"
+class A {
+    public void foo() {
+        <caret>if (!c) {
+            return;
+        }
+        a();
+        b();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/afterFlow3.java b/java/java-tests/testData/codeInsight/invertIfCondition/afterFlow3.java
new file mode 100644
index 0000000..13de2fb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/afterFlow3.java
@@ -0,0 +1,11 @@
+// "Invert If Condition" "true"
+class A {
+    public void foo(boolean c) {
+        <caret>if (c) {
+            foo();
+        }
+        else {
+            return;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/afterFlow4.java b/java/java-tests/testData/codeInsight/invertIfCondition/afterFlow4.java
new file mode 100644
index 0000000..5773dde
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/afterFlow4.java
@@ -0,0 +1,15 @@
+// "Invert If Condition" "true"
+public class C {
+    public static int main(String[] args) {
+        if (!a) {
+            foo();
+            return 1;
+        }
+        else {
+            return 2;
+        }
+    }
+
+    private static void foo() {
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/afterFor1.java b/java/java-tests/testData/codeInsight/invertIfCondition/afterFor1.java
new file mode 100644
index 0000000..5ba9870
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/afterFor1.java
@@ -0,0 +1,11 @@
+// "Invert If Condition" "true"
+class A {
+    public void foo() {
+        for (int i = 0;;i++) {
+            <caret>if (!c) {
+                continue;
+            }
+            a();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/afterIDEA18864_1.java b/java/java-tests/testData/codeInsight/invertIfCondition/afterIDEA18864_1.java
new file mode 100644
index 0000000..2692f22
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/afterIDEA18864_1.java
@@ -0,0 +1,10 @@
+// "Invert If Condition" "true"
+class A {
+    public static void foo() {
+        if (1 == 2) {
+            return;
+        }
+        // very important comment here
+        System.out.println("something");
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/afterIDEA18864_2.java b/java/java-tests/testData/codeInsight/invertIfCondition/afterIDEA18864_2.java
new file mode 100644
index 0000000..994fddda
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/afterIDEA18864_2.java
@@ -0,0 +1,11 @@
+// "Invert If Condition" "true"
+class A {
+    public static void foo() {
+        <caret>if (1 + 2 != 3) {
+        }
+        else {
+            System.out.println("say");
+        }
+        System.out.println("something");
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/afterIDEADEV2259.java b/java/java-tests/testData/codeInsight/invertIfCondition/afterIDEADEV2259.java
new file mode 100644
index 0000000..7f35009
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/afterIDEADEV2259.java
@@ -0,0 +1,21 @@
+// "Invert If Condition" "true"
+class K {
+    private void bar(int i) {
+        switch(i) {
+            case 0:
+                if (!f(i)) {
+                    i = 1;
+                    break;
+                }
+                else {
+                    return;
+                }
+            case 1:
+                i = 2;
+        }
+    }
+
+    private static boolean f(int i) {
+        return false;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/afterInsideForeach.java b/java/java-tests/testData/codeInsight/invertIfCondition/afterInsideForeach.java
new file mode 100644
index 0000000..cf1f956
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/afterInsideForeach.java
@@ -0,0 +1,11 @@
+// "Invert If Condition" "true"
+class Foo {
+    void foo(String[] args) {
+        for (String s : args) {
+            <caret>if (!"6".equals(s)) {
+                continue;
+            }
+            System.out.println(s);
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/afterReturn1.java b/java/java-tests/testData/codeInsight/invertIfCondition/afterReturn1.java
new file mode 100644
index 0000000..084bf79
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/afterReturn1.java
@@ -0,0 +1,10 @@
+// "Invert If Condition" "true"
+class A {
+    public void foo() {
+        <caret>if (!c) {
+            return null;
+        }
+        a();
+        return null;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/afterReturn2.java b/java/java-tests/testData/codeInsight/invertIfCondition/afterReturn2.java
new file mode 100644
index 0000000..25d8ee5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/afterReturn2.java
@@ -0,0 +1,10 @@
+// "Invert If Condition" "true"
+class A {
+    public void foo() {
+        <caret>if (!c) {
+            return null;
+        }
+        a();
+        return "";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/afterSCR2542.java b/java/java-tests/testData/codeInsight/invertIfCondition/afterSCR2542.java
new file mode 100644
index 0000000..17bec6b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/afterSCR2542.java
@@ -0,0 +1,12 @@
+// "Invert If Condition" "true"
+// else on the same line
+class TestInvertIf {
+    void invertIf(Object object) {
+        if (object != "adf") {
+            System.out.println("1");
+        } // comment
+        else {
+            System.out.println("2");
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/afterWhile1.java b/java/java-tests/testData/codeInsight/invertIfCondition/afterWhile1.java
new file mode 100644
index 0000000..b9e872f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/afterWhile1.java
@@ -0,0 +1,11 @@
+// "Invert If Condition" "true"
+class A {
+    public void foo() {
+        while (true) {
+            <caret>if (!c) {
+                continue;
+            }
+            a();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/afterWhile2.java b/java/java-tests/testData/codeInsight/invertIfCondition/afterWhile2.java
new file mode 100644
index 0000000..9594e6b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/afterWhile2.java
@@ -0,0 +1,16 @@
+// "Invert If Condition" "true"
+class A {
+    public void foo() {
+        while (true) {
+            if (c) {
+                <caret>if (!d) {
+                    continue;
+                }
+                a();
+                break;
+            }
+            else if (e) {
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/beforeCondition1.java b/java/java-tests/testData/codeInsight/invertIfCondition/beforeCondition1.java
new file mode 100644
index 0000000..f07bfc4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/beforeCondition1.java
@@ -0,0 +1,6 @@
+// "Invert If Condition" "true"
+class A {
+    public void foo() {
+        <caret>if (c) a(); else b(); 
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/beforeCondition2.java b/java/java-tests/testData/codeInsight/invertIfCondition/beforeCondition2.java
new file mode 100644
index 0000000..e621081
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/beforeCondition2.java
@@ -0,0 +1,6 @@
+// "Invert If Condition" "true"
+class A {
+    public void foo() {
+        <caret>if ((c)) a(); else b(); 
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/beforeConditionEq.java b/java/java-tests/testData/codeInsight/invertIfCondition/beforeConditionEq.java
new file mode 100644
index 0000000..23fce8b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/beforeConditionEq.java
@@ -0,0 +1,6 @@
+// "Invert If Condition" "true"
+class A {
+    public void foo() {
+        <caret>if (c == d) a(); else b(); 
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/beforeConditionNeq.java b/java/java-tests/testData/codeInsight/invertIfCondition/beforeConditionNeq.java
new file mode 100644
index 0000000..c50df77
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/beforeConditionNeq.java
@@ -0,0 +1,6 @@
+// "Invert If Condition" "true"
+class A {
+    public void foo() {
+        <caret>if (c != d) a(); else b(); 
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/beforeConditionNot.java b/java/java-tests/testData/codeInsight/invertIfCondition/beforeConditionNot.java
new file mode 100644
index 0000000..1a08d26
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/beforeConditionNot.java
@@ -0,0 +1,6 @@
+// "Invert If Condition" "true"
+class A {
+    public void foo() {
+        <caret>if (!c) a(); else b(); 
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/beforeContinue1.java b/java/java-tests/testData/codeInsight/invertIfCondition/beforeContinue1.java
new file mode 100644
index 0000000..915f73b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/beforeContinue1.java
@@ -0,0 +1,10 @@
+// "Invert If Condition" "true"
+class A {
+    void foo () {
+      int a = 0, b = 0;
+      for (;;) {
+          <caret>if (a == b) continue;
+          a = b;
+      }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/beforeContinue2.java b/java/java-tests/testData/codeInsight/invertIfCondition/beforeContinue2.java
new file mode 100644
index 0000000..0bb63f2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/beforeContinue2.java
@@ -0,0 +1,11 @@
+// "Invert If Condition" "true"
+class A {
+    void foo() {
+        String[] entries = null;
+        for (String entry : entries) {
+            <caret>if (entry == null)
+                continue;
+            System.out.println("not null");
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/beforeDoNotRemoveReturn.java b/java/java-tests/testData/codeInsight/invertIfCondition/beforeDoNotRemoveReturn.java
new file mode 100644
index 0000000..b847d48
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/beforeDoNotRemoveReturn.java
@@ -0,0 +1,9 @@
+// "Invert If Condition" "true"
+class Test {
+    public static int create() {
+        if (!tr<caret>ue) {
+            return "s";
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/beforeElse1.java b/java/java-tests/testData/codeInsight/invertIfCondition/beforeElse1.java
new file mode 100644
index 0000000..f59c4f6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/beforeElse1.java
@@ -0,0 +1,7 @@
+// "Invert If Condition" "true"
+class A {
+    public void foo() {
+        if (<caret>c) a();
+        else b();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/beforeElse2.java b/java/java-tests/testData/codeInsight/invertIfCondition/beforeElse2.java
new file mode 100644
index 0000000..397db8d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/beforeElse2.java
@@ -0,0 +1,7 @@
+// "Invert If Condition" "true"
+class A {
+    public void foo() {
+        <caret>if (c) {}
+        else b();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/beforeFlow1.java b/java/java-tests/testData/codeInsight/invertIfCondition/beforeFlow1.java
new file mode 100644
index 0000000..b8b2fae
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/beforeFlow1.java
@@ -0,0 +1,6 @@
+// "Invert If Condition" "true"
+class A {
+    public void foo() {
+        <caret>if (c) a();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/beforeFlow2.java b/java/java-tests/testData/codeInsight/invertIfCondition/beforeFlow2.java
new file mode 100644
index 0000000..1a75c63
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/beforeFlow2.java
@@ -0,0 +1,9 @@
+// "Invert If Condition" "true"
+class A {
+    public void foo() {
+        <caret>if (c) {
+            a();
+            b();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/beforeFlow3.java b/java/java-tests/testData/codeInsight/invertIfCondition/beforeFlow3.java
new file mode 100644
index 0000000..a97a9ab
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/beforeFlow3.java
@@ -0,0 +1,7 @@
+// "Invert If Condition" "true"
+class A {
+    public void foo(boolean c) {
+        <caret>if (!c) return;
+        foo();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/beforeFlow4.java b/java/java-tests/testData/codeInsight/invertIfCondition/beforeFlow4.java
new file mode 100644
index 0000000..df06323
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/beforeFlow4.java
@@ -0,0 +1,11 @@
+// "Invert If Condition" "true"
+public class C {
+    public static int main(String[] args) {
+        <caret>if (a) return 2;
+        foo();
+        return 1;
+    }
+
+    private static void foo() {
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/beforeFor1.java b/java/java-tests/testData/codeInsight/invertIfCondition/beforeFor1.java
new file mode 100644
index 0000000..0015a33
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/beforeFor1.java
@@ -0,0 +1,8 @@
+// "Invert If Condition" "true"
+class A {
+    public void foo() {
+        for (int i = 0;;i++) {
+            <caret>if (c) a();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/beforeIDEA18864_1.java b/java/java-tests/testData/codeInsight/invertIfCondition/beforeIDEA18864_1.java
new file mode 100644
index 0000000..7454355
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/beforeIDEA18864_1.java
@@ -0,0 +1,9 @@
+// "Invert If Condition" "true"
+class A {
+    public static void foo() {
+        <caret>if (1 != 2) {
+            // very important comment here
+            System.out.println("something");
+        }
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/beforeIDEA18864_2.java b/java/java-tests/testData/codeInsight/invertIfCondition/beforeIDEA18864_2.java
new file mode 100644
index 0000000..468453a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/beforeIDEA18864_2.java
@@ -0,0 +1,9 @@
+// "Invert If Condition" "true"
+class A {
+    public static void foo() {
+        <caret>if (1 + 2 == 3) {
+            System.out.println("say");
+        }
+        System.out.println("something");
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/beforeIDEADEV2259.java b/java/java-tests/testData/codeInsight/invertIfCondition/beforeIDEADEV2259.java
new file mode 100644
index 0000000..94637c2c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/beforeIDEADEV2259.java
@@ -0,0 +1,19 @@
+// "Invert If Condition" "true"
+class K {
+    private void bar(int i) {
+        switch(i) {
+            case 0:
+                <caret>if (f(i)) {
+                    return;
+                }
+                i = 1;
+                break;
+            case 1:
+                i = 2;
+        }
+    }
+
+    private static boolean f(int i) {
+        return false;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/beforeInsideForeach.java b/java/java-tests/testData/codeInsight/invertIfCondition/beforeInsideForeach.java
new file mode 100644
index 0000000..c7cb749
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/beforeInsideForeach.java
@@ -0,0 +1,10 @@
+// "Invert If Condition" "true"
+class Foo {
+    void foo(String[] args) {
+        for (String s : args) {
+            <caret>if ("6".equals(s)) {
+                System.out.println(s);
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/beforeReturn1.java b/java/java-tests/testData/codeInsight/invertIfCondition/beforeReturn1.java
new file mode 100644
index 0000000..b3851bd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/beforeReturn1.java
@@ -0,0 +1,7 @@
+// "Invert If Condition" "true"
+class A {
+    public void foo() {
+        <caret>if (c) a();
+        return null;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/beforeReturn2.java b/java/java-tests/testData/codeInsight/invertIfCondition/beforeReturn2.java
new file mode 100644
index 0000000..ddf336f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/beforeReturn2.java
@@ -0,0 +1,10 @@
+// "Invert If Condition" "true"
+class A {
+    public void foo() {
+        <caret>if (c) {
+            a();
+            return "";
+        }
+        return null;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/beforeSCR2542.java b/java/java-tests/testData/codeInsight/invertIfCondition/beforeSCR2542.java
new file mode 100644
index 0000000..dab56d4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/beforeSCR2542.java
@@ -0,0 +1,11 @@
+// "Invert If Condition" "true"
+// else on the same line
+class TestInvertIf {
+    void invertIf(Object object) {
+        <caret>if (object == "adf") {
+            System.out.println("2");
+        } else {
+            System.out.println("1");
+        } // comment
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/beforeWhile1.java b/java/java-tests/testData/codeInsight/invertIfCondition/beforeWhile1.java
new file mode 100644
index 0000000..f435c232
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/beforeWhile1.java
@@ -0,0 +1,8 @@
+// "Invert If Condition" "true"
+class A {
+    public void foo() {
+        while (true) {
+            <caret>if (c) a();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/beforeWhile2.java b/java/java-tests/testData/codeInsight/invertIfCondition/beforeWhile2.java
new file mode 100644
index 0000000..d611006
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/invertIfCondition/beforeWhile2.java
@@ -0,0 +1,15 @@
+// "Invert If Condition" "true"
+class A {
+    public void foo() {
+        while (true) {
+            if (c) {
+                <caret>if (d) {
+                    a();
+                    break;
+                }
+            }
+            else if (e) {
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/javadocIG/classTypeParameter.html b/java/java-tests/testData/codeInsight/javadocIG/classTypeParameter.html
new file mode 100644
index 0000000..92254a8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/javadocIG/classTypeParameter.html
@@ -0,0 +1,3 @@
+<html><head>    <style type="text/css">        #error {            background-color: #eeeeee;            margin-bottom: 10px;        }        p {            margin: 5px 0;        }    </style></head><body><PRE>class <b>MethodTypeParam</b>&lt;T&gt;
+extends <a href="psi_element://java.lang.Object"><code>Object</code></a></PRE>
+    <DD><DL><DT><b>Type parameters:</b><DD><code>&lt;T&gt;</code> -  type param</DD></DL></DD></body></html>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/javadocIG/classTypeParameter.java b/java/java-tests/testData/codeInsight/javadocIG/classTypeParameter.java
new file mode 100644
index 0000000..1ceb9ca
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/javadocIG/classTypeParameter.java
@@ -0,0 +1,6 @@
+/**
+  * @param <T> type param
+  */
+class MethodTypeParam<T> {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/javadocIG/enumValueOf.html b/java/java-tests/testData/codeInsight/javadocIG/enumValueOf.html
new file mode 100644
index 0000000..e2161cb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/javadocIG/enumValueOf.html
@@ -0,0 +1,3 @@
+<html><head>    <style type="text/css">        #error {            background-color: #eeeeee;            margin-bottom: 10px;        }        p {            margin: 5px 0;        }    </style></head><body><small><b><a href="psi_element://En"><code>En</code></a></b></small><PRE>static&nbsp;int&nbsp;<b>valueOf</b>(int&nbsp;i)</PRE>
+     myjavadoc
+     <DD><DL><DT><b>Parameters:</b><DD><code>i</code> -  </DD></DL></DD><DD><DL><DT><b>Returns:</b><DD></DD></DL></DD></body></html>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/javadocIG/enumValueOf.java b/java/java-tests/testData/codeInsight/javadocIG/enumValueOf.java
new file mode 100644
index 0000000..0d54e7b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/javadocIG/enumValueOf.java
@@ -0,0 +1,12 @@
+enum En {
+  ;
+
+  /**
+   * myjavadoc
+   * @param i
+   * @return
+   */
+  static int valueOf(int i) {
+    return i;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/javadocIG/escapeValues.html b/java/java-tests/testData/codeInsight/javadocIG/escapeValues.html
new file mode 100644
index 0000000..e35bd27
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/javadocIG/escapeValues.html
@@ -0,0 +1,3 @@
+<html><head>    <style type="text/css">        #error {            background-color: #eeeeee;            margin-bottom: 10px;        }        p {            margin: 5px 0;        }    </style></head><body><PRE>class <b>Pattern</b>
+extends <a href="psi_element://java.lang.Object"><code>Object</code></a></PRE>
+   \W  \u03A9</body></html>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/javadocIG/escapeValues.java b/java/java-tests/testData/codeInsight/javadocIG/escapeValues.java
new file mode 100644
index 0000000..83c0149
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/javadocIG/escapeValues.java
@@ -0,0 +1,5 @@
+/**
+ * \W  \u03A9
+ */
+class Pattern {
+}
diff --git a/java/java-tests/testData/codeInsight/javadocIG/fieldValue.html b/java/java-tests/testData/codeInsight/javadocIG/fieldValue.html
new file mode 100644
index 0000000..b15488d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/javadocIG/fieldValue.html
@@ -0,0 +1 @@
+<html><head>    <style type="text/css">        #error {            background-color: #eeeeee;            margin-bottom: 10px;        }        p {            margin: 5px 0;        }    </style></head><body><small><b><a href="psi_element://A"><code>A</code></a></b></small><PRE>public static int <b>JAVADOC_ME = 23</b></PRE> The value of the field is 23.</body></html>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/javadocIG/fieldValue.java b/java/java-tests/testData/codeInsight/javadocIG/fieldValue.java
new file mode 100644
index 0000000..01c0ff6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/javadocIG/fieldValue.java
@@ -0,0 +1,4 @@
+class A {
+  /** The value of the field is {@value}. */
+  public static int JAVADOC_ME = 23;
+}
diff --git a/java/java-tests/testData/codeInsight/javadocIG/ideadev2326.html b/java/java-tests/testData/codeInsight/javadocIG/ideadev2326.html
new file mode 100644
index 0000000..e5f6c9f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/javadocIG/ideadev2326.html
@@ -0,0 +1,2 @@
+<html><head>    <style type="text/css">        #error {            background-color: #eeeeee;            margin-bottom: 10px;        }        p {            margin: 5px 0;        }    </style></head><body><small><b><a href="psi_element://Idea4780"><code>Idea4780</code></a></b></small><PRE>public&nbsp;<a href="psi_element://java.lang.Object"><code>Object</code></a>&nbsp;<b>read</b>()
+           throws&nbsp;<a href="psi_element://java.io.IOException"><code>IOException</code></a></PRE><DD><DL><DT><b>Throws:</b><DD><a href="psi_element://java.io.IOException"><code>IOException</code></a> - if an I/O error occurs while reading.  <DD><a href="psi_element://java.io.EOFException"><code>EOFException</code></a> - if this source is already closed when the <code>read()</code> is called,  or is closed during the <code>read()</code>.  <DD><font color=red>InterruptedIOException</font> - if the reading thread is interrupted.</DD></DL></DD></body></html>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/javadocIG/ideadev2326.java b/java/java-tests/testData/codeInsight/javadocIG/ideadev2326.java
new file mode 100644
index 0000000..fc2f609
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/javadocIG/ideadev2326.java
@@ -0,0 +1,14 @@
+import java.io.EOFException;
+import java.io.IOException;
+import java.io.InterruptedIOException;
+
+public interface Idea4780 {
+    /**
+     * @throws IOException if an I/O error occurs while reading.
+     * @throws EOFException if this source is already closed when the <code>read()</code> is called,
+     * or is closed during the <code>read()</code>.
+     * @throws InterruptedIOException if the reading thread is interrupted.
+     */
+    public Object read()
+        throws IOException;
+}
diff --git a/java/java-tests/testData/codeInsight/javadocIG/inheritedDocInThrows.html b/java/java-tests/testData/codeInsight/javadocIG/inheritedDocInThrows.html
new file mode 100644
index 0000000..7a32b50
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/javadocIG/inheritedDocInThrows.html
@@ -0,0 +1,2 @@
+<html><head>    <style type="text/css">        #error {            background-color: #eeeeee;            margin-bottom: 10px;        }        p {            margin: 5px 0;        }    </style></head><body><small><b><a href="psi_element://InheritedDocInThrows"><code>InheritedDocInThrows</code></a></b></small><PRE>void&nbsp;<b>foo</b>()
+ throws&nbsp;<a href="psi_element://java.io.IOException"><code>IOException</code></a></PRE><DD><DL><DT><b>Overrides:</b><DD><a href="psi_element://A#foo()"><code>foo</code></a> in class <a href="psi_element://A"><code>A</code></a></DD></DL></DD><DD><DL><DT><b>Throws:</b><DD><a href="psi_element://java.io.IOException"><code>IOException</code></a> - la-la-la</DD></DL></DD></body></html>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/javadocIG/inheritedDocInThrows.java b/java/java-tests/testData/codeInsight/javadocIG/inheritedDocInThrows.java
new file mode 100644
index 0000000..c7dc863f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/javadocIG/inheritedDocInThrows.java
@@ -0,0 +1,18 @@
+import java.io.IOException;
+
+class InheritedDocInThrows extends A{
+  /**
+   * @throws IOException {@inheritDoc}
+   */
+  void foo() throws IOException {
+    super.foo();
+  }
+}
+
+class A {
+  /**
+   * @throws IOException la-la-la
+   */
+  void foo() throws IOException {
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/javadocIG/inheritedDocInThrows1.html b/java/java-tests/testData/codeInsight/javadocIG/inheritedDocInThrows1.html
new file mode 100644
index 0000000..59796e7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/javadocIG/inheritedDocInThrows1.html
@@ -0,0 +1,2 @@
+<html><head>    <style type="text/css">        #error {            background-color: #eeeeee;            margin-bottom: 10px;        }        p {            margin: 5px 0;        }    </style></head><body><small><b><a href="psi_element://InheritedDocInThrows1"><code>InheritedDocInThrows1</code></a></b></small><PRE>void&nbsp;<b>foo</b>()
+ throws&nbsp;<a href="psi_element://java.io.IOException"><code>IOException</code></a></PRE><DD><DL><DT><b>Overrides:</b><DD><a href="psi_element://A#foo()"><code>foo</code></a> in class <a href="psi_element://A"><code>A</code></a></DD></DL></DD><DD><DL><DT><b>Throws:</b><DD><a href="psi_element://java.io.IOException"><code>IOException</code></a> - comment</DD></DL></DD></body></html>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/javadocIG/inheritedDocInThrows1.java b/java/java-tests/testData/codeInsight/javadocIG/inheritedDocInThrows1.java
new file mode 100644
index 0000000..530e5f0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/javadocIG/inheritedDocInThrows1.java
@@ -0,0 +1,18 @@
+import java.io.IOException;
+
+class InheritedDocInThrows1 extends A{
+  /**
+   * @throws java.io.IOException comment
+   */
+  void foo() throws IOException {
+    super.foo();
+  }
+}
+
+class A {
+  /**
+   * @throws java.io.IOException la-la-la
+   */
+  void foo() throws IOException {
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/javadocIG/initializerWithNew.html b/java/java-tests/testData/codeInsight/javadocIG/initializerWithNew.html
new file mode 100644
index 0000000..d11e238
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/javadocIG/initializerWithNew.html
@@ -0,0 +1 @@
+<html><head>    <style type="text/css">        #error {            background-color: #eeeeee;            margin-bottom: 10px;        }        p {            margin: 5px 0;        }    </style></head><body><small><b><a href="psi_element://A"><code>A</code></a></b></small><PRE>public <a href="psi_element://java.util.List"><code>List</code></a>&lt;<a href="psi_element://java.lang.String"><code>String</code></a>&gt; <b>strings = new <a href="psi_element://java.util.ArrayList"><code>ArrayList</code></a>&lt;<a href="psi_element://java.lang.String"><code>String</code></a>&gt;(new <a href="psi_element://java.util.ArrayList"><code>ArrayList</code></a>&lt;<a href="psi_element://java.lang.Integer"><code>Integer</code></a>&gt;(), Collections.singleton(new <a href="psi_element://java.util.ArrayList"><code>ArrayList</code></a>&lt;<a href="psi_element://java.lang.Double"><code>Double</code></a>&gt;()))</b></PRE></body></html>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/javadocIG/initializerWithNew.java b/java/java-tests/testData/codeInsight/javadocIG/initializerWithNew.java
new file mode 100644
index 0000000..de4f41b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/javadocIG/initializerWithNew.java
@@ -0,0 +1,6 @@
+import java.util.ArrayList;
+import java.util.List;
+
+class A {
+  public List<String> strings = new ArrayList<String>(new ArrayList<Integer>(), Collections.singleton(new ArrayList<Double>()));
+}
diff --git a/java/java-tests/testData/codeInsight/javadocIG/methodTypeParameter.html b/java/java-tests/testData/codeInsight/javadocIG/methodTypeParameter.html
new file mode 100644
index 0000000..86ed662
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/javadocIG/methodTypeParameter.html
@@ -0,0 +1 @@
+<html><head>    <style type="text/css">        #error {            background-color: #eeeeee;            margin-bottom: 10px;        }        p {            margin: 5px 0;        }    </style></head><body><small><b><a href="psi_element://MethodTypeParam"><code>MethodTypeParam</code></a></b></small><PRE>&lt;T&gt;&nbsp;void&nbsp;<b>foo</b>(T&nbsp;t)</PRE><DD><DL><DT><b>Type parameters:</b><DD><code>&lt;T&gt;</code> -  type param</DD></DL></DD></body></html>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/javadocIG/methodTypeParameter.java b/java/java-tests/testData/codeInsight/javadocIG/methodTypeParameter.java
new file mode 100644
index 0000000..5ad5d85
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/javadocIG/methodTypeParameter.java
@@ -0,0 +1,7 @@
+class MethodTypeParam {
+  /**
+  * @param <T> type param
+  */
+  <T> void foo(T t) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/javadocIG/packageInfo/package-info.java b/java/java-tests/testData/codeInsight/javadocIG/packageInfo/package-info.java
new file mode 100644
index 0000000..5dc3f1b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/javadocIG/packageInfo/package-info.java
@@ -0,0 +1,4 @@
+/**
+ * This package contains nothing but package-info.java
+ */
+package packageInfo;
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/javadocIG/packageInfo/packageInfo.html b/java/java-tests/testData/codeInsight/javadocIG/packageInfo/packageInfo.html
new file mode 100644
index 0000000..3c7ff89
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/javadocIG/packageInfo/packageInfo.html
@@ -0,0 +1,2 @@
+<html><head>    <style type="text/css">        #error {            background-color: #eeeeee;            margin-bottom: 10px;        }        p {            margin: 5px 0;        }    </style></head><body>
+   This package contains nothing but package-info.java</body></html>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/javadocIG/simpleField.html b/java/java-tests/testData/codeInsight/javadocIG/simpleField.html
new file mode 100644
index 0000000..643ceac
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/javadocIG/simpleField.html
@@ -0,0 +1 @@
+<html><head>    <style type="text/css">        #error {            background-color: #eeeeee;            margin-bottom: 10px;        }        p {            margin: 5px 0;        }    </style></head><body><small><b><a href="psi_element://A"><code>A</code></a></b></small><PRE>public static int <b>JAVADOC_ME</b></PRE> Test</body></html>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/javadocIG/simpleField.java b/java/java-tests/testData/codeInsight/javadocIG/simpleField.java
new file mode 100644
index 0000000..1172e691
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/javadocIG/simpleField.java
@@ -0,0 +1,4 @@
+class A {
+  /** Test */
+  public static int JAVADOC_ME;
+}
diff --git a/java/java-tests/testData/codeInsight/javadocIG/valueInMethod.html b/java/java-tests/testData/codeInsight/javadocIG/valueInMethod.html
new file mode 100644
index 0000000..9b2fe72
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/javadocIG/valueInMethod.html
@@ -0,0 +1 @@
+<html><head>    <style type="text/css">        #error {            background-color: #eeeeee;            margin-bottom: 10px;        }        p {            margin: 5px 0;        }    </style></head><body><small><b><a href="psi_element://A"><code>A</code></a></b></small><PRE>public static&nbsp;void&nbsp;<b>JAVADOC_ME</b>()</PRE> The value of A is 23.</body></html>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/javadocIG/valueInMethod.java b/java/java-tests/testData/codeInsight/javadocIG/valueInMethod.java
new file mode 100644
index 0000000..4c7e205
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/javadocIG/valueInMethod.java
@@ -0,0 +1,6 @@
+class A {
+  public static int A = 23;
+
+  /** The value of A is {@value #A}. */
+  public static void JAVADOC_ME() { }
+}
diff --git a/java/java-tests/testData/codeInsight/navigation/alexProject/test.ipr b/java/java-tests/testData/codeInsight/navigation/alexProject/test.ipr
new file mode 100644
index 0000000..dded6f4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/navigation/alexProject/test.ipr
@@ -0,0 +1,264 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4" relativePaths="true">
+  <component name="AntConfiguration">
+    <defaultAnt bundledAnt="true" />
+  </component>
+  <component name="BuildJarProjectSettings">
+    <option name="BUILD_JARS_ON_MAKE" value="false" />
+  </component>
+  <component name="CodeStyleProjectProfileManger">
+    <option name="PROJECT_PROFILE" />
+    <option name="USE_PROJECT_LEVEL_SETTINGS" value="false" />
+    <scopes />
+    <profiles />
+  </component>
+  <component name="CodeStyleSettingsManager">
+    <option name="PER_PROJECT_SETTINGS" />
+    <option name="USE_PER_PROJECT_SETTINGS" value="false" />
+  </component>
+  <component name="CompilerConfiguration">
+    <option name="DEFAULT_COMPILER" value="Javac" />
+    <option name="DEPLOY_AFTER_MAKE" value="0" />
+    <resourceExtensions>
+      <entry name=".+\.(properties|xml|html|dtd|tld)" />
+      <entry name=".+\.(gif|png|jpeg|jpg)" />
+    </resourceExtensions>
+    <wildcardResourcePatterns>
+      <entry name="?*.properties" />
+      <entry name="?*.xml" />
+      <entry name="?*.gif" />
+      <entry name="?*.png" />
+      <entry name="?*.jpeg" />
+      <entry name="?*.jpg" />
+      <entry name="?*.html" />
+      <entry name="?*.dtd" />
+      <entry name="?*.tld" />
+    </wildcardResourcePatterns>
+  </component>
+  <component name="DataSourceManagerImpl" />
+  <component name="DependenciesAnalyzeManager">
+    <option name="myForwardDirection" value="false" />
+  </component>
+  <component name="DependencyValidationManager" />
+  <component name="EclipseCompilerSettings">
+    <option name="DEBUGGING_INFO" value="true" />
+    <option name="GENERATE_NO_WARNINGS" value="true" />
+    <option name="DEPRECATION" value="false" />
+    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+    <option name="MAXIMUM_HEAP_SIZE" value="128" />
+  </component>
+  <component name="EclipseEmbeddedCompilerSettings">
+    <option name="DEBUGGING_INFO" value="true" />
+    <option name="GENERATE_NO_WARNINGS" value="true" />
+    <option name="DEPRECATION" value="false" />
+    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+    <option name="MAXIMUM_HEAP_SIZE" value="128" />
+  </component>
+  <component name="EntryPointsManager">
+    <entry_points />
+  </component>
+  <component name="ExportToHTMLSettings">
+    <option name="PRINT_LINE_NUMBERS" value="false" />
+    <option name="OPEN_IN_BROWSER" value="false" />
+    <option name="OUTPUT_DIRECTORY" />
+  </component>
+  <component name="GUI Designer component loader factory" />
+  <component name="InspectionProjectProfileManager">
+    <option name="PROJECT_PROFILE" value="Project Default" />
+    <option name="USE_PROJECT_LEVEL_SETTINGS" value="false" />
+    <scopes />
+    <profiles>
+      <profile version="1.0" is_locked="false">
+        <option name="myName" value="Project Default" />
+        <option name="myLocal" value="false" />
+      </profile>
+    </profiles>
+  </component>
+  <component name="JavacSettings">
+    <option name="DEBUGGING_INFO" value="true" />
+    <option name="GENERATE_NO_WARNINGS" value="false" />
+    <option name="DEPRECATION" value="true" />
+    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+    <option name="MAXIMUM_HEAP_SIZE" value="128" />
+  </component>
+  <component name="JavadocGenerationManager">
+    <option name="OUTPUT_DIRECTORY" />
+    <option name="OPTION_SCOPE" value="protected" />
+    <option name="OPTION_HIERARCHY" value="true" />
+    <option name="OPTION_NAVIGATOR" value="true" />
+    <option name="OPTION_INDEX" value="true" />
+    <option name="OPTION_SEPARATE_INDEX" value="true" />
+    <option name="OPTION_DOCUMENT_TAG_USE" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_AUTHOR" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_VERSION" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_DEPRECATED" value="true" />
+    <option name="OPTION_DEPRECATED_LIST" value="true" />
+    <option name="OTHER_OPTIONS" value="" />
+    <option name="HEAP_SIZE" />
+    <option name="LOCALE" />
+    <option name="OPEN_IN_BROWSER" value="true" />
+  </component>
+  <component name="JikesSettings">
+    <option name="JIKES_PATH" value="" />
+    <option name="DEBUGGING_INFO" value="true" />
+    <option name="DEPRECATION" value="true" />
+    <option name="GENERATE_NO_WARNINGS" value="false" />
+    <option name="IS_EMACS_ERRORS_MODE" value="true" />
+    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+  </component>
+  <component name="LogConsolePreferences">
+    <option name="FILTER_ERRORS" value="false" />
+    <option name="FILTER_WARNINGS" value="false" />
+    <option name="FILTER_INFO" value="true" />
+    <option name="CUSTOM_FILTER" />
+  </component>
+  <component name="Palette2">
+    <group name="Swing">
+      <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
+      </item>
+      <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
+        <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
+        <initial-values>
+          <property name="text" value="Button" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="RadioButton" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="CheckBox" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="Label" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
+          <preferred-size width="-1" height="20" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
+      </item>
+    </group>
+  </component>
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/test1/test1.iml" filepath="$PROJECT_DIR$/test1/test1.iml" />
+      <module fileurl="file://$PROJECT_DIR$/test2/test2.iml" filepath="$PROJECT_DIR$/test2/test2.iml" />
+      <module fileurl="file://$PROJECT_DIR$/test3/test3.iml" filepath="$PROJECT_DIR$/test3/test3.iml" />
+    </modules>
+  </component>
+  <component name="ProjectRootManager" version="2" assert-keyword="true" jdk-15="true" project-jdk-name="1.5" project-jdk-type="JavaSDK">
+    <output url="file://$PROJECT_DIR$/classes" />
+  </component>
+  <component name="ProjectRunConfigurationManager" />
+  <component name="RmicSettings">
+    <option name="IS_EANABLED" value="false" />
+    <option name="DEBUGGING_INFO" value="true" />
+    <option name="GENERATE_NO_WARNINGS" value="false" />
+    <option name="GENERATE_IIOP_STUBS" value="false" />
+    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+  </component>
+  <component name="StarteamVcsAdapter" />
+  <component name="VssVcs" />
+  <component name="libraryTable" />
+  <component name="uidesigner-configuration">
+    <option name="INSTRUMENT_CLASSES" value="true" />
+    <option name="COPY_FORMS_RUNTIME_TO_OUTPUT" value="true" />
+    <option name="DEFAULT_LAYOUT_MANAGER" value="GridLayoutManager" />
+  </component>
+  <UsedPathMacros />
+</project>
+
diff --git a/java/java-tests/testData/codeInsight/navigation/alexProject/test1/src/com/test/TestI.java b/java/java-tests/testData/codeInsight/navigation/alexProject/test1/src/com/test/TestI.java
new file mode 100644
index 0000000..11b6857
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/navigation/alexProject/test1/src/com/test/TestI.java
@@ -0,0 +1,12 @@
+package com.test;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: cdr
+ * Date: Aug 14, 2006
+ * Time: 3:35:18 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public interface TestI {//jjjkjh kljh lk
+    void test(/* */);
+}
diff --git a/java/java-tests/testData/codeInsight/navigation/alexProject/test1/src/com/test/TestIImpl1.java b/java/java-tests/testData/codeInsight/navigation/alexProject/test1/src/com/test/TestIImpl1.java
new file mode 100644
index 0000000..d06b163
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/navigation/alexProject/test1/src/com/test/TestIImpl1.java
@@ -0,0 +1,14 @@
+package com.test;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: cdr
+ * Date: Aug 14, 2006
+ * Time: 3:35:52 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public class TestIImpl1 implements TestI {
+    public void test() {
+        //To change body of implemented methods use File | Settings | File Templates.
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/navigation/alexProject/test1/src/com/test/TestIImpl2.java b/java/java-tests/testData/codeInsight/navigation/alexProject/test1/src/com/test/TestIImpl2.java
new file mode 100644
index 0000000..fd221c9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/navigation/alexProject/test1/src/com/test/TestIImpl2.java
@@ -0,0 +1,14 @@
+package com.test;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: cdr
+ * Date: Aug 14, 2006
+ * Time: 3:36:03 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public class TestIImpl2 implements TestI {
+    public void test() {
+        //To change body of implemented methods use File | Settings | File Templates.
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/navigation/alexProject/test1/test1.iml b/java/java-tests/testData/codeInsight/navigation/alexProject/test1/test1.iml
new file mode 100644
index 0000000..9c3a0a6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/navigation/alexProject/test1/test1.iml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module version="4" relativePaths="true" type="JAVA_MODULE">
+  <component name="ModuleRootManager" />
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntryProperties />
+  </component>
+</module>
+
diff --git a/java/java-tests/testData/codeInsight/navigation/alexProject/test2/src/com/test/TestI.java b/java/java-tests/testData/codeInsight/navigation/alexProject/test2/src/com/test/TestI.java
new file mode 100644
index 0000000..7b22b82
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/navigation/alexProject/test2/src/com/test/TestI.java
@@ -0,0 +1,11 @@
+package com.test;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: cdr
+ * Date: Aug 14, 2006
+ * Time: 3:35:11 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public interface TestI {
+}
diff --git a/java/java-tests/testData/codeInsight/navigation/alexProject/test2/src/com/test/TestIImpl1.java b/java/java-tests/testData/codeInsight/navigation/alexProject/test2/src/com/test/TestIImpl1.java
new file mode 100644
index 0000000..68617fc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/navigation/alexProject/test2/src/com/test/TestIImpl1.java
@@ -0,0 +1,11 @@
+package com.test;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: cdr
+ * Date: Aug 14, 2006
+ * Time: 3:36:22 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public class TestIImpl1 implements TestI {
+}
diff --git a/java/java-tests/testData/codeInsight/navigation/alexProject/test2/src/com/test/TestIImpl3.java b/java/java-tests/testData/codeInsight/navigation/alexProject/test2/src/com/test/TestIImpl3.java
new file mode 100644
index 0000000..7ae76c8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/navigation/alexProject/test2/src/com/test/TestIImpl3.java
@@ -0,0 +1,11 @@
+package com.test;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: cdr
+ * Date: Aug 14, 2006
+ * Time: 3:36:28 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public class TestIImpl3 implements TestI {
+}
diff --git a/java/java-tests/testData/codeInsight/navigation/alexProject/test2/test2.iml b/java/java-tests/testData/codeInsight/navigation/alexProject/test2/test2.iml
new file mode 100644
index 0000000..9c3a0a6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/navigation/alexProject/test2/test2.iml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module version="4" relativePaths="true" type="JAVA_MODULE">
+  <component name="ModuleRootManager" />
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntryProperties />
+  </component>
+</module>
+
diff --git a/java/java-tests/testData/codeInsight/navigation/alexProject/test3/src/com/test/TestI.java b/java/java-tests/testData/codeInsight/navigation/alexProject/test3/src/com/test/TestI.java
new file mode 100644
index 0000000..f3d43e0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/navigation/alexProject/test3/src/com/test/TestI.java
@@ -0,0 +1,11 @@
+package com.test;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: cdr
+ * Date: Aug 14, 2006
+ * Time: 3:35:03 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public interface TestI {
+}
diff --git a/java/java-tests/testData/codeInsight/navigation/alexProject/test3/src/com/test/TestIImpl1.java b/java/java-tests/testData/codeInsight/navigation/alexProject/test3/src/com/test/TestIImpl1.java
new file mode 100644
index 0000000..56e5d84
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/navigation/alexProject/test3/src/com/test/TestIImpl1.java
@@ -0,0 +1,11 @@
+package com.test;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: cdr
+ * Date: Aug 14, 2006
+ * Time: 3:36:36 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public class TestIImpl1 implements TestI {
+}
diff --git a/java/java-tests/testData/codeInsight/navigation/alexProject/test3/test3.iml b/java/java-tests/testData/codeInsight/navigation/alexProject/test3/test3.iml
new file mode 100644
index 0000000..9c3a0a6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/navigation/alexProject/test3/test3.iml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module version="4" relativePaths="true" type="JAVA_MODULE">
+  <component name="ModuleRootManager" />
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntryProperties />
+  </component>
+</module>
+
diff --git a/java/java-tests/testData/codeInsight/nullityinferrer/afterAssertParamNotNull.java b/java/java-tests/testData/codeInsight/nullityinferrer/afterAssertParamNotNull.java
new file mode 100644
index 0000000..b46a0be
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/nullityinferrer/afterAssertParamNotNull.java
@@ -0,0 +1,14 @@
+import org.jetbrains.annotations.NotNull;
+
+class Test {
+  @NotNull
+  public String noNull(@NotNull String text) {
+    assert text != null;
+    return "";
+  }
+
+  private void foo() {
+    @NotNull String str = "";
+    assert str != null;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/nullityinferrer/afterConditionalReturnNotNull.java b/java/java-tests/testData/codeInsight/nullityinferrer/afterConditionalReturnNotNull.java
new file mode 100644
index 0000000..5a89e47
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/nullityinferrer/afterConditionalReturnNotNull.java
@@ -0,0 +1,9 @@
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+class Test {
+    @NotNull
+    public  String noNull( @Nullable String text) {
+        return text == null ? "" : text;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/nullityinferrer/afterFieldsAssignment.java b/java/java-tests/testData/codeInsight/nullityinferrer/afterFieldsAssignment.java
new file mode 100644
index 0000000..90741ae
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/nullityinferrer/afterFieldsAssignment.java
@@ -0,0 +1,58 @@
+import org.jetbrains.annotations.*;
+
+class Test {
+  @NotNull
+  String myFoo = "";
+
+  @Nullable
+  String myFoo1 = null;
+
+  @NotNull
+  String myFoo2 = foo2();
+  @NotNull String foo2() { return "";}
+
+  @Nullable
+  String myFoo3 = foo3();
+  @Nullable String foo3() { return null;}
+
+  String myFoo4;
+  void setFoo4() {
+    myFoo4 = "";
+  }
+
+  @NotNull
+  final String myFoo5;
+  @Nullable
+  final String myFoo6;
+  @NotNull
+  final String myFoo7;
+  @Nullable
+  final String myFoo8;
+  final String myFoo9;
+  @Nullable
+  final String myFoo10;
+
+  final String myFoo11 = "";
+  @NotNull
+  final String myFoo12;
+  @Nullable
+  final String myFoo13 = null;
+
+  /**
+   * {@link #myFoo6}
+   */
+  Test(@NotNull String param, @Nullable String paramNullable, String simpleParam) {
+    myFoo5 = "";
+    myFoo6 = null;
+    myFoo7 = param;
+    myFoo8 = paramNullable;
+    myFoo9 = simpleParam;
+    myFoo10 = foo10(false);
+    myFoo12 = "";
+  }
+
+  @Nullable
+  String foo10(boolean flag) {
+    return flag ? foo2() : foo3();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/nullityinferrer/afterForEachParameter.java b/java/java-tests/testData/codeInsight/nullityinferrer/afterForEachParameter.java
new file mode 100644
index 0000000..2863467
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/nullityinferrer/afterForEachParameter.java
@@ -0,0 +1,10 @@
+import org.jetbrains.annotations.NotNull;
+
+import java.util.*;
+class Test {
+   void foo(@NotNull List requests){
+        for (@NotNull Object request : requests) {
+          System.out.println(request.toString());
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/nullityinferrer/afterMethodReturnValue.java b/java/java-tests/testData/codeInsight/nullityinferrer/afterMethodReturnValue.java
new file mode 100644
index 0000000..6ae0b5b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/nullityinferrer/afterMethodReturnValue.java
@@ -0,0 +1,84 @@
+import org.jetbrains.annotations.*;
+
+class Test {
+  @Nullable
+  String foo1() {
+    return null;
+  }
+
+  @NotNull
+  String foo2() {
+    return "";
+  }
+
+  String foo3(String s) {
+    return s;
+  }
+
+  String foo4(@NotNull String s) {
+    return s.substring(0);
+  }
+
+  @NotNull
+  Integer foo5(Integer i) {
+    return i++;
+  }
+
+  @NotNull
+  Integer foo6(Integer i) {
+    if (i == 0) return 1;
+    return i * foo6(i--);
+  }
+
+  @Nullable
+  Integer foo7(boolean flag) {
+    return flag ? null : 1;
+  }
+
+  @Nullable
+  Integer foo8(boolean flag) {
+    if (flag) {
+      return null;
+    }
+    else {
+      return 1;
+    }
+  }
+
+  @Nullable
+  String bar9() {
+    return foo3("");
+  }
+
+  @Nullable
+  String foo9() {
+    return bar9();
+  }
+
+
+  @Nullable
+  String bar10() {
+    return foo3("");
+  }
+
+  @NotNull
+  String bar101() {
+    return foo3("");
+  }
+
+  @Nullable
+  String foo10(boolean flag) {
+    return flag ? bar10() : bar101();
+  }
+
+  @NotNull
+  String foo11() {
+    class Foo{
+      @Nullable
+      String mess() {
+        return null;
+      }
+    }
+    return "";
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/nullityinferrer/afterParameterCheckedForNull.java b/java/java-tests/testData/codeInsight/nullityinferrer/afterParameterCheckedForNull.java
new file mode 100644
index 0000000..4ca28d8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/nullityinferrer/afterParameterCheckedForNull.java
@@ -0,0 +1,37 @@
+import org.jetbrains.annotations.*;
+
+class Test {
+  void bar(@Nullable String str) {
+    if (str == null) {
+      foo(str);
+    }
+  }
+
+  String foo(String str) {
+    return str;
+  }
+
+  @Nullable
+  String foo1(@Nullable String str) {
+    if (str == null);
+    return (str);
+  }
+
+  @NotNull
+  String foo2(@Nullable String str) {
+    if (str == null);
+    return ((String)str);
+  }
+
+  @NotNull
+  String fram(@Nullable String str, boolean b) {
+    if (str != null) {
+      return b ? str : "not null strimg";
+    }
+    return "str was null";
+  }
+
+
+
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/nullityinferrer/afterParameterDereferenced.java b/java/java-tests/testData/codeInsight/nullityinferrer/afterParameterDereferenced.java
new file mode 100644
index 0000000..701f023
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/nullityinferrer/afterParameterDereferenced.java
@@ -0,0 +1,23 @@
+import org.jetbrains.annotations.*;
+
+class Test {
+  void foo(@NotNull String s) {
+    s.substring(0);
+  }
+
+  /**
+   * @param str
+   */
+  void bar(@NotNull String str) {
+    if (str.substring(0) == null) {
+    }
+  }
+
+  /**
+   * @param str
+   */
+  void bar(@NotNull String str) {
+    if ((str).substring(0) == null) {
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/nullityinferrer/afterParameterPassed2NotNull.java b/java/java-tests/testData/codeInsight/nullityinferrer/afterParameterPassed2NotNull.java
new file mode 100644
index 0000000..90113c2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/nullityinferrer/afterParameterPassed2NotNull.java
@@ -0,0 +1,10 @@
+import org.jetbrains.annotations.*;
+
+class Test {
+  void foo(@NotNull String s) {
+  }
+
+  void bar(@NotNull String str) {
+    foo(str);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/nullityinferrer/afterParameterUsedInForeachIteratedValue.java b/java/java-tests/testData/codeInsight/nullityinferrer/afterParameterUsedInForeachIteratedValue.java
new file mode 100644
index 0000000..a547c18
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/nullityinferrer/afterParameterUsedInForeachIteratedValue.java
@@ -0,0 +1,9 @@
+import org.jetbrains.annotations.NotNull;
+
+import java.util.*;
+class Test {
+   void foo(@NotNull List requests){
+        for (Object request : requests) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/nullityinferrer/afterTryEnumSwitch.java b/java/java-tests/testData/codeInsight/nullityinferrer/afterTryEnumSwitch.java
new file mode 100644
index 0000000..e1728fe
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/nullityinferrer/afterTryEnumSwitch.java
@@ -0,0 +1,13 @@
+import org.jetbrains.annotations.*;
+
+public class Infer {
+    enum E {;
+    }
+
+    void trySwitchEnum(@NotNull E e) {
+        switch (e) {
+
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/nullityinferrer/beforeAssertParamNotNull.java b/java/java-tests/testData/codeInsight/nullityinferrer/beforeAssertParamNotNull.java
new file mode 100644
index 0000000..ef4a89c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/nullityinferrer/beforeAssertParamNotNull.java
@@ -0,0 +1,11 @@
+class Test {
+  public String noNull(String text) {
+    assert text != null;
+    return "";
+  }
+
+  private void foo() {
+    String str = "";
+    assert str != null;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/nullityinferrer/beforeConditionalReturnNotNull.java b/java/java-tests/testData/codeInsight/nullityinferrer/beforeConditionalReturnNotNull.java
new file mode 100644
index 0000000..ae5f1a8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/nullityinferrer/beforeConditionalReturnNotNull.java
@@ -0,0 +1,5 @@
+class Test {
+    public  String noNull( String text) {
+        return text == null ? "" : text;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/nullityinferrer/beforeFieldsAssignment.java b/java/java-tests/testData/codeInsight/nullityinferrer/beforeFieldsAssignment.java
new file mode 100644
index 0000000..a7772af
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/nullityinferrer/beforeFieldsAssignment.java
@@ -0,0 +1,46 @@
+import org.jetbrains.annotations.*;
+
+class Test {
+  String myFoo = "";
+
+  String myFoo1 = null;
+
+  String myFoo2 = foo2();
+  @NotNull String foo2() { return "";}
+
+  String myFoo3 = foo3();
+  @Nullable String foo3() { return null;}
+
+  String myFoo4;
+  void setFoo4() {
+    myFoo4 = "";
+  }
+
+  final String myFoo5;
+  final String myFoo6;
+  final String myFoo7;
+  final String myFoo8;
+  final String myFoo9;
+  final String myFoo10;
+
+  final String myFoo11 = "";
+  final String myFoo12;
+  final String myFoo13 = null;
+
+  /**
+   * {@link #myFoo6}
+   */
+  Test(@NotNull String param, @Nullable String paramNullable, String simpleParam) {
+    myFoo5 = "";
+    myFoo6 = null;
+    myFoo7 = param;
+    myFoo8 = paramNullable;
+    myFoo9 = simpleParam;
+    myFoo10 = foo10(false);
+    myFoo12 = "";
+  }
+
+  String foo10(boolean flag) {
+    return flag ? foo2() : foo3();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/nullityinferrer/beforeForEachParameter.java b/java/java-tests/testData/codeInsight/nullityinferrer/beforeForEachParameter.java
new file mode 100644
index 0000000..7772bb8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/nullityinferrer/beforeForEachParameter.java
@@ -0,0 +1,8 @@
+import java.util.*;
+class Test {
+   void foo(List requests){
+        for (Object request : requests) {
+          System.out.println(request.toString());
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/nullityinferrer/beforeMethodReturnValue.java b/java/java-tests/testData/codeInsight/nullityinferrer/beforeMethodReturnValue.java
new file mode 100644
index 0000000..405e31c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/nullityinferrer/beforeMethodReturnValue.java
@@ -0,0 +1,74 @@
+import org.jetbrains.annotations.*;
+
+class Test {
+  String foo1() {
+    return null;
+  }
+
+  String foo2() {
+    return "";
+  }
+
+  String foo3(String s) {
+    return s;
+  }
+
+  String foo4(String s) {
+    return s.substring(0);
+  }
+
+  Integer foo5(Integer i) {
+    return i++;
+  }
+
+  Integer foo6(Integer i) {
+    if (i == 0) return 1;
+    return i * foo6(i--);
+  }
+
+  Integer foo7(boolean flag) {
+    return flag ? null : 1;
+  }
+
+  Integer foo8(boolean flag) {
+    if (flag) {
+      return null;
+    }
+    else {
+      return 1;
+    }
+  }
+
+  @Nullable
+  String bar9() {
+    return foo3("");
+  }
+
+  String foo9() {
+    return bar9();
+  }
+
+
+  @Nullable
+  String bar10() {
+    return foo3("");
+  }
+
+  @NotNull
+  String bar101() {
+    return foo3("");
+  }
+
+  String foo10(boolean flag) {
+    return flag ? bar10() : bar101();
+  }
+
+  String foo11() {
+    class Foo{
+      String mess() {
+        return null;
+      }
+    }
+    return "";
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/nullityinferrer/beforeParameterCheckedForInstanceof.java b/java/java-tests/testData/codeInsight/nullityinferrer/beforeParameterCheckedForInstanceof.java
new file mode 100644
index 0000000..df703a1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/nullityinferrer/beforeParameterCheckedForInstanceof.java
@@ -0,0 +1,12 @@
+public class C {
+  private int x;
+
+  public boolean equals(Object object) {
+    if (object instanceof C) {
+      if (((C)object).x == x) {
+        return true;
+      }
+    }
+    return false;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/nullityinferrer/beforeParameterCheckedForNull.java b/java/java-tests/testData/codeInsight/nullityinferrer/beforeParameterCheckedForNull.java
new file mode 100644
index 0000000..cb4bb0b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/nullityinferrer/beforeParameterCheckedForNull.java
@@ -0,0 +1,34 @@
+import org.jetbrains.annotations.*;
+
+class Test {
+  void bar(String str) {
+    if (str == null) {
+      foo(str);
+    }
+  }
+
+  String foo(String str) {
+    return str;
+  }
+
+  String foo1(String str) {
+    if (str == null);
+    return (str);
+  }
+
+  String foo2(String str) {
+    if (str == null);
+    return ((String)str);
+  }
+
+  String fram(String str, boolean b) {
+    if (str != null) {
+      return b ? str : "not null strimg";
+    }
+    return "str was null";
+  }
+
+
+
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/nullityinferrer/beforeParameterDereferenced.java b/java/java-tests/testData/codeInsight/nullityinferrer/beforeParameterDereferenced.java
new file mode 100644
index 0000000..a1ba7ca
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/nullityinferrer/beforeParameterDereferenced.java
@@ -0,0 +1,23 @@
+import org.jetbrains.annotations.*;
+
+class Test {
+  void foo(String s) {
+    s.substring(0);
+  }
+
+  /**
+   * @param str
+   */
+  void bar(String str) {
+    if (str.substring(0) == null) {
+    }
+  }
+
+  /**
+   * @param str
+   */
+  void bar(String str) {
+    if ((str).substring(0) == null) {
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/nullityinferrer/beforeParameterPassed2NotNull.java b/java/java-tests/testData/codeInsight/nullityinferrer/beforeParameterPassed2NotNull.java
new file mode 100644
index 0000000..1046c61
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/nullityinferrer/beforeParameterPassed2NotNull.java
@@ -0,0 +1,10 @@
+import org.jetbrains.annotations.*;
+
+class Test {
+  void foo(@NotNull String s) {
+  }
+
+  void bar(String str) {
+    foo(str);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/nullityinferrer/beforeParameterUsedInForeachIteratedValue.java b/java/java-tests/testData/codeInsight/nullityinferrer/beforeParameterUsedInForeachIteratedValue.java
new file mode 100644
index 0000000..166ce44
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/nullityinferrer/beforeParameterUsedInForeachIteratedValue.java
@@ -0,0 +1,7 @@
+import java.util.*;
+class Test {
+   void foo(List requests){
+        for (Object request : requests) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/nullityinferrer/beforeTryEnumSwitch.java b/java/java-tests/testData/codeInsight/nullityinferrer/beforeTryEnumSwitch.java
new file mode 100644
index 0000000..60c7047
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/nullityinferrer/beforeTryEnumSwitch.java
@@ -0,0 +1,13 @@
+import org.jetbrains.annotations.*;
+
+public class Infer {
+    enum E {;
+    }
+
+    void trySwitchEnum(E e) {
+        switch (e) {
+
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/nullityinferrer/lib/annotations.jar b/java/java-tests/testData/codeInsight/nullityinferrer/lib/annotations.jar
new file mode 100644
index 0000000..5404192
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/nullityinferrer/lib/annotations.jar
Binary files differ
diff --git a/java/java-tests/testData/codeInsight/overrideImplement/ImplementedConstructorsExcluded.java b/java/java-tests/testData/codeInsight/overrideImplement/ImplementedConstructorsExcluded.java
new file mode 100644
index 0000000..9066965
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/overrideImplement/ImplementedConstructorsExcluded.java
@@ -0,0 +1,9 @@
+class A {
+  A() { }
+  A(String s) { }
+}
+
+class B extends A {
+  B() { super(); }
+  <caret>
+}
diff --git a/java/java-tests/testData/codeInsight/overrideImplement/afterAnnotation.java b/java/java-tests/testData/codeInsight/overrideImplement/afterAnnotation.java
new file mode 100644
index 0000000..8016d8f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/overrideImplement/afterAnnotation.java
@@ -0,0 +1,12 @@
+@interface ff{
+    String f() default "";
+}
+class d implements ff {
+    public String f() {
+        <caret><selection>return null;  //To change body of implemented methods use File | Settings | File Templates.</selection>
+    }
+
+    public Class<? extends Annotation> annotationType() {
+        return null;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/overrideImplement/afterClone.java b/java/java-tests/testData/codeInsight/overrideImplement/afterClone.java
new file mode 100644
index 0000000..26dc3b0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/overrideImplement/afterClone.java
@@ -0,0 +1,12 @@
+class Gen {
+    protected Gen clone() {
+        return null;
+    }
+}
+
+class X2 extends Gen {
+    @Override
+    protected Gen clone() {
+        <caret><selection>return super.clone();    //To change body of overridden methods use File | Settings | File Templates.</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/overrideImplement/afterDoNotImplementExtensionMethods.java b/java/java-tests/testData/codeInsight/overrideImplement/afterDoNotImplementExtensionMethods.java
new file mode 100644
index 0000000..f32bf53
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/overrideImplement/afterDoNotImplementExtensionMethods.java
@@ -0,0 +1,15 @@
+interface A<T> {
+    void m1(T t);
+    void m2();
+}
+
+interface B<T> extends A<T> {
+    void m1(T t) default { }
+}
+
+class MyClass<T> implements B<T> {
+    @Override
+    public void m2() {
+        <selection>//To change body of implemented methods use File | Settings | File Templates.</selection>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/overrideImplement/afterEnumConstant.java b/java/java-tests/testData/codeInsight/overrideImplement/afterEnumConstant.java
new file mode 100644
index 0000000..973f78f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/overrideImplement/afterEnumConstant.java
@@ -0,0 +1,24 @@
+/*
+ * 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.
+ */
+enum E{
+  E1 {
+      @Override
+      public void foo() {
+          <selection>//To change body of implemented methods use File | Settings | File Templates.</selection>
+      }
+  };
+  public abstract void foo();
+}
diff --git a/java/java-tests/testData/codeInsight/overrideImplement/afterErasureWildcard.java b/java/java-tests/testData/codeInsight/overrideImplement/afterErasureWildcard.java
new file mode 100644
index 0000000..4c75909
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/overrideImplement/afterErasureWildcard.java
@@ -0,0 +1,9 @@
+interface Generic<T> {
+  T foo();
+}
+
+class II implements Generic<?> {
+    public Object foo() {
+        <selection>return null;  //To change body of implemented methods use File | Settings | File Templates.</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/overrideImplement/afterImplementExtensionMethods.java b/java/java-tests/testData/codeInsight/overrideImplement/afterImplementExtensionMethods.java
new file mode 100644
index 0000000..47e572e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/overrideImplement/afterImplementExtensionMethods.java
@@ -0,0 +1,10 @@
+interface A<T> {
+    void m(T t) default { }
+}
+
+class MyClass<T> implements A<T> {
+    @Override
+    public void m(T t) {
+        <selection>//To change body of implemented methods use File | Settings | File Templates.</selection>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/overrideImplement/afterIncomplete.java b/java/java-tests/testData/codeInsight/overrideImplement/afterIncomplete.java
new file mode 100644
index 0000000..2fa1211
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/overrideImplement/afterIncomplete.java
@@ -0,0 +1,5 @@
+class S implements Runnable {
+    public void run() {
+        <caret><selection>//To change body of implemented methods use File | Settings | File Templates.</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/overrideImplement/afterInterfaceAndAbstractClass.java b/java/java-tests/testData/codeInsight/overrideImplement/afterInterfaceAndAbstractClass.java
new file mode 100644
index 0000000..b90134b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/overrideImplement/afterInterfaceAndAbstractClass.java
@@ -0,0 +1,16 @@
+abstract class A {
+  public abstract D foo();
+}
+
+interface B {
+  F foo();
+}
+
+class C extends A implements B {
+    public F foo() {
+        <selection>return null;  //To change body of implemented methods use File | Settings | File Templates.</selection>
+    }
+}
+
+class D {}
+class F extends D {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/overrideImplement/afterLongFinalParameterList.java b/java/java-tests/testData/codeInsight/overrideImplement/afterLongFinalParameterList.java
new file mode 100644
index 0000000..3b7a727
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/overrideImplement/afterLongFinalParameterList.java
@@ -0,0 +1,16 @@
+public interface A {
+    void foo(String pppppppppppp1, String pppppppppppp2,String pppppppppppp3,String pppppppppppp4,String pppppppppppp5,String pppppppppppp6,String pppppppppppp7,String pppppppppppp8);
+}
+
+abstract class B implements A{
+    public void foo(final String pppppppppppp1,
+                    final String pppppppppppp2,
+                    final String pppppppppppp3,
+                    final String pppppppppppp4,
+                    final String pppppppppppp5,
+                    final String pppppppppppp6,
+                    final String pppppppppppp7,
+                    final String pppppppppppp8) {
+        <caret><selection>//To change body of implemented methods use File | Settings | File Templates.</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/overrideImplement/afterLongParameterList.java b/java/java-tests/testData/codeInsight/overrideImplement/afterLongParameterList.java
new file mode 100644
index 0000000..a7d899a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/overrideImplement/afterLongParameterList.java
@@ -0,0 +1,15 @@
+public interface A {
+    void foo(String p1, String p2,String p3,String p4,String p5,String p6,String p7);
+}
+
+abstract class B implements A{
+    public void foo(String p1,
+                    String p2,
+                    String p3,
+                    String p4,
+                    String p5,
+                    String p6,
+                    String p7) {
+        <caret><selection>//To change body of implemented methods use File | Settings | File Templates.</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/overrideImplement/afterMultipleInterfaceInheritance.java b/java/java-tests/testData/codeInsight/overrideImplement/afterMultipleInterfaceInheritance.java
new file mode 100644
index 0000000..2c49a91
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/overrideImplement/afterMultipleInterfaceInheritance.java
@@ -0,0 +1,16 @@
+interface A
+{
+    abstract String foo();
+}
+
+interface B
+{
+    abstract Object foo();
+}
+
+class C implements A, B
+{
+    public String foo() {
+        <selection>return null;  //To change body of implemented methods use File | Settings | File Templates.</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/overrideImplement/afterOnTheLineWithExistingExpression.java b/java/java-tests/testData/codeInsight/overrideImplement/afterOnTheLineWithExistingExpression.java
new file mode 100644
index 0000000..4a4e298
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/overrideImplement/afterOnTheLineWithExistingExpression.java
@@ -0,0 +1,12 @@
+abstract class  Base  {
+    void foo(){}
+}
+
+class Sub extends Base {
+    int it;
+
+    @Override
+    void foo() {
+        <caret><selection>super.foo();    //To change body of overridden methods use File | Settings | File Templates.</selection>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/overrideImplement/afterRawSuper.java b/java/java-tests/testData/codeInsight/overrideImplement/afterRawSuper.java
new file mode 100644
index 0000000..95912a1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/overrideImplement/afterRawSuper.java
@@ -0,0 +1,25 @@
+/*
+ * 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.
+ */
+interface A<T> {
+        <S> void foo();
+    }
+
+    class B implements A
+    {
+        public void foo() {
+            <selection>//To change body of implemented methods use File | Settings | File Templates.</selection>
+        }
+    }
diff --git a/java/java-tests/testData/codeInsight/overrideImplement/afterResolveTypeParamConflict.java b/java/java-tests/testData/codeInsight/overrideImplement/afterResolveTypeParamConflict.java
new file mode 100644
index 0000000..17feef2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/overrideImplement/afterResolveTypeParamConflict.java
@@ -0,0 +1,10 @@
+abstract class A1<X>{
+    abstract <T> void foo(T t, X x);
+}
+
+class B1<T> extends A1<T>{
+    @Override
+    <T1> void foo(T1 t1, T t) {
+        <selection>//To change body of implemented methods use File | Settings | File Templates.</selection>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/overrideImplement/afterSimple.java b/java/java-tests/testData/codeInsight/overrideImplement/afterSimple.java
new file mode 100644
index 0000000..304ee10
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/overrideImplement/afterSimple.java
@@ -0,0 +1,10 @@
+abstract class  IX  {
+    void foo(){}
+}
+
+class XXC extends IX {
+    @Override
+    void foo() {
+        <caret><selection>super.foo();    //To change body of overridden methods use File | Settings | File Templates.</selection>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/overrideImplement/afterSimplifyObjectWildcard.java b/java/java-tests/testData/codeInsight/overrideImplement/afterSimplifyObjectWildcard.java
new file mode 100644
index 0000000..0f09d8f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/overrideImplement/afterSimplifyObjectWildcard.java
@@ -0,0 +1,12 @@
+interface Generic<T> {
+  SomeGeneric<? extends T> foo();
+}
+
+class II implements Generic<Object> {
+    public SomeGeneric<?> foo() {
+        <selection>return null;  //To change body of implemented methods use File | Settings | File Templates.</selection>
+    }
+}
+
+class SomeGeneric<P> {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/overrideImplement/afterSubstituteBoundInMethodTypeParam.java b/java/java-tests/testData/codeInsight/overrideImplement/afterSubstituteBoundInMethodTypeParam.java
new file mode 100644
index 0000000..47816c4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/overrideImplement/afterSubstituteBoundInMethodTypeParam.java
@@ -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.
+ */
+abstract class A<T> {
+        abstract <S extends T> void foo(S s);
+    }
+
+    class B<S> extends A<Throwable>{ // Implement methods
+
+        @Override
+        <S extends Throwable> void foo(S s) {
+            <selection>//To change body of implemented methods use File | Settings | File Templates.</selection>
+        }
+    }
diff --git a/java/java-tests/testData/codeInsight/overrideImplement/afterSubstitutionInTypeParametersList.java b/java/java-tests/testData/codeInsight/overrideImplement/afterSubstitutionInTypeParametersList.java
new file mode 100644
index 0000000..1cd672e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/overrideImplement/afterSubstitutionInTypeParametersList.java
@@ -0,0 +1,10 @@
+abstract class  IX<T>  {
+   abstract <S extends T> void foo(){}
+}
+
+class XXC<S> extends IX<Throwable> {
+    @Override
+    <S extends Throwable> void foo() {
+        <caret><selection>//To change body of implemented methods use File | Settings | File Templates.</selection>
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/overrideImplement/afterTestMissed.java b/java/java-tests/testData/codeInsight/overrideImplement/afterTestMissed.java
new file mode 100644
index 0000000..e4fad9b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/overrideImplement/afterTestMissed.java
@@ -0,0 +1,11 @@
+class f{
+  @org.testng.annotations.BeforeMethod
+  String foo() {return "";}
+}
+
+class ff extends f {
+    @Override
+    String foo() {
+        <selection>return super.foo();    //To change body of overridden methods use File | Settings | File Templates.</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/overrideImplement/afterTypeParam.java b/java/java-tests/testData/codeInsight/overrideImplement/afterTypeParam.java
new file mode 100644
index 0000000..bcc6df4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/overrideImplement/afterTypeParam.java
@@ -0,0 +1,9 @@
+interface Function<S> {
+  void fun(Function<S> function);
+}
+
+class Bar extends Function<String>{
+    public void fun(Function<String> function) {
+        <selection>//To change body of implemented methods use File | Settings | File Templates.</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/overrideImplement/afterWildcard.java b/java/java-tests/testData/codeInsight/overrideImplement/afterWildcard.java
new file mode 100644
index 0000000..9c39838
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/overrideImplement/afterWildcard.java
@@ -0,0 +1,9 @@
+interface Function<S, R> {
+  R fun(S s);
+}
+
+class Bar extends Function<String, ?>{
+    public Object fun(String s) {
+        <selection>return null;  //To change body of implemented methods use File | Settings | File Templates.</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/overrideImplement/beforeAnnotation.java b/java/java-tests/testData/codeInsight/overrideImplement/beforeAnnotation.java
new file mode 100644
index 0000000..83884ff
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/overrideImplement/beforeAnnotation.java
@@ -0,0 +1,9 @@
+@interface ff{
+    String f() default "";
+}
+class d implements ff {
+    <caret>
+    public Class<? extends Annotation> annotationType() {
+        return null;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/overrideImplement/beforeClone.java b/java/java-tests/testData/codeInsight/overrideImplement/beforeClone.java
new file mode 100644
index 0000000..5bf6356
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/overrideImplement/beforeClone.java
@@ -0,0 +1,9 @@
+class Gen {
+    protected Gen clone() {
+        return null;
+    }
+}
+
+class X2 extends Gen {
+    <caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/overrideImplement/beforeDoNotImplementExtensionMethods.java b/java/java-tests/testData/codeInsight/overrideImplement/beforeDoNotImplementExtensionMethods.java
new file mode 100644
index 0000000..edf7c57
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/overrideImplement/beforeDoNotImplementExtensionMethods.java
@@ -0,0 +1,12 @@
+interface A<T> {
+    void m1(T t);
+    void m2();
+}
+
+interface B<T> extends A<T> {
+    void m1(T t) default { }
+}
+
+class MyClass<T> implements B<T> {
+    <caret>
+}
diff --git a/java/java-tests/testData/codeInsight/overrideImplement/beforeEnumConstant.java b/java/java-tests/testData/codeInsight/overrideImplement/beforeEnumConstant.java
new file mode 100644
index 0000000..1d06eebc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/overrideImplement/beforeEnumConstant.java
@@ -0,0 +1,19 @@
+/*
+ * 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.
+ */
+enum E{
+  E1;
+  public abstract void fo<caret>o();
+}
diff --git a/java/java-tests/testData/codeInsight/overrideImplement/beforeErasureWildcard.java b/java/java-tests/testData/codeInsight/overrideImplement/beforeErasureWildcard.java
new file mode 100644
index 0000000..9c2cfbc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/overrideImplement/beforeErasureWildcard.java
@@ -0,0 +1,7 @@
+interface Generic<T> {
+  T foo();
+}
+
+class II implements Generic<?> {
+  <caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/overrideImplement/beforeImplementExtensionMethods.java b/java/java-tests/testData/codeInsight/overrideImplement/beforeImplementExtensionMethods.java
new file mode 100644
index 0000000..0694873
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/overrideImplement/beforeImplementExtensionMethods.java
@@ -0,0 +1,7 @@
+interface A<T> {
+    void m(T t) default { }
+}
+
+class MyClass<T> implements A<T> {
+    <caret>
+}
diff --git a/java/java-tests/testData/codeInsight/overrideImplement/beforeIncomplete.java b/java/java-tests/testData/codeInsight/overrideImplement/beforeIncomplete.java
new file mode 100644
index 0000000..1b10ffd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/overrideImplement/beforeIncomplete.java
@@ -0,0 +1 @@
+class S <caret>implements Runnable
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/overrideImplement/beforeInterfaceAndAbstractClass.java b/java/java-tests/testData/codeInsight/overrideImplement/beforeInterfaceAndAbstractClass.java
new file mode 100644
index 0000000..74b4f0a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/overrideImplement/beforeInterfaceAndAbstractClass.java
@@ -0,0 +1,14 @@
+abstract class A {
+  public abstract D foo();
+}
+
+interface B {
+  F foo();
+}
+
+class C extends A implements B {
+    <caret>
+}
+
+class D {}
+class F extends D {}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/overrideImplement/beforeLongFinalParameterList.java b/java/java-tests/testData/codeInsight/overrideImplement/beforeLongFinalParameterList.java
new file mode 100644
index 0000000..1b940e1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/overrideImplement/beforeLongFinalParameterList.java
@@ -0,0 +1,7 @@
+public interface A {
+    void foo(String pppppppppppp1, String pppppppppppp2,String pppppppppppp3,String pppppppppppp4,String pppppppppppp5,String pppppppppppp6,String pppppppppppp7,String pppppppppppp8);
+}
+
+abstract class B implements A{
+  <caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/overrideImplement/beforeLongParameterList.java b/java/java-tests/testData/codeInsight/overrideImplement/beforeLongParameterList.java
new file mode 100644
index 0000000..7e77ad9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/overrideImplement/beforeLongParameterList.java
@@ -0,0 +1,7 @@
+public interface A {
+    void foo(String p1, String p2,String p3,String p4,String p5,String p6,String p7);
+}
+
+abstract class B implements A{
+    <caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/overrideImplement/beforeMultipleInterfaceInheritance.java b/java/java-tests/testData/codeInsight/overrideImplement/beforeMultipleInterfaceInheritance.java
new file mode 100644
index 0000000..98a491a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/overrideImplement/beforeMultipleInterfaceInheritance.java
@@ -0,0 +1,14 @@
+interface A
+{
+    abstract String foo();
+}
+
+interface B
+{
+    abstract Object foo();
+}
+
+class C implements A, B
+{
+    <caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/overrideImplement/beforeOnTheLineWithExistingExpression.java b/java/java-tests/testData/codeInsight/overrideImplement/beforeOnTheLineWithExistingExpression.java
new file mode 100644
index 0000000..1a7c6dc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/overrideImplement/beforeOnTheLineWithExistingExpression.java
@@ -0,0 +1,7 @@
+abstract class  Base  {
+    void foo(){}
+}
+
+class Sub extends Base {
+    int it;<caret>
+}
diff --git a/java/java-tests/testData/codeInsight/overrideImplement/beforeRawSuper.java b/java/java-tests/testData/codeInsight/overrideImplement/beforeRawSuper.java
new file mode 100644
index 0000000..aefe95c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/overrideImplement/beforeRawSuper.java
@@ -0,0 +1,24 @@
+/*
+ * 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.
+ */
+interface A<T> {
+        <S> void foo();
+    }
+
+    class B implements A
+    {
+      <caret>
+
+    }
diff --git a/java/java-tests/testData/codeInsight/overrideImplement/beforeResolveTypeParamConflict.java b/java/java-tests/testData/codeInsight/overrideImplement/beforeResolveTypeParamConflict.java
new file mode 100644
index 0000000..ffe191e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/overrideImplement/beforeResolveTypeParamConflict.java
@@ -0,0 +1,7 @@
+abstract class A1<X>{
+    abstract <T> void foo(T t, X x);
+}
+
+class B1<T> extends A1<T>{
+  <caret>
+}
diff --git a/java/java-tests/testData/codeInsight/overrideImplement/beforeSimple.java b/java/java-tests/testData/codeInsight/overrideImplement/beforeSimple.java
new file mode 100644
index 0000000..406ddfa
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/overrideImplement/beforeSimple.java
@@ -0,0 +1,7 @@
+abstract class  IX  {
+    void foo(){}
+}
+
+class XXC extends IX {
+    <caret>
+}
diff --git a/java/java-tests/testData/codeInsight/overrideImplement/beforeSimplifyObjectWildcard.java b/java/java-tests/testData/codeInsight/overrideImplement/beforeSimplifyObjectWildcard.java
new file mode 100644
index 0000000..3296e1e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/overrideImplement/beforeSimplifyObjectWildcard.java
@@ -0,0 +1,10 @@
+interface Generic<T> {
+  SomeGeneric<? extends T> foo();
+}
+
+class II implements Generic<Object> {
+  <caret>
+}
+
+class SomeGeneric<P> {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/overrideImplement/beforeSubstituteBoundInMethodTypeParam.java b/java/java-tests/testData/codeInsight/overrideImplement/beforeSubstituteBoundInMethodTypeParam.java
new file mode 100644
index 0000000..0cccda1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/overrideImplement/beforeSubstituteBoundInMethodTypeParam.java
@@ -0,0 +1,22 @@
+/*
+ * 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.
+ */
+abstract class A<T> {
+        abstract <S extends T> void foo(S s);
+    }
+
+    class B<S> extends A<Throwable>{ // Implement methods
+      <caret>
+    }
diff --git a/java/java-tests/testData/codeInsight/overrideImplement/beforeSubstitutionInTypeParametersList.java b/java/java-tests/testData/codeInsight/overrideImplement/beforeSubstitutionInTypeParametersList.java
new file mode 100644
index 0000000..66f3d8e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/overrideImplement/beforeSubstitutionInTypeParametersList.java
@@ -0,0 +1,7 @@
+abstract class  IX<T>  {
+   abstract <S extends T> void foo(){}
+}
+
+class XXC<S> extends IX<Throwable> {
+    <caret>
+}
diff --git a/java/java-tests/testData/codeInsight/overrideImplement/beforeTestMissed.java b/java/java-tests/testData/codeInsight/overrideImplement/beforeTestMissed.java
new file mode 100644
index 0000000..ba7012f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/overrideImplement/beforeTestMissed.java
@@ -0,0 +1,8 @@
+class f{
+  @org.testng.annotations.BeforeMethod
+  String foo() {return "";}
+}
+
+class ff extends f {
+  <caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/overrideImplement/beforeTypeParam.java b/java/java-tests/testData/codeInsight/overrideImplement/beforeTypeParam.java
new file mode 100644
index 0000000..02f91f6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/overrideImplement/beforeTypeParam.java
@@ -0,0 +1,7 @@
+interface Function<S> {
+  void fun(Function<S> function);
+}
+
+class Bar extends Function<String>{
+  <caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/overrideImplement/beforeWildcard.java b/java/java-tests/testData/codeInsight/overrideImplement/beforeWildcard.java
new file mode 100644
index 0000000..12f49d5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/overrideImplement/beforeWildcard.java
@@ -0,0 +1,7 @@
+interface Function<S, R> {
+  R fun(S s);
+}
+
+class Bar extends Function<String, ?>{
+  <caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/slice/backward/AnonClass.java b/java/java-tests/testData/codeInsight/slice/backward/AnonClass.java
new file mode 100644
index 0000000..978a93f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/slice/backward/AnonClass.java
@@ -0,0 +1,17 @@
+class Test {
+
+    public static void main(String[] args) {
+        final String a = <flown11>args[0];
+        final String b = args[1];
+        new Runnable() {
+            public void run() {
+                System.out.println(f(<flown1>a, b));
+            }
+        }.run();
+    }
+
+    private static String f(String a, String b) {
+        return <caret>a + b;
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/slice/backward/Assignment.java b/java/java-tests/testData/codeInsight/slice/backward/Assignment.java
new file mode 100644
index 0000000..39c06fd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/slice/backward/Assignment.java
@@ -0,0 +1,7 @@
+class V {
+  {
+    int i;
+    i<caret>= <flown1>1;
+    
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/slice/backward/ComplexTypeErasure.java b/java/java-tests/testData/codeInsight/slice/backward/ComplexTypeErasure.java
new file mode 100644
index 0000000..a3fc381
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/slice/backward/ComplexTypeErasure.java
@@ -0,0 +1,89 @@
+class Pair<A, B> {
+  public final A first;
+  public final B second;
+
+  public Pair(A first, B second) {
+    this.first = <flown111>first;
+    this.second = second;
+  }
+
+  public final A getFirst() {
+    return <flown11>first;
+  }
+
+  public final B getSecond() {
+    return second;
+  }
+
+  public static <A, B> Pair<A, B> create(A first, B second) {
+    return new Pair<A,B>(<flown1111>first, second);
+  }
+
+  public final boolean equals(Object o){
+    return o instanceof Pair && false;
+  }
+
+  public final int hashCode(){
+    int hashCode = 0;
+    if (first != null){
+      hashCode += hashCode(first);
+    }
+    if (second != null){
+      hashCode += hashCode(second);
+    }
+    return hashCode;
+  }
+
+  private static int hashCode(final Object o) {
+    return o.hashCode();
+  }
+
+  public String toString() {
+    return "<" + first + "," + second + ">";
+  }
+}
+class Ref<T> {
+  private T myValue;
+
+  public Ref() { }
+
+  public Ref(T value) {
+    myValue = value;
+  }
+
+  public boolean isNull () {
+    return myValue == null;
+  }
+
+  public T get () {
+    return myValue;
+  }
+
+  public void set (T value) {
+    myValue = value;
+  }
+
+  public static <T> Ref<T> create(T value) {
+    return new Ref<T>(value);
+  }
+
+  public String toString() {
+    return myValue == null ? null : myValue.toString();
+  }
+}
+class PsiVariable {}
+class PsiField extends PsiVariable {}
+
+class S {
+        private static Pair<boolean[], Boolean> parseFlags(final String string) {
+          boolean returnFlag = false;
+          final boolean[] result = new boolean[0];
+          return Pair.create(result, returnFlag);
+        }
+        void psiflow() {
+            Ref<Pair<PsiField, Boolean>> anchorRef = new Ref<Pair<PsiField, Boolean>>();
+            Pair<PsiField, Boolean> fieldAnchor = anchorRef.get();
+
+            PsiVariable <caret>psiVariable = <flown1>fieldAnchor.getFirst();
+        }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/slice/backward/Conditional.java b/java/java-tests/testData/codeInsight/slice/backward/Conditional.java
new file mode 100644
index 0000000..a6e07ca
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/slice/backward/Conditional.java
@@ -0,0 +1,13 @@
+class s {
+    {
+      x(<flown11211>"xxx");
+    }
+    String x(String g) {
+        String d = <flown1>foo(<flown1121>g);
+        return <caret>d;
+    }
+
+    private String foo(String i) {
+        return <flown11>i==null ? <flown111>null : <flown112>i;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/slice/backward/Conditional2.java b/java/java-tests/testData/codeInsight/slice/backward/Conditional2.java
new file mode 100644
index 0000000..3549866
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/slice/backward/Conditional2.java
@@ -0,0 +1,17 @@
+class Test {
+
+    public static void main(String[] args) {
+        final String a = <flown1121>args[0];
+        final String b = <flown11>Test.class == null ? <flown111>args[1] : <flown112>a;
+        new Runnable() {
+            public void run() {
+                System.out.println(f(a, <flown1>b));
+            }
+        }.run();
+    }
+
+    private static String f(String a, String b) {
+        return a + <caret>b;
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/slice/backward/DoubleNulls.java b/java/java-tests/testData/codeInsight/slice/backward/DoubleNulls.java
new file mode 100644
index 0000000..c136014
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/slice/backward/DoubleNulls.java
@@ -0,0 +1,9 @@
+public class X  {
+  String <caret>l;
+  {
+    l = null;
+  }
+  {
+    l = null;
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/slice/backward/DupSlice.java b/java/java-tests/testData/codeInsight/slice/backward/DupSlice.java
new file mode 100644
index 0000000..a983ee6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/slice/backward/DupSlice.java
@@ -0,0 +1,13 @@
+public class DupSlice {
+    int <caret>field; 
+
+    void multiply(int fp) {
+        this.field = fp;
+        multiplay2(1111111111);
+    }
+
+    void multiplay2(int i) {
+        field = i;
+        multiply(i);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/slice/backward/Duplicate.java b/java/java-tests/testData/codeInsight/slice/backward/Duplicate.java
new file mode 100644
index 0000000..5812f8d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/slice/backward/Duplicate.java
@@ -0,0 +1,32 @@
+class Test {
+    boolean <caret>fie;
+    int f(T t) {
+        fie = t.t;
+        return 0;
+    }
+
+    void g(T t) {
+//        t.t = false;
+        fie = true;
+    }
+    void h(T t) {
+        boolean t1 = t.t;
+        try {
+            t.t = false;
+            g(t);
+        }
+        finally {
+            t.t = t1;
+        }
+    }
+
+
+    private class T {
+        public boolean t = true;
+
+        public boolean isT() {
+            isT();
+            return t;
+        }
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/slice/backward/DuplicateLeaves.java b/java/java-tests/testData/codeInsight/slice/backward/DuplicateLeaves.java
new file mode 100644
index 0000000..18440ec
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/slice/backward/DuplicateLeaves.java
@@ -0,0 +1,23 @@
+public class X  {
+    String <caret>l;
+
+    public X() {
+        fs("oo", this);
+    }
+
+    void fs(String t, X x)
+    {
+        x.set(t);
+    }
+                //
+    void set(String d) {
+        l = d;
+    }
+}
+
+class XX extends X {
+    void fs(String t, X x) {
+        x.fs(t, x);
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/slice/backward/EnumConst.java b/java/java-tests/testData/codeInsight/slice/backward/EnumConst.java
new file mode 100644
index 0000000..deccd82
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/slice/backward/EnumConst.java
@@ -0,0 +1,6 @@
+    enum M {
+        X(<flown1>999);
+
+        M(int <caret>i) {
+        }
+    }
diff --git a/java/java-tests/testData/codeInsight/slice/backward/GenericBoxing.java b/java/java-tests/testData/codeInsight/slice/backward/GenericBoxing.java
new file mode 100644
index 0000000..a888944
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/slice/backward/GenericBoxing.java
@@ -0,0 +1,21 @@
+public class Boxi {
+    private interface Foo<T> {
+            T t();
+        }
+
+         {
+            Foo<String> a = new Foo<String>() {
+                public String t() {
+                    return "a";
+                }
+            };
+            Foo<Integer> b = new Foo<Integer>() {
+                public Integer t() {
+                    return <flown11>42;
+                }
+            };
+
+            int <caret>i = <flown1>b.t();
+        }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/slice/backward/GenericImplement.java b/java/java-tests/testData/codeInsight/slice/backward/GenericImplement.java
new file mode 100644
index 0000000..91d0ee5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/slice/backward/GenericImplement.java
@@ -0,0 +1,21 @@
+public class X {
+    {
+        Proc<String> procs = new Proc<String>() {
+            public void f(String <caret>s) {
+                //To change body of implemented methods use File | Settings | File Templates.
+            }
+        };
+        Proc<Integer> proci = new Proc<Integer>() {
+            public void f(Integer s) {
+                //To change body of implemented methods use File | Settings | File Templates.
+            }
+        };
+
+        procs.f(<flown1>"");
+        proci.f(0);
+    }
+}
+
+interface Proc<T> {
+      void f(T t);
+}
diff --git a/java/java-tests/testData/codeInsight/slice/backward/GenericImplement2.java b/java/java-tests/testData/codeInsight/slice/backward/GenericImplement2.java
new file mode 100644
index 0000000..6c3f5f1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/slice/backward/GenericImplement2.java
@@ -0,0 +1,21 @@
+public class X {
+    {
+        Proc<String> procs = new Proc<String>() {
+            public void f(String s) {
+                //To change body of implemented methods use File | Settings | File Templates.
+            }
+        };
+        Proc<Integer> proci = new Proc<Integer>() {
+            public void f(Integer <caret>s) {
+                //To change body of implemented methods use File | Settings | File Templates.
+            }
+        };
+
+        procs.f("");
+        proci.f(<flown1>0);
+    }
+}
+
+interface Proc<T> {
+      void f(T t);
+}
diff --git a/java/java-tests/testData/codeInsight/slice/backward/GenericsSubst.java b/java/java-tests/testData/codeInsight/slice/backward/GenericsSubst.java
new file mode 100644
index 0000000..c440149
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/slice/backward/GenericsSubst.java
@@ -0,0 +1,28 @@
+import java.util.Map;
+
+class M<X, Y> {
+    Map<X, Y> m;
+    Y y;
+
+    public M(Map<X, Y> m, Y y) {
+        this.m = m;
+        this.y = <flown11111>y;
+    }
+
+    public static <MX, MY> M<MX, MY> makeM(MY y) {
+        return new M<MX, MY>(null, <flown111111>y);
+    }
+
+    Y get(X x) {
+        Y res = <flown11121>m.get(x);
+        return <flown111>res == null ? <flown1111>y : <flown1112>res;
+    }
+
+    public static void g() {
+        String <caret>a = <flown1>f(M.<String, String>makeM(<flown1111111>"a"), "k");
+    }
+
+    public static <A> A f(M<A, A> a, A ka) {
+        return <flown11>a.get(ka);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/slice/backward/InterMethod.java b/java/java-tests/testData/codeInsight/slice/backward/InterMethod.java
new file mode 100644
index 0000000..dee13a5
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/slice/backward/InterMethod.java
@@ -0,0 +1,24 @@
+public class WW {
+    void f(String ddd) {
+        if (hashCode() == 0)
+            ddd = <flown1111>"dd";
+        foo(<flown111>ddd);
+    }
+
+    {
+        f(<flown1112>"xxx");
+    }
+
+    {
+        x(<flown1121>"zzz");
+    }
+
+    String x(String g) {
+        String d = <flown1>foo(<flown112>g);
+        return <caret>d;
+    }
+
+    private String foo(String i) {
+        return <flown11>i;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/slice/backward/LocalVar.java b/java/java-tests/testData/codeInsight/slice/backward/LocalVar.java
new file mode 100644
index 0000000..51747bc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/slice/backward/LocalVar.java
@@ -0,0 +1,6 @@
+class S {
+ String x(String g) {
+  String d = (String)(<flown1>g);
+  return <caret>d;
+ }
+}
diff --git a/java/java-tests/testData/codeInsight/slice/backward/MethodCall.java b/java/java-tests/testData/codeInsight/slice/backward/MethodCall.java
new file mode 100644
index 0000000..33d07d1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/slice/backward/MethodCall.java
@@ -0,0 +1,9 @@
+class T2 {
+    void f() {
+        int i = <caret>x();
+    }
+
+    private int x() {
+        return <flown1>0;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/slice/backward/MethodReturn.java b/java/java-tests/testData/codeInsight/slice/backward/MethodReturn.java
new file mode 100644
index 0000000..ec3afcb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/slice/backward/MethodReturn.java
@@ -0,0 +1,27 @@
+
+class s {
+    {
+      x(<flown1211>"xxx");
+    }
+    String x(String g) {
+        String d = <flown1>foo(<flown121>g);
+        return <caret>d;
+    }
+
+    private String foo(String i) {
+        if (i==null) {
+            new Callable<String>(){
+                public String call() throws Exception {
+                    return "xxxxxxxxx";
+                }
+            };
+            return <flown11>null;
+        } else {
+            return <flown12>i;
+        }
+    }
+}
+
+interface Callable<V> {
+    V call() throws Exception;
+}
diff --git a/java/java-tests/testData/codeInsight/slice/backward/Nulls.java b/java/java-tests/testData/codeInsight/slice/backward/Nulls.java
new file mode 100644
index 0000000..94738f2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/slice/backward/Nulls.java
@@ -0,0 +1,57 @@
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+public class X  {
+    private final static String CON = "";
+    String <caret>l;
+    private String d;
+
+    public X(String g) {
+        set("xxx");
+        set(g);
+        fs("oo", this);
+
+        String o = (String)((null));
+        set(o);
+
+        set(new String());
+        set(nn());
+        set(CON);
+        String nn = g == null ? CON : g;
+        set(nn);
+
+        String other = g == "" ? CON : g;
+        set(other);
+
+        g.hashCode(); // g derefernced before use, must be NN
+        set(g);
+
+        set(nu());
+        set(hz());
+    }
+
+    @NotNull
+    String nn() {
+        return "";
+    }
+    @Nullable
+    String nu() {
+        return "";
+    }
+    String hz() {
+        return d;
+    }
+    void fs(@Nullable String t, X x)
+    {
+        x.set(t);
+
+        x.set(t == null ? "null" : t);
+    }
+
+    void set(String d) {
+        l = d;
+    }
+    void setFromNN(@NotNull String d) {
+        l = d;
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/slice/backward/OverloadConstructor.java b/java/java-tests/testData/codeInsight/slice/backward/OverloadConstructor.java
new file mode 100644
index 0000000..1e0e90a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/slice/backward/OverloadConstructor.java
@@ -0,0 +1,17 @@
+import java.util.*;
+
+public class  Auto {
+    public Auto(ArrayList w, Runnable <caret>i) {
+        this(w, null,null);
+    }
+    public Auto(ArrayList w, Runnable  i,Runnable o) {
+        o.hashCode();
+    }
+
+    {
+
+        new Auto(null,null,null);
+        new Auto(null,<flown1>null);
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/slice/backward/Overrides.java b/java/java-tests/testData/codeInsight/slice/backward/Overrides.java
new file mode 100644
index 0000000..3d75eec
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/slice/backward/Overrides.java
@@ -0,0 +1,22 @@
+public class OverrideSlice {
+    interface I {
+        int f(int i);
+    }
+    class O implements I {
+        public int f(int i) {
+            return <flown11>i;
+        }
+    }
+    class O0 implements I {
+        public int f(int i) {
+            return <flown12>0;
+        }
+    }
+
+    {
+        f(<flown1111>1, new O());
+    }
+    void f(int c, I i) {
+        int <caret>x = <flown1>i.f(<flown111>c);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/slice/backward/Postfix.java b/java/java-tests/testData/codeInsight/slice/backward/Postfix.java
new file mode 100644
index 0000000..3f5ff87
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/slice/backward/Postfix.java
@@ -0,0 +1,10 @@
+class IncrDecrIgnore {
+	int <caret>i = <flown1>0;
+
+	int incr() {
+		return <flown2>i++;
+	}
+	int decr() {
+		return <flown3>--i;
+	}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/slice/backward/Simple.java b/java/java-tests/testData/codeInsight/slice/backward/Simple.java
new file mode 100644
index 0000000..21ea701f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/slice/backward/Simple.java
@@ -0,0 +1,10 @@
+class WW {
+{ String ddd;
+  ddd = foo(<flown1>1);
+}                 
+
+private String foo(int i) {
+  return <caret>i+"";
+}
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/slice/backward/Tuple.java b/java/java-tests/testData/codeInsight/slice/backward/Tuple.java
new file mode 100644
index 0000000..989135b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/slice/backward/Tuple.java
@@ -0,0 +1,14 @@
+class Tuple<X,Y> {
+    public final X x;
+    public final Y y;
+    public Tuple(X x,Y y) {this.x=x; this.y=y;}
+
+    public X getX() {
+        return <caret>x;
+    }
+
+    private static <X,Y> Tuple<X,Y> copy(Tuple<X,Y> t) {
+        return new Tuple<X,Y>(t.x, t.y);
+    }
+
+}
diff --git a/java/java-tests/testData/codeInsight/slice/backward/TypeAware.java b/java/java-tests/testData/codeInsight/slice/backward/TypeAware.java
new file mode 100644
index 0000000..6d857af
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/slice/backward/TypeAware.java
@@ -0,0 +1,17 @@
+class A {
+    private static class Tuple<X,Y> {
+        public final X x;
+        public final Y y;
+        public Tuple(X x,Y y) {this.x=<flown11>x; this.y=y;}
+    }
+
+    private static class Foo {
+        void f() {
+            Tuple<Integer,Integer> t1 = new Tuple<Integer,Integer>(1,2);
+            Tuple<String,String> t2 = new Tuple<String,String>(<flown111>"a","b");
+            Tuple<Foo,Foo> t2w = new Tuple<Foo,Foo>(null,null);
+            
+            String <caret>x = t2.<flown1>x;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/slice/backward/TypeAware2.java b/java/java-tests/testData/codeInsight/slice/backward/TypeAware2.java
new file mode 100644
index 0000000..5fb4f8b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/slice/backward/TypeAware2.java
@@ -0,0 +1,15 @@
+class A {
+    private static class Tuple<X,Y> {
+        public final X <caret>x;
+        public final Y y;
+        public Tuple(X x,Y y) {this.x=<flown1>x; this.y=y;}
+    }
+
+    private static class Foo {
+        void f() {
+            Tuple<Integer,Integer> t1 = new Tuple<Integer,Integer>(<flown11>1,2);
+            Tuple<String,String> t2 = new Tuple<String,String>(<flown12>"a","b");
+            String x = t2.x;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/slice/backward/TypeErased.java b/java/java-tests/testData/codeInsight/slice/backward/TypeErased.java
new file mode 100644
index 0000000..21d4bc3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/slice/backward/TypeErased.java
@@ -0,0 +1,14 @@
+class A {
+    private static class Tuple<X,Y> {
+        public final X x;
+        public final Y y;
+        public Tuple(X x,Y y) {this.x=<flown11>x; this.y=y;}
+    }
+
+    private static class Foo {
+        void f2(Tuple<String, String> t2w) {
+            Tuple t2 = new Tuple(1,2);
+            String <caret>x = t2w.<flown1>x;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/slice/backward/VarUse.java b/java/java-tests/testData/codeInsight/slice/backward/VarUse.java
new file mode 100644
index 0000000..5bad198
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/slice/backward/VarUse.java
@@ -0,0 +1,16 @@
+class S {
+    private String foo = <flown11>"xxx";
+
+    {
+        String bar = <flown1>foo;
+        if (bar.equals("a")) {
+        } else if (bar.equals("b")) {
+        }
+
+        if (bar.equals("c")) {
+            bar = <flown2>"";
+        }
+
+        System.out.println("bar: " + <caret>bar);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/slice/backward/ViaParameterizedMethods.java b/java/java-tests/testData/codeInsight/slice/backward/ViaParameterizedMethods.java
new file mode 100644
index 0000000..7c20d3e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/slice/backward/ViaParameterizedMethods.java
@@ -0,0 +1,19 @@
+class A {
+    private static class Tuple<X,Y> {
+        public final X x;
+        public final Y y;
+        public Tuple(X x,Y y) {this.x=<flown11>x; this.y=y;}
+        public static <X1,Y1> Tuple<X1,Y1> create(X1 x, Y1 y) {
+            return new Tuple<X1,Y1>(<flown111>x, y);
+        }
+    }
+
+    private static class Foo {
+        void f() {
+            Tuple<String,String> t = Tuple.create(<flown1111>"","");
+            Tuple<Object,Object> t2 = Tuple.create((Object) "",(Object) "");
+
+            String <caret>x = t.<flown1>x;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/slice/backward/WeirdCaretPosition.java b/java/java-tests/testData/codeInsight/slice/backward/WeirdCaretPosition.java
new file mode 100644
index 0000000..ce21ca4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/slice/backward/WeirdCaretPosition.java
@@ -0,0 +1,29 @@
+class Foo {
+    private static MyEnum staticMyEnum = MyEnum.<flown11>BAR;
+
+    public static void main(String[] args) {
+        produce();
+    }
+
+    static void produce() {
+        produce(<flown1>staticMyEnum);
+    }
+
+    static void produce(MyEnum myEnum) {
+        System.out.println("myEnum: " + myEnum<caret>);
+    }
+
+    static void f() {
+        staticMyEnum = MyEnum.<flown12>BAZ;
+    }
+
+    static void g() {
+        staticMyEnum = MyEnum.<flown13>FOO;
+    }
+
+    enum MyEnum {
+        FOO,
+        BAR,
+        BAZ
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/slice/forward/InterMethod.java b/java/java-tests/testData/codeInsight/slice/forward/InterMethod.java
new file mode 100644
index 0000000..4d723bc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/slice/forward/InterMethod.java
@@ -0,0 +1,28 @@
+public class T2 {
+    int <caret>fff;
+
+    public T2(int i) {
+        fff = i;
+    }
+
+    public int <flown11>getFff() {
+        return <flown1>fff;
+    }
+
+    void f(int i2) {
+//        fff=i2;
+        p(<flown111>getFff());
+    }
+
+    public void p(int <flown1111>i) {
+        new F(<flown11111>i);
+    }
+
+    private class F {
+        private int <flown11111111>xss;
+
+        public F(int <flown111111>i) {
+            xss = <flown1111111>i;
+        }
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/slice/forward/Parameters.java b/java/java-tests/testData/codeInsight/slice/forward/Parameters.java
new file mode 100644
index 0000000..17b9b5c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/slice/forward/Parameters.java
@@ -0,0 +1,66 @@
+import java.util.*;
+
+class X {
+class MyMap implements Map {
+    public int size() {
+        return 0;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public boolean isEmpty() {
+        return false;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public boolean containsKey(Object key) {
+        return false;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public boolean containsValue(Object value) {
+        return false;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public Object get(Object <flown1111>key) {
+        return key.<flown11111>getClass();
+    }
+
+    public Object put(Object key, Object value) {
+        return null;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public Object remove(Object key) {
+        return null;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public void putAll(Map m) {
+        //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public void clear() {
+        //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public Set keySet() {
+        return null;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public Collection values() {
+        return null;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public Set entrySet() {
+        return null;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+}
+
+public String getEncoding( int <caret>virtualFile, boolean useParentDefaults) {
+    Map<Integer,String> myMapping = null;
+  int <flown11>parent = <flown1>virtualFile;
+  while (true) {
+    String charset = myMapping.get(<flown111>parent);
+    if (charset != null || !useParentDefaults) return charset;
+    if (parent == 0) break;
+    parent = parent-1;
+  }
+  return null;
+}
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/slice/forward/Simple.java b/java/java-tests/testData/codeInsight/slice/forward/Simple.java
new file mode 100644
index 0000000..1049bec
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/slice/forward/Simple.java
@@ -0,0 +1,30 @@
+ public class T2 {
+     int <flown111111>fff;
+
+     {
+ //        f(fff);
+     }
+
+ void f(int <caret>i2) {
+     int i = -1;
+     i = 0;
+     try {           //
+         i = 1;
+         if (i2 == 0) {
+             p(<flown1>i2);//
+         }
+     }
+     catch (Exception e) {
+
+     }
+     finally {
+         i = 9;
+     }
+ }
+
+     public void p(int <flown11>i) {//
+ //        fff = i;
+         int <flown1111>ddd = <flown111>i;
+         fff =<flown11111>ddd;
+     }
+ }
diff --git a/java/java-tests/testData/codeInsight/splitIfAction/after1.java b/java/java-tests/testData/codeInsight/splitIfAction/after1.java
new file mode 100644
index 0000000..9a0a347
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/splitIfAction/after1.java
@@ -0,0 +1,15 @@
+class C {
+    void foo() {
+        if (<caret>a) {
+            if (b) {
+                call();
+            }
+            else {
+                dontCall();
+            }
+        }
+        else {
+            dontCall();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/splitIfAction/after2.java b/java/java-tests/testData/codeInsight/splitIfAction/after2.java
new file mode 100644
index 0000000..6680823
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/splitIfAction/after2.java
@@ -0,0 +1,9 @@
+class C {
+    void foo() {
+        if (<caret>a) {
+            if (b) {
+                call();
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/splitIfAction/after3.java b/java/java-tests/testData/codeInsight/splitIfAction/after3.java
new file mode 100644
index 0000000..8cce107
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/splitIfAction/after3.java
@@ -0,0 +1,9 @@
+class C {
+    void foo() {
+        if (<caret>a) {
+            call();
+        } else if (b) {
+            call();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/splitIfAction/after4.java b/java/java-tests/testData/codeInsight/splitIfAction/after4.java
new file mode 100644
index 0000000..8797e7e
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/splitIfAction/after4.java
@@ -0,0 +1,11 @@
+class C {
+    void foo() {
+        if (<caret>a) {
+            call();
+        } else if (b) {
+            call();
+        } else {
+            dontCall();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/splitIfAction/after5.java b/java/java-tests/testData/codeInsight/splitIfAction/after5.java
new file mode 100644
index 0000000..ae28ee0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/splitIfAction/after5.java
@@ -0,0 +1,9 @@
+class C {
+    void foo() {
+        if (<caret>a && b) {
+            if (c && d && e) {
+                call();
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/splitIfAction/afterComment.java b/java/java-tests/testData/codeInsight/splitIfAction/afterComment.java
new file mode 100644
index 0000000..1291583
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/splitIfAction/afterComment.java
@@ -0,0 +1,9 @@
+class C {
+    void foo() {
+        if (a) {
+            call();
+        } else if (b) {
+            call();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/splitIfAction/afterOrParenthesis.java b/java/java-tests/testData/codeInsight/splitIfAction/afterOrParenthesis.java
new file mode 100644
index 0000000..1291583
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/splitIfAction/afterOrParenthesis.java
@@ -0,0 +1,9 @@
+class C {
+    void foo() {
+        if (a) {
+            call();
+        } else if (b) {
+            call();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/splitIfAction/afterParenthesis.java b/java/java-tests/testData/codeInsight/splitIfAction/afterParenthesis.java
new file mode 100644
index 0000000..19020cd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/splitIfAction/afterParenthesis.java
@@ -0,0 +1,9 @@
+class C {
+    void foo() {
+        if (a) {
+            if (b) {
+                call();
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/splitIfAction/before1.java b/java/java-tests/testData/codeInsight/splitIfAction/before1.java
new file mode 100644
index 0000000..81984e9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/splitIfAction/before1.java
@@ -0,0 +1,10 @@
+class C {
+    void foo() {
+        if (a &<caret>& b) {
+            call();
+        }
+        else {
+            dontCall();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/splitIfAction/before2.java b/java/java-tests/testData/codeInsight/splitIfAction/before2.java
new file mode 100644
index 0000000..dde5b68
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/splitIfAction/before2.java
@@ -0,0 +1,7 @@
+class C {
+    void foo() {
+        if (a &<caret>& b) {
+            call();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/splitIfAction/before3.java b/java/java-tests/testData/codeInsight/splitIfAction/before3.java
new file mode 100644
index 0000000..1591d61
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/splitIfAction/before3.java
@@ -0,0 +1,7 @@
+class C {
+    void foo() {
+        if (a |<caret>| b) {
+            call();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/splitIfAction/before4.java b/java/java-tests/testData/codeInsight/splitIfAction/before4.java
new file mode 100644
index 0000000..c8d0baa
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/splitIfAction/before4.java
@@ -0,0 +1,9 @@
+class C {
+    void foo() {
+        if (a |<caret>| b) {
+            call();
+        } else {
+            dontCall();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/splitIfAction/before5.java b/java/java-tests/testData/codeInsight/splitIfAction/before5.java
new file mode 100644
index 0000000..d0e50fc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/splitIfAction/before5.java
@@ -0,0 +1,7 @@
+class C {
+    void foo() {
+        if (a && b &<caret>& c && d && e) {
+            call();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/splitIfAction/beforeComment.java b/java/java-tests/testData/codeInsight/splitIfAction/beforeComment.java
new file mode 100644
index 0000000..3a7324f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/splitIfAction/beforeComment.java
@@ -0,0 +1,8 @@
+class C {
+    void foo() {
+        if (a |<caret>| //comment 
+            b) {
+            call();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/splitIfAction/beforeOrAndMixed.java b/java/java-tests/testData/codeInsight/splitIfAction/beforeOrAndMixed.java
new file mode 100644
index 0000000..c8a7d08
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/splitIfAction/beforeOrAndMixed.java
@@ -0,0 +1,7 @@
+class C {
+    void foo() {
+        if (a || b &<caret>& c) {
+            call();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/splitIfAction/beforeOrParenthesis.java b/java/java-tests/testData/codeInsight/splitIfAction/beforeOrParenthesis.java
new file mode 100644
index 0000000..32c9a7b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/splitIfAction/beforeOrParenthesis.java
@@ -0,0 +1,7 @@
+class C {
+    void foo() {
+        if ((a) |<caret>| (b)) {
+            call();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/splitIfAction/beforeParenthesis.java b/java/java-tests/testData/codeInsight/splitIfAction/beforeParenthesis.java
new file mode 100644
index 0000000..4fb622a9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/splitIfAction/beforeParenthesis.java
@@ -0,0 +1,7 @@
+class C {
+    void foo() {
+        if ((a) &<caret>& (b)) {
+            call();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/surroundAutoCloseable/MixedUsages.java b/java/java-tests/testData/codeInsight/surroundAutoCloseable/MixedUsages.java
new file mode 100644
index 0000000..ac9838a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/surroundAutoCloseable/MixedUsages.java
@@ -0,0 +1,22 @@
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.Arrays;
+
+class C {
+    void m(File file) throws IOException {
+        <caret>FileInputStream fileInputStream = new FileInputStream(file);
+        int read, len = -1;
+        boolean empty = true;
+        do {
+            read = fileInputStream.read();
+            char[] chars = Character.toChars(read);
+            System.out.println(read + " = " + Arrays.toString(chars));
+            ++len;
+            empty = false;
+        }
+        while (read != -1);
+        System.out.println(len);
+        System.out.println(empty);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/surroundAutoCloseable/MixedUsages_after.java b/java/java-tests/testData/codeInsight/surroundAutoCloseable/MixedUsages_after.java
new file mode 100644
index 0000000..fa191415
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/surroundAutoCloseable/MixedUsages_after.java
@@ -0,0 +1,26 @@
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.Arrays;
+
+class C {
+    void m(File file) throws IOException {
+        int len;
+        boolean empty;
+        try (FileInputStream fileInputStream = new FileInputStream(file)) {
+            int read;
+            len = -1;
+            empty = true;
+            do {
+                read = fileInputStream.read();
+                char[] chars = Character.toChars(read);
+                System.out.println(read + " = " + Arrays.toString(chars));
+                ++len;
+                empty = false;
+            }
+            while (read != -1);
+        }
+        System.out.println(len);
+        System.out.println(empty);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/surroundAutoCloseable/Simple.java b/java/java-tests/testData/codeInsight/surroundAutoCloseable/Simple.java
new file mode 100644
index 0000000..3307509
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/surroundAutoCloseable/Simple.java
@@ -0,0 +1,24 @@
+/*
+ * 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.
+ */
+
+import java.io.*;
+import java.net.*;
+
+class C {
+    public void read(URLConnection connection) {
+        <caret>InputStream stream = connection.getInputStream();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/surroundAutoCloseable/Simple_after.java b/java/java-tests/testData/codeInsight/surroundAutoCloseable/Simple_after.java
new file mode 100644
index 0000000..4dcdcfb
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/surroundAutoCloseable/Simple_after.java
@@ -0,0 +1,25 @@
+/*
+ * 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.
+ */
+
+import java.io.*;
+import java.net.*;
+
+class C {
+    public void read(URLConnection connection) {
+        try (InputStream stream = connection.getInputStream()) {<caret>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/surroundAutoCloseable/Usage.java b/java/java-tests/testData/codeInsight/surroundAutoCloseable/Usage.java
new file mode 100644
index 0000000..b34beda
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/surroundAutoCloseable/Usage.java
@@ -0,0 +1,15 @@
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+
+class C {
+    void m(File file) throws IOException {
+        <caret>FileInputStream fileInputStream = new FileInputStream(file);
+        int read;
+        do {
+            read = fileInputStream.read();
+            System.out.println(read);
+        }
+        while (read != -1);
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/surroundAutoCloseable/Usage_after.java b/java/java-tests/testData/codeInsight/surroundAutoCloseable/Usage_after.java
new file mode 100644
index 0000000..458e331
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/surroundAutoCloseable/Usage_after.java
@@ -0,0 +1,16 @@
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+
+class C {
+    void m(File file) throws IOException {
+        try (FileInputStream fileInputStream = new FileInputStream(file)) {
+            int read;
+            do {
+                read = fileInputStream.read();
+                System.out.println(read);
+            }
+            while (read != -1);
+        }
+    }
+}
diff --git a/java/java-tests/testData/codeInsight/template/AllowTypingRandomExpressionsWithLookupOpen-out.java b/java/java-tests/testData/codeInsight/template/AllowTypingRandomExpressionsWithLookupOpen-out.java
new file mode 100644
index 0000000..a760125
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/template/AllowTypingRandomExpressionsWithLookupOpen-out.java
@@ -0,0 +1,11 @@
+import java.io.File;
+import java.lang.Object;
+import java.util.Map;
+
+class Foo {
+    void foo(Map<File, Object> files, File file, Object filx) {
+        for (File file1 : file.<caret>) {
+            
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/template/AllowTypingRandomExpressionsWithLookupOpen.java b/java/java-tests/testData/codeInsight/template/AllowTypingRandomExpressionsWithLookupOpen.java
new file mode 100644
index 0000000..2593831
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/template/AllowTypingRandomExpressionsWithLookupOpen.java
@@ -0,0 +1,9 @@
+import java.io.File;
+import java.lang.Object;
+import java.util.Map;
+
+class Foo {
+    void foo(Map<File, Object> files, File file, Object filx) {
+      <caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/template/AsListToar-out.java b/java/java-tests/testData/codeInsight/template/AsListToar-out.java
new file mode 100644
index 0000000..7969523
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/template/AsListToar-out.java
@@ -0,0 +1,9 @@
+import java.util.Arrays;
+import java.util.List;
+
+class Foo {
+
+  static void foo(List<String> ls) {
+    List<String> ls2 = Arrays.asList(ls.toArray(new String[ls.size()])<caret>);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/template/AsListToar.java b/java/java-tests/testData/codeInsight/template/AsListToar.java
new file mode 100644
index 0000000..befb6ce
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/template/AsListToar.java
@@ -0,0 +1,9 @@
+import java.util.Arrays;
+import java.util.List;
+
+class Foo {
+
+  static void foo(List<String> ls) {
+    List<String> ls2 = Arrays.asList(<caret>);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/template/ClassNameDotInTemplate-out.java b/java/java-tests/testData/codeInsight/template/ClassNameDotInTemplate-out.java
new file mode 100644
index 0000000..504e438
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/template/ClassNameDotInTemplate-out.java
@@ -0,0 +1,8 @@
+import java.io.File;
+
+class Foo {
+    {
+      File file = new File("some.txt");
+        System.out.println("file = " + File.<caret>);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/template/ClassNameDotInTemplate.java b/java/java-tests/testData/codeInsight/template/ClassNameDotInTemplate.java
new file mode 100644
index 0000000..b0d2afc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/template/ClassNameDotInTemplate.java
@@ -0,0 +1,8 @@
+import java.io.File;
+
+class Foo {
+    {
+      File file = new File("some.txt");
+      <caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/template/EndInTheMiddle-out.java b/java/java-tests/testData/codeInsight/template/EndInTheMiddle-out.java
new file mode 100644
index 0000000..e61ee13
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/template/EndInTheMiddle-out.java
@@ -0,0 +1,9 @@
+public class EndInTheMiddle {
+    public static void main(String[] args) {
+        javax.swing.JFrame frame = new javax.swing.JFrame();
+        <caret>
+        frame.setVisible(true);
+        frame.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
+        frame.pack();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/template/EndInTheMiddle.java b/java/java-tests/testData/codeInsight/template/EndInTheMiddle.java
new file mode 100644
index 0000000..9e81d21
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/template/EndInTheMiddle.java
@@ -0,0 +1,5 @@
+public class EndInTheMiddle {
+    public static void main(String[] args) {
+        <caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/template/Iter-out.java b/java/java-tests/testData/codeInsight/template/Iter-out.java
new file mode 100644
index 0000000..18b7646
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/template/Iter-out.java
@@ -0,0 +1,12 @@
+import java.util.*;
+
+class BarGoo {}
+
+class Foo {
+    {
+        List<BarGoo> goos;
+        for (BarGoo goo : goos) {
+            <caret>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/template/Iter.java b/java/java-tests/testData/codeInsight/template/Iter.java
new file mode 100644
index 0000000..40d057d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/template/Iter.java
@@ -0,0 +1,10 @@
+import java.util.*;
+
+class BarGoo {}
+
+class Foo {
+    {
+        List<BarGoo> goos;
+        <caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/template/Iter1-out.java b/java/java-tests/testData/codeInsight/template/Iter1-out.java
new file mode 100644
index 0000000..66a5f28
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/template/Iter1-out.java
@@ -0,0 +1,14 @@
+import java.util.*;
+
+public class C {
+  Object o = new Object() {
+    class Inner {
+    }
+
+    void foo(List<Inner> inners) {
+        for (Inner <selection>inner<caret></selection> : inners) {
+            
+        }
+    }
+  };
+}
diff --git a/java/java-tests/testData/codeInsight/template/Iter1.java b/java/java-tests/testData/codeInsight/template/Iter1.java
new file mode 100644
index 0000000..c955fae
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/template/Iter1.java
@@ -0,0 +1,12 @@
+import java.util.*;
+
+public class C {
+  Object o = new Object() {
+    class Inner {
+    }
+
+    void foo(List<Inner> inners) {
+      <caret>
+    }
+  };
+}
diff --git a/java/java-tests/testData/codeInsight/template/IterForceBraces-out.java b/java/java-tests/testData/codeInsight/template/IterForceBraces-out.java
new file mode 100644
index 0000000..e0e2a00
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/template/IterForceBraces-out.java
@@ -0,0 +1,14 @@
+import java.util.*;
+
+class BarGoo {}
+
+class Foo {
+    {
+        List<BarGoo> goos;
+        if (true) {
+            for (BarGoo goo : <selection>goos</selection><caret>) {
+
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/template/IterForceBraces.java b/java/java-tests/testData/codeInsight/template/IterForceBraces.java
new file mode 100644
index 0000000..589c0f9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/template/IterForceBraces.java
@@ -0,0 +1,10 @@
+import java.util.*;
+
+class BarGoo {}
+
+class Foo {
+    {
+        List<BarGoo> goos;
+        if (true) <caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/template/IterParameterizedInner-out.java b/java/java-tests/testData/codeInsight/template/IterParameterizedInner-out.java
new file mode 100644
index 0000000..04e64c9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/template/IterParameterizedInner-out.java
@@ -0,0 +1,15 @@
+import java.util.List;
+
+public class LiveTemplateTest {
+
+    void one() {
+        List<A.B<String>> list;
+        for (A.B<String> stringB : <selection>list</selection><caret>) {
+
+        }
+    }
+}
+
+class A {
+    static interface B<T> {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/template/IterParameterizedInner.java b/java/java-tests/testData/codeInsight/template/IterParameterizedInner.java
new file mode 100644
index 0000000..34246a7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/template/IterParameterizedInner.java
@@ -0,0 +1,13 @@
+import java.util.List;
+
+public class LiveTemplateTest {
+
+    void one() {
+        List<A.B<String>> list;
+        <caret>
+    }
+}
+
+class A {
+    static interface B<T> {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/template/NavigationActionsDontTerminateTemplate-out.txt b/java/java-tests/testData/codeInsight/template/NavigationActionsDontTerminateTemplate-out.txt
new file mode 100644
index 0000000..3a858a2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/template/NavigationActionsDontTerminateTemplate-out.txt
@@ -0,0 +1,3 @@
+Hello H World H
+Hello H World H
+Hello H World H<caret>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/template/PreferStartMatchesInLookups.java b/java/java-tests/testData/codeInsight/template/PreferStartMatchesInLookups.java
new file mode 100644
index 0000000..d1b4479
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/template/PreferStartMatchesInLookups.java
@@ -0,0 +1,11 @@
+import java.util.*;
+
+class BarGoo {}
+
+class Foo {
+    {
+        Map<BarGoo, StringBuilder> goos;
+
+        <caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/template/Soutp-out.java b/java/java-tests/testData/codeInsight/template/Soutp-out.java
new file mode 100644
index 0000000..db62e66
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/template/Soutp-out.java
@@ -0,0 +1,10 @@
+import java.lang.String;
+import java.util.List;
+
+public class LiveTemplateTest {
+
+  void usage(int num, boolean someBoolean, List<String> args){
+      System.out.println("num = [" + num + "], someBoolean = [" + someBoolean + "], args = [" + args + "]");<caret>
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/template/Soutp.java b/java/java-tests/testData/codeInsight/template/Soutp.java
new file mode 100644
index 0000000..01d5ec3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/template/Soutp.java
@@ -0,0 +1,10 @@
+import java.lang.String;
+import java.util.List;
+
+public class LiveTemplateTest {
+
+  void usage(int num, boolean someBoolean, List<String> args){
+    <caret>
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/template/Toar-out.java b/java/java-tests/testData/codeInsight/template/Toar-out.java
new file mode 100644
index 0000000..4f684aa
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/template/Toar-out.java
@@ -0,0 +1,8 @@
+import java.util.*;
+
+class Foo {
+  {
+    List<String> l;
+    String[] s = l.toArray(new String[l.size()])<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/template/Toar.java b/java/java-tests/testData/codeInsight/template/Toar.java
new file mode 100644
index 0000000..0b843ee
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/template/Toar.java
@@ -0,0 +1,8 @@
+import java.util.*;
+
+class Foo {
+  {
+    List<String> l;
+    String[] s = <caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/template/VarargToar-out.java b/java/java-tests/testData/codeInsight/template/VarargToar-out.java
new file mode 100644
index 0000000..cd35fb2
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/template/VarargToar-out.java
@@ -0,0 +1,11 @@
+import java.util.List;
+
+public class LiveTemplateTest {
+
+  void foo(String... messages){}
+  void usage(){
+    List<String> messages = new ArrayList<String>();
+    foo(messages.toArray(new <selection>String<caret></selection>[messages.size()]));
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/template/VarargToar.java b/java/java-tests/testData/codeInsight/template/VarargToar.java
new file mode 100644
index 0000000..126b91d
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/template/VarargToar.java
@@ -0,0 +1,11 @@
+import java.util.List;
+
+public class LiveTemplateTest {
+
+  void foo(String... messages){}
+  void usage(){
+    List<String> messages = new ArrayList<String>();
+    foo(<caret>);
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/underscoresInLiterals/WithUnderscores.java b/java/java-tests/testData/codeInsight/underscoresInLiterals/WithUnderscores.java
new file mode 100644
index 0000000..1a51452
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/underscoresInLiterals/WithUnderscores.java
@@ -0,0 +1,3 @@
+class C {
+  int i = <caret>123_456_789;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/underscoresInLiterals/WithoutUnderscores.java b/java/java-tests/testData/codeInsight/underscoresInLiterals/WithoutUnderscores.java
new file mode 100644
index 0000000..9ea0dac
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/underscoresInLiterals/WithoutUnderscores.java
@@ -0,0 +1,3 @@
+class C {
+  int i = <caret>123456789;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTarget.log b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTarget.log
new file mode 100644
index 0000000..1ed3ead
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTarget.log
@@ -0,0 +1,6 @@
+Cleaning output files:
+out/production/AddAnnotationTarget/A.class
+End of files
+Compiling files:
+src/A.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTarget/A.java.new b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTarget/A.java.new
new file mode 100644
index 0000000..d3e9dae
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTarget/A.java.new
@@ -0,0 +1,7 @@
+import java.lang.annotation.*;
+import static java.lang.annotation.ElementType.*;
+
+@Target({TYPE, FIELD, METHOD})
+public @interface A {
+  int value();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTarget/src/A.java b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTarget/src/A.java
new file mode 100644
index 0000000..8d10b7e
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTarget/src/A.java
@@ -0,0 +1,7 @@
+import java.lang.annotation.*;
+import static java.lang.annotation.ElementType.*;
+
+@Target({TYPE, FIELD, METHOD})
+public @interface A {
+  int value() default 3;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTarget/src/C.java b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTarget/src/C.java
new file mode 100644
index 0000000..b962aef
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTarget/src/C.java
@@ -0,0 +1,3 @@
+@A(10) 
+public class C {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTarget/src/C2.java b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTarget/src/C2.java
new file mode 100644
index 0000000..e776156b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTarget/src/C2.java
@@ -0,0 +1,5 @@
+public class C2 {
+
+  @A(30) 
+  int field;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithDefaultValue.log b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithDefaultValue.log
new file mode 100644
index 0000000..603d837
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithDefaultValue.log
@@ -0,0 +1,6 @@
+Cleaning output files:
+out/production/AddAnnotationTypeMemberWithDefaultValue/A.class
+End of files
+Compiling files:
+src/A.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithDefaultValue/A.java.new b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithDefaultValue/A.java.new
new file mode 100644
index 0000000..0c892fa
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithDefaultValue/A.java.new
@@ -0,0 +1,4 @@
+public @interface A {
+  int value();
+  int value1() default 7;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithDefaultValue/src/A.java b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithDefaultValue/src/A.java
new file mode 100644
index 0000000..87f1b64
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithDefaultValue/src/A.java
@@ -0,0 +1,3 @@
+public @interface A {
+  int value();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithDefaultValue/src/C.java b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithDefaultValue/src/C.java
new file mode 100644
index 0000000..b962aef
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithDefaultValue/src/C.java
@@ -0,0 +1,3 @@
+@A(10) 
+public class C {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithDefaultValue/src/C1.java b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithDefaultValue/src/C1.java
new file mode 100644
index 0000000..0342905
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithDefaultValue/src/C1.java
@@ -0,0 +1,6 @@
+public class C1 {
+
+  @A(20)
+  void foo() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithDefaultValue/src/C2.java b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithDefaultValue/src/C2.java
new file mode 100644
index 0000000..e776156b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithDefaultValue/src/C2.java
@@ -0,0 +1,5 @@
+public class C2 {
+
+  @A(30) 
+  int field;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithDefaultValue2.log b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithDefaultValue2.log
new file mode 100644
index 0000000..49cb601
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithDefaultValue2.log
@@ -0,0 +1,6 @@
+Cleaning output files:
+out/production/AddAnnotationTypeMemberWithDefaultValue2/A.class
+End of files
+Compiling files:
+src/A.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithDefaultValue2/A.java.new b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithDefaultValue2/A.java.new
new file mode 100644
index 0000000..1e2cf13
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithDefaultValue2/A.java.new
@@ -0,0 +1,4 @@
+public @interface A {
+  Class value();
+  Class value1() default byte.class;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithDefaultValue2/src/A.java b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithDefaultValue2/src/A.java
new file mode 100644
index 0000000..a2124fe
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithDefaultValue2/src/A.java
@@ -0,0 +1,3 @@
+public @interface A {
+  Class value();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithDefaultValue2/src/C.java b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithDefaultValue2/src/C.java
new file mode 100644
index 0000000..96e62d0
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithDefaultValue2/src/C.java
@@ -0,0 +1,3 @@
+@A(int.class) 
+public class C {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithDefaultValue2/src/C1.java b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithDefaultValue2/src/C1.java
new file mode 100644
index 0000000..d98b9d7
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithDefaultValue2/src/C1.java
@@ -0,0 +1,6 @@
+public class C1 {
+
+  @A(boolean.class)
+  void foo() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithDefaultValue2/src/C2.java b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithDefaultValue2/src/C2.java
new file mode 100644
index 0000000..bf74f45
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithDefaultValue2/src/C2.java
@@ -0,0 +1,5 @@
+public class C2 {
+
+  @A(double.class) 
+  int field;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithoutDefaultValue.log b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithoutDefaultValue.log
new file mode 100644
index 0000000..ae1ba82
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithoutDefaultValue.log
@@ -0,0 +1,16 @@
+Cleaning output files:
+out/production/AddAnnotationTypeMemberWithoutDefaultValue/A.class
+End of files
+Compiling files:
+src/A.java
+End of files
+Cleaning output files:
+out/production/AddAnnotationTypeMemberWithoutDefaultValue/C.class
+out/production/AddAnnotationTypeMemberWithoutDefaultValue/C1.class
+out/production/AddAnnotationTypeMemberWithoutDefaultValue/C2.class
+End of files
+Compiling files:
+src/C.java
+src/C1.java
+src/C2.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithoutDefaultValue/A.java.new b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithoutDefaultValue/A.java.new
new file mode 100644
index 0000000..5386999
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithoutDefaultValue/A.java.new
@@ -0,0 +1,4 @@
+public @interface A {
+  int value();
+  int value1();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithoutDefaultValue/src/A.java b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithoutDefaultValue/src/A.java
new file mode 100644
index 0000000..87f1b64
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithoutDefaultValue/src/A.java
@@ -0,0 +1,3 @@
+public @interface A {
+  int value();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithoutDefaultValue/src/C.java b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithoutDefaultValue/src/C.java
new file mode 100644
index 0000000..b962aef
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithoutDefaultValue/src/C.java
@@ -0,0 +1,3 @@
+@A(10) 
+public class C {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithoutDefaultValue/src/C1.java b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithoutDefaultValue/src/C1.java
new file mode 100644
index 0000000..0342905
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithoutDefaultValue/src/C1.java
@@ -0,0 +1,6 @@
+public class C1 {
+
+  @A(20)
+  void foo() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithoutDefaultValue/src/C2.java b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithoutDefaultValue/src/C2.java
new file mode 100644
index 0000000..e776156b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/addAnnotationTypeMemberWithoutDefaultValue/src/C2.java
@@ -0,0 +1,5 @@
+public class C2 {
+
+  @A(30) 
+  int field;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/addDefaultToAnnotationMember.log b/java/java-tests/testData/compileServer/incremental/annotations/addDefaultToAnnotationMember.log
new file mode 100644
index 0000000..23ce9c87
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/addDefaultToAnnotationMember.log
@@ -0,0 +1,6 @@
+Cleaning output files:
+out/production/AddDefaultToAnnotationMember/A.class
+End of files
+Compiling files:
+src/A.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/addDefaultToAnnotationMember/A.java.new b/java/java-tests/testData/compileServer/incremental/annotations/addDefaultToAnnotationMember/A.java.new
new file mode 100644
index 0000000..ecaa314
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/addDefaultToAnnotationMember/A.java.new
@@ -0,0 +1,3 @@
+public @interface A {
+  int value() default 7;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/addDefaultToAnnotationMember/src/A.java b/java/java-tests/testData/compileServer/incremental/annotations/addDefaultToAnnotationMember/src/A.java
new file mode 100644
index 0000000..87f1b64
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/addDefaultToAnnotationMember/src/A.java
@@ -0,0 +1,3 @@
+public @interface A {
+  int value();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/addDefaultToAnnotationMember/src/C.java b/java/java-tests/testData/compileServer/incremental/annotations/addDefaultToAnnotationMember/src/C.java
new file mode 100644
index 0000000..b962aef
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/addDefaultToAnnotationMember/src/C.java
@@ -0,0 +1,3 @@
+@A(10) 
+public class C {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/addDefaultToAnnotationMember/src/C1.java b/java/java-tests/testData/compileServer/incremental/annotations/addDefaultToAnnotationMember/src/C1.java
new file mode 100644
index 0000000..0342905
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/addDefaultToAnnotationMember/src/C1.java
@@ -0,0 +1,6 @@
+public class C1 {
+
+  @A(20)
+  void foo() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/addDefaultToAnnotationMember/src/C2.java b/java/java-tests/testData/compileServer/incremental/annotations/addDefaultToAnnotationMember/src/C2.java
new file mode 100644
index 0000000..e776156b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/addDefaultToAnnotationMember/src/C2.java
@@ -0,0 +1,5 @@
+public class C2 {
+
+  @A(30) 
+  int field;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy.log b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy.log
new file mode 100644
index 0000000..d564e13
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy.log
@@ -0,0 +1,16 @@
+Cleaning output files:
+out/production/ChangeAnnotationRetentionPolicy/A.class
+End of files
+Compiling files:
+src/A.java
+End of files
+Cleaning output files:
+out/production/ChangeAnnotationRetentionPolicy/C.class
+out/production/ChangeAnnotationRetentionPolicy/C1.class
+out/production/ChangeAnnotationRetentionPolicy/C2.class
+End of files
+Compiling files:
+src/C.java
+src/C1.java
+src/C2.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy/A.java.new b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy/A.java.new
new file mode 100644
index 0000000..56ea1c6
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy/A.java.new
@@ -0,0 +1,7 @@
+import java.lang.annotation.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+@Retention(SOURCE)
+public @interface A {
+  int value();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy/src/A.java b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy/src/A.java
new file mode 100644
index 0000000..87f1b64
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy/src/A.java
@@ -0,0 +1,3 @@
+public @interface A {
+  int value();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy/src/C.java b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy/src/C.java
new file mode 100644
index 0000000..b962aef
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy/src/C.java
@@ -0,0 +1,3 @@
+@A(10) 
+public class C {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy/src/C1.java b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy/src/C1.java
new file mode 100644
index 0000000..0342905
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy/src/C1.java
@@ -0,0 +1,6 @@
+public class C1 {
+
+  @A(20)
+  void foo() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy/src/C2.java b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy/src/C2.java
new file mode 100644
index 0000000..e776156b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy/src/C2.java
@@ -0,0 +1,5 @@
+public class C2 {
+
+  @A(30) 
+  int field;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy1.log b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy1.log
new file mode 100644
index 0000000..663bc7e
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy1.log
@@ -0,0 +1,16 @@
+Cleaning output files:
+out/production/ChangeAnnotationRetentionPolicy1/A.class
+End of files
+Compiling files:
+src/A.java
+End of files
+Cleaning output files:
+out/production/ChangeAnnotationRetentionPolicy1/C.class
+out/production/ChangeAnnotationRetentionPolicy1/C1.class
+out/production/ChangeAnnotationRetentionPolicy1/C2.class
+End of files
+Compiling files:
+src/C.java
+src/C1.java
+src/C2.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy1/A.java.new b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy1/A.java.new
new file mode 100644
index 0000000..52d8dc0
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy1/A.java.new
@@ -0,0 +1,7 @@
+import java.lang.annotation.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+@Retention(RUNTIME)
+public @interface A {
+  int value();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy1/src/A.java b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy1/src/A.java
new file mode 100644
index 0000000..87f1b64
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy1/src/A.java
@@ -0,0 +1,3 @@
+public @interface A {
+  int value();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy1/src/C.java b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy1/src/C.java
new file mode 100644
index 0000000..b962aef
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy1/src/C.java
@@ -0,0 +1,3 @@
+@A(10) 
+public class C {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy1/src/C1.java b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy1/src/C1.java
new file mode 100644
index 0000000..0342905
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy1/src/C1.java
@@ -0,0 +1,6 @@
+public class C1 {
+
+  @A(20)
+  void foo() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy1/src/C2.java b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy1/src/C2.java
new file mode 100644
index 0000000..e776156b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy1/src/C2.java
@@ -0,0 +1,5 @@
+public class C2 {
+
+  @A(30) 
+  int field;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy2.log b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy2.log
new file mode 100644
index 0000000..211ca93
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy2.log
@@ -0,0 +1,18 @@
+Cleaning output files:
+out/production/ChangeAnnotationRetentionPolicy2/A.class
+End of files
+Compiling files:
+src/A.java
+End of files
+Cleaning output files:
+out/production/ChangeAnnotationRetentionPolicy2/A.class
+out/production/ChangeAnnotationRetentionPolicy2/C.class
+out/production/ChangeAnnotationRetentionPolicy2/C1.class
+out/production/ChangeAnnotationRetentionPolicy2/C2.class
+End of files
+Compiling files:
+src/A.java
+src/C.java
+src/C1.java
+src/C2.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy2/A.java.new b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy2/A.java.new
new file mode 100644
index 0000000..52d8dc0
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy2/A.java.new
@@ -0,0 +1,7 @@
+import java.lang.annotation.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+@Retention(RUNTIME)
+public @interface A {
+  int value();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy2/src/A.java b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy2/src/A.java
new file mode 100644
index 0000000..56ea1c6
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy2/src/A.java
@@ -0,0 +1,7 @@
+import java.lang.annotation.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+@Retention(SOURCE)
+public @interface A {
+  int value();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy2/src/C.java b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy2/src/C.java
new file mode 100644
index 0000000..b962aef
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy2/src/C.java
@@ -0,0 +1,3 @@
+@A(10) 
+public class C {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy2/src/C1.java b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy2/src/C1.java
new file mode 100644
index 0000000..0342905
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy2/src/C1.java
@@ -0,0 +1,6 @@
+public class C1 {
+
+  @A(20)
+  void foo() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy2/src/C2.java b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy2/src/C2.java
new file mode 100644
index 0000000..ca24f19
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy2/src/C2.java
@@ -0,0 +1,3 @@
+public class C2 {
+  int field;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy3.log b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy3.log
new file mode 100644
index 0000000..8dab210
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy3.log
@@ -0,0 +1,18 @@
+Cleaning output files:
+out/production/ChangeAnnotationRetentionPolicy3/A.class
+End of files
+Compiling files:
+src/A.java
+End of files
+Cleaning output files:
+out/production/ChangeAnnotationRetentionPolicy3/A.class
+out/production/ChangeAnnotationRetentionPolicy3/C.class
+out/production/ChangeAnnotationRetentionPolicy3/C1.class
+out/production/ChangeAnnotationRetentionPolicy3/C2.class
+End of files
+Compiling files:
+src/A.java
+src/C.java
+src/C1.java
+src/C2.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy3/A.java.new b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy3/A.java.new
new file mode 100644
index 0000000..40092a9
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy3/A.java.new
@@ -0,0 +1,7 @@
+import java.lang.annotation.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+@Retention(CLASS)
+public @interface A {
+  int value();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy3/src/A.java b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy3/src/A.java
new file mode 100644
index 0000000..56ea1c6
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy3/src/A.java
@@ -0,0 +1,7 @@
+import java.lang.annotation.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+@Retention(SOURCE)
+public @interface A {
+  int value();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy3/src/C.java b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy3/src/C.java
new file mode 100644
index 0000000..b962aef
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy3/src/C.java
@@ -0,0 +1,3 @@
+@A(10) 
+public class C {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy3/src/C1.java b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy3/src/C1.java
new file mode 100644
index 0000000..0342905
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy3/src/C1.java
@@ -0,0 +1,6 @@
+public class C1 {
+
+  @A(20)
+  void foo() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy3/src/C2.java b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy3/src/C2.java
new file mode 100644
index 0000000..e776156b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy3/src/C2.java
@@ -0,0 +1,5 @@
+public class C2 {
+
+  @A(30) 
+  int field;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy4.log b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy4.log
new file mode 100644
index 0000000..f1fc6c5
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy4.log
@@ -0,0 +1,14 @@
+Cleaning output files:
+out/production/ChangeAnnotationRetentionPolicy4/A.class
+End of files
+Compiling files:
+src/A.java
+End of files
+Cleaning output files:
+out/production/ChangeAnnotationRetentionPolicy4/C.class
+out/production/ChangeAnnotationRetentionPolicy4/C2.class
+End of files
+Compiling files:
+src/C.java
+src/C2.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy4/A.java.new b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy4/A.java.new
new file mode 100644
index 0000000..56ea1c6
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy4/A.java.new
@@ -0,0 +1,7 @@
+import java.lang.annotation.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+@Retention(SOURCE)
+public @interface A {
+  int value();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy4/src/A.java b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy4/src/A.java
new file mode 100644
index 0000000..52d8dc0
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy4/src/A.java
@@ -0,0 +1,7 @@
+import java.lang.annotation.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+@Retention(RUNTIME)
+public @interface A {
+  int value();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy4/src/C.java b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy4/src/C.java
new file mode 100644
index 0000000..b962aef
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy4/src/C.java
@@ -0,0 +1,3 @@
+@A(10) 
+public class C {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy4/src/C1.java b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy4/src/C1.java
new file mode 100644
index 0000000..56b5b30
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy4/src/C1.java
@@ -0,0 +1,4 @@
+public class C1 {
+  void foo() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy4/src/C2.java b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy4/src/C2.java
new file mode 100644
index 0000000..e776156b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationRetentionPolicy4/src/C2.java
@@ -0,0 +1,5 @@
+public class C2 {
+
+  @A(30) 
+  int field;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationTypeMemberType.log b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationTypeMemberType.log
new file mode 100644
index 0000000..007115c
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationTypeMemberType.log
@@ -0,0 +1,16 @@
+Cleaning output files:
+out/production/ChangeAnnotationTypeMemberType/A.class
+End of files
+Compiling files:
+src/A.java
+End of files
+Cleaning output files:
+out/production/ChangeAnnotationTypeMemberType/C.class
+out/production/ChangeAnnotationTypeMemberType/C1.class
+out/production/ChangeAnnotationTypeMemberType/C2.class
+End of files
+Compiling files:
+src/C.java
+src/C1.java
+src/C2.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationTypeMemberType/A.java.new b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationTypeMemberType/A.java.new
new file mode 100644
index 0000000..a2124fe
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationTypeMemberType/A.java.new
@@ -0,0 +1,3 @@
+public @interface A {
+  Class value();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationTypeMemberType/src/A.java b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationTypeMemberType/src/A.java
new file mode 100644
index 0000000..87f1b64
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationTypeMemberType/src/A.java
@@ -0,0 +1,3 @@
+public @interface A {
+  int value();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationTypeMemberType/src/C.java b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationTypeMemberType/src/C.java
new file mode 100644
index 0000000..b962aef
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationTypeMemberType/src/C.java
@@ -0,0 +1,3 @@
+@A(10) 
+public class C {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationTypeMemberType/src/C1.java b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationTypeMemberType/src/C1.java
new file mode 100644
index 0000000..0342905
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationTypeMemberType/src/C1.java
@@ -0,0 +1,6 @@
+public class C1 {
+
+  @A(20)
+  void foo() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationTypeMemberType/src/C2.java b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationTypeMemberType/src/C2.java
new file mode 100644
index 0000000..e776156b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/changeAnnotationTypeMemberType/src/C2.java
@@ -0,0 +1,5 @@
+public class C2 {
+
+  @A(30) 
+  int field;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument.log b/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument.log
new file mode 100644
index 0000000..7122542
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/ClassAsArgument/A.class
+End of files
+Compiling files:
+src/A.java
+End of files
+Cleaning output files:
+out/production/ClassAsArgument/Annotated.class
+End of files
+Compiling files:
+src/Annotated.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/A.java.new b/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/A.java.new
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/A.java.new
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/src/A.java b/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/src/A.java
new file mode 100644
index 0000000..655e62a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/src/A.java
@@ -0,0 +1,9 @@
+/**
+ * Created with IntelliJ IDEA.
+ * User: db
+ * Date: 04.05.12
+ * Time: 17:42
+ * To change this template use File | Settings | File Templates.
+ */
+public class A {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/src/Ann.java b/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/src/Ann.java
new file mode 100644
index 0000000..bec2f9e
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/src/Ann.java
@@ -0,0 +1,13 @@
+/**
+ * Created with IntelliJ IDEA.
+ * User: db
+ * Date: 04.05.12
+ * Time: 17:42
+ * To change this template use File | Settings | File Templates.
+ */
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+@Retention(RetentionPolicy.CLASS) public @interface Ann {
+        Class[] value();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/src/Annotated.java b/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/src/Annotated.java
new file mode 100644
index 0000000..09fafb5
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/classAsArgument/src/Annotated.java
@@ -0,0 +1,10 @@
+/**
+ * Created with IntelliJ IDEA.
+ * User: db
+ * Date: 04.05.12
+ * Time: 17:43
+ * To change this template use File | Settings | File Templates.
+ */
+@Ann(A.class)
+public class Annotated {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental.log b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental.log
new file mode 100644
index 0000000..c9f4ce7
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental.log
@@ -0,0 +1,26 @@
+Cleaning output files:
+out/production/a2/A2.class
+End of files
+Compiling files:
+a2/src/A2.java
+End of files
+Cleaning output files:
+out/production/a2/A2.class
+out/production/a2/C.class
+End of files
+Compiling files:
+a2/src/A2.java
+a2/src/C.java
+End of files
+Cleaning output files:
+out/production/b22/B22.class
+End of files
+Compiling files:
+b22/src/B22.java
+End of files
+Cleaning output files:
+out/production/b21/B21.class
+End of files
+Compiling files:
+b21/src/B21.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental/.idea/misc.xml b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental/.idea/misc.xml
new file mode 100644
index 0000000..c9b3f81
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental/.idea/misc.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="EntryPointsManager">
+    <entry_points version="2.0" />
+  </component>
+  <component name="JavadocGenerationManager">
+    <option name="OUTPUT_DIRECTORY" />
+    <option name="OPTION_SCOPE" value="protected" />
+    <option name="OPTION_HIERARCHY" value="true" />
+    <option name="OPTION_NAVIGATOR" value="true" />
+    <option name="OPTION_INDEX" value="true" />
+    <option name="OPTION_SEPARATE_INDEX" value="true" />
+    <option name="OPTION_DOCUMENT_TAG_USE" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_AUTHOR" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_VERSION" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_DEPRECATED" value="true" />
+    <option name="OPTION_DEPRECATED_LIST" value="true" />
+    <option name="OTHER_OPTIONS" value="" />
+    <option name="HEAP_SIZE" />
+    <option name="LOCALE" />
+    <option name="OPEN_IN_BROWSER" value="true" />
+  </component>
+  <component name="ModuleEditorState">
+    <option name="LAST_EDITED_MODULE_NAME" />
+    <option name="LAST_EDITED_TAB_NAME" />
+  </component>
+  <component name="NullableNotNullManager">
+    <option name="myDefaultNullable" value="org.jetbrains.annotations.Nullable" />
+    <option name="myDefaultNotNull" value="org.jetbrains.annotations.NotNull" />
+    <option name="myNullables">
+      <value>
+        <list size="0" />
+      </value>
+    </option>
+    <option name="myNotNulls">
+      <value>
+        <list size="3">
+          <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" />
+          <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nonnull" />
+          <item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" />
+        </list>
+      </value>
+    </option>
+  </component>
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_5" assert-keyword="true" jdk-15="true" project-jdk-name="IDEA jdk" project-jdk-type="JavaSDK">
+    <output url="file://$PROJECT_DIR$/out" />
+  </component>
+</project>
+
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental/.idea/modules.xml b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental/.idea/modules.xml
new file mode 100644
index 0000000..ff9a4e2
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental/.idea/modules.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/a1/a1.iml" filepath="$PROJECT_DIR$/a1/a1.iml" />
+      <module fileurl="file://$PROJECT_DIR$/a2/a2.iml" filepath="$PROJECT_DIR$/a2/a2.iml" />
+      <module fileurl="file://$PROJECT_DIR$/b21/b21.iml" filepath="$PROJECT_DIR$/b21/b21.iml" />
+      <module fileurl="file://$PROJECT_DIR$/b22/b22.iml" filepath="$PROJECT_DIR$/b22/b22.iml" />
+      <module fileurl="file://$PROJECT_DIR$/conservativeNonIncremental.iml" filepath="$PROJECT_DIR$/conservativeNonIncremental.iml" />
+    </modules>
+  </component>
+</project>
+
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental/a1/a1.iml b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental/a1/a1.iml
new file mode 100644
index 0000000..6d2deba
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental/a1/a1.iml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module" module-name="conservativeNonIncremental" />
+  </component>
+</module>
+
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental/a1/src/A1.java b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental/a1/src/A1.java
new file mode 100644
index 0000000..cb909499
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental/a1/src/A1.java
@@ -0,0 +1,9 @@
+/**
+ * Created by IntelliJ IDEA.
+ * User: db
+ * Date: 06.08.11
+ * Time: 14:56
+ * To change this template use File | Settings | File Templates.
+ */
+public class A1 {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental/a2/a2.iml b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental/a2/a2.iml
new file mode 100644
index 0000000..6d2deba
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental/a2/a2.iml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module" module-name="conservativeNonIncremental" />
+  </component>
+</module>
+
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental/a2/src/A2.java b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental/a2/src/A2.java
new file mode 100644
index 0000000..46ac29820
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental/a2/src/A2.java
@@ -0,0 +1,14 @@
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: db
+ * Date: 06.08.11
+ * Time: 14:56
+ * To change this template use File | Settings | File Templates.
+ */
+
+@Retention(RetentionPolicy.SOURCE)
+public @interface A2 {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental/a2/src/A2.java.new b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental/a2/src/A2.java.new
new file mode 100644
index 0000000..0d663a1
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental/a2/src/A2.java.new
@@ -0,0 +1,15 @@
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: db
+ * Date: 06.08.11
+ * Time: 14:56
+ * To change this template use File | Settings | File Templates.
+ */
+
+@Retention(RetentionPolicy.SOURCE)
+public @interface A2 {
+  String value ();
+}
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental/a2/src/C.java b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental/a2/src/C.java
new file mode 100644
index 0000000..a7c4a10
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental/a2/src/C.java
@@ -0,0 +1 @@
+public class C {}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental/b21/b21.iml b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental/b21/b21.iml
new file mode 100644
index 0000000..02ea365
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental/b21/b21.iml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module" module-name="a2" />
+  </component>
+</module>
+
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental/b21/src/B21.java b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental/b21/src/B21.java
new file mode 100644
index 0000000..0db4d1f
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental/b21/src/B21.java
@@ -0,0 +1,9 @@
+/**
+ * Created by IntelliJ IDEA.
+ * User: db
+ * Date: 06.08.11
+ * Time: 14:57
+ * To change this template use File | Settings | File Templates.
+ */
+public class B21 {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental/b22/b22.iml b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental/b22/b22.iml
new file mode 100644
index 0000000..02ea365
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental/b22/b22.iml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module" module-name="a2" />
+  </component>
+</module>
+
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental/b22/src/B22.java b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental/b22/src/B22.java
new file mode 100644
index 0000000..0812954
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental/b22/src/B22.java
@@ -0,0 +1,9 @@
+/**
+ * Created by IntelliJ IDEA.
+ * User: db
+ * Date: 06.08.11
+ * Time: 14:57
+ * To change this template use File | Settings | File Templates.
+ */
+public class B22 {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental/conservativeNonIncremental.iml b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental/conservativeNonIncremental.iml
new file mode 100644
index 0000000..d5c0743
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental/conservativeNonIncremental.iml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>
+
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental/src/A.java b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental/src/A.java
new file mode 100644
index 0000000..ad8bfb3
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental/src/A.java
@@ -0,0 +1,9 @@
+/**
+ * Created by IntelliJ IDEA.
+ * User: db
+ * Date: 06.08.11
+ * Time: 14:56
+ * To change this template use File | Settings | File Templates.
+ */
+public class A {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1.log b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1.log
new file mode 100644
index 0000000..c9f4ce7
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1.log
@@ -0,0 +1,26 @@
+Cleaning output files:
+out/production/a2/A2.class
+End of files
+Compiling files:
+a2/src/A2.java
+End of files
+Cleaning output files:
+out/production/a2/A2.class
+out/production/a2/C.class
+End of files
+Compiling files:
+a2/src/A2.java
+a2/src/C.java
+End of files
+Cleaning output files:
+out/production/b22/B22.class
+End of files
+Compiling files:
+b22/src/B22.java
+End of files
+Cleaning output files:
+out/production/b21/B21.class
+End of files
+Compiling files:
+b21/src/B21.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1/.idea/misc.xml b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1/.idea/misc.xml
new file mode 100644
index 0000000..c9b3f81
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1/.idea/misc.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="EntryPointsManager">
+    <entry_points version="2.0" />
+  </component>
+  <component name="JavadocGenerationManager">
+    <option name="OUTPUT_DIRECTORY" />
+    <option name="OPTION_SCOPE" value="protected" />
+    <option name="OPTION_HIERARCHY" value="true" />
+    <option name="OPTION_NAVIGATOR" value="true" />
+    <option name="OPTION_INDEX" value="true" />
+    <option name="OPTION_SEPARATE_INDEX" value="true" />
+    <option name="OPTION_DOCUMENT_TAG_USE" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_AUTHOR" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_VERSION" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_DEPRECATED" value="true" />
+    <option name="OPTION_DEPRECATED_LIST" value="true" />
+    <option name="OTHER_OPTIONS" value="" />
+    <option name="HEAP_SIZE" />
+    <option name="LOCALE" />
+    <option name="OPEN_IN_BROWSER" value="true" />
+  </component>
+  <component name="ModuleEditorState">
+    <option name="LAST_EDITED_MODULE_NAME" />
+    <option name="LAST_EDITED_TAB_NAME" />
+  </component>
+  <component name="NullableNotNullManager">
+    <option name="myDefaultNullable" value="org.jetbrains.annotations.Nullable" />
+    <option name="myDefaultNotNull" value="org.jetbrains.annotations.NotNull" />
+    <option name="myNullables">
+      <value>
+        <list size="0" />
+      </value>
+    </option>
+    <option name="myNotNulls">
+      <value>
+        <list size="3">
+          <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" />
+          <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nonnull" />
+          <item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" />
+        </list>
+      </value>
+    </option>
+  </component>
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_5" assert-keyword="true" jdk-15="true" project-jdk-name="IDEA jdk" project-jdk-type="JavaSDK">
+    <output url="file://$PROJECT_DIR$/out" />
+  </component>
+</project>
+
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1/.idea/modules.xml b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1/.idea/modules.xml
new file mode 100644
index 0000000..ff9a4e2
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1/.idea/modules.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/a1/a1.iml" filepath="$PROJECT_DIR$/a1/a1.iml" />
+      <module fileurl="file://$PROJECT_DIR$/a2/a2.iml" filepath="$PROJECT_DIR$/a2/a2.iml" />
+      <module fileurl="file://$PROJECT_DIR$/b21/b21.iml" filepath="$PROJECT_DIR$/b21/b21.iml" />
+      <module fileurl="file://$PROJECT_DIR$/b22/b22.iml" filepath="$PROJECT_DIR$/b22/b22.iml" />
+      <module fileurl="file://$PROJECT_DIR$/conservativeNonIncremental.iml" filepath="$PROJECT_DIR$/conservativeNonIncremental.iml" />
+    </modules>
+  </component>
+</project>
+
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1/a1/a1.iml b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1/a1/a1.iml
new file mode 100644
index 0000000..6d2deba
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1/a1/a1.iml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module" module-name="conservativeNonIncremental" />
+  </component>
+</module>
+
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1/a1/src/A1.java b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1/a1/src/A1.java
new file mode 100644
index 0000000..cb909499
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1/a1/src/A1.java
@@ -0,0 +1,9 @@
+/**
+ * Created by IntelliJ IDEA.
+ * User: db
+ * Date: 06.08.11
+ * Time: 14:56
+ * To change this template use File | Settings | File Templates.
+ */
+public class A1 {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1/a2/a2.iml b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1/a2/a2.iml
new file mode 100644
index 0000000..6d2deba
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1/a2/a2.iml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module" module-name="conservativeNonIncremental" />
+  </component>
+</module>
+
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1/a2/src/A2.java b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1/a2/src/A2.java
new file mode 100644
index 0000000..ff6cf7db
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1/a2/src/A2.java
@@ -0,0 +1,17 @@
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: db
+ * Date: 06.08.11
+ * Time: 14:56
+ * To change this template use File | Settings | File Templates.
+ */
+
+@Retention(RetentionPolicy.SOURCE)
+@Target({ElementType.TYPE, ElementType.METHOD, ElementType.LOCAL_VARIABLE})
+public @interface A2 {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1/a2/src/A2.java.new b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1/a2/src/A2.java.new
new file mode 100644
index 0000000..ce2ddb0
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1/a2/src/A2.java.new
@@ -0,0 +1,18 @@
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: db
+ * Date: 06.08.11
+ * Time: 14:56
+ * To change this template use File | Settings | File Templates.
+ */
+
+@Retention(RetentionPolicy.SOURCE)
+@Target({ElementType.TYPE, ElementType.METHOD})
+public @interface A2 {
+  String value ();
+}
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1/a2/src/C.java b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1/a2/src/C.java
new file mode 100644
index 0000000..a7c4a10
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1/a2/src/C.java
@@ -0,0 +1 @@
+public class C {}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1/b21/b21.iml b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1/b21/b21.iml
new file mode 100644
index 0000000..02ea365
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1/b21/b21.iml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module" module-name="a2" />
+  </component>
+</module>
+
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1/b21/src/B21.java b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1/b21/src/B21.java
new file mode 100644
index 0000000..0db4d1f
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1/b21/src/B21.java
@@ -0,0 +1,9 @@
+/**
+ * Created by IntelliJ IDEA.
+ * User: db
+ * Date: 06.08.11
+ * Time: 14:57
+ * To change this template use File | Settings | File Templates.
+ */
+public class B21 {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1/b22/b22.iml b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1/b22/b22.iml
new file mode 100644
index 0000000..02ea365
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1/b22/b22.iml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module" module-name="a2" />
+  </component>
+</module>
+
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1/b22/src/B22.java b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1/b22/src/B22.java
new file mode 100644
index 0000000..0812954
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1/b22/src/B22.java
@@ -0,0 +1,9 @@
+/**
+ * Created by IntelliJ IDEA.
+ * User: db
+ * Date: 06.08.11
+ * Time: 14:57
+ * To change this template use File | Settings | File Templates.
+ */
+public class B22 {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1/conservativeNonIncremental.iml b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1/conservativeNonIncremental.iml
new file mode 100644
index 0000000..d5c0743
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1/conservativeNonIncremental.iml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>
+
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1/src/A.java b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1/src/A.java
new file mode 100644
index 0000000..ad8bfb3
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/conservativeNonIncremental1/src/A.java
@@ -0,0 +1,9 @@
+/**
+ * Created by IntelliJ IDEA.
+ * User: db
+ * Date: 06.08.11
+ * Time: 14:56
+ * To change this template use File | Settings | File Templates.
+ */
+public class A {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChanged.log b/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChanged.log
new file mode 100644
index 0000000..7437ac4
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChanged.log
@@ -0,0 +1,8 @@
+Cleaning output files:
+out/production/MetaAnnotationChanged/A1.class
+out/production/MetaAnnotationChanged/C1.class
+End of files
+Compiling files:
+src/A1.java
+src/C1.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChanged/A1.java.new b/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChanged/A1.java.new
new file mode 100644
index 0000000..85f0de6
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChanged/A1.java.new
@@ -0,0 +1,6 @@
+import java.lang.annotation.*;
+import static java.lang.annotation.ElementType.*;
+
+@A(11)
+public @interface A1 {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChanged/src/A.java b/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChanged/src/A.java
new file mode 100644
index 0000000..9e452ad
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChanged/src/A.java
@@ -0,0 +1,6 @@
+import java.lang.annotation.*;
+import static java.lang.annotation.ElementType.*;
+
+public @interface A {
+  int value();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChanged/src/A1.java b/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChanged/src/A1.java
new file mode 100644
index 0000000..c09ed89
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChanged/src/A1.java
@@ -0,0 +1,6 @@
+import java.lang.annotation.*;
+import static java.lang.annotation.ElementType.*;
+
+@A(1)
+public @interface A1 {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChanged/src/C.java b/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChanged/src/C.java
new file mode 100644
index 0000000..b962aef
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChanged/src/C.java
@@ -0,0 +1,3 @@
+@A(10) 
+public class C {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChanged/src/C1.java b/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChanged/src/C1.java
new file mode 100644
index 0000000..b7e7a6b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChanged/src/C1.java
@@ -0,0 +1,3 @@
+@A1
+public class C1 {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChangedCascade.log b/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChangedCascade.log
new file mode 100644
index 0000000..d60bdd3
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChangedCascade.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/MetaAnnotationChangedCascade/A.class
+out/production/MetaAnnotationChangedCascade/C.class
+out/production/MetaAnnotationChangedCascade/A1.class
+out/production/MetaAnnotationChangedCascade/C1.class
+End of files
+Compiling files:
+src/A.java
+src/C.java
+src/A1.java
+src/C1.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChangedCascade/A.java.new b/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChangedCascade/A.java.new
new file mode 100644
index 0000000..24e67d6
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChangedCascade/A.java.new
@@ -0,0 +1,7 @@
+import java.lang.annotation.*;
+import static java.lang.annotation.ElementType.*;
+
+@B(77)
+public @interface A {
+  int value();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChangedCascade/src/A.java b/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChangedCascade/src/A.java
new file mode 100644
index 0000000..9e452ad
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChangedCascade/src/A.java
@@ -0,0 +1,6 @@
+import java.lang.annotation.*;
+import static java.lang.annotation.ElementType.*;
+
+public @interface A {
+  int value();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChangedCascade/src/A1.java b/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChangedCascade/src/A1.java
new file mode 100644
index 0000000..c09ed89
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChangedCascade/src/A1.java
@@ -0,0 +1,6 @@
+import java.lang.annotation.*;
+import static java.lang.annotation.ElementType.*;
+
+@A(1)
+public @interface A1 {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChangedCascade/src/B.java b/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChangedCascade/src/B.java
new file mode 100644
index 0000000..133fdf7
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChangedCascade/src/B.java
@@ -0,0 +1,6 @@
+import java.lang.annotation.*;
+import static java.lang.annotation.ElementType.*;
+
+public @interface B {
+  int value();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChangedCascade/src/C.java b/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChangedCascade/src/C.java
new file mode 100644
index 0000000..b962aef
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChangedCascade/src/C.java
@@ -0,0 +1,3 @@
+@A(10) 
+public class C {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChangedCascade/src/C1.java b/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChangedCascade/src/C1.java
new file mode 100644
index 0000000..b7e7a6b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChangedCascade/src/C1.java
@@ -0,0 +1,3 @@
+@A1
+public class C1 {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChangedCascade2.log b/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChangedCascade2.log
new file mode 100644
index 0000000..87b4633
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChangedCascade2.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/MetaAnnotationChangedCascade2/A.class
+out/production/MetaAnnotationChangedCascade2/C.class
+out/production/MetaAnnotationChangedCascade2/A1.class
+out/production/MetaAnnotationChangedCascade2/C1.class
+End of files
+Compiling files:
+src/A.java
+src/C.java
+src/A1.java
+src/C1.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChangedCascade2/A.java.new b/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChangedCascade2/A.java.new
new file mode 100644
index 0000000..abd14f8
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChangedCascade2/A.java.new
@@ -0,0 +1,7 @@
+import java.lang.annotation.*;
+import static java.lang.annotation.ElementType.*;
+
+@B(88)
+public @interface A {
+  int value();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChangedCascade2/src/A.java b/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChangedCascade2/src/A.java
new file mode 100644
index 0000000..24e67d6
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChangedCascade2/src/A.java
@@ -0,0 +1,7 @@
+import java.lang.annotation.*;
+import static java.lang.annotation.ElementType.*;
+
+@B(77)
+public @interface A {
+  int value();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChangedCascade2/src/A1.java b/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChangedCascade2/src/A1.java
new file mode 100644
index 0000000..c09ed89
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChangedCascade2/src/A1.java
@@ -0,0 +1,6 @@
+import java.lang.annotation.*;
+import static java.lang.annotation.ElementType.*;
+
+@A(1)
+public @interface A1 {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChangedCascade2/src/B.java b/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChangedCascade2/src/B.java
new file mode 100644
index 0000000..133fdf7
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChangedCascade2/src/B.java
@@ -0,0 +1,6 @@
+import java.lang.annotation.*;
+import static java.lang.annotation.ElementType.*;
+
+public @interface B {
+  int value();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChangedCascade2/src/C.java b/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChangedCascade2/src/C.java
new file mode 100644
index 0000000..b962aef
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChangedCascade2/src/C.java
@@ -0,0 +1,3 @@
+@A(10) 
+public class C {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChangedCascade2/src/C1.java b/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChangedCascade2/src/C1.java
new file mode 100644
index 0000000..b7e7a6b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/metaAnnotationChangedCascade2/src/C1.java
@@ -0,0 +1,3 @@
+@A1
+public class C1 {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTarget.log b/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTarget.log
new file mode 100644
index 0000000..f5c8b58
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTarget.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/RemoveAnnotationTarget/A.class
+End of files
+Compiling files:
+src/A.java
+End of files
+Cleaning output files:
+out/production/RemoveAnnotationTarget/C2.class
+End of files
+Compiling files:
+src/C2.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTarget/A.java.new b/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTarget/A.java.new
new file mode 100644
index 0000000..f116a53
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTarget/A.java.new
@@ -0,0 +1,7 @@
+import java.lang.annotation.*;
+import static java.lang.annotation.ElementType.*;
+
+@Target(TYPE)
+public @interface A {
+  int value();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTarget/src/A.java b/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTarget/src/A.java
new file mode 100644
index 0000000..740c4c47
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTarget/src/A.java
@@ -0,0 +1,7 @@
+import java.lang.annotation.*;
+import static java.lang.annotation.ElementType.*;
+
+@Target({TYPE, FIELD})
+public @interface A {
+  int value();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTarget/src/C.java b/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTarget/src/C.java
new file mode 100644
index 0000000..b962aef
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTarget/src/C.java
@@ -0,0 +1,3 @@
+@A(10) 
+public class C {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTarget/src/C2.java b/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTarget/src/C2.java
new file mode 100644
index 0000000..e776156b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTarget/src/C2.java
@@ -0,0 +1,5 @@
+public class C2 {
+
+  @A(30) 
+  int field;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTypeMember.log b/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTypeMember.log
new file mode 100644
index 0000000..676f5e9
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTypeMember.log
@@ -0,0 +1,16 @@
+Cleaning output files:
+out/production/RemoveAnnotationTypeMember/A.class
+End of files
+Compiling files:
+src/A.java
+End of files
+Cleaning output files:
+out/production/RemoveAnnotationTypeMember/C.class
+out/production/RemoveAnnotationTypeMember/C1.class
+out/production/RemoveAnnotationTypeMember/C2.class
+End of files
+Compiling files:
+src/C.java
+src/C1.java
+src/C2.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTypeMember/A.java.new b/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTypeMember/A.java.new
new file mode 100644
index 0000000..04c7454
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTypeMember/A.java.new
@@ -0,0 +1,2 @@
+public @interface A {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTypeMember/src/A.java b/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTypeMember/src/A.java
new file mode 100644
index 0000000..87f1b64
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTypeMember/src/A.java
@@ -0,0 +1,3 @@
+public @interface A {
+  int value();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTypeMember/src/C.java b/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTypeMember/src/C.java
new file mode 100644
index 0000000..b962aef
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTypeMember/src/C.java
@@ -0,0 +1,3 @@
+@A(10) 
+public class C {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTypeMember/src/C1.java b/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTypeMember/src/C1.java
new file mode 100644
index 0000000..0342905
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTypeMember/src/C1.java
@@ -0,0 +1,6 @@
+public class C1 {
+
+  @A(20)
+  void foo() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTypeMember/src/C2.java b/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTypeMember/src/C2.java
new file mode 100644
index 0000000..e776156b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTypeMember/src/C2.java
@@ -0,0 +1,5 @@
+public class C2 {
+
+  @A(30) 
+  int field;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTypeMember1.log b/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTypeMember1.log
new file mode 100644
index 0000000..87294a5
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTypeMember1.log
@@ -0,0 +1,16 @@
+Cleaning output files:
+out/production/RemoveAnnotationTypeMember1/A.class
+End of files
+Compiling files:
+src/A.java
+End of files
+Cleaning output files:
+out/production/RemoveAnnotationTypeMember1/C.class
+out/production/RemoveAnnotationTypeMember1/C1.class
+out/production/RemoveAnnotationTypeMember1/C2.class
+End of files
+Compiling files:
+src/C.java
+src/C1.java
+src/C2.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTypeMember1/A.java.new b/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTypeMember1/A.java.new
new file mode 100644
index 0000000..04c7454
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTypeMember1/A.java.new
@@ -0,0 +1,2 @@
+public @interface A {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTypeMember1/src/A.java b/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTypeMember1/src/A.java
new file mode 100644
index 0000000..847d077
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTypeMember1/src/A.java
@@ -0,0 +1,3 @@
+public @interface A {
+  int value() default 1;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTypeMember1/src/C.java b/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTypeMember1/src/C.java
new file mode 100644
index 0000000..b962aef
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTypeMember1/src/C.java
@@ -0,0 +1,3 @@
+@A(10) 
+public class C {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTypeMember1/src/C1.java b/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTypeMember1/src/C1.java
new file mode 100644
index 0000000..0342905
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTypeMember1/src/C1.java
@@ -0,0 +1,6 @@
+public class C1 {
+
+  @A(20)
+  void foo() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTypeMember1/src/C2.java b/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTypeMember1/src/C2.java
new file mode 100644
index 0000000..e776156b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/removeAnnotationTypeMember1/src/C2.java
@@ -0,0 +1,5 @@
+public class C2 {
+
+  @A(30) 
+  int field;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/removeDefaultFromAnnotationMember.log b/java/java-tests/testData/compileServer/incremental/annotations/removeDefaultFromAnnotationMember.log
new file mode 100644
index 0000000..93b9559
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/removeDefaultFromAnnotationMember.log
@@ -0,0 +1,14 @@
+Cleaning output files:
+out/production/RemoveDefaultFromAnnotationMember/A.class
+End of files
+Compiling files:
+src/A.java
+End of files
+Cleaning output files:
+out/production/RemoveDefaultFromAnnotationMember/C.class
+out/production/RemoveDefaultFromAnnotationMember/C1.class
+End of files
+Compiling files:
+src/C.java
+src/C1.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/removeDefaultFromAnnotationMember/A.java.new b/java/java-tests/testData/compileServer/incremental/annotations/removeDefaultFromAnnotationMember/A.java.new
new file mode 100644
index 0000000..87f1b64
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/removeDefaultFromAnnotationMember/A.java.new
@@ -0,0 +1,3 @@
+public @interface A {
+  int value();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/removeDefaultFromAnnotationMember/src/A.java b/java/java-tests/testData/compileServer/incremental/annotations/removeDefaultFromAnnotationMember/src/A.java
new file mode 100644
index 0000000..ecaa314
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/removeDefaultFromAnnotationMember/src/A.java
@@ -0,0 +1,3 @@
+public @interface A {
+  int value() default 7;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/removeDefaultFromAnnotationMember/src/C.java b/java/java-tests/testData/compileServer/incremental/annotations/removeDefaultFromAnnotationMember/src/C.java
new file mode 100644
index 0000000..c9f51c8
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/removeDefaultFromAnnotationMember/src/C.java
@@ -0,0 +1,3 @@
+@A() 
+public class C {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/removeDefaultFromAnnotationMember/src/C1.java b/java/java-tests/testData/compileServer/incremental/annotations/removeDefaultFromAnnotationMember/src/C1.java
new file mode 100644
index 0000000..5573488
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/removeDefaultFromAnnotationMember/src/C1.java
@@ -0,0 +1,6 @@
+public class C1 {
+
+  @A()
+  void foo() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/annotations/removeDefaultFromAnnotationMember/src/C2.java b/java/java-tests/testData/compileServer/incremental/annotations/removeDefaultFromAnnotationMember/src/C2.java
new file mode 100644
index 0000000..e776156b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/annotations/removeDefaultFromAnnotationMember/src/C2.java
@@ -0,0 +1,5 @@
+public class C2 {
+
+  @A(30) 
+  int field;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/changeName/changeCaseOfName/build.log b/java/java-tests/testData/compileServer/incremental/changeName/changeCaseOfName/build.log
new file mode 100644
index 0000000..bb28867
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/changeName/changeCaseOfName/build.log
@@ -0,0 +1,6 @@
+Cleaning output files:
+out/production/ChangeCaseOfName/A.class
+End of files
+Compiling files:
+src/a.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/changeName/changeCaseOfName/src/A.java b/java/java-tests/testData/compileServer/incremental/changeName/changeCaseOfName/src/A.java
new file mode 100644
index 0000000..61ff2ab
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/changeName/changeCaseOfName/src/A.java
@@ -0,0 +1,2 @@
+public class A {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/changeName/changeCaseOfName/src/A.java.remove b/java/java-tests/testData/compileServer/incremental/changeName/changeCaseOfName/src/A.java.remove
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/changeName/changeCaseOfName/src/A.java.remove
diff --git a/java/java-tests/testData/compileServer/incremental/changeName/changeCaseOfName/src/a.java.new b/java/java-tests/testData/compileServer/incremental/changeName/changeCaseOfName/src/a.java.new
new file mode 100644
index 0000000..a53a3b9
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/changeName/changeCaseOfName/src/a.java.new
@@ -0,0 +1,2 @@
+public class a {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/changeName/changeClassName/A.java.remove b/java/java-tests/testData/compileServer/incremental/changeName/changeClassName/A.java.remove
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/changeName/changeClassName/A.java.remove
diff --git a/java/java-tests/testData/compileServer/incremental/changeName/changeClassName/B.java.new b/java/java-tests/testData/compileServer/incremental/changeName/changeClassName/B.java.new
new file mode 100644
index 0000000..253834b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/changeName/changeClassName/B.java.new
@@ -0,0 +1,2 @@
+class B {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/changeName/changeClassName/build.log b/java/java-tests/testData/compileServer/incremental/changeName/changeClassName/build.log
new file mode 100644
index 0000000..32731d5
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/changeName/changeClassName/build.log
@@ -0,0 +1,6 @@
+Cleaning output files:
+out/production/ChangeClassName/A.class
+End of files
+Compiling files:
+src/B.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/changeName/changeClassName/src/A.java b/java/java-tests/testData/compileServer/incremental/changeName/changeClassName/src/A.java
new file mode 100644
index 0000000..a7ca22a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/changeName/changeClassName/src/A.java
@@ -0,0 +1,2 @@
+class A {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classModifiers/addStatic.log b/java/java-tests/testData/compileServer/incremental/classModifiers/addStatic.log
new file mode 100644
index 0000000..dd63cde
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classModifiers/addStatic.log
@@ -0,0 +1,13 @@
+Cleaning output files:
+out/production/AddStatic/A$B.class
+out/production/AddStatic/A.class
+End of files
+Compiling files:
+src/A.java
+End of files
+Cleaning output files:
+out/production/AddStatic/B.class
+End of files
+Compiling files:
+src/B.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/classModifiers/addStatic/A.java.new b/java/java-tests/testData/compileServer/incremental/classModifiers/addStatic/A.java.new
new file mode 100644
index 0000000..f524fdf
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classModifiers/addStatic/A.java.new
@@ -0,0 +1,15 @@
+public class A {
+    int a;
+
+    public A (int a) {
+        this.a = a;
+    }
+
+    public static class B {
+        int b;
+
+        public B (int b) {
+            this.b = b;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classModifiers/addStatic/src/A.java b/java/java-tests/testData/compileServer/incremental/classModifiers/addStatic/src/A.java
new file mode 100644
index 0000000..60c5a6a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classModifiers/addStatic/src/A.java
@@ -0,0 +1,15 @@
+public class A {
+    int a;
+
+    public A (int a) {
+        this.a = a;
+    }
+
+    public class B {
+        int b;
+
+        public B (int b) {
+            this.b = b;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classModifiers/addStatic/src/B.java b/java/java-tests/testData/compileServer/incremental/classModifiers/addStatic/src/B.java
new file mode 100644
index 0000000..df261e4
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classModifiers/addStatic/src/B.java
@@ -0,0 +1,5 @@
+public class B {
+    public A.B get () {
+        return new A(1).new B(3);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classModifiers/addStatic/src/C.java b/java/java-tests/testData/compileServer/incremental/classModifiers/addStatic/src/C.java
new file mode 100644
index 0000000..1fadca4
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classModifiers/addStatic/src/C.java
@@ -0,0 +1,5 @@
+public class C {
+    public A.B get () {
+        return new B().get();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classModifiers/decAccess.log b/java/java-tests/testData/compileServer/incremental/classModifiers/decAccess.log
new file mode 100644
index 0000000..4d2049c
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classModifiers/decAccess.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/DecAccess/impl/Service.class
+End of files
+Compiling files:
+src/impl/Service.java
+End of files
+Cleaning output files:
+out/production/DecAccess/Client.class
+End of files
+Compiling files:
+src/impl/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/classModifiers/decAccess/src/impl/Client.java b/java/java-tests/testData/compileServer/incremental/classModifiers/decAccess/src/impl/Client.java
new file mode 100644
index 0000000..0b5badb
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classModifiers/decAccess/src/impl/Client.java
@@ -0,0 +1,9 @@
+import impl.Service;
+
+import java.security.Provider;
+
+class Client {
+  public static void main(String[] args) {
+      new Service(10);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classModifiers/decAccess/src/impl/Service.java b/java/java-tests/testData/compileServer/incremental/classModifiers/decAccess/src/impl/Service.java
new file mode 100644
index 0000000..53c986c
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classModifiers/decAccess/src/impl/Service.java
@@ -0,0 +1,4 @@
+package impl;
+public class Service{
+  public Service(int a){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classModifiers/decAccess/src/impl/Service.java.new b/java/java-tests/testData/compileServer/incremental/classModifiers/decAccess/src/impl/Service.java.new
new file mode 100644
index 0000000..2db3c53
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classModifiers/decAccess/src/impl/Service.java.new
@@ -0,0 +1,4 @@
+package impl;
+class Service{
+  public Service(int a){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classModifiers/dropAbstract.log b/java/java-tests/testData/compileServer/incremental/classModifiers/dropAbstract.log
new file mode 100644
index 0000000..5d2b302d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classModifiers/dropAbstract.log
@@ -0,0 +1,6 @@
+Cleaning output files:
+out/production/DropAbstract/A.class
+End of files
+Compiling files:
+src/A.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/classModifiers/dropAbstract/A.java.new b/java/java-tests/testData/compileServer/incremental/classModifiers/dropAbstract/A.java.new
new file mode 100644
index 0000000..288e97a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classModifiers/dropAbstract/A.java.new
@@ -0,0 +1,5 @@
+public class A {
+    int f () {
+       return 0;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classModifiers/dropAbstract/src/A.java b/java/java-tests/testData/compileServer/incremental/classModifiers/dropAbstract/src/A.java
new file mode 100644
index 0000000..e37db08
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classModifiers/dropAbstract/src/A.java
@@ -0,0 +1,10 @@
+/**
+ * Created by IntelliJ IDEA.
+ * User: db
+ * Date: 21.09.11
+ * Time: 23:55
+ * To change this template use File | Settings | File Templates.
+ */
+public abstract class A {
+    abstract int f ();
+}
diff --git a/java/java-tests/testData/compileServer/incremental/classModifiers/dropAbstract/src/B.java b/java/java-tests/testData/compileServer/incremental/classModifiers/dropAbstract/src/B.java
new file mode 100644
index 0000000..885d600
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classModifiers/dropAbstract/src/B.java
@@ -0,0 +1,9 @@
+/**
+ * Created by IntelliJ IDEA.
+ * User: db
+ * Date: 21.09.11
+ * Time: 23:56
+ * To change this template use File | Settings | File Templates.
+ */
+public abstract class B extends A {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/classModifiers/dropAbstract/src/C.java b/java/java-tests/testData/compileServer/incremental/classModifiers/dropAbstract/src/C.java
new file mode 100644
index 0000000..ff73783
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classModifiers/dropAbstract/src/C.java
@@ -0,0 +1,10 @@
+/**
+ * Created by IntelliJ IDEA.
+ * User: db
+ * Date: 21.09.11
+ * Time: 23:56
+ * To change this template use File | Settings | File Templates.
+ */
+public abstract class C extends A {
+    abstract int g();
+}
diff --git a/java/java-tests/testData/compileServer/incremental/classModifiers/dropAbstract/src/M.java b/java/java-tests/testData/compileServer/incremental/classModifiers/dropAbstract/src/M.java
new file mode 100644
index 0000000..8e08c55
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classModifiers/dropAbstract/src/M.java
@@ -0,0 +1,12 @@
+/**
+ * Created by IntelliJ IDEA.
+ * User: db
+ * Date: 21.09.11
+ * Time: 23:57
+ * To change this template use File | Settings | File Templates.
+ */
+public class M {
+    public int g (final A a, final B b, final C c){
+        return a.f() + b.f() + c.f() + c.g();
+    }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/classModifiers/removeStatic.log b/java/java-tests/testData/compileServer/incremental/classModifiers/removeStatic.log
new file mode 100644
index 0000000..f7e25a8
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classModifiers/removeStatic.log
@@ -0,0 +1,13 @@
+Cleaning output files:
+out/production/RemoveStatic/A$B.class
+out/production/RemoveStatic/A.class
+End of files
+Compiling files:
+src/A.java
+End of files
+Cleaning output files:
+out/production/RemoveStatic/B.class
+End of files
+Compiling files:
+src/B.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/classModifiers/removeStatic/A.java.new b/java/java-tests/testData/compileServer/incremental/classModifiers/removeStatic/A.java.new
new file mode 100644
index 0000000..60c5a6a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classModifiers/removeStatic/A.java.new
@@ -0,0 +1,15 @@
+public class A {
+    int a;
+
+    public A (int a) {
+        this.a = a;
+    }
+
+    public class B {
+        int b;
+
+        public B (int b) {
+            this.b = b;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classModifiers/removeStatic/src/A.java b/java/java-tests/testData/compileServer/incremental/classModifiers/removeStatic/src/A.java
new file mode 100644
index 0000000..f524fdf
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classModifiers/removeStatic/src/A.java
@@ -0,0 +1,15 @@
+public class A {
+    int a;
+
+    public A (int a) {
+        this.a = a;
+    }
+
+    public static class B {
+        int b;
+
+        public B (int b) {
+            this.b = b;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classModifiers/removeStatic/src/B.java b/java/java-tests/testData/compileServer/incremental/classModifiers/removeStatic/src/B.java
new file mode 100644
index 0000000..6ecc572
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classModifiers/removeStatic/src/B.java
@@ -0,0 +1,5 @@
+public class B {
+    public A.B get () {
+        return new A.B(3);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classModifiers/removeStatic/src/C.java b/java/java-tests/testData/compileServer/incremental/classModifiers/removeStatic/src/C.java
new file mode 100644
index 0000000..1fadca4
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classModifiers/removeStatic/src/C.java
@@ -0,0 +1,5 @@
+public class C {
+    public A.B get () {
+        return new B().get();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classModifiers/setAbstract.log b/java/java-tests/testData/compileServer/incremental/classModifiers/setAbstract.log
new file mode 100644
index 0000000..80b0fff
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classModifiers/setAbstract.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/SetAbstract/Service.class
+End of files
+Compiling files:
+src/Service.java
+End of files
+Cleaning output files:
+out/production/SetAbstract/Client.class
+End of files
+Compiling files:
+src/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/classModifiers/setAbstract/Service.java.new b/java/java-tests/testData/compileServer/incremental/classModifiers/setAbstract/Service.java.new
new file mode 100644
index 0000000..d53ff02
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classModifiers/setAbstract/Service.java.new
@@ -0,0 +1,3 @@
+public abstract class Service{
+  public void foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classModifiers/setAbstract/src/Client.java b/java/java-tests/testData/compileServer/incremental/classModifiers/setAbstract/src/Client.java
new file mode 100644
index 0000000..7b0ea7f
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classModifiers/setAbstract/src/Client.java
@@ -0,0 +1,6 @@
+class Client {
+  public static void main(String[] args) {
+    Service service = new Service();
+    service.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classModifiers/setAbstract/src/N.java b/java/java-tests/testData/compileServer/incremental/classModifiers/setAbstract/src/N.java
new file mode 100644
index 0000000..6871cff
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classModifiers/setAbstract/src/N.java
@@ -0,0 +1,5 @@
+class N {
+    void f (Service s) {
+        s.foo ();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classModifiers/setAbstract/src/Service.java b/java/java-tests/testData/compileServer/incremental/classModifiers/setAbstract/src/Service.java
new file mode 100644
index 0000000..16a76fe
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classModifiers/setAbstract/src/Service.java
@@ -0,0 +1,3 @@
+public class Service{
+  public void foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classModifiers/setFinal.log b/java/java-tests/testData/compileServer/incremental/classModifiers/setFinal.log
new file mode 100644
index 0000000..0099209
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classModifiers/setFinal.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/SetFinal/Service.class
+End of files
+Compiling files:
+src/Service.java
+End of files
+Cleaning output files:
+out/production/SetFinal/SubService.class
+End of files
+Compiling files:
+src/SubService.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/classModifiers/setFinal/Service.java.new b/java/java-tests/testData/compileServer/incremental/classModifiers/setFinal/Service.java.new
new file mode 100644
index 0000000..8e5bc97
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classModifiers/setFinal/Service.java.new
@@ -0,0 +1,3 @@
+public final class Service{
+  public void foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classModifiers/setFinal/src/Service.java b/java/java-tests/testData/compileServer/incremental/classModifiers/setFinal/src/Service.java
new file mode 100644
index 0000000..16a76fe
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classModifiers/setFinal/src/Service.java
@@ -0,0 +1,3 @@
+public class Service{
+  public void foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classModifiers/setFinal/src/SubService.java b/java/java-tests/testData/compileServer/incremental/classModifiers/setFinal/src/SubService.java
new file mode 100644
index 0000000..e00fe18
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classModifiers/setFinal/src/SubService.java
@@ -0,0 +1,2 @@
+public class SubService extends Service {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classModifiers/setFinal1.log b/java/java-tests/testData/compileServer/incremental/classModifiers/setFinal1.log
new file mode 100644
index 0000000..abdcc10
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classModifiers/setFinal1.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/SetFinal1/A.class
+End of files
+Compiling files:
+src/A.java
+End of files
+Cleaning output files:
+out/production/SetFinal1/B.class
+End of files
+Compiling files:
+src/B.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/classModifiers/setFinal1/A.java.new b/java/java-tests/testData/compileServer/incremental/classModifiers/setFinal1/A.java.new
new file mode 100644
index 0000000..3973949
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classModifiers/setFinal1/A.java.new
@@ -0,0 +1,2 @@
+public final class A {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classModifiers/setFinal1/src/A.java b/java/java-tests/testData/compileServer/incremental/classModifiers/setFinal1/src/A.java
new file mode 100644
index 0000000..61ff2ab
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classModifiers/setFinal1/src/A.java
@@ -0,0 +1,2 @@
+public class A {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classModifiers/setFinal1/src/B.java b/java/java-tests/testData/compileServer/incremental/classModifiers/setFinal1/src/B.java
new file mode 100644
index 0000000..a74cea9
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classModifiers/setFinal1/src/B.java
@@ -0,0 +1,9 @@
+public class B {
+  void foo() {
+    A a = bar();
+    if (a instanceof I) {
+    }
+  }
+
+  A bar() {return null;}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classModifiers/setFinal1/src/I.java b/java/java-tests/testData/compileServer/incremental/classModifiers/setFinal1/src/I.java
new file mode 100644
index 0000000..39f1b25
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classModifiers/setFinal1/src/I.java
@@ -0,0 +1,2 @@
+public interface I {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/addExtends.log b/java/java-tests/testData/compileServer/incremental/classProperties/addExtends.log
new file mode 100644
index 0000000..e94fa50
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/addExtends.log
@@ -0,0 +1,14 @@
+Cleaning output files:
+out/production/AddExtends/Super.class
+End of files
+Compiling files:
+src/Super.java
+End of files
+Cleaning output files:
+out/production/AddExtends/Client2.class
+out/production/AddExtends/Client3.class
+End of files
+Compiling files:
+src/Client2.java
+src/Client3.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/addExtends/Super.java.new b/java/java-tests/testData/compileServer/incremental/classProperties/addExtends/Super.java.new
new file mode 100644
index 0000000..98449a3
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/addExtends/Super.java.new
@@ -0,0 +1,3 @@
+class Super extends Hyper {
+  char s = 's';
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/addExtends/src/Client.java b/java/java-tests/testData/compileServer/incremental/classProperties/addExtends/src/Client.java
new file mode 100644
index 0000000..37dea76
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/addExtends/src/Client.java
@@ -0,0 +1,5 @@
+class Client {
+  public static void main(String[] args) {
+    new Super();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/addExtends/src/Client2.java b/java/java-tests/testData/compileServer/incremental/classProperties/addExtends/src/Client2.java
new file mode 100644
index 0000000..8900d02
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/addExtends/src/Client2.java
@@ -0,0 +1,4 @@
+class Client2 extends Super {
+  public static void main(String[] args) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/addExtends/src/Client3.java b/java/java-tests/testData/compileServer/incremental/classProperties/addExtends/src/Client3.java
new file mode 100644
index 0000000..673fd84
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/addExtends/src/Client3.java
@@ -0,0 +1,4 @@
+class Client3 extends Client2 {
+  public static void main(String[] args) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/addExtends/src/Hyper.java b/java/java-tests/testData/compileServer/incremental/classProperties/addExtends/src/Hyper.java
new file mode 100644
index 0000000..c9e2d78
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/addExtends/src/Hyper.java
@@ -0,0 +1,3 @@
+class Hyper {
+  char h = 'h';
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/addExtends/src/Super.java b/java/java-tests/testData/compileServer/incremental/classProperties/addExtends/src/Super.java
new file mode 100644
index 0000000..7e2e5e0
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/addExtends/src/Super.java
@@ -0,0 +1,3 @@
+class Super {
+  char s = 's';
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/addImplements.log b/java/java-tests/testData/compileServer/incremental/classProperties/addImplements.log
new file mode 100644
index 0000000..ef3d663
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/addImplements.log
@@ -0,0 +1,14 @@
+Cleaning output files:
+out/production/AddImplements/Super.class
+End of files
+Compiling files:
+src/Super.java
+End of files
+Cleaning output files:
+out/production/AddImplements/Client2.class
+out/production/AddImplements/Client3.class
+End of files
+Compiling files:
+src/Client2.java
+src/Client3.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/addImplements/Super.java.new b/java/java-tests/testData/compileServer/incremental/classProperties/addImplements/Super.java.new
new file mode 100644
index 0000000..c14289b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/addImplements/Super.java.new
@@ -0,0 +1,3 @@
+class Super implements Hyper {
+  char s = 's';
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/addImplements/src/Client.java b/java/java-tests/testData/compileServer/incremental/classProperties/addImplements/src/Client.java
new file mode 100644
index 0000000..37dea76
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/addImplements/src/Client.java
@@ -0,0 +1,5 @@
+class Client {
+  public static void main(String[] args) {
+    new Super();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/addImplements/src/Client2.java b/java/java-tests/testData/compileServer/incremental/classProperties/addImplements/src/Client2.java
new file mode 100644
index 0000000..8900d02
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/addImplements/src/Client2.java
@@ -0,0 +1,4 @@
+class Client2 extends Super {
+  public static void main(String[] args) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/addImplements/src/Client3.java b/java/java-tests/testData/compileServer/incremental/classProperties/addImplements/src/Client3.java
new file mode 100644
index 0000000..673fd84
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/addImplements/src/Client3.java
@@ -0,0 +1,4 @@
+class Client3 extends Client2 {
+  public static void main(String[] args) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/addImplements/src/Hyper.java b/java/java-tests/testData/compileServer/incremental/classProperties/addImplements/src/Hyper.java
new file mode 100644
index 0000000..f20c88d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/addImplements/src/Hyper.java
@@ -0,0 +1,2 @@
+interface Hyper {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/addImplements/src/Super.java b/java/java-tests/testData/compileServer/incremental/classProperties/addImplements/src/Super.java
new file mode 100644
index 0000000..7e2e5e0
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/addImplements/src/Super.java
@@ -0,0 +1,3 @@
+class Super {
+  char s = 's';
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/changeExtends.log b/java/java-tests/testData/compileServer/incremental/classProperties/changeExtends.log
new file mode 100644
index 0000000..0cba040
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/changeExtends.log
@@ -0,0 +1,16 @@
+Cleaning output files:
+out/production/ChangeExtends/Super.class
+End of files
+Compiling files:
+src/Super.java
+End of files
+Cleaning output files:
+out/production/ChangeExtends/Client.class
+out/production/ChangeExtends/Client2.class
+out/production/ChangeExtends/Client3.class
+End of files
+Compiling files:
+src/Client.java
+src/Client2.java
+src/Client3.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/changeExtends/Super.java.new b/java/java-tests/testData/compileServer/incremental/classProperties/changeExtends/Super.java.new
new file mode 100644
index 0000000..dde492c
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/changeExtends/Super.java.new
@@ -0,0 +1,3 @@
+class Super extends AnotherHyper {
+  char s = 's';
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/changeExtends/src/AnotherHyper.java b/java/java-tests/testData/compileServer/incremental/classProperties/changeExtends/src/AnotherHyper.java
new file mode 100644
index 0000000..33e50d8
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/changeExtends/src/AnotherHyper.java
@@ -0,0 +1,2 @@
+class AnotherHyper {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/changeExtends/src/Client.java b/java/java-tests/testData/compileServer/incremental/classProperties/changeExtends/src/Client.java
new file mode 100644
index 0000000..37dea76
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/changeExtends/src/Client.java
@@ -0,0 +1,5 @@
+class Client {
+  public static void main(String[] args) {
+    new Super();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/changeExtends/src/Client2.java b/java/java-tests/testData/compileServer/incremental/classProperties/changeExtends/src/Client2.java
new file mode 100644
index 0000000..8900d02
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/changeExtends/src/Client2.java
@@ -0,0 +1,4 @@
+class Client2 extends Super {
+  public static void main(String[] args) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/changeExtends/src/Client3.java b/java/java-tests/testData/compileServer/incremental/classProperties/changeExtends/src/Client3.java
new file mode 100644
index 0000000..673fd84
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/changeExtends/src/Client3.java
@@ -0,0 +1,4 @@
+class Client3 extends Client2 {
+  public static void main(String[] args) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/changeExtends/src/Hyper.java b/java/java-tests/testData/compileServer/incremental/classProperties/changeExtends/src/Hyper.java
new file mode 100644
index 0000000..c9e2d78
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/changeExtends/src/Hyper.java
@@ -0,0 +1,3 @@
+class Hyper {
+  char h = 'h';
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/changeExtends/src/Super.java b/java/java-tests/testData/compileServer/incremental/classProperties/changeExtends/src/Super.java
new file mode 100644
index 0000000..98449a3
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/changeExtends/src/Super.java
@@ -0,0 +1,3 @@
+class Super extends Hyper {
+  char s = 's';
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/changeExtends2.log b/java/java-tests/testData/compileServer/incremental/classProperties/changeExtends2.log
new file mode 100644
index 0000000..d0f22e4
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/changeExtends2.log
@@ -0,0 +1,13 @@
+Cleaning output files:
+out/production/ChangeExtends2/Victim$SubVictim.class
+out/production/ChangeExtends2/Victim.class
+End of files
+Compiling files:
+src/Victim.java
+End of files
+Cleaning output files:
+out/production/ChangeExtends2/Main.class
+End of files
+Compiling files:
+src/Main.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/changeExtends2/Victim.java.new b/java/java-tests/testData/compileServer/incremental/classProperties/changeExtends2/Victim.java.new
new file mode 100644
index 0000000..a7c5c2e
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/changeExtends2/Victim.java.new
@@ -0,0 +1,12 @@
+/**
+ * Created with IntelliJ IDEA.
+ * User: db
+ * Date: 20.02.12
+ * Time: 13:19
+ * To change this template use File | Settings | File Templates.
+ */
+public class Victim extends Super {
+    public static class SubVictim extends Victim {
+
+    }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/changeExtends2/src/Main.java b/java/java-tests/testData/compileServer/incremental/classProperties/changeExtends2/src/Main.java
new file mode 100644
index 0000000..9fdd7c6
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/changeExtends2/src/Main.java
@@ -0,0 +1,20 @@
+/**
+ * Created with IntelliJ IDEA.
+ * User: db
+ * Date: 20.02.12
+ * Time: 13:19
+ * To change this template use File | Settings | File Templates.
+ */
+public class Main {
+    static void doMe (final Puper x) {
+        System.out.println("Puper!");
+    }
+
+    static void doMe (final Super x){
+        System.out.println("Super!");
+    }
+
+    public static void main (String[] args){
+        doMe(new Victim.SubVictim());
+    }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/changeExtends2/src/Puper.java b/java/java-tests/testData/compileServer/incremental/classProperties/changeExtends2/src/Puper.java
new file mode 100644
index 0000000..93cca12
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/changeExtends2/src/Puper.java
@@ -0,0 +1,9 @@
+/**
+ * Created with IntelliJ IDEA.
+ * User: db
+ * Date: 20.02.12
+ * Time: 13:19
+ * To change this template use File | Settings | File Templates.
+ */
+public class Puper {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/changeExtends2/src/Super.java b/java/java-tests/testData/compileServer/incremental/classProperties/changeExtends2/src/Super.java
new file mode 100644
index 0000000..bd70f58
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/changeExtends2/src/Super.java
@@ -0,0 +1,9 @@
+/**
+ * Created with IntelliJ IDEA.
+ * User: db
+ * Date: 20.02.12
+ * Time: 13:19
+ * To change this template use File | Settings | File Templates.
+ */
+public class Super {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/changeExtends2/src/Victim.java b/java/java-tests/testData/compileServer/incremental/classProperties/changeExtends2/src/Victim.java
new file mode 100644
index 0000000..e871cfb
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/changeExtends2/src/Victim.java
@@ -0,0 +1,12 @@
+/**
+ * Created with IntelliJ IDEA.
+ * User: db
+ * Date: 20.02.12
+ * Time: 13:19
+ * To change this template use File | Settings | File Templates.
+ */
+public class Victim extends Puper {
+    public static class SubVictim extends Victim {
+
+    }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/removeExtends.log b/java/java-tests/testData/compileServer/incremental/classProperties/removeExtends.log
new file mode 100644
index 0000000..cb5d9ea
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/removeExtends.log
@@ -0,0 +1,14 @@
+Cleaning output files:
+out/production/RemoveExtends/Super.class
+End of files
+Compiling files:
+src/Super.java
+End of files
+Cleaning output files:
+out/production/RemoveExtends/Client.class
+out/production/RemoveExtends/Client2.class
+End of files
+Compiling files:
+src/Client.java
+src/Client2.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/removeExtends/Super.java.new b/java/java-tests/testData/compileServer/incremental/classProperties/removeExtends/Super.java.new
new file mode 100644
index 0000000..7e2e5e0
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/removeExtends/Super.java.new
@@ -0,0 +1,3 @@
+class Super {
+  char s = 's';
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/removeExtends/src/Client.java b/java/java-tests/testData/compileServer/incremental/classProperties/removeExtends/src/Client.java
new file mode 100644
index 0000000..2697446
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/removeExtends/src/Client.java
@@ -0,0 +1,6 @@
+class Client {
+  public static void main(String[] args) {
+    Hyper h = new Super();
+    System.out.println(h.h);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/removeExtends/src/Client2.java b/java/java-tests/testData/compileServer/incremental/classProperties/removeExtends/src/Client2.java
new file mode 100644
index 0000000..8900d02
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/removeExtends/src/Client2.java
@@ -0,0 +1,4 @@
+class Client2 extends Super {
+  public static void main(String[] args) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/removeExtends/src/Hyper.java b/java/java-tests/testData/compileServer/incremental/classProperties/removeExtends/src/Hyper.java
new file mode 100644
index 0000000..c9e2d78
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/removeExtends/src/Hyper.java
@@ -0,0 +1,3 @@
+class Hyper {
+  char h = 'h';
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/removeExtends/src/Super.java b/java/java-tests/testData/compileServer/incremental/classProperties/removeExtends/src/Super.java
new file mode 100644
index 0000000..98449a3
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/removeExtends/src/Super.java
@@ -0,0 +1,3 @@
+class Super extends Hyper {
+  char s = 's';
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/removeExtendsAffectsFieldAccess.log b/java/java-tests/testData/compileServer/incremental/classProperties/removeExtendsAffectsFieldAccess.log
new file mode 100644
index 0000000..b5fcfd0
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/removeExtendsAffectsFieldAccess.log
@@ -0,0 +1,14 @@
+Cleaning output files:
+out/production/RemoveExtendsAffectsFieldAccess/GoalSwitch.class
+End of files
+Compiling files:
+src/GoalSwitch.java
+End of files
+Cleaning output files:
+out/production/RemoveExtendsAffectsFieldAccess/FarClient.class
+out/production/RemoveExtendsAffectsFieldAccess/SwitchProvider.class
+End of files
+Compiling files:
+src/FarClient.java
+src/SwitchProvider.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/removeExtendsAffectsFieldAccess/GoalSwitch.java.new b/java/java-tests/testData/compileServer/incremental/classProperties/removeExtendsAffectsFieldAccess/GoalSwitch.java.new
new file mode 100644
index 0000000..16eb722
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/removeExtendsAffectsFieldAccess/GoalSwitch.java.new
@@ -0,0 +1,2 @@
+public class GoalSwitch {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/removeExtendsAffectsFieldAccess/src/FarClient.java b/java/java-tests/testData/compileServer/incremental/classProperties/removeExtendsAffectsFieldAccess/src/FarClient.java
new file mode 100644
index 0000000..ad75004
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/removeExtendsAffectsFieldAccess/src/FarClient.java
@@ -0,0 +1,5 @@
+public class FarClient {
+    public void context() {
+        FarGoal goal1 = new SwitchProvider().field;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/removeExtendsAffectsFieldAccess/src/FarGoal.java b/java/java-tests/testData/compileServer/incremental/classProperties/removeExtendsAffectsFieldAccess/src/FarGoal.java
new file mode 100644
index 0000000..99f01d8
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/removeExtendsAffectsFieldAccess/src/FarGoal.java
@@ -0,0 +1,2 @@
+public class FarGoal {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/removeExtendsAffectsFieldAccess/src/GoalSwitch.java b/java/java-tests/testData/compileServer/incremental/classProperties/removeExtendsAffectsFieldAccess/src/GoalSwitch.java
new file mode 100644
index 0000000..0a689b2
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/removeExtendsAffectsFieldAccess/src/GoalSwitch.java
@@ -0,0 +1,2 @@
+public class GoalSwitch extends FarGoal{
+}
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/removeExtendsAffectsFieldAccess/src/SwitchProvider.java b/java/java-tests/testData/compileServer/incremental/classProperties/removeExtendsAffectsFieldAccess/src/SwitchProvider.java
new file mode 100644
index 0000000..caa9aed
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/removeExtendsAffectsFieldAccess/src/SwitchProvider.java
@@ -0,0 +1,3 @@
+public class SwitchProvider {
+    public GoalSwitch field;
+}
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/removeExtendsAffectsMethodAccess.log b/java/java-tests/testData/compileServer/incremental/classProperties/removeExtendsAffectsMethodAccess.log
new file mode 100644
index 0000000..61a328d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/removeExtendsAffectsMethodAccess.log
@@ -0,0 +1,14 @@
+Cleaning output files:
+out/production/RemoveExtendsAffectsMethodAccess/GoalSwitch.class
+End of files
+Compiling files:
+src/GoalSwitch.java
+End of files
+Cleaning output files:
+out/production/RemoveExtendsAffectsMethodAccess/FarClient.class
+out/production/RemoveExtendsAffectsMethodAccess/SwitchProvider.class
+End of files
+Compiling files:
+src/FarClient.java
+src/SwitchProvider.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/removeExtendsAffectsMethodAccess/GoalSwitch.java.new b/java/java-tests/testData/compileServer/incremental/classProperties/removeExtendsAffectsMethodAccess/GoalSwitch.java.new
new file mode 100644
index 0000000..16eb722
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/removeExtendsAffectsMethodAccess/GoalSwitch.java.new
@@ -0,0 +1,2 @@
+public class GoalSwitch {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/removeExtendsAffectsMethodAccess/src/FarClient.java b/java/java-tests/testData/compileServer/incremental/classProperties/removeExtendsAffectsMethodAccess/src/FarClient.java
new file mode 100644
index 0000000..2b1cc0e
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/removeExtendsAffectsMethodAccess/src/FarClient.java
@@ -0,0 +1,5 @@
+public class FarClient {
+    public void context() {
+        FarGoal goal2 = new SwitchProvider().method();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/removeExtendsAffectsMethodAccess/src/FarGoal.java b/java/java-tests/testData/compileServer/incremental/classProperties/removeExtendsAffectsMethodAccess/src/FarGoal.java
new file mode 100644
index 0000000..99f01d8
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/removeExtendsAffectsMethodAccess/src/FarGoal.java
@@ -0,0 +1,2 @@
+public class FarGoal {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/removeExtendsAffectsMethodAccess/src/GoalSwitch.java b/java/java-tests/testData/compileServer/incremental/classProperties/removeExtendsAffectsMethodAccess/src/GoalSwitch.java
new file mode 100644
index 0000000..0a689b2
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/removeExtendsAffectsMethodAccess/src/GoalSwitch.java
@@ -0,0 +1,2 @@
+public class GoalSwitch extends FarGoal{
+}
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/removeExtendsAffectsMethodAccess/src/SwitchProvider.java b/java/java-tests/testData/compileServer/incremental/classProperties/removeExtendsAffectsMethodAccess/src/SwitchProvider.java
new file mode 100644
index 0000000..7b635d0
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/removeExtendsAffectsMethodAccess/src/SwitchProvider.java
@@ -0,0 +1,5 @@
+public class SwitchProvider {
+    public GoalSwitch method() {
+        return new GoalSwitch();
+    }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements.log b/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements.log
new file mode 100644
index 0000000..9ea4d44
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements.log
@@ -0,0 +1,14 @@
+Cleaning output files:
+out/production/RemoveImplements/Super.class
+End of files
+Compiling files:
+src/Super.java
+End of files
+Cleaning output files:
+out/production/RemoveImplements/Client.class
+out/production/RemoveImplements/Client2.class
+End of files
+Compiling files:
+src/Client.java
+src/Client2.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements/Super.java.new b/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements/Super.java.new
new file mode 100644
index 0000000..37b0cdb16
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements/Super.java.new
@@ -0,0 +1,4 @@
+class Super implements java.lang.Runnable {
+  public void run() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements/src/Client.java b/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements/src/Client.java
new file mode 100644
index 0000000..9d9ae54
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements/src/Client.java
@@ -0,0 +1,5 @@
+class Client {
+  public static void main(String[] args) {
+   Hyper h = new Super();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements/src/Client2.java b/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements/src/Client2.java
new file mode 100644
index 0000000..8900d02
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements/src/Client2.java
@@ -0,0 +1,4 @@
+class Client2 extends Super {
+  public static void main(String[] args) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements/src/Hyper.java b/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements/src/Hyper.java
new file mode 100644
index 0000000..f20c88d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements/src/Hyper.java
@@ -0,0 +1,2 @@
+interface Hyper {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements/src/Super.java b/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements/src/Super.java
new file mode 100644
index 0000000..2ecb5c1
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements/src/Super.java
@@ -0,0 +1,4 @@
+class Super implements Hyper, java.lang.Runnable {
+  public void run() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements2.log b/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements2.log
new file mode 100644
index 0000000..cdb3573
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements2.log
@@ -0,0 +1,14 @@
+Cleaning output files:
+out/production/RemoveImplements2/Test.class
+End of files
+Compiling files:
+src/Test.java
+End of files
+Cleaning output files:
+out/production/RemoveImplements2/Client.class
+out/production/RemoveImplements2/ClientImpl.class
+End of files
+Compiling files:
+src/Client.java
+src/ClientImpl.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements2/Test.java.new b/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements2/Test.java.new
new file mode 100644
index 0000000..6e49582
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements2/Test.java.new
@@ -0,0 +1,5 @@
+
+public class Test {
+  public void run() {
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements2/src/Client.java b/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements2/src/Client.java
new file mode 100644
index 0000000..0fcde7b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements2/src/Client.java
@@ -0,0 +1,11 @@
+
+import javax.swing.*;
+
+public abstract class Client {
+  {
+    Test test = foo();
+    SwingUtilities.invokeLater(test);
+  }
+
+  public abstract Test foo();
+}
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements2/src/ClientImpl.java b/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements2/src/ClientImpl.java
new file mode 100644
index 0000000..db0dc7e
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements2/src/ClientImpl.java
@@ -0,0 +1,10 @@
+public class ClientImpl extends Client {
+  public Test foo() {
+    return new Test();
+  }
+
+  public static void main(String[] args) {
+    new ClientImpl();
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements2/src/Test.java b/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements2/src/Test.java
new file mode 100644
index 0000000..a4868b8
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements2/src/Test.java
@@ -0,0 +1,5 @@
+
+public class Test implements Runnable{
+  public void run() {
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements3.log b/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements3.log
new file mode 100644
index 0000000..e307e16
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements3.log
@@ -0,0 +1,14 @@
+Cleaning output files:
+out/production/RemoveImplements3/Test.class
+End of files
+Compiling files:
+src/Test.java
+End of files
+Cleaning output files:
+out/production/RemoveImplements3/Client.class
+out/production/RemoveImplements3/ClientImpl.class
+End of files
+Compiling files:
+src/Client.java
+src/ClientImpl.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements3/Test.java.new b/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements3/Test.java.new
new file mode 100644
index 0000000..6e49582
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements3/Test.java.new
@@ -0,0 +1,5 @@
+
+public class Test {
+  public void run() {
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements3/src/Client.java b/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements3/src/Client.java
new file mode 100644
index 0000000..5ce9699
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements3/src/Client.java
@@ -0,0 +1,11 @@
+
+import javax.swing.*;
+
+public abstract class Client {
+  {
+    Test test = (Test)foo();
+    SwingUtilities.invokeLater(test);
+  }
+
+  public abstract Runnable foo();
+}
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements3/src/ClientImpl.java b/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements3/src/ClientImpl.java
new file mode 100644
index 0000000..0927aa19
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements3/src/ClientImpl.java
@@ -0,0 +1,10 @@
+public class ClientImpl extends Client {
+  public Runnable foo() {
+    return new Test();
+  }
+
+  public static void main(String[] args) {
+    new ClientImpl();
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements3/src/Test.java b/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements3/src/Test.java
new file mode 100644
index 0000000..a4868b8
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/classProperties/removeImplements3/src/Test.java
@@ -0,0 +1,5 @@
+
+public class Test implements Runnable{
+  public void run() {
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/common/addClass.log b/java/java-tests/testData/compileServer/incremental/common/addClass.log
new file mode 100644
index 0000000..5aaf6b1
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/addClass.log
@@ -0,0 +1,9 @@
+Compiling files:
+src/Util.java
+End of files
+Cleaning output files:
+out/production/addClass/Client.class
+End of files
+Compiling files:
+src/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/common/addClass/.idea/misc.xml b/java/java-tests/testData/compileServer/incremental/common/addClass/.idea/misc.xml
new file mode 100644
index 0000000..9a249d2
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/addClass/.idea/misc.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="EntryPointsManager">
+    <entry_points version="2.0" />
+  </component>
+  <component name="ProjectResources">
+    <default-html-doctype>http://www.w3.org/1999/xhtml</default-html-doctype>
+  </component>
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_6" assert-keyword="true" jdk-15="true" project-jdk-name="IDEA jdk" project-jdk-type="JavaSDK">
+    <output url="file://$PROJECT_DIR$/out" />
+  </component>
+</project>
+
diff --git a/java/java-tests/testData/compileServer/incremental/common/addClass/.idea/modules.xml b/java/java-tests/testData/compileServer/incremental/common/addClass/.idea/modules.xml
new file mode 100644
index 0000000..ecefc64
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/addClass/.idea/modules.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/addClass.iml" filepath="$PROJECT_DIR$/addClass.iml" />
+      <module fileurl="file://$PROJECT_DIR$/common/common.iml" filepath="$PROJECT_DIR$/common/common.iml" />
+    </modules>
+  </component>
+</project>
+
diff --git a/java/java-tests/testData/compileServer/incremental/common/addClass/Util.java.new b/java/java-tests/testData/compileServer/incremental/common/addClass/Util.java.new
new file mode 100644
index 0000000..1141151
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/addClass/Util.java.new
@@ -0,0 +1,5 @@
+public class Util {
+  public static void foo (int x) {
+
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/common/addClass/addClass.iml b/java/java-tests/testData/compileServer/incremental/common/addClass/addClass.iml
new file mode 100644
index 0000000..0898b54
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/addClass/addClass.iml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="jdk" jdkName="IDEA jdk" jdkType="JavaSDK" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module" module-name="common" />
+  </component>
+</module>
+
diff --git a/java/java-tests/testData/compileServer/incremental/common/addClass/common/common.iml b/java/java-tests/testData/compileServer/incremental/common/addClass/common/common.iml
new file mode 100644
index 0000000..d5c0743
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/addClass/common/common.iml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>
+
diff --git a/java/java-tests/testData/compileServer/incremental/common/addClass/common/src/Util.java b/java/java-tests/testData/compileServer/incremental/common/addClass/common/src/Util.java
new file mode 100644
index 0000000..ce35aff
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/addClass/common/src/Util.java
@@ -0,0 +1,12 @@
+/**
+ * Created with IntelliJ IDEA.
+ * User: db
+ * Date: 11.04.12
+ * Time: 11:43
+ * To change this template use File | Settings | File Templates.
+ */
+public class Util {
+    public static void foo () {
+
+    }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/common/addClass/src/Client.java b/java/java-tests/testData/compileServer/incremental/common/addClass/src/Client.java
new file mode 100644
index 0000000..04b7ad7
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/addClass/src/Client.java
@@ -0,0 +1,12 @@
+/**
+ * Created with IntelliJ IDEA.
+ * User: db
+ * Date: 11.04.12
+ * Time: 11:43
+ * To change this template use File | Settings | File Templates.
+ */
+public class Client {
+    {
+        Util.foo();
+    }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/common/anonymous.log b/java/java-tests/testData/compileServer/incremental/common/anonymous.log
new file mode 100644
index 0000000..2c24cef
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/anonymous.log
@@ -0,0 +1,13 @@
+Cleaning output files:
+out/production/Anonymous/Server.class
+End of files
+Compiling files:
+src/Server.java
+End of files
+Cleaning output files:
+out/production/Anonymous/Client$1.class
+out/production/Anonymous/Client.class
+End of files
+Compiling files:
+src/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/common/anonymous/Server.java.new b/java/java-tests/testData/compileServer/incremental/common/anonymous/Server.java.new
new file mode 100644
index 0000000..d796f85
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/anonymous/Server.java.new
@@ -0,0 +1,4 @@
+class Server{
+  static void foo(int a){
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/common/anonymous/src/Client.java b/java/java-tests/testData/compileServer/incremental/common/anonymous/src/Client.java
new file mode 100644
index 0000000..c92b2bd
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/anonymous/src/Client.java
@@ -0,0 +1,9 @@
+class Client{
+  void foo(){
+    Runnable runnable = new Runnable(){
+      public void run(){
+        Server.foo();
+      }
+    };
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/common/anonymous/src/Server.java b/java/java-tests/testData/compileServer/incremental/common/anonymous/src/Server.java
new file mode 100644
index 0000000..60c707b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/anonymous/src/Server.java
@@ -0,0 +1,4 @@
+class Server{
+  static void foo(){
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/common/changeDefinitionToClass.log b/java/java-tests/testData/compileServer/incremental/common/changeDefinitionToClass.log
new file mode 100644
index 0000000..b2d8cb7
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/changeDefinitionToClass.log
@@ -0,0 +1,13 @@
+Cleaning output files:
+out/production/ChangeDefinitionToClass/Server.class
+End of files
+Compiling files:
+src/Server.java
+End of files
+Cleaning output files:
+out/production/ChangeDefinitionToClass/Client$1.class
+out/production/ChangeDefinitionToClass/Client.class
+End of files
+Compiling files:
+src/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/common/changeDefinitionToClass/Server.java.new b/java/java-tests/testData/compileServer/incremental/common/changeDefinitionToClass/Server.java.new
new file mode 100644
index 0000000..411a469
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/changeDefinitionToClass/Server.java.new
@@ -0,0 +1,3 @@
+abstract class Server{
+  public abstract void foo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/common/changeDefinitionToClass/src/Client.java b/java/java-tests/testData/compileServer/incremental/common/changeDefinitionToClass/src/Client.java
new file mode 100644
index 0000000..76fdc78
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/changeDefinitionToClass/src/Client.java
@@ -0,0 +1,10 @@
+class Client{
+  public static void main(String[] args) {
+    Server server = new Server() {
+      public void foo() {
+        System.out.println("foo called");
+      }
+    };
+    server.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/common/changeDefinitionToClass/src/Server.java b/java/java-tests/testData/compileServer/incremental/common/changeDefinitionToClass/src/Server.java
new file mode 100644
index 0000000..4718007
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/changeDefinitionToClass/src/Server.java
@@ -0,0 +1,3 @@
+interface Server{
+  public void foo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/common/changeDefinitionToClass2.log b/java/java-tests/testData/compileServer/incremental/common/changeDefinitionToClass2.log
new file mode 100644
index 0000000..bca8ab2
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/changeDefinitionToClass2.log
@@ -0,0 +1,15 @@
+Cleaning output files:
+out/production/ChangeDefinitionToClass2/Server.class
+End of files
+Compiling files:
+src/Server.java
+End of files
+Cleaning output files:
+out/production/ChangeDefinitionToClass2/Client.class
+out/production/ChangeDefinitionToClass2/Factory$1.class
+out/production/ChangeDefinitionToClass2/Factory.class
+End of files
+Compiling files:
+src/Client.java
+src/Factory.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/common/changeDefinitionToClass2/Server.java.new b/java/java-tests/testData/compileServer/incremental/common/changeDefinitionToClass2/Server.java.new
new file mode 100644
index 0000000..411a469
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/changeDefinitionToClass2/Server.java.new
@@ -0,0 +1,3 @@
+abstract class Server{
+  public abstract void foo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/common/changeDefinitionToClass2/src/Client.java b/java/java-tests/testData/compileServer/incremental/common/changeDefinitionToClass2/src/Client.java
new file mode 100644
index 0000000..3885e38
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/changeDefinitionToClass2/src/Client.java
@@ -0,0 +1,6 @@
+class Client{
+  public static void main(String[] args) {
+    Server server = Factory.createServer();
+    server.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/common/changeDefinitionToClass2/src/Factory.java b/java/java-tests/testData/compileServer/incremental/common/changeDefinitionToClass2/src/Factory.java
new file mode 100644
index 0000000..8e78cf4
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/changeDefinitionToClass2/src/Factory.java
@@ -0,0 +1,9 @@
+class Factory {
+  public static Server createServer() {
+    return new Server() {
+      public void foo() {
+        System.out.println("foo() called");
+      }
+    };
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/common/changeDefinitionToClass2/src/Server.java b/java/java-tests/testData/compileServer/incremental/common/changeDefinitionToClass2/src/Server.java
new file mode 100644
index 0000000..4718007
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/changeDefinitionToClass2/src/Server.java
@@ -0,0 +1,3 @@
+interface Server{
+  public void foo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/common/class2Interface1.log b/java/java-tests/testData/compileServer/incremental/common/class2Interface1.log
new file mode 100644
index 0000000..3770845
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/class2Interface1.log
@@ -0,0 +1,17 @@
+Cleaning output files:
+out/production/Class2Interface1/Factory.class
+End of files
+Compiling files:
+src/Factory.java
+End of files
+Cleaning output files:
+out/production/Class2Interface1/Client$1.class
+out/production/Class2Interface1/Client.class
+out/production/Class2Interface1/Main.class
+out/production/Class2Interface1/SubClient.class
+End of files
+Compiling files:
+src/Client.java
+src/Main.java
+src/SubClient.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/common/class2Interface1/Factory.java.new b/java/java-tests/testData/compileServer/incremental/common/class2Interface1/Factory.java.new
new file mode 100644
index 0000000..c024104
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/class2Interface1/Factory.java.new
@@ -0,0 +1,4 @@
+abstract class Factory {
+  abstract Product create();
+}
+
diff --git a/java/java-tests/testData/compileServer/incremental/common/class2Interface1/Factory.java.new~ b/java/java-tests/testData/compileServer/incremental/common/class2Interface1/Factory.java.new~
new file mode 100644
index 0000000..0107e65
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/class2Interface1/Factory.java.new~
@@ -0,0 +1,4 @@
+interface Factory {
+  Product create();
+}
+
diff --git a/java/java-tests/testData/compileServer/incremental/common/class2Interface1/src/Client.java b/java/java-tests/testData/compileServer/incremental/common/class2Interface1/src/Client.java
new file mode 100644
index 0000000..5854d18
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/class2Interface1/src/Client.java
@@ -0,0 +1,8 @@
+class Client {
+  protected Factory factory =
+    new Factory() {
+      public Product create () {
+        return new Product("created");
+      }
+    };  
+}
diff --git a/java/java-tests/testData/compileServer/incremental/common/class2Interface1/src/Factory.java b/java/java-tests/testData/compileServer/incremental/common/class2Interface1/src/Factory.java
new file mode 100644
index 0000000..0107e65
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/class2Interface1/src/Factory.java
@@ -0,0 +1,4 @@
+interface Factory {
+  Product create();
+}
+
diff --git a/java/java-tests/testData/compileServer/incremental/common/class2Interface1/src/Main.java b/java/java-tests/testData/compileServer/incremental/common/class2Interface1/src/Main.java
new file mode 100644
index 0000000..8c75394
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/class2Interface1/src/Main.java
@@ -0,0 +1,6 @@
+public class Main {
+  public static void main (String[] args) {
+      final SubClient s = new SubClient ();
+      s.method (s.factory);
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/common/class2Interface1/src/Product.java b/java/java-tests/testData/compileServer/incremental/common/class2Interface1/src/Product.java
new file mode 100644
index 0000000..0395de5
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/class2Interface1/src/Product.java
@@ -0,0 +1,5 @@
+class Product {
+  String name;
+  public Product (String name) {this.name = name;}
+  public String toString () {return name;}
+}
diff --git a/java/java-tests/testData/compileServer/incremental/common/class2Interface1/src/SubClient.java b/java/java-tests/testData/compileServer/incremental/common/class2Interface1/src/SubClient.java
new file mode 100644
index 0000000..0922ec9
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/class2Interface1/src/SubClient.java
@@ -0,0 +1,6 @@
+class SubClient extends Client {
+  void method (final Factory factory) {
+    Product product = factory.create();
+    System.out.println (product);
+  }
+} 
diff --git a/java/java-tests/testData/compileServer/incremental/common/class2Interface2.log b/java/java-tests/testData/compileServer/incremental/common/class2Interface2.log
new file mode 100644
index 0000000..d121df5
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/class2Interface2.log
@@ -0,0 +1,15 @@
+Cleaning output files:
+out/production/Class2Interface2/Factory.class
+End of files
+Compiling files:
+src/Factory.java
+End of files
+Cleaning output files:
+out/production/Class2Interface2/Client$1.class
+out/production/Class2Interface2/Client.class
+out/production/Class2Interface2/SubClient.class
+End of files
+Compiling files:
+src/Client.java
+src/SubClient.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/common/class2Interface2/Factory.java.new b/java/java-tests/testData/compileServer/incremental/common/class2Interface2/Factory.java.new
new file mode 100644
index 0000000..c024104
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/class2Interface2/Factory.java.new
@@ -0,0 +1,4 @@
+abstract class Factory {
+  abstract Product create();
+}
+
diff --git a/java/java-tests/testData/compileServer/incremental/common/class2Interface2/src/Client.java b/java/java-tests/testData/compileServer/incremental/common/class2Interface2/src/Client.java
new file mode 100644
index 0000000..5854d18
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/class2Interface2/src/Client.java
@@ -0,0 +1,8 @@
+class Client {
+  protected Factory factory =
+    new Factory() {
+      public Product create () {
+        return new Product("created");
+      }
+    };  
+}
diff --git a/java/java-tests/testData/compileServer/incremental/common/class2Interface2/src/Factory.java b/java/java-tests/testData/compileServer/incremental/common/class2Interface2/src/Factory.java
new file mode 100644
index 0000000..0107e65
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/class2Interface2/src/Factory.java
@@ -0,0 +1,4 @@
+interface Factory {
+  Product create();
+}
+
diff --git a/java/java-tests/testData/compileServer/incremental/common/class2Interface2/src/Main.java b/java/java-tests/testData/compileServer/incremental/common/class2Interface2/src/Main.java
new file mode 100644
index 0000000..46a6aeb
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/class2Interface2/src/Main.java
@@ -0,0 +1,6 @@
+public class Main {
+  public static void main (String[] args) {
+      final SubClient s = new SubClient ();
+      s.method ();
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/common/class2Interface2/src/Product.java b/java/java-tests/testData/compileServer/incremental/common/class2Interface2/src/Product.java
new file mode 100644
index 0000000..0395de5
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/class2Interface2/src/Product.java
@@ -0,0 +1,5 @@
+class Product {
+  String name;
+  public Product (String name) {this.name = name;}
+  public String toString () {return name;}
+}
diff --git a/java/java-tests/testData/compileServer/incremental/common/class2Interface2/src/SubClient.java b/java/java-tests/testData/compileServer/incremental/common/class2Interface2/src/SubClient.java
new file mode 100644
index 0000000..d8d9b29
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/class2Interface2/src/SubClient.java
@@ -0,0 +1,6 @@
+class SubClient extends Client {
+  void method () {
+    Product product = factory.create();
+    System.out.println (product);
+  }
+} 
diff --git a/java/java-tests/testData/compileServer/incremental/common/class2Interface3.log b/java/java-tests/testData/compileServer/incremental/common/class2Interface3.log
new file mode 100644
index 0000000..8dc8e72
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/class2Interface3.log
@@ -0,0 +1,15 @@
+Cleaning output files:
+out/production/Class2Interface3/Factory.class
+End of files
+Compiling files:
+src/Factory.java
+End of files
+Cleaning output files:
+out/production/Class2Interface3/Client$1.class
+out/production/Class2Interface3/Client.class
+out/production/Class2Interface3/SubClient.class
+End of files
+Compiling files:
+src/Client.java
+src/SubClient.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/common/class2Interface3/Factory.java.new b/java/java-tests/testData/compileServer/incremental/common/class2Interface3/Factory.java.new
new file mode 100644
index 0000000..c024104
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/class2Interface3/Factory.java.new
@@ -0,0 +1,4 @@
+abstract class Factory {
+  abstract Product create();
+}
+
diff --git a/java/java-tests/testData/compileServer/incremental/common/class2Interface3/src/Client.java b/java/java-tests/testData/compileServer/incremental/common/class2Interface3/src/Client.java
new file mode 100644
index 0000000..597dd7c
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/class2Interface3/src/Client.java
@@ -0,0 +1,10 @@
+class Client {
+    protected Factory getFactory () {
+      return
+        new Factory() {
+          public Product create () {
+            return new Product("created");
+          }
+        };  
+    }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/common/class2Interface3/src/Factory.java b/java/java-tests/testData/compileServer/incremental/common/class2Interface3/src/Factory.java
new file mode 100644
index 0000000..0107e65
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/class2Interface3/src/Factory.java
@@ -0,0 +1,4 @@
+interface Factory {
+  Product create();
+}
+
diff --git a/java/java-tests/testData/compileServer/incremental/common/class2Interface3/src/Main.java b/java/java-tests/testData/compileServer/incremental/common/class2Interface3/src/Main.java
new file mode 100644
index 0000000..46a6aeb
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/class2Interface3/src/Main.java
@@ -0,0 +1,6 @@
+public class Main {
+  public static void main (String[] args) {
+      final SubClient s = new SubClient ();
+      s.method ();
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/common/class2Interface3/src/Product.java b/java/java-tests/testData/compileServer/incremental/common/class2Interface3/src/Product.java
new file mode 100644
index 0000000..0395de5
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/class2Interface3/src/Product.java
@@ -0,0 +1,5 @@
+class Product {
+  String name;
+  public Product (String name) {this.name = name;}
+  public String toString () {return name;}
+}
diff --git a/java/java-tests/testData/compileServer/incremental/common/class2Interface3/src/SubClient.java b/java/java-tests/testData/compileServer/incremental/common/class2Interface3/src/SubClient.java
new file mode 100644
index 0000000..05ae874
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/class2Interface3/src/SubClient.java
@@ -0,0 +1,6 @@
+class SubClient extends Client {
+  void method () {
+    Product product = getFactory().create();
+    System.out.println (product);
+  }
+} 
diff --git a/java/java-tests/testData/compileServer/incremental/common/deleteClass.log b/java/java-tests/testData/compileServer/incremental/common/deleteClass.log
new file mode 100644
index 0000000..79da1a6e
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/deleteClass.log
@@ -0,0 +1,9 @@
+Cleaning output files:
+out/production/DeleteClass/packageA/Server.class
+End of files
+Cleaning output files:
+out/production/DeleteClass/packageA/Client.class
+End of files
+Compiling files:
+src/packageA/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/common/deleteClass/src/packageA/Client.java b/java/java-tests/testData/compileServer/incremental/common/deleteClass/src/packageA/Client.java
new file mode 100644
index 0000000..3ef542f
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/deleteClass/src/packageA/Client.java
@@ -0,0 +1,12 @@
+/**
+ * created at Jan 22, 2002
+ * @author Jeka
+ */
+package packageA;
+
+public class Client {
+  public static void main(String[] args) {
+    Server server = new Server();
+    server.method();
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/common/deleteClass/src/packageA/Server.java b/java/java-tests/testData/compileServer/incremental/common/deleteClass/src/packageA/Server.java
new file mode 100644
index 0000000..810c87d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/deleteClass/src/packageA/Server.java
@@ -0,0 +1,11 @@
+/**
+ * created at Jan 22, 2002
+ * @author Jeka
+ */
+package packageA;
+
+public class Server {
+  public void method() {
+    System.out.println("Server.method");
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/common/deleteClass/src/packageA/Server.java.remove b/java/java-tests/testData/compileServer/incremental/common/deleteClass/src/packageA/Server.java.remove
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/deleteClass/src/packageA/Server.java.remove
diff --git a/java/java-tests/testData/compileServer/incremental/common/deleteClass1.log b/java/java-tests/testData/compileServer/incremental/common/deleteClass1.log
new file mode 100644
index 0000000..4babb8a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/deleteClass1.log
@@ -0,0 +1,9 @@
+Cleaning output files:
+out/production/DeleteClass1/packageA/Server.class
+End of files
+Cleaning output files:
+out/production/DeleteClass1/packageA/Client.class
+End of files
+Compiling files:
+src/packageA/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/common/deleteClass1/src/packageA/Client.java b/java/java-tests/testData/compileServer/incremental/common/deleteClass1/src/packageA/Client.java
new file mode 100644
index 0000000..f91d5bc
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/deleteClass1/src/packageA/Client.java
@@ -0,0 +1,5 @@
+package packageA;
+
+public class Client {
+	static Class c = new Server().getClass();
+}
diff --git a/java/java-tests/testData/compileServer/incremental/common/deleteClass1/src/packageA/Server.java b/java/java-tests/testData/compileServer/incremental/common/deleteClass1/src/packageA/Server.java
new file mode 100644
index 0000000..25f1be6
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/deleteClass1/src/packageA/Server.java
@@ -0,0 +1,4 @@
+package packageA;
+
+public class Server {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/common/deleteClass1/src/packageA/Server.java.remove b/java/java-tests/testData/compileServer/incremental/common/deleteClass1/src/packageA/Server.java.remove
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/deleteClass1/src/packageA/Server.java.remove
diff --git a/java/java-tests/testData/compileServer/incremental/common/deleteClass2.log b/java/java-tests/testData/compileServer/incremental/common/deleteClass2.log
new file mode 100644
index 0000000..97d2941
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/deleteClass2.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/DeleteClass2/packageA/Server.class
+End of files
+Compiling files:
+src/packageA/Server.java
+End of files
+Cleaning output files:
+out/production/DeleteClass2/packageA/Client.class
+End of files
+Compiling files:
+src/packageA/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/common/deleteClass2/src/packageA/Client.java b/java/java-tests/testData/compileServer/incremental/common/deleteClass2/src/packageA/Client.java
new file mode 100644
index 0000000..3ef542f
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/deleteClass2/src/packageA/Client.java
@@ -0,0 +1,12 @@
+/**
+ * created at Jan 22, 2002
+ * @author Jeka
+ */
+package packageA;
+
+public class Client {
+  public static void main(String[] args) {
+    Server server = new Server();
+    server.method();
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/common/deleteClass2/src/packageA/Server.java b/java/java-tests/testData/compileServer/incremental/common/deleteClass2/src/packageA/Server.java
new file mode 100644
index 0000000..5168430
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/deleteClass2/src/packageA/Server.java
@@ -0,0 +1,7 @@
+package packageA;
+
+public class Server {
+  public void method() {
+    System.out.println("Server.method");
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/common/deleteClass2/src/packageA/Server.java.new b/java/java-tests/testData/compileServer/incremental/common/deleteClass2/src/packageA/Server.java.new
new file mode 100644
index 0000000..0fc8c12
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/deleteClass2/src/packageA/Server.java.new
@@ -0,0 +1 @@
+package packageA;
diff --git a/java/java-tests/testData/compileServer/incremental/common/deleteClass3.log b/java/java-tests/testData/compileServer/incremental/common/deleteClass3.log
new file mode 100644
index 0000000..04f0cf6
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/deleteClass3.log
@@ -0,0 +1,9 @@
+Cleaning output files:
+out/production/M/A.class
+End of files
+Compiling files:
+M/src/A.java
+End of files
+Cleaning output files:
+out/production/N/C.class
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/common/deleteClass3/.idea/misc.xml b/java/java-tests/testData/compileServer/incremental/common/deleteClass3/.idea/misc.xml
new file mode 100644
index 0000000..6798096
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/deleteClass3/.idea/misc.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="EntryPointsManager">
+    <entry_points version="2.0" />
+  </component>
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_6" assert-keyword="true" jdk-15="true" project-jdk-name="IDEA jdk" project-jdk-type="JavaSDK">
+    <output url="file://$PROJECT_DIR$/out" />
+  </component>
+</project>
+
diff --git a/java/java-tests/testData/compileServer/incremental/common/deleteClass3/.idea/modules.xml b/java/java-tests/testData/compileServer/incremental/common/deleteClass3/.idea/modules.xml
new file mode 100644
index 0000000..fb0361f
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/deleteClass3/.idea/modules.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/M/M.iml" filepath="$PROJECT_DIR$/M/M.iml" />
+      <module fileurl="file://$PROJECT_DIR$/N/N.iml" filepath="$PROJECT_DIR$/N/N.iml" />
+    </modules>
+  </component>
+</project>
+
diff --git a/java/java-tests/testData/compileServer/incremental/common/deleteClass3/M/M.iml b/java/java-tests/testData/compileServer/incremental/common/deleteClass3/M/M.iml
new file mode 100644
index 0000000..d5c0743
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/deleteClass3/M/M.iml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>
+
diff --git a/java/java-tests/testData/compileServer/incremental/common/deleteClass3/M/src/A.java b/java/java-tests/testData/compileServer/incremental/common/deleteClass3/M/src/A.java
new file mode 100644
index 0000000..8ee5d39
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/deleteClass3/M/src/A.java
@@ -0,0 +1,9 @@
+/**
+ * Created with IntelliJ IDEA.
+ * User: db
+ * Date: 20.02.12
+ * Time: 12:47
+ * To change this template use File | Settings | File Templates.
+ */
+public class A {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/common/deleteClass3/M/src/A.java.new b/java/java-tests/testData/compileServer/incremental/common/deleteClass3/M/src/A.java.new
new file mode 100644
index 0000000..16be128
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/deleteClass3/M/src/A.java.new
@@ -0,0 +1,3 @@
+public class A {
+  public A (int x) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/common/deleteClass3/N/N.iml b/java/java-tests/testData/compileServer/incremental/common/deleteClass3/N/N.iml
new file mode 100644
index 0000000..f05dcad0
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/deleteClass3/N/N.iml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module" module-name="M" />
+  </component>
+</module>
+
diff --git a/java/java-tests/testData/compileServer/incremental/common/deleteClass3/N/src/C.java b/java/java-tests/testData/compileServer/incremental/common/deleteClass3/N/src/C.java
new file mode 100644
index 0000000..4e18322
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/deleteClass3/N/src/C.java
@@ -0,0 +1,10 @@
+/**
+ * Created with IntelliJ IDEA.
+ * User: db
+ * Date: 20.02.12
+ * Time: 12:46
+ * To change this template use File | Settings | File Templates.
+ */
+public class C {
+    A a = new A();
+}
diff --git a/java/java-tests/testData/compileServer/incremental/common/deleteClass3/N/src/C.java.remove b/java/java-tests/testData/compileServer/incremental/common/deleteClass3/N/src/C.java.remove
new file mode 100644
index 0000000..2995a4d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/deleteClass3/N/src/C.java.remove
@@ -0,0 +1 @@
+dummy
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/common/deleteClass4.log b/java/java-tests/testData/compileServer/incremental/common/deleteClass4.log
new file mode 100644
index 0000000..e2c6bc2
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/deleteClass4.log
@@ -0,0 +1,9 @@
+Cleaning output files:
+out/production/DeleteClass4/A.class
+End of files
+Cleaning output files:
+out/production/DeleteClass4/B.class
+End of files
+Compiling files:
+src/B.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/common/deleteClass4/A.java.remove b/java/java-tests/testData/compileServer/incremental/common/deleteClass4/A.java.remove
new file mode 100644
index 0000000..c61f4a7
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/deleteClass4/A.java.remove
@@ -0,0 +1 @@
+<dummy>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/common/deleteClass4/src/A.java b/java/java-tests/testData/compileServer/incremental/common/deleteClass4/src/A.java
new file mode 100644
index 0000000..8eb3c0e
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/deleteClass4/src/A.java
@@ -0,0 +1,3 @@
+public class A {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/common/deleteClass4/src/B.java b/java/java-tests/testData/compileServer/incremental/common/deleteClass4/src/B.java
new file mode 100644
index 0000000..38b49d3
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/deleteClass4/src/B.java
@@ -0,0 +1,5 @@
+public class B {
+  Class foo () {
+    return A.class;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/common/deleteClassAfterCompileErrors.log b/java/java-tests/testData/compileServer/incremental/common/deleteClassAfterCompileErrors.log
new file mode 100644
index 0000000..24d3773
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/deleteClassAfterCompileErrors.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/DeleteClassAfterCompileErrors/packageA/Server.class
+End of files
+Compiling files:
+src/packageA/Server.java
+End of files
+Cleaning output files:
+out/production/DeleteClassAfterCompileErrors/packageA/Client.class
+End of files
+Compiling files:
+src/packageA/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/common/deleteClassAfterCompileErrors/src/packageA/Client.java b/java/java-tests/testData/compileServer/incremental/common/deleteClassAfterCompileErrors/src/packageA/Client.java
new file mode 100644
index 0000000..fd6869b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/deleteClassAfterCompileErrors/src/packageA/Client.java
@@ -0,0 +1,9 @@
+package packageA;
+
+public class Client {
+
+  public void method(Server server) {
+    server.method();
+  }
+
+}
diff --git a/java/java-tests/testData/compileServer/incremental/common/deleteClassAfterCompileErrors/src/packageA/Server.java b/java/java-tests/testData/compileServer/incremental/common/deleteClassAfterCompileErrors/src/packageA/Server.java
new file mode 100644
index 0000000..5168430
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/deleteClassAfterCompileErrors/src/packageA/Server.java
@@ -0,0 +1,7 @@
+package packageA;
+
+public class Server {
+  public void method() {
+    System.out.println("Server.method");
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/common/deleteClassAfterCompileErrors/src/packageA/Server.java.new b/java/java-tests/testData/compileServer/incremental/common/deleteClassAfterCompileErrors/src/packageA/Server.java.new
new file mode 100644
index 0000000..2dd0712
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/deleteClassAfterCompileErrors/src/packageA/Server.java.new
@@ -0,0 +1,7 @@
+package packageA;
+
+public class Server {
+  public void method() {
+    System.out.println("Server.method"); <some-error!>
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/common/deleteClassAfterCompileErrors/src/packageA/Server.java.remove1 b/java/java-tests/testData/compileServer/incremental/common/deleteClassAfterCompileErrors/src/packageA/Server.java.remove1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/deleteClassAfterCompileErrors/src/packageA/Server.java.remove1
diff --git a/java/java-tests/testData/compileServer/incremental/common/deleteClassPackageDoesntMatchRoot.log b/java/java-tests/testData/compileServer/incremental/common/deleteClassPackageDoesntMatchRoot.log
new file mode 100644
index 0000000..0a88af8
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/deleteClassPackageDoesntMatchRoot.log
@@ -0,0 +1,10 @@
+Cleaning output files:
+out/production/DeleteClassPackageDoesntMatchRoot/ppp/Server$1.class
+out/production/DeleteClassPackageDoesntMatchRoot/ppp/Server.class
+End of files
+Cleaning output files:
+out/production/DeleteClassPackageDoesntMatchRoot/clientPackage/Client.class
+End of files
+Compiling files:
+src/packageA/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/common/deleteClassPackageDoesntMatchRoot/data.xml b/java/java-tests/testData/compileServer/incremental/common/deleteClassPackageDoesntMatchRoot/data.xml
new file mode 100644
index 0000000..28bcf6d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/deleteClassPackageDoesntMatchRoot/data.xml
@@ -0,0 +1,17 @@
+<testData>
+
+  <delete>
+    <file path="source/packageA/Server.java" />
+  </delete>
+
+  <deleted_by_make>
+    <file path="classes/ppp/Server.class" />
+    <file path="classes/ppp/Server$1.class" />
+    <file path="classes/clientPackage/Client.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/packageA/Client.java" />
+  </recompile>
+
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/common/deleteClassPackageDoesntMatchRoot/src/packageA/Client.java b/java/java-tests/testData/compileServer/incremental/common/deleteClassPackageDoesntMatchRoot/src/packageA/Client.java
new file mode 100644
index 0000000..132189b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/deleteClassPackageDoesntMatchRoot/src/packageA/Client.java
@@ -0,0 +1,13 @@
+/**
+ * created at Jan 22, 2002
+ * @author Jeka
+ */
+package clientPackage;
+import ppp.*;
+
+public class Client {
+  public static void main(String[] args) {
+    Server server = new Server();
+    server.method();
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/common/deleteClassPackageDoesntMatchRoot/src/packageA/Server.java b/java/java-tests/testData/compileServer/incremental/common/deleteClassPackageDoesntMatchRoot/src/packageA/Server.java
new file mode 100644
index 0000000..0f805ca
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/deleteClassPackageDoesntMatchRoot/src/packageA/Server.java
@@ -0,0 +1,15 @@
+/**
+ * created at Jan 22, 2002
+ * @author Jeka
+ */
+package ppp;
+
+public class Server {
+  public void method() {
+    new Runnable(){
+      public void run() {
+        System.out.println("Server.method");
+      }
+    }.run();
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/common/deleteClassPackageDoesntMatchRoot/src/packageA/Server.java.remove b/java/java-tests/testData/compileServer/incremental/common/deleteClassPackageDoesntMatchRoot/src/packageA/Server.java.remove
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/deleteClassPackageDoesntMatchRoot/src/packageA/Server.java.remove
diff --git a/java/java-tests/testData/compileServer/incremental/common/dependencyUpdate.log b/java/java-tests/testData/compileServer/incremental/common/dependencyUpdate.log
new file mode 100644
index 0000000..8f12ffa
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/dependencyUpdate.log
@@ -0,0 +1,14 @@
+Cleaning output files:
+out/production/DependencyUpdate/A.class
+out/production/DependencyUpdate/E.class
+End of files
+Compiling files:
+src/A.java
+src/E.java
+End of files
+Cleaning output files:
+out/production/DependencyUpdate/B.class
+End of files
+Compiling files:
+src/B.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/common/dependencyUpdate/A.java.new b/java/java-tests/testData/compileServer/incremental/common/dependencyUpdate/A.java.new
new file mode 100644
index 0000000..84e5f43
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/dependencyUpdate/A.java.new
@@ -0,0 +1,3 @@
+interface A {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/common/dependencyUpdate/E.java.new b/java/java-tests/testData/compileServer/incremental/common/dependencyUpdate/E.java.new
new file mode 100644
index 0000000..f8262bcd
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/dependencyUpdate/E.java.new
@@ -0,0 +1,5 @@
+class E {
+  A f () {
+    return new A(){};
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/common/dependencyUpdate/src/A.java b/java/java-tests/testData/compileServer/incremental/common/dependencyUpdate/src/A.java
new file mode 100644
index 0000000..1b4568a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/dependencyUpdate/src/A.java
@@ -0,0 +1,3 @@
+class A {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/common/dependencyUpdate/src/B.java b/java/java-tests/testData/compileServer/incremental/common/dependencyUpdate/src/B.java
new file mode 100644
index 0000000..2681539
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/dependencyUpdate/src/B.java
@@ -0,0 +1,3 @@
+class B<T extends A>{
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/common/dependencyUpdate/src/E.java b/java/java-tests/testData/compileServer/incremental/common/dependencyUpdate/src/E.java
new file mode 100644
index 0000000..175699a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/dependencyUpdate/src/E.java
@@ -0,0 +1,5 @@
+class E {
+  A f () {
+    return new A();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/common/inner.log b/java/java-tests/testData/compileServer/incremental/common/inner.log
new file mode 100644
index 0000000..60ac878
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/inner.log
@@ -0,0 +1,13 @@
+Cleaning output files:
+out/production/Inner/Server.class
+End of files
+Compiling files:
+src/Server.java
+End of files
+Cleaning output files:
+out/production/Inner/Client$Inner.class
+out/production/Inner/Client.class
+End of files
+Compiling files:
+src/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/common/inner/Server.java.new b/java/java-tests/testData/compileServer/incremental/common/inner/Server.java.new
new file mode 100644
index 0000000..d796f85
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/inner/Server.java.new
@@ -0,0 +1,4 @@
+class Server{
+  static void foo(int a){
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/common/inner/src/Client.java b/java/java-tests/testData/compileServer/incremental/common/inner/src/Client.java
new file mode 100644
index 0000000..d0773c9
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/inner/src/Client.java
@@ -0,0 +1,7 @@
+class Client{
+  class Inner{
+    void foo(){
+      Server.foo();
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/common/inner/src/Server.java b/java/java-tests/testData/compileServer/incremental/common/inner/src/Server.java
new file mode 100644
index 0000000..60c707b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/inner/src/Server.java
@@ -0,0 +1,4 @@
+class Server{
+  static void foo(){
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/common/noResourceDelete.log b/java/java-tests/testData/compileServer/incremental/common/noResourceDelete.log
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/noResourceDelete.log
diff --git a/java/java-tests/testData/compileServer/incremental/common/noResourceDelete/src/com/ttt.properties b/java/java-tests/testData/compileServer/incremental/common/noResourceDelete/src/com/ttt.properties
new file mode 100644
index 0000000..30d74d2
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/noResourceDelete/src/com/ttt.properties
@@ -0,0 +1 @@
+test
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/common/noSecondFileCompile.log b/java/java-tests/testData/compileServer/incremental/common/noSecondFileCompile.log
new file mode 100644
index 0000000..a106cca
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/noSecondFileCompile.log
@@ -0,0 +1,9 @@
+Cleaning output files:
+out/production/NoSecondFileCompile/A.class
+out/production/NoSecondFileCompile/B.class
+out/production/NoSecondFileCompile/C.class
+End of files
+Compiling files:
+src/A.java
+src/C.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/common/noSecondFileCompile/A.java.new b/java/java-tests/testData/compileServer/incremental/common/noSecondFileCompile/A.java.new
new file mode 100644
index 0000000..7205cd0
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/noSecondFileCompile/A.java.new
@@ -0,0 +1,3 @@
+
+public class A {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/common/noSecondFileCompile/C.java.new b/java/java-tests/testData/compileServer/incremental/common/noSecondFileCompile/C.java.new
new file mode 100644
index 0000000..8bcf8e5
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/noSecondFileCompile/C.java.new
@@ -0,0 +1,5 @@
+
+public class C {
+  public C(int a) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/common/noSecondFileCompile/src/A.java b/java/java-tests/testData/compileServer/incremental/common/noSecondFileCompile/src/A.java
new file mode 100644
index 0000000..325f07a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/noSecondFileCompile/src/A.java
@@ -0,0 +1,9 @@
+
+public class A {
+}
+
+class B{
+  {
+    new C();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/common/noSecondFileCompile/src/C.java b/java/java-tests/testData/compileServer/incremental/common/noSecondFileCompile/src/C.java
new file mode 100644
index 0000000..1c2f6b4
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/noSecondFileCompile/src/C.java
@@ -0,0 +1,5 @@
+
+public class C {
+  public C() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/common/noSecondFileCompile1.log b/java/java-tests/testData/compileServer/incremental/common/noSecondFileCompile1.log
new file mode 100644
index 0000000..6bbbb4f
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/noSecondFileCompile1.log
@@ -0,0 +1,9 @@
+Cleaning output files:
+out/production/NoSecondFileCompile1/A.class
+out/production/NoSecondFileCompile1/B.class
+out/production/NoSecondFileCompile1/C.class
+End of files
+Compiling files:
+src/A.java
+src/C.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/common/noSecondFileCompile1/A.java.new b/java/java-tests/testData/compileServer/incremental/common/noSecondFileCompile1/A.java.new
new file mode 100644
index 0000000..2b31a70
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/noSecondFileCompile1/A.java.new
@@ -0,0 +1,9 @@
+
+public class A {
+}
+
+class B{
+  {
+    new C(10);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/common/noSecondFileCompile1/C.java.new b/java/java-tests/testData/compileServer/incremental/common/noSecondFileCompile1/C.java.new
new file mode 100644
index 0000000..8bcf8e5
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/noSecondFileCompile1/C.java.new
@@ -0,0 +1,5 @@
+
+public class C {
+  public C(int a) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/common/noSecondFileCompile1/src/A.java b/java/java-tests/testData/compileServer/incremental/common/noSecondFileCompile1/src/A.java
new file mode 100644
index 0000000..325f07a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/noSecondFileCompile1/src/A.java
@@ -0,0 +1,9 @@
+
+public class A {
+}
+
+class B{
+  {
+    new C();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/common/noSecondFileCompile1/src/C.java b/java/java-tests/testData/compileServer/incremental/common/noSecondFileCompile1/src/C.java
new file mode 100644
index 0000000..1c2f6b4
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/common/noSecondFileCompile1/src/C.java
@@ -0,0 +1,5 @@
+
+public class C {
+  public C() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/compilePackage/synchronizeOutput/a/A.java b/java/java-tests/testData/compileServer/incremental/compilePackage/synchronizeOutput/a/A.java
new file mode 100644
index 0000000..84130a3
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/compilePackage/synchronizeOutput/a/A.java
@@ -0,0 +1,3 @@
+package a;
+class A {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/compilePackage/synchronizeOutput/ab/B.java b/java/java-tests/testData/compileServer/incremental/compilePackage/synchronizeOutput/ab/B.java
new file mode 100644
index 0000000..ecfd2c68
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/compilePackage/synchronizeOutput/ab/B.java
@@ -0,0 +1,3 @@
+package ab;
+class B {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/compilePackage/synchronizeOutput/data.xml b/java/java-tests/testData/compileServer/incremental/compilePackage/synchronizeOutput/data.xml
new file mode 100644
index 0000000..3c79c35
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/compilePackage/synchronizeOutput/data.xml
@@ -0,0 +1,10 @@
+<testData>
+
+  <deleted_by_make>
+    <file path="classes/a/A.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/a/A.java" />
+  </recompile>
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldModifiers/setFinal.log b/java/java-tests/testData/compileServer/incremental/fieldModifiers/setFinal.log
new file mode 100644
index 0000000..beac311
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldModifiers/setFinal.log
@@ -0,0 +1,14 @@
+Cleaning output files:
+out/production/SetFinal/Base.class
+End of files
+Compiling files:
+src/Base.java
+End of files
+Cleaning output files:
+out/production/SetFinal/Client1.class
+out/production/SetFinal/Client2.class
+End of files
+Compiling files:
+src/Client1.java
+src/Client2.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/fieldModifiers/setFinal/Base.java.new b/java/java-tests/testData/compileServer/incremental/fieldModifiers/setFinal/Base.java.new
new file mode 100644
index 0000000..79a61f7
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldModifiers/setFinal/Base.java.new
@@ -0,0 +1,3 @@
+class Base {
+  final static char s = 'g';
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldModifiers/setFinal/src/Base.java b/java/java-tests/testData/compileServer/incremental/fieldModifiers/setFinal/src/Base.java
new file mode 100644
index 0000000..b017d91
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldModifiers/setFinal/src/Base.java
@@ -0,0 +1,3 @@
+class Base {
+  static char s;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldModifiers/setFinal/src/Client1.java b/java/java-tests/testData/compileServer/incremental/fieldModifiers/setFinal/src/Client1.java
new file mode 100644
index 0000000..3d48255
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldModifiers/setFinal/src/Client1.java
@@ -0,0 +1,5 @@
+class Client1 extends Base {
+  public static void main(String[] args){
+    s = 'a';
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldModifiers/setFinal/src/Client2.java b/java/java-tests/testData/compileServer/incremental/fieldModifiers/setFinal/src/Client2.java
new file mode 100644
index 0000000..6c20acd
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldModifiers/setFinal/src/Client2.java
@@ -0,0 +1,5 @@
+class Client2 {
+  public static void main(String[] args){
+    Base.s = 'a';
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldModifiers/setFinal/src/Client3.java b/java/java-tests/testData/compileServer/incremental/fieldModifiers/setFinal/src/Client3.java
new file mode 100644
index 0000000..eb9e282
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldModifiers/setFinal/src/Client3.java
@@ -0,0 +1,3 @@
+public class Client3 {
+    char c = Base.s;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldModifiers/setPrivate.log b/java/java-tests/testData/compileServer/incremental/fieldModifiers/setPrivate.log
new file mode 100644
index 0000000..ed67bc7
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldModifiers/setPrivate.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/SetPrivate/A.class
+End of files
+Compiling files:
+src/A.java
+End of files
+Cleaning output files:
+out/production/SetPrivate/B.class
+End of files
+Compiling files:
+src/B.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/fieldModifiers/setPrivate/A.java.new b/java/java-tests/testData/compileServer/incremental/fieldModifiers/setPrivate/A.java.new
new file mode 100644
index 0000000..dc89670
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldModifiers/setPrivate/A.java.new
@@ -0,0 +1,3 @@
+public class A {
+    private int x;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldModifiers/setPrivate/src/A.java b/java/java-tests/testData/compileServer/incremental/fieldModifiers/setPrivate/src/A.java
new file mode 100644
index 0000000..3054175
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldModifiers/setPrivate/src/A.java
@@ -0,0 +1,3 @@
+public class A {
+    public int x;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldModifiers/setPrivate/src/B.java b/java/java-tests/testData/compileServer/incremental/fieldModifiers/setPrivate/src/B.java
new file mode 100644
index 0000000..499893a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldModifiers/setPrivate/src/B.java
@@ -0,0 +1,5 @@
+public class B {
+    void f (A a) {
+        int y = a.x;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldModifiers/setProtected.log b/java/java-tests/testData/compileServer/incremental/fieldModifiers/setProtected.log
new file mode 100644
index 0000000..c65da93
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldModifiers/setProtected.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/SetProtected/A.class
+End of files
+Compiling files:
+src/A.java
+End of files
+Cleaning output files:
+out/production/SetProtected/B.class
+End of files
+Compiling files:
+src/B.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/fieldModifiers/setProtected/A.java.new b/java/java-tests/testData/compileServer/incremental/fieldModifiers/setProtected/A.java.new
new file mode 100644
index 0000000..57b10b7
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldModifiers/setProtected/A.java.new
@@ -0,0 +1,3 @@
+public class A {
+    protected int x;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldModifiers/setProtected/src/A.java b/java/java-tests/testData/compileServer/incremental/fieldModifiers/setProtected/src/A.java
new file mode 100644
index 0000000..3054175
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldModifiers/setProtected/src/A.java
@@ -0,0 +1,3 @@
+public class A {
+    public int x;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldModifiers/setProtected/src/B.java b/java/java-tests/testData/compileServer/incremental/fieldModifiers/setProtected/src/B.java
new file mode 100644
index 0000000..499893a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldModifiers/setProtected/src/B.java
@@ -0,0 +1,5 @@
+public class B {
+    void f (A a) {
+        int y = a.x;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldModifiers/setProtected/src/C.java b/java/java-tests/testData/compileServer/incremental/fieldModifiers/setProtected/src/C.java
new file mode 100644
index 0000000..60ba4d0
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldModifiers/setProtected/src/C.java
@@ -0,0 +1,5 @@
+public class C extends A {
+    int f (){
+        return x;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldModifiers/setStatic.log b/java/java-tests/testData/compileServer/incremental/fieldModifiers/setStatic.log
new file mode 100644
index 0000000..d092468
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldModifiers/setStatic.log
@@ -0,0 +1,14 @@
+Cleaning output files:
+out/production/SetStatic/Base.class
+End of files
+Compiling files:
+src/Base.java
+End of files
+Cleaning output files:
+out/production/SetStatic/Client1.class
+out/production/SetStatic/Client2.class
+End of files
+Compiling files:
+src/Client1.java
+src/Client2.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/fieldModifiers/setStatic/Base.java.new b/java/java-tests/testData/compileServer/incremental/fieldModifiers/setStatic/Base.java.new
new file mode 100644
index 0000000..b017d91
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldModifiers/setStatic/Base.java.new
@@ -0,0 +1,3 @@
+class Base {
+  static char s;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldModifiers/setStatic/src/Base.java b/java/java-tests/testData/compileServer/incremental/fieldModifiers/setStatic/src/Base.java
new file mode 100644
index 0000000..be68600
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldModifiers/setStatic/src/Base.java
@@ -0,0 +1,3 @@
+class Base {
+  char s;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldModifiers/setStatic/src/Client1.java b/java/java-tests/testData/compileServer/incremental/fieldModifiers/setStatic/src/Client1.java
new file mode 100644
index 0000000..50ba456
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldModifiers/setStatic/src/Client1.java
@@ -0,0 +1,5 @@
+class Client1 extends Base {
+  void foo() {
+    s = 'a';
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldModifiers/setStatic/src/Client2.java b/java/java-tests/testData/compileServer/incremental/fieldModifiers/setStatic/src/Client2.java
new file mode 100644
index 0000000..7753032
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldModifiers/setStatic/src/Client2.java
@@ -0,0 +1,5 @@
+class Client2 {
+  void foo() {
+    new Base().s = 'a';
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldModifiers/unsetStatic.log b/java/java-tests/testData/compileServer/incremental/fieldModifiers/unsetStatic.log
new file mode 100644
index 0000000..2c7cedf
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldModifiers/unsetStatic.log
@@ -0,0 +1,14 @@
+Cleaning output files:
+out/production/UnsetStatic/Base.class
+End of files
+Compiling files:
+src/Base.java
+End of files
+Cleaning output files:
+out/production/UnsetStatic/Client1.class
+out/production/UnsetStatic/Client2.class
+End of files
+Compiling files:
+src/Client1.java
+src/Client2.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/fieldModifiers/unsetStatic/Base.java.new b/java/java-tests/testData/compileServer/incremental/fieldModifiers/unsetStatic/Base.java.new
new file mode 100644
index 0000000..be68600
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldModifiers/unsetStatic/Base.java.new
@@ -0,0 +1,3 @@
+class Base {
+  char s;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldModifiers/unsetStatic/src/Base.java b/java/java-tests/testData/compileServer/incremental/fieldModifiers/unsetStatic/src/Base.java
new file mode 100644
index 0000000..b017d91
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldModifiers/unsetStatic/src/Base.java
@@ -0,0 +1,3 @@
+class Base {
+  static char s;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldModifiers/unsetStatic/src/Client1.java b/java/java-tests/testData/compileServer/incremental/fieldModifiers/unsetStatic/src/Client1.java
new file mode 100644
index 0000000..561df0c
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldModifiers/unsetStatic/src/Client1.java
@@ -0,0 +1,5 @@
+class Client1 extends Base {
+  public static void main(String[] args) {
+    System.out.println(s);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldModifiers/unsetStatic/src/Client2.java b/java/java-tests/testData/compileServer/incremental/fieldModifiers/unsetStatic/src/Client2.java
new file mode 100644
index 0000000..ace03c5
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldModifiers/unsetStatic/src/Client2.java
@@ -0,0 +1,5 @@
+class Client2 {
+  public static void main(String[] args) {
+    System.out.println(Base.s);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldModifiers/unsetStaticFinal.log b/java/java-tests/testData/compileServer/incremental/fieldModifiers/unsetStaticFinal.log
new file mode 100644
index 0000000..d8065a5
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldModifiers/unsetStaticFinal.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/UnsetStaticFinal/Server.class
+End of files
+Compiling files:
+src/Server.java
+End of files
+Cleaning output files:
+out/production/UnsetStaticFinal/Client.class
+End of files
+Compiling files:
+src/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/fieldModifiers/unsetStaticFinal/Server.java.new b/java/java-tests/testData/compileServer/incremental/fieldModifiers/unsetStaticFinal/Server.java.new
new file mode 100644
index 0000000..6e579e8
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldModifiers/unsetStaticFinal/Server.java.new
@@ -0,0 +1,3 @@
+class Server {
+  static String s = "Static";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldModifiers/unsetStaticFinal/src/Client.java b/java/java-tests/testData/compileServer/incremental/fieldModifiers/unsetStaticFinal/src/Client.java
new file mode 100644
index 0000000..4dd6a1b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldModifiers/unsetStaticFinal/src/Client.java
@@ -0,0 +1,5 @@
+class Client {
+  public static void main(String[] args) {
+    System.out.println(Server.s);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldModifiers/unsetStaticFinal/src/Server.java b/java/java-tests/testData/compileServer/incremental/fieldModifiers/unsetStaticFinal/src/Server.java
new file mode 100644
index 0000000..8a24f1b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldModifiers/unsetStaticFinal/src/Server.java
@@ -0,0 +1,3 @@
+class Server {
+  static final String s = "StaticFinal";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain.log b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain.log
new file mode 100644
index 0000000..37245f2
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain.log
@@ -0,0 +1,14 @@
+Cleaning output files:
+out/production/ConstantChain/Server.class
+End of files
+Compiling files:
+src/Server.java
+End of files
+Cleaning output files:
+out/production/ConstantChain/Client.class
+out/production/ConstantChain/ServerClient.class
+End of files
+Compiling files:
+src/Client.java
+src/ServerClient.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain/Server.java.new b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain/Server.java.new
new file mode 100644
index 0000000..4e7a120
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain/Server.java.new
@@ -0,0 +1,3 @@
+class Server {
+  static final int var = 500;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain/src/Client.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain/src/Client.java
new file mode 100644
index 0000000..b7dce17
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain/src/Client.java
@@ -0,0 +1,5 @@
+class Client {
+  public static void main(String[] args) {
+    System.out.println(ServerClient.var);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain/src/Server.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain/src/Server.java
new file mode 100644
index 0000000..282d42a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain/src/Server.java
@@ -0,0 +1,3 @@
+class Server {
+  static final int var = 100;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain/src/ServerClient.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain/src/ServerClient.java
new file mode 100644
index 0000000..e8397e6
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain/src/ServerClient.java
@@ -0,0 +1,3 @@
+class ServerClient {
+  static final int var = Server.var * 1000;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain1.log b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain1.log
new file mode 100644
index 0000000..106fea4
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain1.log
@@ -0,0 +1,18 @@
+Cleaning output files:
+out/production/ConstantChain1/A.class
+End of files
+Compiling files:
+src/A.java
+End of files
+Cleaning output files:
+out/production/ConstantChain1/A.class
+out/production/ConstantChain1/B.class
+out/production/ConstantChain1/C.class
+out/production/ConstantChain1/Client.class
+End of files
+Compiling files:
+src/A.java
+src/B.java
+src/C.java
+src/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain1/A.java.new b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain1/A.java.new
new file mode 100644
index 0000000..3210b9f
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain1/A.java.new
@@ -0,0 +1,7 @@
+interface A {
+  static final short var0 = 100;
+  static final short var1 = var0 + 1;
+  static final short var12 = var1 + 1;
+  static final short var2 = var12 + 1;
+  static final short last = var2;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain1/src/A.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain1/src/A.java
new file mode 100644
index 0000000..046738f
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain1/src/A.java
@@ -0,0 +1,6 @@
+interface A {
+  static final short var0 = 100;
+  static final short var1 = var0 + 1;
+  static final short var2 = var1 + 1;
+  static final short last = var2;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain1/src/B.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain1/src/B.java
new file mode 100644
index 0000000..a28d549
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain1/src/B.java
@@ -0,0 +1,4 @@
+interface B extends A {
+  static final short var = A.last + 1;
+  static final short lastB = var;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain1/src/C.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain1/src/C.java
new file mode 100644
index 0000000..9874705
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain1/src/C.java
@@ -0,0 +1,4 @@
+interface C extends B {
+  static final short varC = B.last + 1;
+  static final short lastC = varC;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain1/src/Client.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain1/src/Client.java
new file mode 100644
index 0000000..f6d08f8
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain1/src/Client.java
@@ -0,0 +1,5 @@
+class Client implements C {
+  public static void main(String[] args) {
+    System.out.println(C.lastC);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain2.log b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain2.log
new file mode 100644
index 0000000..7e6d451
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain2.log
@@ -0,0 +1,18 @@
+Cleaning output files:
+out/production/ConstantChain2/Client.class
+out/production/ConstantChain2/Const1.class
+End of files
+Compiling files:
+src/Client.java
+src/Const1.java
+End of files
+Cleaning output files:
+out/production/ConstantChain2/Client.class
+out/production/ConstantChain2/Const1.class
+out/production/ConstantChain2/Const2.class
+End of files
+Compiling files:
+src/Client.java
+src/Const1.java
+src/Const2.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain2/Client.java.new b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain2/Client.java.new
new file mode 100644
index 0000000..2305c3b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain2/Client.java.new
@@ -0,0 +1,6 @@
+class Client {
+  public static void main(String[] args) {
+    System.out.println(Const2.A2);
+    System.out.println(Const2.A2);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain2/Const1.java.new b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain2/Const1.java.new
new file mode 100644
index 0000000..0a58ffa
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain2/Const1.java.new
@@ -0,0 +1,3 @@
+public class Const1 {
+  public static final int A1 = 20;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain2/src/Client.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain2/src/Client.java
new file mode 100644
index 0000000..e8a00c0
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain2/src/Client.java
@@ -0,0 +1,5 @@
+class Client {
+  public static void main(String[] args) {
+    System.out.println(Const2.A2);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain2/src/Const1.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain2/src/Const1.java
new file mode 100644
index 0000000..6a99d53
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain2/src/Const1.java
@@ -0,0 +1,3 @@
+public class Const1 {
+  public static final int A1 = 10;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain2/src/Const2.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain2/src/Const2.java
new file mode 100644
index 0000000..f93790e
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantChain2/src/Const2.java
@@ -0,0 +1,3 @@
+public class Const2 {
+  public static final int A2 = Const1.A1;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/constantRemove.log b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantRemove.log
new file mode 100644
index 0000000..4e67d94
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantRemove.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/ConstantRemove/Server.class
+End of files
+Compiling files:
+src/Server.java
+End of files
+Cleaning output files:
+out/production/ConstantRemove/Client.class
+End of files
+Compiling files:
+src/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/constantRemove/Server.java.new b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantRemove/Server.java.new
new file mode 100644
index 0000000..146106b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantRemove/Server.java.new
@@ -0,0 +1,2 @@
+class Server {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/constantRemove/src/Client.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantRemove/src/Client.java
new file mode 100644
index 0000000..4dd6a1b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantRemove/src/Client.java
@@ -0,0 +1,5 @@
+class Client {
+  public static void main(String[] args) {
+    System.out.println(Server.s);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/constantRemove/src/Server.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantRemove/src/Server.java
new file mode 100644
index 0000000..8a24f1b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantRemove/src/Server.java
@@ -0,0 +1,3 @@
+class Server {
+  static final String s = "StaticFinal";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/constantRemove1.log b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantRemove1.log
new file mode 100644
index 0000000..cfa1523
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantRemove1.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/ConstantRemove1/Server.class
+End of files
+Compiling files:
+src/Server.java
+End of files
+Cleaning output files:
+out/production/ConstantRemove1/Client.class
+End of files
+Compiling files:
+src/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/constantRemove1/Server.java.new b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantRemove1/Server.java.new
new file mode 100644
index 0000000..146106b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantRemove1/Server.java.new
@@ -0,0 +1,2 @@
+class Server {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/constantRemove1/src/A.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantRemove1/src/A.java
new file mode 100644
index 0000000..e06b4cc
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantRemove1/src/A.java
@@ -0,0 +1,5 @@
+public class A{
+    static String foo(){
+        return  "abc";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/constantRemove1/src/Client.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantRemove1/src/Client.java
new file mode 100644
index 0000000..4dd6a1b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantRemove1/src/Client.java
@@ -0,0 +1,5 @@
+class Client {
+  public static void main(String[] args) {
+    System.out.println(Server.s);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/constantRemove1/src/Server.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantRemove1/src/Server.java
new file mode 100644
index 0000000..0051887
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/constantRemove1/src/Server.java
@@ -0,0 +1,3 @@
+class Server {
+  static final String s = A.foo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/doubleConstantChange.log b/java/java-tests/testData/compileServer/incremental/fieldProperties/doubleConstantChange.log
new file mode 100644
index 0000000..bb43781
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/doubleConstantChange.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/DoubleConstantChange/Server.class
+End of files
+Compiling files:
+src/Server.java
+End of files
+Cleaning output files:
+out/production/DoubleConstantChange/Client.class
+End of files
+Compiling files:
+src/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/doubleConstantChange/Server.java.new b/java/java-tests/testData/compileServer/incremental/fieldProperties/doubleConstantChange/Server.java.new
new file mode 100644
index 0000000..755d992
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/doubleConstantChange/Server.java.new
@@ -0,0 +1,3 @@
+class Server {
+  static final double var = 99.9;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/doubleConstantChange/src/Client.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/doubleConstantChange/src/Client.java
new file mode 100644
index 0000000..75730ef
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/doubleConstantChange/src/Client.java
@@ -0,0 +1,5 @@
+class Client {
+  public static void main(String[] args) {
+    System.out.println(Server.var);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/doubleConstantChange/src/Server.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/doubleConstantChange/src/Server.java
new file mode 100644
index 0000000..60a56bf
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/doubleConstantChange/src/Server.java
@@ -0,0 +1,3 @@
+class Server {
+  static final double var = 100.0;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/floatConstantChange.log b/java/java-tests/testData/compileServer/incremental/fieldProperties/floatConstantChange.log
new file mode 100644
index 0000000..718132a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/floatConstantChange.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/FloatConstantChange/Server.class
+End of files
+Compiling files:
+src/Server.java
+End of files
+Cleaning output files:
+out/production/FloatConstantChange/Client.class
+End of files
+Compiling files:
+src/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/floatConstantChange/Server.java.new b/java/java-tests/testData/compileServer/incremental/fieldProperties/floatConstantChange/Server.java.new
new file mode 100644
index 0000000..e58d671
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/floatConstantChange/Server.java.new
@@ -0,0 +1,3 @@
+class Server {
+  static final float var = 100.1f;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/floatConstantChange/src/Client.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/floatConstantChange/src/Client.java
new file mode 100644
index 0000000..75730ef
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/floatConstantChange/src/Client.java
@@ -0,0 +1,5 @@
+class Client {
+  public static void main(String[] args) {
+    System.out.println(Server.var);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/floatConstantChange/src/Server.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/floatConstantChange/src/Server.java
new file mode 100644
index 0000000..3c9fb2d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/floatConstantChange/src/Server.java
@@ -0,0 +1,3 @@
+class Server {
+  static final float var = 100.0f;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/innerConstantChange.log b/java/java-tests/testData/compileServer/incremental/fieldProperties/innerConstantChange.log
new file mode 100644
index 0000000..ce8e480
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/innerConstantChange.log
@@ -0,0 +1,16 @@
+Cleaning output files:
+out/production/InnerConstantChange/Server$Inner.class
+out/production/InnerConstantChange/Server.class
+End of files
+Compiling files:
+src/Server.java
+End of files
+Cleaning output files:
+out/production/InnerConstantChange/Client.class
+out/production/InnerConstantChange/Server$Inner.class
+out/production/InnerConstantChange/Server.class
+End of files
+Compiling files:
+src/Client.java
+src/Server.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/innerConstantChange/Server.java.new b/java/java-tests/testData/compileServer/incremental/fieldProperties/innerConstantChange/Server.java.new
new file mode 100644
index 0000000..cb84ec3
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/innerConstantChange/Server.java.new
@@ -0,0 +1,5 @@
+class Server {
+  public static interface Inner {
+    String s = "StaticFinal_updated";
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/innerConstantChange/src/Client.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/innerConstantChange/src/Client.java
new file mode 100644
index 0000000..e85cf23
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/innerConstantChange/src/Client.java
@@ -0,0 +1,5 @@
+class Client {
+  public static void main(String[] args) {
+    System.out.println(Server.Inner.s);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/innerConstantChange/src/Server.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/innerConstantChange/src/Server.java
new file mode 100644
index 0000000..a8a1bb6
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/innerConstantChange/src/Server.java
@@ -0,0 +1,5 @@
+class Server {
+  public static interface Inner {
+    String s = "StaticFinal";
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/intConstantChange.log b/java/java-tests/testData/compileServer/incremental/fieldProperties/intConstantChange.log
new file mode 100644
index 0000000..3d0bb34
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/intConstantChange.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/IntConstantChange/Server.class
+End of files
+Compiling files:
+src/Server.java
+End of files
+Cleaning output files:
+out/production/IntConstantChange/Client.class
+End of files
+Compiling files:
+src/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/intConstantChange/Server.java.new b/java/java-tests/testData/compileServer/incremental/fieldProperties/intConstantChange/Server.java.new
new file mode 100644
index 0000000..4e7a120
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/intConstantChange/Server.java.new
@@ -0,0 +1,3 @@
+class Server {
+  static final int var = 500;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/intConstantChange/src/Client.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/intConstantChange/src/Client.java
new file mode 100644
index 0000000..75730ef
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/intConstantChange/src/Client.java
@@ -0,0 +1,5 @@
+class Client {
+  public static void main(String[] args) {
+    System.out.println(Server.var);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/intConstantChange/src/Server.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/intConstantChange/src/Server.java
new file mode 100644
index 0000000..282d42a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/intConstantChange/src/Server.java
@@ -0,0 +1,3 @@
+class Server {
+  static final int var = 100;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/longConstantChange.log b/java/java-tests/testData/compileServer/incremental/fieldProperties/longConstantChange.log
new file mode 100644
index 0000000..5221e15
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/longConstantChange.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/LongConstantChange/Server.class
+End of files
+Compiling files:
+src/Server.java
+End of files
+Cleaning output files:
+out/production/LongConstantChange/Client.class
+End of files
+Compiling files:
+src/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/longConstantChange/Server.java.new b/java/java-tests/testData/compileServer/incremental/fieldProperties/longConstantChange/Server.java.new
new file mode 100644
index 0000000..a95f838
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/longConstantChange/Server.java.new
@@ -0,0 +1,3 @@
+class Server {
+  static final long var = 5000000L;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/longConstantChange/src/Client.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/longConstantChange/src/Client.java
new file mode 100644
index 0000000..75730ef
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/longConstantChange/src/Client.java
@@ -0,0 +1,5 @@
+class Client {
+  public static void main(String[] args) {
+    System.out.println(Server.var);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/longConstantChange/src/Server.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/longConstantChange/src/Server.java
new file mode 100644
index 0000000..acbddd7
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/longConstantChange/src/Server.java
@@ -0,0 +1,3 @@
+class Server {
+  static final long var = 1000000L;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/nonCompileTimeConstant.log b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonCompileTimeConstant.log
new file mode 100644
index 0000000..2a7bf80
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonCompileTimeConstant.log
@@ -0,0 +1,6 @@
+Cleaning output files:
+out/production/NonCompileTimeConstant/Test.class
+End of files
+Compiling files:
+src/Test.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/nonCompileTimeConstant/Test.java.new b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonCompileTimeConstant/Test.java.new
new file mode 100644
index 0000000..6590c06
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonCompileTimeConstant/Test.java.new
@@ -0,0 +1,9 @@
+
+// nothing has changed!
+public class Test {
+  public static final int CONST = foo();
+
+  private static int foo() {
+    return 0;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/nonCompileTimeConstant/src/Client.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonCompileTimeConstant/src/Client.java
new file mode 100644
index 0000000..05be5cf
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonCompileTimeConstant/src/Client.java
@@ -0,0 +1,6 @@
+
+public class Client {
+  int foo(){
+    return Test.CONST;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/nonCompileTimeConstant/src/Test.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonCompileTimeConstant/src/Test.java
new file mode 100644
index 0000000..6b72624
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonCompileTimeConstant/src/Test.java
@@ -0,0 +1,8 @@
+
+public class Test {
+  public static final int CONST = foo();
+
+  private static int foo() {
+    return 0;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental1.log b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental1.log
new file mode 100644
index 0000000..16ed744
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental1.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/NonIncremental1/A/A.class
+End of files
+Compiling files:
+src/A/A.java
+End of files
+Cleaning output files:
+out/production/NonIncremental1/A/C.class
+End of files
+Compiling files:
+src/A/C.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental1/src/A/A.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental1/src/A/A.java
new file mode 100644
index 0000000..2d38a07
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental1/src/A/A.java
@@ -0,0 +1,12 @@
+package A;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: db
+ * Date: 23.01.12
+ * Time: 13:51
+ * To change this template use File | Settings | File Templates.
+ */
+public class A {
+    final static int x = 1024;
+}
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental1/src/A/A.java.new b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental1/src/A/A.java.new
new file mode 100644
index 0000000..f4a6022
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental1/src/A/A.java.new
@@ -0,0 +1,12 @@
+package A;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: db
+ * Date: 23.01.12
+ * Time: 13:51
+ * To change this template use File | Settings | File Templates.
+ */
+public class A {
+    final static int x = 1025;
+}
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental1/src/A/C.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental1/src/A/C.java
new file mode 100644
index 0000000..60ac03a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental1/src/A/C.java
@@ -0,0 +1,14 @@
+package A;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: db
+ * Date: 23.01.12
+ * Time: 13:51
+ * To change this template use File | Settings | File Templates.
+ */
+public class C {
+    public int get(){
+        return A.x;
+    }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental1/src/B/M.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental1/src/B/M.java
new file mode 100644
index 0000000..fb5b71f
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental1/src/B/M.java
@@ -0,0 +1,14 @@
+package B;
+
+import A.C;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: db
+ * Date: 23.01.12
+ * Time: 13:52
+ * To change this template use File | Settings | File Templates.
+ */
+public class M {
+    int y = new C().get();
+}
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental2.log b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental2.log
new file mode 100644
index 0000000..eafd630
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental2.log
@@ -0,0 +1,14 @@
+Cleaning output files:
+out/production/NonIncremental2/A/A.class
+End of files
+Compiling files:
+src/A/A.java
+End of files
+Cleaning output files:
+out/production/NonIncremental2/A/C.class
+out/production/NonIncremental2/B/M.class
+End of files
+Compiling files:
+src/A/C.java
+src/B/M.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental2/src/A/A.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental2/src/A/A.java
new file mode 100644
index 0000000..423ce28
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental2/src/A/A.java
@@ -0,0 +1,12 @@
+package A;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: db
+ * Date: 23.01.12
+ * Time: 13:51
+ * To change this template use File | Settings | File Templates.
+ */
+public class A {
+    protected final static int x = 1024;
+}
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental2/src/A/A.java.new b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental2/src/A/A.java.new
new file mode 100644
index 0000000..612f102
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental2/src/A/A.java.new
@@ -0,0 +1,12 @@
+package A;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: db
+ * Date: 23.01.12
+ * Time: 13:51
+ * To change this template use File | Settings | File Templates.
+ */
+public class A {
+    protected final static int x = 1025;
+}
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental2/src/A/C.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental2/src/A/C.java
new file mode 100644
index 0000000..60ac03a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental2/src/A/C.java
@@ -0,0 +1,14 @@
+package A;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: db
+ * Date: 23.01.12
+ * Time: 13:51
+ * To change this template use File | Settings | File Templates.
+ */
+public class C {
+    public int get(){
+        return A.x;
+    }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental2/src/B/M.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental2/src/B/M.java
new file mode 100644
index 0000000..b3d5b57
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental2/src/B/M.java
@@ -0,0 +1,13 @@
+package B;
+
+import A.C;
+/**
+ * Created by IntelliJ IDEA.
+ * User: db
+ * Date: 23.01.12
+ * Time: 13:52
+ * To change this template use File | Settings | File Templates.
+ */
+public class M extends A.A {
+    int y = A.A.x;
+}
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental2/src/B/N.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental2/src/B/N.java
new file mode 100644
index 0000000..3ca7958
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental2/src/B/N.java
@@ -0,0 +1,14 @@
+package B;
+
+import A.C;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: db
+ * Date: 23.01.12
+ * Time: 13:52
+ * To change this template use File | Settings | File Templates.
+ */
+public class N {
+    int y = new C().get();
+}
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental3/A$A.java.new~ b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental3/A$A.java.new~
new file mode 100644
index 0000000..2d38a07
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental3/A$A.java.new~
@@ -0,0 +1,12 @@
+package A;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: db
+ * Date: 23.01.12
+ * Time: 13:51
+ * To change this template use File | Settings | File Templates.
+ */
+public class A {
+    final static int x = 1024;
+}
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental3/src/A/A.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental3/src/A/A.java
new file mode 100644
index 0000000..2d38a07
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental3/src/A/A.java
@@ -0,0 +1,12 @@
+package A;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: db
+ * Date: 23.01.12
+ * Time: 13:51
+ * To change this template use File | Settings | File Templates.
+ */
+public class A {
+    final static int x = 1024;
+}
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental3/src/A/A.java.new b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental3/src/A/A.java.new
new file mode 100644
index 0000000..f4a6022
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental3/src/A/A.java.new
@@ -0,0 +1,12 @@
+package A;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: db
+ * Date: 23.01.12
+ * Time: 13:51
+ * To change this template use File | Settings | File Templates.
+ */
+public class A {
+    final static int x = 1025;
+}
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental3/src/A/C.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental3/src/A/C.java
new file mode 100644
index 0000000..60ac03a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental3/src/A/C.java
@@ -0,0 +1,14 @@
+package A;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: db
+ * Date: 23.01.12
+ * Time: 13:51
+ * To change this template use File | Settings | File Templates.
+ */
+public class C {
+    public int get(){
+        return A.x;
+    }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental3/src/B/M.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental3/src/B/M.java
new file mode 100644
index 0000000..fb5b71f
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental3/src/B/M.java
@@ -0,0 +1,14 @@
+package B;
+
+import A.C;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: db
+ * Date: 23.01.12
+ * Time: 13:52
+ * To change this template use File | Settings | File Templates.
+ */
+public class M {
+    int y = new C().get();
+}
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental4.log b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental4.log
new file mode 100644
index 0000000..c5b0bbf9
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental4.log
@@ -0,0 +1,6 @@
+Cleaning output files:
+out/production/NonIncremental4/A.class
+End of files
+Compiling files:
+src/A.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental4/A.java.new b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental4/A.java.new
new file mode 100644
index 0000000..73dca28
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental4/A.java.new
@@ -0,0 +1,10 @@
+/**
+ * Created with IntelliJ IDEA.
+ * User: db
+ * Date: 31.03.12
+ * Time: 17:50
+ * To change this template use File | Settings | File Templates.
+ */
+public class A {
+    public final static int X = 0;
+}
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental4/src/A.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental4/src/A.java
new file mode 100644
index 0000000..5b61bd6
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental4/src/A.java
@@ -0,0 +1,14 @@
+/**
+ * Created with IntelliJ IDEA.
+ * User: db
+ * Date: 31.03.12
+ * Time: 17:50
+ * To change this template use File | Settings | File Templates.
+ */
+public class A {
+    public final static int X;
+
+    static {
+        X = 100;
+    }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental4/src/C.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental4/src/C.java
new file mode 100644
index 0000000..cf7ba0e
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/nonIncremental4/src/C.java
@@ -0,0 +1,9 @@
+/**
+ * Created with IntelliJ IDEA.
+ * User: db
+ * Date: 31.03.12
+ * Time: 17:51
+ * To change this template use File | Settings | File Templates.
+ */
+public class C {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/stringConstantChange.log b/java/java-tests/testData/compileServer/incremental/fieldProperties/stringConstantChange.log
new file mode 100644
index 0000000..8675bf0
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/stringConstantChange.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/StringConstantChange/Server.class
+End of files
+Compiling files:
+src/Server.java
+End of files
+Cleaning output files:
+out/production/StringConstantChange/Client.class
+End of files
+Compiling files:
+src/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/stringConstantChange/Server.java.new b/java/java-tests/testData/compileServer/incremental/fieldProperties/stringConstantChange/Server.java.new
new file mode 100644
index 0000000..23f1c20
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/stringConstantChange/Server.java.new
@@ -0,0 +1,3 @@
+class Server {
+  static final String s = "ChangedStaticFinal";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/stringConstantChange/src/Client.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/stringConstantChange/src/Client.java
new file mode 100644
index 0000000..4dd6a1b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/stringConstantChange/src/Client.java
@@ -0,0 +1,5 @@
+class Client {
+  public static void main(String[] args) {
+    System.out.println(Server.s);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/stringConstantChange/src/Server.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/stringConstantChange/src/Server.java
new file mode 100644
index 0000000..8a24f1b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/stringConstantChange/src/Server.java
@@ -0,0 +1,3 @@
+class Server {
+  static final String s = "StaticFinal";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/stringConstantLessAccessible.log b/java/java-tests/testData/compileServer/incremental/fieldProperties/stringConstantLessAccessible.log
new file mode 100644
index 0000000..9fc937a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/stringConstantLessAccessible.log
@@ -0,0 +1,14 @@
+Cleaning output files:
+out/production/StringConstantLessAccessible/Server.class
+End of files
+Compiling files:
+src/Server.java
+End of files
+Cleaning output files:
+out/production/StringConstantLessAccessible/Client.class
+out/production/StringConstantLessAccessible/Server.class
+End of files
+Compiling files:
+src/Client.java
+src/Server.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/stringConstantLessAccessible/Server.java.new b/java/java-tests/testData/compileServer/incremental/fieldProperties/stringConstantLessAccessible/Server.java.new
new file mode 100644
index 0000000..7667471
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/stringConstantLessAccessible/Server.java.new
@@ -0,0 +1,3 @@
+class Server {
+  private static final String s = "StaticFinal";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/stringConstantLessAccessible/src/Client.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/stringConstantLessAccessible/src/Client.java
new file mode 100644
index 0000000..4dd6a1b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/stringConstantLessAccessible/src/Client.java
@@ -0,0 +1,5 @@
+class Client {
+  public static void main(String[] args) {
+    System.out.println(Server.s);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/stringConstantLessAccessible/src/Server.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/stringConstantLessAccessible/src/Server.java
new file mode 100644
index 0000000..94a7894
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/stringConstantLessAccessible/src/Server.java
@@ -0,0 +1,3 @@
+class Server {
+  public static final String s = "StaticFinal";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange.log b/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange.log
new file mode 100644
index 0000000..4a06eb6
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/TypeChange/A.class
+End of files
+Compiling files:
+src/A.java
+End of files
+Cleaning output files:
+out/production/TypeChange/B.class
+End of files
+Compiling files:
+src/B.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange/A.java.new b/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange/A.java.new
new file mode 100644
index 0000000..19933f3
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange/A.java.new
@@ -0,0 +1,3 @@
+public class A {
+    String x;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange/src/A.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange/src/A.java
new file mode 100644
index 0000000..7eb326c
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange/src/A.java
@@ -0,0 +1,3 @@
+public class A {
+    int x;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange/src/B.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange/src/B.java
new file mode 100644
index 0000000..8525bcf
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange/src/B.java
@@ -0,0 +1,5 @@
+public class B {
+    void f (A a) {
+        a.x = 1;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange1.log b/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange1.log
new file mode 100644
index 0000000..bdcd781
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange1.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/TypeChange1/A.class
+End of files
+Compiling files:
+src/A.java
+End of files
+Cleaning output files:
+out/production/TypeChange1/C.class
+End of files
+Compiling files:
+src/C.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange1/A.java.new b/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange1/A.java.new
new file mode 100644
index 0000000..19933f3
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange1/A.java.new
@@ -0,0 +1,3 @@
+public class A {
+    String x;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange1/src/A.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange1/src/A.java
new file mode 100644
index 0000000..7eb326c
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange1/src/A.java
@@ -0,0 +1,3 @@
+public class A {
+    int x;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange1/src/B.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange1/src/B.java
new file mode 100644
index 0000000..b221a53
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange1/src/B.java
@@ -0,0 +1,2 @@
+public class B extends A {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange1/src/C.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange1/src/C.java
new file mode 100644
index 0000000..10b551c
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange1/src/C.java
@@ -0,0 +1,5 @@
+public class C {
+    void f (B b) {
+        b.x = 1;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange1/src/D.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange1/src/D.java
new file mode 100644
index 0000000..3f94511
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange1/src/D.java
@@ -0,0 +1,5 @@
+public class D {
+    void f (B b) {
+
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange2.log b/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange2.log
new file mode 100644
index 0000000..16d8fdf
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange2.log
@@ -0,0 +1,6 @@
+Cleaning output files:
+out/production/TypeChange2/A.class
+End of files
+Compiling files:
+src/A.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange2/A.java.new b/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange2/A.java.new
new file mode 100644
index 0000000..19933f3
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange2/A.java.new
@@ -0,0 +1,3 @@
+public class A {
+    String x;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange2/src/A.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange2/src/A.java
new file mode 100644
index 0000000..a94c5f7
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange2/src/A.java
@@ -0,0 +1,3 @@
+public class A {
+  public int x;
+}
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange2/src/B.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange2/src/B.java
new file mode 100644
index 0000000..612277a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange2/src/B.java
@@ -0,0 +1,3 @@
+public class B extends A {
+  public int x;
+}
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange2/src/C.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange2/src/C.java
new file mode 100644
index 0000000..10b551c
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange2/src/C.java
@@ -0,0 +1,5 @@
+public class C {
+    void f (B b) {
+        b.x = 1;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange2/src/D.java b/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange2/src/D.java
new file mode 100644
index 0000000..3f94511
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/fieldProperties/typeChange2/src/D.java
@@ -0,0 +1,5 @@
+public class D {
+    void f (B b) {
+
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/addMethodToBase.log b/java/java-tests/testData/compileServer/incremental/generics/addMethodToBase.log
new file mode 100644
index 0000000..750a8ba
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/addMethodToBase.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/AddMethodToBase/C.class
+End of files
+Compiling files:
+src/C.java
+End of files
+Cleaning output files:
+out/production/AddMethodToBase/D.class
+End of files
+Compiling files:
+src/D.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/generics/addMethodToBase/C.java.new b/java/java-tests/testData/compileServer/incremental/generics/addMethodToBase/C.java.new
new file mode 100644
index 0000000..c0a9b50
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/addMethodToBase/C.java.new
@@ -0,0 +1,3 @@
+public class C {
+  Object id(Object x) {return null;}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/addMethodToBase/data.xml b/java/java-tests/testData/compileServer/incremental/generics/addMethodToBase/data.xml
new file mode 100644
index 0000000..e068e47
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/addMethodToBase/data.xml
@@ -0,0 +1,10 @@
+<testData>
+  <deleted_by_make>
+    <file path="classes/C.class" />
+    <file path="classes/D.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/D.java" />
+  </recompile>
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/addMethodToBase/src/C.java b/java/java-tests/testData/compileServer/incremental/generics/addMethodToBase/src/C.java
new file mode 100644
index 0000000..f5ef01c
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/addMethodToBase/src/C.java
@@ -0,0 +1,2 @@
+public class C {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/addMethodToBase/src/D.java b/java/java-tests/testData/compileServer/incremental/generics/addMethodToBase/src/D.java
new file mode 100644
index 0000000..6595d74
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/addMethodToBase/src/D.java
@@ -0,0 +1,3 @@
+public class D<A> extends C {
+  A id(A x) {return null;}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/addParameterizedMethodToBase.log b/java/java-tests/testData/compileServer/incremental/generics/addParameterizedMethodToBase.log
new file mode 100644
index 0000000..f78d66a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/addParameterizedMethodToBase.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/AddParameterizedMethodToBase/C.class
+End of files
+Compiling files:
+src/C.java
+End of files
+Cleaning output files:
+out/production/AddParameterizedMethodToBase/D.class
+End of files
+Compiling files:
+src/D.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/generics/addParameterizedMethodToBase/C.java.new b/java/java-tests/testData/compileServer/incremental/generics/addParameterizedMethodToBase/C.java.new
new file mode 100644
index 0000000..b471d06
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/addParameterizedMethodToBase/C.java.new
@@ -0,0 +1,3 @@
+public class C<A> {
+  A id(A x) {return null;}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/addParameterizedMethodToBase/data.xml b/java/java-tests/testData/compileServer/incremental/generics/addParameterizedMethodToBase/data.xml
new file mode 100644
index 0000000..e068e47
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/addParameterizedMethodToBase/data.xml
@@ -0,0 +1,10 @@
+<testData>
+  <deleted_by_make>
+    <file path="classes/C.class" />
+    <file path="classes/D.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/D.java" />
+  </recompile>
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/addParameterizedMethodToBase/src/C.java b/java/java-tests/testData/compileServer/incremental/generics/addParameterizedMethodToBase/src/C.java
new file mode 100644
index 0000000..6a7fffc
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/addParameterizedMethodToBase/src/C.java
@@ -0,0 +1,2 @@
+public class C<A> {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/addParameterizedMethodToBase/src/D.java b/java/java-tests/testData/compileServer/incremental/generics/addParameterizedMethodToBase/src/D.java
new file mode 100644
index 0000000..3459955
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/addParameterizedMethodToBase/src/D.java
@@ -0,0 +1,3 @@
+public class D extends C<String> {
+  Object id(Object x) {return null;}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/argumentContainment.log b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment.log
new file mode 100644
index 0000000..701b32d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment.log
@@ -0,0 +1,16 @@
+Cleaning output files:
+out/production/ArgumentContainment/Sub2.class
+End of files
+Compiling files:
+src/Sub2.java
+End of files
+Cleaning output files:
+out/production/ArgumentContainment/CaptureCreator.class
+out/production/ArgumentContainment/CaptureCreator2.class
+out/production/ArgumentContainment/GenericBound.class
+End of files
+Compiling files:
+src/CaptureCreator.java
+src/CaptureCreator2.java
+src/GenericBound.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/generics/argumentContainment/Sub2.java.new b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment/Sub2.java.new
new file mode 100644
index 0000000..1c8077f
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment/Sub2.java.new
@@ -0,0 +1,2 @@
+public class Sub2 {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/argumentContainment/src/CaptureCreator.java b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment/src/CaptureCreator.java
new file mode 100644
index 0000000..e8ff8cc
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment/src/CaptureCreator.java
@@ -0,0 +1,4 @@
+public class CaptureCreator {
+    public void context(GenericBound<? extends Parent> p) {
+    }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/argumentContainment/src/CaptureCreator2.java b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment/src/CaptureCreator2.java
new file mode 100644
index 0000000..dc9ed69
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment/src/CaptureCreator2.java
@@ -0,0 +1,4 @@
+public class CaptureCreator2 {
+    public void context(GenericBound<? extends Sub> p) {
+    }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/argumentContainment/src/GenericBound.java b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment/src/GenericBound.java
new file mode 100644
index 0000000..981d946
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment/src/GenericBound.java
@@ -0,0 +1,2 @@
+public class GenericBound<T extends Sub2> {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/argumentContainment/src/Parent.java b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment/src/Parent.java
new file mode 100644
index 0000000..5df6d8e
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment/src/Parent.java
@@ -0,0 +1,2 @@
+public class Parent {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/argumentContainment/src/Sub.java b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment/src/Sub.java
new file mode 100644
index 0000000..064dac5
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment/src/Sub.java
@@ -0,0 +1,2 @@
+public class Sub extends Parent {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/argumentContainment/src/Sub2.java b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment/src/Sub2.java
new file mode 100644
index 0000000..fded6ce
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment/src/Sub2.java
@@ -0,0 +1,2 @@
+public class Sub2 extends Sub {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/argumentContainment2.log b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment2.log
new file mode 100644
index 0000000..ed99a16
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment2.log
@@ -0,0 +1,18 @@
+Cleaning output files:
+out/production/ArgumentContainment2/Sub.class
+End of files
+Compiling files:
+src/Sub.java
+End of files
+Cleaning output files:
+out/production/ArgumentContainment2/CaptureCreator.class
+out/production/ArgumentContainment2/CaptureCreator2.class
+out/production/ArgumentContainment2/GenericBound.class
+out/production/ArgumentContainment2/Sub2.class
+End of files
+Compiling files:
+src/CaptureCreator.java
+src/CaptureCreator2.java
+src/GenericBound.java
+src/Sub2.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/generics/argumentContainment2/Sub.java.new b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment2/Sub.java.new
new file mode 100644
index 0000000..a9a29ea
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment2/Sub.java.new
@@ -0,0 +1,2 @@
+public class Sub {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/argumentContainment2/src/CaptureCreator.java b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment2/src/CaptureCreator.java
new file mode 100644
index 0000000..15ca0b2
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment2/src/CaptureCreator.java
@@ -0,0 +1,4 @@
+public class CaptureCreator {
+    public void context(GenericBound<? super Sub> p) {
+    }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/argumentContainment2/src/CaptureCreator2.java b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment2/src/CaptureCreator2.java
new file mode 100644
index 0000000..c15e09e
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment2/src/CaptureCreator2.java
@@ -0,0 +1,4 @@
+public class CaptureCreator2 {
+    public void context(GenericBound<? super Sub2> p) {
+    }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/argumentContainment2/src/GenericBound.java b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment2/src/GenericBound.java
new file mode 100644
index 0000000..565467e
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment2/src/GenericBound.java
@@ -0,0 +1,2 @@
+public class GenericBound<T extends Parent> {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/argumentContainment2/src/Parent.java b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment2/src/Parent.java
new file mode 100644
index 0000000..5df6d8e
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment2/src/Parent.java
@@ -0,0 +1,2 @@
+public class Parent {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/argumentContainment2/src/Sub.java b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment2/src/Sub.java
new file mode 100644
index 0000000..064dac5
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment2/src/Sub.java
@@ -0,0 +1,2 @@
+public class Sub extends Parent {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/argumentContainment2/src/Sub2.java b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment2/src/Sub2.java
new file mode 100644
index 0000000..9f5cebd
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment2/src/Sub2.java
@@ -0,0 +1,2 @@
+public class Sub2 extends Sub{
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/argumentContainment3.log b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment3.log
new file mode 100644
index 0000000..562536f
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment3.log
@@ -0,0 +1,14 @@
+Cleaning output files:
+out/production/ArgumentContainment3/Sub2.class
+End of files
+Compiling files:
+src/Sub2.java
+End of files
+Cleaning output files:
+out/production/ArgumentContainment3/CaptureCreator2.class
+out/production/ArgumentContainment3/GenericBound.class
+End of files
+Compiling files:
+src/CaptureCreator2.java
+src/GenericBound.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/generics/argumentContainment3/Sub2.java.new b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment3/Sub2.java.new
new file mode 100644
index 0000000..37326b7
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment3/Sub2.java.new
@@ -0,0 +1,2 @@
+public class Sub2 extends Parent {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/argumentContainment3/src/CaptureCreator.java b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment3/src/CaptureCreator.java
new file mode 100644
index 0000000..e8ff8cc
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment3/src/CaptureCreator.java
@@ -0,0 +1,4 @@
+public class CaptureCreator {
+    public void context(GenericBound<? extends Parent> p) {
+    }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/argumentContainment3/src/CaptureCreator2.java b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment3/src/CaptureCreator2.java
new file mode 100644
index 0000000..dc9ed69
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment3/src/CaptureCreator2.java
@@ -0,0 +1,4 @@
+public class CaptureCreator2 {
+    public void context(GenericBound<? extends Sub> p) {
+    }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/argumentContainment3/src/GenericBound.java b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment3/src/GenericBound.java
new file mode 100644
index 0000000..981d946
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment3/src/GenericBound.java
@@ -0,0 +1,2 @@
+public class GenericBound<T extends Sub2> {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/argumentContainment3/src/Parent.java b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment3/src/Parent.java
new file mode 100644
index 0000000..5df6d8e
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment3/src/Parent.java
@@ -0,0 +1,2 @@
+public class Parent {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/argumentContainment3/src/Sub.java b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment3/src/Sub.java
new file mode 100644
index 0000000..064dac5
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment3/src/Sub.java
@@ -0,0 +1,2 @@
+public class Sub extends Parent {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/argumentContainment3/src/Sub2.java b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment3/src/Sub2.java
new file mode 100644
index 0000000..fded6ce
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/argumentContainment3/src/Sub2.java
@@ -0,0 +1,2 @@
+public class Sub2 extends Sub {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeBound.log b/java/java-tests/testData/compileServer/incremental/generics/changeBound.log
new file mode 100644
index 0000000..3b25d7d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeBound.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/ChangeBound/A.class
+End of files
+Compiling files:
+src/A.java
+End of files
+Cleaning output files:
+out/production/ChangeBound/Client.class
+End of files
+Compiling files:
+src/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeBound/A.java.new b/java/java-tests/testData/compileServer/incremental/generics/changeBound/A.java.new
new file mode 100644
index 0000000..7ac48e9
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeBound/A.java.new
@@ -0,0 +1,3 @@
+public class A<T extends String> {
+  T foo() {return null;}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeBound/src/A.java b/java/java-tests/testData/compileServer/incremental/generics/changeBound/src/A.java
new file mode 100644
index 0000000..c4d6333
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeBound/src/A.java
@@ -0,0 +1,3 @@
+public class A<T extends Value> {
+  T foo() {return null;}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeBound/src/Client.java b/java/java-tests/testData/compileServer/incremental/generics/changeBound/src/Client.java
new file mode 100644
index 0000000..d5766f5
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeBound/src/Client.java
@@ -0,0 +1,5 @@
+public class Client {
+  public static void main(String[] args) {
+    Object value = new A<ValueImpl>().foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeBound/src/Value.java b/java/java-tests/testData/compileServer/incremental/generics/changeBound/src/Value.java
new file mode 100644
index 0000000..81b79c3
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeBound/src/Value.java
@@ -0,0 +1,2 @@
+public class Value {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeBound/src/ValueImpl.java b/java/java-tests/testData/compileServer/incremental/generics/changeBound/src/ValueImpl.java
new file mode 100644
index 0000000..d5192e9
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeBound/src/ValueImpl.java
@@ -0,0 +1,2 @@
+public class ValueImpl extends Value {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeBound1.log b/java/java-tests/testData/compileServer/incremental/generics/changeBound1.log
new file mode 100644
index 0000000..330345e
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeBound1.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/ChangeBound1/A.class
+End of files
+Compiling files:
+src/A.java
+End of files
+Cleaning output files:
+out/production/ChangeBound1/Client.class
+End of files
+Compiling files:
+src/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeBound1/A.java.new b/java/java-tests/testData/compileServer/incremental/generics/changeBound1/A.java.new
new file mode 100644
index 0000000..b5fba09
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeBound1/A.java.new
@@ -0,0 +1,3 @@
+public class A<T extends String> {
+  void foo(T t) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeBound1/src/A.java b/java/java-tests/testData/compileServer/incremental/generics/changeBound1/src/A.java
new file mode 100644
index 0000000..f44e766
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeBound1/src/A.java
@@ -0,0 +1,3 @@
+public class A<T extends Value> {
+  void foo(T t) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeBound1/src/Client.java b/java/java-tests/testData/compileServer/incremental/generics/changeBound1/src/Client.java
new file mode 100644
index 0000000..b89e1e1
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeBound1/src/Client.java
@@ -0,0 +1,5 @@
+public class Client {
+  public static void main(String[] args) {
+    new A<ValueImpl>().foo(new ValueImpl());
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeBound1/src/Value.java b/java/java-tests/testData/compileServer/incremental/generics/changeBound1/src/Value.java
new file mode 100644
index 0000000..81b79c3
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeBound1/src/Value.java
@@ -0,0 +1,2 @@
+public class Value {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeBound1/src/ValueImpl.java b/java/java-tests/testData/compileServer/incremental/generics/changeBound1/src/ValueImpl.java
new file mode 100644
index 0000000..d5192e9
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeBound1/src/ValueImpl.java
@@ -0,0 +1,2 @@
+public class ValueImpl extends Value {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeBoundClass1.log b/java/java-tests/testData/compileServer/incremental/generics/changeBoundClass1.log
new file mode 100644
index 0000000..cc5a1d1
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeBoundClass1.log
@@ -0,0 +1,9 @@
+Cleaning output files:
+out/production/ChangeBoundClass1/Value.class
+End of files
+Cleaning output files:
+out/production/ChangeBoundClass1/A.class
+End of files
+Compiling files:
+src/A.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeBoundClass1/Value.java.remove b/java/java-tests/testData/compileServer/incremental/generics/changeBoundClass1/Value.java.remove
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeBoundClass1/Value.java.remove
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeBoundClass1/src/A.java b/java/java-tests/testData/compileServer/incremental/generics/changeBoundClass1/src/A.java
new file mode 100644
index 0000000..23431c1
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeBoundClass1/src/A.java
@@ -0,0 +1,2 @@
+public class A<T extends Value> {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeBoundClass1/src/Value.java b/java/java-tests/testData/compileServer/incremental/generics/changeBoundClass1/src/Value.java
new file mode 100644
index 0000000..81b79c3
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeBoundClass1/src/Value.java
@@ -0,0 +1,2 @@
+public class Value {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeBoundInterface1.log b/java/java-tests/testData/compileServer/incremental/generics/changeBoundInterface1.log
new file mode 100644
index 0000000..12bb7ba
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeBoundInterface1.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/ChangeBoundInterface1/I.class
+End of files
+Compiling files:
+src/I.java
+End of files
+Cleaning output files:
+out/production/ChangeBoundInterface1/A.class
+End of files
+Compiling files:
+src/A.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeBoundInterface1/I.java.new b/java/java-tests/testData/compileServer/incremental/generics/changeBoundInterface1/I.java.new
new file mode 100644
index 0000000..854f3b9
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeBoundInterface1/I.java.new
@@ -0,0 +1,3 @@
+public class I {
+  void bar() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeBoundInterface1/src/A.java b/java/java-tests/testData/compileServer/incremental/generics/changeBoundInterface1/src/A.java
new file mode 100644
index 0000000..9e71f72
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeBoundInterface1/src/A.java
@@ -0,0 +1,3 @@
+public class A<T extends Value & I> {
+  void foo(T t) {t.foo();}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeBoundInterface1/src/I.java b/java/java-tests/testData/compileServer/incremental/generics/changeBoundInterface1/src/I.java
new file mode 100644
index 0000000..ca2ee32
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeBoundInterface1/src/I.java
@@ -0,0 +1,3 @@
+public interface I {
+  void bar();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeBoundInterface1/src/Value.java b/java/java-tests/testData/compileServer/incremental/generics/changeBoundInterface1/src/Value.java
new file mode 100644
index 0000000..8a48a2b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeBoundInterface1/src/Value.java
@@ -0,0 +1,3 @@
+public class Value {
+  void foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeBoundedClass.log b/java/java-tests/testData/compileServer/incremental/generics/changeBoundedClass.log
new file mode 100644
index 0000000..2b416bd
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeBoundedClass.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/ChangeBoundedClass/Value.class
+End of files
+Compiling files:
+src/Value.java
+End of files
+Cleaning output files:
+out/production/ChangeBoundedClass/A.class
+End of files
+Compiling files:
+src/A.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeBoundedClass/Value.java.new b/java/java-tests/testData/compileServer/incremental/generics/changeBoundedClass/Value.java.new
new file mode 100644
index 0000000..81b79c3
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeBoundedClass/Value.java.new
@@ -0,0 +1,2 @@
+public class Value {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeBoundedClass/src/A.java b/java/java-tests/testData/compileServer/incremental/generics/changeBoundedClass/src/A.java
new file mode 100644
index 0000000..6a49e02
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeBoundedClass/src/A.java
@@ -0,0 +1,3 @@
+public class A<T extends Value> {
+  void foo(T t) {t.foo();}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeBoundedClass/src/Value.java b/java/java-tests/testData/compileServer/incremental/generics/changeBoundedClass/src/Value.java
new file mode 100644
index 0000000..8a48a2b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeBoundedClass/src/Value.java
@@ -0,0 +1,3 @@
+public class Value {
+  void foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeExtends.log b/java/java-tests/testData/compileServer/incremental/generics/changeExtends.log
new file mode 100644
index 0000000..0cba040
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeExtends.log
@@ -0,0 +1,16 @@
+Cleaning output files:
+out/production/ChangeExtends/Super.class
+End of files
+Compiling files:
+src/Super.java
+End of files
+Cleaning output files:
+out/production/ChangeExtends/Client.class
+out/production/ChangeExtends/Client2.class
+out/production/ChangeExtends/Client3.class
+End of files
+Compiling files:
+src/Client.java
+src/Client2.java
+src/Client3.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeExtends/Super.java.new b/java/java-tests/testData/compileServer/incremental/generics/changeExtends/Super.java.new
new file mode 100644
index 0000000..834a541
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeExtends/Super.java.new
@@ -0,0 +1,3 @@
+class Super extends Hyper<String> {
+  char s = 's';
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeExtends/src/Client.java b/java/java-tests/testData/compileServer/incremental/generics/changeExtends/src/Client.java
new file mode 100644
index 0000000..7bd6d37
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeExtends/src/Client.java
@@ -0,0 +1,7 @@
+class Client {
+  public static void main(String[] args) {
+    Super s = new Super();
+    s.h = new Integer(10);
+    System.out.println(s.h);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeExtends/src/Client2.java b/java/java-tests/testData/compileServer/incremental/generics/changeExtends/src/Client2.java
new file mode 100644
index 0000000..8900d02
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeExtends/src/Client2.java
@@ -0,0 +1,4 @@
+class Client2 extends Super {
+  public static void main(String[] args) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeExtends/src/Client3.java b/java/java-tests/testData/compileServer/incremental/generics/changeExtends/src/Client3.java
new file mode 100644
index 0000000..673fd84
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeExtends/src/Client3.java
@@ -0,0 +1,4 @@
+class Client3 extends Client2 {
+  public static void main(String[] args) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeExtends/src/Hyper.java b/java/java-tests/testData/compileServer/incremental/generics/changeExtends/src/Hyper.java
new file mode 100644
index 0000000..03d264d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeExtends/src/Hyper.java
@@ -0,0 +1,3 @@
+class Hyper<T> {
+  T h;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeExtends/src/Super.java b/java/java-tests/testData/compileServer/incremental/generics/changeExtends/src/Super.java
new file mode 100644
index 0000000..c88552b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeExtends/src/Super.java
@@ -0,0 +1,3 @@
+class Super extends Hyper<Integer> {
+  char s = 's';
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeExtends1.log b/java/java-tests/testData/compileServer/incremental/generics/changeExtends1.log
new file mode 100644
index 0000000..14aaae4
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeExtends1.log
@@ -0,0 +1,16 @@
+Cleaning output files:
+out/production/ChangeExtends1/Super.class
+End of files
+Compiling files:
+src/Super.java
+End of files
+Cleaning output files:
+out/production/ChangeExtends1/Client.class
+out/production/ChangeExtends1/Client2.class
+out/production/ChangeExtends1/Client3.class
+End of files
+Compiling files:
+src/Client.java
+src/Client2.java
+src/Client3.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeExtends1/Super.java.new b/java/java-tests/testData/compileServer/incremental/generics/changeExtends1/Super.java.new
new file mode 100644
index 0000000..c88552b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeExtends1/Super.java.new
@@ -0,0 +1,3 @@
+class Super extends Hyper<Integer> {
+  char s = 's';
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeExtends1/src/Client.java b/java/java-tests/testData/compileServer/incremental/generics/changeExtends1/src/Client.java
new file mode 100644
index 0000000..37dea76
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeExtends1/src/Client.java
@@ -0,0 +1,5 @@
+class Client {
+  public static void main(String[] args) {
+    new Super();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeExtends1/src/Client2.java b/java/java-tests/testData/compileServer/incremental/generics/changeExtends1/src/Client2.java
new file mode 100644
index 0000000..8900d02
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeExtends1/src/Client2.java
@@ -0,0 +1,4 @@
+class Client2 extends Super {
+  public static void main(String[] args) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeExtends1/src/Client3.java b/java/java-tests/testData/compileServer/incremental/generics/changeExtends1/src/Client3.java
new file mode 100644
index 0000000..673fd84
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeExtends1/src/Client3.java
@@ -0,0 +1,4 @@
+class Client3 extends Client2 {
+  public static void main(String[] args) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeExtends1/src/Hyper.java b/java/java-tests/testData/compileServer/incremental/generics/changeExtends1/src/Hyper.java
new file mode 100644
index 0000000..55bf3d7
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeExtends1/src/Hyper.java
@@ -0,0 +1,3 @@
+class Hyper<T> {
+ T h;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeExtends1/src/Super.java b/java/java-tests/testData/compileServer/incremental/generics/changeExtends1/src/Super.java
new file mode 100644
index 0000000..98449a3
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeExtends1/src/Super.java
@@ -0,0 +1,3 @@
+class Super extends Hyper {
+  char s = 's';
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeExtends2.log b/java/java-tests/testData/compileServer/incremental/generics/changeExtends2.log
new file mode 100644
index 0000000..ef64a1b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeExtends2.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/ChangeExtends2/Super.class
+End of files
+Compiling files:
+src/Super.java
+End of files
+Cleaning output files:
+out/production/ChangeExtends2/Client.class
+End of files
+Compiling files:
+src/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeExtends2/Super.java.new b/java/java-tests/testData/compileServer/incremental/generics/changeExtends2/Super.java.new
new file mode 100644
index 0000000..f789e14
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeExtends2/Super.java.new
@@ -0,0 +1,2 @@
+class Super extends Hyper<Integer> {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeExtends2/src/Client.java b/java/java-tests/testData/compileServer/incremental/generics/changeExtends2/src/Client.java
new file mode 100644
index 0000000..8c2078a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeExtends2/src/Client.java
@@ -0,0 +1,5 @@
+class Client {
+  public static void main(String[] args) {
+    new Super().foo(new Object());
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeExtends2/src/Hyper.java b/java/java-tests/testData/compileServer/incremental/generics/changeExtends2/src/Hyper.java
new file mode 100644
index 0000000..ce2df6c
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeExtends2/src/Hyper.java
@@ -0,0 +1,3 @@
+class Hyper<T> {
+ void foo(T t) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeExtends2/src/Super.java b/java/java-tests/testData/compileServer/incremental/generics/changeExtends2/src/Super.java
new file mode 100644
index 0000000..c62e55d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeExtends2/src/Super.java
@@ -0,0 +1,2 @@
+class Super extends Hyper {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeImplements.log b/java/java-tests/testData/compileServer/incremental/generics/changeImplements.log
new file mode 100644
index 0000000..7e15fe4
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeImplements.log
@@ -0,0 +1,16 @@
+Cleaning output files:
+out/production/ChangeImplements/Super.class
+End of files
+Compiling files:
+src/Super.java
+End of files
+Cleaning output files:
+out/production/ChangeImplements/Client.class
+out/production/ChangeImplements/Client2.class
+out/production/ChangeImplements/Client3.class
+End of files
+Compiling files:
+src/Client.java
+src/Client2.java
+src/Client3.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeImplements/Super.java.new b/java/java-tests/testData/compileServer/incremental/generics/changeImplements/Super.java.new
new file mode 100644
index 0000000..23543f6
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeImplements/Super.java.new
@@ -0,0 +1,3 @@
+class Super implements Hyper<String> {
+  public void foo(String t) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeImplements/src/Client.java b/java/java-tests/testData/compileServer/incremental/generics/changeImplements/src/Client.java
new file mode 100644
index 0000000..6faf4e1
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeImplements/src/Client.java
@@ -0,0 +1,6 @@
+class Client {
+  public static void main(String[] args) {
+    Hyper s = new Super();
+    s.foo(new Integer(10));
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeImplements/src/Client2.java b/java/java-tests/testData/compileServer/incremental/generics/changeImplements/src/Client2.java
new file mode 100644
index 0000000..8900d02
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeImplements/src/Client2.java
@@ -0,0 +1,4 @@
+class Client2 extends Super {
+  public static void main(String[] args) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeImplements/src/Client3.java b/java/java-tests/testData/compileServer/incremental/generics/changeImplements/src/Client3.java
new file mode 100644
index 0000000..673fd84
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeImplements/src/Client3.java
@@ -0,0 +1,4 @@
+class Client3 extends Client2 {
+  public static void main(String[] args) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeImplements/src/Hyper.java b/java/java-tests/testData/compileServer/incremental/generics/changeImplements/src/Hyper.java
new file mode 100644
index 0000000..cfdd7d6
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeImplements/src/Hyper.java
@@ -0,0 +1,3 @@
+interface Hyper<T> {
+  void foo(T t);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeImplements/src/Super.java b/java/java-tests/testData/compileServer/incremental/generics/changeImplements/src/Super.java
new file mode 100644
index 0000000..d0a1321
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeImplements/src/Super.java
@@ -0,0 +1,3 @@
+class Super implements Hyper<Integer> {
+  public void foo(Integer t) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeInterfaceTypeParameter.log b/java/java-tests/testData/compileServer/incremental/generics/changeInterfaceTypeParameter.log
new file mode 100644
index 0000000..cf30b93
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeInterfaceTypeParameter.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/ChangeInterfaceTypeParameter/B.class
+End of files
+Compiling files:
+src/B.java
+End of files
+Cleaning output files:
+out/production/ChangeInterfaceTypeParameter/C.class
+End of files
+Compiling files:
+src/C.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeInterfaceTypeParameter/B.java.new b/java/java-tests/testData/compileServer/incremental/generics/changeInterfaceTypeParameter/B.java.new
new file mode 100644
index 0000000..8d4336b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeInterfaceTypeParameter/B.java.new
@@ -0,0 +1,2 @@
+public class B implements I<Integer> {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeInterfaceTypeParameter/src/B.java b/java/java-tests/testData/compileServer/incremental/generics/changeInterfaceTypeParameter/src/B.java
new file mode 100644
index 0000000..28cc7e3
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeInterfaceTypeParameter/src/B.java
@@ -0,0 +1,2 @@
+public class B implements I<String> {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeInterfaceTypeParameter/src/C.java b/java/java-tests/testData/compileServer/incremental/generics/changeInterfaceTypeParameter/src/C.java
new file mode 100644
index 0000000..039ee76
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeInterfaceTypeParameter/src/C.java
@@ -0,0 +1,2 @@
+public class C extends B implements I<String> {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeInterfaceTypeParameter/src/I.java b/java/java-tests/testData/compileServer/incremental/generics/changeInterfaceTypeParameter/src/I.java
new file mode 100644
index 0000000..b4555b5
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeInterfaceTypeParameter/src/I.java
@@ -0,0 +1,2 @@
+public interface I<T> {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase.log b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase.log
new file mode 100644
index 0000000..1e07b67
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/ChangeToCovariantMethodInBase/maketest/BaseImplementation.class
+End of files
+Compiling files:
+src/maketest/BaseImplementation.java
+End of files
+Cleaning output files:
+out/production/ChangeToCovariantMethodInBase/maketest/IImpl.class
+End of files
+Compiling files:
+src/maketest/IImpl.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase/data.xml b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase/data.xml
new file mode 100644
index 0000000..09d5e87
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase/data.xml
@@ -0,0 +1,10 @@
+<testData>
+  <deleted_by_make>
+    <file path="classes/maketest/BaseImplementation.class" />
+    <file path="classes/maketest/IImpl.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/maketest/IImpl.java" />
+  </recompile>
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase/src/maketest/BaseImplementation.java b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase/src/maketest/BaseImplementation.java
new file mode 100644
index 0000000..a9ae29f
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase/src/maketest/BaseImplementation.java
@@ -0,0 +1,7 @@
+package maketest;
+
+public class BaseImplementation {
+    public Data getData() {
+        return new DataEx();
+    }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase/src/maketest/BaseImplementation.java.new b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase/src/maketest/BaseImplementation.java.new
new file mode 100644
index 0000000..0749270
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase/src/maketest/BaseImplementation.java.new
@@ -0,0 +1,7 @@
+package maketest;
+
+public class BaseImplementation {
+    public DataEx getData() {
+        return new DataEx();
+    }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase/src/maketest/Data.java b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase/src/maketest/Data.java
new file mode 100644
index 0000000..df1fecd
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase/src/maketest/Data.java
@@ -0,0 +1,4 @@
+package maketest;
+
+public class Data {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase/src/maketest/DataEx.java b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase/src/maketest/DataEx.java
new file mode 100644
index 0000000..d42a6fb
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase/src/maketest/DataEx.java
@@ -0,0 +1,4 @@
+package maketest;
+
+public class DataEx extends Data {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase/src/maketest/I.java b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase/src/maketest/I.java
new file mode 100644
index 0000000..8437821
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase/src/maketest/I.java
@@ -0,0 +1,5 @@
+package maketest;
+
+public interface I {
+    Data getData();
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase/src/maketest/IImpl.java b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase/src/maketest/IImpl.java
new file mode 100644
index 0000000..ced8129
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase/src/maketest/IImpl.java
@@ -0,0 +1,4 @@
+package maketest;
+
+public class IImpl extends BaseImplementation implements I {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase/src/maketest/Main.java b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase/src/maketest/Main.java
new file mode 100644
index 0000000..83fac4d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase/src/maketest/Main.java
@@ -0,0 +1,9 @@
+package maketest;
+
+public class Main {
+    public static void main(String[] args) {
+        I i = new IImpl();
+        Data data = i.getData();
+        System.out.println("data = " + data);
+    }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase2.log b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase2.log
new file mode 100644
index 0000000..982ae9a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase2.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/ChangeToCovariantMethodInBase2/maketest/BaseImplementation.class
+End of files
+Compiling files:
+src/maketest/BaseImplementation.java
+End of files
+Cleaning output files:
+out/production/ChangeToCovariantMethodInBase2/maketest/IImpl.class
+End of files
+Compiling files:
+src/maketest/IImpl.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase2/data.xml b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase2/data.xml
new file mode 100644
index 0000000..09d5e87
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase2/data.xml
@@ -0,0 +1,10 @@
+<testData>
+  <deleted_by_make>
+    <file path="classes/maketest/BaseImplementation.class" />
+    <file path="classes/maketest/IImpl.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/maketest/IImpl.java" />
+  </recompile>
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase2/src/maketest/BaseImplementation.java b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase2/src/maketest/BaseImplementation.java
new file mode 100644
index 0000000..a9ae29f
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase2/src/maketest/BaseImplementation.java
@@ -0,0 +1,7 @@
+package maketest;
+
+public class BaseImplementation {
+    public Data getData() {
+        return new DataEx();
+    }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase2/src/maketest/BaseImplementation.java.new b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase2/src/maketest/BaseImplementation.java.new
new file mode 100644
index 0000000..0749270
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase2/src/maketest/BaseImplementation.java.new
@@ -0,0 +1,7 @@
+package maketest;
+
+public class BaseImplementation {
+    public DataEx getData() {
+        return new DataEx();
+    }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase2/src/maketest/Data.java b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase2/src/maketest/Data.java
new file mode 100644
index 0000000..df1fecd
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase2/src/maketest/Data.java
@@ -0,0 +1,4 @@
+package maketest;
+
+public class Data {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase2/src/maketest/DataEx.java b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase2/src/maketest/DataEx.java
new file mode 100644
index 0000000..d42a6fb
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase2/src/maketest/DataEx.java
@@ -0,0 +1,4 @@
+package maketest;
+
+public class DataEx extends Data {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase2/src/maketest/I.java b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase2/src/maketest/I.java
new file mode 100644
index 0000000..8437821
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase2/src/maketest/I.java
@@ -0,0 +1,5 @@
+package maketest;
+
+public interface I {
+    Data getData();
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase2/src/maketest/IImpl.java b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase2/src/maketest/IImpl.java
new file mode 100644
index 0000000..e92c7e2
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase2/src/maketest/IImpl.java
@@ -0,0 +1,4 @@
+package maketest;
+
+public class IImpl extends BaseImplementation implements J {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase2/src/maketest/J.java b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase2/src/maketest/J.java
new file mode 100644
index 0000000..4216ec6
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase2/src/maketest/J.java
@@ -0,0 +1,4 @@
+package maketest;
+
+public interface J extends I {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase2/src/maketest/Main.java b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase2/src/maketest/Main.java
new file mode 100644
index 0000000..83fac4d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase2/src/maketest/Main.java
@@ -0,0 +1,9 @@
+package maketest;
+
+public class Main {
+    public static void main(String[] args) {
+        I i = new IImpl();
+        Data data = i.getData();
+        System.out.println("data = " + data);
+    }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/data.xml b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/data.xml
new file mode 100644
index 0000000..dd8407c3
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/data.xml
@@ -0,0 +1,10 @@
+<testData>
+  <deleted_by_make>
+    <file path="classes/maketest/BaseImplementation.class" />
+    <file path="classes/maketest/Mediator.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/maketest/Mediator.java" />
+  </recompile>
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/out/production/ChangeToCovariantMethodInBase3/maketest/BaseImplementation.class b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/out/production/ChangeToCovariantMethodInBase3/maketest/BaseImplementation.class
new file mode 100644
index 0000000..1398334
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/out/production/ChangeToCovariantMethodInBase3/maketest/BaseImplementation.class
Binary files differ
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/out/production/ChangeToCovariantMethodInBase3/maketest/Data.class b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/out/production/ChangeToCovariantMethodInBase3/maketest/Data.class
new file mode 100644
index 0000000..42e07d6
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/out/production/ChangeToCovariantMethodInBase3/maketest/Data.class
Binary files differ
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/out/production/ChangeToCovariantMethodInBase3/maketest/DataEx.class b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/out/production/ChangeToCovariantMethodInBase3/maketest/DataEx.class
new file mode 100644
index 0000000..59f0bdd
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/out/production/ChangeToCovariantMethodInBase3/maketest/DataEx.class
Binary files differ
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/out/production/ChangeToCovariantMethodInBase3/maketest/I.class b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/out/production/ChangeToCovariantMethodInBase3/maketest/I.class
new file mode 100644
index 0000000..bc7d455
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/out/production/ChangeToCovariantMethodInBase3/maketest/I.class
Binary files differ
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/out/production/ChangeToCovariantMethodInBase3/maketest/IImpl.class b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/out/production/ChangeToCovariantMethodInBase3/maketest/IImpl.class
new file mode 100644
index 0000000..437989c
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/out/production/ChangeToCovariantMethodInBase3/maketest/IImpl.class
Binary files differ
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/out/production/ChangeToCovariantMethodInBase3/maketest/J.class b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/out/production/ChangeToCovariantMethodInBase3/maketest/J.class
new file mode 100644
index 0000000..e3b30c8
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/out/production/ChangeToCovariantMethodInBase3/maketest/J.class
Binary files differ
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/out/production/ChangeToCovariantMethodInBase3/maketest/Main.class b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/out/production/ChangeToCovariantMethodInBase3/maketest/Main.class
new file mode 100644
index 0000000..125ad6c
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/out/production/ChangeToCovariantMethodInBase3/maketest/Main.class
Binary files differ
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/out/production/ChangeToCovariantMethodInBase3/maketest/Mediator.class b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/out/production/ChangeToCovariantMethodInBase3/maketest/Mediator.class
new file mode 100644
index 0000000..6e47b22
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/out/production/ChangeToCovariantMethodInBase3/maketest/Mediator.class
Binary files differ
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/src/maketest/BaseImplementation.java b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/src/maketest/BaseImplementation.java
new file mode 100644
index 0000000..a9ae29f
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/src/maketest/BaseImplementation.java
@@ -0,0 +1,7 @@
+package maketest;
+
+public class BaseImplementation {
+    public Data getData() {
+        return new DataEx();
+    }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/src/maketest/BaseImplementation.java.new b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/src/maketest/BaseImplementation.java.new
new file mode 100644
index 0000000..0749270
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/src/maketest/BaseImplementation.java.new
@@ -0,0 +1,7 @@
+package maketest;
+
+public class BaseImplementation {
+    public DataEx getData() {
+        return new DataEx();
+    }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/src/maketest/Data.java b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/src/maketest/Data.java
new file mode 100644
index 0000000..df1fecd
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/src/maketest/Data.java
@@ -0,0 +1,4 @@
+package maketest;
+
+public class Data {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/src/maketest/DataEx.java b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/src/maketest/DataEx.java
new file mode 100644
index 0000000..d42a6fb
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/src/maketest/DataEx.java
@@ -0,0 +1,4 @@
+package maketest;
+
+public class DataEx extends Data {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/src/maketest/I.java b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/src/maketest/I.java
new file mode 100644
index 0000000..8437821
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/src/maketest/I.java
@@ -0,0 +1,5 @@
+package maketest;
+
+public interface I {
+    Data getData();
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/src/maketest/IImpl.java b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/src/maketest/IImpl.java
new file mode 100644
index 0000000..f1cd93f
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/src/maketest/IImpl.java
@@ -0,0 +1,4 @@
+package maketest;
+
+public class IImpl extends Mediator {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/src/maketest/J.java b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/src/maketest/J.java
new file mode 100644
index 0000000..4216ec6
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/src/maketest/J.java
@@ -0,0 +1,4 @@
+package maketest;
+
+public interface J extends I {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/src/maketest/Main.java b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/src/maketest/Main.java
new file mode 100644
index 0000000..83fac4d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/src/maketest/Main.java
@@ -0,0 +1,9 @@
+package maketest;
+
+public class Main {
+    public static void main(String[] args) {
+        I i = new IImpl();
+        Data data = i.getData();
+        System.out.println("data = " + data);
+    }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/src/maketest/Mediator.java b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/src/maketest/Mediator.java
new file mode 100644
index 0000000..4679a88
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeToCovariantMethodInBase3/src/maketest/Mediator.java
@@ -0,0 +1,4 @@
+package maketest;
+
+public class Mediator extends BaseImplementation implements J {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeVarargSignature.log b/java/java-tests/testData/compileServer/incremental/generics/changeVarargSignature.log
new file mode 100644
index 0000000..ed8fa0b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeVarargSignature.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/ChangeVarargSignature/packageA/Base.class
+End of files
+Compiling files:
+src/packageA/Base.java
+End of files
+Cleaning output files:
+out/production/ChangeVarargSignature/packageA/Derived.class
+End of files
+Compiling files:
+src/packageA/Derived.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeVarargSignature/data.xml b/java/java-tests/testData/compileServer/incremental/generics/changeVarargSignature/data.xml
new file mode 100644
index 0000000..d8eb79d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeVarargSignature/data.xml
@@ -0,0 +1,15 @@
+<testData>
+
+  <delete>
+  </delete>
+
+  <deleted_by_make>
+    <file path="classes/packageA/Base.class" />
+    <file path="classes/packageA/Derived.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/packageA/Derived.java" />
+  </recompile>
+
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeVarargSignature/src/packageA/Base.java b/java/java-tests/testData/compileServer/incremental/generics/changeVarargSignature/src/packageA/Base.java
new file mode 100644
index 0000000..b50a9ca
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeVarargSignature/src/packageA/Base.java
@@ -0,0 +1,7 @@
+package packageA;
+
+public class Base {
+  public void foo(String... params) {
+    System.out.println(params);
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeVarargSignature/src/packageA/Base.java.new b/java/java-tests/testData/compileServer/incremental/generics/changeVarargSignature/src/packageA/Base.java.new
new file mode 100644
index 0000000..5b61ab1
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeVarargSignature/src/packageA/Base.java.new
@@ -0,0 +1,7 @@
+package packageA;
+
+public class Base {
+  public void foo(java.util.List<String> params) {
+    System.out.println(params);
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeVarargSignature/src/packageA/Derived.java b/java/java-tests/testData/compileServer/incremental/generics/changeVarargSignature/src/packageA/Derived.java
new file mode 100644
index 0000000..df92b07
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeVarargSignature/src/packageA/Derived.java
@@ -0,0 +1,8 @@
+package packageA;
+
+public class Derived extends Base{
+  @Override
+  public void foo(String... params) {
+    System.out.println("Derived " + params.toString());
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeVarargSignature1.log b/java/java-tests/testData/compileServer/incremental/generics/changeVarargSignature1.log
new file mode 100644
index 0000000..753c2bc
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeVarargSignature1.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/ChangeVarargSignature1/packageA/Base.class
+End of files
+Compiling files:
+src/packageA/Base.java
+End of files
+Cleaning output files:
+out/production/ChangeVarargSignature1/packageA/Deri$ved.class
+End of files
+Compiling files:
+src/packageA/Deri$ved.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeVarargSignature1/data.xml b/java/java-tests/testData/compileServer/incremental/generics/changeVarargSignature1/data.xml
new file mode 100644
index 0000000..8953416
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeVarargSignature1/data.xml
@@ -0,0 +1,15 @@
+<testData>
+
+  <delete>
+  </delete>
+
+  <deleted_by_make>
+    <file path="classes/packageA/Base.class" />
+    <file path="classes/packageA/Deri$ved.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/packageA/Deri$ved.java" />
+  </recompile>
+
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeVarargSignature1/src/packageA/Base.java b/java/java-tests/testData/compileServer/incremental/generics/changeVarargSignature1/src/packageA/Base.java
new file mode 100644
index 0000000..b50a9ca
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeVarargSignature1/src/packageA/Base.java
@@ -0,0 +1,7 @@
+package packageA;
+
+public class Base {
+  public void foo(String... params) {
+    System.out.println(params);
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeVarargSignature1/src/packageA/Base.java.new b/java/java-tests/testData/compileServer/incremental/generics/changeVarargSignature1/src/packageA/Base.java.new
new file mode 100644
index 0000000..5b61ab1
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeVarargSignature1/src/packageA/Base.java.new
@@ -0,0 +1,7 @@
+package packageA;
+
+public class Base {
+  public void foo(java.util.List<String> params) {
+    System.out.println(params);
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/changeVarargSignature1/src/packageA/Deri$ved.java b/java/java-tests/testData/compileServer/incremental/generics/changeVarargSignature1/src/packageA/Deri$ved.java
new file mode 100644
index 0000000..6635f15
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/changeVarargSignature1/src/packageA/Deri$ved.java
@@ -0,0 +1,8 @@
+package packageA;
+
+public class Deri$ved extends Base{
+  @Override
+  public void foo(String... params) {
+    System.out.println("Derived " + params.toString());
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/covariance.log b/java/java-tests/testData/compileServer/incremental/generics/covariance.log
new file mode 100644
index 0000000..6d8f820
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/covariance.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/Covariance/Derived.class
+End of files
+Compiling files:
+src/Derived.java
+End of files
+Cleaning output files:
+out/production/Covariance/Client.class
+End of files
+Compiling files:
+src/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/generics/covariance/Derived.java.new b/java/java-tests/testData/compileServer/incremental/generics/covariance/Derived.java.new
new file mode 100644
index 0000000..1d9492d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/covariance/Derived.java.new
@@ -0,0 +1,2 @@
+public class Derived extends Base {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/covariance/src/Base.java b/java/java-tests/testData/compileServer/incremental/generics/covariance/src/Base.java
new file mode 100644
index 0000000..5cf3082
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/covariance/src/Base.java
@@ -0,0 +1,5 @@
+public class Base {
+  public Value getValue() {
+    return new Value();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/covariance/src/Client.java b/java/java-tests/testData/compileServer/incremental/generics/covariance/src/Client.java
new file mode 100644
index 0000000..9c63430
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/covariance/src/Client.java
@@ -0,0 +1,6 @@
+public class Client {
+  public static void main(String[] args) {
+    Derived obj = new Derived();
+    System.out.println(obj.getValue());
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/covariance/src/Derived.java b/java/java-tests/testData/compileServer/incremental/generics/covariance/src/Derived.java
new file mode 100644
index 0000000..22358a8
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/covariance/src/Derived.java
@@ -0,0 +1,5 @@
+public class Derived extends Base {
+  public ValueDerived getValue() {
+    return new ValueDerived();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/covariance/src/Value.java b/java/java-tests/testData/compileServer/incremental/generics/covariance/src/Value.java
new file mode 100644
index 0000000..2e173ef
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/covariance/src/Value.java
@@ -0,0 +1,5 @@
+public class Value {
+  public String toString() {
+    return "Value";
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/covariance/src/ValueDerived.java b/java/java-tests/testData/compileServer/incremental/generics/covariance/src/ValueDerived.java
new file mode 100644
index 0000000..56d77b5
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/covariance/src/ValueDerived.java
@@ -0,0 +1,5 @@
+public class ValueDerived extends Value {
+  public String toString() {
+    return "ValueDerived";
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/covariance1.log b/java/java-tests/testData/compileServer/incremental/generics/covariance1.log
new file mode 100644
index 0000000..c99cf41f
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/covariance1.log
@@ -0,0 +1,6 @@
+Cleaning output files:
+out/production/Covariance1/Derived.class
+End of files
+Compiling files:
+src/Derived.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/generics/covariance1/Derived.java.new b/java/java-tests/testData/compileServer/incremental/generics/covariance1/Derived.java.new
new file mode 100644
index 0000000..1d9492d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/covariance1/Derived.java.new
@@ -0,0 +1,2 @@
+public class Derived extends Base {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/covariance1/src/Base.java b/java/java-tests/testData/compileServer/incremental/generics/covariance1/src/Base.java
new file mode 100644
index 0000000..5cf3082
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/covariance1/src/Base.java
@@ -0,0 +1,5 @@
+public class Base {
+  public Value getValue() {
+    return new Value();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/covariance1/src/Client.java b/java/java-tests/testData/compileServer/incremental/generics/covariance1/src/Client.java
new file mode 100644
index 0000000..e1b1485
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/covariance1/src/Client.java
@@ -0,0 +1,6 @@
+public class Client {
+  public static void main(String[] args) {
+    Base obj = new Derived();
+    System.out.println(obj.getValue());
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/covariance1/src/Derived.java b/java/java-tests/testData/compileServer/incremental/generics/covariance1/src/Derived.java
new file mode 100644
index 0000000..22358a8
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/covariance1/src/Derived.java
@@ -0,0 +1,5 @@
+public class Derived extends Base {
+  public ValueDerived getValue() {
+    return new ValueDerived();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/covariance1/src/Value.java b/java/java-tests/testData/compileServer/incremental/generics/covariance1/src/Value.java
new file mode 100644
index 0000000..2e173ef
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/covariance1/src/Value.java
@@ -0,0 +1,5 @@
+public class Value {
+  public String toString() {
+    return "Value";
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/covariance1/src/ValueDerived.java b/java/java-tests/testData/compileServer/incremental/generics/covariance1/src/ValueDerived.java
new file mode 100644
index 0000000..56d77b5
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/covariance1/src/ValueDerived.java
@@ -0,0 +1,5 @@
+public class ValueDerived extends Value {
+  public String toString() {
+    return "ValueDerived";
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/covariance2.log b/java/java-tests/testData/compileServer/incremental/generics/covariance2.log
new file mode 100644
index 0000000..39ee7eb
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/covariance2.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/Covariance2/IfaceImpl.class
+End of files
+Compiling files:
+src/IfaceImpl.java
+End of files
+Cleaning output files:
+out/production/Covariance2/Client.class
+End of files
+Compiling files:
+src/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/generics/covariance2/IfaceImpl.java.new b/java/java-tests/testData/compileServer/incremental/generics/covariance2/IfaceImpl.java.new
new file mode 100644
index 0000000..cf90ce9
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/covariance2/IfaceImpl.java.new
@@ -0,0 +1,7 @@
+public class IfaceImpl implements Iface {
+  
+  public Iface foo() {
+    return this;
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/covariance2/src/Client.java b/java/java-tests/testData/compileServer/incremental/generics/covariance2/src/Client.java
new file mode 100644
index 0000000..66e4ef9
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/covariance2/src/Client.java
@@ -0,0 +1,5 @@
+public class Client {
+  void f(IfaceImpl impl) {
+    impl = impl.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/covariance2/src/Iface.java b/java/java-tests/testData/compileServer/incremental/generics/covariance2/src/Iface.java
new file mode 100644
index 0000000..14686ad
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/covariance2/src/Iface.java
@@ -0,0 +1,3 @@
+public interface Iface {
+  Iface foo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/covariance2/src/IfaceImpl.java b/java/java-tests/testData/compileServer/incremental/generics/covariance2/src/IfaceImpl.java
new file mode 100644
index 0000000..7f08659
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/covariance2/src/IfaceImpl.java
@@ -0,0 +1,7 @@
+public class IfaceImpl implements Iface {
+  
+  public IfaceImpl foo() {
+    return this;
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/covarianceNoChanges.log b/java/java-tests/testData/compileServer/incremental/generics/covarianceNoChanges.log
new file mode 100644
index 0000000..b242399
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/covarianceNoChanges.log
@@ -0,0 +1,6 @@
+Cleaning output files:
+out/production/CovarianceNoChanges/Derived.class
+End of files
+Compiling files:
+src/Derived.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/generics/covarianceNoChanges/Derived.java.new b/java/java-tests/testData/compileServer/incremental/generics/covarianceNoChanges/Derived.java.new
new file mode 100644
index 0000000..346212f
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/covarianceNoChanges/Derived.java.new
@@ -0,0 +1,7 @@
+public class Derived extends Base {
+  int field = 10;
+
+  public ValueDerived getValue() {
+    return new ValueDerived();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/covarianceNoChanges/src/Base.java b/java/java-tests/testData/compileServer/incremental/generics/covarianceNoChanges/src/Base.java
new file mode 100644
index 0000000..5cf3082
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/covarianceNoChanges/src/Base.java
@@ -0,0 +1,5 @@
+public class Base {
+  public Value getValue() {
+    return new Value();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/covarianceNoChanges/src/Client.java b/java/java-tests/testData/compileServer/incremental/generics/covarianceNoChanges/src/Client.java
new file mode 100644
index 0000000..8b4e5a7
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/covarianceNoChanges/src/Client.java
@@ -0,0 +1,6 @@
+public class Client {
+  public static void main(String[] args) {
+    Derived obj = new Derived();
+    Value v = obj.getValue();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/covarianceNoChanges/src/Derived.java b/java/java-tests/testData/compileServer/incremental/generics/covarianceNoChanges/src/Derived.java
new file mode 100644
index 0000000..22358a8
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/covarianceNoChanges/src/Derived.java
@@ -0,0 +1,5 @@
+public class Derived extends Base {
+  public ValueDerived getValue() {
+    return new ValueDerived();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/covarianceNoChanges/src/Value.java b/java/java-tests/testData/compileServer/incremental/generics/covarianceNoChanges/src/Value.java
new file mode 100644
index 0000000..2e173ef
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/covarianceNoChanges/src/Value.java
@@ -0,0 +1,5 @@
+public class Value {
+  public String toString() {
+    return "Value";
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/covarianceNoChanges/src/ValueDerived.java b/java/java-tests/testData/compileServer/incremental/generics/covarianceNoChanges/src/ValueDerived.java
new file mode 100644
index 0000000..56d77b5
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/covarianceNoChanges/src/ValueDerived.java
@@ -0,0 +1,5 @@
+public class ValueDerived extends Value {
+  public String toString() {
+    return "ValueDerived";
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/degenerify.log b/java/java-tests/testData/compileServer/incremental/generics/degenerify.log
new file mode 100644
index 0000000..01c3eb2
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/degenerify.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/Degenerify/A.class
+End of files
+Compiling files:
+src/A.java
+End of files
+Cleaning output files:
+out/production/Degenerify/Client.class
+End of files
+Compiling files:
+src/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/generics/degenerify/A.java.new b/java/java-tests/testData/compileServer/incremental/generics/degenerify/A.java.new
new file mode 100644
index 0000000..61ff2ab
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/degenerify/A.java.new
@@ -0,0 +1,2 @@
+public class A {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/degenerify/src/A.java b/java/java-tests/testData/compileServer/incremental/generics/degenerify/src/A.java
new file mode 100644
index 0000000..a4a573e
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/degenerify/src/A.java
@@ -0,0 +1,2 @@
+public class A<T> {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/degenerify/src/Client.java b/java/java-tests/testData/compileServer/incremental/generics/degenerify/src/Client.java
new file mode 100644
index 0000000..f26fc69
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/degenerify/src/Client.java
@@ -0,0 +1,4 @@
+public class Client<T> {
+  public void foo(A<T> a) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/degenerify1.log b/java/java-tests/testData/compileServer/incremental/generics/degenerify1.log
new file mode 100644
index 0000000..42977e5
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/degenerify1.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/Degenerify1/A.class
+End of files
+Compiling files:
+src/A.java
+End of files
+Cleaning output files:
+out/production/Degenerify1/Client.class
+End of files
+Compiling files:
+src/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/generics/degenerify1/A.java.new b/java/java-tests/testData/compileServer/incremental/generics/degenerify1/A.java.new
new file mode 100644
index 0000000..61ff2ab
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/degenerify1/A.java.new
@@ -0,0 +1,2 @@
+public class A {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/degenerify1/src/A.java b/java/java-tests/testData/compileServer/incremental/generics/degenerify1/src/A.java
new file mode 100644
index 0000000..a4a573e
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/degenerify1/src/A.java
@@ -0,0 +1,2 @@
+public class A<T> {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/degenerify1/src/Client.java b/java/java-tests/testData/compileServer/incremental/generics/degenerify1/src/Client.java
new file mode 100644
index 0000000..e3af57d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/degenerify1/src/Client.java
@@ -0,0 +1,4 @@
+public class Client {
+  public <T> void foo(A<T> a) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/fieldTypeChange.log b/java/java-tests/testData/compileServer/incremental/generics/fieldTypeChange.log
new file mode 100644
index 0000000..5be524a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/fieldTypeChange.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/FieldTypeChange/Server.class
+End of files
+Compiling files:
+src/Server.java
+End of files
+Cleaning output files:
+out/production/FieldTypeChange/Client.class
+End of files
+Compiling files:
+src/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/generics/fieldTypeChange/Server.java.new b/java/java-tests/testData/compileServer/incremental/generics/fieldTypeChange/Server.java.new
new file mode 100644
index 0000000..87dcca6
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/fieldTypeChange/Server.java.new
@@ -0,0 +1,3 @@
+public class Server {
+  GenericType<Integer> field = new GenericType<Integer>();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/fieldTypeChange/src/Client.java b/java/java-tests/testData/compileServer/incremental/generics/fieldTypeChange/src/Client.java
new file mode 100644
index 0000000..e523a22
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/fieldTypeChange/src/Client.java
@@ -0,0 +1,6 @@
+public class Client {
+
+  public static void main(String[] args){
+    new Server().field.foo("aaa");
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/fieldTypeChange/src/GenericType.java b/java/java-tests/testData/compileServer/incremental/generics/fieldTypeChange/src/GenericType.java
new file mode 100644
index 0000000..04120e4
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/fieldTypeChange/src/GenericType.java
@@ -0,0 +1,3 @@
+public class GenericType<T> {
+  void foo(T t) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/fieldTypeChange/src/Server.java b/java/java-tests/testData/compileServer/incremental/generics/fieldTypeChange/src/Server.java
new file mode 100644
index 0000000..f8ac2e1
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/fieldTypeChange/src/Server.java
@@ -0,0 +1,3 @@
+public class Server {
+  GenericType field = new GenericType();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedAnonymous.log b/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedAnonymous.log
new file mode 100644
index 0000000..413d41a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedAnonymous.log
@@ -0,0 +1,13 @@
+Cleaning output files:
+out/production/OverrideAnnotatedAnonymous/packageA/Base.class
+End of files
+Compiling files:
+src/packageA/Base.java
+End of files
+Cleaning output files:
+out/production/OverrideAnnotatedAnonymous/packageA/Derived$1.class
+out/production/OverrideAnnotatedAnonymous/packageA/Derived.class
+End of files
+Compiling files:
+src/packageA/Derived.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedAnonymous/data.xml b/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedAnonymous/data.xml
new file mode 100644
index 0000000..94b5b03
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedAnonymous/data.xml
@@ -0,0 +1,16 @@
+<testData>
+
+  <delete>
+  </delete>
+
+  <deleted_by_make>
+    <file path="classes/packageA/Base.class" />
+    <file path="classes/packageA/Derived.class" />
+    <file path="classes/packageA/Derived$1.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/packageA/Derived.java" />
+  </recompile>
+
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedAnonymous/src/packageA/Base.java b/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedAnonymous/src/packageA/Base.java
new file mode 100644
index 0000000..b50a9ca
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedAnonymous/src/packageA/Base.java
@@ -0,0 +1,7 @@
+package packageA;
+
+public class Base {
+  public void foo(String... params) {
+    System.out.println(params);
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedAnonymous/src/packageA/Base.java.new b/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedAnonymous/src/packageA/Base.java.new
new file mode 100644
index 0000000..5b61ab1
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedAnonymous/src/packageA/Base.java.new
@@ -0,0 +1,7 @@
+package packageA;
+
+public class Base {
+  public void foo(java.util.List<String> params) {
+    System.out.println(params);
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedAnonymous/src/packageA/Derived.java b/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedAnonymous/src/packageA/Derived.java
new file mode 100644
index 0000000..ce096b8
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedAnonymous/src/packageA/Derived.java
@@ -0,0 +1,12 @@
+package packageA;
+
+public class Derived {
+  public void bar() {
+    Base base = new Base() {
+      @Override
+      public void foo(String... params) {
+        System.out.println("Derived " + params.toString());
+      }
+    };
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedAnonymousNotRecompile.log b/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedAnonymousNotRecompile.log
new file mode 100644
index 0000000..33badcc
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedAnonymousNotRecompile.log
@@ -0,0 +1,13 @@
+Cleaning output files:
+out/production/OverrideAnnotatedAnonymousNotRecompile/packageA/Base.class
+End of files
+Compiling files:
+src/packageA/Base.java
+End of files
+Cleaning output files:
+out/production/OverrideAnnotatedAnonymousNotRecompile/packageA/Derived$1.class
+out/production/OverrideAnnotatedAnonymousNotRecompile/packageA/Derived.class
+End of files
+Compiling files:
+src/packageA/Derived.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedAnonymousNotRecompile/src/packageA/Base.java b/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedAnonymousNotRecompile/src/packageA/Base.java
new file mode 100644
index 0000000..b50a9ca
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedAnonymousNotRecompile/src/packageA/Base.java
@@ -0,0 +1,7 @@
+package packageA;
+
+public class Base {
+  public void foo(String... params) {
+    System.out.println(params);
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedAnonymousNotRecompile/src/packageA/Base.java.new b/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedAnonymousNotRecompile/src/packageA/Base.java.new
new file mode 100644
index 0000000..5b61ab1
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedAnonymousNotRecompile/src/packageA/Base.java.new
@@ -0,0 +1,7 @@
+package packageA;
+
+public class Base {
+  public void foo(java.util.List<String> params) {
+    System.out.println(params);
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedAnonymousNotRecompile/src/packageA/Derived.java b/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedAnonymousNotRecompile/src/packageA/Derived.java
new file mode 100644
index 0000000..c24e9fa
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedAnonymousNotRecompile/src/packageA/Derived.java
@@ -0,0 +1,16 @@
+package packageA;
+
+public class Derived extends Base {
+
+  public void bar() {
+    Runnable base = new RunnableAdapter() {
+      @Override
+      public void run() {
+      }
+    };
+  }
+  
+//  public void foo(String... params) {
+//   System.out.println("Derived " + params.toString());
+//  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedAnonymousNotRecompile/src/packageA/RunnableAdapter.java b/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedAnonymousNotRecompile/src/packageA/RunnableAdapter.java
new file mode 100644
index 0000000..b25aeb4
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedAnonymousNotRecompile/src/packageA/RunnableAdapter.java
@@ -0,0 +1,6 @@
+package packageA;
+
+public class RunnableAdapter implements Runnable {
+  public void run() {
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedInner.log b/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedInner.log
new file mode 100644
index 0000000..d929ed1
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedInner.log
@@ -0,0 +1,13 @@
+Cleaning output files:
+out/production/OverrideAnnotatedInner/packageA/Base.class
+End of files
+Compiling files:
+src/packageA/Base.java
+End of files
+Cleaning output files:
+out/production/OverrideAnnotatedInner/packageA/Derived$Inner.class
+out/production/OverrideAnnotatedInner/packageA/Derived.class
+End of files
+Compiling files:
+src/packageA/Derived.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedInner/data.xml b/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedInner/data.xml
new file mode 100644
index 0000000..2dea126
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedInner/data.xml
@@ -0,0 +1,16 @@
+<testData>
+
+  <delete>
+  </delete>
+
+  <deleted_by_make>
+    <file path="classes/packageA/Base.class" />
+    <file path="classes/packageA/Derived.class" />
+    <file path="classes/packageA/Derived$Inner.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/packageA/Derived.java" />
+  </recompile>
+
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedInner/src/packageA/Base.java b/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedInner/src/packageA/Base.java
new file mode 100644
index 0000000..b50a9ca
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedInner/src/packageA/Base.java
@@ -0,0 +1,7 @@
+package packageA;
+
+public class Base {
+  public void foo(String... params) {
+    System.out.println(params);
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedInner/src/packageA/Base.java.new b/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedInner/src/packageA/Base.java.new
new file mode 100644
index 0000000..5b61ab1
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedInner/src/packageA/Base.java.new
@@ -0,0 +1,7 @@
+package packageA;
+
+public class Base {
+  public void foo(java.util.List<String> params) {
+    System.out.println(params);
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedInner/src/packageA/Derived.java b/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedInner/src/packageA/Derived.java
new file mode 100644
index 0000000..b5d33a0
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/overrideAnnotatedInner/src/packageA/Derived.java
@@ -0,0 +1,10 @@
+package packageA;
+
+public class Derived {
+  class Inner extends Base {
+    @Override
+    public void foo(String... params) {
+      System.out.println("Derived " + params.toString());
+    }
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/paramTypes.log b/java/java-tests/testData/compileServer/incremental/generics/paramTypes.log
new file mode 100644
index 0000000..b7e8cd7
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/paramTypes.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/ParamTypes/Server.class
+End of files
+Compiling files:
+src/Server.java
+End of files
+Cleaning output files:
+out/production/ParamTypes/Client.class
+End of files
+Compiling files:
+src/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/generics/paramTypes/Server.java.new b/java/java-tests/testData/compileServer/incremental/generics/paramTypes/Server.java.new
new file mode 100644
index 0000000..a88484c
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/paramTypes/Server.java.new
@@ -0,0 +1,6 @@
+import java.util.Set;
+
+public class Server {
+    public void foo(Set<DataBase> collection) {
+    }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/paramTypes/src/Client.java b/java/java-tests/testData/compileServer/incremental/generics/paramTypes/src/Client.java
new file mode 100644
index 0000000..7f3901a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/paramTypes/src/Client.java
@@ -0,0 +1,9 @@
+import java.util.Set;
+
+public class Client {
+    public static void main(String[] args) {
+        final Server server = new Server();
+        final Set<DataDerived> set = null;
+        server.foo(set);
+    }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/paramTypes/src/DataBase.java b/java/java-tests/testData/compileServer/incremental/generics/paramTypes/src/DataBase.java
new file mode 100644
index 0000000..cf54475
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/paramTypes/src/DataBase.java
@@ -0,0 +1,2 @@
+public class DataBase {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/paramTypes/src/DataDerived.java b/java/java-tests/testData/compileServer/incremental/generics/paramTypes/src/DataDerived.java
new file mode 100644
index 0000000..ada9c643
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/paramTypes/src/DataDerived.java
@@ -0,0 +1,2 @@
+public class DataDerived extends DataBase{
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/paramTypes/src/Server.java b/java/java-tests/testData/compileServer/incremental/generics/paramTypes/src/Server.java
new file mode 100644
index 0000000..b9caaeb
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/paramTypes/src/Server.java
@@ -0,0 +1,6 @@
+import java.util.Set;
+
+public class Server {
+    public void foo(Set<DataDerived> collection) {
+    }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/generics/returnType.log b/java/java-tests/testData/compileServer/incremental/generics/returnType.log
new file mode 100644
index 0000000..5a3832a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/returnType.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/ReturnType/Server.class
+End of files
+Compiling files:
+src/Server.java
+End of files
+Cleaning output files:
+out/production/ReturnType/Client.class
+End of files
+Compiling files:
+src/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/generics/returnType/Server.java.new b/java/java-tests/testData/compileServer/incremental/generics/returnType/Server.java.new
new file mode 100644
index 0000000..c2708de
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/returnType/Server.java.new
@@ -0,0 +1,5 @@
+public class Server {
+  public GenericType<String> foo() {
+    return null;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/returnType/src/Client.java b/java/java-tests/testData/compileServer/incremental/generics/returnType/src/Client.java
new file mode 100644
index 0000000..d3e1b6f
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/returnType/src/Client.java
@@ -0,0 +1,10 @@
+public class Client {
+  public void bar() {
+    GenericType<Integer> list = new Server().foo();
+    System.out.println("list = " + list);;
+  }
+
+  public static void main(String[] args){
+    new Client().bar();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/returnType/src/GenericType.java b/java/java-tests/testData/compileServer/incremental/generics/returnType/src/GenericType.java
new file mode 100644
index 0000000..fa602c2
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/returnType/src/GenericType.java
@@ -0,0 +1,2 @@
+public class GenericType<T> {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/generics/returnType/src/Server.java b/java/java-tests/testData/compileServer/incremental/generics/returnType/src/Server.java
new file mode 100644
index 0000000..a3d3780
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/generics/returnType/src/Server.java
@@ -0,0 +1,5 @@
+public class Server {
+  public GenericType<Integer> foo() {
+    return null;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/imports/classImport.log b/java/java-tests/testData/compileServer/incremental/imports/classImport.log
new file mode 100644
index 0000000..6f48fe3
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/imports/classImport.log
@@ -0,0 +1,9 @@
+Cleaning output files:
+out/production/ClassImport/packageA/A.class
+End of files
+Cleaning output files:
+out/production/ClassImport/B.class
+End of files
+Compiling files:
+src/B.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/imports/classImport/src/B.java b/java/java-tests/testData/compileServer/incremental/imports/classImport/src/B.java
new file mode 100644
index 0000000..66e0bc1
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/imports/classImport/src/B.java
@@ -0,0 +1,5 @@
+import packageA.A;
+
+class B {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/imports/classImport/src/packageA/A.java b/java/java-tests/testData/compileServer/incremental/imports/classImport/src/packageA/A.java
new file mode 100644
index 0000000..52b0198
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/imports/classImport/src/packageA/A.java
@@ -0,0 +1,5 @@
+package packageA;
+
+public class A {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/imports/classImport/src/packageA/A.java.remove b/java/java-tests/testData/compileServer/incremental/imports/classImport/src/packageA/A.java.remove
new file mode 100644
index 0000000..2995a4d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/imports/classImport/src/packageA/A.java.remove
@@ -0,0 +1 @@
+dummy
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/imports/staticImport.log b/java/java-tests/testData/compileServer/incremental/imports/staticImport.log
new file mode 100644
index 0000000..02915bf
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/imports/staticImport.log
@@ -0,0 +1,9 @@
+Cleaning output files:
+out/production/StaticImport/packageA/A.class
+End of files
+Cleaning output files:
+out/production/StaticImport/B.class
+End of files
+Compiling files:
+src/B.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/imports/staticImport/src/B.java b/java/java-tests/testData/compileServer/incremental/imports/staticImport/src/B.java
new file mode 100644
index 0000000..94bd6e7
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/imports/staticImport/src/B.java
@@ -0,0 +1,5 @@
+import static packageA.A.P;
+
+class B {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/imports/staticImport/src/packageA/A.java b/java/java-tests/testData/compileServer/incremental/imports/staticImport/src/packageA/A.java
new file mode 100644
index 0000000..61c55d9
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/imports/staticImport/src/packageA/A.java
@@ -0,0 +1,5 @@
+package packageA;
+
+public class A {
+  public static int P;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/imports/staticImport/src/packageA/A.java.remove b/java/java-tests/testData/compileServer/incremental/imports/staticImport/src/packageA/A.java.remove
new file mode 100644
index 0000000..2995a4d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/imports/staticImport/src/packageA/A.java.remove
@@ -0,0 +1 @@
+dummy
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/jasperValidation/javaDependent/WEB-INF/web.xml b/java/java-tests/testData/compileServer/incremental/jasperValidation/javaDependent/WEB-INF/web.xml
new file mode 100644
index 0000000..3afc996
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/jasperValidation/javaDependent/WEB-INF/web.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
+<web-app>
+</web-app>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/jasperValidation/javaDependent/data.xml b/java/java-tests/testData/compileServer/incremental/jasperValidation/javaDependent/data.xml
new file mode 100644
index 0000000..7253e7b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/jasperValidation/javaDependent/data.xml
@@ -0,0 +1,12 @@
+<testData>
+  <delete>
+  </delete>
+
+  <deleted_by_make>
+    <file path="classes/x/S.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="root/a.jsp" />
+  </recompile>
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/jasperValidation/javaDependent/exploded/WEB-INF/classes/a.class b/java/java-tests/testData/compileServer/incremental/jasperValidation/javaDependent/exploded/WEB-INF/classes/a.class
new file mode 100644
index 0000000..ded25d3
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/jasperValidation/javaDependent/exploded/WEB-INF/classes/a.class
Binary files differ
diff --git a/java/java-tests/testData/compileServer/incremental/jasperValidation/javaDependent/exploded/WEB-INF/lib/xxx.jar b/java/java-tests/testData/compileServer/incremental/jasperValidation/javaDependent/exploded/WEB-INF/lib/xxx.jar
new file mode 100644
index 0000000..dfc3669
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/jasperValidation/javaDependent/exploded/WEB-INF/lib/xxx.jar
Binary files differ
diff --git a/java/java-tests/testData/compileServer/incremental/jasperValidation/javaDependent/exploded/WEB-INF/web.xml b/java/java-tests/testData/compileServer/incremental/jasperValidation/javaDependent/exploded/WEB-INF/web.xml
new file mode 100644
index 0000000..3afc996
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/jasperValidation/javaDependent/exploded/WEB-INF/web.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
+<web-app>
+</web-app>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/jasperValidation/javaDependent/exploded/a.jsp b/java/java-tests/testData/compileServer/incremental/jasperValidation/javaDependent/exploded/a.jsp
new file mode 100644
index 0000000..4eab067
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/jasperValidation/javaDependent/exploded/a.jsp
@@ -0,0 +1,14 @@
+<%--
+  Created by IntelliJ IDEA.
+  User: cdr
+  Date: Sep 17, 2004
+  Time: 2:53:58 PM
+  To change this template use File | Settings | File Templates.
+--%>
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@include file="dep.jsp" %>
+<%@include file="dep2.jsp" %>
+<html>
+  <head><title>Simple jsp page</title></head>
+  <body>Place your content here</body>
+</html>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/jasperValidation/javaDependent/lib/xxx.jar b/java/java-tests/testData/compileServer/incremental/jasperValidation/javaDependent/lib/xxx.jar
new file mode 100644
index 0000000..dfc3669
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/jasperValidation/javaDependent/lib/xxx.jar
Binary files differ
diff --git a/java/java-tests/testData/compileServer/incremental/jasperValidation/javaDependent/module.iml b/java/java-tests/testData/compileServer/incremental/jasperValidation/javaDependent/module.iml
new file mode 100644
index 0000000..601f528
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/jasperValidation/javaDependent/module.iml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module version="4" relativePaths="true" type="JAVA_MODULE">
+  <component name="ModuleRootManager" />
+  <component name="NewModuleRootManager">
+    <output url="file://$MODULE_DIR$/classes" />
+    <exclude-output />
+    <exploded url="file://$MODULE_DIR$/exploded" />
+    <exclude-exploded />
+    <content url="file://$MODULE_DIR$" />
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/xxx.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntryProperties />
+  </component>
+  <component name="FacetManager">
+    <facet type="web" name="module">
+      <configuration>
+        <webroots>
+          <root url="file://$MODULE_DIR$/root" relative="/" />
+        </webroots>
+        <descriptors>
+          <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/WEB-INF/web.xml" version="2.3" />
+        </descriptors>
+      </configuration>
+    </facet>
+  </component>
+</module>
+
diff --git a/java/java-tests/testData/compileServer/incremental/jasperValidation/javaDependent/root/a.jsp b/java/java-tests/testData/compileServer/incremental/jasperValidation/javaDependent/root/a.jsp
new file mode 100644
index 0000000..71adec6
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/jasperValidation/javaDependent/root/a.jsp
@@ -0,0 +1,7 @@
+<%@ page import="x.S"%>
+
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+
+<% S.f(); %>
+AAAAA
+
diff --git a/java/java-tests/testData/compileServer/incremental/jasperValidation/javaDependent/source/a.java b/java/java-tests/testData/compileServer/incremental/jasperValidation/javaDependent/source/a.java
new file mode 100644
index 0000000..852f54f
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/jasperValidation/javaDependent/source/a.java
@@ -0,0 +1 @@
+class a{}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/jasperValidation/javaDependent/source/x/S.java b/java/java-tests/testData/compileServer/incremental/jasperValidation/javaDependent/source/x/S.java
new file mode 100644
index 0000000..a72be4a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/jasperValidation/javaDependent/source/x/S.java
@@ -0,0 +1,7 @@
+package x;
+
+//////////
+public class S {
+  public static void f() {
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/jasperValidation/javaDependent/source/x/S.java.new b/java/java-tests/testData/compileServer/incremental/jasperValidation/javaDependent/source/x/S.java.new
new file mode 100644
index 0000000..7b05693
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/jasperValidation/javaDependent/source/x/S.java.new
@@ -0,0 +1,7 @@
+package x;
+
+////////// XXXXXXX
+public class S {
+  public static void f() {
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/WEB-INF/web.xml b/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/WEB-INF/web.xml
new file mode 100644
index 0000000..3afc996
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/WEB-INF/web.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
+<web-app>
+</web-app>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/data.xml b/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/data.xml
new file mode 100644
index 0000000..077f9c1
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/data.xml
@@ -0,0 +1,11 @@
+<testData>
+  <delete>
+  </delete>
+
+  <deleted_by_make>
+  </deleted_by_make>
+
+  <recompile>
+    <file path="root/a.jsp" />
+  </recompile>
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/exploded/WEB-INF/classes/a.class b/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/exploded/WEB-INF/classes/a.class
new file mode 100644
index 0000000..ded25d3
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/exploded/WEB-INF/classes/a.class
Binary files differ
diff --git a/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/exploded/WEB-INF/lib/xxx.jar b/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/exploded/WEB-INF/lib/xxx.jar
new file mode 100644
index 0000000..dfc3669
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/exploded/WEB-INF/lib/xxx.jar
Binary files differ
diff --git a/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/exploded/WEB-INF/web.xml b/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/exploded/WEB-INF/web.xml
new file mode 100644
index 0000000..3afc996
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/exploded/WEB-INF/web.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
+<web-app>
+</web-app>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/exploded/a.jsp b/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/exploded/a.jsp
new file mode 100644
index 0000000..4eab067
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/exploded/a.jsp
@@ -0,0 +1,14 @@
+<%--
+  Created by IntelliJ IDEA.
+  User: cdr
+  Date: Sep 17, 2004
+  Time: 2:53:58 PM
+  To change this template use File | Settings | File Templates.
+--%>
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@include file="dep.jsp" %>
+<%@include file="dep2.jsp" %>
+<html>
+  <head><title>Simple jsp page</title></head>
+  <body>Place your content here</body>
+</html>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/exploded/dep.jsp b/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/exploded/dep.jsp
new file mode 100644
index 0000000..69ec23d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/exploded/dep.jsp
@@ -0,0 +1 @@
+ddd
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/exploded/dep2.jsp b/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/exploded/dep2.jsp
new file mode 100644
index 0000000..69ec23d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/exploded/dep2.jsp
@@ -0,0 +1 @@
+ddd
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/exploded/dir/xxx.jsp b/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/exploded/dir/xxx.jsp
new file mode 100644
index 0000000..d0a4a0b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/exploded/dir/xxx.jsp
@@ -0,0 +1,3 @@
+<%
+    int a = 0;
+%>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/lib/xxx.jar b/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/lib/xxx.jar
new file mode 100644
index 0000000..dfc3669
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/lib/xxx.jar
Binary files differ
diff --git a/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/module.iml b/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/module.iml
new file mode 100644
index 0000000..14aa0145
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/module.iml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module version="4" relativePaths="true" type="JAVA_MODULE">
+  <component name="ModuleRootManager" />
+  <component name="NewModuleRootManager">
+    <output url="file://$MODULE_DIR$/classes" />
+    <exclude-output />
+    <exploded url="file://$MODULE_DIR$/exploded" />
+    <exclude-exploded />
+    <content url="file://$MODULE_DIR$" />
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/xxx.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntryProperties />
+  </component>
+  <component name="VcsManagerConfiguration">
+    <option name="ACTIVE_VCS_NAME" value="&lt;None&gt;" />
+    <option name="USE_PROJECT_VCS" value="true" />
+  </component>
+  <component name="FacetManager">
+    <facet type="web" name="module">
+      <configuration>
+        <webroots>
+          <root url="file://$MODULE_DIR$/root" relative="/" />
+        </webroots>
+        <packaging>
+          <containerElement type="module" name="module">
+            <attribute name="method" value="1" />
+            <attribute name="URI" value="/WEB-INF/classes" />
+          </containerElement>
+          <containerElement type="library" level="module">
+            <url>jar://$MODULE_DIR$/lib/xxx.jar!/</url>
+            <attribute name="method" value="1" />
+            <attribute name="URI" value="/WEB-INF/lib/xxx.jar" />
+          </containerElement>
+        </packaging>
+        <descriptors>
+          <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/WEB-INF/web.xml" version="2.3" />
+        </descriptors>
+        <building>
+          <setting name="EXPLODED_URL" value="file://$MODULE_DIR$/exploded" />
+          <setting name="EXPLODED_ENABLED" value="true" />
+          <setting name="JAR_URL" value="file://$MODULE_DIR$/dep/war/module.war" />
+          <setting name="JAR_ENABLED" value="false" />
+          <setting name="SYNC_EXPLODED_DIR" value="true" />
+          <setting name="BUILD_ON_FRAME_DEACTIVATION" value="false" />
+          <setting name="RUN_JASPER_VALIDATION" value="true" />
+        </building>
+      </configuration>
+    </facet>
+  </component>
+</module>
+
diff --git a/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/root/a.jsp b/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/root/a.jsp
new file mode 100644
index 0000000..4eab067
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/root/a.jsp
@@ -0,0 +1,14 @@
+<%--
+  Created by IntelliJ IDEA.
+  User: cdr
+  Date: Sep 17, 2004
+  Time: 2:53:58 PM
+  To change this template use File | Settings | File Templates.
+--%>
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@include file="dep.jsp" %>
+<%@include file="dep2.jsp" %>
+<html>
+  <head><title>Simple jsp page</title></head>
+  <body>Place your content here</body>
+</html>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/root/dep.jsp b/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/root/dep.jsp
new file mode 100644
index 0000000..69ec23d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/root/dep.jsp
@@ -0,0 +1 @@
+ddd
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/root/dep.jsp.new b/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/root/dep.jsp.new
new file mode 100644
index 0000000..2554602
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/root/dep.jsp.new
@@ -0,0 +1 @@
+ddd X
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/root/dep2.jsp b/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/root/dep2.jsp
new file mode 100644
index 0000000..69ec23d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/root/dep2.jsp
@@ -0,0 +1 @@
+ddd
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/root/dir/xxx.jsp b/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/root/dir/xxx.jsp
new file mode 100644
index 0000000..d0a4a0b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/root/dir/xxx.jsp
@@ -0,0 +1,3 @@
+<%
+    int a = 0;
+%>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/source/a.java b/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/source/a.java
new file mode 100644
index 0000000..852f54f
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/jasperValidation/jspDependent/source/a.java
@@ -0,0 +1 @@
+class a{}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/jasperValidation/scope/data.xml b/java/java-tests/testData/compileServer/incremental/jasperValidation/scope/data.xml
new file mode 100644
index 0000000..077f9c1
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/jasperValidation/scope/data.xml
@@ -0,0 +1,11 @@
+<testData>
+  <delete>
+  </delete>
+
+  <deleted_by_make>
+  </deleted_by_make>
+
+  <recompile>
+    <file path="root/a.jsp" />
+  </recompile>
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/jasperValidation/scope/exploded/WEB-INF/web.xml b/java/java-tests/testData/compileServer/incremental/jasperValidation/scope/exploded/WEB-INF/web.xml
new file mode 100644
index 0000000..3afc996
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/jasperValidation/scope/exploded/WEB-INF/web.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
+<web-app>
+</web-app>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/jasperValidation/scope/exploded/a.jsp b/java/java-tests/testData/compileServer/incremental/jasperValidation/scope/exploded/a.jsp
new file mode 100644
index 0000000..4eab067
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/jasperValidation/scope/exploded/a.jsp
@@ -0,0 +1,14 @@
+<%--
+  Created by IntelliJ IDEA.
+  User: cdr
+  Date: Sep 17, 2004
+  Time: 2:53:58 PM
+  To change this template use File | Settings | File Templates.
+--%>
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@include file="dep.jsp" %>
+<%@include file="dep2.jsp" %>
+<html>
+  <head><title>Simple jsp page</title></head>
+  <body>Place your content here</body>
+</html>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/jasperValidation/scope/exploded/dep.jsp b/java/java-tests/testData/compileServer/incremental/jasperValidation/scope/exploded/dep.jsp
new file mode 100644
index 0000000..69ec23d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/jasperValidation/scope/exploded/dep.jsp
@@ -0,0 +1 @@
+ddd
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/jasperValidation/scope/exploded/dep2.jsp b/java/java-tests/testData/compileServer/incremental/jasperValidation/scope/exploded/dep2.jsp
new file mode 100644
index 0000000..69ec23d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/jasperValidation/scope/exploded/dep2.jsp
@@ -0,0 +1 @@
+ddd
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/jasperValidation/scope/exploded/dir/xxx.jsp b/java/java-tests/testData/compileServer/incremental/jasperValidation/scope/exploded/dir/xxx.jsp
new file mode 100644
index 0000000..d0a4a0b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/jasperValidation/scope/exploded/dir/xxx.jsp
@@ -0,0 +1,3 @@
+<%
+    int a = 0;
+%>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/jasperValidation/scope/module.iml b/java/java-tests/testData/compileServer/incremental/jasperValidation/scope/module.iml
new file mode 100644
index 0000000..b1cc9a3
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/jasperValidation/scope/module.iml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module version="4" relativePaths="true" type="JAVA_MODULE">
+  <component name="ModuleRootManager" />
+  <component name="NewModuleRootManager">
+    <output url="file://$MODULE_DIR$/classes" />
+    <exclude-output />
+    <exploded url="file://$MODULE_DIR$/exploded" />
+    <exclude-exploded />
+    <content url="file://$MODULE_DIR$" />
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+  <component name="FacetManager">
+    <facet type="web" name="module">
+      <configuration>
+        <webroots>
+          <root url="file://$MODULE_DIR$/root" relative="/" />
+        </webroots>
+        <descriptors>
+          <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/WEB-INF/web.xml" version="2.3" />
+        </descriptors>
+      </configuration>
+    </facet>
+  </component>
+</module>
+
diff --git a/java/java-tests/testData/compileServer/incremental/jasperValidation/scope/root/a.jsp b/java/java-tests/testData/compileServer/incremental/jasperValidation/scope/root/a.jsp
new file mode 100644
index 0000000..4eab067
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/jasperValidation/scope/root/a.jsp
@@ -0,0 +1,14 @@
+<%--
+  Created by IntelliJ IDEA.
+  User: cdr
+  Date: Sep 17, 2004
+  Time: 2:53:58 PM
+  To change this template use File | Settings | File Templates.
+--%>
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@include file="dep.jsp" %>
+<%@include file="dep2.jsp" %>
+<html>
+  <head><title>Simple jsp page</title></head>
+  <body>Place your content here</body>
+</html>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/jasperValidation/scope/root/b.jsp b/java/java-tests/testData/compileServer/incremental/jasperValidation/scope/root/b.jsp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/jasperValidation/scope/root/b.jsp
diff --git a/java/java-tests/testData/compileServer/incremental/jasperValidation/scope/root/dep.jsp b/java/java-tests/testData/compileServer/incremental/jasperValidation/scope/root/dep.jsp
new file mode 100644
index 0000000..69ec23d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/jasperValidation/scope/root/dep.jsp
@@ -0,0 +1 @@
+ddd
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/jasperValidation/scope/root/dep.jsp.new b/java/java-tests/testData/compileServer/incremental/jasperValidation/scope/root/dep.jsp.new
new file mode 100644
index 0000000..2554602
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/jasperValidation/scope/root/dep.jsp.new
@@ -0,0 +1 @@
+ddd X
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/jasperValidation/scope/root/dep2.jsp b/java/java-tests/testData/compileServer/incremental/jasperValidation/scope/root/dep2.jsp
new file mode 100644
index 0000000..69ec23d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/jasperValidation/scope/root/dep2.jsp
@@ -0,0 +1 @@
+ddd
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/markDirty/recompileDependent.log b/java/java-tests/testData/compileServer/incremental/markDirty/recompileDependent.log
new file mode 100644
index 0000000..15998ea
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/markDirty/recompileDependent.log
@@ -0,0 +1,14 @@
+Cleaning output files:
+out/production/RecompileDependent/Server.class
+End of files
+Compiling files:
+src/Server.java
+End of files
+Cleaning output files:
+out/production/RecompileDependent/Client.class
+out/production/RecompileDependent/Server.class
+End of files
+Compiling files:
+src/Client.java
+src/Server.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/markDirty/recompileDependent/Server.java.new b/java/java-tests/testData/compileServer/incremental/markDirty/recompileDependent/Server.java.new
new file mode 100644
index 0000000..21eddc6
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/markDirty/recompileDependent/Server.java.new
@@ -0,0 +1,3 @@
+public class Server{
+  public static final int CONSTANT = 200;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/markDirty/recompileDependent/src/Client.java b/java/java-tests/testData/compileServer/incremental/markDirty/recompileDependent/src/Client.java
new file mode 100644
index 0000000..3ddb75c
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/markDirty/recompileDependent/src/Client.java
@@ -0,0 +1,5 @@
+class Client {
+  public static void main(String[] args) {
+    System.out.println(Server.CONSTANT);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/markDirty/recompileDependent/src/Server.java b/java/java-tests/testData/compileServer/incremental/markDirty/recompileDependent/src/Server.java
new file mode 100644
index 0000000..f81f0a6
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/markDirty/recompileDependent/src/Server.java
@@ -0,0 +1,3 @@
+public class Server{
+  public static final int CONSTANT = 100;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/markDirty/recompileDependentTests.log b/java/java-tests/testData/compileServer/incremental/markDirty/recompileDependentTests.log
new file mode 100644
index 0000000..f546b0a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/markDirty/recompileDependentTests.log
@@ -0,0 +1,20 @@
+Cleaning output files:
+out/production/RecompileDependentTests/Server.class
+End of files
+Compiling files:
+src/Server.java
+End of files
+Cleaning output files:
+out/production/RecompileDependentTests/Client.class
+out/production/RecompileDependentTests/Server.class
+End of files
+Compiling files:
+src/Client.java
+src/Server.java
+End of files
+Cleaning output files:
+out/test/RecompileDependentTests/TestClient.class
+End of files
+Compiling files:
+testSrc/TestClient.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/markDirty/recompileDependentTests/Server.java.new b/java/java-tests/testData/compileServer/incremental/markDirty/recompileDependentTests/Server.java.new
new file mode 100644
index 0000000..21eddc6
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/markDirty/recompileDependentTests/Server.java.new
@@ -0,0 +1,3 @@
+public class Server{
+  public static final int CONSTANT = 200;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/markDirty/recompileDependentTests/lib/a.jar b/java/java-tests/testData/compileServer/incremental/markDirty/recompileDependentTests/lib/a.jar
new file mode 100644
index 0000000..577690d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/markDirty/recompileDependentTests/lib/a.jar
Binary files differ
diff --git a/java/java-tests/testData/compileServer/incremental/markDirty/recompileDependentTests/src/Client.java b/java/java-tests/testData/compileServer/incremental/markDirty/recompileDependentTests/src/Client.java
new file mode 100644
index 0000000..dd2f6d8
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/markDirty/recompileDependentTests/src/Client.java
@@ -0,0 +1,20 @@
+/*
+ * 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 Client {
+  public static void main(String[] args) {
+    System.out.println(Server.CONSTANT);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/markDirty/recompileDependentTests/src/Server.java b/java/java-tests/testData/compileServer/incremental/markDirty/recompileDependentTests/src/Server.java
new file mode 100644
index 0000000..7faab26
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/markDirty/recompileDependentTests/src/Server.java
@@ -0,0 +1,18 @@
+/*
+ * 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.
+ */
+public class Server{
+  public static final int CONSTANT = 100;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/markDirty/recompileDependentTests/testSrc/TestClient.java b/java/java-tests/testData/compileServer/incremental/markDirty/recompileDependentTests/testSrc/TestClient.java
new file mode 100644
index 0000000..1e1d53c
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/markDirty/recompileDependentTests/testSrc/TestClient.java
@@ -0,0 +1,20 @@
+/*
+ * 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 TestClient {
+  public static void main(String[] args) {
+    System.out.println(Server.CONSTANT + new com.MyClass().get());
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/build.log b/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/build.log
new file mode 100644
index 0000000..6a5b0f3
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/build.log
@@ -0,0 +1,36 @@
+Cleaning output files:
+out/production/lib/y/Lib.class
+End of files
+Compiling files:
+lib/src/y/Lib.java
+End of files
+Cleaning output files:
+out/production/lib/y/Lib.class
+End of files
+Compiling files:
+lib/src/y/Lib.java
+End of files
+Cleaning output files:
+out/test/lib/LibTest.class
+End of files
+Compiling files:
+lib/testSrc/LibTest.java
+End of files
+Cleaning output files:
+out/production/util/x/Util.class
+End of files
+Compiling files:
+util/src/x/Util.java
+End of files
+Cleaning output files:
+out/test/util/UtilTest.class
+End of files
+Compiling files:
+util/testSrc/UtilTest.java
+End of files
+Cleaning output files:
+out/production/TransitiveRecompile/A.class
+End of files
+Compiling files:
+src/A.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/lib/src/y/Lib.java b/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/lib/src/y/Lib.java
new file mode 100644
index 0000000..84af745
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/lib/src/y/Lib.java
@@ -0,0 +1,8 @@
+package y;
+
+public class Lib {
+  public static final int CONST = 239;
+
+  public static void libMethod() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/lib/src/y/Lib.java.new b/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/lib/src/y/Lib.java.new
new file mode 100644
index 0000000..9f10ec5
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/lib/src/y/Lib.java.new
@@ -0,0 +1,8 @@
+package y;
+
+public class Lib {
+  public static final int CONST = 241;
+
+  public static void libMethod() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/lib/testSrc/LibTest.java b/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/lib/testSrc/LibTest.java
new file mode 100644
index 0000000..3f7cd17
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/lib/testSrc/LibTest.java
@@ -0,0 +1 @@
+class LibTest { }
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/src/A.java b/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/src/A.java
new file mode 100644
index 0000000..433ebd41f
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/src/A.java
@@ -0,0 +1,7 @@
+import x.Util;
+
+public class A {
+  A() {
+    Util.utilMethod();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/testSrc/MyTest.java b/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/testSrc/MyTest.java
new file mode 100644
index 0000000..4e2a152
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/testSrc/MyTest.java
@@ -0,0 +1 @@
+class MyTest {}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/util/src/x/Util.java b/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/util/src/x/Util.java
new file mode 100644
index 0000000..5126db9
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/util/src/x/Util.java
@@ -0,0 +1,9 @@
+package x;
+
+import y.Lib;
+
+public class Util {
+  public static void utilMethod() {
+    Lib.libMethod();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/util/src/x/Util.java.new b/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/util/src/x/Util.java.new
new file mode 100644
index 0000000..9c081e8
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/util/src/x/Util.java.new
@@ -0,0 +1,10 @@
+package x;
+
+import y.Lib;
+
+public class Util {
+  public static int utilMethod() {
+    Lib.libMethod();
+    return 0;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/util/testSrc/UtilTest.java b/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/util/testSrc/UtilTest.java
new file mode 100644
index 0000000..478bcf5
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/util/testSrc/UtilTest.java
@@ -0,0 +1 @@
+public class UtilTest {}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addAbstractMethod.log b/java/java-tests/testData/compileServer/incremental/membersChange/addAbstractMethod.log
new file mode 100644
index 0000000..0989f30
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addAbstractMethod.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/AddAbstractMethod/packageA/BaseServer.class
+End of files
+Compiling files:
+src/packageA/BaseServer.java
+End of files
+Cleaning output files:
+out/production/AddAbstractMethod/packageA/Server.class
+End of files
+Compiling files:
+src/packageA/Server.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addAbstractMethod/data.xml b/java/java-tests/testData/compileServer/incremental/membersChange/addAbstractMethod/data.xml
new file mode 100644
index 0000000..a7d2679
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addAbstractMethod/data.xml
@@ -0,0 +1,15 @@
+<testData>
+
+  <delete>
+  </delete>
+
+  <deleted_by_make>
+    <file path="classes/packageA/BaseServer.class" />
+    <file path="classes/packageA/Server.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/packageA/Server.java" />
+  </recompile>
+
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addAbstractMethod/src/packageA/BaseServer.java b/java/java-tests/testData/compileServer/incremental/membersChange/addAbstractMethod/src/packageA/BaseServer.java
new file mode 100644
index 0000000..d838063
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addAbstractMethod/src/packageA/BaseServer.java
@@ -0,0 +1,11 @@
+/**
+ * created at Jan 22, 2002
+ * @author Jeka
+ */
+package packageA;
+
+public class BaseServer {
+  public void method() {
+    System.out.println("BaseServer.method");
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addAbstractMethod/src/packageA/BaseServer.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/addAbstractMethod/src/packageA/BaseServer.java.new
new file mode 100644
index 0000000..10e2db0
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addAbstractMethod/src/packageA/BaseServer.java.new
@@ -0,0 +1,12 @@
+/**
+ * created at Jan 22, 2002
+ * @author Jeka
+ */
+package packageA;
+
+public abstract class BaseServer {
+  public void method() {
+    System.out.println("BaseServer.method");
+  }
+  public abstract void abstractMethod();
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addAbstractMethod/src/packageA/Client.java b/java/java-tests/testData/compileServer/incremental/membersChange/addAbstractMethod/src/packageA/Client.java
new file mode 100644
index 0000000..3ef542f
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addAbstractMethod/src/packageA/Client.java
@@ -0,0 +1,12 @@
+/**
+ * created at Jan 22, 2002
+ * @author Jeka
+ */
+package packageA;
+
+public class Client {
+  public static void main(String[] args) {
+    Server server = new Server();
+    server.method();
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addAbstractMethod/src/packageA/Server.java b/java/java-tests/testData/compileServer/incremental/membersChange/addAbstractMethod/src/packageA/Server.java
new file mode 100644
index 0000000..abe0661
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addAbstractMethod/src/packageA/Server.java
@@ -0,0 +1,11 @@
+/**
+ * created at Jan 22, 2002
+ * @author Jeka
+ */
+package packageA;
+
+public class Server extends BaseServer {
+  public void method() {
+    System.out.println("Server.method");
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addConstructorParameter.log b/java/java-tests/testData/compileServer/incremental/membersChange/addConstructorParameter.log
new file mode 100644
index 0000000..33a5aa1
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addConstructorParameter.log
@@ -0,0 +1,14 @@
+Cleaning output files:
+out/production/AddConstructorParameter/Base.class
+End of files
+Compiling files:
+src/Base.java
+End of files
+Cleaning output files:
+out/production/AddConstructorParameter/Client.class
+out/production/AddConstructorParameter/Derived.class
+End of files
+Compiling files:
+src/Client.java
+src/Derived.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addConstructorParameter/Base.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/addConstructorParameter/Base.java.new
new file mode 100644
index 0000000..68565aa
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addConstructorParameter/Base.java.new
@@ -0,0 +1,4 @@
+class Base {
+  public Base(int a) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addConstructorParameter/data.xml b/java/java-tests/testData/compileServer/incremental/membersChange/addConstructorParameter/data.xml
new file mode 100644
index 0000000..5d1b8c4
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addConstructorParameter/data.xml
@@ -0,0 +1,12 @@
+<testData>
+  <deleted_by_make>
+    <file path="classes/Base.class" />
+    <file path="classes/Client.class" />
+    <file path="classes/Derived.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/Client.java" />
+    <file path="source/Derived.java" />
+  </recompile>
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addConstructorParameter/src/Base.java b/java/java-tests/testData/compileServer/incremental/membersChange/addConstructorParameter/src/Base.java
new file mode 100644
index 0000000..9918aab
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addConstructorParameter/src/Base.java
@@ -0,0 +1,2 @@
+class Base {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addConstructorParameter/src/Client.java b/java/java-tests/testData/compileServer/incremental/membersChange/addConstructorParameter/src/Client.java
new file mode 100644
index 0000000..eeb6a5f
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addConstructorParameter/src/Client.java
@@ -0,0 +1,5 @@
+class Client{
+  {
+    Base base = new Base();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addConstructorParameter/src/Derived.java b/java/java-tests/testData/compileServer/incremental/membersChange/addConstructorParameter/src/Derived.java
new file mode 100644
index 0000000..6fdfab5
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addConstructorParameter/src/Derived.java
@@ -0,0 +1,2 @@
+class Derived extends Base {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToBaseClass.log b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToBaseClass.log
new file mode 100644
index 0000000..5d06361
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToBaseClass.log
@@ -0,0 +1,6 @@
+Cleaning output files:
+out/production/AddFieldToBaseClass/BaseServer.class
+End of files
+Compiling files:
+src/BaseServer.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToBaseClass/BaseServer.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToBaseClass/BaseServer.java.new
new file mode 100644
index 0000000..98f7f7e4
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToBaseClass/BaseServer.java.new
@@ -0,0 +1,3 @@
+public class BaseServer {
+  public String field = "testString";
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToBaseClass/addFieldToBaseClass.log b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToBaseClass/addFieldToBaseClass.log
new file mode 100644
index 0000000..5d06361
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToBaseClass/addFieldToBaseClass.log
@@ -0,0 +1,6 @@
+Cleaning output files:
+out/production/AddFieldToBaseClass/BaseServer.class
+End of files
+Compiling files:
+src/BaseServer.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToBaseClass/data.xml b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToBaseClass/data.xml
new file mode 100644
index 0000000..559781e
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToBaseClass/data.xml
@@ -0,0 +1,12 @@
+<testData>
+
+  <deleted_by_make>
+    <file path="classes/BaseServer.class" />
+    <file path="classes/Server.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/Server.java" />
+  </recompile>
+
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToBaseClass/src/BaseServer.java b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToBaseClass/src/BaseServer.java
new file mode 100644
index 0000000..33f9b7b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToBaseClass/src/BaseServer.java
@@ -0,0 +1,2 @@
+public class BaseServer {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToBaseClass/src/Server.java b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToBaseClass/src/Server.java
new file mode 100644
index 0000000..9709465
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToBaseClass/src/Server.java
@@ -0,0 +1,3 @@
+public class Server extends BaseServer {
+  public Integer field = new Integer(10);
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToDerived.log b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToDerived.log
new file mode 100644
index 0000000..69c6e60
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToDerived.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/AddFieldToDerived/Derived.class
+End of files
+Compiling files:
+src/Derived.java
+End of files
+Cleaning output files:
+out/production/AddFieldToDerived/Client.class
+End of files
+Compiling files:
+src/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToDerived/Derived.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToDerived/Derived.java.new
new file mode 100644
index 0000000..f76936b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToDerived/Derived.java.new
@@ -0,0 +1,3 @@
+class Derived extends Base {
+  char h = 'h';
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToDerived/data.xml b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToDerived/data.xml
new file mode 100644
index 0000000..09f8548
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToDerived/data.xml
@@ -0,0 +1,10 @@
+<testData>
+  <deleted_by_make>
+    <file path="classes/Derived.class" />
+    <file path="classes/Client.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/Client.java" />
+  </recompile>
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToDerived/src/Base.java b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToDerived/src/Base.java
new file mode 100644
index 0000000..f993798
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToDerived/src/Base.java
@@ -0,0 +1,3 @@
+class Base {
+ String h = "Base";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToDerived/src/Client.java b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToDerived/src/Client.java
new file mode 100644
index 0000000..f5dc0ac
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToDerived/src/Client.java
@@ -0,0 +1,6 @@
+class Client extends Derived {
+  public static void main(String[] args) {
+    String s = new Client().h;
+		System.out.println(s);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToDerived/src/Derived.java b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToDerived/src/Derived.java
new file mode 100644
index 0000000..6fdfab5
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToDerived/src/Derived.java
@@ -0,0 +1,2 @@
+class Derived extends Base {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToInterface.log b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToInterface.log
new file mode 100644
index 0000000..8bc4265
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToInterface.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/AddFieldToInterface/BaseInterface.class
+End of files
+Compiling files:
+src/BaseInterface.java
+End of files
+Cleaning output files:
+out/production/AddFieldToInterface/Client.class
+End of files
+Compiling files:
+src/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToInterface/BaseInterface.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToInterface/BaseInterface.java.new
new file mode 100644
index 0000000..f999ec3
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToInterface/BaseInterface.java.new
@@ -0,0 +1,3 @@
+interface BaseInterface {
+  String field = "BaseInterface";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToInterface/data.xml b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToInterface/data.xml
new file mode 100644
index 0000000..7ce6462
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToInterface/data.xml
@@ -0,0 +1,10 @@
+<testData>
+  <deleted_by_make>
+    <file path="classes/BaseInterface.class" />
+    <file path="classes/Client.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/Client.java" />
+  </recompile>
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToInterface/src/Base.java b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToInterface/src/Base.java
new file mode 100644
index 0000000..b861f4b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToInterface/src/Base.java
@@ -0,0 +1,3 @@
+class Base {
+ String field = "Base";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToInterface/src/BaseInterface.java b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToInterface/src/BaseInterface.java
new file mode 100644
index 0000000..06fbb8b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToInterface/src/BaseInterface.java
@@ -0,0 +1,2 @@
+interface BaseInterface {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToInterface/src/Client.java b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToInterface/src/Client.java
new file mode 100644
index 0000000..bb204d6
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToInterface/src/Client.java
@@ -0,0 +1,6 @@
+class Client {
+  public static void main(String[] args) {
+    String s = new Derived().field;
+		System.out.println(s);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToInterface/src/Derived.java b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToInterface/src/Derived.java
new file mode 100644
index 0000000..bc84d48
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToInterface/src/Derived.java
@@ -0,0 +1,2 @@
+class Derived extends Base implements BaseInterface {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToInterface2.log b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToInterface2.log
new file mode 100644
index 0000000..698b112
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToInterface2.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/AddFieldToInterface2/BaseInterface.class
+End of files
+Compiling files:
+src/BaseInterface.java
+End of files
+Cleaning output files:
+out/production/AddFieldToInterface2/Derived.class
+End of files
+Compiling files:
+src/Derived.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToInterface2/BaseInterface.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToInterface2/BaseInterface.java.new
new file mode 100644
index 0000000..f999ec3
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToInterface2/BaseInterface.java.new
@@ -0,0 +1,3 @@
+interface BaseInterface {
+  String field = "BaseInterface";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToInterface2/data.xml b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToInterface2/data.xml
new file mode 100644
index 0000000..e9f1bcb
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToInterface2/data.xml
@@ -0,0 +1,10 @@
+<testData>
+  <deleted_by_make>
+    <file path="classes/BaseInterface.class" />
+    <file path="classes/Derived.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/Derived.java" />
+  </recompile>
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToInterface2/src/Base.java b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToInterface2/src/Base.java
new file mode 100644
index 0000000..b861f4b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToInterface2/src/Base.java
@@ -0,0 +1,3 @@
+class Base {
+ String field = "Base";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToInterface2/src/BaseInterface.java b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToInterface2/src/BaseInterface.java
new file mode 100644
index 0000000..06fbb8b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToInterface2/src/BaseInterface.java
@@ -0,0 +1,2 @@
+interface BaseInterface {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToInterface2/src/Derived.java b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToInterface2/src/Derived.java
new file mode 100644
index 0000000..3002568
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addFieldToInterface2/src/Derived.java
@@ -0,0 +1,9 @@
+class Derived extends Base implements BaseInterface {
+  void foo() {
+    System.out.println(field);
+  }
+
+  public static void main(String[] args) {
+    new Derived().foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addFinalMethodHavingNonFinalMethodInSubclass.log b/java/java-tests/testData/compileServer/incremental/membersChange/addFinalMethodHavingNonFinalMethodInSubclass.log
new file mode 100644
index 0000000..aafcde0
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addFinalMethodHavingNonFinalMethodInSubclass.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/AddFinalMethodHavingNonFinalMethodInSubclass/BaseServer.class
+End of files
+Compiling files:
+src/BaseServer.java
+End of files
+Cleaning output files:
+out/production/AddFinalMethodHavingNonFinalMethodInSubclass/Server.class
+End of files
+Compiling files:
+src/Server.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addFinalMethodHavingNonFinalMethodInSubclass/BaseServer.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/addFinalMethodHavingNonFinalMethodInSubclass/BaseServer.java.new
new file mode 100644
index 0000000..51e3e46
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addFinalMethodHavingNonFinalMethodInSubclass/BaseServer.java.new
@@ -0,0 +1,5 @@
+public class BaseServer {
+  public final Integer method() {
+    return new Integer(10);
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addFinalMethodHavingNonFinalMethodInSubclass/data.xml b/java/java-tests/testData/compileServer/incremental/membersChange/addFinalMethodHavingNonFinalMethodInSubclass/data.xml
new file mode 100644
index 0000000..559781e
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addFinalMethodHavingNonFinalMethodInSubclass/data.xml
@@ -0,0 +1,12 @@
+<testData>
+
+  <deleted_by_make>
+    <file path="classes/BaseServer.class" />
+    <file path="classes/Server.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/Server.java" />
+  </recompile>
+
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addFinalMethodHavingNonFinalMethodInSubclass/src/BaseServer.java b/java/java-tests/testData/compileServer/incremental/membersChange/addFinalMethodHavingNonFinalMethodInSubclass/src/BaseServer.java
new file mode 100644
index 0000000..33f9b7b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addFinalMethodHavingNonFinalMethodInSubclass/src/BaseServer.java
@@ -0,0 +1,2 @@
+public class BaseServer {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addFinalMethodHavingNonFinalMethodInSubclass/src/Server.java b/java/java-tests/testData/compileServer/incremental/membersChange/addFinalMethodHavingNonFinalMethodInSubclass/src/Server.java
new file mode 100644
index 0000000..7b78ecc
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addFinalMethodHavingNonFinalMethodInSubclass/src/Server.java
@@ -0,0 +1,5 @@
+public class Server extends BaseServer {
+  public Integer method() {
+    return new Integer(10);
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addHidingField.log b/java/java-tests/testData/compileServer/incremental/membersChange/addHidingField.log
new file mode 100644
index 0000000..f2c6bde
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addHidingField.log
@@ -0,0 +1,13 @@
+Cleaning output files:
+out/production/AddHidingField/BaseAction.class
+End of files
+Compiling files:
+src/BaseAction.java
+End of files
+Cleaning output files:
+out/production/AddHidingField/Client$1.class
+out/production/AddHidingField/Client.class
+End of files
+Compiling files:
+src/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addHidingField/BaseAction.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/addHidingField/BaseAction.java.new
new file mode 100644
index 0000000..ac8d320
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addHidingField/BaseAction.java.new
@@ -0,0 +1,7 @@
+public abstract class BaseAction {
+  int field = 999;
+
+  public abstract void action();
+
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addHidingField/data.xml b/java/java-tests/testData/compileServer/incremental/membersChange/addHidingField/data.xml
new file mode 100644
index 0000000..428c05a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addHidingField/data.xml
@@ -0,0 +1,12 @@
+<testData>
+  <deleted_by_make>
+    <file path="classes/BaseAction.class" />
+    <file path="classes/Client.class" />
+    <file path="classes/Client$1.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/Client.java" />
+  </recompile>
+
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addHidingField/src/BaseAction.java b/java/java-tests/testData/compileServer/incremental/membersChange/addHidingField/src/BaseAction.java
new file mode 100644
index 0000000..a505bd6
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addHidingField/src/BaseAction.java
@@ -0,0 +1,3 @@
+public abstract class BaseAction {
+  public abstract void action();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addHidingField/src/BaseClient.java b/java/java-tests/testData/compileServer/incremental/membersChange/addHidingField/src/BaseClient.java
new file mode 100644
index 0000000..157536c
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addHidingField/src/BaseClient.java
@@ -0,0 +1,3 @@
+public class BaseClient {
+  int field = 777;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addHidingField/src/Client.java b/java/java-tests/testData/compileServer/incremental/membersChange/addHidingField/src/Client.java
new file mode 100644
index 0000000..88ed308
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addHidingField/src/Client.java
@@ -0,0 +1,9 @@
+public class Client extends BaseClient{
+  public void calculation() {
+    new BaseAction() {
+       public void action() {
+          int data = field;
+       }
+    }.action();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addHidingMethod.log b/java/java-tests/testData/compileServer/incremental/membersChange/addHidingMethod.log
new file mode 100644
index 0000000..195d354
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addHidingMethod.log
@@ -0,0 +1,13 @@
+Cleaning output files:
+out/production/AddHidingMethod/BaseAction.class
+End of files
+Compiling files:
+src/BaseAction.java
+End of files
+Cleaning output files:
+out/production/AddHidingMethod/Client$1.class
+out/production/AddHidingMethod/Client.class
+End of files
+Compiling files:
+src/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addHidingMethod/BaseAction.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/addHidingMethod/BaseAction.java.new
new file mode 100644
index 0000000..a79e690
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addHidingMethod/BaseAction.java.new
@@ -0,0 +1,8 @@
+public abstract class BaseAction {
+  public abstract void action();
+
+  public int getData() {
+     return 10;
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addHidingMethod/data.xml b/java/java-tests/testData/compileServer/incremental/membersChange/addHidingMethod/data.xml
new file mode 100644
index 0000000..428c05a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addHidingMethod/data.xml
@@ -0,0 +1,12 @@
+<testData>
+  <deleted_by_make>
+    <file path="classes/BaseAction.class" />
+    <file path="classes/Client.class" />
+    <file path="classes/Client$1.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/Client.java" />
+  </recompile>
+
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addHidingMethod/src/BaseAction.java b/java/java-tests/testData/compileServer/incremental/membersChange/addHidingMethod/src/BaseAction.java
new file mode 100644
index 0000000..a505bd6
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addHidingMethod/src/BaseAction.java
@@ -0,0 +1,3 @@
+public abstract class BaseAction {
+  public abstract void action();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addHidingMethod/src/BaseClient.java b/java/java-tests/testData/compileServer/incremental/membersChange/addHidingMethod/src/BaseClient.java
new file mode 100644
index 0000000..c82d9db
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addHidingMethod/src/BaseClient.java
@@ -0,0 +1,5 @@
+public class BaseClient {
+  public int getData() {
+     return 10;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addHidingMethod/src/Client.java b/java/java-tests/testData/compileServer/incremental/membersChange/addHidingMethod/src/Client.java
new file mode 100644
index 0000000..353e341
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addHidingMethod/src/Client.java
@@ -0,0 +1,9 @@
+public class Client extends BaseClient{
+  public void calculation() {
+    new BaseAction() {
+       public void action() {
+          int data = getData();
+       }
+    }.action();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addInterfaceMethod.log b/java/java-tests/testData/compileServer/incremental/membersChange/addInterfaceMethod.log
new file mode 100644
index 0000000..238df82
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addInterfaceMethod.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/AddInterfaceMethod/Service.class
+End of files
+Compiling files:
+src/Service.java
+End of files
+Cleaning output files:
+out/production/AddInterfaceMethod/ServiceImpl.class
+End of files
+Compiling files:
+src/ServiceImpl.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addInterfaceMethod/Service.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/addInterfaceMethod/Service.java.new
new file mode 100644
index 0000000..7f5b0a1
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addInterfaceMethod/Service.java.new
@@ -0,0 +1,4 @@
+interface Service {
+  void foo();
+  void bar(int a);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addInterfaceMethod/data.xml b/java/java-tests/testData/compileServer/incremental/membersChange/addInterfaceMethod/data.xml
new file mode 100644
index 0000000..03c05a0
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addInterfaceMethod/data.xml
@@ -0,0 +1,12 @@
+<testData>
+
+  <deleted_by_make>
+    <file path="classes/Service.class" />
+    <file path="classes/ServiceImpl.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/ServiceImpl.java" />
+  </recompile>
+
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addInterfaceMethod/src/Service.java b/java/java-tests/testData/compileServer/incremental/membersChange/addInterfaceMethod/src/Service.java
new file mode 100644
index 0000000..97c113f
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addInterfaceMethod/src/Service.java
@@ -0,0 +1,3 @@
+interface Service {
+  void foo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addInterfaceMethod/src/ServiceImpl.java b/java/java-tests/testData/compileServer/incremental/membersChange/addInterfaceMethod/src/ServiceImpl.java
new file mode 100644
index 0000000..4fae5e0
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addInterfaceMethod/src/ServiceImpl.java
@@ -0,0 +1,4 @@
+public class ServiceImpl implements Service {
+  public void foo() {
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addInterfaceMethod2.log b/java/java-tests/testData/compileServer/incremental/membersChange/addInterfaceMethod2.log
new file mode 100644
index 0000000..f96ef85
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addInterfaceMethod2.log
@@ -0,0 +1,14 @@
+Cleaning output files:
+out/production/AddInterfaceMethod2/Service.class
+End of files
+Compiling files:
+src/Service.java
+End of files
+Cleaning output files:
+out/production/AddInterfaceMethod2/DerivedService.class
+out/production/AddInterfaceMethod2/ServiceImpl.class
+End of files
+Compiling files:
+src/DerivedService.java
+src/ServiceImpl.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addInterfaceMethod2/Service.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/addInterfaceMethod2/Service.java.new
new file mode 100644
index 0000000..7f5b0a1
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addInterfaceMethod2/Service.java.new
@@ -0,0 +1,4 @@
+interface Service {
+  void foo();
+  void bar(int a);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addInterfaceMethod2/data.xml b/java/java-tests/testData/compileServer/incremental/membersChange/addInterfaceMethod2/data.xml
new file mode 100644
index 0000000..e03e58c
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addInterfaceMethod2/data.xml
@@ -0,0 +1,14 @@
+<testData>
+
+  <deleted_by_make>
+    <file path="classes/Service.class" />
+    <file path="classes/ServiceImpl.class" />
+    <file path="classes/DerivedService.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/ServiceImpl.java" />
+    <file path="source/DerivedService.java" />
+  </recompile>
+
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addInterfaceMethod2/src/DerivedService.java b/java/java-tests/testData/compileServer/incremental/membersChange/addInterfaceMethod2/src/DerivedService.java
new file mode 100644
index 0000000..4ab4287
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addInterfaceMethod2/src/DerivedService.java
@@ -0,0 +1,2 @@
+interface DerivedService extends Service {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addInterfaceMethod2/src/Service.java b/java/java-tests/testData/compileServer/incremental/membersChange/addInterfaceMethod2/src/Service.java
new file mode 100644
index 0000000..97c113f
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addInterfaceMethod2/src/Service.java
@@ -0,0 +1,3 @@
+interface Service {
+  void foo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addInterfaceMethod2/src/ServiceImpl.java b/java/java-tests/testData/compileServer/incremental/membersChange/addInterfaceMethod2/src/ServiceImpl.java
new file mode 100644
index 0000000..6685253
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addInterfaceMethod2/src/ServiceImpl.java
@@ -0,0 +1,4 @@
+public class ServiceImpl implements DerivedService {
+  public void foo() {
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addLessAccessibleFieldToDerived.log b/java/java-tests/testData/compileServer/incremental/membersChange/addLessAccessibleFieldToDerived.log
new file mode 100644
index 0000000..9e43530
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addLessAccessibleFieldToDerived.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/AddLessAccessibleFieldToDerived/Derived.class
+End of files
+Compiling files:
+src/Derived.java
+End of files
+Cleaning output files:
+out/production/AddLessAccessibleFieldToDerived/Client.class
+End of files
+Compiling files:
+src/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addLessAccessibleFieldToDerived/Derived.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/addLessAccessibleFieldToDerived/Derived.java.new
new file mode 100644
index 0000000..4ccbfad
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addLessAccessibleFieldToDerived/Derived.java.new
@@ -0,0 +1,3 @@
+class Derived extends Base {
+  private String myField = "Derived.myField";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addLessAccessibleFieldToDerived/data.xml b/java/java-tests/testData/compileServer/incremental/membersChange/addLessAccessibleFieldToDerived/data.xml
new file mode 100644
index 0000000..09f8548
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addLessAccessibleFieldToDerived/data.xml
@@ -0,0 +1,10 @@
+<testData>
+  <deleted_by_make>
+    <file path="classes/Derived.class" />
+    <file path="classes/Client.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/Client.java" />
+  </recompile>
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addLessAccessibleFieldToDerived/src/Base.java b/java/java-tests/testData/compileServer/incremental/membersChange/addLessAccessibleFieldToDerived/src/Base.java
new file mode 100644
index 0000000..b98752f
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addLessAccessibleFieldToDerived/src/Base.java
@@ -0,0 +1,3 @@
+class Base {
+ String myField = "Base.myField";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addLessAccessibleFieldToDerived/src/Client.java b/java/java-tests/testData/compileServer/incremental/membersChange/addLessAccessibleFieldToDerived/src/Client.java
new file mode 100644
index 0000000..0ad63d2
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addLessAccessibleFieldToDerived/src/Client.java
@@ -0,0 +1,5 @@
+class Client {
+  public static void main(String[] args) {
+		System.out.println(new Derived().myField);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addLessAccessibleFieldToDerived/src/Derived.java b/java/java-tests/testData/compileServer/incremental/membersChange/addLessAccessibleFieldToDerived/src/Derived.java
new file mode 100644
index 0000000..6fdfab5
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addLessAccessibleFieldToDerived/src/Derived.java
@@ -0,0 +1,2 @@
+class Derived extends Base {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addMethod.log b/java/java-tests/testData/compileServer/incremental/membersChange/addMethod.log
new file mode 100644
index 0000000..316e4be
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addMethod.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/AddMethod/A.class
+End of files
+Compiling files:
+src/A.java
+End of files
+Cleaning output files:
+out/production/AddMethod/D.class
+End of files
+Compiling files:
+src/D.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addMethod/A.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/addMethod/A.java.new
new file mode 100644
index 0000000..e56c547
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addMethod/A.java.new
@@ -0,0 +1,13 @@
+public class A {
+    void f (Integer x) {
+
+    }
+
+    void f (Integer x, Integer y){
+
+    }
+
+    void f (String x, Integer y){
+
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addMethod/src/A.java b/java/java-tests/testData/compileServer/incremental/membersChange/addMethod/src/A.java
new file mode 100644
index 0000000..24ed74c
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addMethod/src/A.java
@@ -0,0 +1,16 @@
+/**
+ * Created by IntelliJ IDEA.
+ * User: db
+ * Date: 18.11.11
+ * Time: 18:53
+ * To change this template use File | Settings | File Templates.
+ */
+public class A {
+    void f (Integer x) {
+        
+    }
+    
+    void f (Integer x, Integer y){
+
+    }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addMethod/src/C.java b/java/java-tests/testData/compileServer/incremental/membersChange/addMethod/src/C.java
new file mode 100644
index 0000000..501c4d8
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addMethod/src/C.java
@@ -0,0 +1,12 @@
+/**
+ * Created by IntelliJ IDEA.
+ * User: db
+ * Date: 18.11.11
+ * Time: 18:54
+ * To change this template use File | Settings | File Templates.
+ */
+public class C {
+    void f (A a){
+        a.f(1);
+    }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addMethod/src/D.java b/java/java-tests/testData/compileServer/incremental/membersChange/addMethod/src/D.java
new file mode 100644
index 0000000..d136f3f
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addMethod/src/D.java
@@ -0,0 +1,12 @@
+/**
+ * Created by IntelliJ IDEA.
+ * User: db
+ * Date: 18.11.11
+ * Time: 18:55
+ * To change this template use File | Settings | File Templates.
+ */
+public class D {
+    void f(A a){
+        a.f(1, 2);
+    }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addMethodWithCovariantReturnType.log b/java/java-tests/testData/compileServer/incremental/membersChange/addMethodWithCovariantReturnType.log
new file mode 100644
index 0000000..f0b4001
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addMethodWithCovariantReturnType.log
@@ -0,0 +1,14 @@
+Cleaning output files:
+out/production/AddMethodWithCovariantReturnType/BaseServer.class
+out/production/AddMethodWithCovariantReturnType/Client.class
+End of files
+Compiling files:
+src/BaseServer.java
+src/Client.java
+End of files
+Cleaning output files:
+out/production/AddMethodWithCovariantReturnType/Server.class
+End of files
+Compiling files:
+src/Server.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addMethodWithCovariantReturnType/BaseServer.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/addMethodWithCovariantReturnType/BaseServer.java.new
new file mode 100644
index 0000000..7e87ae5
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addMethodWithCovariantReturnType/BaseServer.java.new
@@ -0,0 +1,5 @@
+public class BaseServer {
+  public Element method() {
+    return new Element();
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addMethodWithCovariantReturnType/Client.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/addMethodWithCovariantReturnType/Client.java.new
new file mode 100644
index 0000000..963d79a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addMethodWithCovariantReturnType/Client.java.new
@@ -0,0 +1,7 @@
+public class Client {
+
+  public void foo(BaseServer server) {
+    Element elem = server.method();
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addMethodWithCovariantReturnType/data.xml b/java/java-tests/testData/compileServer/incremental/membersChange/addMethodWithCovariantReturnType/data.xml
new file mode 100644
index 0000000..7555d96
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addMethodWithCovariantReturnType/data.xml
@@ -0,0 +1,13 @@
+<testData>
+
+  <deleted_by_make>
+    <file path="classes/BaseServer.class" />
+    <file path="classes/Client.class" />
+    <file path="classes/Server.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/Server.java" />
+  </recompile>
+
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addMethodWithCovariantReturnType/src/BaseServer.java b/java/java-tests/testData/compileServer/incremental/membersChange/addMethodWithCovariantReturnType/src/BaseServer.java
new file mode 100644
index 0000000..33f9b7b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addMethodWithCovariantReturnType/src/BaseServer.java
@@ -0,0 +1,2 @@
+public class BaseServer {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addMethodWithCovariantReturnType/src/Client.java b/java/java-tests/testData/compileServer/incremental/membersChange/addMethodWithCovariantReturnType/src/Client.java
new file mode 100644
index 0000000..6d6fe6a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addMethodWithCovariantReturnType/src/Client.java
@@ -0,0 +1,7 @@
+public class Client {
+
+  public void foo(Server server) {
+    Element elem = server.method();
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addMethodWithCovariantReturnType/src/Element.java b/java/java-tests/testData/compileServer/incremental/membersChange/addMethodWithCovariantReturnType/src/Element.java
new file mode 100644
index 0000000..629a0a7
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addMethodWithCovariantReturnType/src/Element.java
@@ -0,0 +1,2 @@
+public class Element {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addMethodWithCovariantReturnType/src/Server.java b/java/java-tests/testData/compileServer/incremental/membersChange/addMethodWithCovariantReturnType/src/Server.java
new file mode 100644
index 0000000..42e2b1b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addMethodWithCovariantReturnType/src/Server.java
@@ -0,0 +1,5 @@
+public class Server extends BaseServer {
+  public SubElement method() {
+    return new SubElement();
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addMethodWithCovariantReturnType/src/SubElement.java b/java/java-tests/testData/compileServer/incremental/membersChange/addMethodWithCovariantReturnType/src/SubElement.java
new file mode 100644
index 0000000..b9c519b4
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addMethodWithCovariantReturnType/src/SubElement.java
@@ -0,0 +1,2 @@
+public class SubElement extends Element {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addMethodWithIncompatibleReturnType.log b/java/java-tests/testData/compileServer/incremental/membersChange/addMethodWithIncompatibleReturnType.log
new file mode 100644
index 0000000..0aaf2a2
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addMethodWithIncompatibleReturnType.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/AddMethodWithIncompatibleReturnType/BaseServer.class
+End of files
+Compiling files:
+src/BaseServer.java
+End of files
+Cleaning output files:
+out/production/AddMethodWithIncompatibleReturnType/Server.class
+End of files
+Compiling files:
+src/Server.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addMethodWithIncompatibleReturnType/BaseServer.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/addMethodWithIncompatibleReturnType/BaseServer.java.new
new file mode 100644
index 0000000..509daf4
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addMethodWithIncompatibleReturnType/BaseServer.java.new
@@ -0,0 +1,5 @@
+public class BaseServer {
+  public String method() {
+    return "test";
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addMethodWithIncompatibleReturnType/data.xml b/java/java-tests/testData/compileServer/incremental/membersChange/addMethodWithIncompatibleReturnType/data.xml
new file mode 100644
index 0000000..559781e
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addMethodWithIncompatibleReturnType/data.xml
@@ -0,0 +1,12 @@
+<testData>
+
+  <deleted_by_make>
+    <file path="classes/BaseServer.class" />
+    <file path="classes/Server.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/Server.java" />
+  </recompile>
+
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addMethodWithIncompatibleReturnType/src/BaseServer.java b/java/java-tests/testData/compileServer/incremental/membersChange/addMethodWithIncompatibleReturnType/src/BaseServer.java
new file mode 100644
index 0000000..33f9b7b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addMethodWithIncompatibleReturnType/src/BaseServer.java
@@ -0,0 +1,2 @@
+public class BaseServer {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addMethodWithIncompatibleReturnType/src/Server.java b/java/java-tests/testData/compileServer/incremental/membersChange/addMethodWithIncompatibleReturnType/src/Server.java
new file mode 100644
index 0000000..7b78ecc
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addMethodWithIncompatibleReturnType/src/Server.java
@@ -0,0 +1,5 @@
+public class Server extends BaseServer {
+  public Integer method() {
+    return new Integer(10);
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addMoreAccessibleMethodToBase.log b/java/java-tests/testData/compileServer/incremental/membersChange/addMoreAccessibleMethodToBase.log
new file mode 100644
index 0000000..5636bb0
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addMoreAccessibleMethodToBase.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/AddMoreAccessibleMethodToBase/BaseServer.class
+End of files
+Compiling files:
+src/BaseServer.java
+End of files
+Cleaning output files:
+out/production/AddMoreAccessibleMethodToBase/Server.class
+End of files
+Compiling files:
+src/Server.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addMoreAccessibleMethodToBase/BaseServer.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/addMoreAccessibleMethodToBase/BaseServer.java.new
new file mode 100644
index 0000000..011a922
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addMoreAccessibleMethodToBase/BaseServer.java.new
@@ -0,0 +1,5 @@
+public class BaseServer {
+  public Integer method() {
+    return new Integer(0);
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addMoreAccessibleMethodToBase/data.xml b/java/java-tests/testData/compileServer/incremental/membersChange/addMoreAccessibleMethodToBase/data.xml
new file mode 100644
index 0000000..559781e
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addMoreAccessibleMethodToBase/data.xml
@@ -0,0 +1,12 @@
+<testData>
+
+  <deleted_by_make>
+    <file path="classes/BaseServer.class" />
+    <file path="classes/Server.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/Server.java" />
+  </recompile>
+
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addMoreAccessibleMethodToBase/src/BaseServer.java b/java/java-tests/testData/compileServer/incremental/membersChange/addMoreAccessibleMethodToBase/src/BaseServer.java
new file mode 100644
index 0000000..33f9b7b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addMoreAccessibleMethodToBase/src/BaseServer.java
@@ -0,0 +1,2 @@
+public class BaseServer {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addMoreAccessibleMethodToBase/src/Server.java b/java/java-tests/testData/compileServer/incremental/membersChange/addMoreAccessibleMethodToBase/src/Server.java
new file mode 100644
index 0000000..f94d6f3
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addMoreAccessibleMethodToBase/src/Server.java
@@ -0,0 +1,5 @@
+public class Server extends BaseServer {
+  protected Integer method() {
+    return new Integer(10);
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific.log b/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific.log
new file mode 100644
index 0000000..d55fe26
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/AddMoreSpecific/Server.class
+End of files
+Compiling files:
+src/Server.java
+End of files
+Cleaning output files:
+out/production/AddMoreSpecific/Client.class
+End of files
+Compiling files:
+src/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific/Server.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific/Server.java.new
new file mode 100644
index 0000000..4f5139b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific/Server.java.new
@@ -0,0 +1,5 @@
+class Server{
+  void foo(Object o){}
+
+  void foo(String s){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific/data.xml b/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific/data.xml
new file mode 100644
index 0000000..fa886d4
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific/data.xml
@@ -0,0 +1,10 @@
+<testData>
+  <deleted_by_make>
+    <file path="classes/Server.class" />
+    <file path="classes/Client.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/Client.java" />
+  </recompile>
+</testData>
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific/src/Client.java b/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific/src/Client.java
new file mode 100644
index 0000000..5ee0f5c
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific/src/Client.java
@@ -0,0 +1,5 @@
+class Client{
+  {
+    new Server().foo("aaa");
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific/src/Server.java b/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific/src/Server.java
new file mode 100644
index 0000000..b417788
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific/src/Server.java
@@ -0,0 +1,3 @@
+class Server{
+  void foo(Object o){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific1.log b/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific1.log
new file mode 100644
index 0000000..f80ff39
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific1.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/AddMoreSpecific1/Derived.class
+End of files
+Compiling files:
+src/Derived.java
+End of files
+Cleaning output files:
+out/production/AddMoreSpecific1/Client.class
+End of files
+Compiling files:
+src/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific1/Derived.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific1/Derived.java.new
new file mode 100644
index 0000000..3e554d5
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific1/Derived.java.new
@@ -0,0 +1,3 @@
+class Derived extends Base{
+  void foo(String s) {}
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific1/data.xml b/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific1/data.xml
new file mode 100644
index 0000000..5da8c4d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific1/data.xml
@@ -0,0 +1,10 @@
+<testData>
+  <deleted_by_make>
+    <file path="classes/Derived.class" />
+    <file path="classes/Client.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/Client.java" />
+  </recompile>
+</testData>
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific1/src/Base.java b/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific1/src/Base.java
new file mode 100644
index 0000000..489c6aa
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific1/src/Base.java
@@ -0,0 +1,3 @@
+class Base{
+  void foo(Object o){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific1/src/Client.java b/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific1/src/Client.java
new file mode 100644
index 0000000..70a7036
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific1/src/Client.java
@@ -0,0 +1,5 @@
+class Client{
+  {
+    new Derived().foo("aaa");
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific1/src/Derived.java b/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific1/src/Derived.java
new file mode 100644
index 0000000..05add4b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific1/src/Derived.java
@@ -0,0 +1,2 @@
+class Derived extends Base{
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific2.log b/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific2.log
new file mode 100644
index 0000000..c3aea33
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific2.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/AddMoreSpecific2/Base.class
+End of files
+Compiling files:
+src/Base.java
+End of files
+Cleaning output files:
+out/production/AddMoreSpecific2/Client.class
+End of files
+Compiling files:
+src/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific2/Base.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific2/Base.java.new
new file mode 100644
index 0000000..6d9ac77
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific2/Base.java.new
@@ -0,0 +1,3 @@
+class Base{
+  void foo(String s){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific2/data.xml b/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific2/data.xml
new file mode 100644
index 0000000..571c793
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific2/data.xml
@@ -0,0 +1,10 @@
+<testData>
+  <deleted_by_make>
+    <file path="classes/Base.class" />
+    <file path="classes/Client.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/Client.java" />
+  </recompile>
+</testData>
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific2/src/Base.java b/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific2/src/Base.java
new file mode 100644
index 0000000..0d5514b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific2/src/Base.java
@@ -0,0 +1,2 @@
+class Base{
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific2/src/Client.java b/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific2/src/Client.java
new file mode 100644
index 0000000..70a7036
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific2/src/Client.java
@@ -0,0 +1,5 @@
+class Client{
+  {
+    new Derived().foo("aaa");
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific2/src/Derived.java b/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific2/src/Derived.java
new file mode 100644
index 0000000..b513a2e
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addMoreSpecific2/src/Derived.java
@@ -0,0 +1,3 @@
+class Derived extends Base{
+  void foo(Object o){}
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addNonStaticMethodHavingStaticMethodInSubclass.log b/java/java-tests/testData/compileServer/incremental/membersChange/addNonStaticMethodHavingStaticMethodInSubclass.log
new file mode 100644
index 0000000..b774b70
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addNonStaticMethodHavingStaticMethodInSubclass.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/AddNonStaticMethodHavingStaticMethodInSubclass/BaseServer.class
+End of files
+Compiling files:
+src/BaseServer.java
+End of files
+Cleaning output files:
+out/production/AddNonStaticMethodHavingStaticMethodInSubclass/Server.class
+End of files
+Compiling files:
+src/Server.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addNonStaticMethodHavingStaticMethodInSubclass/BaseServer.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/addNonStaticMethodHavingStaticMethodInSubclass/BaseServer.java.new
new file mode 100644
index 0000000..ebfba4a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addNonStaticMethodHavingStaticMethodInSubclass/BaseServer.java.new
@@ -0,0 +1,5 @@
+public class BaseServer {
+  public Integer method() {
+    return new Integer(10);
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addNonStaticMethodHavingStaticMethodInSubclass/data.xml b/java/java-tests/testData/compileServer/incremental/membersChange/addNonStaticMethodHavingStaticMethodInSubclass/data.xml
new file mode 100644
index 0000000..559781e
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addNonStaticMethodHavingStaticMethodInSubclass/data.xml
@@ -0,0 +1,12 @@
+<testData>
+
+  <deleted_by_make>
+    <file path="classes/BaseServer.class" />
+    <file path="classes/Server.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/Server.java" />
+  </recompile>
+
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addNonStaticMethodHavingStaticMethodInSubclass/src/BaseServer.java b/java/java-tests/testData/compileServer/incremental/membersChange/addNonStaticMethodHavingStaticMethodInSubclass/src/BaseServer.java
new file mode 100644
index 0000000..33f9b7b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addNonStaticMethodHavingStaticMethodInSubclass/src/BaseServer.java
@@ -0,0 +1,2 @@
+public class BaseServer {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addNonStaticMethodHavingStaticMethodInSubclass/src/Server.java b/java/java-tests/testData/compileServer/incremental/membersChange/addNonStaticMethodHavingStaticMethodInSubclass/src/Server.java
new file mode 100644
index 0000000..711029b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addNonStaticMethodHavingStaticMethodInSubclass/src/Server.java
@@ -0,0 +1,5 @@
+public class Server extends BaseServer {
+  public static Integer method() {
+    return new Integer(10);
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addStaticFieldToDerived.log b/java/java-tests/testData/compileServer/incremental/membersChange/addStaticFieldToDerived.log
new file mode 100644
index 0000000..62d036c
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addStaticFieldToDerived.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/AddStaticFieldToDerived/Derived.class
+End of files
+Compiling files:
+src/Derived.java
+End of files
+Cleaning output files:
+out/production/AddStaticFieldToDerived/Client.class
+End of files
+Compiling files:
+src/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addStaticFieldToDerived/Derived.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/addStaticFieldToDerived/Derived.java.new
new file mode 100644
index 0000000..cb1374a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addStaticFieldToDerived/Derived.java.new
@@ -0,0 +1,3 @@
+class Derived extends Base {
+  public static String myField = "Derived.myField";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addStaticFieldToDerived/data.xml b/java/java-tests/testData/compileServer/incremental/membersChange/addStaticFieldToDerived/data.xml
new file mode 100644
index 0000000..09f8548
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addStaticFieldToDerived/data.xml
@@ -0,0 +1,10 @@
+<testData>
+  <deleted_by_make>
+    <file path="classes/Derived.class" />
+    <file path="classes/Client.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/Client.java" />
+  </recompile>
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addStaticFieldToDerived/src/Base.java b/java/java-tests/testData/compileServer/incremental/membersChange/addStaticFieldToDerived/src/Base.java
new file mode 100644
index 0000000..b98752f
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addStaticFieldToDerived/src/Base.java
@@ -0,0 +1,3 @@
+class Base {
+ String myField = "Base.myField";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addStaticFieldToDerived/src/Client.java b/java/java-tests/testData/compileServer/incremental/membersChange/addStaticFieldToDerived/src/Client.java
new file mode 100644
index 0000000..0ad63d2
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addStaticFieldToDerived/src/Client.java
@@ -0,0 +1,5 @@
+class Client {
+  public static void main(String[] args) {
+		System.out.println(new Derived().myField);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/addStaticFieldToDerived/src/Derived.java b/java/java-tests/testData/compileServer/incremental/membersChange/addStaticFieldToDerived/src/Derived.java
new file mode 100644
index 0000000..6fdfab5
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/addStaticFieldToDerived/src/Derived.java
@@ -0,0 +1,2 @@
+class Derived extends Base {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/changeMethodGenericReturnType.log b/java/java-tests/testData/compileServer/incremental/membersChange/changeMethodGenericReturnType.log
new file mode 100644
index 0000000..9eca500
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/changeMethodGenericReturnType.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/ChangeMethodGenericReturnType/packageA/IFace.class
+End of files
+Compiling files:
+src/packageA/IFace.java
+End of files
+Cleaning output files:
+out/production/ChangeMethodGenericReturnType/packageA/IFaceImpl.class
+End of files
+Compiling files:
+src/packageA/IFaceImpl.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/changeMethodGenericReturnType/data.xml b/java/java-tests/testData/compileServer/incremental/membersChange/changeMethodGenericReturnType/data.xml
new file mode 100644
index 0000000..9c9adf7
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/changeMethodGenericReturnType/data.xml
@@ -0,0 +1,12 @@
+<testData>
+
+  <deleted_by_make>
+    <file path="classes/packageA/IFace.class" />
+    <file path="classes/packageA/IFaceImpl.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/packageA/IFaceimpl.java" />
+  </recompile>
+
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/changeMethodGenericReturnType/src/packageA/IFace.java b/java/java-tests/testData/compileServer/incremental/membersChange/changeMethodGenericReturnType/src/packageA/IFace.java
new file mode 100644
index 0000000..077501b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/changeMethodGenericReturnType/src/packageA/IFace.java
@@ -0,0 +1,6 @@
+package packageA;
+import java.util.List;
+
+public interface IFace {
+    List<? extends Info1> getKeys();
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/changeMethodGenericReturnType/src/packageA/IFace.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/changeMethodGenericReturnType/src/packageA/IFace.java.new
new file mode 100644
index 0000000..fc4459f
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/changeMethodGenericReturnType/src/packageA/IFace.java.new
@@ -0,0 +1,6 @@
+package packageA;
+import java.util.List;
+
+public interface IFace {
+    List<? extends Info2> getKeys();
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/changeMethodGenericReturnType/src/packageA/IFaceImpl.java b/java/java-tests/testData/compileServer/incremental/membersChange/changeMethodGenericReturnType/src/packageA/IFaceImpl.java
new file mode 100644
index 0000000..08effb7
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/changeMethodGenericReturnType/src/packageA/IFaceImpl.java
@@ -0,0 +1,10 @@
+package packageA;
+
+import java.util.List;
+
+public class IFaceImpl implements IFace{
+    @Override
+    public List<? extends Info1> getKeys() {
+        return null;
+    }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/changeMethodGenericReturnType/src/packageA/Info1.java b/java/java-tests/testData/compileServer/incremental/membersChange/changeMethodGenericReturnType/src/packageA/Info1.java
new file mode 100644
index 0000000..044f278
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/changeMethodGenericReturnType/src/packageA/Info1.java
@@ -0,0 +1,4 @@
+package packageA;
+
+public class Info1 {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/changeMethodGenericReturnType/src/packageA/Info2.java b/java/java-tests/testData/compileServer/incremental/membersChange/changeMethodGenericReturnType/src/packageA/Info2.java
new file mode 100644
index 0000000..59631f8
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/changeMethodGenericReturnType/src/packageA/Info2.java
@@ -0,0 +1,4 @@
+package packageA;
+
+public class Info2 {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/changeStaticMethodSignature.log b/java/java-tests/testData/compileServer/incremental/membersChange/changeStaticMethodSignature.log
new file mode 100644
index 0000000..9ba872e
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/changeStaticMethodSignature.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/ChangeStaticMethodSignature/packageA/Server.class
+End of files
+Compiling files:
+src/packageA/Server.java
+End of files
+Cleaning output files:
+out/production/ChangeStaticMethodSignature/packageA/Client.class
+End of files
+Compiling files:
+src/packageA/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/changeStaticMethodSignature/data.xml b/java/java-tests/testData/compileServer/incremental/membersChange/changeStaticMethodSignature/data.xml
new file mode 100644
index 0000000..641c361
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/changeStaticMethodSignature/data.xml
@@ -0,0 +1,12 @@
+<testData>
+
+  <deleted_by_make>
+    <file path="classes/packageA/Server.class" />
+    <file path="classes/packageA/Client.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/packageA/Client.java" />
+  </recompile>
+
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/changeStaticMethodSignature/src/packageA/Client.java b/java/java-tests/testData/compileServer/incremental/membersChange/changeStaticMethodSignature/src/packageA/Client.java
new file mode 100644
index 0000000..0fb1ab9
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/changeStaticMethodSignature/src/packageA/Client.java
@@ -0,0 +1,7 @@
+package packageA;
+
+public class Client {
+  public static void main(String[] args) {
+    Server.method();
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/changeStaticMethodSignature/src/packageA/Server.java b/java/java-tests/testData/compileServer/incremental/membersChange/changeStaticMethodSignature/src/packageA/Server.java
new file mode 100644
index 0000000..cfad5a3
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/changeStaticMethodSignature/src/packageA/Server.java
@@ -0,0 +1,6 @@
+package packageA;
+
+public class Server {
+  public static void method() {
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/changeStaticMethodSignature/src/packageA/Server.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/changeStaticMethodSignature/src/packageA/Server.java.new
new file mode 100644
index 0000000..8e88c67
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/changeStaticMethodSignature/src/packageA/Server.java.new
@@ -0,0 +1,6 @@
+package packageA;
+
+public class Server {
+  public static void method(int a) {
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteConstructor.log b/java/java-tests/testData/compileServer/incremental/membersChange/deleteConstructor.log
new file mode 100644
index 0000000..bae9390
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteConstructor.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/DeleteConstructor/Server.class
+End of files
+Compiling files:
+src/Server.java
+End of files
+Cleaning output files:
+out/production/DeleteConstructor/Client.class
+End of files
+Compiling files:
+src/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteConstructor/Server.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/deleteConstructor/Server.java.new
new file mode 100644
index 0000000..1ac0915
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteConstructor/Server.java.new
@@ -0,0 +1,2 @@
+class Server {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteConstructor/data.xml b/java/java-tests/testData/compileServer/incremental/membersChange/deleteConstructor/data.xml
new file mode 100644
index 0000000..c8e7a99
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteConstructor/data.xml
@@ -0,0 +1,11 @@
+<testData>
+  <deleted_by_make>
+    <file path="classes/Server.class" />
+    <file path="classes/Client.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/Client.java" />
+  </recompile>
+
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteConstructor/src/Client.java b/java/java-tests/testData/compileServer/incremental/membersChange/deleteConstructor/src/Client.java
new file mode 100644
index 0000000..faaa700
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteConstructor/src/Client.java
@@ -0,0 +1,5 @@
+class Client {
+  public static void main(String[] args) {
+    new Server(10);
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteConstructor/src/Server.java b/java/java-tests/testData/compileServer/incremental/membersChange/deleteConstructor/src/Server.java
new file mode 100644
index 0000000..b8d6aef
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteConstructor/src/Server.java
@@ -0,0 +1,4 @@
+class Server {
+  Server(int a) {
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteInner.log b/java/java-tests/testData/compileServer/incremental/membersChange/deleteInner.log
new file mode 100644
index 0000000..0d20bc5
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteInner.log
@@ -0,0 +1,13 @@
+Cleaning output files:
+out/production/DeleteInner/Outer$Inner.class
+out/production/DeleteInner/Outer.class
+End of files
+Compiling files:
+src/Outer.java
+End of files
+Cleaning output files:
+out/production/DeleteInner/Client.class
+End of files
+Compiling files:
+src/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteInner/Outer.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/deleteInner/Outer.java.new
new file mode 100644
index 0000000..7c55516
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteInner/Outer.java.new
@@ -0,0 +1,3 @@
+
+public class Outer {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteInner/data.xml b/java/java-tests/testData/compileServer/incremental/membersChange/deleteInner/data.xml
new file mode 100644
index 0000000..1b3f210
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteInner/data.xml
@@ -0,0 +1,11 @@
+<testData>
+  <deleted_by_make>
+    <file path="classes/Outer.class" />
+    <file path="classes/Outer$Inner.class" />
+    <file path="classes/Client.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/Client.java" />
+  </recompile>
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteInner/src/Client.java b/java/java-tests/testData/compileServer/incremental/membersChange/deleteInner/src/Client.java
new file mode 100644
index 0000000..f568ad7
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteInner/src/Client.java
@@ -0,0 +1,4 @@
+
+public class Client {
+  Outer.Inner field;
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteInner/src/Outer.java b/java/java-tests/testData/compileServer/incremental/membersChange/deleteInner/src/Outer.java
new file mode 100644
index 0000000..9f641d4
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteInner/src/Outer.java
@@ -0,0 +1,4 @@
+
+public class Outer {
+  public static class Inner {}
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteInterfaceMethod.log b/java/java-tests/testData/compileServer/incremental/membersChange/deleteInterfaceMethod.log
new file mode 100644
index 0000000..faa9c5f
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteInterfaceMethod.log
@@ -0,0 +1,14 @@
+Cleaning output files:
+out/production/DeleteInterfaceMethod/Iface.class
+End of files
+Compiling files:
+src/Iface.java
+End of files
+Cleaning output files:
+out/production/DeleteInterfaceMethod/IfaceImpl.class
+out/production/DeleteInterfaceMethod/IfaceImpl2.class
+End of files
+Compiling files:
+src/IfaceImpl.java
+src/IfaceImpl2.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteInterfaceMethod/Iface.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/deleteInterfaceMethod/Iface.java.new
new file mode 100644
index 0000000..b95f0d5
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteInterfaceMethod/Iface.java.new
@@ -0,0 +1,2 @@
+public interface Iface {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteInterfaceMethod/data.xml b/java/java-tests/testData/compileServer/incremental/membersChange/deleteInterfaceMethod/data.xml
new file mode 100644
index 0000000..9f7d257
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteInterfaceMethod/data.xml
@@ -0,0 +1,12 @@
+<testData>
+  <deleted_by_make>
+    <file path="classes/IfaceImpl.class" />
+    <file path="classes/Ifaceimpl2.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/IfaceImpl.java" />
+    <file path="source/IfaceImpl2.java" />
+  </recompile>
+
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteInterfaceMethod/src/Iface.java b/java/java-tests/testData/compileServer/incremental/membersChange/deleteInterfaceMethod/src/Iface.java
new file mode 100644
index 0000000..a912a31
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteInterfaceMethod/src/Iface.java
@@ -0,0 +1,3 @@
+public interface Iface {
+ void method();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteInterfaceMethod/src/IfaceImpl.java b/java/java-tests/testData/compileServer/incremental/membersChange/deleteInterfaceMethod/src/IfaceImpl.java
new file mode 100644
index 0000000..29c7c84
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteInterfaceMethod/src/IfaceImpl.java
@@ -0,0 +1,3 @@
+public class IfaceImpl implements Iface {
+ public void method() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteInterfaceMethod/src/IfaceImpl2.java b/java/java-tests/testData/compileServer/incremental/membersChange/deleteInterfaceMethod/src/IfaceImpl2.java
new file mode 100644
index 0000000..20ab731
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteInterfaceMethod/src/IfaceImpl2.java
@@ -0,0 +1,4 @@
+public class IfaceImpl2 implements Iface {
+ @Override
+ public void method() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethod.log b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethod.log
new file mode 100644
index 0000000..cb04865
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethod.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/DeleteMethod/Server.class
+End of files
+Compiling files:
+src/Server.java
+End of files
+Cleaning output files:
+out/production/DeleteMethod/Super.class
+End of files
+Compiling files:
+src/Super.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethod/Server.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethod/Server.java.new
new file mode 100644
index 0000000..fb4fd1ae
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethod/Server.java.new
@@ -0,0 +1,3 @@
+
+public class Server {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethod/data.xml b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethod/data.xml
new file mode 100644
index 0000000..930a88a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethod/data.xml
@@ -0,0 +1,11 @@
+<testData>
+  <deleted_by_make>
+    <file path="classes/Server.class" />
+    <file path="classes/Super.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/Super.java" />
+  </recompile>
+
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethod/src/Server.java b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethod/src/Server.java
new file mode 100644
index 0000000..3880575
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethod/src/Server.java
@@ -0,0 +1,4 @@
+
+public class Server {
+  public void foo(){}
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethod/src/Super.java b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethod/src/Super.java
new file mode 100644
index 0000000..d5d8d0d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethod/src/Super.java
@@ -0,0 +1,6 @@
+
+public class Super extends Server{
+  {
+    foo();
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation.log b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation.log
new file mode 100644
index 0000000..30b3c87
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/DeleteMethodImplementation/BaseImpl.class
+End of files
+Compiling files:
+src/BaseImpl.java
+End of files
+Cleaning output files:
+out/production/DeleteMethodImplementation/ConcreteBase.class
+End of files
+Compiling files:
+src/ConcreteBase.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation/BaseImpl.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation/BaseImpl.java.new
new file mode 100644
index 0000000..41eeb2e
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation/BaseImpl.java.new
@@ -0,0 +1,2 @@
+public abstract class BaseImpl implements Base {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation/data.xml b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation/data.xml
new file mode 100644
index 0000000..e2e6b26
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation/data.xml
@@ -0,0 +1,11 @@
+<testData>
+  <deleted_by_make>
+    <file path="classes/BaseImpl.class" />
+    <file path="classes/ConcreteBase.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/ConcreteBase.java" />
+  </recompile>
+
+</testData>
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation/src/Base.java b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation/src/Base.java
new file mode 100644
index 0000000..9b06b93
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation/src/Base.java
@@ -0,0 +1,4 @@
+public interface Base {
+  void foo();
+  void bar();
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation/src/BaseImpl.java b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation/src/BaseImpl.java
new file mode 100644
index 0000000..c3d95e0
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation/src/BaseImpl.java
@@ -0,0 +1,4 @@
+public abstract class BaseImpl implements Base {
+  public void foo() {}
+  // leave bar() unimplemented
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation/src/ConcreteBase.java b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation/src/ConcreteBase.java
new file mode 100644
index 0000000..027da16
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation/src/ConcreteBase.java
@@ -0,0 +1,3 @@
+public class ConcreteBase extends BaseImpl {
+  public void bar() {};
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation2.log b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation2.log
new file mode 100644
index 0000000..2d2fd3a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation2.log
@@ -0,0 +1,6 @@
+Cleaning output files:
+out/production/DeleteMethodImplementation2/BaseImpl.class
+End of files
+Compiling files:
+src/BaseImpl.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation2/BaseImpl.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation2/BaseImpl.java.new
new file mode 100644
index 0000000..f17d68d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation2/BaseImpl.java.new
@@ -0,0 +1,2 @@
+public abstract class BaseImpl extends Base {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation2/data.xml b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation2/data.xml
new file mode 100644
index 0000000..7735bd6
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation2/data.xml
@@ -0,0 +1,9 @@
+<testData>
+  <deleted_by_make>
+    <file path="classes/BaseImpl.class" />
+  </deleted_by_make>
+
+  <recompile>
+  </recompile>
+
+</testData>
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation2/src/Base.java b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation2/src/Base.java
new file mode 100644
index 0000000..516df05
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation2/src/Base.java
@@ -0,0 +1,3 @@
+public abstract class Base {
+  void foo() {}
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation2/src/BaseImpl.java b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation2/src/BaseImpl.java
new file mode 100644
index 0000000..99455d4
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation2/src/BaseImpl.java
@@ -0,0 +1,3 @@
+public abstract class BaseImpl extends Base {
+  public void foo() {}
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation2/src/ConcreteBase.java b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation2/src/ConcreteBase.java
new file mode 100644
index 0000000..49f5d7a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation2/src/ConcreteBase.java
@@ -0,0 +1,2 @@
+public class ConcreteBase extends BaseImpl {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation3.log b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation3.log
new file mode 100644
index 0000000..6fe8896
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation3.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/DeleteMethodImplementation3/Base.class
+End of files
+Compiling files:
+src/Base.java
+End of files
+Cleaning output files:
+out/production/DeleteMethodImplementation3/BaseImpl.class
+End of files
+Compiling files:
+src/BaseImpl.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation3/Base.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation3/Base.java.new
new file mode 100644
index 0000000..11f791a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation3/Base.java.new
@@ -0,0 +1,2 @@
+public class Base {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation3/data.xml b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation3/data.xml
new file mode 100644
index 0000000..0559272
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation3/data.xml
@@ -0,0 +1,11 @@
+<testData>
+  <deleted_by_make>
+    <file path="classes/Base.class" />
+    <file path="classes/BaseImpl.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/BaseImpl.java" />
+  </recompile>
+
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation3/src/Base.java b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation3/src/Base.java
new file mode 100644
index 0000000..38396c5
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation3/src/Base.java
@@ -0,0 +1,3 @@
+public class Base {
+  public void foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation3/src/BaseIface.java b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation3/src/BaseIface.java
new file mode 100644
index 0000000..8f7abc3
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation3/src/BaseIface.java
@@ -0,0 +1,3 @@
+public interface BaseIface {
+  void foo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation3/src/BaseImpl.java b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation3/src/BaseImpl.java
new file mode 100644
index 0000000..0b47bbe
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation3/src/BaseImpl.java
@@ -0,0 +1,2 @@
+public class BaseImpl extends Base implements BaseIface {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation4.log b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation4.log
new file mode 100644
index 0000000..db72b0f
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation4.log
@@ -0,0 +1,14 @@
+Cleaning output files:
+out/production/DeleteMethodImplementation4/Base.class
+End of files
+Compiling files:
+src/Base.java
+End of files
+Cleaning output files:
+out/production/DeleteMethodImplementation4/BaseImpl.class
+out/production/DeleteMethodImplementation4/BaseImplImpl.class
+End of files
+Compiling files:
+src/BaseImpl.java
+src/BaseImplImpl.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation4/Base.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation4/Base.java.new
new file mode 100644
index 0000000..11f791a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation4/Base.java.new
@@ -0,0 +1,2 @@
+public class Base {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation4/data.xml b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation4/data.xml
new file mode 100644
index 0000000..076570e
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation4/data.xml
@@ -0,0 +1,11 @@
+<testData>
+  <deleted_by_make>
+    <file path="classes/Base.class" />
+    <file path="classes/BaseImplImpl.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/BaseImplImpl.java" />
+  </recompile>
+
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation4/src/Base.java b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation4/src/Base.java
new file mode 100644
index 0000000..38396c5
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation4/src/Base.java
@@ -0,0 +1,3 @@
+public class Base {
+  public void foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation4/src/BaseIface.java b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation4/src/BaseIface.java
new file mode 100644
index 0000000..8f7abc3
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation4/src/BaseIface.java
@@ -0,0 +1,3 @@
+public interface BaseIface {
+  void foo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation4/src/BaseImpl.java b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation4/src/BaseImpl.java
new file mode 100644
index 0000000..7a331f9
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation4/src/BaseImpl.java
@@ -0,0 +1,2 @@
+public class BaseImpl extends Base{
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation4/src/BaseImplImpl.java b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation4/src/BaseImplImpl.java
new file mode 100644
index 0000000..81ee68f
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation4/src/BaseImplImpl.java
@@ -0,0 +1,2 @@
+public class BaseImplImpl extends BaseImpl implements BaseIface {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation5.log b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation5.log
new file mode 100644
index 0000000..a36940f
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation5.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/DeleteMethodImplementation5/Base.class
+End of files
+Compiling files:
+src/Base.java
+End of files
+Cleaning output files:
+out/production/DeleteMethodImplementation5/BaseImpl.class
+End of files
+Compiling files:
+src/BaseImpl.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation5/Base.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation5/Base.java.new
new file mode 100644
index 0000000..11f791a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation5/Base.java.new
@@ -0,0 +1,2 @@
+public class Base {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation5/data.xml b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation5/data.xml
new file mode 100644
index 0000000..0559272
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation5/data.xml
@@ -0,0 +1,11 @@
+<testData>
+  <deleted_by_make>
+    <file path="classes/Base.class" />
+    <file path="classes/BaseImpl.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/BaseImpl.java" />
+  </recompile>
+
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation5/src/Base.java b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation5/src/Base.java
new file mode 100644
index 0000000..38396c5
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation5/src/Base.java
@@ -0,0 +1,3 @@
+public class Base {
+  public void foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation5/src/BaseIface.java b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation5/src/BaseIface.java
new file mode 100644
index 0000000..8f7abc3
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation5/src/BaseIface.java
@@ -0,0 +1,3 @@
+public interface BaseIface {
+  void foo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation5/src/BaseImpl.java b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation5/src/BaseImpl.java
new file mode 100644
index 0000000..01636818
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation5/src/BaseImpl.java
@@ -0,0 +1,3 @@
+public class BaseImpl extends Base{
+  public void foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation5/src/BaseImplImpl.java b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation5/src/BaseImplImpl.java
new file mode 100644
index 0000000..81ee68f
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation5/src/BaseImplImpl.java
@@ -0,0 +1,2 @@
+public class BaseImplImpl extends BaseImpl implements BaseIface {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation6.log b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation6.log
new file mode 100644
index 0000000..e4bd383
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation6.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/DeleteMethodImplementation6/BaseImpl.class
+End of files
+Compiling files:
+src/BaseImpl.java
+End of files
+Cleaning output files:
+out/production/DeleteMethodImplementation6/BaseImplImpl.class
+End of files
+Compiling files:
+src/BaseImplImpl.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation6/BaseImpl.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation6/BaseImpl.java.new
new file mode 100644
index 0000000..f17d68d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation6/BaseImpl.java.new
@@ -0,0 +1,2 @@
+public abstract class BaseImpl extends Base {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation6/data.xml b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation6/data.xml
new file mode 100644
index 0000000..2ca244d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation6/data.xml
@@ -0,0 +1,11 @@
+<testData>
+  <deleted_by_make>
+    <file path="classes/BaseImpl.class" />
+    <file path="classes/BaseImplImpl.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/BaseImplImpl.java" />
+  </recompile>
+
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation6/src/Base.java b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation6/src/Base.java
new file mode 100644
index 0000000..38fb901a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation6/src/Base.java
@@ -0,0 +1,3 @@
+public abstract class Base {
+  public abstract void foo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation6/src/BaseImpl.java b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation6/src/BaseImpl.java
new file mode 100644
index 0000000..b1415d1
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation6/src/BaseImpl.java
@@ -0,0 +1,3 @@
+public abstract class BaseImpl extends Base {
+  public void foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation6/src/BaseImplImpl.java b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation6/src/BaseImplImpl.java
new file mode 100644
index 0000000..be488b8
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation6/src/BaseImplImpl.java
@@ -0,0 +1,3 @@
+public class BaseImplImpl extends BaseImpl {
+  public void foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation6/src/Client.java b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation6/src/Client.java
new file mode 100644
index 0000000..1a32bec
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation6/src/Client.java
@@ -0,0 +1,6 @@
+public class Client {
+  public static void main (String[] args) {
+    Base base = new ConcreteBase();
+    base.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation6/src/ConcreteBase.java b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation6/src/ConcreteBase.java
new file mode 100644
index 0000000..f66c4d5
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation6/src/ConcreteBase.java
@@ -0,0 +1,2 @@
+public class ConcreteBase extends BaseImplImpl {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation7.log b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation7.log
new file mode 100644
index 0000000..08b5e98
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation7.log
@@ -0,0 +1,14 @@
+Cleaning output files:
+out/production/DeleteMethodImplementation7/BaseImpl.class
+out/production/DeleteMethodImplementation7/BaseImplImpl.class
+End of files
+Compiling files:
+src/BaseImpl.java
+src/BaseImplImpl.java
+End of files
+Cleaning output files:
+out/production/DeleteMethodImplementation7/ConcreteBase.class
+End of files
+Compiling files:
+src/ConcreteBase.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation7/BaseImpl.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation7/BaseImpl.java.new
new file mode 100644
index 0000000..f17d68d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation7/BaseImpl.java.new
@@ -0,0 +1,2 @@
+public abstract class BaseImpl extends Base {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation7/BaseImplImpl.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation7/BaseImplImpl.java.new
new file mode 100644
index 0000000..da4df8d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation7/BaseImplImpl.java.new
@@ -0,0 +1,2 @@
+public abstract class BaseImplImpl extends BaseImpl {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation7/data.xml b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation7/data.xml
new file mode 100644
index 0000000..69eecf4
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation7/data.xml
@@ -0,0 +1,12 @@
+<testData>
+  <deleted_by_make>
+    <file path="classes/BaseImpl.class" />
+    <file path="classes/BaseImplImpl.class" />
+    <file path="classes/ConcreteBase.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/ConcreteBase.java" />
+  </recompile>
+
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation7/src/Base.java b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation7/src/Base.java
new file mode 100644
index 0000000..38fb901a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation7/src/Base.java
@@ -0,0 +1,3 @@
+public abstract class Base {
+  public abstract void foo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation7/src/BaseImpl.java b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation7/src/BaseImpl.java
new file mode 100644
index 0000000..b1415d1
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation7/src/BaseImpl.java
@@ -0,0 +1,3 @@
+public abstract class BaseImpl extends Base {
+  public void foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation7/src/BaseImplImpl.java b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation7/src/BaseImplImpl.java
new file mode 100644
index 0000000..390a403
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation7/src/BaseImplImpl.java
@@ -0,0 +1,3 @@
+public abstract class BaseImplImpl extends BaseImpl {
+  public void foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation7/src/Client.java b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation7/src/Client.java
new file mode 100644
index 0000000..1a32bec
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation7/src/Client.java
@@ -0,0 +1,6 @@
+public class Client {
+  public static void main (String[] args) {
+    Base base = new ConcreteBase();
+    base.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation7/src/ConcreteBase.java b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation7/src/ConcreteBase.java
new file mode 100644
index 0000000..f66c4d5
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/deleteMethodImplementation7/src/ConcreteBase.java
@@ -0,0 +1,2 @@
+public class ConcreteBase extends BaseImplImpl {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/hierarchy.log b/java/java-tests/testData/compileServer/incremental/membersChange/hierarchy.log
new file mode 100644
index 0000000..10d0a0d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/hierarchy.log
@@ -0,0 +1,18 @@
+Cleaning output files:
+out/production/Hierarchy/Service.class
+End of files
+Compiling files:
+src/Service.java
+End of files
+Cleaning output files:
+out/production/Hierarchy/Client1$1.class
+out/production/Hierarchy/Client1.class
+out/production/Hierarchy/Client2$1.class
+out/production/Hierarchy/Client2.class
+out/production/Hierarchy/ServiceAdapter.class
+End of files
+Compiling files:
+src/Client1.java
+src/Client2.java
+src/ServiceAdapter.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/hierarchy/Service.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/hierarchy/Service.java.new
new file mode 100644
index 0000000..2599685
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/hierarchy/Service.java.new
@@ -0,0 +1,3 @@
+public abstract class Service{
+  public abstract void foo(int a);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/hierarchy/data.xml b/java/java-tests/testData/compileServer/incremental/membersChange/hierarchy/data.xml
new file mode 100644
index 0000000..3f223c9
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/hierarchy/data.xml
@@ -0,0 +1,16 @@
+<testData>
+  <deleted_by_make>
+    <file path="classes/Service.class" />
+    <file path="classes/Client1.class" />
+    <file path="classes/Client1$1.class" />
+    <file path="classes/Client2.class" />
+    <file path="classes/Client2$1.class" />
+    <file path="classes/ServiceAdapter.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/Client1.java" />
+    <file path="source/Client2.java" />
+    <file path="source/ServiceAdapter.java" />
+  </recompile>
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/hierarchy/src/Client1.java b/java/java-tests/testData/compileServer/incremental/membersChange/hierarchy/src/Client1.java
new file mode 100644
index 0000000..7416c47
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/hierarchy/src/Client1.java
@@ -0,0 +1,8 @@
+class Client1{
+  public static void main(String[] args) {
+    Service service = new Service() {
+      public void foo() {
+      }
+    };
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/hierarchy/src/Client2.java b/java/java-tests/testData/compileServer/incremental/membersChange/hierarchy/src/Client2.java
new file mode 100644
index 0000000..38f4ceb
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/hierarchy/src/Client2.java
@@ -0,0 +1,8 @@
+class Client2{
+  public static void main(String[] args) {
+    Service service = new ServiceAdapter() {
+      public void foo() {
+      }
+    };
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/hierarchy/src/Service.java b/java/java-tests/testData/compileServer/incremental/membersChange/hierarchy/src/Service.java
new file mode 100644
index 0000000..eee2990
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/hierarchy/src/Service.java
@@ -0,0 +1,3 @@
+public abstract class Service{
+  public abstract void foo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/hierarchy/src/ServiceAdapter.java b/java/java-tests/testData/compileServer/incremental/membersChange/hierarchy/src/ServiceAdapter.java
new file mode 100644
index 0000000..fd92328
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/hierarchy/src/ServiceAdapter.java
@@ -0,0 +1,4 @@
+public class ServiceAdapter extends Service{
+  public void foo() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/hierarchy2.log b/java/java-tests/testData/compileServer/incremental/membersChange/hierarchy2.log
new file mode 100644
index 0000000..2c78ae1
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/hierarchy2.log
@@ -0,0 +1,18 @@
+Cleaning output files:
+out/production/Hierarchy2/Service.class
+End of files
+Compiling files:
+src/Service.java
+End of files
+Cleaning output files:
+out/production/Hierarchy2/Client1$1.class
+out/production/Hierarchy2/Client1.class
+out/production/Hierarchy2/Client2$1.class
+out/production/Hierarchy2/Client2.class
+out/production/Hierarchy2/ServiceAdapter.class
+End of files
+Compiling files:
+src/Client1.java
+src/Client2.java
+src/ServiceAdapter.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/hierarchy2/Service.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/hierarchy2/Service.java.new
new file mode 100644
index 0000000..2d11dcb
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/hierarchy2/Service.java.new
@@ -0,0 +1,3 @@
+public interface Service{
+  void foo(int a);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/hierarchy2/data.xml b/java/java-tests/testData/compileServer/incremental/membersChange/hierarchy2/data.xml
new file mode 100644
index 0000000..3f223c9
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/hierarchy2/data.xml
@@ -0,0 +1,16 @@
+<testData>
+  <deleted_by_make>
+    <file path="classes/Service.class" />
+    <file path="classes/Client1.class" />
+    <file path="classes/Client1$1.class" />
+    <file path="classes/Client2.class" />
+    <file path="classes/Client2$1.class" />
+    <file path="classes/ServiceAdapter.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/Client1.java" />
+    <file path="source/Client2.java" />
+    <file path="source/ServiceAdapter.java" />
+  </recompile>
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/hierarchy2/src/Client1.java b/java/java-tests/testData/compileServer/incremental/membersChange/hierarchy2/src/Client1.java
new file mode 100644
index 0000000..7416c47
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/hierarchy2/src/Client1.java
@@ -0,0 +1,8 @@
+class Client1{
+  public static void main(String[] args) {
+    Service service = new Service() {
+      public void foo() {
+      }
+    };
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/hierarchy2/src/Client2.java b/java/java-tests/testData/compileServer/incremental/membersChange/hierarchy2/src/Client2.java
new file mode 100644
index 0000000..38f4ceb
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/hierarchy2/src/Client2.java
@@ -0,0 +1,8 @@
+class Client2{
+  public static void main(String[] args) {
+    Service service = new ServiceAdapter() {
+      public void foo() {
+      }
+    };
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/hierarchy2/src/Service.java b/java/java-tests/testData/compileServer/incremental/membersChange/hierarchy2/src/Service.java
new file mode 100644
index 0000000..6f0421c
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/hierarchy2/src/Service.java
@@ -0,0 +1,3 @@
+public interface Service{
+  void foo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/hierarchy2/src/ServiceAdapter.java b/java/java-tests/testData/compileServer/incremental/membersChange/hierarchy2/src/ServiceAdapter.java
new file mode 100644
index 0000000..845cafb
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/hierarchy2/src/ServiceAdapter.java
@@ -0,0 +1,4 @@
+public class ServiceAdapter implements Service{
+  public void foo() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/moveMethodToSubclass/build.log b/java/java-tests/testData/compileServer/incremental/membersChange/moveMethodToSubclass/build.log
new file mode 100644
index 0000000..86914e0a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/moveMethodToSubclass/build.log
@@ -0,0 +1,14 @@
+Cleaning output files:
+out/production/MoveMethodToSubclass/Base.class
+out/production/MoveMethodToSubclass/Impl.class
+End of files
+Compiling files:
+src/Base.java
+src/Impl.java
+End of files
+Cleaning output files:
+out/production/MoveMethodToSubclass/Main.class
+End of files
+Compiling files:
+src/Main.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/moveMethodToSubclass/src/Base.java b/java/java-tests/testData/compileServer/incremental/membersChange/moveMethodToSubclass/src/Base.java
new file mode 100644
index 0000000..8a9f651
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/moveMethodToSubclass/src/Base.java
@@ -0,0 +1,6 @@
+import java.util.Collection;
+
+public class Base {
+  public void method(Base a) {
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/moveMethodToSubclass/src/Base.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/moveMethodToSubclass/src/Base.java.new
new file mode 100644
index 0000000..4beb1ad
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/moveMethodToSubclass/src/Base.java.new
@@ -0,0 +1,2 @@
+public class Base {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/moveMethodToSubclass/src/Impl.java b/java/java-tests/testData/compileServer/incremental/membersChange/moveMethodToSubclass/src/Impl.java
new file mode 100644
index 0000000..b6a398c
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/moveMethodToSubclass/src/Impl.java
@@ -0,0 +1,2 @@
+public class Impl extends Base {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/moveMethodToSubclass/src/Impl.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/moveMethodToSubclass/src/Impl.java.new
new file mode 100644
index 0000000..70f3709
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/moveMethodToSubclass/src/Impl.java.new
@@ -0,0 +1,6 @@
+import java.util.List;
+
+public class Impl extends Base {
+  public void method(Impl a) {
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/moveMethodToSubclass/src/Main.java b/java/java-tests/testData/compileServer/incremental/membersChange/moveMethodToSubclass/src/Main.java
new file mode 100644
index 0000000..6771b06
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/moveMethodToSubclass/src/Main.java
@@ -0,0 +1,9 @@
+import java.util.ArrayList;
+import java.util.Collection;
+
+public class Main {
+  {
+    Impl impl = new Impl();
+    impl.method(null);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/removeBaseImplementation.log b/java/java-tests/testData/compileServer/incremental/membersChange/removeBaseImplementation.log
new file mode 100644
index 0000000..316ca99
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/removeBaseImplementation.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/RemoveBaseImplementation/A.class
+End of files
+Compiling files:
+src/A.java
+End of files
+Cleaning output files:
+out/production/RemoveBaseImplementation/B.class
+End of files
+Compiling files:
+src/B.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/removeBaseImplementation/A.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/removeBaseImplementation/A.java.new
new file mode 100644
index 0000000..e7982ed
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/removeBaseImplementation/A.java.new
@@ -0,0 +1,4 @@
+import java.awt.event.*;
+
+public abstract class A implements ActionListener {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/removeBaseImplementation/data.xml b/java/java-tests/testData/compileServer/incremental/membersChange/removeBaseImplementation/data.xml
new file mode 100644
index 0000000..de50a9a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/removeBaseImplementation/data.xml
@@ -0,0 +1,10 @@
+<testData>
+  <deleted_by_make>
+    <file path="classes/A.class" />
+    <file path="classes/B.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/B.java" />
+  </recompile>
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/removeBaseImplementation/src/A.java b/java/java-tests/testData/compileServer/incremental/membersChange/removeBaseImplementation/src/A.java
new file mode 100644
index 0000000..cbcb5d0
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/removeBaseImplementation/src/A.java
@@ -0,0 +1,5 @@
+import java.awt.event.*;
+
+public abstract class A implements ActionListener {
+    public final void actionPerformed(ActionEvent e) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/removeBaseImplementation/src/B.java b/java/java-tests/testData/compileServer/incremental/membersChange/removeBaseImplementation/src/B.java
new file mode 100644
index 0000000..422c7f2
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/removeBaseImplementation/src/B.java
@@ -0,0 +1,4 @@
+import java.awt.event.*;
+
+public class B extends A {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/removeHidingField.log b/java/java-tests/testData/compileServer/incremental/membersChange/removeHidingField.log
new file mode 100644
index 0000000..f2f4557
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/removeHidingField.log
@@ -0,0 +1,13 @@
+Cleaning output files:
+out/production/RemoveHidingField/BaseAction.class
+End of files
+Compiling files:
+src/BaseAction.java
+End of files
+Cleaning output files:
+out/production/RemoveHidingField/Client$1.class
+out/production/RemoveHidingField/Client.class
+End of files
+Compiling files:
+src/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/removeHidingField/BaseAction.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/removeHidingField/BaseAction.java.new
new file mode 100644
index 0000000..eb8b5190
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/removeHidingField/BaseAction.java.new
@@ -0,0 +1,5 @@
+public abstract class BaseAction {
+  public abstract void action();
+
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/removeHidingField/data.xml b/java/java-tests/testData/compileServer/incremental/membersChange/removeHidingField/data.xml
new file mode 100644
index 0000000..428c05a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/removeHidingField/data.xml
@@ -0,0 +1,12 @@
+<testData>
+  <deleted_by_make>
+    <file path="classes/BaseAction.class" />
+    <file path="classes/Client.class" />
+    <file path="classes/Client$1.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/Client.java" />
+  </recompile>
+
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/removeHidingField/src/BaseAction.java b/java/java-tests/testData/compileServer/incremental/membersChange/removeHidingField/src/BaseAction.java
new file mode 100644
index 0000000..becc0f5
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/removeHidingField/src/BaseAction.java
@@ -0,0 +1,5 @@
+public abstract class BaseAction {
+  int field = 999;
+
+  public abstract void action();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/removeHidingField/src/BaseClient.java b/java/java-tests/testData/compileServer/incremental/membersChange/removeHidingField/src/BaseClient.java
new file mode 100644
index 0000000..157536c
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/removeHidingField/src/BaseClient.java
@@ -0,0 +1,3 @@
+public class BaseClient {
+  int field = 777;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/removeHidingField/src/Client.java b/java/java-tests/testData/compileServer/incremental/membersChange/removeHidingField/src/Client.java
new file mode 100644
index 0000000..88ed308
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/removeHidingField/src/Client.java
@@ -0,0 +1,9 @@
+public class Client extends BaseClient{
+  public void calculation() {
+    new BaseAction() {
+       public void action() {
+          int data = field;
+       }
+    }.action();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/removeHidingMethod.log b/java/java-tests/testData/compileServer/incremental/membersChange/removeHidingMethod.log
new file mode 100644
index 0000000..0f7addc
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/removeHidingMethod.log
@@ -0,0 +1,13 @@
+Cleaning output files:
+out/production/RemoveHidingMethod/BaseAction.class
+End of files
+Compiling files:
+src/BaseAction.java
+End of files
+Cleaning output files:
+out/production/RemoveHidingMethod/Client$1.class
+out/production/RemoveHidingMethod/Client.class
+End of files
+Compiling files:
+src/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/removeHidingMethod/BaseAction.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/removeHidingMethod/BaseAction.java.new
new file mode 100644
index 0000000..a505bd6
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/removeHidingMethod/BaseAction.java.new
@@ -0,0 +1,3 @@
+public abstract class BaseAction {
+  public abstract void action();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/removeHidingMethod/data.xml b/java/java-tests/testData/compileServer/incremental/membersChange/removeHidingMethod/data.xml
new file mode 100644
index 0000000..428c05a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/removeHidingMethod/data.xml
@@ -0,0 +1,12 @@
+<testData>
+  <deleted_by_make>
+    <file path="classes/BaseAction.class" />
+    <file path="classes/Client.class" />
+    <file path="classes/Client$1.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/Client.java" />
+  </recompile>
+
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/removeHidingMethod/src/BaseAction.java b/java/java-tests/testData/compileServer/incremental/membersChange/removeHidingMethod/src/BaseAction.java
new file mode 100644
index 0000000..d166313
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/removeHidingMethod/src/BaseAction.java
@@ -0,0 +1,7 @@
+public abstract class BaseAction {
+  public abstract void action();
+
+  public int getData(int param) {
+     return 10;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/removeHidingMethod/src/BaseClient.java b/java/java-tests/testData/compileServer/incremental/membersChange/removeHidingMethod/src/BaseClient.java
new file mode 100644
index 0000000..c82d9db
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/removeHidingMethod/src/BaseClient.java
@@ -0,0 +1,5 @@
+public class BaseClient {
+  public int getData() {
+     return 10;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/removeHidingMethod/src/Client.java b/java/java-tests/testData/compileServer/incremental/membersChange/removeHidingMethod/src/Client.java
new file mode 100644
index 0000000..cd32882
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/removeHidingMethod/src/Client.java
@@ -0,0 +1,9 @@
+public class Client extends BaseClient{
+  public void calculation() {
+    new BaseAction() {
+       public void action() {
+          int data = getData(7);
+       }
+    }.action();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/removeThrowsInBaseMethod.log b/java/java-tests/testData/compileServer/incremental/membersChange/removeThrowsInBaseMethod.log
new file mode 100644
index 0000000..beafde0
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/removeThrowsInBaseMethod.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/RemoveThrowsInBaseMethod/ThrowingTop.class
+End of files
+Compiling files:
+src/ThrowingTop.java
+End of files
+Cleaning output files:
+out/production/RemoveThrowsInBaseMethod/ThrowingBottom.class
+End of files
+Compiling files:
+src/ThrowingBottom.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/removeThrowsInBaseMethod/ThrowingTop.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/removeThrowsInBaseMethod/ThrowingTop.java.new
new file mode 100644
index 0000000..45cfe09
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/removeThrowsInBaseMethod/ThrowingTop.java.new
@@ -0,0 +1,4 @@
+public class ThrowingTop {
+    public void spoil() {
+    }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/removeThrowsInBaseMethod/data.xml b/java/java-tests/testData/compileServer/incremental/membersChange/removeThrowsInBaseMethod/data.xml
new file mode 100644
index 0000000..1703127
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/removeThrowsInBaseMethod/data.xml
@@ -0,0 +1,12 @@
+<testData>
+
+  <deleted_by_make>
+    <file path="classes/ThrowingTop.class" />
+    <file path="classes/ThrowingBottom.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/ThrowingBottom.java" />
+  </recompile>
+
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/removeThrowsInBaseMethod/src/Checked.java b/java/java-tests/testData/compileServer/incremental/membersChange/removeThrowsInBaseMethod/src/Checked.java
new file mode 100644
index 0000000..53dc42b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/removeThrowsInBaseMethod/src/Checked.java
@@ -0,0 +1,2 @@
+public class Checked extends Exception {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/removeThrowsInBaseMethod/src/ThrowingBottom.java b/java/java-tests/testData/compileServer/incremental/membersChange/removeThrowsInBaseMethod/src/ThrowingBottom.java
new file mode 100644
index 0000000..ed28053
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/removeThrowsInBaseMethod/src/ThrowingBottom.java
@@ -0,0 +1,5 @@
+public class ThrowingBottom extends ThrowingTop{
+    @Override
+    public void spoil() throws Checked {
+    }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/removeThrowsInBaseMethod/src/ThrowingTop.java b/java/java-tests/testData/compileServer/incremental/membersChange/removeThrowsInBaseMethod/src/ThrowingTop.java
new file mode 100644
index 0000000..4982ada
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/removeThrowsInBaseMethod/src/ThrowingTop.java
@@ -0,0 +1,4 @@
+public class ThrowingTop {
+    public void spoil() throws Checked {
+    }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/renameMethod.log b/java/java-tests/testData/compileServer/incremental/membersChange/renameMethod.log
new file mode 100644
index 0000000..75c3652
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/renameMethod.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/RenameMethod/packageA/Server.class
+End of files
+Compiling files:
+src/packageA/Server.java
+End of files
+Cleaning output files:
+out/production/RenameMethod/packageA/Client.class
+End of files
+Compiling files:
+src/packageA/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/renameMethod/data.xml b/java/java-tests/testData/compileServer/incremental/membersChange/renameMethod/data.xml
new file mode 100644
index 0000000..9659f6e
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/renameMethod/data.xml
@@ -0,0 +1,15 @@
+<testData>
+
+  <delete>
+  </delete>
+
+  <deleted_by_make>
+    <file path="classes/packageA/Server.class" />
+    <file path="classes/packageA/Client.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/packageA/Client.java" />
+  </recompile>
+
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/renameMethod/src/packageA/Client.java b/java/java-tests/testData/compileServer/incremental/membersChange/renameMethod/src/packageA/Client.java
new file mode 100644
index 0000000..3ef542f
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/renameMethod/src/packageA/Client.java
@@ -0,0 +1,12 @@
+/**
+ * created at Jan 22, 2002
+ * @author Jeka
+ */
+package packageA;
+
+public class Client {
+  public static void main(String[] args) {
+    Server server = new Server();
+    server.method();
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/renameMethod/src/packageA/Server.java b/java/java-tests/testData/compileServer/incremental/membersChange/renameMethod/src/packageA/Server.java
new file mode 100644
index 0000000..810c87d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/renameMethod/src/packageA/Server.java
@@ -0,0 +1,11 @@
+/**
+ * created at Jan 22, 2002
+ * @author Jeka
+ */
+package packageA;
+
+public class Server {
+  public void method() {
+    System.out.println("Server.method");
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/renameMethod/src/packageA/Server.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/renameMethod/src/packageA/Server.java.new
new file mode 100644
index 0000000..4851130
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/renameMethod/src/packageA/Server.java.new
@@ -0,0 +1,11 @@
+/**
+ * created at Jan 22, 2002
+ * @author Jeka
+ */
+package packageA;
+
+public class Server {
+  public void method1() {
+    System.out.println("Server.method");
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/throwsListDiffersInBaseAndDerived.log b/java/java-tests/testData/compileServer/incremental/membersChange/throwsListDiffersInBaseAndDerived.log
new file mode 100644
index 0000000..824e681
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/throwsListDiffersInBaseAndDerived.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/ThrowsListDiffersInBaseAndDerived/BaseServer.class
+End of files
+Compiling files:
+src/BaseServer.java
+End of files
+Cleaning output files:
+out/production/ThrowsListDiffersInBaseAndDerived/Server.class
+End of files
+Compiling files:
+src/Server.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/throwsListDiffersInBaseAndDerived/BaseServer.java.new b/java/java-tests/testData/compileServer/incremental/membersChange/throwsListDiffersInBaseAndDerived/BaseServer.java.new
new file mode 100644
index 0000000..60da85a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/throwsListDiffersInBaseAndDerived/BaseServer.java.new
@@ -0,0 +1,5 @@
+public class BaseServer {
+  public Integer method() throws Exception2 {
+    return new Integer(0);
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/throwsListDiffersInBaseAndDerived/data.xml b/java/java-tests/testData/compileServer/incremental/membersChange/throwsListDiffersInBaseAndDerived/data.xml
new file mode 100644
index 0000000..559781e
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/throwsListDiffersInBaseAndDerived/data.xml
@@ -0,0 +1,12 @@
+<testData>
+
+  <deleted_by_make>
+    <file path="classes/BaseServer.class" />
+    <file path="classes/Server.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/Server.java" />
+  </recompile>
+
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/throwsListDiffersInBaseAndDerived/src/BaseServer.java b/java/java-tests/testData/compileServer/incremental/membersChange/throwsListDiffersInBaseAndDerived/src/BaseServer.java
new file mode 100644
index 0000000..33f9b7b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/throwsListDiffersInBaseAndDerived/src/BaseServer.java
@@ -0,0 +1,2 @@
+public class BaseServer {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/throwsListDiffersInBaseAndDerived/src/Exception1.java b/java/java-tests/testData/compileServer/incremental/membersChange/throwsListDiffersInBaseAndDerived/src/Exception1.java
new file mode 100644
index 0000000..bf57b7f
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/throwsListDiffersInBaseAndDerived/src/Exception1.java
@@ -0,0 +1,2 @@
+public class Exception1 extends Exception {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/throwsListDiffersInBaseAndDerived/src/Exception2.java b/java/java-tests/testData/compileServer/incremental/membersChange/throwsListDiffersInBaseAndDerived/src/Exception2.java
new file mode 100644
index 0000000..378aebb
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/throwsListDiffersInBaseAndDerived/src/Exception2.java
@@ -0,0 +1,2 @@
+public class Exception2 extends Exception {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/membersChange/throwsListDiffersInBaseAndDerived/src/Server.java b/java/java-tests/testData/compileServer/incremental/membersChange/throwsListDiffersInBaseAndDerived/src/Server.java
new file mode 100644
index 0000000..a430ab9
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/membersChange/throwsListDiffersInBaseAndDerived/src/Server.java
@@ -0,0 +1,5 @@
+public class Server extends BaseServer {
+  protected Integer method() throws Exception1 {
+    return new Integer(10);
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/decConstructorAccess.log b/java/java-tests/testData/compileServer/incremental/methodModifiers/decConstructorAccess.log
new file mode 100644
index 0000000..5d603bc
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/decConstructorAccess.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/DecConstructorAccess/impl/Server.class
+End of files
+Compiling files:
+src/impl/Server.java
+End of files
+Cleaning output files:
+out/production/DecConstructorAccess/Client.class
+End of files
+Compiling files:
+src/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/decConstructorAccess/data.xml b/java/java-tests/testData/compileServer/incremental/methodModifiers/decConstructorAccess/data.xml
new file mode 100644
index 0000000..c7fd5d4
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/decConstructorAccess/data.xml
@@ -0,0 +1,10 @@
+<testData>
+  <deleted_by_make>
+    <file path="classes/impl/Server.class" />
+    <file path="classes/Client.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/Client.java" />
+  </recompile>
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/decConstructorAccess/src/Client.java b/java/java-tests/testData/compileServer/incremental/methodModifiers/decConstructorAccess/src/Client.java
new file mode 100644
index 0000000..c73d4a3
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/decConstructorAccess/src/Client.java
@@ -0,0 +1,6 @@
+import impl.*;
+class Client {
+  Server factory() {
+    return new Server();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/decConstructorAccess/src/impl/Server.java b/java/java-tests/testData/compileServer/incremental/methodModifiers/decConstructorAccess/src/impl/Server.java
new file mode 100644
index 0000000..577d62f
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/decConstructorAccess/src/impl/Server.java
@@ -0,0 +1,3 @@
+package impl;
+public class Server {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/decConstructorAccess/src/impl/Server.java.new b/java/java-tests/testData/compileServer/incremental/methodModifiers/decConstructorAccess/src/impl/Server.java.new
new file mode 100644
index 0000000..551b228
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/decConstructorAccess/src/impl/Server.java.new
@@ -0,0 +1,5 @@
+package impl;
+public class Server {
+  Server() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/incAccess.log b/java/java-tests/testData/compileServer/incremental/methodModifiers/incAccess.log
new file mode 100644
index 0000000..3d47c11
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/incAccess.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/IncAccess/Base.class
+End of files
+Compiling files:
+src/Base.java
+End of files
+Cleaning output files:
+out/production/IncAccess/Derived.class
+End of files
+Compiling files:
+src/Derived.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/incAccess/Base.java.new b/java/java-tests/testData/compileServer/incremental/methodModifiers/incAccess/Base.java.new
new file mode 100644
index 0000000..66c61de
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/incAccess/Base.java.new
@@ -0,0 +1,3 @@
+class Base {
+  public void foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/incAccess/data.xml b/java/java-tests/testData/compileServer/incremental/methodModifiers/incAccess/data.xml
new file mode 100644
index 0000000..251979b6
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/incAccess/data.xml
@@ -0,0 +1,10 @@
+<testData>
+  <deleted_by_make>
+    <file path="classes/Base.class" />
+    <file path="classes/Derived.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/Derived.java" />
+  </recompile>
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/incAccess/src/Base.java b/java/java-tests/testData/compileServer/incremental/methodModifiers/incAccess/src/Base.java
new file mode 100644
index 0000000..0bf6c77
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/incAccess/src/Base.java
@@ -0,0 +1,3 @@
+class Base {
+  protected void foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/incAccess/src/Derived.java b/java/java-tests/testData/compileServer/incremental/methodModifiers/incAccess/src/Derived.java
new file mode 100644
index 0000000..a706ee2
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/incAccess/src/Derived.java
@@ -0,0 +1,3 @@
+class Derived extends Base {
+  protected void foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/setAbstract.log b/java/java-tests/testData/compileServer/incremental/methodModifiers/setAbstract.log
new file mode 100644
index 0000000..83202fc
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/setAbstract.log
@@ -0,0 +1,15 @@
+Cleaning output files:
+out/production/SetAbstract/Super.class
+End of files
+Compiling files:
+src/Super.java
+End of files
+Cleaning output files:
+out/production/SetAbstract/AnonDerived$1.class
+out/production/SetAbstract/AnonDerived.class
+out/production/SetAbstract/Derived.class
+End of files
+Compiling files:
+src/AnonDerived.java
+src/Derived.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/setAbstract/Super.java.new b/java/java-tests/testData/compileServer/incremental/methodModifiers/setAbstract/Super.java.new
new file mode 100644
index 0000000..719ae1a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/setAbstract/Super.java.new
@@ -0,0 +1,3 @@
+abstract class Super {
+  abstract void out();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/setAbstract/data.xml b/java/java-tests/testData/compileServer/incremental/methodModifiers/setAbstract/data.xml
new file mode 100644
index 0000000..bba1d0f
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/setAbstract/data.xml
@@ -0,0 +1,13 @@
+<testData>
+  <deleted_by_make>
+    <file path="classes/Super.class" />
+    <file path="classes/Derived.class" />
+    <file path="classes/AnonDerived.class" />
+    <file path="classes/AnonDerived$1.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/Derived.java" />
+    <file path="source/AnonDerived.java" />
+  </recompile>
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/setAbstract/src/AnonDerived.java b/java/java-tests/testData/compileServer/incremental/methodModifiers/setAbstract/src/AnonDerived.java
new file mode 100644
index 0000000..12a80ae
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/setAbstract/src/AnonDerived.java
@@ -0,0 +1,5 @@
+class AnonDerived {
+  public static void main(String[] args) {
+    new Super(){};
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/setAbstract/src/Derived.java b/java/java-tests/testData/compileServer/incremental/methodModifiers/setAbstract/src/Derived.java
new file mode 100644
index 0000000..c30f1f9
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/setAbstract/src/Derived.java
@@ -0,0 +1,4 @@
+class Derived extends Super{
+  public static void main(String[] args) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/setAbstract/src/Super.java b/java/java-tests/testData/compileServer/incremental/methodModifiers/setAbstract/src/Super.java
new file mode 100644
index 0000000..c5bcb9d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/setAbstract/src/Super.java
@@ -0,0 +1,5 @@
+abstract class Super {
+  void out() {
+    System.out.println("out");
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/setFinal.log b/java/java-tests/testData/compileServer/incremental/methodModifiers/setFinal.log
new file mode 100644
index 0000000..b32f008
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/setFinal.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/SetFinal/Super.class
+End of files
+Compiling files:
+src/Super.java
+End of files
+Cleaning output files:
+out/production/SetFinal/Derived.class
+End of files
+Compiling files:
+src/Derived.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/setFinal/Super.java.new b/java/java-tests/testData/compileServer/incremental/methodModifiers/setFinal/Super.java.new
new file mode 100644
index 0000000..48efb73
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/setFinal/Super.java.new
@@ -0,0 +1,4 @@
+class Super {
+  final void out() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/setFinal/data.xml b/java/java-tests/testData/compileServer/incremental/methodModifiers/setFinal/data.xml
new file mode 100644
index 0000000..0a5d9e5
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/setFinal/data.xml
@@ -0,0 +1,10 @@
+<testData>
+  <deleted_by_make>
+    <file path="classes/Super.class" />
+    <file path="classes/Derived.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/Derived.java" />
+  </recompile>
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/setFinal/src/Client.java b/java/java-tests/testData/compileServer/incremental/methodModifiers/setFinal/src/Client.java
new file mode 100644
index 0000000..ef2acec
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/setFinal/src/Client.java
@@ -0,0 +1,5 @@
+class Client{
+  {
+    new Super().out();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/setFinal/src/Derived.java b/java/java-tests/testData/compileServer/incremental/methodModifiers/setFinal/src/Derived.java
new file mode 100644
index 0000000..8703c5d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/setFinal/src/Derived.java
@@ -0,0 +1,5 @@
+class Derived extends Super{
+  void out() {
+   // this method overrides Super.out()
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/setFinal/src/Super.java b/java/java-tests/testData/compileServer/incremental/methodModifiers/setFinal/src/Super.java
new file mode 100644
index 0000000..a4faeb9
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/setFinal/src/Super.java
@@ -0,0 +1,4 @@
+class Super {
+  void out() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/setPrivate.log b/java/java-tests/testData/compileServer/incremental/methodModifiers/setPrivate.log
new file mode 100644
index 0000000..ed67bc7
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/setPrivate.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/SetPrivate/A.class
+End of files
+Compiling files:
+src/A.java
+End of files
+Cleaning output files:
+out/production/SetPrivate/B.class
+End of files
+Compiling files:
+src/B.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/setPrivate/A.java.new b/java/java-tests/testData/compileServer/incremental/methodModifiers/setPrivate/A.java.new
new file mode 100644
index 0000000..364fa05
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/setPrivate/A.java.new
@@ -0,0 +1,5 @@
+class A {
+   private void f() {
+
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/setPrivate/src/A.java b/java/java-tests/testData/compileServer/incremental/methodModifiers/setPrivate/src/A.java
new file mode 100644
index 0000000..973f25e
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/setPrivate/src/A.java
@@ -0,0 +1,5 @@
+class A {
+    void f (){
+
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/setPrivate/src/B.java b/java/java-tests/testData/compileServer/incremental/methodModifiers/setPrivate/src/B.java
new file mode 100644
index 0000000..ff5e738
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/setPrivate/src/B.java
@@ -0,0 +1,5 @@
+class B {
+   void f (A a) {
+       a.f();
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/setProtected.log b/java/java-tests/testData/compileServer/incremental/methodModifiers/setProtected.log
new file mode 100644
index 0000000..c65da93
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/setProtected.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/SetProtected/A.class
+End of files
+Compiling files:
+src/A.java
+End of files
+Cleaning output files:
+out/production/SetProtected/B.class
+End of files
+Compiling files:
+src/B.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/setProtected/A.java.new b/java/java-tests/testData/compileServer/incremental/methodModifiers/setProtected/A.java.new
new file mode 100644
index 0000000..3bbcc5e
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/setProtected/A.java.new
@@ -0,0 +1,5 @@
+class A {
+   protected void f() {
+
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/setProtected/src/A.java b/java/java-tests/testData/compileServer/incremental/methodModifiers/setProtected/src/A.java
new file mode 100644
index 0000000..973f25e
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/setProtected/src/A.java
@@ -0,0 +1,5 @@
+class A {
+    void f (){
+
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/setProtected/src/B.java b/java/java-tests/testData/compileServer/incremental/methodModifiers/setProtected/src/B.java
new file mode 100644
index 0000000..ff5e738
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/setProtected/src/B.java
@@ -0,0 +1,5 @@
+class B {
+   void f (A a) {
+       a.f();
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/setProtected/src/C.java b/java/java-tests/testData/compileServer/incremental/methodModifiers/setProtected/src/C.java
new file mode 100644
index 0000000..6d0a66b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/setProtected/src/C.java
@@ -0,0 +1,5 @@
+class C extends A {
+    void g(){
+        f();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/setStatic.log b/java/java-tests/testData/compileServer/incremental/methodModifiers/setStatic.log
new file mode 100644
index 0000000..add37100
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/setStatic.log
@@ -0,0 +1,14 @@
+Cleaning output files:
+out/production/SetStatic/A.class
+End of files
+Compiling files:
+src/A.java
+End of files
+Cleaning output files:
+out/production/SetStatic/B.class
+out/production/SetStatic/C.class
+End of files
+Compiling files:
+src/B.java
+src/C.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/setStatic/A.java.new b/java/java-tests/testData/compileServer/incremental/methodModifiers/setStatic/A.java.new
new file mode 100644
index 0000000..31b8ef3
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/setStatic/A.java.new
@@ -0,0 +1,5 @@
+class A {
+    static void f(){
+
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/setStatic/src/A.java b/java/java-tests/testData/compileServer/incremental/methodModifiers/setStatic/src/A.java
new file mode 100644
index 0000000..4e4393b
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/setStatic/src/A.java
@@ -0,0 +1,5 @@
+class A {
+    void f(){
+
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/setStatic/src/B.java b/java/java-tests/testData/compileServer/incremental/methodModifiers/setStatic/src/B.java
new file mode 100644
index 0000000..6fa5633
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/setStatic/src/B.java
@@ -0,0 +1,3 @@
+class B extends A {
+    void f (){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/setStatic/src/C.java b/java/java-tests/testData/compileServer/incremental/methodModifiers/setStatic/src/C.java
new file mode 100644
index 0000000..1efb8c2
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/setStatic/src/C.java
@@ -0,0 +1,6 @@
+class C{
+    void g (A a, B b){
+        a.f();
+        b.f();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/unsetFinal.log b/java/java-tests/testData/compileServer/incremental/methodModifiers/unsetFinal.log
new file mode 100644
index 0000000..4d2bb0f
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/unsetFinal.log
@@ -0,0 +1,6 @@
+Cleaning output files:
+out/production/UnsetFinal/Server.class
+End of files
+Compiling files:
+src/Server.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/unsetFinal/Server.java.new b/java/java-tests/testData/compileServer/incremental/methodModifiers/unsetFinal/Server.java.new
new file mode 100644
index 0000000..504a4cf
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/unsetFinal/Server.java.new
@@ -0,0 +1,4 @@
+class Server {
+  void foo() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/unsetFinal/data.xml b/java/java-tests/testData/compileServer/incremental/methodModifiers/unsetFinal/data.xml
new file mode 100644
index 0000000..411ebe7
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/unsetFinal/data.xml
@@ -0,0 +1,8 @@
+<testData>
+  <deleted_by_make>
+    <file path="classes/Server.class" />
+  </deleted_by_make>
+
+  <recompile>
+  </recompile>
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/unsetFinal/src/Client.java b/java/java-tests/testData/compileServer/incremental/methodModifiers/unsetFinal/src/Client.java
new file mode 100644
index 0000000..51a59e0
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/unsetFinal/src/Client.java
@@ -0,0 +1,5 @@
+class Client{
+  {
+    new Server().foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/unsetFinal/src/Server.java b/java/java-tests/testData/compileServer/incremental/methodModifiers/unsetFinal/src/Server.java
new file mode 100644
index 0000000..e466284
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/unsetFinal/src/Server.java
@@ -0,0 +1,4 @@
+class Server {
+  final void foo() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/unsetStatic.log b/java/java-tests/testData/compileServer/incremental/methodModifiers/unsetStatic.log
new file mode 100644
index 0000000..c60f4d1
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/unsetStatic.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/UnsetStatic/Base.class
+End of files
+Compiling files:
+src/Base.java
+End of files
+Cleaning output files:
+out/production/UnsetStatic/Client.class
+End of files
+Compiling files:
+src/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/unsetStatic/Base.java.new b/java/java-tests/testData/compileServer/incremental/methodModifiers/unsetStatic/Base.java.new
new file mode 100644
index 0000000..4667e26
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/unsetStatic/Base.java.new
@@ -0,0 +1,5 @@
+class Base {
+  char method() {
+    return 'a';
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/unsetStatic/data.xml b/java/java-tests/testData/compileServer/incremental/methodModifiers/unsetStatic/data.xml
new file mode 100644
index 0000000..dba3364
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/unsetStatic/data.xml
@@ -0,0 +1,10 @@
+<testData>
+  <deleted_by_make>
+    <file path="classes/Base.class" />
+    <file path="classes/Client.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/Client.java" />
+  </recompile>
+</testData>
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/unsetStatic/src/Base.java b/java/java-tests/testData/compileServer/incremental/methodModifiers/unsetStatic/src/Base.java
new file mode 100644
index 0000000..42a6e30
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/unsetStatic/src/Base.java
@@ -0,0 +1,5 @@
+class Base {
+  static char method() {
+    return 'a';
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodModifiers/unsetStatic/src/Client.java b/java/java-tests/testData/compileServer/incremental/methodModifiers/unsetStatic/src/Client.java
new file mode 100644
index 0000000..0bafc1d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodModifiers/unsetStatic/src/Client.java
@@ -0,0 +1,5 @@
+class Client {
+  public static void main(String[] args) {
+    System.out.println(Base.method());
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodProperties/addThrows.log b/java/java-tests/testData/compileServer/incremental/methodProperties/addThrows.log
new file mode 100644
index 0000000..da6e16a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodProperties/addThrows.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/AddThrows/packageA/Server.class
+End of files
+Compiling files:
+src/packageA/Server.java
+End of files
+Cleaning output files:
+out/production/AddThrows/packageA/Client.class
+End of files
+Compiling files:
+src/packageA/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/methodProperties/addThrows/data.xml b/java/java-tests/testData/compileServer/incremental/methodProperties/addThrows/data.xml
new file mode 100644
index 0000000..562b72d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodProperties/addThrows/data.xml
@@ -0,0 +1,15 @@
+<testData>
+
+  <delete>
+  </delete>
+
+  <deleted_by_make>
+    <file path="classes/packageA/Server.class" />
+    <file path="classes/packageA/Client.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/packageA/Client.java" />
+  </recompile>
+
+</testData>
diff --git a/java/java-tests/testData/compileServer/incremental/methodProperties/addThrows/src/packageA/Client.java b/java/java-tests/testData/compileServer/incremental/methodProperties/addThrows/src/packageA/Client.java
new file mode 100644
index 0000000..3ef542f
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodProperties/addThrows/src/packageA/Client.java
@@ -0,0 +1,12 @@
+/**
+ * created at Jan 22, 2002
+ * @author Jeka
+ */
+package packageA;
+
+public class Client {
+  public static void main(String[] args) {
+    Server server = new Server();
+    server.method();
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/methodProperties/addThrows/src/packageA/Server.java b/java/java-tests/testData/compileServer/incremental/methodProperties/addThrows/src/packageA/Server.java
new file mode 100644
index 0000000..810c87d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodProperties/addThrows/src/packageA/Server.java
@@ -0,0 +1,11 @@
+/**
+ * created at Jan 22, 2002
+ * @author Jeka
+ */
+package packageA;
+
+public class Server {
+  public void method() {
+    System.out.println("Server.method");
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/methodProperties/addThrows/src/packageA/Server.java.new b/java/java-tests/testData/compileServer/incremental/methodProperties/addThrows/src/packageA/Server.java.new
new file mode 100644
index 0000000..ef3638a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodProperties/addThrows/src/packageA/Server.java.new
@@ -0,0 +1,11 @@
+/**
+ * created at Jan 22, 2002
+ * @author Jeka
+ */
+package packageA;
+
+public class Server {
+  public void method() throws Exception {
+    System.out.println("Server.method");
+  }
+}
diff --git a/java/java-tests/testData/compileServer/incremental/methodProperties/changeReturnType.log b/java/java-tests/testData/compileServer/incremental/methodProperties/changeReturnType.log
new file mode 100644
index 0000000..aa622da
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodProperties/changeReturnType.log
@@ -0,0 +1,14 @@
+Cleaning output files:
+out/production/ChangeReturnType/Base.class
+End of files
+Compiling files:
+src/Base.java
+End of files
+Cleaning output files:
+out/production/ChangeReturnType/Client.class
+out/production/ChangeReturnType/Derived.class
+End of files
+Compiling files:
+src/Client.java
+src/Derived.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/methodProperties/changeReturnType/Base.java.new b/java/java-tests/testData/compileServer/incremental/methodProperties/changeReturnType/Base.java.new
new file mode 100644
index 0000000..99d1fb4
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodProperties/changeReturnType/Base.java.new
@@ -0,0 +1,5 @@
+class Base {
+  public String[] foo() {
+    return new String[]{"Base.foo()"};
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodProperties/changeReturnType/data.xml b/java/java-tests/testData/compileServer/incremental/methodProperties/changeReturnType/data.xml
new file mode 100644
index 0000000..d3045a3
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodProperties/changeReturnType/data.xml
@@ -0,0 +1,14 @@
+<testData>
+
+  <deleted_by_make>
+    <file path="classes/Base.class" />
+    <file path="classes/Client.class" />
+    <file path="classes/Derived.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/Client.java" />
+    <file path="source/Derived.java" />
+  </recompile>
+
+</testData>
diff --git a/java/java-tests/testData/compileServer/incremental/methodProperties/changeReturnType/src/Base.java b/java/java-tests/testData/compileServer/incremental/methodProperties/changeReturnType/src/Base.java
new file mode 100644
index 0000000..d3e786a
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodProperties/changeReturnType/src/Base.java
@@ -0,0 +1,5 @@
+class Base {
+  public String foo() {
+    return "Base.foo()";
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodProperties/changeReturnType/src/Client.java b/java/java-tests/testData/compileServer/incremental/methodProperties/changeReturnType/src/Client.java
new file mode 100644
index 0000000..9eeefe7
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodProperties/changeReturnType/src/Client.java
@@ -0,0 +1,5 @@
+class Client {
+  public void foo() {
+    String s = new Base().foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodProperties/changeReturnType/src/Derived.java b/java/java-tests/testData/compileServer/incremental/methodProperties/changeReturnType/src/Derived.java
new file mode 100644
index 0000000..53f9190
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodProperties/changeReturnType/src/Derived.java
@@ -0,0 +1,5 @@
+class Derived extends Base {
+  public String foo() {
+    return "Derived.foo()";
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodProperties/changeReturnType1.log b/java/java-tests/testData/compileServer/incremental/methodProperties/changeReturnType1.log
new file mode 100644
index 0000000..2e68acf
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodProperties/changeReturnType1.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/ChangeReturnType1/Base.class
+End of files
+Compiling files:
+src/Base.java
+End of files
+Cleaning output files:
+out/production/ChangeReturnType1/Client.class
+End of files
+Compiling files:
+src/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/methodProperties/changeReturnType1/Base.java.new b/java/java-tests/testData/compileServer/incremental/methodProperties/changeReturnType1/Base.java.new
new file mode 100644
index 0000000..307b4ab
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodProperties/changeReturnType1/Base.java.new
@@ -0,0 +1,5 @@
+class Base {
+  public static String[] foo() {
+    return new String[]{"Base.foo()"};
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodProperties/changeReturnType1/data.xml b/java/java-tests/testData/compileServer/incremental/methodProperties/changeReturnType1/data.xml
new file mode 100644
index 0000000..a72a1aa
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodProperties/changeReturnType1/data.xml
@@ -0,0 +1,12 @@
+<testData>
+
+  <deleted_by_make>
+    <file path="classes/Base.class" />
+    <file path="classes/Client.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/Client.java" />
+  </recompile>
+
+</testData>
diff --git a/java/java-tests/testData/compileServer/incremental/methodProperties/changeReturnType1/src/Base.java b/java/java-tests/testData/compileServer/incremental/methodProperties/changeReturnType1/src/Base.java
new file mode 100644
index 0000000..6d4bee8
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodProperties/changeReturnType1/src/Base.java
@@ -0,0 +1,5 @@
+class Base {
+  public static String foo() {
+    return "Base.foo()";
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodProperties/changeReturnType1/src/Client.java b/java/java-tests/testData/compileServer/incremental/methodProperties/changeReturnType1/src/Client.java
new file mode 100644
index 0000000..dba6394
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodProperties/changeReturnType1/src/Client.java
@@ -0,0 +1,5 @@
+class Client {
+  public void foo() {
+    String s = Base.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodProperties/changeSignature.log b/java/java-tests/testData/compileServer/incremental/methodProperties/changeSignature.log
new file mode 100644
index 0000000..2f45957
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodProperties/changeSignature.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/ChangeSignature/Server.class
+End of files
+Compiling files:
+src/Server.java
+End of files
+Cleaning output files:
+out/production/ChangeSignature/Client.class
+End of files
+Compiling files:
+src/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/methodProperties/changeSignature/Server.java.new b/java/java-tests/testData/compileServer/incremental/methodProperties/changeSignature/Server.java.new
new file mode 100644
index 0000000..24451e4
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodProperties/changeSignature/Server.java.new
@@ -0,0 +1,4 @@
+public class Server {
+  public Server(long b) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodProperties/changeSignature/data.xml b/java/java-tests/testData/compileServer/incremental/methodProperties/changeSignature/data.xml
new file mode 100644
index 0000000..5209e09
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodProperties/changeSignature/data.xml
@@ -0,0 +1,12 @@
+<testData>
+
+  <deleted_by_make>
+    <file path="classes/Server.class" />
+    <file path="classes/Client.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/Client.java" />
+  </recompile>
+
+</testData>
diff --git a/java/java-tests/testData/compileServer/incremental/methodProperties/changeSignature/src/Client.java b/java/java-tests/testData/compileServer/incremental/methodProperties/changeSignature/src/Client.java
new file mode 100644
index 0000000..1bc9dba
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodProperties/changeSignature/src/Client.java
@@ -0,0 +1,5 @@
+class Client {
+  public void foo() {
+    new Server(10);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodProperties/changeSignature/src/Server.java b/java/java-tests/testData/compileServer/incremental/methodProperties/changeSignature/src/Server.java
new file mode 100644
index 0000000..0a7ff38
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodProperties/changeSignature/src/Server.java
@@ -0,0 +1,4 @@
+class Server {
+  public Server(int a) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodProperties/changeSignature1.log b/java/java-tests/testData/compileServer/incremental/methodProperties/changeSignature1.log
new file mode 100644
index 0000000..701b549
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodProperties/changeSignature1.log
@@ -0,0 +1,12 @@
+Cleaning output files:
+out/production/ChangeSignature1/Server.class
+End of files
+Compiling files:
+src/Server.java
+End of files
+Cleaning output files:
+out/production/ChangeSignature1/Client.class
+End of files
+Compiling files:
+src/Client.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/methodProperties/changeSignature1/Server.java.new b/java/java-tests/testData/compileServer/incremental/methodProperties/changeSignature1/Server.java.new
new file mode 100644
index 0000000..c8189c4
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodProperties/changeSignature1/Server.java.new
@@ -0,0 +1,4 @@
+public class Server {
+  public Server(IfaceImpl i) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodProperties/changeSignature1/data.xml b/java/java-tests/testData/compileServer/incremental/methodProperties/changeSignature1/data.xml
new file mode 100644
index 0000000..5209e09
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodProperties/changeSignature1/data.xml
@@ -0,0 +1,12 @@
+<testData>
+
+  <deleted_by_make>
+    <file path="classes/Server.class" />
+    <file path="classes/Client.class" />
+  </deleted_by_make>
+
+  <recompile>
+    <file path="source/Client.java" />
+  </recompile>
+
+</testData>
diff --git a/java/java-tests/testData/compileServer/incremental/methodProperties/changeSignature1/src/Client.java b/java/java-tests/testData/compileServer/incremental/methodProperties/changeSignature1/src/Client.java
new file mode 100644
index 0000000..8fb1e5e
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodProperties/changeSignature1/src/Client.java
@@ -0,0 +1,5 @@
+class Client {
+  public void foo() {
+    new Server(IfaceImpl.create());
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodProperties/changeSignature1/src/Iface.java b/java/java-tests/testData/compileServer/incremental/methodProperties/changeSignature1/src/Iface.java
new file mode 100644
index 0000000..f50013c
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodProperties/changeSignature1/src/Iface.java
@@ -0,0 +1,3 @@
+public interface Iface {
+  void f();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodProperties/changeSignature1/src/IfaceImpl.java b/java/java-tests/testData/compileServer/incremental/methodProperties/changeSignature1/src/IfaceImpl.java
new file mode 100644
index 0000000..015a0e1
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodProperties/changeSignature1/src/IfaceImpl.java
@@ -0,0 +1,8 @@
+public class IfaceImpl implements Iface {
+
+  public static IfaceImpl create() {
+    return new IfaceImpl();
+  }
+
+  public void f() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodProperties/changeSignature1/src/Main.java b/java/java-tests/testData/compileServer/incremental/methodProperties/changeSignature1/src/Main.java
new file mode 100644
index 0000000..76f15f2
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodProperties/changeSignature1/src/Main.java
@@ -0,0 +1,5 @@
+public class Main {
+  public static void main(String[] args) {
+    new Client().foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/methodProperties/changeSignature1/src/Server.java b/java/java-tests/testData/compileServer/incremental/methodProperties/changeSignature1/src/Server.java
new file mode 100644
index 0000000..158d772
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/methodProperties/changeSignature1/src/Server.java
@@ -0,0 +1,4 @@
+class Server {
+  public Server(Iface i) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/packageInfo/packageInfoNoRecompile.log b/java/java-tests/testData/compileServer/incremental/packageInfo/packageInfoNoRecompile.log
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/packageInfo/packageInfoNoRecompile.log
diff --git a/java/java-tests/testData/compileServer/incremental/packageInfo/packageInfoNoRecompile/src/p1/package-info.java b/java/java-tests/testData/compileServer/incremental/packageInfo/packageInfoNoRecompile/src/p1/package-info.java
new file mode 100644
index 0000000..2c312f6
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/packageInfo/packageInfoNoRecompile/src/p1/package-info.java
@@ -0,0 +1 @@
+package p1;
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/packageInfo/packageInfoNoRecompile2.log b/java/java-tests/testData/compileServer/incremental/packageInfo/packageInfoNoRecompile2.log
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/packageInfo/packageInfoNoRecompile2.log
diff --git a/java/java-tests/testData/compileServer/incremental/packageInfo/packageInfoNoRecompile2/src/p1/annot.java b/java/java-tests/testData/compileServer/incremental/packageInfo/packageInfoNoRecompile2/src/p1/annot.java
new file mode 100644
index 0000000..774d4013
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/packageInfo/packageInfoNoRecompile2/src/p1/annot.java
@@ -0,0 +1,4 @@
+package p1;
+
+public @interface annot {
+}
diff --git a/java/java-tests/testData/compileServer/incremental/packageInfo/packageInfoNoRecompile2/src/p1/package-info.java b/java/java-tests/testData/compileServer/incremental/packageInfo/packageInfoNoRecompile2/src/p1/package-info.java
new file mode 100644
index 0000000..a6d1725
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/packageInfo/packageInfoNoRecompile2/src/p1/package-info.java
@@ -0,0 +1 @@
+@annot package p1;
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/packageInfo/packageInfoRecompileOnConstantChange.log b/java/java-tests/testData/compileServer/incremental/packageInfo/packageInfoRecompileOnConstantChange.log
new file mode 100644
index 0000000..ccef33c
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/packageInfo/packageInfoRecompileOnConstantChange.log
@@ -0,0 +1,16 @@
+Cleaning output files:
+out/production/PackageInfoRecompileOnConstantChange/bug/Namespace.class
+End of files
+Compiling files:
+src/bug/Namespace.java
+End of files
+Cleaning output files:
+out/production/PackageInfoRecompileOnConstantChange/bug/Ann.class
+out/production/PackageInfoRecompileOnConstantChange/bug/Namespace.class
+out/production/PackageInfoRecompileOnConstantChange/bug/package-info.class
+End of files
+Compiling files:
+src/bug/Ann.java
+src/bug/Namespace.java
+src/bug/package-info.java
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/packageInfo/packageInfoRecompileOnConstantChange/src/bug/Ann.java b/java/java-tests/testData/compileServer/incremental/packageInfo/packageInfoRecompileOnConstantChange/src/bug/Ann.java
new file mode 100644
index 0000000..be4dd2d
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/packageInfo/packageInfoRecompileOnConstantChange/src/bug/Ann.java
@@ -0,0 +1,12 @@
+package bug;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+@Retention(RUNTIME) @Target({PACKAGE})
+public @interface Ann {
+    String namespace() default "";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/packageInfo/packageInfoRecompileOnConstantChange/src/bug/Namespace.java b/java/java-tests/testData/compileServer/incremental/packageInfo/packageInfoRecompileOnConstantChange/src/bug/Namespace.java
new file mode 100644
index 0000000..17e3959
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/packageInfo/packageInfoRecompileOnConstantChange/src/bug/Namespace.java
@@ -0,0 +1,5 @@
+package bug;
+
+public class Namespace {
+    public static final String URI = "uri";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/packageInfo/packageInfoRecompileOnConstantChange/src/bug/Namespace.java.new b/java/java-tests/testData/compileServer/incremental/packageInfo/packageInfoRecompileOnConstantChange/src/bug/Namespace.java.new
new file mode 100644
index 0000000..914e205
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/packageInfo/packageInfoRecompileOnConstantChange/src/bug/Namespace.java.new
@@ -0,0 +1,5 @@
+package bug;
+
+public class Namespace {
+    public static final String URI = "uri2";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compileServer/incremental/packageInfo/packageInfoRecompileOnConstantChange/src/bug/package-info.java b/java/java-tests/testData/compileServer/incremental/packageInfo/packageInfoRecompileOnConstantChange/src/bug/package-info.java
new file mode 100644
index 0000000..a8b19ef
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/packageInfo/packageInfoRecompileOnConstantChange/src/bug/package-info.java
@@ -0,0 +1,2 @@
[email protected](namespace = Namespace.URI)
+package bug;
diff --git a/java/java-tests/testData/compileServer/incremental/uiDesigner/simple/build.log b/java/java-tests/testData/compileServer/incremental/uiDesigner/simple/build.log
new file mode 100644
index 0000000..7f83624
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/uiDesigner/simple/build.log
@@ -0,0 +1,6 @@
+Compiling files:
+src/xxx/MyForm.java
+End of files
+Compiling forms:
+src/xxx/MyForm.form
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/uiDesigner/simple/src/xxx/MyForm.form b/java/java-tests/testData/compileServer/incremental/uiDesigner/simple/src/xxx/MyForm.form
new file mode 100644
index 0000000..c04d946
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/uiDesigner/simple/src/xxx/MyForm.form
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="xxx.MyForm">
+  <grid id="27dc6" binding="myRootPanel" layout-manager="GridLayoutManager" row-count="1" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
+    <margin top="0" left="0" bottom="0" right="0"/>
+    <constraints>
+      <xy x="20" y="20" width="500" height="400"/>
+    </constraints>
+    <properties/>
+    <border type="none"/>
+    <children/>
+  </grid>
+</form>
diff --git a/java/java-tests/testData/compileServer/incremental/uiDesigner/simple/src/xxx/MyForm.form.new b/java/java-tests/testData/compileServer/incremental/uiDesigner/simple/src/xxx/MyForm.form.new
new file mode 100644
index 0000000..1286aa7
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/uiDesigner/simple/src/xxx/MyForm.form.new
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="xxx.MyForm">
+  <grid id="27dc6" binding="myRootPanel" layout-manager="GridLayoutManager" row-count="1" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
+    <margin top="0" left="0" bottom="0" right="0"/>
+    <constraints>
+      <xy x="20" y="20" width="500" height="400"/>
+    </constraints>
+    <properties>
+      <enabled value="false"/>
+    </properties>
+    <border type="none"/>
+    <children/>
+  </grid>
+</form>
diff --git a/java/java-tests/testData/compileServer/incremental/uiDesigner/simple/src/xxx/MyForm.java b/java/java-tests/testData/compileServer/incremental/uiDesigner/simple/src/xxx/MyForm.java
new file mode 100644
index 0000000..9b73014
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/uiDesigner/simple/src/xxx/MyForm.java
@@ -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.
+ */
+package xxx;
+
+import javax.swing.*;
+
+public class MyForm {
+  private JPanel myRootPanel;
+
+  public JPanel getMyRootPanel() {
+    return myRootPanel;
+  }
+}
diff --git a/java/java-tests/testData/compiler/notNullVerification/ConstructorParam.java b/java/java-tests/testData/compiler/notNullVerification/ConstructorParam.java
new file mode 100644
index 0000000..d99acbd
--- /dev/null
+++ b/java/java-tests/testData/compiler/notNullVerification/ConstructorParam.java
@@ -0,0 +1,6 @@
+import org.jetbrains.annotations.NotNull;
+
+public class ConstructorParam {
+  public ConstructorParam(@NotNull Object o) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compiler/notNullVerification/EnumConstructor.java b/java/java-tests/testData/compiler/notNullVerification/EnumConstructor.java
new file mode 100644
index 0000000..0c78423
--- /dev/null
+++ b/java/java-tests/testData/compiler/notNullVerification/EnumConstructor.java
@@ -0,0 +1,11 @@
+import org.jetbrains.annotations.NotNull;
+
+public enum EnumConstructor {
+    Value("label");
+
+    private final String label;
+
+    EnumConstructor(@NotNull String label) {
+        this.label = label;
+    }
+}
diff --git a/java/java-tests/testData/compiler/notNullVerification/EnumConstructorSecondParam.java b/java/java-tests/testData/compiler/notNullVerification/EnumConstructorSecondParam.java
new file mode 100644
index 0000000..2081b5f
--- /dev/null
+++ b/java/java-tests/testData/compiler/notNullVerification/EnumConstructorSecondParam.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright 2000-2010 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.
+ */
+import org.jetbrains.annotations.NotNull;
+
+public enum EnumConstructorSecondParam {
+    Value("1", "2");
+
+    EnumConstructorSecondParam(String s1, @NotNull String s2) {
+    }
+}
diff --git a/java/java-tests/testData/compiler/notNullVerification/MultipleReturns.java b/java/java-tests/testData/compiler/notNullVerification/MultipleReturns.java
new file mode 100644
index 0000000..61446a6
--- /dev/null
+++ b/java/java-tests/testData/compiler/notNullVerification/MultipleReturns.java
@@ -0,0 +1,9 @@
+import org.jetbrains.annotations.NotNull;
+
+public class MultipleReturns {
+  @NotNull public Object test(int i) {
+    if (i == 0) return null;
+    if (i == 1) return null;
+    return null;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compiler/notNullVerification/NonStaticInnerClass.java b/java/java-tests/testData/compiler/notNullVerification/NonStaticInnerClass.java
new file mode 100644
index 0000000..c3613fa
--- /dev/null
+++ b/java/java-tests/testData/compiler/notNullVerification/NonStaticInnerClass.java
@@ -0,0 +1,12 @@
+import org.jetbrains.annotations.NotNull;
+
+public class NonStaticInnerClass {
+  public NonStaticInnerClass() {
+    new Inner("");
+  }
+
+  public class Inner {
+    public Inner(@NotNull String s) {
+    }
+  }
+}
diff --git a/java/java-tests/testData/compiler/notNullVerification/SimpleParam.java b/java/java-tests/testData/compiler/notNullVerification/SimpleParam.java
new file mode 100644
index 0000000..b21f96e
--- /dev/null
+++ b/java/java-tests/testData/compiler/notNullVerification/SimpleParam.java
@@ -0,0 +1,6 @@
+import org.jetbrains.annotations.NotNull;
+
+public class SimpleParam {
+  public void test(@NotNull Object o) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compiler/notNullVerification/SimpleReturn.java b/java/java-tests/testData/compiler/notNullVerification/SimpleReturn.java
new file mode 100644
index 0000000..1a85ad9
--- /dev/null
+++ b/java/java-tests/testData/compiler/notNullVerification/SimpleReturn.java
@@ -0,0 +1,7 @@
+import org.jetbrains.annotations.NotNull;
+
+public class SimpleReturn {
+  @NotNull public Object test() {
+    return null;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/compiler/notNullVerification/StaticInnerClass.java b/java/java-tests/testData/compiler/notNullVerification/StaticInnerClass.java
new file mode 100644
index 0000000..a081090
--- /dev/null
+++ b/java/java-tests/testData/compiler/notNullVerification/StaticInnerClass.java
@@ -0,0 +1,12 @@
+import org.jetbrains.annotations.NotNull;
+
+public class StaticInnerClass {
+  public StaticInnerClass() {
+    new Inner("");
+  }
+
+  public static class Inner {
+    public Inner(@NotNull String s) {
+    }
+  }
+}
diff --git a/java/java-tests/testData/compiler/notNullVerification/annotations.jar b/java/java-tests/testData/compiler/notNullVerification/annotations.jar
new file mode 100644
index 0000000..45860d8
--- /dev/null
+++ b/java/java-tests/testData/compiler/notNullVerification/annotations.jar
Binary files differ
diff --git a/java/java-tests/testData/core/loadingTest/.idea/.name b/java/java-tests/testData/core/loadingTest/.idea/.name
new file mode 100644
index 0000000..eecda08
--- /dev/null
+++ b/java/java-tests/testData/core/loadingTest/.idea/.name
@@ -0,0 +1 @@
+loadingTest
\ No newline at end of file
diff --git a/java/java-tests/testData/core/loadingTest/.idea/compiler.xml b/java/java-tests/testData/core/loadingTest/.idea/compiler.xml
new file mode 100644
index 0000000..a1b41c5
--- /dev/null
+++ b/java/java-tests/testData/core/loadingTest/.idea/compiler.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="CompilerConfiguration">
+    <option name="DEFAULT_COMPILER" value="Javac" />
+    <resourceExtensions />
+    <wildcardResourcePatterns>
+      <entry name="?*.properties" />
+      <entry name="?*.xml" />
+      <entry name="?*.gif" />
+      <entry name="?*.png" />
+      <entry name="?*.jpeg" />
+      <entry name="?*.jpg" />
+      <entry name="?*.html" />
+      <entry name="?*.dtd" />
+      <entry name="?*.tld" />
+      <entry name="?*.ftl" />
+    </wildcardResourcePatterns>
+    <annotationProcessing enabled="false" useClasspath="true" />
+  </component>
+</project>
+
diff --git a/java/java-tests/testData/core/loadingTest/.idea/copyright/profiles_settings.xml b/java/java-tests/testData/core/loadingTest/.idea/copyright/profiles_settings.xml
new file mode 100644
index 0000000..3572571
--- /dev/null
+++ b/java/java-tests/testData/core/loadingTest/.idea/copyright/profiles_settings.xml
@@ -0,0 +1,5 @@
+<component name="CopyrightManager">
+  <settings default="">
+    <module2copyright />
+  </settings>
+</component>
\ No newline at end of file
diff --git a/java/java-tests/testData/core/loadingTest/.idea/encodings.xml b/java/java-tests/testData/core/loadingTest/.idea/encodings.xml
new file mode 100644
index 0000000..e206d70
--- /dev/null
+++ b/java/java-tests/testData/core/loadingTest/.idea/encodings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false" />
+</project>
+
diff --git a/java/java-tests/testData/core/loadingTest/.idea/libraries/annotations.xml b/java/java-tests/testData/core/loadingTest/.idea/libraries/annotations.xml
new file mode 100644
index 0000000..09db609
--- /dev/null
+++ b/java/java-tests/testData/core/loadingTest/.idea/libraries/annotations.xml
@@ -0,0 +1,9 @@
+<component name="libraryTable">
+  <library name="annotations">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/annotations.jar!/" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES />
+  </library>
+</component>
\ No newline at end of file
diff --git a/java/java-tests/testData/core/loadingTest/.idea/misc.xml b/java/java-tests/testData/core/loadingTest/.idea/misc.xml
new file mode 100644
index 0000000..f898e64
--- /dev/null
+++ b/java/java-tests/testData/core/loadingTest/.idea/misc.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="AntConfiguration">
+    <defaultAnt bundledAnt="true" />
+  </component>
+  <component name="ProjectKey">
+    <option name="state" value="project://f829118d-d467-4c31-b1e4-e464c512b84b" />
+  </component>
+  <component name="ProjectResources">
+    <default-html-doctype>http://www.w3.org/1999/xhtml</default-html-doctype>
+  </component>
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_3" assert-keyword="false" jdk-15="false" project-jdk-name="1.6" project-jdk-type="JavaSDK">
+    <output url="file://$PROJECT_DIR$/out" />
+  </component>
+  <component name="PyConsoleOptionsProvider">
+    <option name="myPythonConsoleState">
+      <PyConsoleSettings />
+    </option>
+    <option name="myDjangoConsoleState">
+      <PyConsoleSettings />
+    </option>
+  </component>
+  <component name="SvnConfiguration" maxAnnotateRevisions="500">
+    <option name="USER" value="" />
+    <option name="PASSWORD" value="" />
+    <option name="mySSHConnectionTimeout" value="30000" />
+    <option name="mySSHReadTimeout" value="30000" />
+    <option name="LAST_MERGED_REVISION" />
+    <option name="MERGE_DRY_RUN" value="false" />
+    <option name="MERGE_DIFF_USE_ANCESTRY" value="true" />
+    <option name="UPDATE_LOCK_ON_DEMAND" value="false" />
+    <option name="IGNORE_SPACES_IN_MERGE" value="false" />
+    <option name="DETECT_NESTED_COPIES" value="true" />
+    <option name="CHECK_NESTED_FOR_QUICK_MERGE" value="false" />
+    <option name="IGNORE_SPACES_IN_ANNOTATE" value="true" />
+    <option name="SHOW_MERGE_SOURCES_IN_ANNOTATE" value="true" />
+    <option name="FORCE_UPDATE" value="false" />
+    <myIsUseDefaultProxy>false</myIsUseDefaultProxy>
+  </component>
+  <component name="VssConfiguration">
+    <option name="CLIENT_PATH" value="" />
+    <option name="SRCSAFEINI_PATH" value="" />
+    <option name="USER_NAME" value="" />
+    <option name="PWD" value="" />
+    <CheckoutOptions>
+      <option name="COMMENT" value="" />
+      <option name="DO_NOT_GET_LATEST_VERSION" value="false" />
+      <option name="REPLACE_WRITABLE" value="false" />
+      <option name="RECURSIVE" value="false" />
+    </CheckoutOptions>
+    <CheckinOptions>
+      <option name="COMMENT" value="" />
+      <option name="KEEP_CHECKED_OUT" value="false" />
+      <option name="RECURSIVE" value="false" />
+    </CheckinOptions>
+    <AddOptions>
+      <option name="STORE_ONLY_LATEST_VERSION" value="false" />
+      <option name="CHECK_OUT_IMMEDIATELY" value="false" />
+    </AddOptions>
+    <UndocheckoutOptions>
+      <option name="MAKE_WRITABLE" value="false" />
+      <option name="REPLACE_LOCAL_COPY" value="2" />
+      <option name="RECURSIVE" value="false" />
+    </UndocheckoutOptions>
+    <GetOptions>
+      <option name="REPLACE_WRITABLE" value="0" />
+      <option name="MAKE_WRITABLE" value="false" />
+      <option name="ANSWER_NEGATIVELY" value="false" />
+      <option name="ANSWER_POSITIVELY" value="false" />
+      <option name="RECURSIVE" value="false" />
+      <option name="VERSION" />
+    </GetOptions>
+  </component>
+  <component name="antWorkspaceConfiguration">
+    <option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
+    <option name="FILTER_TARGETS" value="false" />
+  </component>
+</project>
+
diff --git a/java/java-tests/testData/core/loadingTest/.idea/modules.xml b/java/java-tests/testData/core/loadingTest/.idea/modules.xml
new file mode 100644
index 0000000..2cc724a
--- /dev/null
+++ b/java/java-tests/testData/core/loadingTest/.idea/modules.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/loadingTest.iml" filepath="$PROJECT_DIR$/loadingTest.iml" />
+    </modules>
+  </component>
+</project>
+
diff --git a/java/java-tests/testData/core/loadingTest/.idea/scopes/scope_settings.xml b/java/java-tests/testData/core/loadingTest/.idea/scopes/scope_settings.xml
new file mode 100644
index 0000000..922003b
--- /dev/null
+++ b/java/java-tests/testData/core/loadingTest/.idea/scopes/scope_settings.xml
@@ -0,0 +1,5 @@
+<component name="DependencyValidationManager">
+  <state>
+    <option name="SKIP_IMPORT_STATEMENTS" value="false" />
+  </state>
+</component>
\ No newline at end of file
diff --git a/java/java-tests/testData/core/loadingTest/.idea/uiDesigner.xml b/java/java-tests/testData/core/loadingTest/.idea/uiDesigner.xml
new file mode 100644
index 0000000..3b00020
--- /dev/null
+++ b/java/java-tests/testData/core/loadingTest/.idea/uiDesigner.xml
@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Palette2">
+    <group name="Swing">
+      <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
+      </item>
+      <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
+        <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
+        <initial-values>
+          <property name="text" value="Button" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="RadioButton" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="CheckBox" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="Label" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
+          <preferred-size width="-1" height="20" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
+      </item>
+    </group>
+  </component>
+</project>
+
diff --git a/java/java-tests/testData/core/loadingTest/.idea/vcs.xml b/java/java-tests/testData/core/loadingTest/.idea/vcs.xml
new file mode 100644
index 0000000..def6a6a
--- /dev/null
+++ b/java/java-tests/testData/core/loadingTest/.idea/vcs.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="" vcs="" />
+  </component>
+</project>
+
diff --git a/java/java-tests/testData/core/loadingTest/.idea/workspace.xml b/java/java-tests/testData/core/loadingTest/.idea/workspace.xml
new file mode 100644
index 0000000..29e67f6
--- /dev/null
+++ b/java/java-tests/testData/core/loadingTest/.idea/workspace.xml
@@ -0,0 +1,360 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ChangeListManager">
+    <list default="true" id="be23da49-7729-408e-9c3a-de15906f2aa3" name="Default" comment="" />
+    <ignored path="loadingTest.iws" />
+    <ignored path=".idea/workspace.xml" />
+    <option name="TRACKING_ENABLED" value="true" />
+    <option name="SHOW_DIALOG" value="false" />
+    <option name="HIGHLIGHT_CONFLICTS" value="true" />
+    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
+    <option name="LAST_RESOLUTION" value="IGNORE" />
+  </component>
+  <component name="ChangesViewManager" flattened_view="true" show_ignored="false" />
+  <component name="CreatePatchCommitExecutor">
+    <option name="PATCH_PATH" value="" />
+  </component>
+  <component name="DaemonCodeAnalyzer">
+    <disable_hints />
+  </component>
+  <component name="DebuggerManager">
+    <breakpoint_any>
+      <breakpoint>
+        <option name="NOTIFY_CAUGHT" value="true" />
+        <option name="NOTIFY_UNCAUGHT" value="true" />
+        <option name="ENABLED" value="false" />
+        <option name="LOG_ENABLED" value="false" />
+        <option name="LOG_EXPRESSION_ENABLED" value="false" />
+        <option name="SUSPEND_POLICY" value="SuspendAll" />
+        <option name="COUNT_FILTER_ENABLED" value="false" />
+        <option name="COUNT_FILTER" value="0" />
+        <option name="CONDITION_ENABLED" value="false" />
+        <option name="CLASS_FILTERS_ENABLED" value="false" />
+        <option name="INSTANCE_FILTERS_ENABLED" value="false" />
+        <option name="CONDITION" value="" />
+        <option name="LOG_MESSAGE" value="" />
+      </breakpoint>
+      <breakpoint>
+        <option name="NOTIFY_CAUGHT" value="true" />
+        <option name="NOTIFY_UNCAUGHT" value="true" />
+        <option name="ENABLED" value="false" />
+        <option name="LOG_ENABLED" value="false" />
+        <option name="LOG_EXPRESSION_ENABLED" value="false" />
+        <option name="SUSPEND_POLICY" value="SuspendAll" />
+        <option name="COUNT_FILTER_ENABLED" value="false" />
+        <option name="COUNT_FILTER" value="0" />
+        <option name="CONDITION_ENABLED" value="false" />
+        <option name="CLASS_FILTERS_ENABLED" value="false" />
+        <option name="INSTANCE_FILTERS_ENABLED" value="false" />
+        <option name="CONDITION" value="" />
+        <option name="LOG_MESSAGE" value="" />
+      </breakpoint>
+    </breakpoint_any>
+    <breakpoint_rules />
+    <ui_properties />
+  </component>
+  <component name="FavoritesManager">
+    <favorites_list name="loadingTest" />
+  </component>
+  <component name="FileEditorManager">
+    <leaf>
+      <file leaf-file-name="loadingTest.iml" pinned="false" current="true" current-in-tab="true">
+        <entry file="file://$PROJECT_DIR$/loadingTest.iml">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="10" column="0" selection-start="368" selection-end="368" vertical-scroll-proportion="0.22727273">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+    </leaf>
+  </component>
+  <component name="FindManager">
+    <FindUsagesManager>
+      <setting name="OPEN_NEW_TAB" value="false" />
+    </FindUsagesManager>
+  </component>
+  <component name="Git.Settings">
+    <option name="LINE_SEPARATORS_CONVERSION" value="ASK" />
+  </component>
+  <component name="IdeDocumentHistory">
+    <option name="changedFiles">
+      <list>
+        <option value="$PROJECT_DIR$/loadingTest.iml" />
+      </list>
+    </option>
+  </component>
+  <component name="PhpWorkspaceProjectConfiguration" backward_compatibility_performed="true" />
+  <component name="ProjectFrameBounds">
+    <option name="x" value="197" />
+    <option name="y" value="133" />
+    <option name="width" value="1639" />
+    <option name="height" value="933" />
+  </component>
+  <component name="ProjectLevelVcsManager" settingsEditedManually="false">
+    <OptionsSetting value="true" id="Add" />
+    <OptionsSetting value="true" id="Remove" />
+    <OptionsSetting value="true" id="Checkout" />
+    <OptionsSetting value="true" id="Update" />
+    <OptionsSetting value="true" id="Status" />
+    <OptionsSetting value="true" id="Edit" />
+    <OptionsSetting value="true" id="Undo Check Out" />
+    <OptionsSetting value="true" id="Get Latest Version" />
+    <ConfirmationsSetting value="0" id="Add" />
+    <ConfirmationsSetting value="0" id="Remove" />
+  </component>
+  <component name="ProjectReloadState">
+    <option name="STATE" value="0" />
+  </component>
+  <component name="ProjectView">
+    <navigator currentView="ProjectPane" proportions="" version="1" splitterProportion="0.5">
+      <flattenPackages />
+      <showMembers />
+      <showModules />
+      <showLibraryContents />
+      <hideEmptyPackages />
+      <abbreviatePackageNames />
+      <autoscrollToSource />
+      <autoscrollFromSource />
+      <sortByType />
+    </navigator>
+    <panes>
+      <pane id="PackagesPane" />
+      <pane id="Scope" />
+      <pane id="ProjectPane">
+        <subPane>
+          <PATH>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="loadingTest" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+            </PATH_ELEMENT>
+          </PATH>
+          <PATH>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="loadingTest" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="loadingTest" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+          </PATH>
+        </subPane>
+      </pane>
+    </panes>
+  </component>
+  <component name="PropertiesComponent">
+    <property name="GoToFile.includeJavaFiles" value="false" />
+    <property name="project.structure.last.edited" value="Modules" />
+    <property name="project.structure.proportion" value="0.0" />
+    <property name="options.splitter.main.proportions" value="0.3" />
+    <property name="options.lastSelected" value="preferences.pluginManager" />
+    <property name="MemberChooser.sorted" value="false" />
+    <property name="last_opened_file_path" value="$PROJECT_DIR$" />
+    <property name="project.structure.side.proportion" value="0.2" />
+    <property name="MemberChooser.copyJavadoc" value="false" />
+    <property name="GoToClass.toSaveIncludeLibraries" value="false" />
+    <property name="WebServerToolWindowFactoryState" value="false" />
+    <property name="MemberChooser.showClasses" value="true" />
+    <property name="GoToClass.includeLibraries" value="false" />
+    <property name="options.searchVisible" value="true" />
+    <property name="options.splitter.details.proportions" value="0.2" />
+  </component>
+  <component name="RunManager">
+    <list size="0" />
+    <configuration name="&lt;template&gt;" type="WebApp" default="true" selected="false">
+      <Host>localhost</Host>
+      <Port>5050</Port>
+    </configuration>
+  </component>
+  <component name="ShelveChangesManager" show_recycled="false" />
+  <component name="TaskManager">
+    <task active="true" id="Default" summary="Default task">
+      <changelist id="be23da49-7729-408e-9c3a-de15906f2aa3" name="Default" comment="" />
+      <created>1337359306662</created>
+      <updated>1337359306662</updated>
+    </task>
+    <servers />
+  </component>
+  <component name="ToolWindowManager">
+    <frame x="197" y="133" width="1639" height="933" extended-state="0" />
+    <editor active="false" />
+    <layout>
+      <window_info id="Data Sources" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
+      <window_info id="JetGradle" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />
+      <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
+      <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
+      <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
+      <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="true" content_ui="tabs" />
+      <window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
+      <window_info id="Application Servers" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
+      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.24984147" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
+      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
+      <window_info id="JsTestDriver Server" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
+      <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
+      <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
+      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+      <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
+      <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
+    </layout>
+  </component>
+  <component name="VcsContentAnnotationSettings">
+    <option name="myLimit" value="2678400000" />
+  </component>
+  <component name="VcsManagerConfiguration">
+    <option name="OFFER_MOVE_TO_ANOTHER_CHANGELIST_ON_PARTIAL_COMMIT" value="true" />
+    <option name="CHECK_CODE_SMELLS_BEFORE_PROJECT_COMMIT" value="true" />
+    <option name="CHECK_NEW_TODO" value="true" />
+    <option name="myTodoPanelSettings">
+      <value>
+        <are-packages-shown value="false" />
+        <are-modules-shown value="false" />
+        <flatten-packages value="false" />
+        <is-autoscroll-to-source value="false" />
+      </value>
+    </option>
+    <option name="PERFORM_UPDATE_IN_BACKGROUND" value="true" />
+    <option name="PERFORM_COMMIT_IN_BACKGROUND" value="true" />
+    <option name="PERFORM_EDIT_IN_BACKGROUND" value="true" />
+    <option name="PERFORM_CHECKOUT_IN_BACKGROUND" value="true" />
+    <option name="PERFORM_ADD_REMOVE_IN_BACKGROUND" value="true" />
+    <option name="PERFORM_ROLLBACK_IN_BACKGROUND" value="false" />
+    <option name="CHECK_LOCALLY_CHANGED_CONFLICTS_IN_BACKGROUND" value="false" />
+    <option name="ENABLE_BACKGROUND_PROCESSES" value="false" />
+    <option name="CHANGED_ON_SERVER_INTERVAL" value="60" />
+    <option name="SHOW_ONLY_CHANGED_IN_SELECTION_DIFF" value="true" />
+    <option name="CHECK_COMMIT_MESSAGE_SPELLING" value="true" />
+    <option name="DEFAULT_PATCH_EXTENSION" value="patch" />
+    <option name="SHORT_DIFF_HORISONTALLY" value="true" />
+    <option name="SHORT_DIFF_EXTRA_LINES" value="2" />
+    <option name="SOFT_WRAPS_IN_SHORT_DIFF" value="true" />
+    <option name="INCLUDE_TEXT_INTO_PATCH" value="false" />
+    <option name="INCLUDE_TEXT_INTO_SHELF" value="false" />
+    <option name="CREATE_PATCH_EXPAND_DETAILS_DEFAULT" value="true" />
+    <option name="SHOW_FILE_HISTORY_DETAILS" value="true" />
+    <option name="SHOW_VCS_ERROR_NOTIFICATIONS" value="true" />
+    <option name="CHANGE_DETAILS_ON" value="false" />
+    <option name="FORCE_NON_EMPTY_COMMENT" value="false" />
+    <option name="CLEAR_INITIAL_COMMIT_MESSAGE" value="false" />
+    <option name="LAST_COMMIT_MESSAGE" />
+    <option name="MAKE_NEW_CHANGELIST_ACTIVE" value="false" />
+    <option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="false" />
+    <option name="CHECK_FILES_UP_TO_DATE_BEFORE_COMMIT" value="false" />
+    <option name="REFORMAT_BEFORE_PROJECT_COMMIT" value="false" />
+    <option name="REFORMAT_BEFORE_FILE_COMMIT" value="false" />
+    <option name="FILE_HISTORY_DIALOG_COMMENTS_SPLITTER_PROPORTION" value="0.8" />
+    <option name="FILE_HISTORY_DIALOG_SPLITTER_PROPORTION" value="0.5" />
+    <option name="ACTIVE_VCS_NAME" />
+    <option name="UPDATE_GROUP_BY_PACKAGES" value="false" />
+    <option name="UPDATE_GROUP_BY_CHANGELIST" value="false" />
+    <option name="SHOW_FILE_HISTORY_AS_TREE" value="false" />
+    <option name="FILE_HISTORY_SPLITTER_PROPORTION" value="0.6" />
+  </component>
+  <component name="XDebuggerManager">
+    <breakpoint-manager />
+  </component>
+  <component name="editorHistoryManager">
+    <entry file="file://$PROJECT_DIR$/loadingTest.iml">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="10" column="0" selection-start="368" selection-end="368" vertical-scroll-proportion="0.22727273">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+  </component>
+  <component name="masterDetails">
+    <states>
+      <state key="ArtifactsStructureConfigurable.UI">
+        <settings>
+          <artifact-editor />
+          <splitter-proportions>
+            <option name="proportions">
+              <list>
+                <option value="0.2" />
+              </list>
+            </option>
+          </splitter-proportions>
+        </settings>
+      </state>
+      <state key="FacetStructureConfigurable.UI">
+        <settings>
+          <last-edited>No facets are configured</last-edited>
+          <splitter-proportions>
+            <option name="proportions">
+              <list>
+                <option value="0.2" />
+              </list>
+            </option>
+          </splitter-proportions>
+        </settings>
+      </state>
+      <state key="GlobalLibrariesConfigurable.UI">
+        <settings>
+          <last-edited>acts-as-taggable-on (v2.0.6, ruby-1.8.7-p334) [gem]</last-edited>
+          <splitter-proportions>
+            <option name="proportions">
+              <list>
+                <option value="0.2" />
+              </list>
+            </option>
+          </splitter-proportions>
+        </settings>
+      </state>
+      <state key="JdkListConfigurable.UI">
+        <settings>
+          <last-edited>1.6</last-edited>
+          <splitter-proportions>
+            <option name="proportions">
+              <list>
+                <option value="0.2" />
+              </list>
+            </option>
+          </splitter-proportions>
+        </settings>
+      </state>
+      <state key="ModuleStructureConfigurable.UI">
+        <settings>
+          <last-edited>loadingTest</last-edited>
+          <splitter-proportions>
+            <option name="proportions">
+              <list>
+                <option value="0.2" />
+              </list>
+            </option>
+          </splitter-proportions>
+        </settings>
+      </state>
+      <state key="ProjectJDKs.UI">
+        <settings>
+          <last-edited>1.6</last-edited>
+          <splitter-proportions>
+            <option name="proportions">
+              <list>
+                <option value="0.20000002" />
+              </list>
+            </option>
+          </splitter-proportions>
+        </settings>
+      </state>
+      <state key="ProjectLibrariesConfigurable.UI">
+        <settings>
+          <last-edited>annotations</last-edited>
+          <splitter-proportions>
+            <option name="proportions">
+              <list>
+                <option value="0.2" />
+              </list>
+            </option>
+          </splitter-proportions>
+        </settings>
+      </state>
+    </states>
+  </component>
+</project>
+
diff --git a/java/java-tests/testData/core/loadingTest/annotations.jar b/java/java-tests/testData/core/loadingTest/annotations.jar
new file mode 100644
index 0000000..d3ae4ab
--- /dev/null
+++ b/java/java-tests/testData/core/loadingTest/annotations.jar
Binary files differ
diff --git a/java/java-tests/testData/core/loadingTest/loadingTest.iml b/java/java-tests/testData/core/loadingTest/loadingTest.iml
new file mode 100644
index 0000000..0c53580
--- /dev/null
+++ b/java/java-tests/testData/core/loadingTest/loadingTest.iml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" name="annotations" level="project" />
+  </component>
+</module>
+
diff --git a/java/java-tests/testData/dependencies/cycle/noCycle/com/a/A.java b/java/java-tests/testData/dependencies/cycle/noCycle/com/a/A.java
new file mode 100644
index 0000000..93db789
--- /dev/null
+++ b/java/java-tests/testData/dependencies/cycle/noCycle/com/a/A.java
@@ -0,0 +1,4 @@
+package com.a;
+public class A{
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/dependencies/cycle/noCycle/com/b/B.java b/java/java-tests/testData/dependencies/cycle/noCycle/com/b/B.java
new file mode 100644
index 0000000..d6ec84e
--- /dev/null
+++ b/java/java-tests/testData/dependencies/cycle/noCycle/com/b/B.java
@@ -0,0 +1,5 @@
+package com.b;
+import com.a.A;
+public class B{
+A aa = new A();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/dependencies/cycle/packageScope1/com/a/A.java b/java/java-tests/testData/dependencies/cycle/packageScope1/com/a/A.java
new file mode 100644
index 0000000..5d58c53
--- /dev/null
+++ b/java/java-tests/testData/dependencies/cycle/packageScope1/com/a/A.java
@@ -0,0 +1,5 @@
+package com.a;
+import com.b.B;
+public class A{
+  B b = new B();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/dependencies/cycle/packageScope1/com/b/B.java b/java/java-tests/testData/dependencies/cycle/packageScope1/com/b/B.java
new file mode 100644
index 0000000..549a0a3
--- /dev/null
+++ b/java/java-tests/testData/dependencies/cycle/packageScope1/com/b/B.java
@@ -0,0 +1,5 @@
+package com.b;
+import com.a.A;
+public class B{
+  A a = new A();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/dependencies/cycle/packageScope2/com/subscope1/a/A.java b/java/java-tests/testData/dependencies/cycle/packageScope2/com/subscope1/a/A.java
new file mode 100644
index 0000000..f58a98a
--- /dev/null
+++ b/java/java-tests/testData/dependencies/cycle/packageScope2/com/subscope1/a/A.java
@@ -0,0 +1,5 @@
+package com.subscope1.a;
+import com.subscope1.b.B;
+public class A{
+B b = new B();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/dependencies/cycle/packageScope2/com/subscope1/b/B.java b/java/java-tests/testData/dependencies/cycle/packageScope2/com/subscope1/b/B.java
new file mode 100644
index 0000000..b1cb3e0
--- /dev/null
+++ b/java/java-tests/testData/dependencies/cycle/packageScope2/com/subscope1/b/B.java
@@ -0,0 +1,5 @@
+package com.subscope1.b;
+import com.subscope1.a.A;
+public class B{
+A a = new A();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/dependencies/cycle/packageScope2/com/subscope2/c/C.java b/java/java-tests/testData/dependencies/cycle/packageScope2/com/subscope2/c/C.java
new file mode 100644
index 0000000..aed4907
--- /dev/null
+++ b/java/java-tests/testData/dependencies/cycle/packageScope2/com/subscope2/c/C.java
@@ -0,0 +1,5 @@
+package com.subscope2.c;
+import com.subscope2.d.D;
+public class C{
+D d = new D();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/dependencies/cycle/packageScope2/com/subscope2/d/D.java b/java/java-tests/testData/dependencies/cycle/packageScope2/com/subscope2/d/D.java
new file mode 100644
index 0000000..8be8326
--- /dev/null
+++ b/java/java-tests/testData/dependencies/cycle/packageScope2/com/subscope2/d/D.java
@@ -0,0 +1,5 @@
+package com.subscope2.d;
+import com.subscope2.c.C;
+public class D{
+C c = new C();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/dependencies/cycle/t1/com/a/A.java b/java/java-tests/testData/dependencies/cycle/t1/com/a/A.java
new file mode 100644
index 0000000..5d58c53
--- /dev/null
+++ b/java/java-tests/testData/dependencies/cycle/t1/com/a/A.java
@@ -0,0 +1,5 @@
+package com.a;
+import com.b.B;
+public class A{
+  B b = new B();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/dependencies/cycle/t1/com/b/B.java b/java/java-tests/testData/dependencies/cycle/t1/com/b/B.java
new file mode 100644
index 0000000..549a0a3
--- /dev/null
+++ b/java/java-tests/testData/dependencies/cycle/t1/com/b/B.java
@@ -0,0 +1,5 @@
+package com.b;
+import com.a.A;
+public class B{
+  A a = new A();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/dependencies/cycle/t2/com/a/A.java b/java/java-tests/testData/dependencies/cycle/t2/com/a/A.java
new file mode 100644
index 0000000..b24a2f0
--- /dev/null
+++ b/java/java-tests/testData/dependencies/cycle/t2/com/a/A.java
@@ -0,0 +1,5 @@
+package com.a;
+import com.b.B;
+public class A{
+B b = new B();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/dependencies/cycle/t2/com/b/B.java b/java/java-tests/testData/dependencies/cycle/t2/com/b/B.java
new file mode 100644
index 0000000..7893441
--- /dev/null
+++ b/java/java-tests/testData/dependencies/cycle/t2/com/b/B.java
@@ -0,0 +1,5 @@
+package com.b;
+import com.a.A;
+public class B{
+A a = new A();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/dependencies/cycle/t2/com/c/C.java b/java/java-tests/testData/dependencies/cycle/t2/com/c/C.java
new file mode 100644
index 0000000..2fd0eba
--- /dev/null
+++ b/java/java-tests/testData/dependencies/cycle/t2/com/c/C.java
@@ -0,0 +1,5 @@
+package com.c;
+import com.d.D;
+public class C{
+D d = new D();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/dependencies/cycle/t2/com/d/D.java b/java/java-tests/testData/dependencies/cycle/t2/com/d/D.java
new file mode 100644
index 0000000..a329841
--- /dev/null
+++ b/java/java-tests/testData/dependencies/cycle/t2/com/d/D.java
@@ -0,0 +1,5 @@
+package com.d;
+import com.c.C;
+public class D{
+C c = new C();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/dependencies/cycle/t3/com/a/A.java b/java/java-tests/testData/dependencies/cycle/t3/com/a/A.java
new file mode 100644
index 0000000..dde7447
--- /dev/null
+++ b/java/java-tests/testData/dependencies/cycle/t3/com/a/A.java
@@ -0,0 +1,5 @@
+package com.a;
+import com.c.C;
+public class A{
+C c = new C();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/dependencies/cycle/t3/com/b/B.java b/java/java-tests/testData/dependencies/cycle/t3/com/b/B.java
new file mode 100644
index 0000000..afa6a3f
--- /dev/null
+++ b/java/java-tests/testData/dependencies/cycle/t3/com/b/B.java
@@ -0,0 +1,7 @@
+package com.b;
+import com.a.A;
+import com.d.D;
+public class B{
+A a = new A();
+D d = new D();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/dependencies/cycle/t3/com/c/C.java b/java/java-tests/testData/dependencies/cycle/t3/com/c/C.java
new file mode 100644
index 0000000..2ae8c0c
--- /dev/null
+++ b/java/java-tests/testData/dependencies/cycle/t3/com/c/C.java
@@ -0,0 +1,5 @@
+package com.c;
+import com.b.B;
+public class C{
+B b = new B();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/dependencies/cycle/t3/com/d/D.java b/java/java-tests/testData/dependencies/cycle/t3/com/d/D.java
new file mode 100644
index 0000000..b0f9716
--- /dev/null
+++ b/java/java-tests/testData/dependencies/cycle/t3/com/d/D.java
@@ -0,0 +1,5 @@
+package com.d;
+import com.b.B;
+public class D{
+B b = new B();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/dependencies/cycle/t4/com/a/A.java b/java/java-tests/testData/dependencies/cycle/t4/com/a/A.java
new file mode 100644
index 0000000..f24b779
--- /dev/null
+++ b/java/java-tests/testData/dependencies/cycle/t4/com/a/A.java
@@ -0,0 +1,7 @@
+package com.a;
+import com.b.B;
+import com.c.C;
+public class A{
+B b = new B();
+C c = new C();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/dependencies/cycle/t4/com/b/B.java b/java/java-tests/testData/dependencies/cycle/t4/com/b/B.java
new file mode 100644
index 0000000..7893441
--- /dev/null
+++ b/java/java-tests/testData/dependencies/cycle/t4/com/b/B.java
@@ -0,0 +1,5 @@
+package com.b;
+import com.a.A;
+public class B{
+A a = new A();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/dependencies/cycle/t4/com/c/C.java b/java/java-tests/testData/dependencies/cycle/t4/com/c/C.java
new file mode 100644
index 0000000..2fd0eba
--- /dev/null
+++ b/java/java-tests/testData/dependencies/cycle/t4/com/c/C.java
@@ -0,0 +1,5 @@
+package com.c;
+import com.d.D;
+public class C{
+D d = new D();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/dependencies/cycle/t4/com/d/D.java b/java/java-tests/testData/dependencies/cycle/t4/com/d/D.java
new file mode 100644
index 0000000..f07a920
--- /dev/null
+++ b/java/java-tests/testData/dependencies/cycle/t4/com/d/D.java
@@ -0,0 +1,5 @@
+package com.d;
+import com.a.A;
+public class D{
+A a = new A();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/dependencies/cycle/t5/com/a/A.java b/java/java-tests/testData/dependencies/cycle/t5/com/a/A.java
new file mode 100644
index 0000000..dde7447
--- /dev/null
+++ b/java/java-tests/testData/dependencies/cycle/t5/com/a/A.java
@@ -0,0 +1,5 @@
+package com.a;
+import com.c.C;
+public class A{
+C c = new C();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/dependencies/cycle/t5/com/b/B.java b/java/java-tests/testData/dependencies/cycle/t5/com/b/B.java
new file mode 100644
index 0000000..afa6a3f
--- /dev/null
+++ b/java/java-tests/testData/dependencies/cycle/t5/com/b/B.java
@@ -0,0 +1,7 @@
+package com.b;
+import com.a.A;
+import com.d.D;
+public class B{
+A a = new A();
+D d = new D();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/dependencies/cycle/t5/com/c/C.java b/java/java-tests/testData/dependencies/cycle/t5/com/c/C.java
new file mode 100644
index 0000000..2ae8c0c
--- /dev/null
+++ b/java/java-tests/testData/dependencies/cycle/t5/com/c/C.java
@@ -0,0 +1,5 @@
+package com.c;
+import com.b.B;
+public class C{
+B b = new B();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/dependencies/cycle/t5/com/d/D.java b/java/java-tests/testData/dependencies/cycle/t5/com/d/D.java
new file mode 100644
index 0000000..b0f9716
--- /dev/null
+++ b/java/java-tests/testData/dependencies/cycle/t5/com/d/D.java
@@ -0,0 +1,5 @@
+package com.d;
+import com.b.B;
+public class D{
+B b = new B();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/dependencies/cycle/t6/com/a/A.java b/java/java-tests/testData/dependencies/cycle/t6/com/a/A.java
new file mode 100644
index 0000000..fab818d
--- /dev/null
+++ b/java/java-tests/testData/dependencies/cycle/t6/com/a/A.java
@@ -0,0 +1,5 @@
+package com.a;
+import com.b.B1;
+public class A{
+  B1 b = new B1();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/dependencies/cycle/t6/com/b/B1.java b/java/java-tests/testData/dependencies/cycle/t6/com/b/B1.java
new file mode 100644
index 0000000..cbd550c
--- /dev/null
+++ b/java/java-tests/testData/dependencies/cycle/t6/com/b/B1.java
@@ -0,0 +1,4 @@
+package com.b;
+public class B1{
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/dependencies/cycle/t6/com/b/B2.java b/java/java-tests/testData/dependencies/cycle/t6/com/b/B2.java
new file mode 100644
index 0000000..38b8c9d
--- /dev/null
+++ b/java/java-tests/testData/dependencies/cycle/t6/com/b/B2.java
@@ -0,0 +1,5 @@
+package com.b;
+import com.c.C;
+public class B2{
+C cc= new C();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/dependencies/cycle/t6/com/c/C.java b/java/java-tests/testData/dependencies/cycle/t6/com/c/C.java
new file mode 100644
index 0000000..37c3465
--- /dev/null
+++ b/java/java-tests/testData/dependencies/cycle/t6/com/c/C.java
@@ -0,0 +1,5 @@
+package com.c;
+import com.a.A;
+public class C{
+A aa = new A();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/dependencies/dependencies/src/com/package1/Class1.java b/java/java-tests/testData/dependencies/dependencies/src/com/package1/Class1.java
new file mode 100644
index 0000000..df7c404
--- /dev/null
+++ b/java/java-tests/testData/dependencies/dependencies/src/com/package1/Class1.java
@@ -0,0 +1,5 @@
+package com.package1;
+
+public class Class1 {
+  private Class2 myClass;  
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/dependencies/dependencies/src/com/package1/Class2.java b/java/java-tests/testData/dependencies/dependencies/src/com/package1/Class2.java
new file mode 100644
index 0000000..58f58a4
--- /dev/null
+++ b/java/java-tests/testData/dependencies/dependencies/src/com/package1/Class2.java
@@ -0,0 +1,4 @@
+package com.package1;
+
+public class Class2 {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/dependencies/search/backwardPackageScope/com/a/A.java b/java/java-tests/testData/dependencies/search/backwardPackageScope/com/a/A.java
new file mode 100644
index 0000000..554a743
--- /dev/null
+++ b/java/java-tests/testData/dependencies/search/backwardPackageScope/com/a/A.java
@@ -0,0 +1,5 @@
+package com.a;
+public class A{
+  public void aa(){
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/dependencies/search/backwardPackageScope/com/a/C.java b/java/java-tests/testData/dependencies/search/backwardPackageScope/com/a/C.java
new file mode 100644
index 0000000..ee5c131
--- /dev/null
+++ b/java/java-tests/testData/dependencies/search/backwardPackageScope/com/a/C.java
@@ -0,0 +1,7 @@
+package com.a;
+public class C{
+  A myA = new A ();
+  public void cc(){
+    myA.aa();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/dependencies/search/backwardPackageScope/com/b/B.java b/java/java-tests/testData/dependencies/search/backwardPackageScope/com/b/B.java
new file mode 100644
index 0000000..749aa20
--- /dev/null
+++ b/java/java-tests/testData/dependencies/search/backwardPackageScope/com/b/B.java
@@ -0,0 +1,10 @@
+package com.b;
+import com.a.*;
+class B{
+  A myA = new A();
+  C myC = new C();
+  void bb(){
+    myA.aa();
+    myC.cc();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/dependencies/search/forwardPackageScope/com/a/A.java b/java/java-tests/testData/dependencies/search/forwardPackageScope/com/a/A.java
new file mode 100644
index 0000000..554a743
--- /dev/null
+++ b/java/java-tests/testData/dependencies/search/forwardPackageScope/com/a/A.java
@@ -0,0 +1,5 @@
+package com.a;
+public class A{
+  public void aa(){
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/dependencies/search/forwardPackageScope/com/b/B.java b/java/java-tests/testData/dependencies/search/forwardPackageScope/com/b/B.java
new file mode 100644
index 0000000..4b42c70
--- /dev/null
+++ b/java/java-tests/testData/dependencies/search/forwardPackageScope/com/b/B.java
@@ -0,0 +1,8 @@
+package com.b;
+import com.a.A;
+public class B{
+  A myA = new A();
+  public void bb(){
+    myA.aa();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/dependencies/search/forwardPackageScope/com/b/C.java b/java/java-tests/testData/dependencies/search/forwardPackageScope/com/b/C.java
new file mode 100644
index 0000000..aad4d41
--- /dev/null
+++ b/java/java-tests/testData/dependencies/search/forwardPackageScope/com/b/C.java
@@ -0,0 +1,8 @@
+package com.b;
+import com.a.A;
+public class C{
+  A myA = new A();
+  public void cc(){
+    myA.aa();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/dependencies/search/forwardSimple/A.java b/java/java-tests/testData/dependencies/search/forwardSimple/A.java
new file mode 100644
index 0000000..c6d201a
--- /dev/null
+++ b/java/java-tests/testData/dependencies/search/forwardSimple/A.java
@@ -0,0 +1,6 @@
+public class A{
+  B myB = new B();
+  void aa(){
+    myB.bb();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/dependencies/search/forwardSimple/B.java b/java/java-tests/testData/dependencies/search/forwardSimple/B.java
new file mode 100644
index 0000000..84f3655
--- /dev/null
+++ b/java/java-tests/testData/dependencies/search/forwardSimple/B.java
@@ -0,0 +1,4 @@
+public class B{
+  public void bb(){     
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/fileStructure/filtering/AnonymousType.java b/java/java-tests/testData/fileStructure/filtering/AnonymousType.java
new file mode 100644
index 0000000..21731da
--- /dev/null
+++ b/java/java-tests/testData/fileStructure/filtering/AnonymousType.java
@@ -0,0 +1,8 @@
+import java.awt.*;
+
+class AnonymousType<caret> {
+  int num;
+  void foo() {
+    new java.awt.Point(){};
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/fileStructure/filtering/AnonymousType.tree b/java/java-tests/testData/fileStructure/filtering/AnonymousType.tree
new file mode 100644
index 0000000..258b1a2
--- /dev/null
+++ b/java/java-tests/testData/fileStructure/filtering/AnonymousType.tree
@@ -0,0 +1,4 @@
+-AnonymousType.java
+ -AnonymousType
+  -foo(): void
+   [$1]
\ No newline at end of file
diff --git a/java/java-tests/testData/fileStructure/filtering/Camel.java b/java/java-tests/testData/fileStructure/filtering/Camel.java
new file mode 100644
index 0000000..c0794f7
--- /dev/null
+++ b/java/java-tests/testData/fileStructure/filtering/Camel.java
@@ -0,0 +1,7 @@
+class Camel<caret> {
+  void doSomething(){}
+  void doSomethingWith(){}
+  void doSomethingWithMyHead(){}
+  void getSomeHead(){}
+  void getSomeArtHeader(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/fileStructure/filtering/Camel.tree b/java/java-tests/testData/fileStructure/filtering/Camel.tree
new file mode 100644
index 0000000..d7d2cab
--- /dev/null
+++ b/java/java-tests/testData/fileStructure/filtering/Camel.tree
@@ -0,0 +1,5 @@
+-Camel.java
+ -Camel
+  [doSomethingWithMyHead(): void]
+  getSomeArtHeader(): void
+  getSomeHead(): void
\ No newline at end of file
diff --git a/java/java-tests/testData/fileStructure/filtering/Camel2.java b/java/java-tests/testData/fileStructure/filtering/Camel2.java
new file mode 100644
index 0000000..a30da13
--- /dev/null
+++ b/java/java-tests/testData/fileStructure/filtering/Camel2.java
@@ -0,0 +1,7 @@
+class Camel2<caret> {
+  void doSomething(){}
+  void doSomethingWith(){}
+  void doSomethingWithMyHead(){}
+  void doSomeHead(){}
+  void doSomeArtHeader(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/fileStructure/filtering/Camel2.tree b/java/java-tests/testData/fileStructure/filtering/Camel2.tree
new file mode 100644
index 0000000..33dbaa8
--- /dev/null
+++ b/java/java-tests/testData/fileStructure/filtering/Camel2.tree
@@ -0,0 +1,5 @@
+-Camel2.java
+ -Camel2
+  doSomeArtHeader(): void
+  [doSomeHead(): void]
+  doSomethingWithMyHead(): void
\ No newline at end of file
diff --git a/java/java-tests/testData/fileStructure/filtering/ReturnValue.java b/java/java-tests/testData/fileStructure/filtering/ReturnValue.java
new file mode 100644
index 0000000..d99fd72
--- /dev/null
+++ b/java/java-tests/testData/fileStructure/filtering/ReturnValue.java
@@ -0,0 +1,10 @@
+import java.awt.*;
+
+class ReturnValue {
+  void aaa(){<caret>}
+  Point getLocationOnScreen(){}
+  Point getPoint(){}
+  void fff2(){}
+  void fff3(){}
+  void fff4(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/fileStructure/filtering/ReturnValue.tree b/java/java-tests/testData/fileStructure/filtering/ReturnValue.tree
new file mode 100644
index 0000000..469addd
--- /dev/null
+++ b/java/java-tests/testData/fileStructure/filtering/ReturnValue.tree
@@ -0,0 +1,4 @@
+-ReturnValue.java
+ -ReturnValue
+  getLocationOnScreen(): Point
+  [getPoint(): Point]
\ No newline at end of file
diff --git a/java/java-tests/testData/fileStructure/filtering/SelectLeafFirst.java b/java/java-tests/testData/fileStructure/filtering/SelectLeafFirst.java
new file mode 100644
index 0000000..45eda4e
--- /dev/null
+++ b/java/java-tests/testData/fileStructure/filtering/SelectLeafFirst.java
@@ -0,0 +1,13 @@
+class SelectLeafFirst {
+  void aaa(){}
+  <caret>
+  void bbb(){}
+  void clear(){}
+  void zzz(){}
+  class ClearClass {
+    void kkk(){}
+    void www(){}
+    void clear(){}
+    void yyy(){}
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/fileStructure/filtering/SelectLeafFirst.tree b/java/java-tests/testData/fileStructure/filtering/SelectLeafFirst.tree
new file mode 100644
index 0000000..ca32262
--- /dev/null
+++ b/java/java-tests/testData/fileStructure/filtering/SelectLeafFirst.tree
@@ -0,0 +1,5 @@
+-SelectLeafFirst.java
+ -SelectLeafFirst
+  [clear(): void]
+  -ClearClass
+   clear(): void
\ No newline at end of file
diff --git a/java/java-tests/testData/fileStructure/filtering/SelectLeafFirst2.java b/java/java-tests/testData/fileStructure/filtering/SelectLeafFirst2.java
new file mode 100644
index 0000000..06d5052
--- /dev/null
+++ b/java/java-tests/testData/fileStructure/filtering/SelectLeafFirst2.java
@@ -0,0 +1,13 @@
+class SelectLeafFirst2 {
+  void aaa(){}
+  void bbb(){}
+  void clear(){}
+  void zzz(){}
+  class ClearClass {
+    void kkk(){}
+    <caret>
+    void www(){}
+    void clear(){}
+    void yyy(){}
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/fileStructure/filtering/SelectLeafFirst2.tree b/java/java-tests/testData/fileStructure/filtering/SelectLeafFirst2.tree
new file mode 100644
index 0000000..b9bc95f
--- /dev/null
+++ b/java/java-tests/testData/fileStructure/filtering/SelectLeafFirst2.tree
@@ -0,0 +1,5 @@
+-SelectLeafFirst2.java
+ -SelectLeafFirst2
+  clear(): void
+  -ClearClass
+   [clear(): void]
\ No newline at end of file
diff --git a/java/java-tests/testData/fileStructure/filtering/SelectLeafFirst3.java b/java/java-tests/testData/fileStructure/filtering/SelectLeafFirst3.java
new file mode 100644
index 0000000..fe4d6b4
--- /dev/null
+++ b/java/java-tests/testData/fileStructure/filtering/SelectLeafFirst3.java
@@ -0,0 +1,13 @@
+class SelectLeafFirst3 {
+  int<caret> num;
+  void aaa(){}
+  void bbb(){}
+  void clear(){}
+  void zzz(){}
+  class ClearClass {
+    void kkk(){}
+    void www(){}
+    void clear(){}
+    void yyy(){}
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/fileStructure/filtering/SelectLeafFirst3.tree b/java/java-tests/testData/fileStructure/filtering/SelectLeafFirst3.tree
new file mode 100644
index 0000000..c2caf2c
--- /dev/null
+++ b/java/java-tests/testData/fileStructure/filtering/SelectLeafFirst3.tree
@@ -0,0 +1,5 @@
+-SelectLeafFirst3.java
+ -SelectLeafFirst3
+  [clear(): void]
+  -ClearClass
+   clear(): void
\ No newline at end of file
diff --git a/java/java-tests/testData/fileStructure/filtering/SelectLeafFirst4.java b/java/java-tests/testData/fileStructure/filtering/SelectLeafFirst4.java
new file mode 100644
index 0000000..4caf3f1
--- /dev/null
+++ b/java/java-tests/testData/fileStructure/filtering/SelectLeafFirst4.java
@@ -0,0 +1,12 @@
+class SelectLeafFirst4 {
+  void aaa(){}
+  void bbb(){}
+  void clear(){}
+  void zzz(){}
+  class ClearClass {
+    void<caret> kkk(){}
+    void www(){}
+    void clear(){}
+    void yyy(){}
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/fileStructure/filtering/SelectLeafFirst4.tree b/java/java-tests/testData/fileStructure/filtering/SelectLeafFirst4.tree
new file mode 100644
index 0000000..12b50fb
--- /dev/null
+++ b/java/java-tests/testData/fileStructure/filtering/SelectLeafFirst4.tree
@@ -0,0 +1,5 @@
+-SelectLeafFirst4.java
+ -SelectLeafFirst4
+  clear(): void
+  -ClearClass
+   [clear(): void]
\ No newline at end of file
diff --git a/java/java-tests/testData/fileStructure/filtering/Simple.java b/java/java-tests/testData/fileStructure/filtering/Simple.java
new file mode 100644
index 0000000..24a62e9
--- /dev/null
+++ b/java/java-tests/testData/fileStructure/filtering/Simple.java
@@ -0,0 +1,8 @@
+class Simple<caret> {
+  void aaa(){}
+  void bbb(){}
+  void fff(){}
+  void fff2(){}
+  void fff3(){}
+  void fff4(){}
+}
diff --git a/java/java-tests/testData/fileStructure/filtering/Simple.tree b/java/java-tests/testData/fileStructure/filtering/Simple.tree
new file mode 100644
index 0000000..1f941d7
--- /dev/null
+++ b/java/java-tests/testData/fileStructure/filtering/Simple.tree
@@ -0,0 +1,6 @@
+-Simple.java
+ -Simple
+  [fff(): void]
+  fff2(): void
+  fff3(): void
+  fff4(): void
diff --git a/java/java-tests/testData/fileStructure/hierarchy/AnonymousAsConstantInInterface.java b/java/java-tests/testData/fileStructure/hierarchy/AnonymousAsConstantInInterface.java
new file mode 100644
index 0000000..75ab7dd
--- /dev/null
+++ b/java/java-tests/testData/fileStructure/hierarchy/AnonymousAsConstantInInterface.java
@@ -0,0 +1,22 @@
+/*
+ * 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 AnonymousAsConstantInInterface {
+  int num = 5;
+
+  void getAMethod() {
+    Buggy buggy = new Buggy(){<caret>};
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/fileStructure/hierarchy/AnonymousAsConstantInInterface.tree b/java/java-tests/testData/fileStructure/hierarchy/AnonymousAsConstantInInterface.tree
new file mode 100644
index 0000000..6de3fa8
--- /dev/null
+++ b/java/java-tests/testData/fileStructure/hierarchy/AnonymousAsConstantInInterface.tree
@@ -0,0 +1,23 @@
+-AnonymousAsConstantInInterface.java
+ -AnonymousAsConstantInInterface
+  -getAMethod(): void
+   -$1
+    getA(): void
+    getA1(): void
+    getA2(): void
+    getA3(): void
+    getA4(): void
+    getA5(): void
+    getA6(): void
+    getA7(): void
+    getA8(): void
+    -DEFAULT: BuggyInterface = new BuggyInterface() {...}
+     -$1
+      [getA1(): void]
+      getA2(): void
+      getA3(): void
+      getA4(): void
+      getA5(): void
+      getA6(): void
+      getA7(): void
+      getA8(): void
\ No newline at end of file
diff --git a/java/java-tests/testData/fileStructure/hierarchy/AnonymousHashCode.java b/java/java-tests/testData/fileStructure/hierarchy/AnonymousHashCode.java
new file mode 100644
index 0000000..5118b79
--- /dev/null
+++ b/java/java-tests/testData/fileStructure/hierarchy/AnonymousHashCode.java
@@ -0,0 +1,22 @@
+/*
+ * 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.
+ */
+import java.lang.Object;
+
+public class A<caret> extends Object {
+  void foo() {
+    Object myObject = new Object(){};
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/fileStructure/hierarchy/AnonymousHashCode.tree b/java/java-tests/testData/fileStructure/hierarchy/AnonymousHashCode.tree
new file mode 100644
index 0000000..1927153
--- /dev/null
+++ b/java/java-tests/testData/fileStructure/hierarchy/AnonymousHashCode.tree
@@ -0,0 +1,3 @@
+-AnonymousHashCode.java
+ -A
+  [hashCode(): int]
\ No newline at end of file
diff --git a/java/java-tests/testData/fileStructure/hierarchy/Buggy.java b/java/java-tests/testData/fileStructure/hierarchy/Buggy.java
new file mode 100644
index 0000000..2839a93
--- /dev/null
+++ b/java/java-tests/testData/fileStructure/hierarchy/Buggy.java
@@ -0,0 +1,33 @@
+/*
+ * 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.
+ */
+import java.lang.Object;
+
+class Buggy extends Object implements BuggyInterface {
+  public void getA(){}
+  public void getB(){}
+  public void getC(){}
+  public void getD(){}
+  public void getE(){}
+  public void getF(){}
+  public void getA1(){}
+  public void getA2(){}
+  public void getA3(){}
+  public void getA4(){}
+  public void getA5(){}
+  public void getA6(){}
+  public void getA7(){}
+  public void getA8(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/fileStructure/hierarchy/BuggyInterface.java b/java/java-tests/testData/fileStructure/hierarchy/BuggyInterface.java
new file mode 100644
index 0000000..fdf90d3
--- /dev/null
+++ b/java/java-tests/testData/fileStructure/hierarchy/BuggyInterface.java
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ */
+import java.lang.Override;
+
+interface  BuggyInterface {
+  BuggyInterface DEFAULT = new BuggyInterface() {
+    public void getA1(){};
+    public void getA2(){};
+    public void getA3(){};
+    public void getA4(){};
+    public void getA5(){};
+    public void getA6(){};
+    public void getA7(){};
+    public void getA8(){};
+  }
+
+  void getA1();
+  void getA2();
+  void getA3();
+  void getA4();
+  void getA5();
+  void getA6();
+  void getA7();
+  void getA8();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/fileStructure/hierarchy/Object.java b/java/java-tests/testData/fileStructure/hierarchy/Object.java
new file mode 100644
index 0000000..4a4d5b8
--- /dev/null
+++ b/java/java-tests/testData/fileStructure/hierarchy/Object.java
@@ -0,0 +1,42 @@
+/*
+ * 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.
+ */
+public class Object {
+  private static native void registerNatives();
+
+  static {registerNatives();}
+
+  public final native Class<?> getClass();
+
+  public native int hashCode();
+
+  public boolean equals(Object obj) {return false;}
+
+  protected native Object clone() throws CloneNotSupportedException;
+
+  public String toString() {return null;}
+
+  public final native void notify();
+
+  public final native void notifyAll();
+
+  public final native void wait(long timeout) throws InterruptedException;
+
+  public final void wait(long timeout, int nanos) throws InterruptedException {}
+
+  public final void wait() throws InterruptedException {}
+
+  protected void finalize() throws Throwable { }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/fileStructure/hierarchy/Simple.java b/java/java-tests/testData/fileStructure/hierarchy/Simple.java
new file mode 100644
index 0000000..bf98aa2
--- /dev/null
+++ b/java/java-tests/testData/fileStructure/hierarchy/Simple.java
@@ -0,0 +1,20 @@
+/*
+ * 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 Simple extends Object {
+  void aaa(){}
+  void bbb(){<caret>}
+  void fff(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/fileStructure/hierarchy/Simple.tree b/java/java-tests/testData/fileStructure/hierarchy/Simple.tree
new file mode 100644
index 0000000..334bde1
--- /dev/null
+++ b/java/java-tests/testData/fileStructure/hierarchy/Simple.tree
@@ -0,0 +1,16 @@
+-Simple.java
+ -Simple
+  aaa(): void
+  bbb(): void
+  clone(): Object
+  equals(Object): boolean
+  [fff(): void]
+  finalize(): void
+  getClass(): Class<?>
+  hashCode(): int
+  notify(): void
+  notifyAll(): void
+  toString(): String
+  wait(): void
+  wait(long): void
+  wait(long, int): void
diff --git a/java/java-tests/testData/fileStructure/selection/Anonymous.java b/java/java-tests/testData/fileStructure/selection/Anonymous.java
new file mode 100644
index 0000000..7504bf0
--- /dev/null
+++ b/java/java-tests/testData/fileStructure/selection/Anonymous.java
@@ -0,0 +1,8 @@
+class Anonymous {
+  int num1;
+  int num2;
+  Object o = new Object(){<caret>};
+
+  Anonymous() {}
+  void foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/fileStructure/selection/Anonymous.tree b/java/java-tests/testData/fileStructure/selection/Anonymous.tree
new file mode 100644
index 0000000..2f74f9a
--- /dev/null
+++ b/java/java-tests/testData/fileStructure/selection/Anonymous.tree
@@ -0,0 +1,8 @@
+-Anonymous.java
+ -Anonymous
+  Anonymous()
+  foo(): void
+  num1: int
+  num2: int
+  -[o: Object = new Object() {...}]
+   $1
\ No newline at end of file
diff --git a/java/java-tests/testData/fileStructure/selection/AnonymousInAnonymous.java b/java/java-tests/testData/fileStructure/selection/AnonymousInAnonymous.java
new file mode 100644
index 0000000..5bfeff7
--- /dev/null
+++ b/java/java-tests/testData/fileStructure/selection/AnonymousInAnonymous.java
@@ -0,0 +1,15 @@
+class AnonymousInAnonymous {
+  int num1;
+  int num2;
+
+  AnonymousInAnonymous() {}
+  void foo() {
+    new Object() {
+       public String toString() {
+         return new Object(){
+           void method() {<caret>}
+         }.toString();
+       }
+    };
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/fileStructure/selection/AnonymousInAnonymous.tree b/java/java-tests/testData/fileStructure/selection/AnonymousInAnonymous.tree
new file mode 100644
index 0000000..ecde869
--- /dev/null
+++ b/java/java-tests/testData/fileStructure/selection/AnonymousInAnonymous.tree
@@ -0,0 +1,10 @@
+-AnonymousInAnonymous.java
+ -AnonymousInAnonymous
+  AnonymousInAnonymous()
+  -foo(): void
+   -$1
+    -toString(): String
+     -$1
+      [method(): void]
+  num1: int
+  num2: int
\ No newline at end of file
diff --git a/java/java-tests/testData/fileStructure/selection/Constructor.java b/java/java-tests/testData/fileStructure/selection/Constructor.java
new file mode 100644
index 0000000..55a5f02
--- /dev/null
+++ b/java/java-tests/testData/fileStructure/selection/Constructor.java
@@ -0,0 +1,7 @@
+class Constructor {
+  int num1;
+  int num2;
+
+  Constructor() {<caret>}
+  void foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/fileStructure/selection/Constructor.tree b/java/java-tests/testData/fileStructure/selection/Constructor.tree
new file mode 100644
index 0000000..eb57c90
--- /dev/null
+++ b/java/java-tests/testData/fileStructure/selection/Constructor.tree
@@ -0,0 +1,6 @@
+-Constructor.java
+ -Constructor
+  [Constructor()]
+  foo(): void
+  num1: int
+  num2: int
\ No newline at end of file
diff --git a/java/java-tests/testData/fileStructure/selection/Field.java b/java/java-tests/testData/fileStructure/selection/Field.java
new file mode 100644
index 0000000..35e5fea
--- /dev/null
+++ b/java/java-tests/testData/fileStructure/selection/Field.java
@@ -0,0 +1,7 @@
+class Field {
+  int num1;
+  int <caret>num2;
+
+  Field() {}
+  void foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/fileStructure/selection/Field.tree b/java/java-tests/testData/fileStructure/selection/Field.tree
new file mode 100644
index 0000000..28917c7
--- /dev/null
+++ b/java/java-tests/testData/fileStructure/selection/Field.tree
@@ -0,0 +1,6 @@
+-Field.java
+ -Field
+  Field()
+  foo(): void
+  num1: int
+  [num2: int]
diff --git a/java/java-tests/testData/fileStructure/selection/InsideClass.java b/java/java-tests/testData/fileStructure/selection/InsideClass.java
new file mode 100644
index 0000000..5fc06c0e
--- /dev/null
+++ b/java/java-tests/testData/fileStructure/selection/InsideClass.java
@@ -0,0 +1,7 @@
+class InsideClass {
+  int num1;
+  int num2;
+  <caret>
+  InsideClass() {}
+  void foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/fileStructure/selection/InsideClass.tree b/java/java-tests/testData/fileStructure/selection/InsideClass.tree
new file mode 100644
index 0000000..66cdc34
--- /dev/null
+++ b/java/java-tests/testData/fileStructure/selection/InsideClass.tree
@@ -0,0 +1,6 @@
+-InsideClass.java
+ -[InsideClass]
+  InsideClass()
+  foo(): void
+  num1: int
+  num2: int
\ No newline at end of file
diff --git a/java/java-tests/testData/fileStructure/selection/Method.java b/java/java-tests/testData/fileStructure/selection/Method.java
new file mode 100644
index 0000000..01e47e1
--- /dev/null
+++ b/java/java-tests/testData/fileStructure/selection/Method.java
@@ -0,0 +1,7 @@
+class Method {
+  int num1;
+  int num2;
+
+  Method() {}
+  void foo() {<caret>}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/fileStructure/selection/Method.tree b/java/java-tests/testData/fileStructure/selection/Method.tree
new file mode 100644
index 0000000..21665cc
--- /dev/null
+++ b/java/java-tests/testData/fileStructure/selection/Method.tree
@@ -0,0 +1,6 @@
+-Method.java
+ -Method
+  Method()
+  [foo(): void]
+  num1: int
+  num2: int
\ No newline at end of file
diff --git a/java/java-tests/testData/find/findInClassHierarchy/src/A.java b/java/java-tests/testData/find/findInClassHierarchy/src/A.java
new file mode 100644
index 0000000..285f551
--- /dev/null
+++ b/java/java-tests/testData/find/findInClassHierarchy/src/A.java
@@ -0,0 +1,18 @@
+public class A {
+  void foo(Object o) {
+    if (o instanceof String){}
+  }
+}
+
+class AImpl extends A {
+  void foo(Object o) {
+    if (o instanceof String){}
+  }
+}
+
+class B {
+  void bar(Object o) {
+    if (o instanceof String){}
+  }
+}
+
diff --git a/java/java-tests/testData/find/findInPath/src/s.java b/java/java-tests/testData/find/findInPath/src/s.java
new file mode 100644
index 0000000..0230601
--- /dev/null
+++ b/java/java-tests/testData/find/findInPath/src/s.java
@@ -0,0 +1,3 @@
+class s {
+ String s = "xx.yy";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/find/findInPath/src/x/dd.properties b/java/java-tests/testData/find/findInPath/src/x/dd.properties
new file mode 100644
index 0000000..f2e9b82
--- /dev/null
+++ b/java/java-tests/testData/find/findInPath/src/x/dd.properties
@@ -0,0 +1,3 @@
+xx.yy=zzzz
+aaa.bbb=zzz
+cccc=c
\ No newline at end of file
diff --git a/java/java-tests/testData/find/findManager/src/test/FindTest.java b/java/java-tests/testData/find/findManager/src/test/FindTest.java
new file mode 100644
index 0000000..6cd59ff
--- /dev/null
+++ b/java/java-tests/testData/find/findManager/src/test/FindTest.java
@@ -0,0 +1,11 @@
+package test;
+public class FindTest {
+    public static void main(String[] args) {
+        System.out.println(" done");
+//done
+        System.out.println("done");
+        System.out.println(" done");
+        System.out.println(" done2");
+//done!
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/find/findManager/src1/tests/FindTests.java b/java/java-tests/testData/find/findManager/src1/tests/FindTests.java
new file mode 100644
index 0000000..657becd
--- /dev/null
+++ b/java/java-tests/testData/find/findManager/src1/tests/FindTests.java
@@ -0,0 +1,11 @@
+package tests;
+public class FindTests {
+    public static void main(String[] args) {
+        System.out.println(" done");
+//done
+        System.out.println("done");
+        System.out.println(" done");
+        System.out.println(" done2");
+//done!
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/find/libUnderProject/lib/B.java b/java/java-tests/testData/find/libUnderProject/lib/B.java
new file mode 100644
index 0000000..634b318
--- /dev/null
+++ b/java/java-tests/testData/find/libUnderProject/lib/B.java
@@ -0,0 +1 @@
+// TargetWord
\ No newline at end of file
diff --git a/java/java-tests/testData/find/libUnderProject/src/A.java b/java/java-tests/testData/find/libUnderProject/src/A.java
new file mode 100644
index 0000000..634b318
--- /dev/null
+++ b/java/java-tests/testData/find/libUnderProject/src/A.java
@@ -0,0 +1 @@
+// TargetWord
\ No newline at end of file
diff --git a/java/java-tests/testData/ide/fileTemplates/1.out.txt b/java/java-tests/testData/ide/fileTemplates/1.out.txt
new file mode 100644
index 0000000..ccbe143
--- /dev/null
+++ b/java/java-tests/testData/ide/fileTemplates/1.out.txt
@@ -0,0 +1,9 @@
+ /*
+ * $Author$
+ * $Id$
+ * @author Misha Yakovlev
+ * @version $Revision$
+*/
+package com.idea;
+public class MyClass {
+}
diff --git a/java/java-tests/testData/ide/fileTemplates/1.prop.txt b/java/java-tests/testData/ide/fileTemplates/1.prop.txt
new file mode 100644
index 0000000..41ac9b6
--- /dev/null
+++ b/java/java-tests/testData/ide/fileTemplates/1.prop.txt
@@ -0,0 +1,3 @@
+Author=Misha Yakovlev
+PACKAGE_NAME=com.idea
+Name=MyClass
diff --git a/java/java-tests/testData/ide/fileTemplates/1.txt b/java/java-tests/testData/ide/fileTemplates/1.txt
new file mode 100644
index 0000000..33a86b6
--- /dev/null
+++ b/java/java-tests/testData/ide/fileTemplates/1.txt
@@ -0,0 +1,9 @@
+ /*
+ * \$Author$
+ * $Id$
+ * @author $Author
+ * @version $Revision$
+*/
+package ${PACKAGE_NAME};
+public class ${Name} {
+}
diff --git a/java/java-tests/testData/ide/fileTemplates/2.out.txt b/java/java-tests/testData/ide/fileTemplates/2.out.txt
new file mode 100644
index 0000000..9bb6e6b
--- /dev/null
+++ b/java/java-tests/testData/ide/fileTemplates/2.out.txt
@@ -0,0 +1,5 @@
+// MyClass.java
+// $Author$
+// Created on 31-Dec-2002 by myakovlev
+package com.idea;
+public class MyClass { }
diff --git a/java/java-tests/testData/ide/fileTemplates/2.prop.txt b/java/java-tests/testData/ide/fileTemplates/2.prop.txt
new file mode 100644
index 0000000..35b094a
--- /dev/null
+++ b/java/java-tests/testData/ide/fileTemplates/2.prop.txt
@@ -0,0 +1,4 @@
+NAME=MyClass
+DATE=31-Dec-2002
+USER=myakovlev
+PACKAGE_NAME=com.idea
diff --git a/java/java-tests/testData/ide/fileTemplates/2.txt b/java/java-tests/testData/ide/fileTemplates/2.txt
new file mode 100644
index 0000000..b812885
--- /dev/null
+++ b/java/java-tests/testData/ide/fileTemplates/2.txt
@@ -0,0 +1,5 @@
+// ${NAME}.java
+// $Author$
+// Created on $DATE by $USER
+package $PACKAGE_NAME;
+public class $NAME { }
diff --git a/java/java-tests/testData/ide/fileTemplates/3.out.txt b/java/java-tests/testData/ide/fileTemplates/3.out.txt
new file mode 100644
index 0000000..63c5369
--- /dev/null
+++ b/java/java-tests/testData/ide/fileTemplates/3.out.txt
@@ -0,0 +1,8 @@
+package com.idea;
+
+/*
+ * $Log$
+ * @version $Id$
+ */
+public class MyClass {
+}
diff --git a/java/java-tests/testData/ide/fileTemplates/3.prop.txt b/java/java-tests/testData/ide/fileTemplates/3.prop.txt
new file mode 100644
index 0000000..bd95241
--- /dev/null
+++ b/java/java-tests/testData/ide/fileTemplates/3.prop.txt
@@ -0,0 +1,2 @@
+NAME=MyClass
+PACKAGE_NAME=com.idea
diff --git a/java/java-tests/testData/ide/fileTemplates/3.txt b/java/java-tests/testData/ide/fileTemplates/3.txt
new file mode 100644
index 0000000..c3360d7
--- /dev/null
+++ b/java/java-tests/testData/ide/fileTemplates/3.txt
@@ -0,0 +1,8 @@
+package ${PACKAGE_NAME};
+
+/*
+ * $Log$
+ * @version $Id$
+ */
+public class ${NAME} {
+}
diff --git a/java/java-tests/testData/ide/fileTemplates/4.out.txt b/java/java-tests/testData/ide/fileTemplates/4.out.txt
new file mode 100644
index 0000000..0a724a4
--- /dev/null
+++ b/java/java-tests/testData/ide/fileTemplates/4.out.txt
@@ -0,0 +1,2 @@
+<c:out value="${model.name}"/>
+
diff --git a/java/java-tests/testData/ide/fileTemplates/4.prop.txt b/java/java-tests/testData/ide/fileTemplates/4.prop.txt
new file mode 100644
index 0000000..139597f
--- /dev/null
+++ b/java/java-tests/testData/ide/fileTemplates/4.prop.txt
@@ -0,0 +1,2 @@
+
+
diff --git a/java/java-tests/testData/ide/fileTemplates/4.txt b/java/java-tests/testData/ide/fileTemplates/4.txt
new file mode 100644
index 0000000..0a724a4
--- /dev/null
+++ b/java/java-tests/testData/ide/fileTemplates/4.txt
@@ -0,0 +1,2 @@
+<c:out value="${model.name}"/>
+
diff --git a/java/java-tests/testData/ide/fileTemplates/5.out.txt b/java/java-tests/testData/ide/fileTemplates/5.out.txt
new file mode 100644
index 0000000..b54a4a0
--- /dev/null
+++ b/java/java-tests/testData/ide/fileTemplates/5.out.txt
@@ -0,0 +1,13 @@
+ /*
+ * ven$
+ * $Id$
+ * @author ven
+ * @version $Revision$
+ * This is a file header
+*/
+package com.idea;
+public class MyClass {
+  // What a wonderful world!
+  // ven
+  // ${my.name}
+}
diff --git a/java/java-tests/testData/ide/fileTemplates/5.prop.txt b/java/java-tests/testData/ide/fileTemplates/5.prop.txt
new file mode 100644
index 0000000..6325250
--- /dev/null
+++ b/java/java-tests/testData/ide/fileTemplates/5.prop.txt
@@ -0,0 +1,3 @@
+Author=ven
+PACKAGE_NAME=com.idea
+Name=MyClass
diff --git a/java/java-tests/testData/ide/fileTemplates/5.txt b/java/java-tests/testData/ide/fileTemplates/5.txt
new file mode 100644
index 0000000..50f83621
--- /dev/null
+++ b/java/java-tests/testData/ide/fileTemplates/5.txt
@@ -0,0 +1,7 @@
+#parse("include1.inc.txt")
+package ${PACKAGE_NAME};
+public class ${Name} {
+  // What a wonderful world!
+  // $Author
+  // ${my.name}
+}
diff --git a/java/java-tests/testData/ide/fileTemplates/include1.inc.txt b/java/java-tests/testData/ide/fileTemplates/include1.inc.txt
new file mode 100644
index 0000000..2be8aa8
--- /dev/null
+++ b/java/java-tests/testData/ide/fileTemplates/include1.inc.txt
@@ -0,0 +1,7 @@
+ /*
+ * $Author$
+ * $Id$
+ * @author $Author
+ * @version $Revision$
+ * This is a file header
+*/
diff --git a/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005/A.java b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005/A.java
new file mode 100644
index 0000000..a00769f
--- /dev/null
+++ b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005/A.java
@@ -0,0 +1,6 @@
+class A {
+  public static void main(String[] args) {
+    D d = new D();
+    d.xyzzy();
+  }
+}
diff --git a/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005/B.java b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005/B.java
new file mode 100644
index 0000000..805e99b
--- /dev/null
+++ b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005/B.java
@@ -0,0 +1,4 @@
+class B {
+  public void xyzzy() {
+  }
+}
diff --git a/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005/D.java b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005/D.java
new file mode 100644
index 0000000..381134f
--- /dev/null
+++ b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005/D.java
@@ -0,0 +1,2 @@
+class D extends B {
+}
diff --git a/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005/IdeaDev41005_verification.xml b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005/IdeaDev41005_verification.xml
new file mode 100644
index 0000000..96e2954
--- /dev/null
+++ b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005/IdeaDev41005_verification.xml
@@ -0,0 +1,4 @@
+<node text="B.xyzzy()  ()" base="true">
+  <node text="A.main(String[])  ()">
+  </node>
+</node>
diff --git a/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_Inheritance/A.java b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_Inheritance/A.java
new file mode 100644
index 0000000..d2557a79
--- /dev/null
+++ b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_Inheritance/A.java
@@ -0,0 +1,9 @@
+class A {
+  public static void main(String[] args) {
+    D d = new D();
+    d.xyzzy();
+
+    C c = new C();
+    c.xyzzy();
+  }
+}
diff --git a/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_Inheritance/B.java b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_Inheritance/B.java
new file mode 100644
index 0000000..805e99b
--- /dev/null
+++ b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_Inheritance/B.java
@@ -0,0 +1,4 @@
+class B {
+  public void xyzzy() {
+  }
+}
diff --git a/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_Inheritance/C.java b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_Inheritance/C.java
new file mode 100644
index 0000000..be4cfc1
--- /dev/null
+++ b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_Inheritance/C.java
@@ -0,0 +1,2 @@
+class C extends B {
+}
diff --git a/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_Inheritance/D.java b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_Inheritance/D.java
new file mode 100644
index 0000000..5f10411
--- /dev/null
+++ b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_Inheritance/D.java
@@ -0,0 +1,4 @@
+class D extends B {
+  public void xyzzy() {
+  }
+}
diff --git a/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_Inheritance/IdeaDev41005_Inheritance_verification.xml b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_Inheritance/IdeaDev41005_Inheritance_verification.xml
new file mode 100644
index 0000000..d67f954
--- /dev/null
+++ b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_Inheritance/IdeaDev41005_Inheritance_verification.xml
@@ -0,0 +1,4 @@
+<node text="D.xyzzy()  ()" base="true">
+  <node text="A.main(String[])(2 usages)  ()">
+  </node>
+</node>
diff --git a/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_Sibling/A.java b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_Sibling/A.java
new file mode 100644
index 0000000..d2557a79
--- /dev/null
+++ b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_Sibling/A.java
@@ -0,0 +1,9 @@
+class A {
+  public static void main(String[] args) {
+    D d = new D();
+    d.xyzzy();
+
+    C c = new C();
+    c.xyzzy();
+  }
+}
diff --git a/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_Sibling/B.java b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_Sibling/B.java
new file mode 100644
index 0000000..805e99b
--- /dev/null
+++ b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_Sibling/B.java
@@ -0,0 +1,4 @@
+class B {
+  public void xyzzy() {
+  }
+}
diff --git a/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_Sibling/C.java b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_Sibling/C.java
new file mode 100644
index 0000000..1a16dd1
--- /dev/null
+++ b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_Sibling/C.java
@@ -0,0 +1,4 @@
+class C extends B {
+  public void xyzzy() {
+  }
+}
diff --git a/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_Sibling/D.java b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_Sibling/D.java
new file mode 100644
index 0000000..5f10411
--- /dev/null
+++ b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_Sibling/D.java
@@ -0,0 +1,4 @@
+class D extends B {
+  public void xyzzy() {
+  }
+}
diff --git a/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_Sibling/IdeaDev41005_Sibling_verification.xml b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_Sibling/IdeaDev41005_Sibling_verification.xml
new file mode 100644
index 0000000..026cf00
--- /dev/null
+++ b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_Sibling/IdeaDev41005_Sibling_verification.xml
@@ -0,0 +1,4 @@
+<node text="D.xyzzy()  ()" base="true">
+  <node text="A.main(String[])  ()">
+  </node>
+</node>
diff --git a/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_SiblingUnderInheritance/A.java b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_SiblingUnderInheritance/A.java
new file mode 100644
index 0000000..5768b5e
--- /dev/null
+++ b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_SiblingUnderInheritance/A.java
@@ -0,0 +1,9 @@
+class A {
+  public static void main(String[] args) {
+    D d = new D();
+    d.xyzzy();
+
+    CChild c = new CChild();
+    c.xyzzy();
+  }
+}
diff --git a/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_SiblingUnderInheritance/B.java b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_SiblingUnderInheritance/B.java
new file mode 100644
index 0000000..805e99b
--- /dev/null
+++ b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_SiblingUnderInheritance/B.java
@@ -0,0 +1,4 @@
+class B {
+  public void xyzzy() {
+  }
+}
diff --git a/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_SiblingUnderInheritance/C.java b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_SiblingUnderInheritance/C.java
new file mode 100644
index 0000000..1a16dd1
--- /dev/null
+++ b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_SiblingUnderInheritance/C.java
@@ -0,0 +1,4 @@
+class C extends B {
+  public void xyzzy() {
+  }
+}
diff --git a/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_SiblingUnderInheritance/CChild.java b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_SiblingUnderInheritance/CChild.java
new file mode 100644
index 0000000..41ef7e8
--- /dev/null
+++ b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_SiblingUnderInheritance/CChild.java
@@ -0,0 +1,2 @@
+class CChild extends C {
+}
diff --git a/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_SiblingUnderInheritance/D.java b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_SiblingUnderInheritance/D.java
new file mode 100644
index 0000000..5f10411
--- /dev/null
+++ b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_SiblingUnderInheritance/D.java
@@ -0,0 +1,4 @@
+class D extends B {
+  public void xyzzy() {
+  }
+}
diff --git a/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_SiblingUnderInheritance/IdeaDev41005_SiblingUnderInheritance_verification.xml b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_SiblingUnderInheritance/IdeaDev41005_SiblingUnderInheritance_verification.xml
new file mode 100644
index 0000000..026cf00
--- /dev/null
+++ b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41005_SiblingUnderInheritance/IdeaDev41005_SiblingUnderInheritance_verification.xml
@@ -0,0 +1,4 @@
+<node text="D.xyzzy()  ()" base="true">
+  <node text="A.main(String[])  ()">
+  </node>
+</node>
diff --git a/java/java-tests/testData/ide/hierarchy/call/IdeaDev41232/A.java b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41232/A.java
new file mode 100644
index 0000000..5734020
--- /dev/null
+++ b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41232/A.java
@@ -0,0 +1,4 @@
+class A {
+  public static void main() {
+  }
+}
diff --git a/java/java-tests/testData/ide/hierarchy/call/IdeaDev41232/B.java b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41232/B.java
new file mode 100644
index 0000000..2e412d2
--- /dev/null
+++ b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41232/B.java
@@ -0,0 +1,5 @@
+class B {
+  public void xyzzy() {
+    A.main();
+  }
+}
diff --git a/java/java-tests/testData/ide/hierarchy/call/IdeaDev41232/IdeaDev41232_verification.xml b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41232/IdeaDev41232_verification.xml
new file mode 100644
index 0000000..c32f6b8
--- /dev/null
+++ b/java/java-tests/testData/ide/hierarchy/call/IdeaDev41232/IdeaDev41232_verification.xml
@@ -0,0 +1,4 @@
+<node text="A.main()  ()" base="true">
+  <node text="B.xyzzy()  ()">
+  </node>
+</node>
diff --git a/java/java-tests/testData/ide/plugins/pluginDescriptor/asp.jar b/java/java-tests/testData/ide/plugins/pluginDescriptor/asp.jar
new file mode 100644
index 0000000..69a1c6d
--- /dev/null
+++ b/java/java-tests/testData/ide/plugins/pluginDescriptor/asp.jar
Binary files differ
diff --git a/java/java-tests/testData/ide/plugins/pluginDescriptor/resources_en.jar b/java/java-tests/testData/ide/plugins/pluginDescriptor/resources_en.jar
new file mode 100644
index 0000000..f14264f
--- /dev/null
+++ b/java/java-tests/testData/ide/plugins/pluginDescriptor/resources_en.jar
Binary files differ
diff --git a/java/java-tests/testData/ide/plugins/reorderJars/annotations.jar b/java/java-tests/testData/ide/plugins/reorderJars/annotations.jar
new file mode 100644
index 0000000..af0b97b
--- /dev/null
+++ b/java/java-tests/testData/ide/plugins/reorderJars/annotations.jar
Binary files differ
diff --git a/java/java-tests/testData/ide/plugins/reorderJars/order.txt b/java/java-tests/testData/ide/plugins/reorderJars/order.txt
new file mode 100644
index 0000000..c173e2e
--- /dev/null
+++ b/java/java-tests/testData/ide/plugins/reorderJars/order.txt
@@ -0,0 +1,2 @@
+org/jetbrains/annotations/Nullable.class:/annotations.jar
+org/jetbrains/annotations/NotNull.class:/annotations.jar
diff --git a/java/java-tests/testData/ide/plugins/reorderJars/zkm.jar b/java/java-tests/testData/ide/plugins/reorderJars/zkm.jar
new file mode 100644
index 0000000..c1d6620
--- /dev/null
+++ b/java/java-tests/testData/ide/plugins/reorderJars/zkm.jar
Binary files differ
diff --git a/java/java-tests/testData/ide/plugins/reorderJars/zkmOrder.txt b/java/java-tests/testData/ide/plugins/reorderJars/zkmOrder.txt
new file mode 100644
index 0000000..87e1541
--- /dev/null
+++ b/java/java-tests/testData/ide/plugins/reorderJars/zkmOrder.txt
@@ -0,0 +1 @@
+com/intellij/zkm/ZKMBundle.class:/zkm.jar
diff --git a/java/java-tests/testData/ide/sourceRootDetection/defaultPackage/src/MyClass.java b/java/java-tests/testData/ide/sourceRootDetection/defaultPackage/src/MyClass.java
new file mode 100644
index 0000000..f717ea4
--- /dev/null
+++ b/java/java-tests/testData/ide/sourceRootDetection/defaultPackage/src/MyClass.java
@@ -0,0 +1,2 @@
+public class MyClass {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/ide/sourceRootDetection/defaultPackageWithImport/src/MyClass.java b/java/java-tests/testData/ide/sourceRootDetection/defaultPackageWithImport/src/MyClass.java
new file mode 100644
index 0000000..a1f8b59
--- /dev/null
+++ b/java/java-tests/testData/ide/sourceRootDetection/defaultPackageWithImport/src/MyClass.java
@@ -0,0 +1,9 @@
+import java.util.*;
+//aaa
+import java.io.OutputStream;
+
+/**
+ * my class
+ */
+public class MyClass {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/ide/sourceRootDetection/garbage/EmptyClass.java b/java/java-tests/testData/ide/sourceRootDetection/garbage/EmptyClass.java
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/ide/sourceRootDetection/garbage/EmptyClass.java
diff --git a/java/java-tests/testData/ide/sourceRootDetection/garbage/Garbage.java b/java/java-tests/testData/ide/sourceRootDetection/garbage/Garbage.java
new file mode 100644
index 0000000..d58adb0
--- /dev/null
+++ b/java/java-tests/testData/ide/sourceRootDetection/garbage/Garbage.java
@@ -0,0 +1 @@
+garbage
\ No newline at end of file
diff --git a/java/java-tests/testData/ide/sourceRootDetection/simple/src/pack/MyClass.java b/java/java-tests/testData/ide/sourceRootDetection/simple/src/pack/MyClass.java
new file mode 100644
index 0000000..9578e46
--- /dev/null
+++ b/java/java-tests/testData/ide/sourceRootDetection/simple/src/pack/MyClass.java
@@ -0,0 +1,5 @@
+//comment
+package pack;
+
+public class MyClass {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/ide/sourceRootDetection/twoRoots/src1/abc/MyClass.java b/java/java-tests/testData/ide/sourceRootDetection/twoRoots/src1/abc/MyClass.java
new file mode 100644
index 0000000..6581f68
--- /dev/null
+++ b/java/java-tests/testData/ide/sourceRootDetection/twoRoots/src1/abc/MyClass.java
@@ -0,0 +1,3 @@
+package abc;
+
+class MyClass{}
\ No newline at end of file
diff --git a/java/java-tests/testData/ide/sourceRootDetection/twoRoots/src2/Class2.java b/java/java-tests/testData/ide/sourceRootDetection/twoRoots/src2/Class2.java
new file mode 100644
index 0000000..3109a36
--- /dev/null
+++ b/java/java-tests/testData/ide/sourceRootDetection/twoRoots/src2/Class2.java
@@ -0,0 +1,3 @@
+package xyz;
+
+public class Class2{}
\ No newline at end of file
diff --git a/java/java-tests/testData/ide/sourceRootDetection/withPrefix/MyClass.java b/java/java-tests/testData/ide/sourceRootDetection/withPrefix/MyClass.java
new file mode 100644
index 0000000..12b26e5
--- /dev/null
+++ b/java/java-tests/testData/ide/sourceRootDetection/withPrefix/MyClass.java
@@ -0,0 +1,4 @@
+package xxx.yyy;
+
+public class MyClass {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/canBeFinal/SCR6073/expected.xml b/java/java-tests/testData/inspection/canBeFinal/SCR6073/expected.xml
new file mode 100644
index 0000000..cb34c56
--- /dev/null
+++ b/java/java-tests/testData/inspection/canBeFinal/SCR6073/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>A.java</file>
+    <line>2</line>
+    <description>final</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/canBeFinal/SCR6073/src/A.java b/java/java-tests/testData/inspection/canBeFinal/SCR6073/src/A.java
new file mode 100644
index 0000000..5705517
--- /dev/null
+++ b/java/java-tests/testData/inspection/canBeFinal/SCR6073/src/A.java
@@ -0,0 +1,6 @@
+final class A {
+    int b;
+    A(int c) {
+        b=c;
+    }
+}
diff --git a/java/java-tests/testData/inspection/canBeFinal/SCR6781/expected.xml b/java/java-tests/testData/inspection/canBeFinal/SCR6781/expected.xml
new file mode 100644
index 0000000..cb34c56
--- /dev/null
+++ b/java/java-tests/testData/inspection/canBeFinal/SCR6781/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>A.java</file>
+    <line>2</line>
+    <description>final</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/canBeFinal/SCR6781/src/A.java b/java/java-tests/testData/inspection/canBeFinal/SCR6781/src/A.java
new file mode 100644
index 0000000..aac49bc
--- /dev/null
+++ b/java/java-tests/testData/inspection/canBeFinal/SCR6781/src/A.java
@@ -0,0 +1,12 @@
+final class A {
+    int m;
+    int k;
+    A() {
+        k=0;
+        m=0;
+    }
+    A(int n) {
+        this();
+        k=n;
+    }
+}
diff --git a/java/java-tests/testData/inspection/canBeFinal/SCR6845/expected.xml b/java/java-tests/testData/inspection/canBeFinal/SCR6845/expected.xml
new file mode 100644
index 0000000..d704d58
--- /dev/null
+++ b/java/java-tests/testData/inspection/canBeFinal/SCR6845/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/canBeFinal/SCR6845/src/A.java b/java/java-tests/testData/inspection/canBeFinal/SCR6845/src/A.java
new file mode 100644
index 0000000..17728b9
--- /dev/null
+++ b/java/java-tests/testData/inspection/canBeFinal/SCR6845/src/A.java
@@ -0,0 +1,3 @@
+final class A {
+    int k;
+}
diff --git a/java/java-tests/testData/inspection/canBeFinal/SCR6861/expected.xml b/java/java-tests/testData/inspection/canBeFinal/SCR6861/expected.xml
new file mode 100644
index 0000000..cb34c56
--- /dev/null
+++ b/java/java-tests/testData/inspection/canBeFinal/SCR6861/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>A.java</file>
+    <line>2</line>
+    <description>final</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/canBeFinal/SCR6861/src/A.java b/java/java-tests/testData/inspection/canBeFinal/SCR6861/src/A.java
new file mode 100644
index 0000000..479e1ab
--- /dev/null
+++ b/java/java-tests/testData/inspection/canBeFinal/SCR6861/src/A.java
@@ -0,0 +1,12 @@
+final class A {
+    int k;
+    int m;
+ {
+  k = 0;
+  m = 0;
+ }
+
+ A() {
+   m = 0;
+ }
+}
diff --git a/java/java-tests/testData/inspection/canBeFinal/SCR7737/expected.xml b/java/java-tests/testData/inspection/canBeFinal/SCR7737/expected.xml
new file mode 100644
index 0000000..d704d58
--- /dev/null
+++ b/java/java-tests/testData/inspection/canBeFinal/SCR7737/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/canBeFinal/SCR7737/ext_src/B.java b/java/java-tests/testData/inspection/canBeFinal/SCR7737/ext_src/B.java
new file mode 100644
index 0000000..526b327
--- /dev/null
+++ b/java/java-tests/testData/inspection/canBeFinal/SCR7737/ext_src/B.java
@@ -0,0 +1,6 @@
+// B.java
+class B extends A {
+    public final void run() {
+    }
+}
+
diff --git a/java/java-tests/testData/inspection/canBeFinal/SCR7737/src/A.java b/java/java-tests/testData/inspection/canBeFinal/SCR7737/src/A.java
new file mode 100644
index 0000000..aee28c8
--- /dev/null
+++ b/java/java-tests/testData/inspection/canBeFinal/SCR7737/src/A.java
@@ -0,0 +1,6 @@
+// A.java
+class A implements Runnable {
+    public void run() {
+    }
+}
+
diff --git a/java/java-tests/testData/inspection/canBeFinal/fieldAndTryBlock/expected.xml b/java/java-tests/testData/inspection/canBeFinal/fieldAndTryBlock/expected.xml
new file mode 100644
index 0000000..9ac879d
--- /dev/null
+++ b/java/java-tests/testData/inspection/canBeFinal/fieldAndTryBlock/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems />
+
diff --git a/java/java-tests/testData/inspection/canBeFinal/fieldAndTryBlock/src/Foo.java b/java/java-tests/testData/inspection/canBeFinal/fieldAndTryBlock/src/Foo.java
new file mode 100644
index 0000000..6341b22
--- /dev/null
+++ b/java/java-tests/testData/inspection/canBeFinal/fieldAndTryBlock/src/Foo.java
@@ -0,0 +1,10 @@
+public final class Foo {
+   private String s;
+ 
+   public Foo() {
+        try {
+            s = "test";
+        } catch (Exception e) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/canBeFinal/fieldAssignmentssInInitializer/expected.xml b/java/java-tests/testData/inspection/canBeFinal/fieldAssignmentssInInitializer/expected.xml
new file mode 100644
index 0000000..d704d58
--- /dev/null
+++ b/java/java-tests/testData/inspection/canBeFinal/fieldAssignmentssInInitializer/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/canBeFinal/fieldAssignmentssInInitializer/src/Foo.java b/java/java-tests/testData/inspection/canBeFinal/fieldAssignmentssInInitializer/src/Foo.java
new file mode 100644
index 0000000..3780866
--- /dev/null
+++ b/java/java-tests/testData/inspection/canBeFinal/fieldAssignmentssInInitializer/src/Foo.java
@@ -0,0 +1,7 @@
+final class Foo {
+  static boolean flag;
+  static {
+    flag = true;
+    flag = false;
+  }
+}
diff --git a/java/java-tests/testData/inspection/canBeFinal/fields/expected.xml b/java/java-tests/testData/inspection/canBeFinal/fields/expected.xml
new file mode 100644
index 0000000..a42f053
--- /dev/null
+++ b/java/java-tests/testData/inspection/canBeFinal/fields/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>  
+  <problem>
+    <file>Foo.java</file>
+    <line>3</line>
+    <description>final</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/canBeFinal/fields/src/Foo.java b/java/java-tests/testData/inspection/canBeFinal/fields/src/Foo.java
new file mode 100644
index 0000000..5097ab5
--- /dev/null
+++ b/java/java-tests/testData/inspection/canBeFinal/fields/src/Foo.java
@@ -0,0 +1,23 @@
+public final class Foo {
+   private Object f1 = new Object(); // Can be final but unused
+   private Object f2;  // Can be final
+   private Object f3;  // Cannot be final
+   private Object f4;  // cannot
+   private Object f5 = new Object();  // cannot
+
+ 
+   public Foo() {
+        f2 = new Object();
+        try {
+            f3 = "test";
+        } catch (Exception e) {
+        }
+        f5 = new Object();
+   }
+
+   public Foo(int i) {
+       f2 = new Object();
+       f4 = new Object();
+       f5 = new Object();
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/canBeFinal/fieldsReading/expected.xml b/java/java-tests/testData/inspection/canBeFinal/fieldsReading/expected.xml
new file mode 100644
index 0000000..a42f053
--- /dev/null
+++ b/java/java-tests/testData/inspection/canBeFinal/fieldsReading/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>  
+  <problem>
+    <file>Foo.java</file>
+    <line>3</line>
+    <description>final</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/canBeFinal/fieldsReading/src/Foo.java b/java/java-tests/testData/inspection/canBeFinal/fieldsReading/src/Foo.java
new file mode 100644
index 0000000..9d5a298
--- /dev/null
+++ b/java/java-tests/testData/inspection/canBeFinal/fieldsReading/src/Foo.java
@@ -0,0 +1,27 @@
+public final class Foo {
+   private Object f1 = new Object(); // Can be final but unused
+   private Object f2;  // Can be final
+   private Object f3;  // Cannot be final
+   private Object f4;  // cannot
+   private Object f5 = new Object();  // cannot
+
+ 
+   public Foo() {
+        f2 = new Object();
+        try {
+            f3 = "test";
+        } catch (Exception e) {
+        }
+        f5 = new Object();
+   }
+
+   public Foo(int i) {
+       f2 = new Object();
+       f4 = new Object();
+       f5 = new Object();
+   }
+
+   public Object getF2(){
+     return f2;
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/canBeFinal/methodInheritance/expected.xml b/java/java-tests/testData/inspection/canBeFinal/methodInheritance/expected.xml
new file mode 100644
index 0000000..9ac879d
--- /dev/null
+++ b/java/java-tests/testData/inspection/canBeFinal/methodInheritance/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems />
+
diff --git a/java/java-tests/testData/inspection/canBeFinal/methodInheritance/src/a.java b/java/java-tests/testData/inspection/canBeFinal/methodInheritance/src/a.java
new file mode 100644
index 0000000..e91ac02
--- /dev/null
+++ b/java/java-tests/testData/inspection/canBeFinal/methodInheritance/src/a.java
@@ -0,0 +1,10 @@
+public final class a {
+  public final void foo() {
+  }
+}
+
+final class b extends a {
+  public void foo() {}
+}
+
+
diff --git a/java/java-tests/testData/inspection/canBeFinal/privateInners/expected.xml b/java/java-tests/testData/inspection/canBeFinal/privateInners/expected.xml
new file mode 100644
index 0000000..d8148f0
--- /dev/null
+++ b/java/java-tests/testData/inspection/canBeFinal/privateInners/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Foo.java</file>
+    <line>8</line>
+    <description>Declaration can have final modifier</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/canBeFinal/privateInners/src/Foo.java b/java/java-tests/testData/inspection/canBeFinal/privateInners/src/Foo.java
new file mode 100644
index 0000000..2257f00
--- /dev/null
+++ b/java/java-tests/testData/inspection/canBeFinal/privateInners/src/Foo.java
@@ -0,0 +1,10 @@
+public final class Foo {
+  private class InnerSuper {
+  }
+
+  private final class InnerInheritor1 extends InnerSuper {
+  }
+
+  private class InnerInheritor2 extends InnerSuper {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/canBeFinal/simpleClassInheritance/expected.xml b/java/java-tests/testData/inspection/canBeFinal/simpleClassInheritance/expected.xml
new file mode 100644
index 0000000..9ac879d
--- /dev/null
+++ b/java/java-tests/testData/inspection/canBeFinal/simpleClassInheritance/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems />
+
diff --git a/java/java-tests/testData/inspection/canBeFinal/simpleClassInheritance/src/Foo.java b/java/java-tests/testData/inspection/canBeFinal/simpleClassInheritance/src/Foo.java
new file mode 100644
index 0000000..620b67f
--- /dev/null
+++ b/java/java-tests/testData/inspection/canBeFinal/simpleClassInheritance/src/Foo.java
@@ -0,0 +1,5 @@
+public final class Foo extends Bar {
+}
+
+class Bar {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/canBeFinal/simpleClassInheritance1/expected.xml b/java/java-tests/testData/inspection/canBeFinal/simpleClassInheritance1/expected.xml
new file mode 100644
index 0000000..437df09
--- /dev/null
+++ b/java/java-tests/testData/inspection/canBeFinal/simpleClassInheritance1/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Foo.java</file>
+    <line>1</line>
+    <description>Declaration can have final modifier</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/canBeFinal/simpleClassInheritance1/src/Foo.java b/java/java-tests/testData/inspection/canBeFinal/simpleClassInheritance1/src/Foo.java
new file mode 100644
index 0000000..3c0d442
--- /dev/null
+++ b/java/java-tests/testData/inspection/canBeFinal/simpleClassInheritance1/src/Foo.java
@@ -0,0 +1,5 @@
+public class Foo extends Bar {
+}
+
+class Bar {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/canBeFinal/simpleClassInheritanceField/expected.xml b/java/java-tests/testData/inspection/canBeFinal/simpleClassInheritanceField/expected.xml
new file mode 100644
index 0000000..9ac879d
--- /dev/null
+++ b/java/java-tests/testData/inspection/canBeFinal/simpleClassInheritanceField/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems />
+
diff --git a/java/java-tests/testData/inspection/canBeFinal/simpleClassInheritanceField/src/Foo.java b/java/java-tests/testData/inspection/canBeFinal/simpleClassInheritanceField/src/Foo.java
new file mode 100644
index 0000000..d5772f53
--- /dev/null
+++ b/java/java-tests/testData/inspection/canBeFinal/simpleClassInheritanceField/src/Foo.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2000-2011 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.
+ */
+public class A {
+    protected String myString;
+    protected String myAnotherString;
+
+    public A(String s) {
+        myString = s;
+    }
+}
+
+final class AImpl extends A {
+    public AImpl(String s) {
+        super(s);
+        myString = s + "";
+        myAnotherString = s;
+    }
+}
diff --git a/java/java-tests/testData/inspection/canBeFinal/staticClassInitializer/expected.xml b/java/java-tests/testData/inspection/canBeFinal/staticClassInitializer/expected.xml
new file mode 100644
index 0000000..ec272ab
--- /dev/null
+++ b/java/java-tests/testData/inspection/canBeFinal/staticClassInitializer/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems/>
+
diff --git a/java/java-tests/testData/inspection/canBeFinal/staticClassInitializer/src/Foo.java b/java/java-tests/testData/inspection/canBeFinal/staticClassInitializer/src/Foo.java
new file mode 100644
index 0000000..341a7ba
--- /dev/null
+++ b/java/java-tests/testData/inspection/canBeFinal/staticClassInitializer/src/Foo.java
@@ -0,0 +1,21 @@
+final class Test {
+    static final Test A = new Test();
+
+    private int i = 99;
+
+    static {
+        A.i = 10;
+    }
+}
+
+enum Test1 {
+    A, B, C;
+
+    private int i = 99;
+
+    static {
+        A.i = 10;
+        B.i = 20;
+        System.out.println(A.i);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/canBeFinal/staticFields/expected.xml b/java/java-tests/testData/inspection/canBeFinal/staticFields/expected.xml
new file mode 100644
index 0000000..96969d3
--- /dev/null
+++ b/java/java-tests/testData/inspection/canBeFinal/staticFields/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>  
+  <problem>
+    <file>Foo.java</file>
+    <line>2</line>
+    <description>final</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/canBeFinal/staticFields/src/Foo.java b/java/java-tests/testData/inspection/canBeFinal/staticFields/src/Foo.java
new file mode 100644
index 0000000..c96e201
--- /dev/null
+++ b/java/java-tests/testData/inspection/canBeFinal/staticFields/src/Foo.java
@@ -0,0 +1,13 @@
+public final class Foo {
+    private static Object f1 = new Object(); // Can be final but unused
+    private static Object object; // can't be final
+  
+    Foo() {
+        object = new Object();
+    }
+  
+    public static void main(String[] args) {
+        System.out.println(Foo.f1);
+        System.out.println(Foo.object);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/converter/options/options.after.xml b/java/java-tests/testData/inspection/converter/options/options.after.xml
new file mode 100644
index 0000000..a76b8fe
--- /dev/null
+++ b/java/java-tests/testData/inspection/converter/options/options.after.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<config>
+  <profiles>
+    <profile version="1.0" is_locked="false">
+      <option name="myName" value="Project Default" />
+      <option name="myLocal" value="false" />
+    </profile>
+    <profile version="1.0" is_locked="false">
+      <option name="myName" value="p1" />
+      <option name="myLocal" value="false" />
+      <inspection_tool class="ConstantConditions" enabled="true" level="WARNING" enabled_by_default="true">
+        <option name="SUGGEST_NULLABLE_ANNOTATIONS" value="true" />
+        <option name="DONT_REPORT_TRUE_ASSERT_STATEMENTS" value="true" />
+      </inspection_tool>
+    </profile>
+  </profiles>
+  <option name="PROJECT_PROFILE" value="p1" />
+  <option name="USE_PROJECT_PROFILE" value="true" />
+  <version value="1.0" />
+</config>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/converter/options/options.ipr b/java/java-tests/testData/inspection/converter/options/options.ipr
new file mode 100644
index 0000000..89406e9
--- /dev/null
+++ b/java/java-tests/testData/inspection/converter/options/options.ipr
@@ -0,0 +1,276 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project relativePaths="false" version="4">
+  <component name="AntConfiguration">
+    <defaultAnt bundledAnt="true" />
+  </component>
+  <component name="BuildJarProjectSettings">
+    <option name="BUILD_JARS_ON_MAKE" value="false" />
+  </component>
+  <component name="CodeStyleSettingsManager">
+    <option name="PER_PROJECT_SETTINGS" />
+    <option name="USE_PER_PROJECT_SETTINGS" value="false" />
+  </component>
+  <component name="CompilerConfiguration">
+    <option name="DEFAULT_COMPILER" value="Javac" />
+    <option name="DEPLOY_AFTER_MAKE" value="0" />
+    <resourceExtensions>
+      <entry name=".+\.(properties|xml|html|dtd|tld)" />
+      <entry name=".+\.(gif|png|jpeg|jpg)" />
+    </resourceExtensions>
+    <wildcardResourcePatterns>
+      <entry name="?*.properties" />
+      <entry name="?*.xml" />
+      <entry name="?*.gif" />
+      <entry name="?*.png" />
+      <entry name="?*.jpeg" />
+      <entry name="?*.jpg" />
+      <entry name="?*.html" />
+      <entry name="?*.dtd" />
+      <entry name="?*.tld" />
+      <entry name="?*.ftl" />
+    </wildcardResourcePatterns>
+  </component>
+  <component name="CopyrightManager" default="">
+    <module2copyright />
+  </component>
+  <component name="DataSourceManagerImpl">
+    <externalized />
+  </component>
+  <component name="DependencyValidationManager">
+    <option name="SKIP_IMPORT_STATEMENTS" value="false" />
+  </component>
+  <component name="EclipseCompilerSettings">
+    <option name="DEBUGGING_INFO" value="true" />
+    <option name="GENERATE_NO_WARNINGS" value="true" />
+    <option name="DEPRECATION" value="false" />
+    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+    <option name="MAXIMUM_HEAP_SIZE" value="128" />
+  </component>
+  <component name="EclipseEmbeddedCompilerSettings">
+    <option name="DEBUGGING_INFO" value="true" />
+    <option name="GENERATE_NO_WARNINGS" value="true" />
+    <option name="DEPRECATION" value="false" />
+    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+    <option name="MAXIMUM_HEAP_SIZE" value="128" />
+  </component>
+  <component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false" />
+  <component name="EntryPointsManager">
+    <entry_points version="2.0" />
+  </component>
+  <component name="InspectionProjectProfileManager">
+    <option name="PROJECT_PROFILE" value="p1" />
+    <profiles>
+      <profile version="1.0" is_locked="false">
+        <option name="myName" value="Project Default" />
+        <option name="myLocal" value="false" />
+      </profile>
+      <profile version="1.0" is_locked="false">
+        <option name="myName" value="p1" />
+        <option name="myLocal" value="false" />
+        <inspection_tool class="ConstantConditions" level="WARNING" enabled="true">
+            <option name="SUGGEST_NULLABLE_ANNOTATIONS" value="true" />
+            <option name="DONT_REPORT_TRUE_ASSERT_STATEMENTS" value="true" />
+        </inspection_tool>
+      </profile>
+    </profiles>
+    <list size="5">
+      <item index="0" class="java.lang.String" itemvalue="TYPO" />
+      <item index="1" class="java.lang.String" itemvalue="SERVER PROBLEM" />
+      <item index="2" class="java.lang.String" itemvalue="INFO" />
+      <item index="3" class="java.lang.String" itemvalue="WARNING" />
+      <item index="4" class="java.lang.String" itemvalue="ERROR" />
+    </list>
+  </component>
+  <component name="JavacSettings">
+    <option name="DEBUGGING_INFO" value="true" />
+    <option name="GENERATE_NO_WARNINGS" value="false" />
+    <option name="DEPRECATION" value="true" />
+    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+    <option name="MAXIMUM_HEAP_SIZE" value="128" />
+  </component>
+  <component name="JavadocGenerationManager">
+    <option name="OUTPUT_DIRECTORY" />
+    <option name="OPTION_SCOPE" value="protected" />
+    <option name="OPTION_HIERARCHY" value="true" />
+    <option name="OPTION_NAVIGATOR" value="true" />
+    <option name="OPTION_INDEX" value="true" />
+    <option name="OPTION_SEPARATE_INDEX" value="true" />
+    <option name="OPTION_DOCUMENT_TAG_USE" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_AUTHOR" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_VERSION" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_DEPRECATED" value="true" />
+    <option name="OPTION_DEPRECATED_LIST" value="true" />
+    <option name="OTHER_OPTIONS" value="" />
+    <option name="HEAP_SIZE" />
+    <option name="LOCALE" />
+    <option name="OPEN_IN_BROWSER" value="true" />
+  </component>
+  <component name="JikesSettings">
+    <option name="JIKES_PATH" value="" />
+    <option name="DEBUGGING_INFO" value="true" />
+    <option name="DEPRECATION" value="true" />
+    <option name="GENERATE_NO_WARNINGS" value="false" />
+    <option name="IS_EMACS_ERRORS_MODE" value="true" />
+    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+  </component>
+  <component name="Palette2">
+    <group name="Swing">
+      <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
+      </item>
+      <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
+        <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
+        <initial-values>
+          <property name="text" value="Button" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="RadioButton" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="CheckBox" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="Label" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
+          <preferred-size width="-1" height="20" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
+      </item>
+    </group>
+  </component>
+  <component name="ProjectDetails">
+    <option name="projectName" value="testng" />
+  </component>
+  <component name="ProjectFileVersion" converted="true">
+    <converter id="javaee-modules" />
+    <converter id="ror-modules" />
+    <converter id="SelenaRunConfToDiana" />
+  </component>
+  <component name="ProjectKey">
+    <option name="state" value="project://C:\anna\testng\testng.ipr" />
+  </component>
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/testng.iml" filepath="$PROJECT_DIR$/testng.iml" />
+      <module fileurl="file://$PROJECT_DIR$/testng-child/testng-child.iml" filepath="$PROJECT_DIR$/testng-child/testng-child.iml" />
+    </modules>
+  </component>
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_5" assert-keyword="true" jdk-15="true" project-jdk-name="1.6" project-jdk-type="JavaSDK">
+    <output url="file://$PROJECT_DIR$/out" />
+  </component>
+  <component name="ResourceManagerContainer">
+    <option name="myResourceBundles">
+      <value>
+        <list size="0" />
+      </value>
+    </option>
+  </component>
+  <component name="RmicSettings">
+    <option name="IS_EANABLED" value="false" />
+    <option name="DEBUGGING_INFO" value="true" />
+    <option name="GENERATE_NO_WARNINGS" value="false" />
+    <option name="GENERATE_IIOP_STUBS" value="false" />
+    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+  </component>
+  <component name="WebServicesPlugin" addRequiredLibraries="true" />
+  <UsedPathMacros>
+    <macro name="pp" description="" />
+  </UsedPathMacros>
+</project>
+
diff --git a/java/java-tests/testData/inspection/converter/scope/options.after.xml b/java/java-tests/testData/inspection/converter/scope/options.after.xml
new file mode 100644
index 0000000..ba18988
--- /dev/null
+++ b/java/java-tests/testData/inspection/converter/scope/options.after.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<config>
+  <profiles>
+    <profile version="1.0" is_locked="false">
+      <option name="myName" value="Project Default" />
+      <option name="myLocal" value="false" />
+    </profile>
+    <profile version="1.0" is_locked="false">
+      <option name="myName" value="p1" />
+      <option name="myLocal" value="false" />
+      <inspection_tool class="ConstantConditions" enabled="true" level="WARNING" enabled_by_default="true">
+        <scope name="Production" level="WARNING" enabled="true">
+          <option name="SUGGEST_NULLABLE_ANNOTATIONS" value="false" />
+          <option name="DONT_REPORT_TRUE_ASSERT_STATEMENTS" value="false" />
+        </scope>
+        <option name="SUGGEST_NULLABLE_ANNOTATIONS" value="true" />
+        <option name="DONT_REPORT_TRUE_ASSERT_STATEMENTS" value="true" />
+      </inspection_tool>
+    </profile>
+  </profiles>
+  <option name="PROJECT_PROFILE" value="p1" />
+  <option name="USE_PROJECT_PROFILE" value="true" />
+  <version value="1.0" />
+</config>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/converter/scope/options.ipr b/java/java-tests/testData/inspection/converter/scope/options.ipr
new file mode 100644
index 0000000..7ec90e6
--- /dev/null
+++ b/java/java-tests/testData/inspection/converter/scope/options.ipr
@@ -0,0 +1,278 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project relativePaths="false" version="4">
+  <component name="AntConfiguration">
+    <defaultAnt bundledAnt="true" />
+  </component>
+  <component name="BuildJarProjectSettings">
+    <option name="BUILD_JARS_ON_MAKE" value="false" />
+  </component>
+  <component name="CodeStyleSettingsManager">
+    <option name="PER_PROJECT_SETTINGS" />
+    <option name="USE_PER_PROJECT_SETTINGS" value="false" />
+  </component>
+  <component name="CompilerConfiguration">
+    <option name="DEFAULT_COMPILER" value="Javac" />
+    <option name="DEPLOY_AFTER_MAKE" value="0" />
+    <resourceExtensions>
+      <entry name=".+\.(properties|xml|html|dtd|tld)" />
+      <entry name=".+\.(gif|png|jpeg|jpg)" />
+    </resourceExtensions>
+    <wildcardResourcePatterns>
+      <entry name="?*.properties" />
+      <entry name="?*.xml" />
+      <entry name="?*.gif" />
+      <entry name="?*.png" />
+      <entry name="?*.jpeg" />
+      <entry name="?*.jpg" />
+      <entry name="?*.html" />
+      <entry name="?*.dtd" />
+      <entry name="?*.tld" />
+      <entry name="?*.ftl" />
+    </wildcardResourcePatterns>
+  </component>
+  <component name="CopyrightManager" default="">
+    <module2copyright />
+  </component>
+  <component name="DataSourceManagerImpl">
+    <externalized />
+  </component>
+  <component name="DependencyValidationManager">
+    <option name="SKIP_IMPORT_STATEMENTS" value="false" />
+  </component>
+  <component name="EclipseCompilerSettings">
+    <option name="DEBUGGING_INFO" value="true" />
+    <option name="GENERATE_NO_WARNINGS" value="true" />
+    <option name="DEPRECATION" value="false" />
+    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+    <option name="MAXIMUM_HEAP_SIZE" value="128" />
+  </component>
+  <component name="EclipseEmbeddedCompilerSettings">
+    <option name="DEBUGGING_INFO" value="true" />
+    <option name="GENERATE_NO_WARNINGS" value="true" />
+    <option name="DEPRECATION" value="false" />
+    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+    <option name="MAXIMUM_HEAP_SIZE" value="128" />
+  </component>
+  <component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false" />
+  <component name="EntryPointsManager">
+    <entry_points version="2.0" />
+  </component>
+  <component name="InspectionProjectProfileManager">
+    <option name="PROJECT_PROFILE" value="p1" />
+    <scopes>
+      <scope profile="Project Default" name="Production" />
+    </scopes>
+    <profiles>
+      <profile version="1.0" is_locked="false">
+        <option name="myName" value="Project Default" />
+        <option name="myLocal" value="false" />
+      </profile>
+      <profile version="1.0" is_locked="false">
+        <option name="myName" value="p1" />
+        <option name="myLocal" value="false" />
+        <inspection_tool class="ConstantConditions" level="WARNING" enabled="true">
+            <option name="SUGGEST_NULLABLE_ANNOTATIONS" value="true" />
+            <option name="DONT_REPORT_TRUE_ASSERT_STATEMENTS" value="true" />
+        </inspection_tool>
+      </profile>
+    </profiles>
+    <list size="5">
+      <item index="0" class="java.lang.String" itemvalue="TYPO" />
+      <item index="1" class="java.lang.String" itemvalue="SERVER PROBLEM" />
+      <item index="2" class="java.lang.String" itemvalue="INFO" />
+      <item index="3" class="java.lang.String" itemvalue="WARNING" />
+      <item index="4" class="java.lang.String" itemvalue="ERROR" />
+    </list>
+  </component>
+  <component name="JavacSettings">
+    <option name="DEBUGGING_INFO" value="true" />
+    <option name="GENERATE_NO_WARNINGS" value="false" />
+    <option name="DEPRECATION" value="true" />
+    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+    <option name="MAXIMUM_HEAP_SIZE" value="128" />
+  </component>
+  <component name="JavadocGenerationManager">
+    <option name="OUTPUT_DIRECTORY" />
+    <option name="OPTION_SCOPE" value="protected" />
+    <option name="OPTION_HIERARCHY" value="true" />
+    <option name="OPTION_NAVIGATOR" value="true" />
+    <option name="OPTION_INDEX" value="true" />
+    <option name="OPTION_SEPARATE_INDEX" value="true" />
+    <option name="OPTION_DOCUMENT_TAG_USE" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_AUTHOR" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_VERSION" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_DEPRECATED" value="true" />
+    <option name="OPTION_DEPRECATED_LIST" value="true" />
+    <option name="OTHER_OPTIONS" value="" />
+    <option name="HEAP_SIZE" />
+    <option name="LOCALE" />
+    <option name="OPEN_IN_BROWSER" value="true" />
+  </component>
+  <component name="JikesSettings">
+    <option name="JIKES_PATH" value="" />
+    <option name="DEBUGGING_INFO" value="true" />
+    <option name="DEPRECATION" value="true" />
+    <option name="GENERATE_NO_WARNINGS" value="false" />
+    <option name="IS_EMACS_ERRORS_MODE" value="true" />
+    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+  </component>
+  <component name="Palette2">
+    <group name="Swing">
+      <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
+      </item>
+      <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
+        <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
+        <initial-values>
+          <property name="text" value="Button" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="RadioButton" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="CheckBox" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="Label" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
+          <preferred-size width="-1" height="20" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
+      </item>
+    </group>
+  </component>
+  <component name="ProjectDetails">
+    <option name="projectName" value="testng" />
+  </component>
+  <component name="ProjectFileVersion" converted="true">
+    <converter id="javaee-modules" />
+    <converter id="ror-modules" />
+    <converter id="SelenaRunConfToDiana" />
+  </component>
+  <component name="ProjectKey">
+    <option name="state" value="project://C:\anna\testng\testng.ipr" />
+  </component>
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/testng.iml" filepath="$PROJECT_DIR$/testng.iml" />
+      <module fileurl="file://$PROJECT_DIR$/testng-child/testng-child.iml" filepath="$PROJECT_DIR$/testng-child/testng-child.iml" />
+    </modules>
+  </component>
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_5" assert-keyword="true" jdk-15="true" project-jdk-name="1.6" project-jdk-type="JavaSDK">
+    <output url="file://$PROJECT_DIR$/out" />
+  </component>
+  <component name="ResourceManagerContainer">
+    <option name="myResourceBundles">
+      <value>
+        <list size="0" />
+      </value>
+    </option>
+  </component>
+  <component name="RmicSettings">
+    <option name="IS_EANABLED" value="false" />
+    <option name="DEBUGGING_INFO" value="true" />
+    <option name="GENERATE_NO_WARNINGS" value="false" />
+    <option name="GENERATE_IIOP_STUBS" value="false" />
+    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+  </component>
+  <component name="WebServicesPlugin" addRequiredLibraries="true" />
+  <UsedPathMacros>
+    <macro name="pp" description="" />
+  </UsedPathMacros>
+</project>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/AlexBug/expected.xml b/java/java-tests/testData/inspection/dataFlow/AlexBug/expected.xml
new file mode 100644
index 0000000..796a315
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/AlexBug/expected.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems />
diff --git a/java/java-tests/testData/inspection/dataFlow/AlexBug/src/Test.java b/java/java-tests/testData/inspection/dataFlow/AlexBug/src/Test.java
new file mode 100644
index 0000000..1953a6a
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/AlexBug/src/Test.java
@@ -0,0 +1,7 @@
+public class Test {
+  public String foo(String path) {
+    String smth = new String(path);
+    if (path == null) return null;
+    return smth;
+  }
+}
diff --git a/java/java-tests/testData/inspection/dataFlow/ArrayAccessDoesntCancelAnalysis/expected.xml b/java/java-tests/testData/inspection/dataFlow/ArrayAccessDoesntCancelAnalysis/expected.xml
new file mode 100644
index 0000000..40578e1
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/ArrayAccessDoesntCancelAnalysis/expected.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+<problem>
+  <file>Test.java</file>
+  <line>9</line>
+  <description>Passing null argument to parameter annotated as @NotNull</description>
+</problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/dataFlow/ArrayAccessDoesntCancelAnalysis/src/Test.java b/java/java-tests/testData/inspection/dataFlow/ArrayAccessDoesntCancelAnalysis/src/Test.java
new file mode 100644
index 0000000..6b384e2
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/ArrayAccessDoesntCancelAnalysis/src/Test.java
@@ -0,0 +1,11 @@
+import org.jetbrains.annotations.*;
+
+public class Test {
+  private static void foo(@NotNull String smth) {
+  }
+
+  public static void main(String[] args) {
+    String s = args[0];
+    foo(null);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/ArrayAccessNPE/expected.xml b/java/java-tests/testData/inspection/dataFlow/ArrayAccessNPE/expected.xml
new file mode 100644
index 0000000..217863a
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/ArrayAccessNPE/expected.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+<problem>
+  <file>Test.java</file>
+  <line>5</line>
+  <description>Array access &lt;code&gt;path[0]&lt;/code&gt; may produce &lt;code&gt;java.lang.NullPointerException&lt;/code&gt;</description>
+</problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/dataFlow/ArrayAccessNPE/src/Test.java b/java/java-tests/testData/inspection/dataFlow/ArrayAccessNPE/src/Test.java
new file mode 100644
index 0000000..2fb4a82
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/ArrayAccessNPE/src/Test.java
@@ -0,0 +1,9 @@
+public class Test {
+  public String foo(String[] path) {
+    if (path != null) return null;
+   
+    String p = path[0];
+
+    return "";
+  }
+}
diff --git a/java/java-tests/testData/inspection/dataFlow/BoxingNaN/expected.xml b/java/java-tests/testData/inspection/dataFlow/BoxingNaN/expected.xml
new file mode 100644
index 0000000..3859c7d
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/BoxingNaN/expected.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>6</line>
+    <method>
+      <name>void main(String[] args)</name>
+      <display_name>main(String[])</display_name>
+      <package>&lt;default&gt;</package>
+      <class>
+        <name>DoubleTrouble</name>
+        <display_name>DoubleTrouble</display_name>
+      </class>
+    </method>
+    <description>Condition &lt;code&gt;b == Double.NaN&lt;/code&gt; is always &lt;code&gt;false&lt;/code&gt;.</description>
+  </problem>
+
+  <problem>
+    <file>Test.java</file>
+    <line>11</line>
+    <method>
+      <name>void main(String[] args)</name>
+      <display_name>main(String[])</display_name>
+      <package>&lt;default&gt;</package>
+      <class>
+        <name>DoubleTrouble</name>
+        <display_name>DoubleTrouble</display_name>
+      </class>
+    </method>
+    <description>Condition &lt;code&gt;Float.NaN != Float.NaN&lt;/code&gt; is always &lt;code&gt;true&lt;/code&gt;.</description>
+  </problem>
+
+  <problem>
+    <file>Test.java</file>
+    <line>18</line>
+    <method>
+      <name>void main(String[] args)</name>
+      <display_name>main(String[])</display_name>
+      <package>&lt;default&gt;</package>
+      <class>
+        <name>DoubleTrouble</name>
+        <display_name>DoubleTrouble</display_name>
+      </class>
+    </method>
+    <description>Condition &lt;code&gt;Double.NaN == a&lt;/code&gt; is always &lt;code&gt;false&lt;/code&gt;.</description>
+  </problem>
+
+  <problem>
+    <file>Test.java</file>
+    <line>19</line>
+    <method>
+      <name>void main(String[] args)</name>
+      <display_name>main(String[])</display_name>
+      <package>&lt;default&gt;</package>
+      <class>
+        <name>DoubleTrouble</name>
+        <display_name>DoubleTrouble</display_name>
+      </class>
+    </method>
+    <description>Condition &lt;code&gt;b == a&lt;/code&gt; is always &lt;code&gt;false&lt;/code&gt;.</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/dataFlow/BoxingNaN/src/Test.java b/java/java-tests/testData/inspection/dataFlow/BoxingNaN/src/Test.java
new file mode 100644
index 0000000..c495bbb
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/BoxingNaN/src/Test.java
@@ -0,0 +1,22 @@
+public class DoubleTrouble {
+    public static void main(String[] args) {
+        {
+        Double a = Double.NaN;
+        double b = a;//Double.NaN;
+        if (b == Double.NaN) {
+            ;
+        }
+        }
+
+        if (Float.NaN != Float.NaN) {
+
+        }
+
+        {
+          double a = Double.NaN;
+          double b = Double.NaN;
+          if (Double.NaN == a) {}
+          if (b == a) {}
+        }
+    }
+}
diff --git a/java/java-tests/testData/inspection/dataFlow/CatchParameterCantBeNull/expected.xml b/java/java-tests/testData/inspection/dataFlow/CatchParameterCantBeNull/expected.xml
new file mode 100644
index 0000000..081e8fa
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/CatchParameterCantBeNull/expected.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>8</line>
+    <description>Condition 'e == null' is always false</description>
+  </problem>
+  <problem>
+    <file>Test.java</file>
+    <line>11</line>
+    <description>Condition 'e instanceof FileNotFoundException' is always false</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/dataFlow/CatchParameterCantBeNull/src/Test.java b/java/java-tests/testData/inspection/dataFlow/CatchParameterCantBeNull/src/Test.java
new file mode 100644
index 0000000..d08fbac
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/CatchParameterCantBeNull/src/Test.java
@@ -0,0 +1,16 @@
+import java.io.*;
+
+public class Foo {
+  public void foo() {
+    try {
+      throw new EOFException("aaa");
+    } catch (Exception e) {
+      if (e == null) {
+        System.out.println("Can't be here.");
+      }
+      if (e instanceof FileNotFoundException) {
+        System.out.println("Can't be here.");
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/CheckedExceptionDominance/expected.xml b/java/java-tests/testData/inspection/dataFlow/CheckedExceptionDominance/expected.xml
new file mode 100644
index 0000000..ec272ab
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/CheckedExceptionDominance/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems/>
+
diff --git a/java/java-tests/testData/inspection/dataFlow/CheckedExceptionDominance/src/Test.java b/java/java-tests/testData/inspection/dataFlow/CheckedExceptionDominance/src/Test.java
new file mode 100644
index 0000000..4a0a690
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/CheckedExceptionDominance/src/Test.java
@@ -0,0 +1,24 @@
+ public class CheckedExceptionDominance {
+   private static class CheckedException extends Exception {}
+
+   public static void foo() {
+     boolean flag = true;
+
+     try {
+       bar();
+     }
+     catch (CheckedException e) {
+       flag = false;
+     }
+     catch (Exception e) {
+     }
+
+     if (flag) { // This should not be highlighted as always true;
+       System.out.println("Must not happen");
+     }
+   }
+
+   public static void bar() throws CheckedException {
+     throw new CheckedException();
+   }
+ }
diff --git a/java/java-tests/testData/inspection/dataFlow/ConditionFalseAndNPE/expected.xml b/java/java-tests/testData/inspection/dataFlow/ConditionFalseAndNPE/expected.xml
new file mode 100644
index 0000000..aef4d6a
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/ConditionFalseAndNPE/expected.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>9</line>
+    <description>Method invocation 'foo().foo()' may produce NullPointerException</description>
+  </problem>
+  <problem>
+    <file>Test.java</file>
+    <line>10</line>
+    <description>Method invocation 'foo().foo()' may produce NullPointerException</description>
+  </problem>
+  <problem>
+    <file>Test.java</file>
+    <line>10</line>
+    <description>Method invocation 'foo().foo().foo()' may produce NullPointerException</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/dataFlow/ConditionFalseAndNPE/src/Test.java b/java/java-tests/testData/inspection/dataFlow/ConditionFalseAndNPE/src/Test.java
new file mode 100644
index 0000000..0b029ac
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/ConditionFalseAndNPE/src/Test.java
@@ -0,0 +1,14 @@
+import org.jetbrains.annotations.Nullable;
+public class Foo {
+    @Nullable Foo foo() {
+        return null;
+    }
+
+    public void bar() {
+        if (foo() != null &&
+          foo().foo() != null &&
+          foo().foo().foo() != null) {
+
+        }
+    }
+}
diff --git a/java/java-tests/testData/inspection/dataFlow/ConstantsDifferentTypes/expected.xml b/java/java-tests/testData/inspection/dataFlow/ConstantsDifferentTypes/expected.xml
new file mode 100644
index 0000000..ba08c50
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/ConstantsDifferentTypes/expected.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>4</line>
+    <method>
+      <name>void f()</name>
+      <display_name>f()</display_name>
+      <package>&lt;default&gt;</package>
+      <class>
+        <name>Test</name>
+        <display_name>Test</display_name>
+      </class>
+    </method>
+    <description>Condition &lt;code&gt;L == 5&lt;/code&gt; is always &lt;code&gt;true&lt;/code&gt;</description>
+  </problem>
+
+  <problem>
+    <file>Test.java</file>
+    <line>9</line>
+    <method>
+      <name>void f()</name>
+      <display_name>f()</display_name>
+      <package>&lt;default&gt;</package>
+      <class>
+        <name>Test</name>
+        <display_name>Test</display_name>
+      </class>
+    </method>
+    <description>Condition &lt;code&gt;l == 0f&lt;/code&gt; is always &lt;code&gt;true&lt;/code&gt;</description>
+  </problem>
+
+  <problem>
+    <file>Test.java</file>
+    <line>14</line>
+    <method>
+      <name>void f()</name>
+      <display_name>f()</display_name>
+      <package>&lt;default&gt;</package>
+      <class>
+        <name>Test</name>
+        <display_name>Test</display_name>
+      </class>
+    </method>
+    <description>Condition &lt;code&gt;c == 1L&lt;/code&gt; is always &lt;code&gt;true&lt;/code&gt;</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/dataFlow/ConstantsDifferentTypes/src/Test.java b/java/java-tests/testData/inspection/dataFlow/ConstantsDifferentTypes/src/Test.java
new file mode 100644
index 0000000..447cd4e
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/ConstantsDifferentTypes/src/Test.java
@@ -0,0 +1,19 @@
+public class Test {
+ void f() {
+         Long L = 5L;
+         if (L == 5) {
+             ;
+         }
+
+         long l = 0;
+         if (l == 0f) {
+          ;
+         }
+
+         char c = 1;
+         if (c == 1L) {
+           ;
+         }
+         
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/FieldsFlashing/expected.xml b/java/java-tests/testData/inspection/dataFlow/FieldsFlashing/expected.xml
new file mode 100644
index 0000000..1e9d5ef
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/FieldsFlashing/expected.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>18</line>
+    <description>Argument 'obj' might be null</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/dataFlow/FieldsFlashing/src/Test.java b/java/java-tests/testData/inspection/dataFlow/FieldsFlashing/src/Test.java
new file mode 100644
index 0000000..943d9de
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/FieldsFlashing/src/Test.java
@@ -0,0 +1,51 @@
+import org.jetbrains.annotations.*;
+
+public class TestNullableIntervening   // See http://www.jetbrains.net/jira/browse/IDEA-2845
+{
+    @Nullable Object obj;
+
+    public TestNullableIntervening(final @Nullable Object obj) {
+        this.obj = obj;
+    }
+
+    @Nullable Object foo() { return null; }
+    void notnull(@NotNull Object arg) {}
+
+    void test1() {
+        if (obj != null) {
+            // Method intervening, might change obj; should have warning (OK)
+            obj = foo();
+            notnull(obj);
+        }
+    }
+
+    void test2() {
+        if (obj != null) {
+            // Simple assignment intervening, no method calls and nothing
+            // involving obj...
+            // Should be no warning, but there is
+            int x = 10;
+            notnull(obj);
+        }
+    }
+
+    void test3() {
+        if (obj != null) {
+            // Constructor call intervening; for all we know, this could
+            // change obj through some strange interaction (constructor
+            // calls static method which has access to this object which
+            // then changes obj). Should be a warning (OK).
+            TestNullableIntervening obj2 = new TestNullableIntervening(null);
+            notnull(obj);
+        }
+    }
+
+    void test4() {
+        if (obj != null) {
+            // Array construction cannot change other objects
+            // Should be no warning, but there is
+            Object[] arr = new Object[5];
+            notnull(obj);
+        }
+    }
+}
diff --git a/java/java-tests/testData/inspection/dataFlow/ForEachNPE/expected.xml b/java/java-tests/testData/inspection/dataFlow/ForEachNPE/expected.xml
new file mode 100644
index 0000000..80d429c
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/ForEachNPE/expected.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+<problem>
+  <file>Test.java</file>
+  <line>4</line>
+  <description>Dereference of 'path' may produce java.lang.NullPointerException</description>
+</problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/dataFlow/ForEachNPE/src/Test.java b/java/java-tests/testData/inspection/dataFlow/ForEachNPE/src/Test.java
new file mode 100644
index 0000000..1aca902
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/ForEachNPE/src/Test.java
@@ -0,0 +1,8 @@
+public class Test {
+  public String foo(String[] path) {
+    if (path != null) return null;
+    for (String p: path) {}
+
+    return "";
+  }
+}
diff --git a/java/java-tests/testData/inspection/dataFlow/ForeachFlow/expected.xml b/java/java-tests/testData/inspection/dataFlow/ForeachFlow/expected.xml
new file mode 100644
index 0000000..ec272ab
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/ForeachFlow/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems/>
+
diff --git a/java/java-tests/testData/inspection/dataFlow/ForeachFlow/src/Npe.java b/java/java-tests/testData/inspection/dataFlow/ForeachFlow/src/Npe.java
new file mode 100644
index 0000000..90a54c3
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/ForeachFlow/src/Npe.java
@@ -0,0 +1,21 @@
+public class Npe {
+   Object foo(Object[] objs) {
+      boolean skip = true;
+      for (Object o : objs) {
+        if (o instanceof String) {
+          skip = false;
+          continue;
+        }
+
+        if (skip) {
+          continue;
+        }
+        bar();
+      }
+
+      return "";
+   }
+
+   void bar() {
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/GenericInstanceof/expected.xml b/java/java-tests/testData/inspection/dataFlow/GenericInstanceof/expected.xml
new file mode 100644
index 0000000..cf475bb
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/GenericInstanceof/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>GenericInstanceof.java</file>
+    <line>8</line>
+    <description>Condition is always true</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/dataFlow/GenericInstanceof/src/GenericInstanceof.java b/java/java-tests/testData/inspection/dataFlow/GenericInstanceof/src/GenericInstanceof.java
new file mode 100644
index 0000000..69cf777
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/GenericInstanceof/src/GenericInstanceof.java
@@ -0,0 +1,12 @@
+class Generic<T> {
+  Generic() {}
+}
+
+class Test {
+  void foo () {
+    Generic g = new Generic ();
+    if (g instanceof Generic<String>) {
+      return;
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/IDEA1840/expected.xml b/java/java-tests/testData/inspection/dataFlow/IDEA1840/expected.xml
new file mode 100644
index 0000000..370b0fa
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/IDEA1840/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Npe.java</file>
+    <line>10</line>
+    <description>Argument 'null' is probably null</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/dataFlow/IDEA1840/src/WrongParameter.java b/java/java-tests/testData/inspection/dataFlow/IDEA1840/src/WrongParameter.java
new file mode 100644
index 0000000..939a81f
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/IDEA1840/src/WrongParameter.java
@@ -0,0 +1,12 @@
+public class WrongParameter {
+  public boolean resolveAction(@NotNull Object action, @NotNull Object combatant, @NotNull Object userInputProvider) {
+    return false;
+  }
+
+  public void foo() {
+    resolveAction(
+      new Object(),
+      new Object(),
+      null); // Last parameter should be highlighted
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/IDEADEV10489/expected.xml b/java/java-tests/testData/inspection/dataFlow/IDEADEV10489/expected.xml
new file mode 100644
index 0000000..bb6256f
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/IDEADEV10489/expected.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>IDEADEV10489.java</file>
+    <line>10</line>
+    <description>Method invocation 's.length()' may produce NullPointerException</description>
+  </problem>
+  <problem>
+    <file>IDEADEV10489.java</file>
+    <line>12</line>
+    <description>Method invocation 's.length()' may produce NullPointerException</description>
+  </problem>
+</problems>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/IDEADEV10489/src/IDEADEV10489.java b/java/java-tests/testData/inspection/dataFlow/IDEADEV10489/src/IDEADEV10489.java
new file mode 100644
index 0000000..6025947
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/IDEADEV10489/src/IDEADEV10489.java
@@ -0,0 +1,23 @@
+class IDEADEV10489 {
+    static String getS() {
+        return null;
+    }
+
+    static void f() {
+        String s = getS();
+        if (s != null) s.length();
+        if (foo()) {
+          int[] i1 = new int [s.length()];
+        } else if (foo()) {
+          int[] i2 = new int [] {s.length()};
+        } else if (foo()) {
+          int[][] i3 = new int [(s = "").length()][s.length()];
+        } else{
+          int[] i4 = new int[] {(s = "").length(), s.length()};
+        }
+    }
+
+    private static boolean foo() {
+      return false;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/IDEADEV11033/expected.xml b/java/java-tests/testData/inspection/dataFlow/IDEADEV11033/expected.xml
new file mode 100644
index 0000000..4704d91
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/IDEADEV11033/expected.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems/>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/IDEADEV11033/src/RightAssociativeAssignment.java b/java/java-tests/testData/inspection/dataFlow/IDEADEV11033/src/RightAssociativeAssignment.java
new file mode 100644
index 0000000..c3b1aff
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/IDEADEV11033/src/RightAssociativeAssignment.java
@@ -0,0 +1,6 @@
+public class NonconstantCondition {
+	void test(boolean flag) {
+		if (flag == (flag = true)) {
+		}
+	}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/IDEADEV13153/expected.xml b/java/java-tests/testData/inspection/dataFlow/IDEADEV13153/expected.xml
new file mode 100644
index 0000000..808f05c
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/IDEADEV13153/expected.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Npe.java</file>
+    <line>9</line>
+    <description>Condition 'foo != null' is always 'true'</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/dataFlow/IDEADEV13153/src/Npe.java b/java/java-tests/testData/inspection/dataFlow/IDEADEV13153/src/Npe.java
new file mode 100644
index 0000000..2c91be5
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/IDEADEV13153/src/Npe.java
@@ -0,0 +1,12 @@
+import org.jetbrains.annotations.*;
+
+import java.util.*;
+
+class Test {
+   void foo() {
+     String[] data = new String[] {"abs", "def"};
+     for (@NotNull String foo: data) {
+       assert foo != null; // Condition always true
+     }
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/IDEADEV13156/expected.xml b/java/java-tests/testData/inspection/dataFlow/IDEADEV13156/expected.xml
new file mode 100644
index 0000000..c63c925
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/IDEADEV13156/expected.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems/>
diff --git a/java/java-tests/testData/inspection/dataFlow/IDEADEV13156/src/Npe.java b/java/java-tests/testData/inspection/dataFlow/IDEADEV13156/src/Npe.java
new file mode 100644
index 0000000..f965875
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/IDEADEV13156/src/Npe.java
@@ -0,0 +1,15 @@
+import org.jetbrains.annotations.*;
+
+class Foo {
+  public void x() throws IOException {
+     @Nullable String foo = "";
+     while (foo.length() == 0) {
+       foo = y();
+       if (foo == null) throw new IOException("foo");
+     }
+  }
+  
+  public String y() {
+     return "";
+  }
+}
diff --git a/java/java-tests/testData/inspection/dataFlow/IDEADEV15583/expected.xml b/java/java-tests/testData/inspection/dataFlow/IDEADEV15583/expected.xml
new file mode 100644
index 0000000..7de6f87
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/IDEADEV15583/expected.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Npe.java</file>
+    <line>14</line>
+    <description>'length' may produce 'NullPointerException'</description>
+  </problem>
+  <problem>
+    <file>Npe.java</file>
+    <line>18</line>
+    <description>'length' may produce 'NullPointerException'</description>
+  </problem>
+  <problem>
+    <file>Npe.java</file>
+    <line>27</line>
+    <description>'length' may produce 'NullPointerException'</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/dataFlow/IDEADEV15583/src/Npe.java b/java/java-tests/testData/inspection/dataFlow/IDEADEV15583/src/Npe.java
new file mode 100644
index 0000000..c213662
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/IDEADEV15583/src/Npe.java
@@ -0,0 +1,31 @@
+import org.jetbrains.annotations.*;
+
+import java.util.*;
+
+class Test {
+    @Nullable
+    public String getString(String s) {
+        return null;
+    }
+
+    void test(Collection<String> foos) {
+        Test t = new Test();
+
+        final int i = t.getString("foo").length();
+        System.out.println("i = " + i);
+
+        for (String foo : foos) {
+            final int j = t.getString(foo).length();
+            System.out.println("i = " + j);
+        }
+    }
+
+    void test2(Collection<String> foos) {
+        Test t = new Test();
+
+        for (Iterator<String> iterator = foos.iterator(); iterator.hasNext();) {
+            final int i = getString(iterator.next()).length();
+            System.out.println("i = " + i);
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/IDEADEV1575/expected.xml b/java/java-tests/testData/inspection/dataFlow/IDEADEV1575/expected.xml
new file mode 100644
index 0000000..e1415fb
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/IDEADEV1575/expected.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>4</line>
+    <description>Condition 'test' at the left side is always 'true'</description>
+  </problem>
+</problems>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/IDEADEV1575/src/Test.java b/java/java-tests/testData/inspection/dataFlow/IDEADEV1575/src/Test.java
new file mode 100644
index 0000000..335fe09
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/IDEADEV1575/src/Test.java
@@ -0,0 +1,6 @@
+class TestGenericsInstanceof {
+    public void foo(Object o) {
+      boolean test = true;
+      test &= o.hashCode() > 3;
+    }
+}
diff --git a/java/java-tests/testData/inspection/dataFlow/IDEADEV2605/expected.xml b/java/java-tests/testData/inspection/dataFlow/IDEADEV2605/expected.xml
new file mode 100644
index 0000000..a3e736e
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/IDEADEV2605/expected.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>AndAssign.java</file>
+    <line>19</line>
+    <description>Condition is always true</description>
+  </problem>
+  <problem>
+    <file>AndAssign.java</file>
+    <line>26</line>
+    <description>Condition is always false</description>
+  </problem>
+  <problem>
+    <file>AndAssign.java</file>
+    <line>33</line>
+    <description>Condition is always false</description>
+  </problem>
+  <problem>
+    <file>AndAssign.java</file>
+    <line>40</line>
+    <description>Condition is always false</description>
+  </problem>
+  <problem>
+    <file>AndAssign.java</file>
+    <line>47</line>
+    <description>Condition is always true</description>
+  </problem>
+  <problem>
+    <file>AndAssign.java</file>
+    <line>54</line>
+    <description>Condition is always true</description>
+  </problem>
+  <problem>
+    <file>AndAssign.java</file>
+    <line>61</line>
+    <description>Condition is always true</description>
+  </problem>
+  <problem>
+    <file>AndAssign.java</file>
+    <line>68</line>
+    <description>Condition is always false</description>
+  </problem>
+
+
+
+  <problem>
+    <file>AndAssign.java</file>
+    <line>17</line>
+    <description>left always true</description>
+  </problem>
+  <problem>
+    <file>AndAssign.java</file>
+    <line>24</line>
+    <description>left always true</description>
+  </problem>
+  <problem>
+    <file>AndAssign.java</file>
+    <line>31</line>
+    <description>left always false</description>
+  </problem>
+  <problem>
+    <file>AndAssign.java</file>
+    <line>38</line>
+    <description>left always false</description>
+  </problem>
+  <problem>
+    <file>AndAssign.java</file>
+    <line>45</line>
+    <description>left always true</description>
+  </problem>
+  <problem>
+    <file>AndAssign.java</file>
+    <line>52</line>
+    <description>left always true</description>
+  </problem>
+  <problem>
+    <file>AndAssign.java</file>
+    <line>59</line>
+    <description>left always false</description>
+  </problem>
+  <problem>
+    <file>AndAssign.java</file>
+    <line>66</line>
+    <description>left always false</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/dataFlow/IDEADEV2605/src/AndAssign.java b/java/java-tests/testData/inspection/dataFlow/IDEADEV2605/src/AndAssign.java
new file mode 100644
index 0000000..99f8c45
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/IDEADEV2605/src/AndAssign.java
@@ -0,0 +1,72 @@
+public class AndAssign {
+  public void foo(boolean result, Object acc) {
+    result &= verify(result ? acc : null);
+  }
+
+  public boolean verify(Object o) {
+    System.out.println(o);
+    return true;
+  }
+
+  public void positives() {
+     boolean t = true;
+     boolean f = false;
+     boolean r;
+
+     r = t;
+     r &= t;                      // Always true
+
+     if (r) {                     // Always true
+        System.out.println("foo");
+     }
+
+     r = t;
+     r &= f;                      // Always true
+
+     if (r) {                     // Always false
+        System.out.println("foo");
+     }
+
+     r = f;
+     r &= t;                      // Always false
+
+     if (r) {                     // Always false
+        System.out.println("foo");
+     }
+
+     r = f;
+     r &= f;                      // Always false
+
+     if (r) {                     // Always false
+        System.out.println("foo");
+     }
+
+     r = t;
+     r |= t                       // Always true
+
+     if (r) {                     // Always true
+        System.out.println("foo");
+     }
+
+     r = t;
+     r |= f                       // Always true
+
+     if (r) {                     // Always true
+        System.out.println("foo");
+     }
+
+     r = f;
+     r |= t                       // Always false
+
+     if (r) {                     // Always true
+        System.out.println("foo");
+     }
+
+     r = f;
+     r |= f                      // Always false
+
+     if (r) {                     // Always false
+        System.out.println("foo");
+     }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/IDEADEV74518/expected.xml b/java/java-tests/testData/inspection/dataFlow/IDEADEV74518/expected.xml
new file mode 100644
index 0000000..03896ee
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/IDEADEV74518/expected.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>NoWarnings.java</file>
+    <line>9</line>
+    <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Constant conditions &amp; exceptions</problem_class>
+    <description>Condition &lt;code&gt;i == 1&lt;/code&gt; is always &lt;code&gt;true&lt;/code&gt; when reached</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/dataFlow/IDEADEV74518/src/NoWarnings.java b/java/java-tests/testData/inspection/dataFlow/IDEADEV74518/src/NoWarnings.java
new file mode 100644
index 0000000..68e4c52
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/IDEADEV74518/src/NoWarnings.java
@@ -0,0 +1,21 @@
+import java.util.*;
+
+public class NoWarnings {
+    public void f() {
+        int i = 1;
+
+        boolean b = true;
+        while (true) {
+            if (b && i == 1) {
+                b = false;
+            }
+            else {
+                i = g();
+            }
+        }
+    }
+  
+    public int g() {
+      return 1;
+    }
+}
diff --git a/java/java-tests/testData/inspection/dataFlow/IDEADEV74518_2/expected.xml b/java/java-tests/testData/inspection/dataFlow/IDEADEV74518_2/expected.xml
new file mode 100644
index 0000000..ec272ab
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/IDEADEV74518_2/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems/>
+
diff --git a/java/java-tests/testData/inspection/dataFlow/IDEADEV74518_2/src/Sample.java b/java/java-tests/testData/inspection/dataFlow/IDEADEV74518_2/src/Sample.java
new file mode 100644
index 0000000..33f8f7f
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/IDEADEV74518_2/src/Sample.java
@@ -0,0 +1,17 @@
+public abstract class NoWarnings {
+    public void f() {
+      boolean A = false;
+      boolean B = false;
+
+      while (true) {
+          boolean f = g();
+          A = A || f;
+          B = B || !f;
+          if (A && B) {
+              return;
+          }
+      }
+    }
+  
+    public abstract boolean g();
+}
diff --git a/java/java-tests/testData/inspection/dataFlow/IDEADEV77819/expected.xml b/java/java-tests/testData/inspection/dataFlow/IDEADEV77819/expected.xml
new file mode 100644
index 0000000..ec272ab
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/IDEADEV77819/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems/>
+
diff --git a/java/java-tests/testData/inspection/dataFlow/IDEADEV77819/src/NoWarnings.java b/java/java-tests/testData/inspection/dataFlow/IDEADEV77819/src/NoWarnings.java
new file mode 100644
index 0000000..56b1576
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/IDEADEV77819/src/NoWarnings.java
@@ -0,0 +1,12 @@
+import org.jetbrains.annotations.*;
+
+public class Test {
+  public @Nullable String foo;
+  
+  public void test() {
+    
+    if (foo != null && foo.length() > 1) {
+      System.out.println(foo.length());
+    }
+  }
+}
diff --git a/java/java-tests/testData/inspection/dataFlow/IDEADEV78370/expected.xml b/java/java-tests/testData/inspection/dataFlow/IDEADEV78370/expected.xml
new file mode 100644
index 0000000..ec272ab
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/IDEADEV78370/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems/>
+
diff --git a/java/java-tests/testData/inspection/dataFlow/IDEADEV78370/src/NoWarnings.java b/java/java-tests/testData/inspection/dataFlow/IDEADEV78370/src/NoWarnings.java
new file mode 100644
index 0000000..ace2d06
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/IDEADEV78370/src/NoWarnings.java
@@ -0,0 +1,8 @@
+import org.jetbrains.annotations.Nullable;
+
+public class NoWarnings {
+    int f(@Nullable String value)  {
+        value = value == null ? "" : value;
+        return value.hashCode();
+    }
+}
diff --git a/java/java-tests/testData/inspection/dataFlow/Instanceof/expected.xml b/java/java-tests/testData/inspection/dataFlow/Instanceof/expected.xml
new file mode 100644
index 0000000..8097f74
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/Instanceof/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Foo.java</file>
+    <line>10</line>
+    <description>Condition 'o instanceof B' is always false</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/dataFlow/Instanceof/src/Foo.java b/java/java-tests/testData/inspection/dataFlow/Instanceof/src/Foo.java
new file mode 100644
index 0000000..0161703
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/Instanceof/src/Foo.java
@@ -0,0 +1,14 @@
+class A {
+}
+
+
+class B extends A {
+}
+
+class C {
+   void foo(Object o) {
+       if (o instanceof A || o instanceof B) {
+           System.out.println("Something");
+       }
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/NotNullArray/expected.xml b/java/java-tests/testData/inspection/dataFlow/NotNullArray/expected.xml
new file mode 100644
index 0000000..796a315
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/NotNullArray/expected.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems />
diff --git a/java/java-tests/testData/inspection/dataFlow/NotNullArray/src/Test.java b/java/java-tests/testData/inspection/dataFlow/NotNullArray/src/Test.java
new file mode 100644
index 0000000..a967155
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/NotNullArray/src/Test.java
@@ -0,0 +1,15 @@
+import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.NotNull;
+
+public class TestNPEafterNew {
+  @Nullable Object[] arr;
+  void test(@NotNull Object[] notnull) {
+      arr = notnull;
+      System.out.println(arr.length);
+  }
+
+  void test() {
+      arr = new Object[5];
+      System.out.println(arr.length);
+  }
+}
diff --git a/java/java-tests/testData/inspection/dataFlow/NotNullLocalVariable/expected.xml b/java/java-tests/testData/inspection/dataFlow/NotNullLocalVariable/expected.xml
new file mode 100644
index 0000000..0661e23
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/NotNullLocalVariable/expected.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Npe.java</file>
+    <line>7</line>
+    <description>Condition 'o == null' is always false</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/dataFlow/NotNullLocalVariable/src/Npe.java b/java/java-tests/testData/inspection/dataFlow/NotNullLocalVariable/src/Npe.java
new file mode 100644
index 0000000..c933f5b
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/NotNullLocalVariable/src/Npe.java
@@ -0,0 +1,10 @@
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+public class Npe {
+   void bar() {
+     final @NotNull Object o = call();
+     if (o == null) {}
+   }
+   Object call() {return new Object();}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/NotNullable/expected.xml b/java/java-tests/testData/inspection/dataFlow/NotNullable/expected.xml
new file mode 100644
index 0000000..38c85fc
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/NotNullable/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Npe.java</file>
+    <line>10</line>
+    <description>Condition 'o == null' is always false</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/dataFlow/NotNullable/src/Npe.java b/java/java-tests/testData/inspection/dataFlow/NotNullable/src/Npe.java
new file mode 100644
index 0000000..0553b53
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/NotNullable/src/Npe.java
@@ -0,0 +1,12 @@
+import org.jetbrains.annotations.NotNull;
+
+public class Npe {
+   @NotNull Object foo() {
+     return new Object();
+   }
+
+   void bar() {
+     Object o = foo();
+     if (o == null) System.out.println("Can't be");
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/NotNullableParameter/expected.xml b/java/java-tests/testData/inspection/dataFlow/NotNullableParameter/expected.xml
new file mode 100644
index 0000000..d199ae1
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/NotNullableParameter/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Npe.java</file>
+    <line>9</line>
+    <description>Passing null argument to parameter annotated as @NotNull</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/dataFlow/NotNullableParameter/src/Npe.java b/java/java-tests/testData/inspection/dataFlow/NotNullableParameter/src/Npe.java
new file mode 100644
index 0000000..d8a2a6f
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/NotNullableParameter/src/Npe.java
@@ -0,0 +1,11 @@
+import org.jetbrains.annotations.NotNull;
+
+public class Npe {
+   Object foo(@NotNull Object o) {
+     return o;
+   }
+
+   void bar() {
+     Object o = foo(null); // null should not be passed here.
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/NotNullableParameter2/expected.xml b/java/java-tests/testData/inspection/dataFlow/NotNullableParameter2/expected.xml
new file mode 100644
index 0000000..cea65e7
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/NotNullableParameter2/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Npe.java</file>
+    <line>5</line>
+    <description>Condition 'o == null' is always false</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/dataFlow/NotNullableParameter2/src/Npe.java b/java/java-tests/testData/inspection/dataFlow/NotNullableParameter2/src/Npe.java
new file mode 100644
index 0000000..820ac09
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/NotNullableParameter2/src/Npe.java
@@ -0,0 +1,10 @@
+import org.jetbrains.annotations.NotNull;
+
+public class Npe {
+   Object foo(@NotNull Object o) {
+     if (o == null) {
+       // Should not get there.
+     }
+     return o;
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/Nullable/expected.xml b/java/java-tests/testData/inspection/dataFlow/Nullable/expected.xml
new file mode 100644
index 0000000..e924534
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/Nullable/expected.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Npe.java</file>
+    <line>14</line>
+    <description>Argument 'nullable()' might be null</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/dataFlow/Nullable/src/Npe.java b/java/java-tests/testData/inspection/dataFlow/Nullable/src/Npe.java
new file mode 100644
index 0000000..1d71664
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/Nullable/src/Npe.java
@@ -0,0 +1,16 @@
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+public class Npe {
+   Object foo(@NotNull Object o) {
+     return o;
+   }
+
+   @Nullable Object nullable() {
+     return null;
+   }
+
+   void bar() {
+     Object o = foo(nullable()); // null should not be passed here.
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/NullableAssignment/expected.xml b/java/java-tests/testData/inspection/dataFlow/NullableAssignment/expected.xml
new file mode 100644
index 0000000..7c2ceac
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/NullableAssignment/expected.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Npe.java</file>
+    <line>12</line>
+    <description>Expression 'o' might evaluate to null</description>
+  </problem>
+  <problem>
+    <file>Npe.java</file>
+    <line>13</line>
+    <description>Expression 'o' might evaluate to null</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/dataFlow/NullableAssignment/src/Npe.java b/java/java-tests/testData/inspection/dataFlow/NullableAssignment/src/Npe.java
new file mode 100644
index 0000000..eae5061
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/NullableAssignment/src/Npe.java
@@ -0,0 +1,15 @@
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+public class Npe {
+   @NotNull Object aField;
+   @Nullable Object nullable() {
+     return null;
+   }
+
+   void bar() {
+     Object o = nullable();
+     aField = o;
+     @NotNull Object aLocalVariable = o;
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/NullableLocalVariable/expected.xml b/java/java-tests/testData/inspection/dataFlow/NullableLocalVariable/expected.xml
new file mode 100644
index 0000000..83302b1
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/NullableLocalVariable/expected.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Npe.java</file>
+    <line>7</line>
+    <description>'o.hashCode()' may produce NullPointerException</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/dataFlow/NullableLocalVariable/src/Npe.java b/java/java-tests/testData/inspection/dataFlow/NullableLocalVariable/src/Npe.java
new file mode 100644
index 0000000..ce23285
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/NullableLocalVariable/src/Npe.java
@@ -0,0 +1,13 @@
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+public class Npe {
+   void bar() {
+     final @Nullable Object o = foo();
+     o.hashCode(); // NPE
+   }
+
+   @Nullable Object foo() {
+     return null;
+   }
+}
diff --git a/java/java-tests/testData/inspection/dataFlow/NullableProblemThroughCast/expected.xml b/java/java-tests/testData/inspection/dataFlow/NullableProblemThroughCast/expected.xml
new file mode 100644
index 0000000..b7eb5e8
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/NullableProblemThroughCast/expected.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Npe.java</file>
+    <line>6</line>
+    <description>Method invocation &lt;code&gt;((SomeInterfaceImpl)x).bar()&lt;/code&gt; may produce &lt;code&gt;java.lang.NullPointerException&lt;/code&gt;</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/dataFlow/NullableProblemThroughCast/src/Npe.java b/java/java-tests/testData/inspection/dataFlow/NullableProblemThroughCast/src/Npe.java
new file mode 100644
index 0000000..5937591
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/NullableProblemThroughCast/src/Npe.java
@@ -0,0 +1,18 @@
+import org.jetbrains.annotations.Nullable;
+
+public class Npe {
+  
+  void foo(@Nullable SomeInterface x) {
+    ((SomeInterfaceImpl)x).bar();
+  }
+
+  interface SomeInterface {
+    void bar();
+  }
+
+  class SomeInterfaceImpl implements SomeInterface {
+    @Override
+    public void bar() {
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/NullableReturn/expected.xml b/java/java-tests/testData/inspection/dataFlow/NullableReturn/expected.xml
new file mode 100644
index 0000000..2dd3ea0
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/NullableReturn/expected.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Npe.java</file>
+    <line>6</line>
+    <description>null is returned</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/dataFlow/NullableReturn/src/Npe.java b/java/java-tests/testData/inspection/dataFlow/NullableReturn/src/Npe.java
new file mode 100644
index 0000000..62806a0
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/NullableReturn/src/Npe.java
@@ -0,0 +1,8 @@
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+public class Npe {
+   @NotNull Object foo() {
+     return null;
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/NullableReturn1/expected.xml b/java/java-tests/testData/inspection/dataFlow/NullableReturn1/expected.xml
new file mode 100644
index 0000000..5c458ea
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/NullableReturn1/expected.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>8</line>
+    <description>Expression 'res' might evaluate to null but is returned by the method declared as @NotNull</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/dataFlow/NullableReturn1/src/Test.java b/java/java-tests/testData/inspection/dataFlow/NullableReturn1/src/Test.java
new file mode 100644
index 0000000..8a73cd2
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/NullableReturn1/src/Test.java
@@ -0,0 +1,10 @@
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+class Test {
+  @NotNull Object foo() {
+    Object res;
+    res = null;
+    return res;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/NullableThroughCast/expected.xml b/java/java-tests/testData/inspection/dataFlow/NullableThroughCast/expected.xml
new file mode 100644
index 0000000..da3af56
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/NullableThroughCast/expected.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Npe.java</file>
+    <line>14</line>
+    <description>Argument '(Object)nullable()' might be null</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/dataFlow/NullableThroughCast/src/Npe.java b/java/java-tests/testData/inspection/dataFlow/NullableThroughCast/src/Npe.java
new file mode 100644
index 0000000..fbaf2ad
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/NullableThroughCast/src/Npe.java
@@ -0,0 +1,16 @@
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+public class Npe {
+   Object foo(@NotNull Object o) {
+     return o;
+   }
+
+   @Nullable Object nullable() {
+     return null;
+   }
+
+   void bar() {
+     Object o = foo((Object)nullable()); // null should not be passed here.
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/NullableThroughVariable/expected.xml b/java/java-tests/testData/inspection/dataFlow/NullableThroughVariable/expected.xml
new file mode 100644
index 0000000..9837614
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/NullableThroughVariable/expected.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Npe.java</file>
+    <line>15</line>
+    <description>Argument 'o' might be null</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/dataFlow/NullableThroughVariable/src/Npe.java b/java/java-tests/testData/inspection/dataFlow/NullableThroughVariable/src/Npe.java
new file mode 100644
index 0000000..817a4c2
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/NullableThroughVariable/src/Npe.java
@@ -0,0 +1,17 @@
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+public class Npe {
+   Object foo(@NotNull Object o) {
+     return o;
+   }
+
+   @Nullable Object nullable() {
+     return null;
+   }
+
+   void bar() {
+     Object o = nullable();
+     foo(o); // null should not be passed here
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/NullableThroughVariableShouldNotBeReported/expected.xml b/java/java-tests/testData/inspection/dataFlow/NullableThroughVariableShouldNotBeReported/expected.xml
new file mode 100644
index 0000000..c63c925
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/NullableThroughVariableShouldNotBeReported/expected.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems/>
diff --git a/java/java-tests/testData/inspection/dataFlow/NullableThroughVariableShouldNotBeReported/src/Npe.java b/java/java-tests/testData/inspection/dataFlow/NullableThroughVariableShouldNotBeReported/src/Npe.java
new file mode 100644
index 0000000..77b1222
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/NullableThroughVariableShouldNotBeReported/src/Npe.java
@@ -0,0 +1,19 @@
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+public class Npe {
+   Object foo(@NotNull Object o) {
+     return o;
+   }
+
+   @Nullable Object nullable() {
+     return null;
+   }
+
+   void bar() {
+     Object o = nullable();
+     if (o != null) {
+       foo(o); // OK, o can't be null.
+     }
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/PlusOnStrings/expected.xml b/java/java-tests/testData/inspection/dataFlow/PlusOnStrings/expected.xml
new file mode 100644
index 0000000..05a97ff
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/PlusOnStrings/expected.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>6</line>
+    <description>Condition 'c == null' is always false</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/dataFlow/PlusOnStrings/src/Test.java b/java/java-tests/testData/inspection/dataFlow/PlusOnStrings/src/Test.java
new file mode 100644
index 0000000..59ea74e
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/PlusOnStrings/src/Test.java
@@ -0,0 +1,10 @@
+import java.io.*;
+
+public class Foo {
+  public void foo(Object a, String b) {
+     String c = a + b;
+     if (c == null) {
+         System.out.println("Can't be!");
+     }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/RegressionByPti/expected.xml b/java/java-tests/testData/inspection/dataFlow/RegressionByPti/expected.xml
new file mode 100644
index 0000000..ec272ab
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/RegressionByPti/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems/>
+
diff --git a/java/java-tests/testData/inspection/dataFlow/RegressionByPti/src/NoWarnings.java b/java/java-tests/testData/inspection/dataFlow/RegressionByPti/src/NoWarnings.java
new file mode 100644
index 0000000..ce33c628
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/RegressionByPti/src/NoWarnings.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2000-2011 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.
+ */
+public class AAA {
+ public static void main(String[] args) {
+
+   for (int i = 0; i < args.length; i++) {
+     final String element = args[i];
+
+     if (i == 1) {
+       if (element != null) { // !!!!! WRONG: element[1] == null
+         return;
+       }
+     }
+     else if (element == null) {
+       return;
+     }
+   }
+ }
+}
diff --git a/java/java-tests/testData/inspection/dataFlow/SCR13626/expected.xml b/java/java-tests/testData/inspection/dataFlow/SCR13626/expected.xml
new file mode 100644
index 0000000..fe6b36d
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/SCR13626/expected.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>14</line>
+    <description>Condition '!a &amp;&amp; b' always false</description>
+  </problem>
+  <problem>
+    <file>Test.java</file>
+    <line>14</line>
+    <description>Condition '!a' always false</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/dataFlow/SCR13626/src/Test.java b/java/java-tests/testData/inspection/dataFlow/SCR13626/src/Test.java
new file mode 100644
index 0000000..4617cf7
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/SCR13626/src/Test.java
@@ -0,0 +1,16 @@
+class Test
+{
+class Test
+{
+    public void x()
+    {
+        boolean a = false;
+        boolean b = true;
+
+        do
+        {
+            a = true;
+        }
+        while( !a && b );
+    }
+}}
diff --git a/java/java-tests/testData/inspection/dataFlow/SCR13702/expected.xml b/java/java-tests/testData/inspection/dataFlow/SCR13702/expected.xml
new file mode 100644
index 0000000..9ac879d
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/SCR13702/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems />
+
diff --git a/java/java-tests/testData/inspection/dataFlow/SCR13702/src/Foo.java b/java/java-tests/testData/inspection/dataFlow/SCR13702/src/Foo.java
new file mode 100644
index 0000000..84c31a6
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/SCR13702/src/Foo.java
@@ -0,0 +1,5 @@
+public class Foo {
+   public void foo() {
+      do {} while(false);
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/SCR13871/expected.xml b/java/java-tests/testData/inspection/dataFlow/SCR13871/expected.xml
new file mode 100644
index 0000000..9ac879d
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/SCR13871/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems />
+
diff --git a/java/java-tests/testData/inspection/dataFlow/SCR13871/src/Aaa.java b/java/java-tests/testData/inspection/dataFlow/SCR13871/src/Aaa.java
new file mode 100644
index 0000000..793f531
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/SCR13871/src/Aaa.java
@@ -0,0 +1,12 @@
+public class Aaa {
+  Object getObject() {
+    return null;
+  }
+  
+  void f() {
+    Object obj = getObject();
+    if (obj instanceof Aaa || obj == null) {
+      Aaa a = (Aaa) obj; // inspection reports that ClassCastException can be thrown
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/SCR14314/expected.xml b/java/java-tests/testData/inspection/dataFlow/SCR14314/expected.xml
new file mode 100644
index 0000000..092939a
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/SCR14314/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Finally.java</file>
+    <line>9</line>
+    <description>Method invocation 'o.hashCode()' may produce java.lang.NullPointerException</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/dataFlow/SCR14314/src/Finally.java b/java/java-tests/testData/inspection/dataFlow/SCR14314/src/Finally.java
new file mode 100644
index 0000000..2d8b048
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/SCR14314/src/Finally.java
@@ -0,0 +1,37 @@
+import java.io.*;
+
+public class Finally {
+   public void foo(Object o) {
+     try {
+       if (o == null) return;
+     }
+     finally {
+       System.out.println(o.hashCode()); // Error here.
+     }
+     System.out.println(o.hashCode()); // No error here.
+   }
+
+   public void bar(Object o) {
+      boolean rearrangeChildren = false;
+      Object typePattern;
+      try {
+        typePattern = parseTypePattern();
+      } catch (FileNotFoundException followsFailure) {
+        if (o != null) {
+          typePattern = followsFailure.getParsingResult();
+        } else {
+          throw followsFailure;
+        }
+
+        rearrangeChildren = true;
+      }
+
+      if (rearrangeChildren) {
+         System.out.println("Can be here.");
+      }
+   }
+
+   Object parseTypePattern() throws IOException {
+      return null;
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/SCR14819/expected.xml b/java/java-tests/testData/inspection/dataFlow/SCR14819/expected.xml
new file mode 100644
index 0000000..807c9ca
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/SCR14819/expected.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>3</line>
+    <description>Condition 't instanceof Test' is redundant</description>
+  </problem>
+  <problem>
+    <file>Test.java</file>
+    <line>9</line>
+    <description>Condition 't instanceof Test' always true</description>
+  </problem>
+  <problem>
+    <file>Test.java</file>
+    <line>14</line>
+    <description>Condition 'foo(null) instanceof Test' is redundant</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/dataFlow/SCR14819/src/Test.java b/java/java-tests/testData/inspection/dataFlow/SCR14819/src/Test.java
new file mode 100644
index 0000000..daf1450
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/SCR14819/src/Test.java
@@ -0,0 +1,17 @@
+public class Test {
+  public Test foo(Test t) {
+     if (t instanceof Test) { // redundant instanceof error here. t can be null
+       foo(null);
+     }
+  }
+  public Object bar(Test t) {
+     if (t == null) return;
+     if (t instanceof Test) { // always true error here. t can't be null
+       foo(null);
+     }
+
+     if (bar(null) instanceof Test) return null;  // no error here.
+     if (foo(null) instanceof Test) return null;  // redundant instanceof error here. foo(null) can be null
+     return null;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/SCR15162/expected.xml b/java/java-tests/testData/inspection/dataFlow/SCR15162/expected.xml
new file mode 100644
index 0000000..5f2ee35
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/SCR15162/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>NullTest.java</file>
+    <line>6</line>
+    <description>Dereference of 't' may produce java.lang.NullPointerException</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/dataFlow/SCR15162/src/NullTest.java b/java/java-tests/testData/inspection/dataFlow/SCR15162/src/NullTest.java
new file mode 100644
index 0000000..c598e75
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/SCR15162/src/NullTest.java
@@ -0,0 +1,9 @@
+public class NullTest {
+    int m;
+    void f() {};
+    public void x() {
+        NullTest t = null;
+        t.m = 12;
+        t.f();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/SCR15406/expected.xml b/java/java-tests/testData/inspection/dataFlow/SCR15406/expected.xml
new file mode 100644
index 0000000..ec272ab
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/SCR15406/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems/>
+
diff --git a/java/java-tests/testData/inspection/dataFlow/SCR15406/src/CodeFlowTest.java b/java/java-tests/testData/inspection/dataFlow/SCR15406/src/CodeFlowTest.java
new file mode 100644
index 0000000..f2953d7
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/SCR15406/src/CodeFlowTest.java
@@ -0,0 +1,31 @@
+import org.jetbrains.annotations.NotNull;
+
+public class CodeFlowTest {
+  public static void main (String[] args) {
+    String string;
+    Exception exception;
+    try {
+      string = getString();
+      exception = null;
+    } catch (SomeException e1) {
+      string = null;
+      exception = e1;
+    }
+
+    if (string != null)
+      System.out.println ("Not null");
+    else
+      exception.printStackTrace();
+  }
+
+  @NotNull 
+  private static String getString () throws SomeException {
+    if (Math.random() < 0.5)
+      throw new SomeException();
+    else
+      return "";
+  }
+
+  private static class SomeException extends Exception {
+  }
+}
diff --git a/java/java-tests/testData/inspection/dataFlow/SCR18186/expected.xml b/java/java-tests/testData/inspection/dataFlow/SCR18186/expected.xml
new file mode 100644
index 0000000..c63c925
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/SCR18186/expected.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems/>
diff --git a/java/java-tests/testData/inspection/dataFlow/SCR18186/src/Test.java b/java/java-tests/testData/inspection/dataFlow/SCR18186/src/Test.java
new file mode 100644
index 0000000..cbea397
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/SCR18186/src/Test.java
@@ -0,0 +1,61 @@
+import java.sql.*;
+
+public class Test {
+
+  /**
+   * Lädt den Datensatz.
+   */
+  private boolean loadValues(Transaction transaction) {
+    try {
+      boolean res=false;
+      PreparedStatement stmt=transaction.dirty() ? transaction.dbstore().stmtGetDirty(this) : transaction.dbstore().stmtGetClean(this);
+      if (stmt==null) return false;
+      synchronized(stmt) {
+        try {
+          transaction.dbmanager.dbstore().loadsCount++;
+          try {
+            fillPHPK(stmt, transaction);
+          } catch (SQLException e) {
+            DBManager.resetThread(stmt);
+            throw e;
+          }
+          ResultSet rs=stmt.executeQuery();
+          try {
+            if (rs.next()) {
+              loadOrdered(rs);
+              res=true;
+            } else if (transaction.dbmanager.accessCommitBug()) {
+              // Scheint manchmal in Access zu passieren....
+              PreparedStatement stmt1=transaction.dirty() ? stmtGetDirty(transaction.dbstore()) : stmtGetClean(transaction.dbstore());
+              synchronized(stmt1)
+              {
+                fillPHPK(stmt1, transaction);
+                ResultSet rs1=stmt1.executeQuery();
+                if (rs1.next()) {
+                  Dbg.pw("Second try to load object returns an object: "+toString()+"???");
+                  loadOrdered(rs1);
+                  res=true;
+                }
+                rs1.close();
+                stmt1.close();
+              }
+            }
+          } finally {
+            try {
+              rs.close();
+            } catch (SQLException e) {
+              Dbg.pw(e);
+            }
+          }
+        } catch (SQLException e) {
+          handleSQLException(e, stmt);
+        }
+      }
+      if (res) loadBlobs(transaction);
+      return res;
+    } catch (SQLException e) {
+      throw new ExceptionBag(e);
+    }
+  }
+
+}
diff --git a/java/java-tests/testData/inspection/dataFlow/SCR39950/expected.xml b/java/java-tests/testData/inspection/dataFlow/SCR39950/expected.xml
new file mode 100644
index 0000000..0953dd7
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/SCR39950/expected.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems />
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/SCR39950/src/Test.java b/java/java-tests/testData/inspection/dataFlow/SCR39950/src/Test.java
new file mode 100644
index 0000000..c31d7cf
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/SCR39950/src/Test.java
@@ -0,0 +1,12 @@
+interface Inter {}
+
+class Impl implements Inter {}
+
+class TestGenericsInstanceof<I extends Inter>
+{
+    I member;
+
+    {
+      boolean test = member instanceof Impl;
+    }
+}
diff --git a/java/java-tests/testData/inspection/dataFlow/StrangeArrayIndexOutOfBounds/expected.xml b/java/java-tests/testData/inspection/dataFlow/StrangeArrayIndexOutOfBounds/expected.xml
new file mode 100644
index 0000000..0953dd7
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/StrangeArrayIndexOutOfBounds/expected.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems />
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/StrangeArrayIndexOutOfBounds/src/Test.java b/java/java-tests/testData/inspection/dataFlow/StrangeArrayIndexOutOfBounds/src/Test.java
new file mode 100644
index 0000000..ac03eea
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/StrangeArrayIndexOutOfBounds/src/Test.java
@@ -0,0 +1,34 @@
+public class Test {
+  public void foo() {
+    Properties properties = new Properties();
+    InputStream inStream = null;
+    try {
+      removeCustomPrefixFromProperties(propertiesFile);
+
+      inStream = new FileInputStream(propertiesFile);
+      properties.load(inStream);
+
+      Enumeration<?> propertyNames = properties.propertyNames();
+      while (propertyNames.hasMoreElements()) {
+        String name = (String) propertyNames.nextElement();
+
+        setValue(name, properties.getProperty(name));
+      }
+
+    } catch (FileNotFoundException e) {
+      System.err.println(e.getMessage());
+      System.exit(-1);
+    }
+    catch (IOException e) {
+      LOG.error(e.getMessage(), e);
+    } finally {
+      if (inStream != null) {
+        try {
+          inStream.close();
+        } catch (IOException e) {
+          LOG.info(e);
+        }
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/SwitchEnumCases/expected.xml b/java/java-tests/testData/inspection/dataFlow/SwitchEnumCases/expected.xml
new file mode 100644
index 0000000..1592ccd
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/SwitchEnumCases/expected.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>72</line>
+    <description>Method invocation &lt;code&gt;foo.length()&lt;/code&gt; may produce &lt;code&gt;java.lang.NullPointerException&lt;/code&gt;</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/dataFlow/SwitchEnumCases/src/Test.java b/java/java-tests/testData/inspection/dataFlow/SwitchEnumCases/src/Test.java
new file mode 100644
index 0000000..db2b055
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/SwitchEnumCases/src/Test.java
@@ -0,0 +1,78 @@
+public class Test {
+  void withDefaultWithoutBreak(MyEnum e) {
+    String foo = null;
+    switch (e) {
+      case FOO:
+        foo = "foo";
+      case BAR:
+        foo = "bar";
+      default:
+        foo = "default";
+    }
+    int l = foo.length();
+  }
+
+  void withDefaultWithBreak(MyEnum e) {
+    String foo = null;
+    switch (e) {
+      case FOO:
+        foo = "foo";
+        break;
+      case BAR:
+        foo = "bar";
+        break;
+      default:
+        foo = "default";
+    }
+    int l = foo.length();
+  }
+
+  void withDefaultWithoutBar(MyEnum e) {
+    String foo = null;
+    switch (e) {
+      case FOO:
+        foo = "foo";
+        break;
+      default:
+        foo = "default";
+    }
+    int l = foo.length();
+  }
+
+  void withoutDefaultWithBreak(MyEnum e) {
+    String foo = null;
+    switch (e) {
+      case FOO:
+        foo = "foo";
+        break;
+      case BAR:
+        foo = "bar";
+        break;
+    }
+    int l = foo.length();
+  }
+
+  void withoutDefaultWithoutBreak(MyEnum e) {
+    String foo = null;
+    switch (e) {
+      case FOO:
+        foo = "foo";
+      case BAR:
+        foo = "bar";
+    }
+    int l = foo.length();
+  }
+
+  void withoutDefaultWithoutBar(MyEnum e) {
+    String foo = null;
+    switch (e) {
+      case FOO:
+        foo = "foo";
+    }
+    int l = foo.length();
+  }
+}
+
+enum MyEnum {
+  FOO, BAR;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/SwitchQualifierProducesNPE/expected.xml b/java/java-tests/testData/inspection/dataFlow/SwitchQualifierProducesNPE/expected.xml
new file mode 100644
index 0000000..75d75da
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/SwitchQualifierProducesNPE/expected.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+<problem>
+  <file>Test.java</file>
+  <line>10</line>
+  <description>Dereference of 'getE()' may produce 'NullPointerException'</description>
+</problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/dataFlow/SwitchQualifierProducesNPE/src/Test.java b/java/java-tests/testData/inspection/dataFlow/SwitchQualifierProducesNPE/src/Test.java
new file mode 100644
index 0000000..20105d0
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/SwitchQualifierProducesNPE/src/Test.java
@@ -0,0 +1,15 @@
+import org.jetbrains.annotations.Nullable;
+
+public class Test {
+    enum E { A, B }
+
+    @Nullable
+    static E getE() { return null; }
+
+    public static void main(String[] args) {
+        switch (getE()) {  // <<< should be highlighted as potential NPE
+            case A:
+            case B:
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/TryWithResourcesInstanceOf.java b/java/java-tests/testData/inspection/dataFlow/TryWithResourcesInstanceOf.java
new file mode 100644
index 0000000..f2ac4a8
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/TryWithResourcesInstanceOf.java
@@ -0,0 +1,30 @@
+class Test {
+  static class ResourcefulException1 extends Exception { }
+  static class ResourcefulException2 extends Exception { }
+  static class ResourcefulException3 extends Exception { }
+
+  static class ExceptionalResource implements AutoCloseable {
+    @Override public void close() throws ResourcefulException1 { }
+  }
+
+  ExceptionalResource provideExceptionalResource() throws ResourcefulException2 {
+    return new ExceptionalResource();
+  }
+
+  void m() {
+    try (ExceptionalResource r = provideExceptionalResource()) {
+      System.out.println(r);
+    }
+    catch (Exception e) {
+      if (e instanceof ResourcefulException1) {
+        System.out.println("1");
+      }
+      else if (e instanceof ResourcefulException2) {
+        System.out.println("2");
+      }
+      else if (<warning descr="Condition 'e instanceof ResourcefulException3' is always 'false'">e instanceof ResourcefulException3</warning>) {
+        System.out.println("3");
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/TryWithResourcesNullability.java b/java/java-tests/testData/inspection/dataFlow/TryWithResourcesNullability.java
new file mode 100644
index 0000000..80435df
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/TryWithResourcesNullability.java
@@ -0,0 +1,22 @@
+class Test {
+  static class MyResource implements AutoCloseable {
+    @Override public void close() { }
+  }
+
+  interface MyResourceProvider {
+    MyResource getResource();
+  }
+
+  void m1() throws Exception {
+    MyResourceProvider provider = null;
+    try (MyResource r = <warning descr="Method invocation 'provider.getResource()' may produce 'java.lang.NullPointerException'">provider.getResource()</warning>) {
+      System.out.println(r);
+    }
+  }
+
+  void m2() {
+    try (MyResource r = null) {
+      System.out.println(r);
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/YoleBug/expected.xml b/java/java-tests/testData/inspection/dataFlow/YoleBug/expected.xml
new file mode 100644
index 0000000..4113691
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/YoleBug/expected.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>9</line>
+    <description>'foo() != null' is always true</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/dataFlow/YoleBug/src/Test.java b/java/java-tests/testData/inspection/dataFlow/YoleBug/src/Test.java
new file mode 100644
index 0000000..0e83756
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/YoleBug/src/Test.java
@@ -0,0 +1,11 @@
+import org.jetbrains.annotations.*;
+public class Test {
+    @NotNull
+    public Object foo() {
+        return new Object();
+    }
+
+    public void qqq() {
+        int c = foo() != null ? foo().hashCode() : 0;
+    }
+}
diff --git a/java/java-tests/testData/inspection/dataFlow/andEq/expected.xml b/java/java-tests/testData/inspection/dataFlow/andEq/expected.xml
new file mode 100644
index 0000000..80ebc9e
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/andEq/expected.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>4</line>
+    <description>r is always true</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/dataFlow/andEq/src/Test.java b/java/java-tests/testData/inspection/dataFlow/andEq/src/Test.java
new file mode 100644
index 0000000..8919f15
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/andEq/src/Test.java
@@ -0,0 +1,8 @@
+public class Test {
+  public void foo(boolean x, boolean y, boolean z) {
+    boolean r = true;
+    r &= x;
+    r &= y;
+    r &= z;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/autoboxing/expected.xml b/java/java-tests/testData/inspection/dataFlow/autoboxing/expected.xml
new file mode 100644
index 0000000..47d68e5
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/autoboxing/expected.xml
@@ -0,0 +1,345 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+<problem>
+  <file>Test.java</file>
+  <line>5</line>
+  <method>
+    <name>void f(int k)</name>
+    <display_name>f(int)</display_name>
+    <package>&lt;default&gt;</package>
+    <class>
+      <name>Auto</name>
+      <display_name>Auto</display_name>
+    </class>
+  </method>
+  <problem_class>Constant conditions &amp; exceptions</problem_class>
+  <description>Condition &lt;code&gt;i==j&lt;/code&gt; is always &lt;code&gt;true&lt;/code&gt;</description>
+</problem>
+
+
+<problem>
+  <file>Test.java</file>
+  <line>9</line>
+  <method>
+    <name>void f(int k)</name>
+    <display_name>f(int)</display_name>
+    <package>&lt;default&gt;</package>
+    <class>
+      <name>Auto</name>
+      <display_name>Auto</display_name>
+    </class>
+  </method>
+  <problem_class>Constant conditions &amp; exceptions</problem_class>
+  <description>Condition &lt;code&gt;i==j2&lt;/code&gt; is always &lt;code&gt;false&lt;/code&gt;</description>
+</problem>
+
+
+<problem>
+  <file>Test.java</file>
+  <line>12</line>
+  <method>
+    <name>void f(int k)</name>
+    <display_name>f(int)</display_name>
+    <package>&lt;default&gt;</package>
+    <class>
+      <name>Auto</name>
+      <display_name>Auto</display_name>
+    </class>
+  </method>
+  <problem_class>Constant conditions &amp; exceptions</problem_class>
+  <description>Condition &lt;code&gt;i==0&lt;/code&gt; is always &lt;code&gt;true&lt;/code&gt;</description>
+</problem>
+
+
+<problem>
+  <file>Test.java</file>
+  <line>15</line>
+  <method>
+    <name>void f(int k)</name>
+    <display_name>f(int)</display_name>
+    <package>&lt;default&gt;</package>
+    <class>
+      <name>Auto</name>
+      <display_name>Auto</display_name>
+    </class>
+  </method>
+  <problem_class>Constant conditions &amp; exceptions</problem_class>
+  <description>Condition &lt;code&gt;i==1&lt;/code&gt; is always &lt;code&gt;false&lt;/code&gt;</description>
+</problem>
+
+  <problem>
+    <file>Test.java</file>
+    <line>22</line>
+    <method>
+      <name>void f(int k)</name>
+      <display_name>f(int)</display_name>
+      <package>&lt;default&gt;</package>
+      <class>
+        <name>Auto</name>
+        <display_name>Auto</display_name>
+      </class>
+    </method>
+    <problem_class>Constant conditions &amp; exceptions</problem_class>
+    <description>Condition &lt;code&gt;big1==333&lt;/code&gt; is always &lt;code&gt;true&lt;/code&gt;</description>
+  </problem>
+
+
+
+  <problem>
+    <file>Test.java</file>
+    <line>24</line>
+    <method>
+      <name>void f(int k)</name>
+      <display_name>f(int)</display_name>
+      <package>&lt;default&gt;</package>
+      <class>
+        <name>Auto</name>
+        <display_name>Auto</display_name>
+      </class>
+    </method>
+    <problem_class>Constant conditions &amp; exceptions</problem_class>
+    <description>Condition &lt;code&gt;333 == big2&lt;/code&gt; is always &lt;code&gt;true&lt;/code&gt;</description>
+  </problem>
+
+
+
+  <problem>
+    <file>Test.java</file>
+    <line>26</line>
+    <method>
+      <name>void f(int k)</name>
+      <display_name>f(int)</display_name>
+      <package>&lt;default&gt;</package>
+      <class>
+        <name>Auto</name>
+        <display_name>Auto</display_name>
+      </class>
+    </method>
+    <problem_class>Constant conditions &amp; exceptions</problem_class>
+    <description>Condition &lt;code&gt;333==333&lt;/code&gt; is always &lt;code&gt;true&lt;/code&gt;</description>
+  </problem>
+
+
+
+  <problem>
+    <file>Test.java</file>
+    <line>28</line>
+    <method>
+      <name>void f(int k)</name>
+      <display_name>f(int)</display_name>
+      <package>&lt;default&gt;</package>
+      <class>
+        <name>Auto</name>
+        <display_name>Auto</display_name>
+      </class>
+    </method>
+    <problem_class>Constant conditions &amp; exceptions</problem_class>
+    <description>Condition &lt;code&gt;big1==big2&lt;/code&gt; is always &lt;code&gt;false&lt;/code&gt;</description>
+  </problem>
+
+
+
+  <problem>
+    <file>Test.java</file>
+    <line>32</line>
+    <method>
+      <name>void f(int k)</name>
+      <display_name>f(int)</display_name>
+      <package>&lt;default&gt;</package>
+      <class>
+        <name>Auto</name>
+        <display_name>Auto</display_name>
+      </class>
+    </method>
+    <problem_class>Constant conditions &amp; exceptions</problem_class>
+    <description>Condition &lt;code&gt;prim==big2&lt;/code&gt; is always &lt;code&gt;true&lt;/code&gt;</description>
+  </problem>
+
+
+
+  <problem>
+    <file>Test.java</file>
+    <line>36</line>
+    <method>
+      <name>void f(int k)</name>
+      <display_name>f(int)</display_name>
+      <package>&lt;default&gt;</package>
+      <class>
+        <name>Auto</name>
+        <display_name>Auto</display_name>
+      </class>
+    </method>
+    <problem_class>Constant conditions &amp; exceptions</problem_class>
+    <description>Condition &lt;code&gt;big1 == 0&lt;/code&gt; is always &lt;code&gt;false&lt;/code&gt;</description>
+  </problem>
+
+
+
+  <problem>
+    <file>Test.java</file>
+    <line>39</line>
+    <method>
+      <name>void f(int k)</name>
+      <display_name>f(int)</display_name>
+      <package>&lt;default&gt;</package>
+      <class>
+        <name>Auto</name>
+        <display_name>Auto</display_name>
+      </class>
+    </method>
+    <problem_class>Constant conditions &amp; exceptions</problem_class>
+    <description>Condition &lt;code&gt;big1 == 332&lt;/code&gt; is always &lt;code&gt;false&lt;/code&gt;</description>
+  </problem>
+
+
+
+  <problem>
+    <file>Test.java</file>
+    <line>44</line>
+    <method>
+      <name>void f(int k)</name>
+      <display_name>f(int)</display_name>
+      <package>&lt;default&gt;</package>
+      <class>
+        <name>Auto</name>
+        <display_name>Auto</display_name>
+      </class>
+    </method>
+    <problem_class>Constant conditions &amp; exceptions</problem_class>
+    <description>Condition &lt;code&gt;c==1234&lt;/code&gt; is always &lt;code&gt;true&lt;/code&gt;</description>
+  </problem>
+
+
+
+  <problem>
+    <file>Test.java</file>
+    <line>47</line>
+    <method>
+      <name>void f(int k)</name>
+      <display_name>f(int)</display_name>
+      <package>&lt;default&gt;</package>
+      <class>
+        <name>Auto</name>
+        <display_name>Auto</display_name>
+      </class>
+    </method>
+    <problem_class>Constant conditions &amp; exceptions</problem_class>
+    <description>Condition &lt;code&gt;c==124&lt;/code&gt; is always &lt;code&gt;false&lt;/code&gt;</description>
+  </problem>
+
+
+
+  <problem>
+    <file>Test.java</file>
+    <line>51</line>
+    <method>
+      <name>void f(int k)</name>
+      <display_name>f(int)</display_name>
+      <package>&lt;default&gt;</package>
+      <class>
+        <name>Auto</name>
+        <display_name>Auto</display_name>
+      </class>
+    </method>
+    <problem_class>Constant conditions &amp; exceptions</problem_class>
+    <description>Condition &lt;code&gt;c==1234&lt;/code&gt; is always &lt;code&gt;false&lt;/code&gt;</description>
+  </problem>
+
+
+
+  <problem>
+    <file>Test.java</file>
+    <line>54</line>
+    <method>
+      <name>void f(int k)</name>
+      <display_name>f(int)</display_name>
+      <package>&lt;default&gt;</package>
+      <class>
+        <name>Auto</name>
+        <display_name>Auto</display_name>
+      </class>
+    </method>
+    <problem_class>Constant conditions &amp; exceptions</problem_class>
+    <description>Condition &lt;code&gt;c==c&lt;/code&gt; is always &lt;code&gt;true&lt;/code&gt;</description>
+  </problem>
+
+
+
+  <problem>
+    <file>Test.java</file>
+    <line>58</line>
+    <method>
+      <name>void f(int k)</name>
+      <display_name>f(int)</display_name>
+      <package>&lt;default&gt;</package>
+      <class>
+        <name>Auto</name>
+        <display_name>Auto</display_name>
+      </class>
+    </method>
+    <problem_class>Constant conditions &amp; exceptions</problem_class>
+    <description>Condition &lt;code&gt;c==c2&lt;/code&gt; is always &lt;code&gt;true&lt;/code&gt;</description>
+  </problem>
+
+  <problem>
+    <file>Test.java</file>
+    <line>73</line>
+    <method>
+      <name>void canBeStatic(int x)</name>
+      <display_name>canBeStatic(int)</display_name>
+      <package>&lt;default&gt;</package>
+      <class>
+        <name>aaa</name>
+        <display_name>aaa</display_name>
+      </class>
+    </method>
+    <problem_class>Constant conditions &amp; exceptions</problem_class>
+    <description>Condition &lt;code&gt;a == 5&lt;/code&gt; is always &lt;code&gt;false&lt;/code&gt;</description>
+  </problem>
+  <problem>
+    <file>Test.java</file>
+    <line>83</line>
+    <method>
+      <name>void f(int p)</name>
+      <display_name>f(int)</display_name>
+      <package>&lt;default&gt;</package>
+      <class>
+        <name>aaa</name>
+        <display_name>aaa</display_name>
+      </class>
+    </method>
+    <problem_class>Constant conditions &amp; exceptions</problem_class>
+    <description>Condition &lt;code&gt;i1 == i2&lt;/code&gt; is always &lt;code&gt;true&lt;/code&gt;</description>
+  </problem>
+
+  <!--
+  <problem>
+    <file>Test.java</file>
+    <line>103</line>
+    <description>'r==r1' is always false</description>
+  </problem>
+  -->
+
+  <problem>
+    <file>Test.java</file>
+    <line>107</line>
+    <description>'r2==r3' is always false</description>
+  </problem>
+
+
+  <!--
+  <problem>
+    <file>Test.java</file>
+    <line>112</line>
+    <description>'fr==fr1' is always false</description>
+  </problem>
+  -->
+
+
+  <problem>
+    <file>Test.java</file>
+    <line>116</line>
+    <description>'fr2==fr3' is always false</description>
+  </problem>
+
+</problems>
diff --git a/java/java-tests/testData/inspection/dataFlow/autoboxing/src/Test.java b/java/java-tests/testData/inspection/dataFlow/autoboxing/src/Test.java
new file mode 100644
index 0000000..38139de
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/autoboxing/src/Test.java
@@ -0,0 +1,119 @@
+public class Auto {
+    void f(int k) {
+        Integer i = 0;
+        Integer j=0;    
+        if (i==j) {
+
+        }
+        Integer j2 = 1;
+        if (i==j2) {
+            
+        }
+        if (i==0) {
+            
+        }
+        if (i==1) {
+            
+        }
+
+        //////////////////
+        Integer big1 = 333;
+        Integer big2=  333;
+        if (big1==333) {
+        }
+        if (333 == big2) {
+        }
+        if (333==333) {
+        }
+        if (big1==big2) {
+
+        }
+        int prim = big1;
+        if (prim==big2) {
+
+        }
+
+        if (big1 == 0) {
+
+        }
+        if (big1 == 332) {
+
+        }
+
+        Character c = 1234;
+        if (c==1234) {
+
+        }
+        if (c==124) {
+
+        }
+        c = 1;
+        if (c==1234) {
+
+        }
+        if (c==c) {
+
+        }
+        Character c2 = 1;
+        if (c==c2) {
+
+        }
+    }
+}
+class aaa {
+  int a;
+  int b;
+  void canBeStatic(int x) {
+      for (int i=0;i<10;i++) {
+       a = i;
+      }
+
+      a = 4;
+
+    if (a == 5) {
+    }
+  }
+
+
+    void f(int p) {
+        {
+            int i = 1;
+            Integer i1 = i;
+            Integer i2 = i;
+            if (i1 == i2) {
+
+            }
+        }
+        {
+            int i = p;
+            Integer i1 = i;
+            Integer i2 = i;
+            if (i1 == i2) {
+
+            }
+        }
+    }
+
+}
+class UsesDoubleAndFloat {
+    void f() {
+        double dd = 10.0;
+        Double r = dd;
+        Double r1 = dd;
+        System.out.println("(r==r1) is "+(r==r1));
+
+        Double r2 = 10.0;
+        Double r3 = 10.0;
+        System.out.println("(r2==r3) is "+(r2==r3));
+
+        float fd = 10.0f;
+        Float fr = fd;
+        Float fr1 = fd;
+        System.out.println("(r==r1) is "+(fr==fr1));
+
+        Float fr2 = 10.0f;
+        Float fr3 = 10.0f;
+        System.out.println("(r2==r3) is "+(fr2==fr3));
+    
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/boxingBoolean/expected.xml b/java/java-tests/testData/inspection/dataFlow/boxingBoolean/expected.xml
new file mode 100644
index 0000000..d04ea28
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/boxingBoolean/expected.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>14</line>
+    <description>Condition &lt;code&gt;c&lt;/code&gt; is always &lt;code&gt;false&lt;/code&gt;.</description>
+  </problem>
+
+  <problem>
+    <file>Test.java</file>
+    <line>20</line>
+    <description>Condition &lt;code&gt;c&lt;/code&gt; is always &lt;code&gt;true&lt;/code&gt;.</description>
+  </problem>
+
+  <problem>
+    <file>Test.java</file>
+    <line>33</line>
+    <description>Condition &lt;code&gt;o&lt;/code&gt; is always &lt;code&gt;true&lt;/code&gt;.</description>
+  </problem>
+
+  <problem>
+    <file>Test.java</file>
+    <line>39</line>
+    <description>Condition &lt;code&gt;o&lt;/code&gt; is always &lt;code&gt;false&lt;/code&gt;.</description>
+  </problem>
+
+  <problem>
+    <file>Test.java</file>
+    <line>45</line>
+    <description>Condition &lt;code&gt;o&lt;/code&gt; is always &lt;code&gt;true&lt;/code&gt;.</description>
+  </problem>
+
+  <problem>
+    <file>Test.java</file>
+    <line>51</line>
+    <description>Condition &lt;code&gt;o&lt;/code&gt; at the left side of assignment expression is always &lt;code&gt;false&lt;/code&gt;. Can be simplified to normal assignment.</description>
+  </problem>
+
+</problems>
diff --git a/java/java-tests/testData/inspection/dataFlow/boxingBoolean/src/Test.java b/java/java-tests/testData/inspection/dataFlow/boxingBoolean/src/Test.java
new file mode 100644
index 0000000..15e38ed
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/boxingBoolean/src/Test.java
@@ -0,0 +1,55 @@
+public class S {
+    void f(Boolean override) {
+
+        if (override == null) {
+            //doSomething();
+        } else if (override) {    // always false?
+            //doOverride();
+        }
+
+    }
+        public void te0(boolean b){
+            Boolean c = false;
+    //        if (b) c = true;
+            if (c) {
+            }
+        }
+        public void te1(boolean b){
+            Boolean c = true;
+    //        if (b) c = true;
+            if (c) {
+            }
+        }
+        public void te2(boolean b){
+            Boolean c = false;
+            if (b) c = true;
+            if (c) {
+            }
+        }
+
+    public void te3(boolean b){
+        Boolean c = Boolean.FALSE;
+        boolean o = !c;
+        if (o) {
+        }
+    }
+    public void te4(boolean b){
+        Boolean c = Boolean.FALSE;
+        boolean o = c;
+        if (o) {
+        }
+    }
+    public void te5(boolean b){
+        Boolean c = Boolean.TRUE;
+        boolean o = b||c;
+        if (o) {
+        }
+    }
+    public void te6(boolean b){
+        Boolean c = Boolean.TRUE;
+        boolean o = !c;
+        o |= c&b;
+        if (o) {
+        }
+    }
+}
diff --git a/java/java-tests/testData/inspection/dataFlow/caseAndNpe/expected.xml b/java/java-tests/testData/inspection/dataFlow/caseAndNpe/expected.xml
new file mode 100644
index 0000000..a83ef7b
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/caseAndNpe/expected.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>CaseAndNpe.java</file>
+    <line>79</line>
+    <description>Condition 'a != null' is always true</description>
+  </problem>
+  <problem>
+    <file>CaseAndNpe.java</file>
+    <line>26</line>
+    <description>Method invocation 'o.equals(o)' may produce NullPointerException</description>
+  </problem>
+  <problem>
+    <file>CaseAndNpe.java</file>
+    <line>48</line>
+    <description>Switch label 'case 1:' is unreachable</description>
+  </problem>
+  <problem>
+    <file>CaseAndNpe.java</file>
+    <line>49</line>
+    <description>Switch label 'case 2:' is unreachable</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/dataFlow/caseAndNpe/src/CaseAndNpe.java b/java/java-tests/testData/inspection/dataFlow/caseAndNpe/src/CaseAndNpe.java
new file mode 100644
index 0000000..91643d5
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/caseAndNpe/src/CaseAndNpe.java
@@ -0,0 +1,122 @@
+/*
+ * Created by IntelliJ IDEA.
+ * User: max
+ * Date: Jan 4, 2002
+ * Time: 4:01:21 PM
+ * To change template for new interface use
+ * Code Style | Class Templates options (Tools | IDE Options).
+ */
+package test.deadcode;
+
+import java.io.IOException;
+
+public class aaa {
+  int a;
+  int b;
+
+  void x(int i, Object o) {
+    if (o == null) {
+      i = 2;
+    }
+
+    if (o instanceof String) {
+      o.equals(o);
+    }
+
+    o.equals(o);
+
+    if (i == 3) {
+      System.out.println("");
+    }
+    if (i == 3) {
+      o.equals(o);
+      o.equals(o);
+    }
+
+    o.equals(o);
+
+
+    if (i == 2) {
+      i = 6;
+    } else {
+      i = 5;
+    }
+
+    //System.exit(0);
+
+    switch(i) {
+      case 1: System.out.println("1 not reachable"); break;
+      case 2: System.out.println("2 not reachable"); break;
+      case 6: System.out.println("6 reachable"); break;
+      case 5: System.out.println("5 reachable"); break;
+      default: System.out.println("Default not reachable"); break;
+    }
+    int j = 0;
+
+    for (; i < 5; i++, j++) {}
+  }
+
+  void canBeStatic() {
+    for (int i = 15; i >= 0; --i)
+    {
+      if ((i==4) || (i==10))
+      {
+        //actual block body removed
+      }
+    }
+
+    for (int i = 0; i < null; i++) {
+      a = i;
+      this.a = i;
+    }
+
+    if (a != b && a != 5) {
+      a = 3;
+    } else {
+      a = 4;
+    }
+
+    if (a != null && a instanceof aaa) {
+      if (true) {
+        //a = new aaa();
+      }
+    }
+
+    a = 6 + 1;
+  }
+}
+
+
+class Test
+{
+  public static int myunusedfield1 = 0;
+  // --Recycle Bin (3/29/02 6:44 PM)public static int myunusedfield2 = 0;
+  public static int myunusedfield3 = 0;
+  // --Recycle Bin (3/29/02 6:44 PM)public static int myunusedfield4 = 0;
+  public static int myunusedfield5 = 0;
+
+
+     void testMethod1() throws IOException {}
+     void testMethod2() throws IOException {}
+
+     public void main(String argv[])
+     {
+          boolean callingMethod1 = false;
+          try
+          {
+            int i = (int) 0;
+               callingMethod1 = true;
+               testMethod1();
+               callingMethod1 = false;
+               testMethod2();
+          }
+          catch (IOException e)
+          {
+               if (callingMethod1)
+                    System.err.println("Error while calling method 1");
+               else
+                    System.err.println("Error while calling method 2");
+          }
+     }
+}
+
diff --git a/java/java-tests/testData/inspection/dataFlow/cce/expected.xml b/java/java-tests/testData/inspection/dataFlow/cce/expected.xml
new file mode 100644
index 0000000..5567d5d
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/cce/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Cce.java</file>
+    <line>12</line>
+    <description>may produce ClassCastException</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/dataFlow/cce/src/Cce.java b/java/java-tests/testData/inspection/dataFlow/cce/src/Cce.java
new file mode 100644
index 0000000..a8bc96e
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/cce/src/Cce.java
@@ -0,0 +1,19 @@
+class A {
+}
+
+class B {
+}
+
+public class Cce {
+   public void a() {
+      Object o = getObject();
+
+      if (o instanceof A) {
+        B b = (B) o;
+      }
+   }
+
+   Object getObject() {
+     return new A();
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/compileTimeConst/expected.xml b/java/java-tests/testData/inspection/dataFlow/compileTimeConst/expected.xml
new file mode 100644
index 0000000..9b4185d
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/compileTimeConst/expected.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+<problem>
+  <file>Test.java</file>
+  <line>6</line>
+  <method>
+    <name>void foo(boolean param)</name>
+    <display_name>foo(boolean)</display_name>
+    <package>&lt;default&gt;</package>
+    <class>
+      <name>Y</name>
+      <display_name>Y</display_name>
+    </class>
+  </method>
+  <problem_class>Constant conditions &amp; exceptions</problem_class>
+  <description>Condition &lt;code&gt;b&lt;/code&gt; is always &lt;code&gt;true&lt;/code&gt;.</description>
+</problem>
+  <problem>
+    <file>Test.java</file>
+    <line>5</line>
+    <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Constant conditions &amp; exceptions</problem_class>
+    <description>Condition &lt;code&gt;CONST&lt;/code&gt; is always &lt;code&gt;true&lt;/code&gt;</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/dataFlow/compileTimeConst/src/Test.java b/java/java-tests/testData/inspection/dataFlow/compileTimeConst/src/Test.java
new file mode 100644
index 0000000..0d302a7
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/compileTimeConst/src/Test.java
@@ -0,0 +1,9 @@
+public class Y {   
+    private static final boolean CONST = true;
+
+    public void foo(boolean param) {
+        boolean b = CONST || param;
+        if (b) {
+        }
+    }
+}
diff --git a/java/java-tests/testData/inspection/dataFlow/constantExpr/expected.xml b/java/java-tests/testData/inspection/dataFlow/constantExpr/expected.xml
new file mode 100644
index 0000000..8e16932
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/constantExpr/expected.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>6</line>
+    <description>Condition 'i == j' is always true</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/dataFlow/constantExpr/src/Test.java b/java/java-tests/testData/inspection/dataFlow/constantExpr/src/Test.java
new file mode 100644
index 0000000..4ec9205
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/constantExpr/src/Test.java
@@ -0,0 +1,9 @@
+public class Test {
+  private static final int CONST = 3/2 + 0*1;
+  public void foo() {
+    int i = 0;
+    int j = 2 + (CONST) - 6/2;
+    if (i == j) {
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/exceptionCFG/expected.xml b/java/java-tests/testData/inspection/dataFlow/exceptionCFG/expected.xml
new file mode 100644
index 0000000..9ac879d
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/exceptionCFG/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems />
+
diff --git a/java/java-tests/testData/inspection/dataFlow/exceptionCFG/src/ExceptionCFG.java b/java/java-tests/testData/inspection/dataFlow/exceptionCFG/src/ExceptionCFG.java
new file mode 100644
index 0000000..659fd1f
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/exceptionCFG/src/ExceptionCFG.java
@@ -0,0 +1,34 @@
+import java.io.*;
+
+class Test
+{
+  public static int myunusedfield1 = 0;
+  // --Recycle Bin (3/29/02 6:44 PM)public static int myunusedfield2 = 0;
+  public static int myunusedfield3 = 0;
+  // --Recycle Bin (3/29/02 6:44 PM)public static int myunusedfield4 = 0;
+  public static int myunusedfield5 = 0;
+
+
+     void testMethod1() throws IOException {}
+     void testMethod2() throws IOException {}
+
+     public void main(String argv[])
+     {
+          boolean callingMethod1 = false;
+          try
+          {
+            int i = (int) 0;
+               callingMethod1 = true;
+               testMethod1();
+               callingMethod1 = false;
+               testMethod2();
+          }
+          catch (IOException e)
+          {
+               if (callingMethod1)
+                    System.err.println("Error while calling method 1");
+               else
+                    System.err.println("Error while calling method 2");
+          }
+     }
+}
diff --git a/java/java-tests/testData/inspection/dataFlow/finalFields/expected.xml b/java/java-tests/testData/inspection/dataFlow/finalFields/expected.xml
new file mode 100644
index 0000000..796a315
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/finalFields/expected.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems />
diff --git a/java/java-tests/testData/inspection/dataFlow/finalFields/src/Test.java b/java/java-tests/testData/inspection/dataFlow/finalFields/src/Test.java
new file mode 100644
index 0000000..5cc2372
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/finalFields/src/Test.java
@@ -0,0 +1,16 @@
+import org.jetbrains.annotations.Nullable;
+
+public class Test {
+  @Nullable public final String o;
+
+  public Test(String q) { o = q; }
+
+  public void test() {
+    if (o != null) {
+      bar();
+      o.hashCode();
+    }
+  }
+
+  public void bar() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/AnnReport.java b/java/java-tests/testData/inspection/dataFlow/fixture/AnnReport.java
new file mode 100644
index 0000000..811b41c
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/AnnReport.java
@@ -0,0 +1,21 @@
+import org.jetbrains.annotations.NotNull;
+
+public class ASD {
+  static void foo(Object any) {
+    boolean a = false;
+    boolean b = false;
+    while (true) {
+      boolean trg = bar() == any;
+
+      a = a || trg;
+      b = b || !trg;
+
+      if (b && a) break;
+    }
+  }
+
+  @NotNull
+  static Object bar() {
+    return new Object();
+  }
+}
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/AnnotatedTypeParameters.java b/java/java-tests/testData/inspection/dataFlow/fixture/AnnotatedTypeParameters.java
new file mode 100644
index 0000000..d982b0c
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/AnnotatedTypeParameters.java
@@ -0,0 +1,32 @@
+import foo.NotNull;
+import foo.Nullable;
+
+import java.util.List;
+
+class Test {
+  private static void test(List<@NotNull Object> list) {
+    if (<warning descr="Condition 'list.get(0) == null' is always 'false'">list.get(0) == null</warning>) {
+      return;
+    }
+    list.add(<warning descr="Passing 'null' argument to parameter annotated as @NotNull">null</warning>);
+  }
+  private static void test2(List<@Nullable Object> list) {
+    if (list.get(0) == null) {
+      return;
+    }
+    list.add(null);
+  }
+
+  private static void test3(Ref<@NotNull Object> ref) {
+    if (<warning descr="Condition 'ref.value == null' is always 'false'">ref.value == null</warning>) {
+      return;
+    }
+    ref.value = <warning descr="'null' is assigned to a variable that is annotated with @NotNull">null</warning>;
+  }
+
+
+}
+
+class Ref<T> {
+  T value;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/AssertFailInCatch.java b/java/java-tests/testData/inspection/dataFlow/fixture/AssertFailInCatch.java
new file mode 100644
index 0000000..93fcf6d
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/AssertFailInCatch.java
@@ -0,0 +1,24 @@
+import org.jetbrains.annotations.NotNull;
+import org.junit.Assert;
+
+class Test {
+
+  public static void foo() {
+    String result = null;
+    try {
+      result = createString();
+    }
+    catch (Exception e) {
+      Assert.fail();
+    }
+    finally {
+      if (result == null) {
+        System.out.println("Analysis failed!");
+      }
+    }
+  }
+
+  private static @NotNull String createString() {
+    throw new NullPointerException();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/AssigningClassLiteralToNullable.java b/java/java-tests/testData/inspection/dataFlow/fixture/AssigningClassLiteralToNullable.java
new file mode 100644
index 0000000..14e44ea
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/AssigningClassLiteralToNullable.java
@@ -0,0 +1,14 @@
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+public class BrokenAlignment {
+
+  public void main(String... args) {
+    @Nullable Class object = Object.class;
+    output2(object);
+  }
+
+  public static void output2(@NotNull Object value) {
+    System.out.println(value);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/AssigningUnknownToNullable.java b/java/java-tests/testData/inspection/dataFlow/fixture/AssigningUnknownToNullable.java
new file mode 100644
index 0000000..b8d1a1e
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/AssigningUnknownToNullable.java
@@ -0,0 +1,12 @@
+import org.jetbrains.annotations.Nullable;
+
+public class BrokenAlignment {
+
+  String unknown(String s) { return s; }
+
+  public void example(@Nullable String value) {
+    value = unknown(<warning descr="Argument 'value' might be null but passed to non annotated parameter">value</warning>);
+    if (value.contains("%")) {
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/BigMethodNotComplex.java b/java/java-tests/testData/inspection/dataFlow/fixture/BigMethodNotComplex.java
new file mode 100644
index 0000000..8a1ff44
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/BigMethodNotComplex.java
@@ -0,0 +1,56 @@
+public abstract class DDD {
+  abstract boolean condition();
+  abstract Object foo();
+  abstract Object bar();
+
+  void test(Object o, DDD another) {
+    try {
+      System.out.println(condition() && equals(o) ? another.foo() : another.bar());
+      System.out.println(condition() && equals(o) ? another.foo() : another.bar());
+      System.out.println(condition() && equals(o) ? another.foo() : another.bar());
+      System.out.println(condition() && equals(o) ? another.foo() : another.bar());
+      System.out.println(condition() && equals(o) ? another.foo() : another.bar());
+      System.out.println(condition() && equals(o) ? another.foo() : another.bar());
+      System.out.println(condition() && equals(o) ? another.foo() : another.bar());
+      System.out.println(condition() && equals(o) ? another.foo() : another.bar());
+      System.out.println(condition() && equals(o) ? another.foo() : another.bar());
+      System.out.println(condition() && equals(o) ? another.foo() : another.bar());
+      System.out.println(condition() && equals(o) ? another.foo() : another.bar());
+      System.out.println(condition() && equals(o) ? another.foo() : another.bar());
+      System.out.println(condition() && equals(o) ? another.foo() : another.bar());
+      System.out.println(condition() && equals(o) ? another.foo() : another.bar());
+      System.out.println(condition() && equals(o) ? another.foo() : another.bar());
+      System.out.println(condition() && equals(o) ? another.foo() : another.bar());
+      System.out.println(condition() && equals(o) ? another.foo() : another.bar());
+      System.out.println(condition() && equals(o) ? another.foo() : another.bar());
+      System.out.println(condition() && equals(o) ? another.foo() : another.bar());
+      System.out.println(condition() && equals(o) ? another.foo() : another.bar());
+      System.out.println(condition() && equals(o) ? another.foo() : another.bar());
+      System.out.println(condition() && equals(o) ? another.foo() : another.bar());
+      System.out.println(condition() && equals(o) ? another.foo() : another.bar());
+      System.out.println(condition() && equals(o) ? another.foo() : another.bar());
+      System.out.println(condition() && equals(o) ? another.foo() : another.bar());
+      System.out.println(condition() && equals(o) ? another.foo() : another.bar());
+      System.out.println(condition() && equals(o) ? another.foo() : another.bar());
+      System.out.println(condition() && equals(o) ? another.foo() : another.bar());
+      System.out.println(condition() && equals(o) ? another.foo() : another.bar());
+      System.out.println(condition() && equals(o) ? another.foo() : another.bar());
+      System.out.println(condition() && equals(o) ? another.foo() : another.bar());
+      System.out.println(condition() && equals(o) ? another.foo() : another.bar());
+      System.out.println(condition() && equals(o) ? another.foo() : another.bar());
+      System.out.println(condition() && equals(o) ? another.foo() : another.bar());
+      System.out.println(condition() && equals(o) ? another.foo() : another.bar());
+      System.out.println(condition() && equals(o) ? another.foo() : another.bar());
+      System.out.println(condition() && equals(o) ? another.foo() : another.bar());
+      System.out.println(condition() && equals(o) ? another.foo() : another.bar());
+      System.out.println(condition() && equals(o) ? another.foo() : another.bar());
+      System.out.println(condition() && equals(o) ? another.foo() : another.bar());
+      System.out.println(condition() && equals(o) ? another.foo() : another.bar());
+      System.out.println(condition() && equals(o) ? another.foo() : another.bar());
+    }
+    catch (Exception e) {
+      System.out.println(e);
+    }
+  }
+
+}
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/Boxing128.java b/java/java-tests/testData/inspection/dataFlow/fixture/Boxing128.java
new file mode 100644
index 0000000..1bdd5a4
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/Boxing128.java
@@ -0,0 +1,11 @@
+class Foo {
+  public void foo() {
+    Integer a = 128;
+    Integer b = (int) a;// cast is necessary because new object is created
+    Integer c = 128;
+
+    System.out.println(a == b);
+    System.out.println(<warning descr="Condition 'a == c' is always 'false'">a == c</warning>);
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/BuildRegexpNotComplex.java b/java/java-tests/testData/inspection/dataFlow/fixture/BuildRegexpNotComplex.java
new file mode 100644
index 0000000..6655dea
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/BuildRegexpNotComplex.java
@@ -0,0 +1,16 @@
+class X  {
+
+  public static void buildRegexp(String pattern, int exactPrefixLen, boolean forCompletion) {
+    System.out.println(!forCompletion && pattern.endsWith(" "));
+    System.out.println(exactPrefixLen == 0);
+    boolean prevIsUppercase = false;
+    for (int i = 0; i < pattern.length(); i++) {
+      final char c = pattern.charAt(i);
+      if (c == '*') { }
+      else if (c == ' ') { }
+      else if (c == ':' || prevIsUppercase) { }
+    }
+
+  }
+
+}
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/CanBeNullDoesntImplyIsNull.java b/java/java-tests/testData/inspection/dataFlow/fixture/CanBeNullDoesntImplyIsNull.java
new file mode 100644
index 0000000..56f5771
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/CanBeNullDoesntImplyIsNull.java
@@ -0,0 +1,14 @@
+import org.jetbrains.annotations.Nullable;
+
+public class DDD {
+  int test(boolean t) {
+    if (t && <warning descr="Dereference of 'fff()' may produce 'java.lang.NullPointerException'">fff()</warning>.length == 1) {
+      return 0;
+    }
+    return 1;
+  }
+
+  public @Nullable DDD[] fff() {
+    return new DDD[8];
+  }
+}
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/CatchRuntimeException.java b/java/java-tests/testData/inspection/dataFlow/fixture/CatchRuntimeException.java
new file mode 100644
index 0000000..193b3bc
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/CatchRuntimeException.java
@@ -0,0 +1,48 @@
+import org.jetbrains.annotations.NotNull;
+
+public class BrokenAlignment {
+
+  @NotNull
+  Object test1() {
+    try {
+      bar(<warning descr="Passing 'null' argument to parameter annotated as @NotNull">null</warning>);
+      return <warning descr="'null' is returned by the method declared as @NotNull">null</warning>;
+    }
+    catch (RuntimeException e) {
+      return <warning descr="'null' is returned by the method declared as @NotNull">null</warning>;
+    }
+  }
+
+  @NotNull
+  Object test2() {
+    try {
+      bar(<warning descr="Passing 'null' argument to parameter annotated as @NotNull">null</warning>);
+      return <warning descr="'null' is returned by the method declared as @NotNull">null</warning>;
+    }
+    catch (IllegalArgumentException | IllegalStateException e) {
+      return <warning descr="'null' is returned by the method declared as @NotNull">null</warning>;
+    }
+  }
+
+  @NotNull
+  Object test3() {
+    try {
+      bar(<warning descr="Passing 'null' argument to parameter annotated as @NotNull">null</warning>);
+      return <warning descr="'null' is returned by the method declared as @NotNull">null</warning>;
+    }
+    catch (AssertionError | IllegalStateException e) {
+      return <warning descr="'null' is returned by the method declared as @NotNull">null</warning>;
+    }
+  }
+
+  public void bar(@NotNull Object foo) {
+    assert <warning descr="Condition 'foo != null' is always 'true'">foo != null</warning>;
+  }
+
+  public void bar2(@NotNull Object foo) {
+    assert <warning descr="Condition 'foo != null' is always 'true'">foo != null</warning>;
+    try { }
+    catch (java.lang.RuntimeException ex) { }
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/ChainedFinalFieldAccessorsDfa.java b/java/java-tests/testData/inspection/dataFlow/fixture/ChainedFinalFieldAccessorsDfa.java
new file mode 100644
index 0000000..8cf8bbd
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/ChainedFinalFieldAccessorsDfa.java
@@ -0,0 +1,84 @@
+import org.jetbrains.annotations.Nullable;
+
+import java.lang.String;
+
+public class BrokenAlignment {
+
+  void main(Data data) {
+    if (data.getText() != null) {
+      System.out.println(data.getText().hashCode());
+    }
+
+    data = new Data(null, <warning descr="Passing 'null' argument to non annotated parameter">null</warning>);
+    System.out.println(<warning descr="Method invocation 'data.getText().hashCode()' may produce 'java.lang.NullPointerException'">data.getText().hashCode()</warning>);
+
+    if (data.inner() != null) {
+      System.out.println(data.inner().hashCode());
+      System.out.println(<warning descr="Method invocation 'data.inner().getText().hashCode()' may produce 'java.lang.NullPointerException'">data.inner().getText().hashCode()</warning>);
+      if (data.inner() != null) {
+        System.out.println(data.inner().hashCode());
+      }
+
+      data = new Data(null, <warning descr="Passing 'null' argument to non annotated parameter">null</warning>);
+      System.out.println(<warning descr="Method invocation 'data.inner().hashCode()' may produce 'java.lang.NullPointerException'">data.inner().hashCode()</warning>);
+    }
+  }
+
+  void main2(Data data) {
+    if (data.inner() != null && data.inner().getText() != null) {
+      System.out.println(data.inner().hashCode());
+      System.out.println(data.inner().getText().hashCode());
+    }
+  }
+
+  void main3(Data data) {
+    if (data.innerOverridden() != null) {
+      System.out.println(data.innerOverridden().hashCode());
+    }
+    if (data.something() != null) {
+      System.out.println(<warning descr="Method invocation 'data.something().hashCode()' may produce 'java.lang.NullPointerException'">data.something().hashCode()</warning>);
+    }
+  }
+
+  private static class Data {
+    @Nullable final String text;
+    @Nullable final Data inner;
+
+    Data(@Nullable String text, Data inner) {
+      this.text = text;
+      this.inner = inner;
+    }
+
+    @Nullable
+    public String getText() {
+      return text;
+    }
+
+    @Nullable
+    public Data inner() {
+      return inner;
+    }
+
+    @Nullable
+    public Data innerOverridden() {
+      return inner;
+    }
+
+    @Nullable
+    public String something() {
+      return new String();
+    }
+  }
+
+  class DataImpl extends Data {
+    DataImpl(@Nullable String text, Data inner) {
+      super(text, inner);
+    }
+
+    @Nullable
+    @Override
+    public Data innerOverridden() {
+      return super.innerOverridden();
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/ChainedFinalFieldsDfa.java b/java/java-tests/testData/inspection/dataFlow/fixture/ChainedFinalFieldsDfa.java
new file mode 100644
index 0000000..0096d82
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/ChainedFinalFieldsDfa.java
@@ -0,0 +1,40 @@
+import org.jetbrains.annotations.Nullable;
+public class BrokenAlignment {
+
+  void main(Data data) {
+    if (data.text != null) {
+      System.out.println(data.text.hashCode());
+    }
+
+    data = new Data(null, <warning descr="Passing 'null' argument to non annotated parameter">null</warning>);
+    System.out.println(<warning descr="Method invocation 'data.text.hashCode()' may produce 'java.lang.NullPointerException'">data.text.hashCode()</warning>);
+
+    if (data.inner != null) {
+      System.out.println(data.inner.hashCode());
+      System.out.println(<warning descr="Method invocation 'data.inner.text.hashCode()' may produce 'java.lang.NullPointerException'">data.inner.text.hashCode()</warning>);
+      if (<warning descr="Condition 'data.inner != null' is always 'true'">data.inner != null</warning>) {
+        System.out.println(data.inner.hashCode());
+      }
+
+      data = new Data(null, <warning descr="Passing 'null' argument to non annotated parameter">null</warning>);
+      System.out.println(<warning descr="Method invocation 'data.inner.hashCode()' may produce 'java.lang.NullPointerException'">data.inner.hashCode()</warning>);
+    }
+  }
+
+  void main2(Data data) {
+    if (data.inner != null && data.inner.text != null) {
+      System.out.println(data.inner.hashCode());
+      System.out.println(data.inner.text.hashCode());
+    }
+  }
+
+  private static class Data {
+    @Nullable public final String text;
+    @Nullable public final Data inner;
+
+    Data(@Nullable String text, Data inner) {
+      this.text = text;
+      this.inner = inner;
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/CheckFieldInitializers.java b/java/java-tests/testData/inspection/dataFlow/fixture/CheckFieldInitializers.java
new file mode 100644
index 0000000..e6a87ac
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/CheckFieldInitializers.java
@@ -0,0 +1,13 @@
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+
+class Foo {
+  @Nullable static Object foo() { return null; }
+  static String bar(@NotNull Object arg) { return ""; }
+}
+class Bar {
+  public static final String s = Foo.bar(<warning descr="Argument 'Foo.foo()' might be null">Foo.foo()</warning>);
+  @NotNull public static Object o = <warning descr="Expression 'Foo.foo()' might evaluate to null but is assigned to a variable that is annotated with @NotNull">Foo.foo()</warning>;
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/ComparingToNotNullShouldNotAffectNullity.java b/java/java-tests/testData/inspection/dataFlow/fixture/ComparingToNotNullShouldNotAffectNullity.java
new file mode 100644
index 0000000..b44b6f8
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/ComparingToNotNullShouldNotAffectNullity.java
@@ -0,0 +1,26 @@
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Collection;
+
+public class Bar3 {
+
+  @NotNull
+  Object getObj() {
+    return new Object();
+  }
+
+  void foo(Collection<Object> collection) {
+    if (!collection.isEmpty()) {
+      Object first = collection.iterator().next();
+      if (first != getObj() || collection.size() > 0) {
+        System.out.println(first.hashCode());
+      }
+      if (first == getObj() || collection.size() > 0) {
+        System.out.println(first.hashCode());
+      }
+      if (first == null) {
+        System.out.println(<warning descr="Method invocation 'first.hashCode()' may produce 'java.lang.NullPointerException'">first.hashCode()</warning>);
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/ConstantDoubleComparisons.java b/java/java-tests/testData/inspection/dataFlow/fixture/ConstantDoubleComparisons.java
new file mode 100644
index 0000000..f126ac1
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/ConstantDoubleComparisons.java
@@ -0,0 +1,11 @@
+class Foo {
+
+  private void foo() {
+    double d = Double.MIN_VALUE;
+    while (true) {
+      if (d == Double.MIN_VALUE) {
+        d = 0;
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/ContinueFlushesLoopVariable.java b/java/java-tests/testData/inspection/dataFlow/fixture/ContinueFlushesLoopVariable.java
new file mode 100644
index 0000000..0328521
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/ContinueFlushesLoopVariable.java
@@ -0,0 +1,28 @@
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.sql.SQLException;
+import java.util.Map;
+
+public class Main {
+  public static String escapeAndUnescapeSymbols(String s, StringBuilder builder) {
+    boolean escaped = false;
+    for (int i = 0; i < s.length(); i++) {
+      final char ch = s.charAt(i);
+      if (escaped) {
+        if (ch=='n') builder.append('\n');
+        if (<warning descr="Condition 'escaped' is always 'true'">escaped</warning>) break;
+        escaped = false;
+        continue;
+      }
+      if (ch == '\\') {
+        escaped = true;
+        continue;
+      }
+      builder.append(ch);
+    }
+    return builder.toString();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/EqualsConstant.java b/java/java-tests/testData/inspection/dataFlow/fixture/EqualsConstant.java
new file mode 100644
index 0000000..d4d1a15
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/EqualsConstant.java
@@ -0,0 +1,10 @@
+import org.jetbrains.annotations.*;
+class Class1 {
+  public void f(@Nullable Object o) {
+    o = o != null ? o : Class2.O;
+    o.toString();
+  }
+}
+class Class2 {
+  static final Object O = new Object();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/EqualsEnumConstant.java b/java/java-tests/testData/inspection/dataFlow/fixture/EqualsEnumConstant.java
new file mode 100644
index 0000000..20e7b59
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/EqualsEnumConstant.java
@@ -0,0 +1,13 @@
+import org.jetbrains.annotations.*;
+class TestIDEAWarn {
+  void method(@Nullable MyEnum e) {
+    if (e != MyEnum.foo) {return;}
+    System.out.println(e.hashCode());
+  }
+  void method2(@Nullable MyEnum e) {
+    if (e == MyEnum.foo) {
+      System.out.println(e.hashCode());
+    }
+  }
+}
+enum MyEnum { foo, bar }
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/EqualsImpliesNotNull.java b/java/java-tests/testData/inspection/dataFlow/fixture/EqualsImpliesNotNull.java
new file mode 100644
index 0000000..4327644
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/EqualsImpliesNotNull.java
@@ -0,0 +1,24 @@
+import org.jetbrains.annotations.NotNull;
+
+class Test {
+  public static void main(String[] args) {
+    Object first = null;
+    for (int i = 0; i < 10; i++) {
+      if (!"b".equals(first)) {
+        first = "b";
+      }
+      System.out.println(first.toString());
+    }
+  }
+
+  public void buggyInspectionExample(Object parentNode) {
+    final String parentName = parentNode == null ? null : parentNode.toString();
+    if ("Topics".equals(parentName)) {
+      System.out.println(parentNode.toString());
+    } else if ("Queues".equals(parentName)) {
+      System.out.println(parentNode.toString());
+    }
+    System.out.println(<warning descr="Method invocation 'parentNode.toString()' may produce 'java.lang.NullPointerException'">parentNode.toString()</warning>);
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/EqualsNotNull.java b/java/java-tests/testData/inspection/dataFlow/fixture/EqualsNotNull.java
new file mode 100644
index 0000000..0459c90
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/EqualsNotNull.java
@@ -0,0 +1,77 @@
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+public class Main {
+  @NotNull
+  private Object test1(@NotNull Object defVal, @Nullable final Object val) {
+    return defVal;
+  }
+  @NotNull
+  private Object test11(@NotNull Object defVal, @Nullable final Object val) {
+    if (val != null) {
+      return val;
+    }
+    return defVal;
+  }
+  @NotNull
+  private Object test5(@NotNull Object defVal, @Nullable final Object val) {
+    if (defVal == val) {
+      return val;
+    }
+    return defVal;
+  }
+  @NotNull
+  private Object test6(@NotNull Object defVal, @Nullable final Object val) {
+    if (val == defVal) {
+      return val;
+    }
+    return defVal;
+  }
+  @NotNull
+  private Object test7(@NotNull Object defVal, @Nullable final Object val) {
+    if (<warning descr="Method invocation 'val.equals(defVal)' may produce 'java.lang.NullPointerException'">val.equals(defVal)</warning>) {
+      return defVal;
+    }
+    return defVal;
+  }
+  @NotNull
+  private Object test8(@NotNull Object defVal, @Nullable final Object val) {
+    if (defVal.equals(val)) {
+      return val;
+    }
+    return defVal;
+  }
+  @NotNull private Object test9(@NotNull Object defVal, @Nullable final Object val) {
+    if (equals(val)) {
+      return val;
+    }
+    return defVal;
+  }
+  @NotNull private Object test10(@NotNull Object defVal, @Nullable final Object val) {
+    if (val != null) {
+      return val;
+    }
+    if (defVal.equals(val)) {
+      return val;
+    }
+    return defVal;
+  }
+
+  @NotNull
+  private static Object test(@NotNull Object defVal, @Nullable final Object val) {
+    if (val != null) {
+      return val;
+    }
+    if (<warning descr="Condition 'defVal == val' is always 'false'">defVal == val</warning>) {
+      return val;
+    }
+    if (<warning descr="Condition 'val == defVal' is always 'false'">val == defVal</warning>) {
+      return val;
+    }
+    if (defVal.equals(val)) {
+      return val;
+    }
+    return defVal;
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/FieldChangedBetweenSynchronizedBlocks.java b/java/java-tests/testData/inspection/dataFlow/fixture/FieldChangedBetweenSynchronizedBlocks.java
new file mode 100644
index 0000000..411e3a0
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/FieldChangedBetweenSynchronizedBlocks.java
@@ -0,0 +1,20 @@
+public class Bar {
+  private Object field;
+  private final Object lock = new Object();
+
+  public void main() {
+    synchronized (lock) {
+      if (field != null) {
+        return;
+      }
+    }
+    synchronized (lock) {
+      if (field != null) {
+        return;
+      }
+      if (<warning descr="Condition 'field == null' is always 'true'">field == null</warning>) {
+        System.out.println();
+      }
+    }
+  }
+}
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/FieldInAnonymous.java b/java/java-tests/testData/inspection/dataFlow/fixture/FieldInAnonymous.java
new file mode 100644
index 0000000..92d4a5d
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/FieldInAnonymous.java
@@ -0,0 +1,36 @@
+class Zoo2 {
+  private boolean condition;
+  private final boolean condition2;
+
+  Zoo2(boolean condition2) {
+    this.condition2 = condition2;
+  }
+
+  Runnable foo() {
+    if (!condition) {
+      return new Runnable() {
+
+        public void run() {
+          if (condition) {
+            System.out.println("aaa");
+          }
+        }
+      };
+    }
+    if (!condition2) {
+      return new Runnable() {
+
+        public void run() {
+          if (<warning descr="Condition 'condition2' is always 'false'">condition2</warning>) {
+            System.out.println("aaa");
+          }
+        }
+      };
+    }
+    return <warning descr="'null' is returned by the method which isn't declared as @Nullable">null</warning>;
+  }
+
+  public void setCondition(boolean condition) {
+    this.condition = condition;
+  }
+}
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/FieldInitializerInAnonymous.java b/java/java-tests/testData/inspection/dataFlow/fixture/FieldInitializerInAnonymous.java
new file mode 100644
index 0000000..0eddf38
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/FieldInitializerInAnonymous.java
@@ -0,0 +1,18 @@
+import org.jetbrains.annotations.Nullable;
+
+class Zoo2 {
+
+  void foo(@Nullable Object foo) {
+    if (foo == null) {
+      return;
+    }
+
+    new Runnable() {
+      int hc = foo.hashCode();
+
+      public void run() {
+      }
+    }.run();
+  }
+
+}
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/FinalFieldsDifferentInstances.java b/java/java-tests/testData/inspection/dataFlow/fixture/FinalFieldsDifferentInstances.java
new file mode 100644
index 0000000..ef403e7
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/FinalFieldsDifferentInstances.java
@@ -0,0 +1,21 @@
+public class BrokenAlignment {
+
+  private static boolean dominates(final WatchRequestImpl request, final WatchRequestImpl other) {
+    if (request.myToWatchRecursively) {
+      return other.myRootPath.startsWith(request.myRootPath);
+    }
+
+    return !other.myToWatchRecursively && request.myRootPath.equals(other.myRootPath);
+  }
+
+  private static class WatchRequestImpl {
+    private final boolean myToWatchRecursively;
+    private final String myRootPath = "";
+
+    private WatchRequestImpl(boolean toWatchRecursively) {
+      myToWatchRecursively = toWatchRecursively;
+    }
+
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/FinalFieldsInitializedByAnnotatedParameters.java b/java/java-tests/testData/inspection/dataFlow/fixture/FinalFieldsInitializedByAnnotatedParameters.java
new file mode 100644
index 0000000..db7d0b4
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/FinalFieldsInitializedByAnnotatedParameters.java
@@ -0,0 +1,30 @@
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.lang.Object;
+
+public class Doo {
+  private final Object myA;
+  private final Object myB;
+  private final Object myC;
+
+  public Doo(@Nullable Object myA, @NotNull Object myB, Object c) {
+    this.myA = myA;
+    this.myB = myB;
+    myC = c;
+  }
+
+  int bar() {
+    return myC.hashCode();
+  }
+
+
+  int foo() {
+    if (<warning descr="Condition 'myB != null' is always 'true'">myB != null</warning> &&
+    <warning descr="Method invocation 'myA.equals(myB)' may produce 'java.lang.NullPointerException'">myA.equals(myB)</warning>) {
+      return 2;
+    }
+
+    return myA.hashCode();
+  }
+}
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/FinalLoopVariableInstanceof.java b/java/java-tests/testData/inspection/dataFlow/fixture/FinalLoopVariableInstanceof.java
new file mode 100644
index 0000000..f60cad9
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/FinalLoopVariableInstanceof.java
@@ -0,0 +1,16 @@
+public class Test {
+
+  public static void main(Object[] args) throws Exception {
+    boolean elvisLives = false;
+    for (final Object o : args) {
+      if (o instanceof Integer) {
+        elvisLives = true;
+      } else {
+        if (elvisLives) {
+          System.err.println("Elvis is alive!");
+        }
+      }
+    }
+  }
+
+}
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/GeneratedEquals.java b/java/java-tests/testData/inspection/dataFlow/fixture/GeneratedEquals.java
new file mode 100644
index 0000000..225b452
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/GeneratedEquals.java
@@ -0,0 +1,20 @@
+public class Bar {
+  int foo;
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) return true;
+    if (!(o instanceof Bar)) return false;
+
+    Bar bar = (Bar) o;
+
+    if (foo != bar.foo) return false;
+
+    return true;
+  }
+
+  @Override
+  public int hashCode() {
+    return foo;
+  }
+}
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/GreaterIsNotEquals.java b/java/java-tests/testData/inspection/dataFlow/fixture/GreaterIsNotEquals.java
new file mode 100644
index 0000000..8e7cc5d
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/GreaterIsNotEquals.java
@@ -0,0 +1,8 @@
+class Zoo2 {
+  void foo(java.util.List[] dealsInfo) {
+    final int dealsNumber = dealsInfo != null && dealsInfo.length == 2 ? dealsInfo[0].size() : 0;
+    if (dealsNumber > 0) {
+      System.out.println(dealsInfo[0].get(0));
+    }
+  }
+}
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/IDEA84489.java b/java/java-tests/testData/inspection/dataFlow/fixture/IDEA84489.java
new file mode 100644
index 0000000..20230a7
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/IDEA84489.java
@@ -0,0 +1,11 @@
+class Main {
+  static class User {
+    public int RegistrationState;
+  }
+
+  public static void fun(User user) {
+    if ((user.RegistrationState == 5 || user.RegistrationState == 10) == true) {
+
+    }
+  }
+}
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/LastConstantConditionInAnd.java b/java/java-tests/testData/inspection/dataFlow/fixture/LastConstantConditionInAnd.java
new file mode 100644
index 0000000..be27aa71
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/LastConstantConditionInAnd.java
@@ -0,0 +1,14 @@
+class Fun {
+  private void parseDeclarator(Object builder, boolean isTuple) {
+    if (!isTuple) {
+      return;
+    }
+    else {
+      if (smth() && <warning descr="Condition 'isTuple' is always 'true' when reached">isTuple</warning>) {
+        System.out.println();
+      }
+    }
+  }
+
+  boolean smth() { return true; }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/LocalClass.java b/java/java-tests/testData/inspection/dataFlow/fixture/LocalClass.java
new file mode 100644
index 0000000..76196ec
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/LocalClass.java
@@ -0,0 +1,17 @@
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+class Test {
+  void f(@Nullable final Object x) {
+    if (x != null) {
+      class C {
+        C(@NotNull Object x) {
+        }
+
+        C() {
+          this(x);
+        }
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/MethodCallFlushesField.java b/java/java-tests/testData/inspection/dataFlow/fixture/MethodCallFlushesField.java
new file mode 100644
index 0000000..d43c76e
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/MethodCallFlushesField.java
@@ -0,0 +1,21 @@
+import org.jetbrains.annotations.Nullable;
+
+class Fun {
+  @Nullable
+  private Object foo;
+
+  public Fun() {
+    foo = new Object();
+    makeMagic();
+
+    if (null == foo) {
+      System.out.println("hello");
+    }
+
+  }
+
+  private void makeMagic() {
+    foo = null;
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/MultiCatch.java b/java/java-tests/testData/inspection/dataFlow/fixture/MultiCatch.java
new file mode 100644
index 0000000..2ffc4a1
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/MultiCatch.java
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ */
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.sql.SQLException;
+import java.util.Map;
+
+class Multicatch {
+  @NotNull
+  public Map test(String name) {
+    try (InputStream s = build()) {
+      return <warning descr="'null' is returned by the method declared as @NotNull">null</warning>;
+    } catch (SQLException | IOException e) {
+      throw new RuntimeException(e);
+    }
+  }
+
+  private InputStream build() throws SQLException {
+    return <warning descr="'null' is returned by the method which isn't declared as @Nullable">null</warning>;
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/MutableNotAnnotatedFieldsTreatment.java b/java/java-tests/testData/inspection/dataFlow/fixture/MutableNotAnnotatedFieldsTreatment.java
new file mode 100644
index 0000000..a7c67e0
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/MutableNotAnnotatedFieldsTreatment.java
@@ -0,0 +1,68 @@
+import org.jetbrains.annotations.Nullable;
+
+class Foo {
+  Object data;
+
+  void checkNotNullAndUse(Foo f) {
+    if (f.data != null) {
+      System.out.println(f.data.hashCode());
+    }
+  }
+
+  void checkNullAndReturn(Foo f) {
+    if (f.data == null) {
+      return;
+    }
+    System.out.println(f.data.hashCode());
+  }
+
+  void warnWhenWrongCheck() {
+    if (data != null) {
+      return;
+    }
+    System.out.println(<warning descr="Method invocation 'data.hashCode()' may produce 'java.lang.NullPointerException'">data.hashCode()</warning>);
+    System.out.println(data.hashCode());
+  }
+
+  void dontWarnWhenNotChecked(Foo f) {
+    System.out.println(f.data.hashCode());
+  }
+  
+  void dontWarnWhenNotCheckedThis() {
+    System.out.println(data.hashCode());
+  }
+  
+  void dontWarnWhenDoubleChecked(Foo f) {
+    if (f.data == null) {
+      return;
+    }
+    if (f.data == null) {
+      return;
+    }
+    System.out.println(f.data.hashCode());
+  }
+
+  void dontWarnWhenDoubleChecked_This_Synchronized() {
+    if (data == null) {
+      return;
+    }
+    synchronized (this) {
+      if (data == null) {
+        return;
+      }
+    }
+    System.out.println(data.hashCode());
+  }
+  
+  void dontWarnWhenDoubleChecked_This_WithMethodCall() {
+    if (data == null) {
+      return;
+    }
+    System.out.println(data.hashCode());
+    if (data == null) {
+      return;
+    }
+    System.out.println(data.hashCode());
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/MutableNullableFieldsTreatment.java b/java/java-tests/testData/inspection/dataFlow/fixture/MutableNullableFieldsTreatment.java
new file mode 100644
index 0000000..ee2b181
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/MutableNullableFieldsTreatment.java
@@ -0,0 +1,70 @@
+import org.jetbrains.annotations.Nullable;
+
+class Foo {
+  @Nullable Object data;
+
+  void checkNotNullAndUse(Foo f) {
+    if (f.data != null) {
+      System.out.println(f.data.hashCode());
+    }
+  }
+
+  void checkNullAndReturn(Foo f) {
+    if (f.data == null) {
+      return;
+    }
+    System.out.println(f.data.hashCode());
+  }
+
+  void warnWhenWrongCheck() {
+    if (data != null) {
+      return;
+    }
+    System.out.println(<warning descr="Method invocation 'data.hashCode()' may produce 'java.lang.NullPointerException'">data.hashCode()</warning>);
+    System.out.println(data.hashCode());
+  }
+
+  void warnWhenNotCheckedOnce(Foo f) {
+    System.out.println(<warning descr="Method invocation 'f.data.hashCode()' may produce 'java.lang.NullPointerException'">f.data.hashCode()</warning>);
+    System.out.println(f.data.hashCode());
+  }
+  
+  void warnWhenNotCheckedThisOnce() {
+    System.out.println(<warning descr="Method invocation 'data.hashCode()' may produce 'java.lang.NullPointerException'">data.hashCode()</warning>);
+    System.out.println(data.hashCode());
+  }
+  
+  void dontWarnWhenDoubleChecked(Foo f) {
+    if (f.data == null) {
+      return;
+    }
+    if (f.data == null) {
+      return;
+    }
+    System.out.println(f.data.hashCode());
+  }
+
+  void dontWarnWhenDoubleChecked_This_Synchronized() {
+    if (data == null) {
+      return;
+    }
+    synchronized (this) {
+      if (data == null) {
+        return;
+      }
+    }
+    System.out.println(data.hashCode());
+  }
+  
+  void dontWarnWhenDoubleChecked_This_WithMethodCall() {
+    if (data == null) {
+      return;
+    }
+    System.out.println(data.hashCode());
+    if (data == null) {
+      return;
+    }
+    System.out.println(data.hashCode());
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/MutableVolatileNullableFieldsTreatment.java b/java/java-tests/testData/inspection/dataFlow/fixture/MutableVolatileNullableFieldsTreatment.java
new file mode 100644
index 0000000..e5cdac1
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/MutableVolatileNullableFieldsTreatment.java
@@ -0,0 +1,68 @@
+import org.jetbrains.annotations.Nullable;
+
+class Foo {
+  @Nullable volatile Object data;
+
+  void checkNotNullAndUse(Foo f) {
+    if (f.data != null) {
+      System.out.println(<warning descr="Method invocation 'f.data.hashCode()' may produce 'java.lang.NullPointerException'">f.data.hashCode()</warning>);
+    }
+  }
+
+  void checkNullAndReturn(Foo f) {
+    if (f.data == null) {
+      return;
+    }
+    System.out.println(<warning descr="Method invocation 'f.data.hashCode()' may produce 'java.lang.NullPointerException'">f.data.hashCode()</warning>);
+  }
+
+  void warnWhenWrongCheck() {
+    if (data != null) {
+      return;
+    }
+    System.out.println(<warning descr="Method invocation 'data.hashCode()' may produce 'java.lang.NullPointerException'">data.hashCode()</warning>);
+    System.out.println(<warning descr="Method invocation 'data.hashCode()' may produce 'java.lang.NullPointerException'">data.hashCode()</warning>);
+  }
+
+  void warnWhenNotChecked(Foo f) {
+    System.out.println(<warning descr="Method invocation 'f.data.hashCode()' may produce 'java.lang.NullPointerException'">f.data.hashCode()</warning>);
+  }
+  
+  void warnWhenNotCheckedThis() {
+    System.out.println(<warning descr="Method invocation 'data.hashCode()' may produce 'java.lang.NullPointerException'">data.hashCode()</warning>);
+  }
+  
+  void dontWarnWhenDoubleChecked(Foo f) {
+    if (f.data == null) {
+      return;
+    }
+    if (f.data == null) {
+      return;
+    }
+    System.out.println(<warning descr="Method invocation 'f.data.hashCode()' may produce 'java.lang.NullPointerException'">f.data.hashCode()</warning>);
+  }
+
+  void dontWarnWhenDoubleChecked_This_Synchronized() {
+    if (data == null) {
+      return;
+    }
+    synchronized (this) {
+      if (data == null) {
+        return;
+      }
+    }
+    System.out.println(<warning>data.hashCode()</warning>);
+  }
+  
+  void dontWarnWhenDoubleChecked_This_WithMethodCall() {
+    if (data == null) {
+      return;
+    }
+    System.out.println(<warning>data.hashCode()</warning>);
+    if (data == null) {
+      return;
+    }
+    System.out.println(<warning>data.hashCode()</warning>);
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/NotEqualsDoesntImplyNotNullity.java b/java/java-tests/testData/inspection/dataFlow/fixture/NotEqualsDoesntImplyNotNullity.java
new file mode 100644
index 0000000..e74585c
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/NotEqualsDoesntImplyNotNullity.java
@@ -0,0 +1,21 @@
+import org.jetbrains.annotations.Nullable;
+class TestIDEAWarn {
+  void test(java.util.Map<Object, Object> values) {
+    boolean condition = false;
+    Object target = getTarget();
+    for (Object o : values.values()) {
+      if (o != null && o != target) {
+        condition = true;
+      }
+    }
+    if (!condition || target == null) {
+      System.out.println(target);
+    }
+  }
+
+  @Nullable
+  public Object getTarget() {
+    return null;
+  }
+
+}
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/NotGreaterIsNotEquals.java b/java/java-tests/testData/inspection/dataFlow/fixture/NotGreaterIsNotEquals.java
new file mode 100644
index 0000000..6528fcd
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/NotGreaterIsNotEquals.java
@@ -0,0 +1,38 @@
+import org.jetbrains.annotations.NotNull;
+
+import java.io.File;
+
+class Zoo2 {
+  public static boolean startsWith(@NotNull String path, @NotNull String start, final boolean caseSensitive) {
+    final int length1 = path.length();
+    final int length2 = start.length();
+    if (length2 == 0) return true;
+    if (length2 > length1) return false;
+    if (!path.regionMatches(!caseSensitive, 0, start, 0, length2)) return false;
+    if (length1 == length2) return true;
+    char last2 = start.charAt(length2 - 1);
+    char next1;
+    if (last2 == '/' || last2 == File.separatorChar) {
+      next1 = path.charAt(length2 - 1);
+    }
+    else {
+      next1 = path.charAt(length2);
+    }
+    return next1 == '/' || next1 == File.separatorChar;
+  }
+  void foo(Some me, Some other) {
+    if (me.depth < other.depth) {
+      System.out.println("less");
+    } else if (other.depth > me.depth) {
+      System.out.println("more");
+    }
+  }
+}
+
+class Some {
+  final int depth;
+
+  Some(int depth) {
+    this.depth = depth;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/NullCheckDoesntAffectUncheckedCast.java b/java/java-tests/testData/inspection/dataFlow/fixture/NullCheckDoesntAffectUncheckedCast.java
new file mode 100644
index 0000000..2f85648
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/NullCheckDoesntAffectUncheckedCast.java
@@ -0,0 +1,15 @@
+public class DataFlowBug {
+
+  public int add2(Object left, Object right) {
+    if (left != null && !(left instanceof String)) {
+      return ((<warning descr="Casting 'left' to 'String' may produce 'java.lang.ClassCastException'">String</warning>) left).length();
+
+    }
+    if (!(right instanceof String)) {
+      return ((<warning descr="Casting 'right' to 'String' may produce 'java.lang.ClassCastException'">String</warning>) right).length();
+
+    }
+    return 2;
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/NullableAnonymousMethod.java b/java/java-tests/testData/inspection/dataFlow/fixture/NullableAnonymousMethod.java
new file mode 100644
index 0000000..2d82c8b
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/NullableAnonymousMethod.java
@@ -0,0 +1,18 @@
+import org.jetbrains.annotations.Nullable;
+
+public class Bar {
+
+    void navigateTo() {
+        Computable c = new Computable() {
+            @Nullable  
+            public Object compute() {
+                return null;
+            }
+        };
+    }
+
+}
+
+interface Computable {
+    @Nullable Object compute();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/NullableAnonymousParameter.java b/java/java-tests/testData/inspection/dataFlow/fixture/NullableAnonymousParameter.java
new file mode 100644
index 0000000..86c527e
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/NullableAnonymousParameter.java
@@ -0,0 +1,17 @@
+import org.jetbrains.annotations.Nullable;
+
+public class Bar {
+
+    void navigateTo(final@Nullable Object p) {
+      if (p == null) {
+        return;
+      }
+
+        Runnable c = new Runnable() {
+            public void run() {
+                p.hashCode();
+            }
+        };
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/NullableAnonymousVolatile.java b/java/java-tests/testData/inspection/dataFlow/fixture/NullableAnonymousVolatile.java
new file mode 100644
index 0000000..c97dd0b
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/NullableAnonymousVolatile.java
@@ -0,0 +1,26 @@
+import javax.swing.*;
+
+class Test {
+    public void setObj(Object obj) {
+        this.obj = obj;
+    }
+
+    public void test() {
+        obj = new Object();
+        javax.swing.SwingUtilities.invokeLater(new Runnable() {
+            public void run() {
+                Object o = obj;
+                if (o != null) {
+                    System.out.println("x");
+                }
+            }
+        });
+        final Object u = new Object();
+        if (<warning descr="Condition 'u != null' is always 'true'">u != null</warning>) {
+          System.out.println("y");
+        }
+        obj = null;
+    }
+
+    private volatile Object obj;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/NullableAnonymousVolatileNotNull.java b/java/java-tests/testData/inspection/dataFlow/fixture/NullableAnonymousVolatileNotNull.java
new file mode 100644
index 0000000..b5a0e03
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/NullableAnonymousVolatileNotNull.java
@@ -0,0 +1,24 @@
+import org.jetbrains.annotations.NotNull;
+
+import javax.swing.*;
+
+class Test {
+    public void setObj(Object obj) {
+        this.obj = obj;
+    }
+
+    public void test() {
+        obj = new Object();
+        SwingUtilities.invokeLater(new Runnable() {
+            public void run() {
+                Object o = obj;
+                if (<warning descr="Condition 'o != null' is always 'true'">o != null</warning>) {
+                    System.out.println("x");
+                }
+            }
+        });
+      obj = <warning descr="'null' is assigned to a variable that is annotated with @NotNull">null</warning>;
+    }
+
+    @NotNull private volatile Object obj;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/NullableField.java b/java/java-tests/testData/inspection/dataFlow/fixture/NullableField.java
new file mode 100644
index 0000000..0a341d3
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/NullableField.java
@@ -0,0 +1,9 @@
+import org.jetbrains.annotations.Nullable;
+
+public class DDD {
+  @Nullable
+  String field;
+  int test() {
+    return <warning descr="Method invocation 'new DDD().field.hashCode()' may produce 'java.lang.NullPointerException'">new DDD().field.hashCode()</warning>;
+  }
+}
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/NullableForeachVariable.java b/java/java-tests/testData/inspection/dataFlow/fixture/NullableForeachVariable.java
new file mode 100644
index 0000000..4fa1c64
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/NullableForeachVariable.java
@@ -0,0 +1,20 @@
+import foo.Nullable;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Foo {
+  void foo1(List<Integer> list) {
+    for (@Nullable Integer i : list) {
+      System.out.println(<warning descr="Method invocation 'i.intValue()' may produce 'java.lang.NullPointerException'">i.intValue()</warning>);
+    }
+  }
+  void foo2(List<@Nullable Integer> list) {
+    for (@Nullable Integer i : list) {
+      System.out.println(<warning descr="Method invocation 'i.intValue()' may produce 'java.lang.NullPointerException'">i.intValue()</warning>);
+    }
+  }
+
+}
+
+
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/PassingNullableIntoVararg.java b/java/java-tests/testData/inspection/dataFlow/fixture/PassingNullableIntoVararg.java
new file mode 100644
index 0000000..cb746af8
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/PassingNullableIntoVararg.java
@@ -0,0 +1,10 @@
+import org.jetbrains.annotations.NotNull;
+
+class Test {
+  public static void test(@NotNull Object... objects) { }
+
+  public static void main(String[] args) {
+    Object o = null;
+    test(o);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/PreserveNullableOnUncheckedCast.java b/java/java-tests/testData/inspection/dataFlow/fixture/PreserveNullableOnUncheckedCast.java
new file mode 100644
index 0000000..f063d12
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/PreserveNullableOnUncheckedCast.java
@@ -0,0 +1,16 @@
+import org.jetbrains.annotations.NotNull;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+public class BrokenAlignment {
+  void t() {
+    @NotNull Collection list = new ArrayList();
+    List<String> strings = (List<String>) list;
+    if (<warning descr="Condition 'strings != null' is always 'true'">strings != null</warning>) {
+      int foo = 42;
+    }
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/ReturningNullFromVoidMethod.java b/java/java-tests/testData/inspection/dataFlow/fixture/ReturningNullFromVoidMethod.java
new file mode 100644
index 0000000..e544bf1
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/ReturningNullFromVoidMethod.java
@@ -0,0 +1,6 @@
+public class BrokenAlignment {
+
+  Void test() {
+    return null;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/SkipAssertions.java b/java/java-tests/testData/inspection/dataFlow/fixture/SkipAssertions.java
new file mode 100644
index 0000000..486fdcb
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/SkipAssertions.java
@@ -0,0 +1,21 @@
+import org.jetbrains.annotations.NotNull;
+
+class Test {
+  private static void test(@NotNull Object foo) {
+    assert foo != null;
+  }
+
+  private static void test2(@NotNull Object foo) {
+    if (foo == null) {
+      throw new IllegalArgumentException();
+    }
+  }
+  private static void test3(@NotNull Object foo) {
+    if (foo == null) throw new IllegalArgumentException();
+  }
+
+  private static void test4(@NotNull Object foo) {
+    if (<warning descr="Condition 'foo != null' is always 'true'">foo != null</warning>) throw new IllegalArgumentException();
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/StringTernaryAlwaysTrue.java b/java/java-tests/testData/inspection/dataFlow/fixture/StringTernaryAlwaysTrue.java
new file mode 100644
index 0000000..93255d9a
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/StringTernaryAlwaysTrue.java
@@ -0,0 +1,12 @@
+class Foo {
+  public void foo() {
+    final boolean flag = true;
+
+    bar(<warning descr="Condition 'flag' is always 'true'">flag</warning> ? "a" : "b",
+      <warning descr="Condition 'flag' is always 'true'">flag</warning> ? new String[]{"aa"} : new String[]{"bb"}
+    );
+  }
+
+  void bar(String b, String[] a) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/SymmetricUncheckedCast.java b/java/java-tests/testData/inspection/dataFlow/fixture/SymmetricUncheckedCast.java
new file mode 100644
index 0000000..8c1087b
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/SymmetricUncheckedCast.java
@@ -0,0 +1,22 @@
+import java.util.Date;
+
+public class DataFlowBug {
+
+  private static boolean isNumberable(Object o) {
+    return o instanceof Number;
+  }
+
+  public Object add(Object left, Object right) {
+    if (left != null && right != null && (left instanceof Date || right instanceof Date)) {
+      if (isNumberable(left)) {
+        return ((<warning descr="Casting 'right' to 'Date' may produce 'java.lang.ClassCastException'">Date</warning>) right).getTime();
+      }
+
+      if (isNumberable(right)) {
+        return ((<warning descr="Casting 'left' to 'Date' may produce 'java.lang.ClassCastException'">Date</warning>) left).getTime();
+      }
+    }
+    return new Object();
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/SynchronizingOnNullable.java b/java/java-tests/testData/inspection/dataFlow/fixture/SynchronizingOnNullable.java
new file mode 100644
index 0000000..7a83df6
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/SynchronizingOnNullable.java
@@ -0,0 +1,10 @@
+import org.jetbrains.annotations.Nullable;
+
+public class BrokenAlignment {
+
+  void test(@Nullable Object n) {
+    synchronized (<warning descr="Dereference of 'n' may produce 'java.lang.NullPointerException'">n</warning>) {
+
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/TernaryInWhileNotComplex.java b/java/java-tests/testData/inspection/dataFlow/fixture/TernaryInWhileNotComplex.java
new file mode 100644
index 0000000..a1b2aff
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/TernaryInWhileNotComplex.java
@@ -0,0 +1,25 @@
+import java.util.List;
+
+public class Foo {
+  public void matchAfterFragment(int patternIndex, int matchLen) {
+    int star = patternIndex < matchLen ? matchLen : -1;
+    while (matchLen > 0) {
+      int i = matchLen == star ? matchLen : star;
+    }
+  }
+
+  public void matchAfterFragmentBoxed(Integer patternIndex, Integer matchLen) {
+    Integer star = patternIndex < matchLen ? matchLen : -1;
+    while (matchLen > 0) {
+      Integer i = matchLen == star ? matchLen : star;
+    }
+  }
+
+  public void matchAfterFragmentSemiBoxed(Integer patternIndex, Integer matchLen) {
+    int star = patternIndex < matchLen ? matchLen : -1;
+    while (matchLen > 0) {
+      Integer i = matchLen == star ? matchLen : star;
+    }
+  }
+
+}
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/ThisFieldGetters.java b/java/java-tests/testData/inspection/dataFlow/fixture/ThisFieldGetters.java
new file mode 100644
index 0000000..c732b18
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/ThisFieldGetters.java
@@ -0,0 +1,23 @@
+class Test {
+
+  private int count1;
+  private int count2;
+
+  public void test() {
+    int oldCount1 = getCount1();
+    int oldCount2 = getCount2();
+    count1++;
+    if (oldCount1 != getCount1() || oldCount2 != getCount2()) {
+      System.out.println("changed");
+    }
+  }
+
+  private int getCount1() {
+    return count1;
+  }
+
+  private int getCount2() {
+    return count2;
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/TransientFinalField.java b/java/java-tests/testData/inspection/dataFlow/fixture/TransientFinalField.java
new file mode 100644
index 0000000..d2be77d
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/TransientFinalField.java
@@ -0,0 +1,11 @@
+final class Alive implements java.io.Serializable {
+  private transient final Object elvis = new Object();
+  @Override
+  public String toString() {
+    if (elvis != null) {
+      return "uh-huh-huh";
+    } else {
+      return "the king is dead";
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/TryCatchInForNotComplex.java b/java/java-tests/testData/inspection/dataFlow/fixture/TryCatchInForNotComplex.java
new file mode 100644
index 0000000..9097491
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/TryCatchInForNotComplex.java
@@ -0,0 +1,12 @@
+public class Bar {
+  public static void main(String[] args) {
+    for (String s : args) {
+      try {
+        System.out.println(s);
+      }
+      catch (Exception e) {
+        System.out.println(e);
+      }
+    }
+  }
+}
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/TryInAnonymous.java b/java/java-tests/testData/inspection/dataFlow/fixture/TryInAnonymous.java
new file mode 100644
index 0000000..f61d5cd4
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/TryInAnonymous.java
@@ -0,0 +1,21 @@
+public class Bar {
+
+    void submit(Runnable r) { }
+    String[] foos() { return new String[0]; }
+
+    void navigateTo() {
+        submit(new Runnable() {
+            public void run() {
+                try {
+                    for (Object next : foos()) {
+                        if (next != null) {
+                        }
+                    }
+                }
+                catch (Throwable th) {
+                }
+            }
+        });
+    }
+
+}
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/UnknownFloatMayBeNaN.java b/java/java-tests/testData/inspection/dataFlow/fixture/UnknownFloatMayBeNaN.java
new file mode 100644
index 0000000..1c29ebc
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/UnknownFloatMayBeNaN.java
@@ -0,0 +1,15 @@
+class Fun {
+  public static void main(String[] args) throws Exception {
+    float f1 = Float.parseFloat("NaN");
+    if (f1 == f1) {
+      System.err.println("ELVIS LIVES!");
+    }
+    float f2 = Float.NaN;
+    // Warning:  Condition 'f2 == f2' is always 'false'
+    // Correct, but if you extract the assignment to a method the inspection flips
+    if (<warning descr="Condition 'f2 == f2' is always 'false'">f2 == f2</warning>) {
+      System.err.println("ELVIS LIVES!");
+    }
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/VisitFinallyOnce.java b/java/java-tests/testData/inspection/dataFlow/fixture/VisitFinallyOnce.java
new file mode 100644
index 0000000..7e70eb7
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/VisitFinallyOnce.java
@@ -0,0 +1,39 @@
+import java.io.IOException;
+
+class TestIDEAWarn {
+  private Connection _connection;
+
+  public void warn() throws IOException {
+    try {
+      if (_connection != null) {
+        try {
+          _connection.commit();
+        } finally {
+          _connection.close();
+          _connection = null;
+        }
+      }
+    } catch (IOException e) {
+      throw new RuntimeException(e);
+    }
+  }
+
+  public void warn2() throws IOException {
+    if (_connection == null) return;
+    try {
+      try {
+        _connection.commit();
+      } finally {
+        _connection.close();
+        _connection = null;
+      }
+    } catch (IOException e) {
+      throw new RuntimeException(e);
+    }
+  }
+
+  interface Connection {
+    void commit() throws IOException;
+    void close() throws IOException;
+  }
+}
diff --git a/java/java-tests/testData/inspection/dataFlow/inst/expected.xml b/java/java-tests/testData/inspection/dataFlow/inst/expected.xml
new file mode 100644
index 0000000..d90aa52
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/inst/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Inst.java</file>
+    <line>16</line>
+    <description>Condition 'a instanceof A' is always true</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/dataFlow/inst/src/Inst.java b/java/java-tests/testData/inspection/dataFlow/inst/src/Inst.java
new file mode 100644
index 0000000..abe5fcf
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/inst/src/Inst.java
@@ -0,0 +1,27 @@
+class A {
+
+}
+
+class B extends A {
+
+}
+
+public class Inst {
+    public void x() {
+        Object a = new Object();
+
+
+        if (a instanceof B) {
+            A aa =(A) a;
+            if (a instanceof A) {
+                System.out.println("HeHe");
+            }
+            System.out.println(aa);
+        }
+    }
+
+    public void y(Object a) {
+        if (a instanceof A) {}
+        if (a instanceof B) {}
+    }
+}
diff --git a/java/java-tests/testData/inspection/dataFlow/npe1/expected.xml b/java/java-tests/testData/inspection/dataFlow/npe1/expected.xml
new file mode 100644
index 0000000..ec89f13
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/npe1/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Npe.java</file>
+    <line>7</line>
+    <description>Method invocation 'o.equals()' produce NullPointerException</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/dataFlow/npe1/src/Npe.java b/java/java-tests/testData/inspection/dataFlow/npe1/src/Npe.java
new file mode 100644
index 0000000..10152e05
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/npe1/src/Npe.java
@@ -0,0 +1,9 @@
+public class Npe {
+  public void a(Object o) {
+    if (o != null) {
+      // Do something
+    }
+
+    o.equals();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/nullableField/expected.xml b/java/java-tests/testData/inspection/dataFlow/nullableField/expected.xml
new file mode 100644
index 0000000..755ccb1
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/nullableField/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>6</line>
+    <description>'s.equals(s)' may produce NullPointerException</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/dataFlow/nullableField/src/Test.java b/java/java-tests/testData/inspection/dataFlow/nullableField/src/Test.java
new file mode 100644
index 0000000..ddc0dbe
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/nullableField/src/Test.java
@@ -0,0 +1,8 @@
+public class Test {
+  public String s;
+
+  public void foo() {
+     s = null;
+     boolean b = s.equals(s);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/orBug/expected.xml b/java/java-tests/testData/inspection/dataFlow/orBug/expected.xml
new file mode 100644
index 0000000..ec272ab
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/orBug/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems/>
+
diff --git a/java/java-tests/testData/inspection/dataFlow/orBug/src/Test.java b/java/java-tests/testData/inspection/dataFlow/orBug/src/Test.java
new file mode 100644
index 0000000..b89e24d
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/orBug/src/Test.java
@@ -0,0 +1,8 @@
+public class Test {
+  public boolean abc(Object o1, Object o2) {
+    if (o1 == null || o2 == null) {
+      return o1 == o2;
+    }
+    return false;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/scrIDEA1/expected.xml b/java/java-tests/testData/inspection/dataFlow/scrIDEA1/expected.xml
new file mode 100644
index 0000000..0953dd7
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/scrIDEA1/expected.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems />
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/scrIDEA1/src/Test.java b/java/java-tests/testData/inspection/dataFlow/scrIDEA1/src/Test.java
new file mode 100644
index 0000000..bd444a9
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/scrIDEA1/src/Test.java
@@ -0,0 +1,16 @@
+import java.io.FileOutputStream;
+
+class Test {
+    static void foo() throws Exception {
+        FileOutputStream fos = null;
+
+        try {
+            fos = new FileOutputStream("c:\\myfile");
+        } catch (Exception ex) {
+            throw new Exception("Oh, dear me.", ex);
+        } finally {
+            if (fos != null) {
+            }
+        }
+    }
+}
diff --git a/java/java-tests/testData/inspection/dataFlow/thisInstanceof/expected.xml b/java/java-tests/testData/inspection/dataFlow/thisInstanceof/expected.xml
new file mode 100644
index 0000000..6f6f496
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/thisInstanceof/expected.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>3</line>
+    <description>'this instanceof Object' is always true</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/dataFlow/thisInstanceof/src/Test.java b/java/java-tests/testData/inspection/dataFlow/thisInstanceof/src/Test.java
new file mode 100644
index 0000000..c72dd6d
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/thisInstanceof/src/Test.java
@@ -0,0 +1,5 @@
+public class Test {
+   public void foo() {
+      boolean b = this instanceof Object;
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/unboxingNPE/expected.xml b/java/java-tests/testData/inspection/dataFlow/unboxingNPE/expected.xml
new file mode 100644
index 0000000..000168e
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/unboxingNPE/expected.xml
@@ -0,0 +1,387 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+<problem>
+  <file>Test.java</file>
+  <line>95</line>
+  <method>
+    <name>int f(int k)</name>
+    <display_name>f(int)</display_name>
+    <package>&lt;default&gt;</package>
+    <class>
+      <name>Auto</name>
+      <display_name>Auto</display_name>
+    </class>
+  </method>
+  <problem_class>Constant conditions &amp; exceptions</problem_class>
+  <description>Unboxing of &lt;code&gt;i&lt;/code&gt; may produce &lt;code&gt;java.lang.NullPointerException&lt;/code&gt;.</description>
+</problem>
+
+
+
+<problem>
+  <file>Test.java</file>
+  <line>91</line>
+  <method>
+    <name>int f(int k)</name>
+    <display_name>f(int)</display_name>
+    <package>&lt;default&gt;</package>
+    <class>
+      <name>Auto</name>
+      <display_name>Auto</display_name>
+    </class>
+  </method>
+  <problem_class>Constant conditions &amp; exceptions</problem_class>
+  <description>Unboxing of &lt;code&gt;i&lt;/code&gt; may produce &lt;code&gt;java.lang.NullPointerException&lt;/code&gt;.</description>
+</problem>
+
+
+
+<problem>
+  <file>Test.java</file>
+  <line>31</line>
+  <method>
+    <name>int f(int k)</name>
+    <display_name>f(int)</display_name>
+    <package>&lt;default&gt;</package>
+    <class>
+      <name>Auto</name>
+      <display_name>Auto</display_name>
+    </class>
+  </method>
+  <problem_class>Constant conditions &amp; exceptions</problem_class>
+  <description>Unboxing of &lt;code&gt;i&lt;/code&gt; may produce &lt;code&gt;java.lang.NullPointerException&lt;/code&gt;.</description>
+</problem>
+
+
+
+<problem>
+  <file>Test.java</file>
+  <line>87</line>
+  <method>
+    <name>int f(int k)</name>
+    <display_name>f(int)</display_name>
+    <package>&lt;default&gt;</package>
+    <class>
+      <name>Auto</name>
+      <display_name>Auto</display_name>
+    </class>
+  </method>
+  <problem_class>Constant conditions &amp; exceptions</problem_class>
+  <description>Unboxing of &lt;code&gt;i&lt;/code&gt; may produce &lt;code&gt;java.lang.NullPointerException&lt;/code&gt;.</description>
+</problem>
+
+
+
+<problem>
+  <file>Test.java</file>
+  <line>14</line>
+  <method>
+    <name>int f(int k)</name>
+    <display_name>f(int)</display_name>
+    <package>&lt;default&gt;</package>
+    <class>
+      <name>Auto</name>
+      <display_name>Auto</display_name>
+    </class>
+  </method>
+  <problem_class>Constant conditions &amp; exceptions</problem_class>
+  <description>Unboxing of &lt;code&gt;i&lt;/code&gt; may produce &lt;code&gt;java.lang.NullPointerException&lt;/code&gt;.</description>
+</problem>
+
+
+
+<problem>
+  <file>Test.java</file>
+  <line>75</line>
+  <method>
+    <name>int f(int k)</name>
+    <display_name>f(int)</display_name>
+    <package>&lt;default&gt;</package>
+    <class>
+      <name>Auto</name>
+      <display_name>Auto</display_name>
+    </class>
+  </method>
+  <problem_class>Constant conditions &amp; exceptions</problem_class>
+  <description>Unboxing of &lt;code&gt;i&lt;/code&gt; may produce &lt;code&gt;java.lang.NullPointerException&lt;/code&gt;.</description>
+</problem>
+
+
+
+<problem>
+  <file>Test.java</file>
+  <line>83</line>
+  <method>
+    <name>int f(int k)</name>
+    <display_name>f(int)</display_name>
+    <package>&lt;default&gt;</package>
+    <class>
+      <name>Auto</name>
+      <display_name>Auto</display_name>
+    </class>
+  </method>
+  <problem_class>Constant conditions &amp; exceptions</problem_class>
+  <description>Unboxing of &lt;code&gt;i&lt;/code&gt; may produce &lt;code&gt;java.lang.NullPointerException&lt;/code&gt;.</description>
+</problem>
+
+
+
+<problem>
+  <file>Test.java</file>
+  <line>45</line>
+  <method>
+    <name>int f(int k)</name>
+    <display_name>f(int)</display_name>
+    <package>&lt;default&gt;</package>
+    <class>
+      <name>Auto</name>
+      <display_name>Auto</display_name>
+    </class>
+  </method>
+  <problem_class>Constant conditions &amp; exceptions</problem_class>
+  <description>Unboxing of &lt;code&gt;i&lt;/code&gt; may produce &lt;code&gt;java.lang.NullPointerException&lt;/code&gt;.</description>
+</problem>
+
+
+
+<problem>
+  <file>Test.java</file>
+  <line>67</line>
+  <method>
+    <name>int f(int k)</name>
+    <display_name>f(int)</display_name>
+    <package>&lt;default&gt;</package>
+    <class>
+      <name>Auto</name>
+      <display_name>Auto</display_name>
+    </class>
+  </method>
+  <problem_class>Constant conditions &amp; exceptions</problem_class>
+  <description>Unboxing of &lt;code&gt;i&lt;/code&gt; may produce &lt;code&gt;java.lang.NullPointerException&lt;/code&gt;.</description>
+</problem>
+
+
+
+<problem>
+  <file>Test.java</file>
+  <line>71</line>
+  <method>
+    <name>int f(int k)</name>
+    <display_name>f(int)</display_name>
+    <package>&lt;default&gt;</package>
+    <class>
+      <name>Auto</name>
+      <display_name>Auto</display_name>
+    </class>
+  </method>
+  <problem_class>Constant conditions &amp; exceptions</problem_class>
+  <description>Unboxing of &lt;code&gt;i&lt;/code&gt; may produce &lt;code&gt;java.lang.NullPointerException&lt;/code&gt;.</description>
+</problem>
+
+
+
+<problem>
+  <file>Test.java</file>
+  <line>8</line>
+  <method>
+    <name>int f(int k)</name>
+    <display_name>f(int)</display_name>
+    <package>&lt;default&gt;</package>
+    <class>
+      <name>Auto</name>
+      <display_name>Auto</display_name>
+    </class>
+  </method>
+  <problem_class>Constant conditions &amp; exceptions</problem_class>
+  <description>Unboxing of &lt;code&gt;i&lt;/code&gt; may produce &lt;code&gt;java.lang.NullPointerException&lt;/code&gt;.</description>
+</problem>
+
+
+
+<problem>
+  <file>Test.java</file>
+  <line>79</line>
+  <method>
+    <name>int f(int k)</name>
+    <display_name>f(int)</display_name>
+    <package>&lt;default&gt;</package>
+    <class>
+      <name>Auto</name>
+      <display_name>Auto</display_name>
+    </class>
+  </method>
+  <problem_class>Constant conditions &amp; exceptions</problem_class>
+  <description>Unboxing of &lt;code&gt;i&lt;/code&gt; may produce &lt;code&gt;java.lang.NullPointerException&lt;/code&gt;.</description>
+</problem>
+
+
+
+<problem>
+  <file>Test.java</file>
+  <line>22</line>
+  <method>
+    <name>int f(int k)</name>
+    <display_name>f(int)</display_name>
+    <package>&lt;default&gt;</package>
+    <class>
+      <name>Auto</name>
+      <display_name>Auto</display_name>
+    </class>
+  </method>
+  <problem_class>Constant conditions &amp; exceptions</problem_class>
+  <description>Unboxing of &lt;code&gt;i&lt;/code&gt; may produce &lt;code&gt;java.lang.NullPointerException&lt;/code&gt;.</description>
+</problem>
+
+
+
+<problem>
+  <file>Test.java</file>
+  <line>50</line>
+  <method>
+    <name>int f(int k)</name>
+    <display_name>f(int)</display_name>
+    <package>&lt;default&gt;</package>
+    <class>
+      <name>Auto</name>
+      <display_name>Auto</display_name>
+    </class>
+  </method>
+  <problem_class>Constant conditions &amp; exceptions</problem_class>
+  <description>Unboxing of &lt;code&gt;i&lt;/code&gt; may produce &lt;code&gt;java.lang.NullPointerException&lt;/code&gt;.</description>
+</problem>
+
+
+
+<problem>
+  <file>Test.java</file>
+  <line>56</line>
+  <method>
+    <name>int f(int k)</name>
+    <display_name>f(int)</display_name>
+    <package>&lt;default&gt;</package>
+    <class>
+      <name>Auto</name>
+      <display_name>Auto</display_name>
+    </class>
+  </method>
+  <problem_class>Constant conditions &amp; exceptions</problem_class>
+  <description>Unboxing of &lt;code&gt;i&lt;/code&gt; may produce &lt;code&gt;java.lang.NullPointerException&lt;/code&gt;.</description>
+</problem>
+
+
+
+<problem>
+  <file>Test.java</file>
+  <line>26</line>
+  <method>
+    <name>int f(int k)</name>
+    <display_name>f(int)</display_name>
+    <package>&lt;default&gt;</package>
+    <class>
+      <name>Auto</name>
+      <display_name>Auto</display_name>
+    </class>
+  </method>
+  <problem_class>Constant conditions &amp; exceptions</problem_class>
+  <description>Unboxing of &lt;code&gt;i&lt;/code&gt; may produce &lt;code&gt;java.lang.NullPointerException&lt;/code&gt;.</description>
+</problem>
+
+
+
+<problem>
+  <file>Test.java</file>
+  <line>99</line>
+  <method>
+    <name>int f(int k)</name>
+    <display_name>f(int)</display_name>
+    <package>&lt;default&gt;</package>
+    <class>
+      <name>Auto</name>
+      <display_name>Auto</display_name>
+    </class>
+  </method>
+  <problem_class>Constant conditions &amp; exceptions</problem_class>
+  <description>Unboxing of &lt;code&gt;i&lt;/code&gt; may produce &lt;code&gt;java.lang.NullPointerException&lt;/code&gt;.</description>
+</problem>
+
+
+
+<problem>
+  <file>Test.java</file>
+  <line>35</line>
+  <method>
+    <name>int f(int k)</name>
+    <display_name>f(int)</display_name>
+    <package>&lt;default&gt;</package>
+    <class>
+      <name>Auto</name>
+      <display_name>Auto</display_name>
+    </class>
+  </method>
+  <problem_class>Constant conditions &amp; exceptions</problem_class>
+  <description>Unboxing of &lt;code&gt;i&lt;/code&gt; may produce &lt;code&gt;java.lang.NullPointerException&lt;/code&gt;.</description>
+</problem>
+
+
+
+<problem>
+  <file>Test.java</file>
+  <line>40</line>
+  <method>
+    <name>int f(int k)</name>
+    <display_name>f(int)</display_name>
+    <package>&lt;default&gt;</package>
+    <class>
+      <name>Auto</name>
+      <display_name>Auto</display_name>
+    </class>
+  </method>
+  <problem_class>Constant conditions &amp; exceptions</problem_class>
+  <description>Unboxing of &lt;code&gt;i&lt;/code&gt; may produce &lt;code&gt;java.lang.NullPointerException&lt;/code&gt;.</description>
+</problem>
+
+
+
+<problem>
+  <file>Test.java</file>
+  <line>61</line>
+  <method>
+    <name>int f(int k)</name>
+    <display_name>f(int)</display_name>
+    <package>&lt;default&gt;</package>
+    <class>
+      <name>Auto</name>
+      <display_name>Auto</display_name>
+    </class>
+  </method>
+  <problem_class>Constant conditions &amp; exceptions</problem_class>
+  <description>Unboxing of &lt;code&gt;i&lt;/code&gt; may produce &lt;code&gt;java.lang.NullPointerException&lt;/code&gt;.</description>
+</problem>
+
+
+
+<problem>
+  <file>Test.java</file>
+  <line>18</line>
+  <method>
+    <name>int f(int k)</name>
+    <display_name>f(int)</display_name>
+    <package>&lt;default&gt;</package>
+    <class>
+      <name>Auto</name>
+      <display_name>Auto</display_name>
+    </class>
+  </method>
+  <problem_class>Constant conditions &amp; exceptions</problem_class>
+  <description>Unboxing of &lt;code&gt;i&lt;/code&gt; may produce &lt;code&gt;java.lang.NullPointerException&lt;/code&gt;.</description>
+</problem>
+
+  <problem>
+    <file>Test.java</file>
+    <line>67</line>
+    <package>&lt;default&gt;</package>
+    <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Constant conditions &amp; exceptions</problem_class>
+    <description>Condition &lt;code&gt;i&lt;/code&gt; is always &lt;code&gt;true&lt;/code&gt; when reached</description>
+  </problem>
+
+</problems>
diff --git a/java/java-tests/testData/inspection/dataFlow/unboxingNPE/src/Test.java b/java/java-tests/testData/inspection/dataFlow/unboxingNPE/src/Test.java
new file mode 100644
index 0000000..6af0be0
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/unboxingNPE/src/Test.java
@@ -0,0 +1,104 @@
+class Auto {
+    public Auto(int k) {
+    }
+
+    int f(int k) {
+        {
+            Integer i = null;
+            if (i>0) {
+            }
+        }
+
+        {
+            Integer i = null;
+            int i1 = (int) i;
+        }
+        {
+            Integer i = null;
+            int i1 = i+i;
+        }
+        {
+            Integer i = null;
+            int i1 = i++;
+        }
+        {
+            Integer i = null;
+            Integer i1 = i++;
+        }
+        {
+            Integer i = null;
+            int[] ia = new int[0];
+            int i2 = ia[i];
+        }
+        {
+            Integer i = null;
+            int[] i2 = {i};
+        }
+        {
+            Boolean i = null;
+            boolean i2 = this==this;
+            i2 &= i;
+        }
+        {
+            Boolean i = null;
+            boolean i2 = this==this;
+            i2 |= i;
+        }
+        {
+            Boolean i = null;
+            boolean i2 = this==this;
+            i2 = !i;
+        }
+
+        {
+            Integer i = null;
+            if (this==this) {
+                return i;
+            }
+        }
+        {
+            Integer i = null;
+            switch(i) {
+                case 0:
+            }
+        }
+        {
+            Boolean i = null;
+            boolean i2 = i && i;
+        }
+        {
+            Boolean i = null;
+            boolean i2 = i | i;
+        }
+        {
+            Boolean i = null;
+            boolean i2 = true ^ i;
+        }
+        {
+            Boolean i = null;
+            boolean i2 = i ? true : false;
+        }
+        {
+            Integer i = null;
+            f(i);
+        }
+        {
+            Integer i = null;
+            new Auto(i);
+        }
+        {
+            Integer i = null;
+            i++;
+        }
+        {
+            Integer i = null;
+            --i;
+        }
+        {
+            Boolean i = null;
+            Boolean i2 = !i;
+        }
+
+        return 0;
+    }
+}
diff --git a/java/java-tests/testData/inspection/dataFlow/wrongEqualTypes/expected.xml b/java/java-tests/testData/inspection/dataFlow/wrongEqualTypes/expected.xml
new file mode 100644
index 0000000..9ac879d
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/wrongEqualTypes/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems />
+
diff --git a/java/java-tests/testData/inspection/dataFlow/wrongEqualTypes/src/Test.java b/java/java-tests/testData/inspection/dataFlow/wrongEqualTypes/src/Test.java
new file mode 100644
index 0000000..e514b19
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/wrongEqualTypes/src/Test.java
@@ -0,0 +1,8 @@
+import java.util.Calendar;
+
+public class Test {
+  public void foo(Object c) {
+    if (c instanceof Calendar) return;    
+    if (c == Calendar.getInstance()) {}
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/xor/expected.xml b/java/java-tests/testData/inspection/dataFlow/xor/expected.xml
new file mode 100644
index 0000000..796a315
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/xor/expected.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems />
diff --git a/java/java-tests/testData/inspection/dataFlow/xor/src/Test.java b/java/java-tests/testData/inspection/dataFlow/xor/src/Test.java
new file mode 100644
index 0000000..a4d4584
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/xor/src/Test.java
@@ -0,0 +1,8 @@
+public class Test {
+  public static void test(final Object a, final Object b) {
+	if ((a == null ^ b == null)
+		|| (a != null && a.hashCode() != b.hashCode())) {
+		System.out.println("aaa");
+	}
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/deadCode/SCR6067/expected.xml b/java/java-tests/testData/inspection/deadCode/SCR6067/expected.xml
new file mode 100644
index 0000000..dd7067e
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/SCR6067/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>A.java</file>
+    <line>2</line>
+    <description>Constructor is never used</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/deadCode/SCR6067/ext_src/B.java b/java/java-tests/testData/inspection/deadCode/SCR6067/ext_src/B.java
new file mode 100644
index 0000000..8bb0e59
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/SCR6067/ext_src/B.java
@@ -0,0 +1,4 @@
+class B {
+    A a=new A(0);
+}
+
diff --git a/java/java-tests/testData/inspection/deadCode/SCR6067/src/A.java b/java/java-tests/testData/inspection/deadCode/SCR6067/src/A.java
new file mode 100644
index 0000000..08342c5
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/SCR6067/src/A.java
@@ -0,0 +1,8 @@
+class A {
+    A() {
+    }
+    A(int k) {
+        System.out.println(k);
+    }
+}
+
diff --git a/java/java-tests/testData/inspection/deadCode/SCR9690/expected.xml b/java/java-tests/testData/inspection/deadCode/SCR9690/expected.xml
new file mode 100644
index 0000000..d704d58
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/SCR9690/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/deadCode/SCR9690/ext_src/B.java b/java/java-tests/testData/inspection/deadCode/SCR9690/ext_src/B.java
new file mode 100644
index 0000000..1037362
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/SCR9690/ext_src/B.java
@@ -0,0 +1,3 @@
+class B extends A {
+}
+
diff --git a/java/java-tests/testData/inspection/deadCode/SCR9690/src/A.java b/java/java-tests/testData/inspection/deadCode/SCR9690/src/A.java
new file mode 100644
index 0000000..6a64ecd
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/SCR9690/src/A.java
@@ -0,0 +1,5 @@
+abstract class A {
+    A() {
+    }
+}
+
diff --git a/java/java-tests/testData/inspection/deadCode/abstractClassWithSerializableSubclasses/expected.xml b/java/java-tests/testData/inspection/deadCode/abstractClassWithSerializableSubclasses/expected.xml
new file mode 100644
index 0000000..79e1a0f
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/abstractClassWithSerializableSubclasses/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>  
+</problems>
+
diff --git a/java/java-tests/testData/inspection/deadCode/abstractClassWithSerializableSubclasses/src/Test.java b/java/java-tests/testData/inspection/deadCode/abstractClassWithSerializableSubclasses/src/Test.java
new file mode 100644
index 0000000..192b738
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/abstractClassWithSerializableSubclasses/src/Test.java
@@ -0,0 +1,13 @@
+import java.io.*;
+
+public abstract class A {
+  protected Object readResolve() throws ObjectStreamException {
+    return null;
+  }
+}
+
+class AImpl extends A implements Serializable {
+  public static void main(String[] args) {
+    System.out.println(new AImpl().toString());
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/deadCode/additionalAnnotations/expected.xml b/java/java-tests/testData/inspection/deadCode/additionalAnnotations/expected.xml
new file mode 100644
index 0000000..79e1a0f
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/additionalAnnotations/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>  
+</problems>
+
diff --git a/java/java-tests/testData/inspection/deadCode/additionalAnnotations/src/Test.java b/java/java-tests/testData/inspection/deadCode/additionalAnnotations/src/Test.java
new file mode 100644
index 0000000..22ee9d7
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/additionalAnnotations/src/Test.java
@@ -0,0 +1,9 @@
+@Annotated
+public class Test {
+  @Annotated
+  public void foo(){}
+
+  @Annotated
+  public int myPublicField;
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/deadCode/annotationInterface/expected.xml b/java/java-tests/testData/inspection/deadCode/annotationInterface/expected.xml
new file mode 100644
index 0000000..79e1a0f
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/annotationInterface/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>  
+</problems>
+
diff --git a/java/java-tests/testData/inspection/deadCode/annotationInterface/src/Test.java b/java/java-tests/testData/inspection/deadCode/annotationInterface/src/Test.java
new file mode 100644
index 0000000..d2865d1
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/annotationInterface/src/Test.java
@@ -0,0 +1,6 @@
+import java.lang.annotation.*;
+
+@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.LOCAL_VARIABLE})
+public @interface Test {
+  String value() default "";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/deadCode/chainOfCalls/expected.xml b/java/java-tests/testData/inspection/deadCode/chainOfCalls/expected.xml
new file mode 100644
index 0000000..79e1a0f
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/chainOfCalls/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>  
+</problems>
+
diff --git a/java/java-tests/testData/inspection/deadCode/chainOfCalls/src/A.java b/java/java-tests/testData/inspection/deadCode/chainOfCalls/src/A.java
new file mode 100644
index 0000000..6240d7f
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/chainOfCalls/src/A.java
@@ -0,0 +1,5 @@
+public class A {
+  public A() {
+
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/deadCode/chainOfCalls/src/B.java b/java/java-tests/testData/inspection/deadCode/chainOfCalls/src/B.java
new file mode 100644
index 0000000..f619d5e
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/chainOfCalls/src/B.java
@@ -0,0 +1,5 @@
+public class B implements I{
+  public void projectOpened() {
+    new A();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/deadCode/chainOfCalls/src/I.java b/java/java-tests/testData/inspection/deadCode/chainOfCalls/src/I.java
new file mode 100644
index 0000000..c00581a
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/chainOfCalls/src/I.java
@@ -0,0 +1,3 @@
+public interface I {
+   void projectOpened();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/deadCode/chainOfCalls/src/Test.java b/java/java-tests/testData/inspection/deadCode/chainOfCalls/src/Test.java
new file mode 100644
index 0000000..c0c7b07
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/chainOfCalls/src/Test.java
@@ -0,0 +1,6 @@
+class Test {
+  public static void main(String[] args){
+    I i = null;
+    i.projectOpened();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/deadCode/chainOfCalls/src/comps.xml b/java/java-tests/testData/inspection/deadCode/chainOfCalls/src/comps.xml
new file mode 100644
index 0000000..b93ca3a
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/chainOfCalls/src/comps.xml
@@ -0,0 +1 @@
+<component>B</component>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/deadCode/chainOfSuppressions/expected.xml b/java/java-tests/testData/inspection/deadCode/chainOfSuppressions/expected.xml
new file mode 100644
index 0000000..79e1a0f
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/chainOfSuppressions/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>  
+</problems>
+
diff --git a/java/java-tests/testData/inspection/deadCode/chainOfSuppressions/src/A.java b/java/java-tests/testData/inspection/deadCode/chainOfSuppressions/src/A.java
new file mode 100644
index 0000000..997e142
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/chainOfSuppressions/src/A.java
@@ -0,0 +1,18 @@
+public class A {
+    public static void main(String[] args) {
+      new A();
+    }
+
+    private void a(){
+    }
+
+    private void b(){
+      a();
+    }
+
+    @java.lang.SuppressWarnings({"UnusedDeclaration"})
+    private void c(){
+      b();
+    }
+}
+
diff --git a/java/java-tests/testData/inspection/deadCode/classLiteralRef/expected.xml b/java/java-tests/testData/inspection/deadCode/classLiteralRef/expected.xml
new file mode 100644
index 0000000..bdafc52
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/classLiteralRef/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems/>
+
+
diff --git a/java/java-tests/testData/inspection/deadCode/classLiteralRef/src/Test.java b/java/java-tests/testData/inspection/deadCode/classLiteralRef/src/Test.java
new file mode 100644
index 0000000..1350019
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/classLiteralRef/src/Test.java
@@ -0,0 +1,12 @@
+import java.lang.Class;
+import java.lang.String;
+
+public class Test {
+  public static void main(String[] args) {
+    Test.class.getDeclaredConstructor(String.class).newInstance("Foo");
+  }
+
+  public Test(String param) {
+    System.out.println("This is used!");
+  }
+}
diff --git a/java/java-tests/testData/inspection/deadCode/constructorCalls/expected.xml b/java/java-tests/testData/inspection/deadCode/constructorCalls/expected.xml
new file mode 100644
index 0000000..79e1a0f
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/constructorCalls/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>  
+</problems>
+
diff --git a/java/java-tests/testData/inspection/deadCode/constructorCalls/src/A.java b/java/java-tests/testData/inspection/deadCode/constructorCalls/src/A.java
new file mode 100644
index 0000000..b01999a
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/constructorCalls/src/A.java
@@ -0,0 +1,4 @@
+public class A {
+  public A(int i) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/deadCode/constructorCalls/src/B.java b/java/java-tests/testData/inspection/deadCode/constructorCalls/src/B.java
new file mode 100644
index 0000000..77c142d
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/constructorCalls/src/B.java
@@ -0,0 +1,5 @@
+public class B {
+  public static void main(String[] args){
+    System.out.println(new A(1));
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/deadCode/constructorCalls1/expected.xml b/java/java-tests/testData/inspection/deadCode/constructorCalls1/expected.xml
new file mode 100644
index 0000000..79e1a0f
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/constructorCalls1/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>  
+</problems>
+
diff --git a/java/java-tests/testData/inspection/deadCode/constructorCalls1/src/Test.java b/java/java-tests/testData/inspection/deadCode/constructorCalls1/src/Test.java
new file mode 100644
index 0000000..ab4c4fb
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/constructorCalls1/src/Test.java
@@ -0,0 +1,9 @@
+public class Test {
+  public static void main(String[] args){
+    System.out.println(new A(1));
+  }
+  
+  private class A {
+    public A(int i){}
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/deadCode/constructorReachableFromFieldInitializer/expected.xml b/java/java-tests/testData/inspection/deadCode/constructorReachableFromFieldInitializer/expected.xml
new file mode 100644
index 0000000..79e1a0f
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/constructorReachableFromFieldInitializer/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>  
+</problems>
+
diff --git a/java/java-tests/testData/inspection/deadCode/constructorReachableFromFieldInitializer/src/test/AMatcher.java b/java/java-tests/testData/inspection/deadCode/constructorReachableFromFieldInitializer/src/test/AMatcher.java
new file mode 100644
index 0000000..a34d1fd
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/constructorReachableFromFieldInitializer/src/test/AMatcher.java
@@ -0,0 +1,8 @@
+package test;
+
+public class AMatcher implements Matcher{
+    private static final BracePair []  PAIRS = new BracePair[]{new BracePair()};
+    public BracePair[] getPairs() {
+        return PAIRS;
+    }
+}
diff --git a/java/java-tests/testData/inspection/deadCode/constructorReachableFromFieldInitializer/src/test/BracePair.java b/java/java-tests/testData/inspection/deadCode/constructorReachableFromFieldInitializer/src/test/BracePair.java
new file mode 100644
index 0000000..5e444a3
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/constructorReachableFromFieldInitializer/src/test/BracePair.java
@@ -0,0 +1,7 @@
+package test;
+
+public class BracePair {
+
+    public BracePair() {
+    }
+}
diff --git a/java/java-tests/testData/inspection/deadCode/constructorReachableFromFieldInitializer/src/test/Matcher.java b/java/java-tests/testData/inspection/deadCode/constructorReachableFromFieldInitializer/src/test/Matcher.java
new file mode 100644
index 0000000..ad370de
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/constructorReachableFromFieldInitializer/src/test/Matcher.java
@@ -0,0 +1,5 @@
+package test;
+
+public interface Matcher {
+    BracePair[] getPairs();
+}
diff --git a/java/java-tests/testData/inspection/deadCode/constructorReachableFromFieldInitializer/src/test/Test.java b/java/java-tests/testData/inspection/deadCode/constructorReachableFromFieldInitializer/src/test/Test.java
new file mode 100644
index 0000000..c54db3d
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/constructorReachableFromFieldInitializer/src/test/Test.java
@@ -0,0 +1,12 @@
+package test;
+
+public class Test {
+
+    public Test(Matcher m) {
+        BracePair[] bracePairs = m.getPairs();
+    }
+
+    public static void main(String[] args) {
+        System.out.println(new Test(new AMatcher()));
+    }
+}
diff --git a/java/java-tests/testData/inspection/deadCode/enumInstantiation/expected.xml b/java/java-tests/testData/inspection/deadCode/enumInstantiation/expected.xml
new file mode 100644
index 0000000..79e1a0f
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/enumInstantiation/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>  
+</problems>
+
diff --git a/java/java-tests/testData/inspection/deadCode/enumInstantiation/ext_src/Test1.java b/java/java-tests/testData/inspection/deadCode/enumInstantiation/ext_src/Test1.java
new file mode 100644
index 0000000..1d1ee58
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/enumInstantiation/ext_src/Test1.java
@@ -0,0 +1,7 @@
+public class Test1 {
+  void foo() {
+    if (Test.FIRST.invert() != Test.SECOND) {
+      //assert
+    }
+  }
+}
diff --git a/java/java-tests/testData/inspection/deadCode/enumInstantiation/src/Test.java b/java/java-tests/testData/inspection/deadCode/enumInstantiation/src/Test.java
new file mode 100644
index 0000000..0db3984
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/enumInstantiation/src/Test.java
@@ -0,0 +1,8 @@
+public enum Test
+{
+    FIRST, SECOND;
+
+    public Test invert() {
+        return this == FIRST ? SECOND : FIRST;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/deadCode/enumValues/expected.xml b/java/java-tests/testData/inspection/deadCode/enumValues/expected.xml
new file mode 100644
index 0000000..79e1a0f
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/enumValues/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>  
+</problems>
+
diff --git a/java/java-tests/testData/inspection/deadCode/enumValues/src/Test.java b/java/java-tests/testData/inspection/deadCode/enumValues/src/Test.java
new file mode 100644
index 0000000..c10bb52
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/enumValues/src/Test.java
@@ -0,0 +1,22 @@
+public class UnusedDeclBug {
+
+    public static enum Concern {
+        // These fields are used!  Just because I don't mention them by name
+        // doesn't mean they aren't used!
+        // IDEA tells me I need: @SuppressWarnings({"UnusedDeclaration"})
+        LOW,
+        MEDIUM,
+        HIGH;
+    };
+
+    public static void main(String[] args) {
+        System.out.println("Concerns are:");
+
+        // Invoking Concern.values() should count as using all the fields in the
+        // enum.
+        for (Concern concern : Concern.values()) {
+            System.out.print("\t");
+            System.out.println(concern);
+        } // end for
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/deadCode/formUsage/expected.xml b/java/java-tests/testData/inspection/deadCode/formUsage/expected.xml
new file mode 100644
index 0000000..5e93349
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/formUsage/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+</problems>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/deadCode/formUsage/src/p1/Form.form b/java/java-tests/testData/inspection/deadCode/formUsage/src/p1/Form.form
new file mode 100644
index 0000000..4e8359d
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/formUsage/src/p1/Form.form
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="p1.Form">
+  <component id="566a6" class="javax.swing.JLabel" binding="myLabel">
+    <constraints>
+      <xy x="167" y="116" width="33" height="16"/>
+      <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0"/>
+    </constraints>
+    <properties>
+      <text value="Label"/>
+    </properties>
+  </component>
+</form>
diff --git a/java/java-tests/testData/inspection/deadCode/formUsage/src/p1/Form.java b/java/java-tests/testData/inspection/deadCode/formUsage/src/p1/Form.java
new file mode 100644
index 0000000..bbe91f6
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/formUsage/src/p1/Form.java
@@ -0,0 +1,8 @@
+package p1;
+
+public class Form {
+    private JLabel myLabel;
+
+    private void createUIComponents() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/deadCode/junitAbstractClassWithInheritor/expected.xml b/java/java-tests/testData/inspection/deadCode/junitAbstractClassWithInheritor/expected.xml
new file mode 100644
index 0000000..c63c925
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/junitAbstractClassWithInheritor/expected.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems/>
diff --git a/java/java-tests/testData/inspection/deadCode/junitAbstractClassWithInheritor/src/ChildTest.java b/java/java-tests/testData/inspection/deadCode/junitAbstractClassWithInheritor/src/ChildTest.java
new file mode 100644
index 0000000..24841ad
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/junitAbstractClassWithInheritor/src/ChildTest.java
@@ -0,0 +1 @@
+public class ChildTest extends AbstractTest {}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/deadCode/junitAbstractClassWithInheritor/src/Test.java b/java/java-tests/testData/inspection/deadCode/junitAbstractClassWithInheritor/src/Test.java
new file mode 100644
index 0000000..10284a9
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/junitAbstractClassWithInheritor/src/Test.java
@@ -0,0 +1,4 @@
+public abstract class AbstractTest {
+  @org.junit.Test
+  public void testSmth() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/deadCode/junitAbstractClassWithoutInheritor/expected.xml b/java/java-tests/testData/inspection/deadCode/junitAbstractClassWithoutInheritor/expected.xml
new file mode 100644
index 0000000..13075ab
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/junitAbstractClassWithoutInheritor/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>3</line>
+    <entry_point TYPE="method" FQNAME="AbstractTest void testSmth()"/>
+    <description>Method is never used.</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/deadCode/junitAbstractClassWithoutInheritor/src/Test.java b/java/java-tests/testData/inspection/deadCode/junitAbstractClassWithoutInheritor/src/Test.java
new file mode 100644
index 0000000..10284a9
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/junitAbstractClassWithoutInheritor/src/Test.java
@@ -0,0 +1,4 @@
+public abstract class AbstractTest {
+  @org.junit.Test
+  public void testSmth() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/deadCode/junitEntryPoint/expected.xml b/java/java-tests/testData/inspection/deadCode/junitEntryPoint/expected.xml
new file mode 100644
index 0000000..fe20bdd
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/junitEntryPoint/expected.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>14</line>
+    <entry_point TYPE="method" FQNAME="Test void notATest()"/>
+    <description>Method is never used.</description>
+  </problem>
+  <problem>
+    <file>Test.java</file>
+    <line>8</line>
+    <entry_point TYPE="method" FQNAME="Test void testSmth()"/>
+    <description>Method is never used.</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/deadCode/junitEntryPoint/src/A.java b/java/java-tests/testData/inspection/deadCode/junitEntryPoint/src/A.java
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/junitEntryPoint/src/A.java
diff --git a/java/java-tests/testData/inspection/deadCode/junitEntryPoint/src/I.java b/java/java-tests/testData/inspection/deadCode/junitEntryPoint/src/I.java
new file mode 100644
index 0000000..30e18dcb
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/junitEntryPoint/src/I.java
@@ -0,0 +1,3 @@
+public interface I {
+  A create();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/deadCode/junitEntryPoint/src/IImpl.java b/java/java-tests/testData/inspection/deadCode/junitEntryPoint/src/IImpl.java
new file mode 100644
index 0000000..d045ab0
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/junitEntryPoint/src/IImpl.java
@@ -0,0 +1,5 @@
+public class IImpl extends I {
+  public A create() {
+    return new A();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/deadCode/junitEntryPoint/src/Test.java b/java/java-tests/testData/inspection/deadCode/junitEntryPoint/src/Test.java
new file mode 100644
index 0000000..11eec16
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/junitEntryPoint/src/Test.java
@@ -0,0 +1,15 @@
+public class Test {
+  public static junit.framework.Test suite() {
+    I i = new IImpl();
+    A a = i.create();
+    return null;
+  }
+
+  public void testSmth() {}
+
+  public void setUp() {}
+
+  public void tearDown(){}
+
+  public void notATest(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/deadCode/junitEntryPointCustomRunWith/expected.xml b/java/java-tests/testData/inspection/deadCode/junitEntryPointCustomRunWith/expected.xml
new file mode 100644
index 0000000..c63c925
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/junitEntryPointCustomRunWith/expected.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems/>
diff --git a/java/java-tests/testData/inspection/deadCode/junitEntryPointCustomRunWith/src/Test.java b/java/java-tests/testData/inspection/deadCode/junitEntryPointCustomRunWith/src/Test.java
new file mode 100644
index 0000000..34bd459
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/junitEntryPointCustomRunWith/src/Test.java
@@ -0,0 +1,10 @@
[email protected](UnresolvedRunner.class)
+public class Test {
+  public void testSmth() {}
+
+  public void setUp() {}
+
+  public void tearDown(){}
+
+  public void notATestButCanBeRunnedWithCustomRunner(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/deadCode/mutableCalls/expected.xml b/java/java-tests/testData/inspection/deadCode/mutableCalls/expected.xml
new file mode 100644
index 0000000..98f48ae
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/mutableCalls/expected.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>A.java</file>
+    <line>2</line>
+    <problem_class>unused declaration</problem_class>
+    <description>Method has usage(s) but they all belong to recursive calls chain that has no members reachable from entry points.</description>
+  </problem>
+  <problem>
+    <file>A.java</file>
+    <line>5</line>
+    <problem_class>unused declaration</problem_class>
+    <description>Method has usage(s) but they all belong to recursive calls chain that has no members reachable from entry points.</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/deadCode/mutableCalls/src/A.java b/java/java-tests/testData/inspection/deadCode/mutableCalls/src/A.java
new file mode 100644
index 0000000..b8e36cc
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/mutableCalls/src/A.java
@@ -0,0 +1,9 @@
+public class A {
+   private void a(){
+     b();
+   }
+   private void b(){
+     a();
+   }
+}
+
diff --git a/java/java-tests/testData/inspection/deadCode/nonJavaReferences/expected.xml b/java/java-tests/testData/inspection/deadCode/nonJavaReferences/expected.xml
new file mode 100644
index 0000000..7454782
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/nonJavaReferences/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>2</line>
+    <description>Field has no usages.</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/deadCode/nonJavaReferences/ext_src/res.xml b/java/java-tests/testData/inspection/deadCode/nonJavaReferences/ext_src/res.xml
new file mode 100644
index 0000000..38009bb
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/nonJavaReferences/ext_src/res.xml
@@ -0,0 +1 @@
+<root>Test</root>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/deadCode/nonJavaReferences/src/Test.java b/java/java-tests/testData/inspection/deadCode/nonJavaReferences/src/Test.java
new file mode 100644
index 0000000..3da4a7e
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/nonJavaReferences/src/Test.java
@@ -0,0 +1,3 @@
+public class Test {
+  public static final String LOG = Test.class.getName();   
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/deadCode/packageLocal/expected.xml b/java/java-tests/testData/inspection/deadCode/packageLocal/expected.xml
new file mode 100644
index 0000000..77f16e9
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/packageLocal/expected.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>A.java</file>
+    <line>3</line>
+    <problem_class>unused declaration</problem_class>
+    <description>Class is not instantiated.</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/deadCode/packageLocal/src/A.java b/java/java-tests/testData/inspection/deadCode/packageLocal/src/A.java
new file mode 100644
index 0000000..69d866d
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/packageLocal/src/A.java
@@ -0,0 +1,8 @@
+class A {
+}
+class B{
+  private void b(){
+    new B();
+  }
+}
+
diff --git a/java/java-tests/testData/inspection/deadCode/reachableFromFieldArrayInitializer/expected.xml b/java/java-tests/testData/inspection/deadCode/reachableFromFieldArrayInitializer/expected.xml
new file mode 100644
index 0000000..79e1a0f
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/reachableFromFieldArrayInitializer/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>  
+</problems>
+
diff --git a/java/java-tests/testData/inspection/deadCode/reachableFromFieldArrayInitializer/src/Interface.java b/java/java-tests/testData/inspection/deadCode/reachableFromFieldArrayInitializer/src/Interface.java
new file mode 100644
index 0000000..7fc48ac
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/reachableFromFieldArrayInitializer/src/Interface.java
@@ -0,0 +1,3 @@
+interface Interface {
+  int[] getField();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/deadCode/reachableFromFieldArrayInitializer/src/Test.java b/java/java-tests/testData/inspection/deadCode/reachableFromFieldArrayInitializer/src/Test.java
new file mode 100644
index 0000000..e429f1e
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/reachableFromFieldArrayInitializer/src/Test.java
@@ -0,0 +1,16 @@
+public class Test implements Interface{
+   public static int[] myField = new int[] {init()};
+
+   public static int init() {
+     return 1;
+   }
+   
+   public static void main(String[] args){
+     Interface i = new Test();
+     System.out.println(i.getField());
+   }
+
+   public int[] getField() {
+     return myField;
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/deadCode/reachableFromFieldInitializer/expected.xml b/java/java-tests/testData/inspection/deadCode/reachableFromFieldInitializer/expected.xml
new file mode 100644
index 0000000..79e1a0f
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/reachableFromFieldInitializer/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>  
+</problems>
+
diff --git a/java/java-tests/testData/inspection/deadCode/reachableFromFieldInitializer/src/Interface.java b/java/java-tests/testData/inspection/deadCode/reachableFromFieldInitializer/src/Interface.java
new file mode 100644
index 0000000..2f95988
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/reachableFromFieldInitializer/src/Interface.java
@@ -0,0 +1,3 @@
+interface Interface {
+  int getField();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/deadCode/reachableFromFieldInitializer/src/Test.java b/java/java-tests/testData/inspection/deadCode/reachableFromFieldInitializer/src/Test.java
new file mode 100644
index 0000000..3e54764
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/reachableFromFieldInitializer/src/Test.java
@@ -0,0 +1,16 @@
+public class Test implements Interface{
+   public int myField = init();
+
+   public int init() {
+     return 1;
+   }
+   
+   public static void main(String[] args){
+     Interface i = new Test();
+     System.out.println(i.getField());
+   }
+
+   public int getField() {
+     return myField;
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/deadCode/reachableFromMain/expected.xml b/java/java-tests/testData/inspection/deadCode/reachableFromMain/expected.xml
new file mode 100644
index 0000000..79e1a0f
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/reachableFromMain/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>  
+</problems>
+
diff --git a/java/java-tests/testData/inspection/deadCode/reachableFromMain/src/A.java b/java/java-tests/testData/inspection/deadCode/reachableFromMain/src/A.java
new file mode 100644
index 0000000..5ccf286
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/reachableFromMain/src/A.java
@@ -0,0 +1,10 @@
+public class A {
+    public static void main(String[] args) {
+        B.b();
+    }
+    private static class B{
+        public static B b(){
+            return new B();
+        }
+    }
+}
diff --git a/java/java-tests/testData/inspection/deadCode/reachableFromXml/expected.xml b/java/java-tests/testData/inspection/deadCode/reachableFromXml/expected.xml
new file mode 100644
index 0000000..79e1a0f
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/reachableFromXml/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>  
+</problems>
+
diff --git a/java/java-tests/testData/inspection/deadCode/reachableFromXml/src/A.java b/java/java-tests/testData/inspection/deadCode/reachableFromXml/src/A.java
new file mode 100644
index 0000000..09332ae
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/reachableFromXml/src/A.java
@@ -0,0 +1,5 @@
+public class A {
+  public A() {
+
+  }
+}
diff --git a/java/java-tests/testData/inspection/deadCode/reachableFromXml/src/comps.xml b/java/java-tests/testData/inspection/deadCode/reachableFromXml/src/comps.xml
new file mode 100644
index 0000000..525dcad
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/reachableFromXml/src/comps.xml
@@ -0,0 +1 @@
+<component>A</component>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/deadCode/serializable/expected.xml b/java/java-tests/testData/inspection/deadCode/serializable/expected.xml
new file mode 100644
index 0000000..5e93349
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/serializable/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+</problems>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/deadCode/serializable/ext_src/External.java b/java/java-tests/testData/inspection/deadCode/serializable/ext_src/External.java
new file mode 100644
index 0000000..9e17ba1
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/serializable/ext_src/External.java
@@ -0,0 +1,5 @@
+public class External {
+  {
+    new Test();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/deadCode/serializable/src/Test.java b/java/java-tests/testData/inspection/deadCode/serializable/src/Test.java
new file mode 100644
index 0000000..5afb0ec
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/serializable/src/Test.java
@@ -0,0 +1,6 @@
+public class Test implements java.io.Serializable {
+  private void writeObject(java.io.ObjectOutputStream out) {}
+  private void readObject(java.io.ObjectInputStream in) {}
+  public Object writeReplace() { return null; }
+  public Object readResolve() { return null; }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/deadCode/singleton/expected.xml b/java/java-tests/testData/inspection/deadCode/singleton/expected.xml
new file mode 100644
index 0000000..d704d58
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/singleton/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/deadCode/singleton/src/Main.java b/java/java-tests/testData/inspection/deadCode/singleton/src/Main.java
new file mode 100644
index 0000000..38f90d2
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/singleton/src/Main.java
@@ -0,0 +1,5 @@
+public class Main {
+   public static void main(String args[]) {
+      Singleton.getInstance();
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/deadCode/singleton/src/Singleton.java b/java/java-tests/testData/inspection/deadCode/singleton/src/Singleton.java
new file mode 100644
index 0000000..52782dd
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/singleton/src/Singleton.java
@@ -0,0 +1,7 @@
+pubic class Singleton {
+   private static Singleton ourInstance = new Singleton();
+
+   public Singleton getInstance() {
+      return ourInstance;
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/deadCode/staticMethods/expected.xml b/java/java-tests/testData/inspection/deadCode/staticMethods/expected.xml
new file mode 100644
index 0000000..8001750
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/staticMethods/expected.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>A.java</file>
+    <line>3</line>
+    <problem_class>unused declaration</problem_class>
+    <description>Method is never used.</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/deadCode/staticMethods/src/A.java b/java/java-tests/testData/inspection/deadCode/staticMethods/src/A.java
new file mode 100644
index 0000000..78115bb
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/staticMethods/src/A.java
@@ -0,0 +1,7 @@
+public class A {
+  private A(){}
+  public static A getInstance(){
+    return new A();
+  }
+}
+
diff --git a/java/java-tests/testData/inspection/deadCode/suppress/expected.xml b/java/java-tests/testData/inspection/deadCode/suppress/expected.xml
new file mode 100644
index 0000000..79e1a0f
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/suppress/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>  
+</problems>
+
diff --git a/java/java-tests/testData/inspection/deadCode/suppress/ext_src/B.java b/java/java-tests/testData/inspection/deadCode/suppress/ext_src/B.java
new file mode 100644
index 0000000..8bb0e59
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/suppress/ext_src/B.java
@@ -0,0 +1,4 @@
+class B {
+    A a=new A(0);
+}
+
diff --git a/java/java-tests/testData/inspection/deadCode/suppress/src/A.java b/java/java-tests/testData/inspection/deadCode/suppress/src/A.java
new file mode 100644
index 0000000..f18bc0d
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/suppress/src/A.java
@@ -0,0 +1,9 @@
+class A {
+    @java.lang.SuppressWarnings({"UnusedDeclaration"})
+    A() {
+    }
+    A(int k) {
+        System.out.println(k);
+    }
+}
+
diff --git a/java/java-tests/testData/inspection/deadCode/suppress1/expected.xml b/java/java-tests/testData/inspection/deadCode/suppress1/expected.xml
new file mode 100644
index 0000000..79e1a0f
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/suppress1/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>  
+</problems>
+
diff --git a/java/java-tests/testData/inspection/deadCode/suppress1/src/A.java b/java/java-tests/testData/inspection/deadCode/suppress1/src/A.java
new file mode 100644
index 0000000..434165f
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/suppress1/src/A.java
@@ -0,0 +1,8 @@
+class A {
+    @java.lang.SuppressWarnings({"UnusedDeclaration"})
+    A() {
+      new B();
+    }
+
+}
+
diff --git a/java/java-tests/testData/inspection/deadCode/suppress1/src/B.java b/java/java-tests/testData/inspection/deadCode/suppress1/src/B.java
new file mode 100644
index 0000000..971c2dc
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/suppress1/src/B.java
@@ -0,0 +1,3 @@
+class B {
+  B(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/deadCode/suppress2/expected.xml b/java/java-tests/testData/inspection/deadCode/suppress2/expected.xml
new file mode 100644
index 0000000..79e1a0f
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/suppress2/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>  
+</problems>
+
diff --git a/java/java-tests/testData/inspection/deadCode/suppress2/src/A.java b/java/java-tests/testData/inspection/deadCode/suppress2/src/A.java
new file mode 100644
index 0000000..0a6b69a
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/suppress2/src/A.java
@@ -0,0 +1,8 @@
+class A {
+    @java.lang.SuppressWarnings({"UnusedDeclaration"})
+    A() {
+      B bb = new B();
+    }
+
+}
+
diff --git a/java/java-tests/testData/inspection/deadCode/suppress2/src/B.java b/java/java-tests/testData/inspection/deadCode/suppress2/src/B.java
new file mode 100644
index 0000000..5136794
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/suppress2/src/B.java
@@ -0,0 +1,3 @@
+class B {
+  
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/deadCode/usagesInAnonymous/expected.xml b/java/java-tests/testData/inspection/deadCode/usagesInAnonymous/expected.xml
new file mode 100644
index 0000000..79e1a0f
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/usagesInAnonymous/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>  
+</problems>
+
diff --git a/java/java-tests/testData/inspection/deadCode/usagesInAnonymous/src/Test.java b/java/java-tests/testData/inspection/deadCode/usagesInAnonymous/src/Test.java
new file mode 100644
index 0000000..fc3209c
--- /dev/null
+++ b/java/java-tests/testData/inspection/deadCode/usagesInAnonymous/src/Test.java
@@ -0,0 +1,16 @@
+public class MyClass {
+  public static void main(String[] args) {
+    new Parent(method()) {
+    };
+  }
+
+  public static String method() {
+    return "";
+  }
+
+  public static class Parent {
+    protected Parent(Object o) {
+      System.out.println(o);
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/defUse/ArrayLength/expected.xml b/java/java-tests/testData/inspection/defUse/ArrayLength/expected.xml
new file mode 100644
index 0000000..d704d58
--- /dev/null
+++ b/java/java-tests/testData/inspection/defUse/ArrayLength/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/defUse/ArrayLength/src/Foo.java b/java/java-tests/testData/inspection/defUse/ArrayLength/src/Foo.java
new file mode 100644
index 0000000..b126aee
--- /dev/null
+++ b/java/java-tests/testData/inspection/defUse/ArrayLength/src/Foo.java
@@ -0,0 +1,6 @@
+public class Foo {
+  public void foo() {
+    int[] array = new int[5];
+    for (int i = 0; i < array.length; i++) {}
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/defUse/Hang/expected.xml b/java/java-tests/testData/inspection/defUse/Hang/expected.xml
new file mode 100644
index 0000000..d704d58
--- /dev/null
+++ b/java/java-tests/testData/inspection/defUse/Hang/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/defUse/Hang/src/Foo.java b/java/java-tests/testData/inspection/defUse/Hang/src/Foo.java
new file mode 100644
index 0000000..06b20f8
--- /dev/null
+++ b/java/java-tests/testData/inspection/defUse/Hang/src/Foo.java
@@ -0,0 +1,109 @@
+public class DefUse {
+
+    private int deflate_fast(int flush, int lookahead, int match_length) {
+        //    short hash_head = 0; // head of the hash chain
+        int hash_head = 0; // head of the hash chain
+        boolean bflush; // set if current block must be flushed
+
+        while (true) {
+            // Make sure that we always have enough lookahead, except
+            // at the end of the input file. We need MAX_MATCH bytes
+            // for the next match, plus MIN_MATCH bytes to insert the
+            // string following the next match.
+            if (lookahead < 1) {
+                if (lookahead < 1 && flush == JZlib.Z_NO_FLUSH) {
+                    return 0;
+                }
+                if (lookahead == 0) {
+                    break; // flush the current block
+                }
+            }
+
+            // Insert the string window[strstart .. strstart+2] in the
+            // dictionary, and set hash_head to the head of the hash chain:
+            if (lookahead >= 0) {
+                ins_h = (ins_h << hash_shift ^ window[strstart + 0 - 1] & 0xff) &
+                        hash_mask;
+
+                // prev[strstart&w_mask]=hash_head=head[ins_h];
+                hash_head = 0xffff;
+            }
+
+            // Find the longest match, discarding those <= prev_length.
+            // At this point we have always match_length < MIN_MATCH
+
+            if (hash_head != 0L &&
+                    (strstart - hash_head & 0xffff) <= w_size - 1) {
+                // To simplify the code, we prevent matches with the string
+                // of window index 0 (in particular we have to avoid a match
+                // of the string with itself at the start of the input file).
+                if (strategy != JZlib.Z_HUFFMAN_ONLY) {
+                    match_length = longest_match(hash_head);
+                }
+                // longest_match() sets match_start
+            }
+            if (match_length >= 0) {
+                //        check_match(strstart, match_start, match_length);
+
+                bflush = _tr_tally(strstart - match_start, match_length -
+                        0);
+
+                lookahead -= match_length;
+
+                // Insert new strings in the hash table only if the match length
+                // is not too large. This saves time but degrades compression.
+                if (match_length <= max_lazy_match && lookahead >= 0) {
+                    match_length --; // string at strstart already in hash table
+                    do {
+                        strstart ++;
+
+                        ins_h = (ins_h << hash_shift ^ window[strstart +
+                                0 - 1] & 0xff) &
+                                hash_mask;
+                        //        prev[strstart&w_mask]=hash_head=head[ins_h];
+                        hash_head = head[ins_h] & 0xffff;
+                        prev[strstart & w_mask] = head[ins_h];
+                        head[ins_h] = (short) strstart;
+
+                        // strstart never exceeds WSIZE-MAX_MATCH, so there are
+                        // always MIN_MATCH bytes ahead.
+                    } while (-- match_length != 0);
+                    strstart ++;
+                } else {
+                    strstart += match_length;
+                    match_length = 0;
+                    ins_h = window[strstart] & 0xff;
+
+                    ins_h = (ins_h << hash_shift ^ window[strstart + 1] & 0xff) &
+                            hash_mask;
+                    // If lookahead < MIN_MATCH, ins_h is garbage, but it does not
+                    // matter since it will be recomputed at next deflate call.
+                }
+            } else {
+                // No match, output a literal byte
+
+                bflush = _tr_tally(0, window[strstart] & 0xff);
+                lookahead --;
+                strstart ++;
+            }
+            if (bflush) {
+
+                flush_block_only(false);
+                if (strm.avail_out == 0) {
+                    return 0;
+                }
+            }
+        }
+
+        flush_block_only(flush == JZlib.Z_FINISH);
+        if (flush == 0) {
+            if (flush == JZlib.Z_FINISH) {
+                return 1;
+            } else {
+                return 0;
+            }
+        }
+        return flush == JZlib.Z_FINISH? 1 : 0;
+    }
+
+}
diff --git a/java/java-tests/testData/inspection/defUse/SCR28019/expected.xml b/java/java-tests/testData/inspection/defUse/SCR28019/expected.xml
new file mode 100644
index 0000000..d704d58
--- /dev/null
+++ b/java/java-tests/testData/inspection/defUse/SCR28019/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/defUse/SCR28019/src/AsynchronousImageLoader.java b/java/java-tests/testData/inspection/defUse/SCR28019/src/AsynchronousImageLoader.java
new file mode 100644
index 0000000..e09f950
--- /dev/null
+++ b/java/java-tests/testData/inspection/defUse/SCR28019/src/AsynchronousImageLoader.java
@@ -0,0 +1,17 @@
+import java.util.Stack;
+
+public class AsynchronousImageLoader extends Thread {
+    private final Stack _tasks = new Stack();
+
+    private void threadBody() throws InterruptedException {
+        while (true) {
+            final Runnable task;
+            synchronized (this) {
+                while (_tasks.isEmpty())
+                    wait();
+                task = (Runnable) _tasks.pop();
+            }
+            task.run();
+        }
+    }
+}
diff --git a/java/java-tests/testData/inspection/defUse/SCR40364/expected.xml b/java/java-tests/testData/inspection/defUse/SCR40364/expected.xml
new file mode 100644
index 0000000..796a315
--- /dev/null
+++ b/java/java-tests/testData/inspection/defUse/SCR40364/expected.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems />
diff --git a/java/java-tests/testData/inspection/defUse/SCR40364/src/Test.java b/java/java-tests/testData/inspection/defUse/SCR40364/src/Test.java
new file mode 100644
index 0000000..f066e3c
--- /dev/null
+++ b/java/java-tests/testData/inspection/defUse/SCR40364/src/Test.java
@@ -0,0 +1,16 @@
+package spike;
+
+public class A
+{
+	public static void main (String[] args)
+	{
+		boolean thereIsMoreToParse;
+		do {
+			thereIsMoreToParse = buildNextObject ();
+		} while (thereIsMoreToParse);
+	}
+
+	private static boolean buildNextObject () {
+		return false;
+	}
+}
diff --git a/java/java-tests/testData/inspection/defUse/SCR5144/expected.xml b/java/java-tests/testData/inspection/defUse/SCR5144/expected.xml
new file mode 100644
index 0000000..9ac879d
--- /dev/null
+++ b/java/java-tests/testData/inspection/defUse/SCR5144/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems />
+
diff --git a/java/java-tests/testData/inspection/defUse/SCR5144/src/AssignTest.java b/java/java-tests/testData/inspection/defUse/SCR5144/src/AssignTest.java
new file mode 100644
index 0000000..4a1fe58
--- /dev/null
+++ b/java/java-tests/testData/inspection/defUse/SCR5144/src/AssignTest.java
@@ -0,0 +1,10 @@
+public class AssignTest { 
+    public static void main(String[] args) {
+        int foo = 0;
+ 
+        while (true) {
+            if (foo != 12) System.out.println("Test");
+            if (Math.random() > 0.5) foo = 22;
+        }
+    }
+}
diff --git a/java/java-tests/testData/inspection/defUse/SCR6843/expected.xml b/java/java-tests/testData/inspection/defUse/SCR6843/expected.xml
new file mode 100644
index 0000000..ba2c291
--- /dev/null
+++ b/java/java-tests/testData/inspection/defUse/SCR6843/expected.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>NotUsedTest.java</file>
+    <line>3</line>
+    <description>Variable is never used</description>
+  </problem>
+  <problem>
+    <file>NotUsedTest.java</file>
+    <line>4</line>
+    <description>The value assigned is never used</description>
+  </problem>
+  <problem>
+    <file>NotUsedTest.java</file>
+    <line>5</line>
+    <description>The value assigned is never used</description>
+  </problem>
+
+</problems>
+
diff --git a/java/java-tests/testData/inspection/defUse/SCR6843/src/NotUsedTest.java b/java/java-tests/testData/inspection/defUse/SCR6843/src/NotUsedTest.java
new file mode 100644
index 0000000..b961b19
--- /dev/null
+++ b/java/java-tests/testData/inspection/defUse/SCR6843/src/NotUsedTest.java
@@ -0,0 +1,7 @@
+public class NotUsedTest { 
+    public static void main(String[] args) {
+	boolean unused = true;
+	unused = true;
+	unused = true;
+    }
+}
diff --git a/java/java-tests/testData/inspection/defUse/UsedInArrayInitializer/expected.xml b/java/java-tests/testData/inspection/defUse/UsedInArrayInitializer/expected.xml
new file mode 100644
index 0000000..d704d58
--- /dev/null
+++ b/java/java-tests/testData/inspection/defUse/UsedInArrayInitializer/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/defUse/UsedInArrayInitializer/src/Foo.java b/java/java-tests/testData/inspection/defUse/UsedInArrayInitializer/src/Foo.java
new file mode 100644
index 0000000..b4643b11
--- /dev/null
+++ b/java/java-tests/testData/inspection/defUse/UsedInArrayInitializer/src/Foo.java
@@ -0,0 +1,7 @@
+public class Foo {
+  public void foo() {
+    int i = 4
+    int[] array = new int[] {i};
+    for (int i = 0; i < array.length; i++) {}
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/defUse/arrayIndexUsages/expected.xml b/java/java-tests/testData/inspection/defUse/arrayIndexUsages/expected.xml
new file mode 100644
index 0000000..fcbbab4
--- /dev/null
+++ b/java/java-tests/testData/inspection/defUse/arrayIndexUsages/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Foo.java</file>
+    <line>7</line>
+    <description>The value changed is never used</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/defUse/arrayIndexUsages/src/Foo.java b/java/java-tests/testData/inspection/defUse/arrayIndexUsages/src/Foo.java
new file mode 100644
index 0000000..2a7decdd
--- /dev/null
+++ b/java/java-tests/testData/inspection/defUse/arrayIndexUsages/src/Foo.java
@@ -0,0 +1,11 @@
+public class Foo {
+  int myOffset;
+  void foo() {
+    int offset = myOffset + 4;
+    byte[] a = new byte[10];
+    byte b1 = a[offset++];
+    byte b2 = a[offset++];
+    System.out.println(b1);
+    System.out.println(b2);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/defUse/unusedVariable/expected.xml b/java/java-tests/testData/inspection/defUse/unusedVariable/expected.xml
new file mode 100644
index 0000000..be5098e
--- /dev/null
+++ b/java/java-tests/testData/inspection/defUse/unusedVariable/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Foo.java</file>
+    <line>3</line>
+    <description>Variable i is never used</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/defUse/unusedVariable/src/Foo.java b/java/java-tests/testData/inspection/defUse/unusedVariable/src/Foo.java
new file mode 100644
index 0000000..e72ecec
--- /dev/null
+++ b/java/java-tests/testData/inspection/defUse/unusedVariable/src/Foo.java
@@ -0,0 +1,5 @@
+public class Foo {
+  public void foo() {
+    int i;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/defaultFileTemplateUsage/defaultFile/expected.xml b/java/java-tests/testData/inspection/defaultFileTemplateUsage/defaultFile/expected.xml
new file mode 100644
index 0000000..8a0d3d3
--- /dev/null
+++ b/java/java-tests/testData/inspection/defaultFileTemplateUsage/defaultFile/expected.xml
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+
+<problem>
+  <file>X.java</file>
+  <line>4</line>
+  <problem_class>Default File Template Usage</problem_class>
+  <description>Default File template</description>
+</problem>
+
+  <problem>
+    <file>X2.java</file>
+    <line>4</line>
+    <problem_class>Default File Template Usage</problem_class>
+    <description>Default File template</description>
+  </problem>
+
+  <problem>
+  <file>X.java</file>
+  <line>17</line>
+  <package>x</package>
+  <class>
+    <name>X</name>
+    <display_name>X</display_name>
+  </class>
+  <problem_class>Default File Template Usage</problem_class>
+  <description>Default File template</description>
+</problem>
+
+<problem>
+  <file>X.java</file>
+  <line>22</line>
+  <package>x</package>
+  <class>
+    <name>X</name>
+    <display_name>X</display_name>
+  </class>
+  <problem_class>Default File Template Usage</problem_class>
+  <description>Default File template</description>
+</problem>
+
+<problem>
+  <file>X.java</file>
+  <line>31</line>
+  <method>
+    <name>int hashCode()</name>
+    <display_name>hashCode()</display_name>
+    <package>x</package>
+    <class>
+      <name>X</name>
+      <display_name>X</display_name>
+    </class>
+  </method>
+  <problem_class>Default File Template Usage</problem_class>
+  <description>Default File template</description>
+</problem>
+
+<problem>
+  <file>X.java</file>
+  <line>27</line>
+  <method>
+    <name>void g()</name>
+    <display_name>g()</display_name>
+    <package>x</package>
+    <class>
+      <name>X</name>
+      <display_name>X</display_name>
+    </class>
+  </method>
+  <problem_class>Default File Template Usage</problem_class>
+  <description>Default File template</description>
+</problem>
+
+<problem>
+  <file>X.java</file>
+  <line>35</line>
+  <method>
+    <name>String toString()</name>
+    <display_name>toString()</display_name>
+    <package>x</package>
+    <class>
+      <name>X</name>
+      <display_name>X</display_name>
+    </class>
+  </method>
+  <problem_class>Default File Template Usage</problem_class>
+  <description>Default File template</description>
+</problem>
+
+<problem>
+  <file>X.java</file>
+  <line>39</line>
+  <method>
+    <name>void run()</name>
+    <display_name>run()</display_name>
+    <package>x</package>
+    <class>
+      <name>X</name>
+      <display_name>X</display_name>
+    </class>
+  </method>
+  <problem_class>Default File Template Usage</problem_class>
+  <description>Default File template</description>
+</problem>
+
+  <problem>
+    <file>X.java</file>
+    <line>63</line>
+    <package>x</package>
+    <class>
+      <name>X</name>
+      <display_name>X</display_name>
+    </class>
+    <problem_class>Default File Template Usage</problem_class>
+    <description>Default File template</description>
+  </problem>
+
+</problems>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/defaultFileTemplateUsage/defaultFile/src/x/X.java b/java/java-tests/testData/inspection/defaultFileTemplateUsage/defaultFile/src/x/X.java
new file mode 100644
index 0000000..e22c22c
--- /dev/null
+++ b/java/java-tests/testData/inspection/defaultFileTemplateUsage/defaultFile/src/x/X.java
@@ -0,0 +1,67 @@
+package x;
+import java.io.*;
+
+/**
+ * Created with IntelliJ IDEA.
+ * User: Alexey
+ * Date: 02.12.2005
+ * Time: 0:24:14
+ * To change this template use File | Settings | File Templates.
+ */
+public class X implements Runnable{
+    File f; //kkj lkkl jjkuufdffffjkkjjh kjh kjhj kkjh kjh  i k kj kj klj lkj lkj lkjl kj klkl kl
+    {
+        try {
+            f=null;
+        } catch (Exception e) {
+            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
+        }
+        try {
+            g();
+        } catch (Exception ex) {
+            ex.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
+        }
+    }
+
+    private void g() throws EOFException, FileNotFoundException {
+        //To change body of created methods use File | Settings | File Templates.
+    }
+
+    public int hashCode() {
+        return super.hashCode();    //To change body of overridden methods use File | Settings | File Templates.
+    }
+        
+    public String toString() {
+     return super.toString();            //To change body of overridden methods use File | Settings | File Templates.
+    }
+
+    public void run() {
+        //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    private void method() {
+        // hello
+    }
+    private int geti() {
+        return 0;
+    }
+    private void cat() {
+      try {
+      }
+      catch (Exception e) {
+       e.printStackTrace(); // hey
+      }
+    }
+     protected void finalize() throws Throwable {
+            super.finalize();    
+     }
+
+    private void multi() {
+        try {
+            g();
+        } catch (EOFException | FileNotFoundException ex) {
+            ex.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
+        }
+    }
+}
+
diff --git a/java/java-tests/testData/inspection/defaultFileTemplateUsage/defaultFile/src/x/X2.java b/java/java-tests/testData/inspection/defaultFileTemplateUsage/defaultFile/src/x/X2.java
new file mode 100644
index 0000000..2c43737
--- /dev/null
+++ b/java/java-tests/testData/inspection/defaultFileTemplateUsage/defaultFile/src/x/X2.java
@@ -0,0 +1,12 @@
+package x;
+import java.io.*;
+
+/**
+ * Created with IntelliJ IDEA.
+ * User: Alexey
+ * Date: 02.12.2005
+ * Time: 0:24:14
+ * To change this template use File | Settings | File Templates.
+ */
+public class X2 {
+}
diff --git a/java/java-tests/testData/inspection/deprecation/deprecatedDefaultConstructorInSuper/expected.xml b/java/java-tests/testData/inspection/deprecation/deprecatedDefaultConstructorInSuper/expected.xml
new file mode 100644
index 0000000..ae61ea8
--- /dev/null
+++ b/java/java-tests/testData/inspection/deprecation/deprecatedDefaultConstructorInSuper/expected.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>5</line>
+    <description>Default constructor in C is deprecated</description>
+  </problem>
+  <problem>
+    <file>Test.java</file>
+    <line>10</line>
+    <description>Default constructor in C is deprecated</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/deprecation/deprecatedDefaultConstructorInSuper/src/Test.java b/java/java-tests/testData/inspection/deprecation/deprecatedDefaultConstructorInSuper/src/Test.java
new file mode 100644
index 0000000..7808c2c
--- /dev/null
+++ b/java/java-tests/testData/inspection/deprecation/deprecatedDefaultConstructorInSuper/src/Test.java
@@ -0,0 +1,12 @@
+class C {
+  @Deprecated C() { }
+}
+
+class D extends C {
+}
+
+class P {
+  public static void main(String[] args) {
+    new C(){};
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/deprecation/deprecatedDefaultConstructorInSuperNotCalled/expected.xml b/java/java-tests/testData/inspection/deprecation/deprecatedDefaultConstructorInSuperNotCalled/expected.xml
new file mode 100644
index 0000000..fbfc5a0
--- /dev/null
+++ b/java/java-tests/testData/inspection/deprecation/deprecatedDefaultConstructorInSuperNotCalled/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>6</line>
+    <description>Default constructor in C is deprecated</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/deprecation/deprecatedDefaultConstructorInSuperNotCalled/src/Test.java b/java/java-tests/testData/inspection/deprecation/deprecatedDefaultConstructorInSuperNotCalled/src/Test.java
new file mode 100644
index 0000000..c40f1d0
--- /dev/null
+++ b/java/java-tests/testData/inspection/deprecation/deprecatedDefaultConstructorInSuperNotCalled/src/Test.java
@@ -0,0 +1,8 @@
+class C {
+  @Deprecated C() { }
+}
+
+class D extends C {
+  D() {
+  }
+}
diff --git a/java/java-tests/testData/inspection/deprecation/deprecatedField/expected.xml b/java/java-tests/testData/inspection/deprecation/deprecatedField/expected.xml
new file mode 100644
index 0000000..44ecf91
--- /dev/null
+++ b/java/java-tests/testData/inspection/deprecation/deprecatedField/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>7</line>
+    <description>'b' is deprecated</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/deprecation/deprecatedField/src/Test.java b/java/java-tests/testData/inspection/deprecation/deprecatedField/src/Test.java
new file mode 100644
index 0000000..a80428a8
--- /dev/null
+++ b/java/java-tests/testData/inspection/deprecation/deprecatedField/src/Test.java
@@ -0,0 +1,9 @@
+public class Test{
+  /**
+    * @deprecated
+    */
+    boolean b;
+    boolean bar(){
+      return b;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/deprecation/deprecatedInImport/expected.xml b/java/java-tests/testData/inspection/deprecation/deprecatedInImport/expected.xml
new file mode 100644
index 0000000..4704d91
--- /dev/null
+++ b/java/java-tests/testData/inspection/deprecation/deprecatedInImport/expected.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems/>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/deprecation/deprecatedInImport/src/Test.java b/java/java-tests/testData/inspection/deprecation/deprecatedInImport/src/Test.java
new file mode 100644
index 0000000..3619222
--- /dev/null
+++ b/java/java-tests/testData/inspection/deprecation/deprecatedInImport/src/Test.java
@@ -0,0 +1,3 @@
+import a.A;
+public class Test {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/deprecation/deprecatedInImport/src/a/A.java b/java/java-tests/testData/inspection/deprecation/deprecatedInImport/src/a/A.java
new file mode 100644
index 0000000..c2cd9f4
--- /dev/null
+++ b/java/java-tests/testData/inspection/deprecation/deprecatedInImport/src/a/A.java
@@ -0,0 +1,3 @@
+package a;
+@Deprecated
+public class A {}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/deprecation/deprecatedInner/expected.xml b/java/java-tests/testData/inspection/deprecation/deprecatedInner/expected.xml
new file mode 100644
index 0000000..d64fec4
--- /dev/null
+++ b/java/java-tests/testData/inspection/deprecation/deprecatedInner/expected.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>11</line>
+    <description>'foo()' is deprecated</description>
+  </problem>
+  <problem>
+    <file>Test.java</file>
+    <line>22</line>
+    <description>'foo()' is deprecated</description>
+  </problem>
+  <problem>
+    <file>Test.java</file>
+    <line>42</line>
+    <description>'foo()' is deprecated</description>
+  </problem>
+  <problem>
+    <file>Test.java</file>
+    <line>43</line>
+    <description>'foo()' is deprecated</description>
+  </problem>
+  <problem>
+    <file>Test.java</file>
+    <line>43</line>
+    <description>'foo()' is deprecated</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/deprecation/deprecatedInner/src/Test.java b/java/java-tests/testData/inspection/deprecation/deprecatedInner/src/Test.java
new file mode 100644
index 0000000..faf685f
--- /dev/null
+++ b/java/java-tests/testData/inspection/deprecation/deprecatedInner/src/Test.java
@@ -0,0 +1,47 @@
+public class Test {
+    /**
+     * @deprecated
+      */
+   boolean foo(){
+        return false;
+   }
+
+   Runnable runnable = new Runnable() {
+       public void run() {
+           Test.this.foo();
+       }
+   };
+
+   boolean bar(boolean g){
+       new Runnable(){
+
+           public void run() {
+              new Runnable(){
+
+                  public void run() {
+                      Test.this.foo();
+                  }
+              };
+           }
+       };
+       return false;
+   }
+
+   Test(boolean g, boolean h){
+     if (g && h){}
+   }
+
+
+    public Test() {
+    }
+
+
+
+    public static void main(String[] args) {
+        Test test = new Test();
+        test.bar(test.foo());
+        Test y11 = new Test(test.foo(), test.bar(test.foo()));
+        System.out.println(y11);
+    }
+
+}
diff --git a/java/java-tests/testData/inspection/deprecation/deprecatedMethod/expected.xml b/java/java-tests/testData/inspection/deprecation/deprecatedMethod/expected.xml
new file mode 100644
index 0000000..b876877
--- /dev/null
+++ b/java/java-tests/testData/inspection/deprecation/deprecatedMethod/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>8</line>
+    <description>'foo()' is deprecated</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/deprecation/deprecatedMethod/src/Test.java b/java/java-tests/testData/inspection/deprecation/deprecatedMethod/src/Test.java
new file mode 100644
index 0000000..b407e82
--- /dev/null
+++ b/java/java-tests/testData/inspection/deprecation/deprecatedMethod/src/Test.java
@@ -0,0 +1,10 @@
+public class Test {
+  /**
+   * @deprecated 
+   */
+  void foo(){}
+
+  void bar(){
+    foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/duplicateThrows/simple/expected.xml b/java/java-tests/testData/inspection/duplicateThrows/simple/expected.xml
new file mode 100644
index 0000000..a8e6b9e
--- /dev/null
+++ b/java/java-tests/testData/inspection/duplicateThrows/simple/expected.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>X.java</file>
+    <line>5</line>
+    <problem_class>Duplicate throws</problem_class>
+    <description>Duplicate throws</description>
+  </problem>
+
+  <problem>
+    <file>X.java</file>
+    <line>10</line>
+    <problem_class>Duplicate throws</problem_class>
+    <description>There is a more general exception, 'java.lang.Exception' in the throws list already.</description>
+  </problem>
+
+  <problem>
+    <file>X.java</file>
+    <line>18</line>
+    <problem_class severity="WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Duplicate throws</problem_class>
+    <description>Duplicate throws</description>
+  </problem>
+
+  <problem>
+    <file>X.java</file>
+    <line>19</line>
+    <problem_class severity="WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Duplicate throws</problem_class>
+    <description>Duplicate throws</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/duplicateThrows/simple/src/X.java b/java/java-tests/testData/inspection/duplicateThrows/simple/src/X.java
new file mode 100644
index 0000000..0083322
--- /dev/null
+++ b/java/java-tests/testData/inspection/duplicateThrows/simple/src/X.java
@@ -0,0 +1,24 @@
+import java.io.*;
+
+public class X {
+ void f() throws
+            Exception,
+            Exception {
+ }
+ void f2() throws
+            Exception,
+            IllegalArgumentException {
+ }
+ void f3() throws
+            FileNotFoundException,
+            EOFException {
+ }
+
+     public void TTT() throws
+     FileNotFoundException,
+     EOFException,
+     FileNotFoundException,
+     EOFException {
+     }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/emptyMethod/SCR8321/expected.xml b/java/java-tests/testData/inspection/emptyMethod/SCR8321/expected.xml
new file mode 100644
index 0000000..09a2d43
--- /dev/null
+++ b/java/java-tests/testData/inspection/emptyMethod/SCR8321/expected.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>MyListener.java</file>
+    <line>2</line>
+    <description>empty</description>
+  </problem>
+  <problem>
+    <file>MyListener.java</file>
+    <line>4</line>
+    <description>empty</description>
+  </problem>
+  <problem>
+    <file>MyAdapterUsage.java</file>
+    <line>2</line>
+    <description>only calls super</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/emptyMethod/SCR8321/src/MyAdapter.java b/java/java-tests/testData/inspection/emptyMethod/SCR8321/src/MyAdapter.java
new file mode 100644
index 0000000..3ba1002
--- /dev/null
+++ b/java/java-tests/testData/inspection/emptyMethod/SCR8321/src/MyAdapter.java
@@ -0,0 +1,5 @@
+public class MyAdapter implements MyListener {
+  public void myListen1() {}
+  public void myListen2() {}
+  public void myListen3() {}
+}
diff --git a/java/java-tests/testData/inspection/emptyMethod/SCR8321/src/MyAdapterUsage.java b/java/java-tests/testData/inspection/emptyMethod/SCR8321/src/MyAdapterUsage.java
new file mode 100644
index 0000000..53e4ec7
--- /dev/null
+++ b/java/java-tests/testData/inspection/emptyMethod/SCR8321/src/MyAdapterUsage.java
@@ -0,0 +1,8 @@
+public class MyAdapterUsage extends MyAdapter {
+  public void myListen1(){
+    super.myListen1();
+  }
+  public void myListen2(){
+    System.out.println("code here");
+  }
+}
diff --git a/java/java-tests/testData/inspection/emptyMethod/SCR8321/src/MyListener.java b/java/java-tests/testData/inspection/emptyMethod/SCR8321/src/MyListener.java
new file mode 100644
index 0000000..5e4ec63
--- /dev/null
+++ b/java/java-tests/testData/inspection/emptyMethod/SCR8321/src/MyListener.java
@@ -0,0 +1,5 @@
+public interface MyListener {
+  void myListen1();
+  void myListen2();
+  void myListen3();
+}
diff --git a/java/java-tests/testData/inspection/emptyMethod/externalOverride/expected.xml b/java/java-tests/testData/inspection/emptyMethod/externalOverride/expected.xml
new file mode 100644
index 0000000..e11f781
--- /dev/null
+++ b/java/java-tests/testData/inspection/emptyMethod/externalOverride/expected.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Base.java</file>
+    <line>2</line>
+    <description>empty</description>
+  </problem>
+  <problem>
+    <file>Base.java</file>
+    <line>4</line>
+    <description>empty</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/emptyMethod/externalOverride/ext_src/Derived.java b/java/java-tests/testData/inspection/emptyMethod/externalOverride/ext_src/Derived.java
new file mode 100644
index 0000000..e9b4d3d
--- /dev/null
+++ b/java/java-tests/testData/inspection/emptyMethod/externalOverride/ext_src/Derived.java
@@ -0,0 +1,5 @@
+public class Derived extends Base {
+  public void foo() {}
+  public void bar() { System.out.println("Hello"); }
+  public void foobar() { super.foobar(); }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/emptyMethod/externalOverride/src/Base.java b/java/java-tests/testData/inspection/emptyMethod/externalOverride/src/Base.java
new file mode 100644
index 0000000..2a950b1
--- /dev/null
+++ b/java/java-tests/testData/inspection/emptyMethod/externalOverride/src/Base.java
@@ -0,0 +1,5 @@
+public class Base {
+   public void foo() {}
+   public void bar() {}
+   public void foobar() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/emptyMethod/inAnonymous/expected.xml b/java/java-tests/testData/inspection/emptyMethod/inAnonymous/expected.xml
new file mode 100644
index 0000000..d2c9d5b
--- /dev/null
+++ b/java/java-tests/testData/inspection/emptyMethod/inAnonymous/expected.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>6</line>
+    <entry_point TYPE="method" FQNAME="Test$1 void a()"/>
+    <problem_class>Empty method</problem_class>
+    <description>The method is empty</description>
+  </problem>
+  <problem>
+    <file>Test.java</file>
+    <line>13</line>
+    <entry_point TYPE="method" FQNAME="Test$5A$1 void aa()"/>
+    <problem_class>Empty method</problem_class>
+    <description>The method is empty</description>
+  </problem>
+  <problem>
+    <file>Test.java</file>
+    <line>20</line>
+    <entry_point TYPE="method" FQNAME="Test$5A$3A1$1 void aa1()"/>
+    <problem_class>Empty method</problem_class>
+    <description>The method is empty</description>
+  </problem>
+  <problem>
+    <file>Test.java</file>
+    <line>32</line>
+    <entry_point TYPE="method" FQNAME="Test.B$1 void bb()"/>
+    <problem_class>Empty method</problem_class>
+    <description>The method is empty</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/emptyMethod/inAnonymous/src/Test.java b/java/java-tests/testData/inspection/emptyMethod/inAnonymous/src/Test.java
new file mode 100644
index 0000000..622bbe0
--- /dev/null
+++ b/java/java-tests/testData/inspection/emptyMethod/inAnonymous/src/Test.java
@@ -0,0 +1,36 @@
+public class Test {
+  public void foo() {
+    Runnable r = new Runnable() {
+      public void run(){
+      }
+      private void a(){}
+    }
+    class A {
+      void a(){
+        Runnable a = new Runnable() {
+          public void run(){
+          }
+          private void aa(){}
+        }
+        class A1 {
+          void a1(){
+            Runnable a1 = new Runnable() {
+              public void run(){
+              }
+              private void aa1(){}
+            }
+          }
+        }
+      }
+    }
+  }
+  class B {
+    void b() {
+      Runnable b = new Runnable() {
+        public void run(){
+        }
+        private void bb(){}
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/emptyMethod/superCall/expected.xml b/java/java-tests/testData/inspection/emptyMethod/superCall/expected.xml
new file mode 100644
index 0000000..d796824
--- /dev/null
+++ b/java/java-tests/testData/inspection/emptyMethod/superCall/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Base.java</file>
+    <line>2</line>
+    <description>empty</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/emptyMethod/superCall/src/Base.java b/java/java-tests/testData/inspection/emptyMethod/superCall/src/Base.java
new file mode 100644
index 0000000..38396c5
--- /dev/null
+++ b/java/java-tests/testData/inspection/emptyMethod/superCall/src/Base.java
@@ -0,0 +1,3 @@
+public class Base {
+  public void foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/emptyMethod/superCall/src/Derived.java b/java/java-tests/testData/inspection/emptyMethod/superCall/src/Derived.java
new file mode 100644
index 0000000..506a175
--- /dev/null
+++ b/java/java-tests/testData/inspection/emptyMethod/superCall/src/Derived.java
@@ -0,0 +1,5 @@
+public class Derived extends Base {
+  public void foo() {
+     super.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/emptyMethod/superCallByRange/expected.xml b/java/java-tests/testData/inspection/emptyMethod/superCallByRange/expected.xml
new file mode 100644
index 0000000..bf2a6b1
--- /dev/null
+++ b/java/java-tests/testData/inspection/emptyMethod/superCallByRange/expected.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Base.java</file>
+    <line>2</line>
+    <description>empty</description>
+    <entry_point TYPE="method" FQNAME="Base void foo()" />
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/emptyMethod/superCallByRange/src/Base.java b/java/java-tests/testData/inspection/emptyMethod/superCallByRange/src/Base.java
new file mode 100644
index 0000000..38396c5
--- /dev/null
+++ b/java/java-tests/testData/inspection/emptyMethod/superCallByRange/src/Base.java
@@ -0,0 +1,3 @@
+public class Base {
+  public void foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/emptyMethod/superCallByRange/src/Derived.java b/java/java-tests/testData/inspection/emptyMethod/superCallByRange/src/Derived.java
new file mode 100644
index 0000000..506a175
--- /dev/null
+++ b/java/java-tests/testData/inspection/emptyMethod/superCallByRange/src/Derived.java
@@ -0,0 +1,5 @@
+public class Derived extends Base {
+  public void foo() {
+     super.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/emptyMethod/superFromAnotherPackageCall/expected.xml b/java/java-tests/testData/inspection/emptyMethod/superFromAnotherPackageCall/expected.xml
new file mode 100644
index 0000000..c63c925
--- /dev/null
+++ b/java/java-tests/testData/inspection/emptyMethod/superFromAnotherPackageCall/expected.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems/>
diff --git a/java/java-tests/testData/inspection/emptyMethod/superFromAnotherPackageCall/src/p1/Base.java b/java/java-tests/testData/inspection/emptyMethod/superFromAnotherPackageCall/src/p1/Base.java
new file mode 100644
index 0000000..6411ea0
--- /dev/null
+++ b/java/java-tests/testData/inspection/emptyMethod/superFromAnotherPackageCall/src/p1/Base.java
@@ -0,0 +1,4 @@
+package p1;
+public class Base {
+  protected void foo() {System.out.println("");}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/emptyMethod/superFromAnotherPackageCall/src/p2/Derived.java b/java/java-tests/testData/inspection/emptyMethod/superFromAnotherPackageCall/src/p2/Derived.java
new file mode 100644
index 0000000..ef2044b
--- /dev/null
+++ b/java/java-tests/testData/inspection/emptyMethod/superFromAnotherPackageCall/src/p2/Derived.java
@@ -0,0 +1,7 @@
+package p2;
+import p1;
+public class Derived extends Base {
+  protected void foo() {
+     super.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/emptyMethod/superWithoutSync/expected.xml b/java/java-tests/testData/inspection/emptyMethod/superWithoutSync/expected.xml
new file mode 100644
index 0000000..c63c925
--- /dev/null
+++ b/java/java-tests/testData/inspection/emptyMethod/superWithoutSync/expected.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems/>
diff --git a/java/java-tests/testData/inspection/emptyMethod/superWithoutSync/src/p1/Base.java b/java/java-tests/testData/inspection/emptyMethod/superWithoutSync/src/p1/Base.java
new file mode 100644
index 0000000..072cbe8
--- /dev/null
+++ b/java/java-tests/testData/inspection/emptyMethod/superWithoutSync/src/p1/Base.java
@@ -0,0 +1,4 @@
+package p1;
+public class Base {
+  public void foo() {System.out.println("");}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/emptyMethod/superWithoutSync/src/p2/Derived.java b/java/java-tests/testData/inspection/emptyMethod/superWithoutSync/src/p2/Derived.java
new file mode 100644
index 0000000..2ea0612
--- /dev/null
+++ b/java/java-tests/testData/inspection/emptyMethod/superWithoutSync/src/p2/Derived.java
@@ -0,0 +1,7 @@
+package p2;
+import p1;
+public class Derived extends p1.Base {
+  public synchronized void foo() {
+     super.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/equalsAndHashcode/hierarchy/expected.xml b/java/java-tests/testData/inspection/equalsAndHashcode/hierarchy/expected.xml
new file mode 100644
index 0000000..d95e1c6
--- /dev/null
+++ b/java/java-tests/testData/inspection/equalsAndHashcode/hierarchy/expected.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>A.java</file>
+    <line>1</line>
+    <description>Class has &lt;code&gt;equals()&lt;/code&gt; defined but does not define &lt;code&gt;hashCode()&lt;/code&gt;.</description>
+  </problem>
+  <problem>
+    <file>B.java</file>
+    <line>1</line>
+    <description>Class has &lt;code&gt;hashCode()&lt;/code&gt; defined but does not define &lt;code&gt;equals()&lt;/code&gt;.</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/equalsAndHashcode/hierarchy/src/A.java b/java/java-tests/testData/inspection/equalsAndHashcode/hierarchy/src/A.java
new file mode 100644
index 0000000..7bc537b
--- /dev/null
+++ b/java/java-tests/testData/inspection/equalsAndHashcode/hierarchy/src/A.java
@@ -0,0 +1,5 @@
+class A {
+    public boolean equals(final Object o) {
+      return this == o;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/equalsAndHashcode/hierarchy/src/B.java b/java/java-tests/testData/inspection/equalsAndHashcode/hierarchy/src/B.java
new file mode 100644
index 0000000..91ad3c4
--- /dev/null
+++ b/java/java-tests/testData/inspection/equalsAndHashcode/hierarchy/src/B.java
@@ -0,0 +1,5 @@
+class B extends A {
+  public int hashCode() {
+    return 31;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/equalsAndHashcode/innerClass/expected.xml b/java/java-tests/testData/inspection/equalsAndHashcode/innerClass/expected.xml
new file mode 100644
index 0000000..578f116
--- /dev/null
+++ b/java/java-tests/testData/inspection/equalsAndHashcode/innerClass/expected.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>2</line>
+    <description>Class has &lt;code&gt;equals()&lt;/code&gt; defined but does not define &lt;code&gt;hashCode()&lt;/code&gt;.</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/equalsAndHashcode/innerClass/src/Test.java b/java/java-tests/testData/inspection/equalsAndHashcode/innerClass/src/Test.java
new file mode 100644
index 0000000..0de0ddf
--- /dev/null
+++ b/java/java-tests/testData/inspection/equalsAndHashcode/innerClass/src/Test.java
@@ -0,0 +1,7 @@
+class Test {
+  class Inner {
+    public boolean equals(final Object o) {
+      return this == o;
+    }
+  }
+}
diff --git a/java/java-tests/testData/inspection/fieldCanBeLocal/constructor/expected.xml b/java/java-tests/testData/inspection/fieldCanBeLocal/constructor/expected.xml
new file mode 100644
index 0000000..e8783d3
--- /dev/null
+++ b/java/java-tests/testData/inspection/fieldCanBeLocal/constructor/expected.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>2</line>
+    <description>Field can be converted to a variable</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/fieldCanBeLocal/constructor/src/Test.java b/java/java-tests/testData/inspection/fieldCanBeLocal/constructor/src/Test.java
new file mode 100644
index 0000000..c51c579
--- /dev/null
+++ b/java/java-tests/testData/inspection/fieldCanBeLocal/constructor/src/Test.java
@@ -0,0 +1,15 @@
+class Temp {
+    private int length = 10;
+    private int[] array;
+
+    public Temp()
+    {
+        array = new int[length];
+    }
+
+
+    public int[] getArray()
+    {
+        return array;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/fieldCanBeLocal/fieldUsedForWritingInLambda/expected.xml b/java/java-tests/testData/inspection/fieldCanBeLocal/fieldUsedForWritingInLambda/expected.xml
new file mode 100644
index 0000000..580a889
--- /dev/null
+++ b/java/java-tests/testData/inspection/fieldCanBeLocal/fieldUsedForWritingInLambda/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+</problems>
diff --git a/java/java-tests/testData/inspection/fieldCanBeLocal/fieldUsedForWritingInLambda/src/Test.java b/java/java-tests/testData/inspection/fieldCanBeLocal/fieldUsedForWritingInLambda/src/Test.java
new file mode 100644
index 0000000..3046747
--- /dev/null
+++ b/java/java-tests/testData/inspection/fieldCanBeLocal/fieldUsedForWritingInLambda/src/Test.java
@@ -0,0 +1,13 @@
+class Test {
+    private int f;
+
+    void foo () {
+        f = 0;
+        int k = f;
+    }
+
+    int bar () {
+        f = 5;
+        return f;
+    }
+}
diff --git a/java/java-tests/testData/inspection/fieldCanBeLocal/fieldUsedInConstantInitialization/expected.xml b/java/java-tests/testData/inspection/fieldCanBeLocal/fieldUsedInConstantInitialization/expected.xml
new file mode 100644
index 0000000..580a889
--- /dev/null
+++ b/java/java-tests/testData/inspection/fieldCanBeLocal/fieldUsedInConstantInitialization/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+</problems>
diff --git a/java/java-tests/testData/inspection/fieldCanBeLocal/fieldUsedInConstantInitialization/src/Test.java b/java/java-tests/testData/inspection/fieldCanBeLocal/fieldUsedInConstantInitialization/src/Test.java
new file mode 100644
index 0000000..6adc318
--- /dev/null
+++ b/java/java-tests/testData/inspection/fieldCanBeLocal/fieldUsedInConstantInitialization/src/Test.java
@@ -0,0 +1,9 @@
+class Test {
+      public static final Object FOO = new Test().foo;
+  
+      private final String foo;
+  
+      private Test() {
+          foo = "some text";
+      }
+}
diff --git a/java/java-tests/testData/inspection/fieldCanBeLocal/fieldWithImmutableType/expected.xml b/java/java-tests/testData/inspection/fieldCanBeLocal/fieldWithImmutableType/expected.xml
new file mode 100644
index 0000000..a52b0a1
--- /dev/null
+++ b/java/java-tests/testData/inspection/fieldCanBeLocal/fieldWithImmutableType/expected.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>2</line>
+    <description>Field can be converted to a local variable</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/fieldCanBeLocal/fieldWithImmutableType/src/Test.java b/java/java-tests/testData/inspection/fieldCanBeLocal/fieldWithImmutableType/src/Test.java
new file mode 100644
index 0000000..08488ba
--- /dev/null
+++ b/java/java-tests/testData/inspection/fieldCanBeLocal/fieldWithImmutableType/src/Test.java
@@ -0,0 +1,8 @@
+class Test {
+    private String f = "";
+
+    void foo () {
+      f.substring(0);
+    }
+
+}
diff --git a/java/java-tests/testData/inspection/fieldCanBeLocal/ignoreAnnotated/expected.xml b/java/java-tests/testData/inspection/fieldCanBeLocal/ignoreAnnotated/expected.xml
new file mode 100644
index 0000000..580a889
--- /dev/null
+++ b/java/java-tests/testData/inspection/fieldCanBeLocal/ignoreAnnotated/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+</problems>
diff --git a/java/java-tests/testData/inspection/fieldCanBeLocal/ignoreAnnotated/src/Test.java b/java/java-tests/testData/inspection/fieldCanBeLocal/ignoreAnnotated/src/Test.java
new file mode 100644
index 0000000..fca728f
--- /dev/null
+++ b/java/java-tests/testData/inspection/fieldCanBeLocal/ignoreAnnotated/src/Test.java
@@ -0,0 +1,9 @@
+class Test {
+    @Deprecated
+    private int f;
+
+    void foo () {
+        f = 0;
+        int k = f;
+    }
+}
diff --git a/java/java-tests/testData/inspection/fieldCanBeLocal/innerClassConstructor/expected.xml b/java/java-tests/testData/inspection/fieldCanBeLocal/innerClassConstructor/expected.xml
new file mode 100644
index 0000000..4704d91
--- /dev/null
+++ b/java/java-tests/testData/inspection/fieldCanBeLocal/innerClassConstructor/expected.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems/>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/fieldCanBeLocal/innerClassConstructor/src/Test.java b/java/java-tests/testData/inspection/fieldCanBeLocal/innerClassConstructor/src/Test.java
new file mode 100644
index 0000000..56d4b9c
--- /dev/null
+++ b/java/java-tests/testData/inspection/fieldCanBeLocal/innerClassConstructor/src/Test.java
@@ -0,0 +1,11 @@
+public class Outer {
+  private int value = 0;
+
+  public class Inner {
+    private final int myValue;
+
+    public Inner() {
+      myValue = value++;
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/fieldCanBeLocal/innerClassFieldInitializer/expected.xml b/java/java-tests/testData/inspection/fieldCanBeLocal/innerClassFieldInitializer/expected.xml
new file mode 100644
index 0000000..4704d91
--- /dev/null
+++ b/java/java-tests/testData/inspection/fieldCanBeLocal/innerClassFieldInitializer/expected.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems/>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/fieldCanBeLocal/innerClassFieldInitializer/src/Test.java b/java/java-tests/testData/inspection/fieldCanBeLocal/innerClassFieldInitializer/src/Test.java
new file mode 100644
index 0000000..018f649
--- /dev/null
+++ b/java/java-tests/testData/inspection/fieldCanBeLocal/innerClassFieldInitializer/src/Test.java
@@ -0,0 +1,7 @@
+public class Outer {
+  private int value = 0;
+
+  public class Inner {
+    private final int myValue = Outer.this.value;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/fieldCanBeLocal/localStateVar2InnerClass/expected.xml b/java/java-tests/testData/inspection/fieldCanBeLocal/localStateVar2InnerClass/expected.xml
new file mode 100644
index 0000000..4704d91
--- /dev/null
+++ b/java/java-tests/testData/inspection/fieldCanBeLocal/localStateVar2InnerClass/expected.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems/>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/fieldCanBeLocal/localStateVar2InnerClass/src/Test.java b/java/java-tests/testData/inspection/fieldCanBeLocal/localStateVar2InnerClass/src/Test.java
new file mode 100644
index 0000000..155a4d1
--- /dev/null
+++ b/java/java-tests/testData/inspection/fieldCanBeLocal/localStateVar2InnerClass/src/Test.java
@@ -0,0 +1,11 @@
+import java.util.*;
+public class Outer {
+  private Map<String, String> value = new HashMap<String, String>();
+
+  public class Inner {
+
+    public Inner(String s) {
+      if (!value.containsKey(s)) value.put(s, "");
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/fieldCanBeLocal/localVar2InnerClass/expected.xml b/java/java-tests/testData/inspection/fieldCanBeLocal/localVar2InnerClass/expected.xml
new file mode 100644
index 0000000..c066f3d
--- /dev/null
+++ b/java/java-tests/testData/inspection/fieldCanBeLocal/localVar2InnerClass/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>2</line>
+    <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Field can be local</problem_class>
+    <description>Field can be converted to a local variable</description>
+  </problem>
+</problems>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/fieldCanBeLocal/localVar2InnerClass/src/Test.java b/java/java-tests/testData/inspection/fieldCanBeLocal/localVar2InnerClass/src/Test.java
new file mode 100644
index 0000000..d7b38e0
--- /dev/null
+++ b/java/java-tests/testData/inspection/fieldCanBeLocal/localVar2InnerClass/src/Test.java
@@ -0,0 +1,11 @@
+public class Outer {
+  private int value = 0;
+
+  public class Inner {
+    private final int myValue;
+
+    public Inner() {
+      myValue = value;
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/fieldCanBeLocal/notConstantInitializer/expected.xml b/java/java-tests/testData/inspection/fieldCanBeLocal/notConstantInitializer/expected.xml
new file mode 100644
index 0000000..4704d91
--- /dev/null
+++ b/java/java-tests/testData/inspection/fieldCanBeLocal/notConstantInitializer/expected.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems/>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/fieldCanBeLocal/notConstantInitializer/src/Test.java b/java/java-tests/testData/inspection/fieldCanBeLocal/notConstantInitializer/src/Test.java
new file mode 100644
index 0000000..2bbb6d2
--- /dev/null
+++ b/java/java-tests/testData/inspection/fieldCanBeLocal/notConstantInitializer/src/Test.java
@@ -0,0 +1,16 @@
+import java.util.*;
+
+public class Outer {
+  private final int value = calcValue();
+
+  int myValue;
+  Set set = new HashSet();
+
+  int calcValue() {
+    return set.size();
+  }
+
+  void initMyValue() {
+    myValue = value;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/fieldCanBeLocal/simple/expected.xml b/java/java-tests/testData/inspection/fieldCanBeLocal/simple/expected.xml
new file mode 100644
index 0000000..e8783d3
--- /dev/null
+++ b/java/java-tests/testData/inspection/fieldCanBeLocal/simple/expected.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>2</line>
+    <description>Field can be converted to a variable</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/fieldCanBeLocal/simple/src/Test.java b/java/java-tests/testData/inspection/fieldCanBeLocal/simple/src/Test.java
new file mode 100644
index 0000000..833de97
--- /dev/null
+++ b/java/java-tests/testData/inspection/fieldCanBeLocal/simple/src/Test.java
@@ -0,0 +1,8 @@
+class Test {
+    private int f;
+
+    void foo () {
+        f = 0;
+        int k = f;
+    }
+}
diff --git a/java/java-tests/testData/inspection/fieldCanBeLocal/stateField/expected.xml b/java/java-tests/testData/inspection/fieldCanBeLocal/stateField/expected.xml
new file mode 100644
index 0000000..580a889
--- /dev/null
+++ b/java/java-tests/testData/inspection/fieldCanBeLocal/stateField/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+</problems>
diff --git a/java/java-tests/testData/inspection/fieldCanBeLocal/stateField/src/Test.java b/java/java-tests/testData/inspection/fieldCanBeLocal/stateField/src/Test.java
new file mode 100644
index 0000000..79774c0
--- /dev/null
+++ b/java/java-tests/testData/inspection/fieldCanBeLocal/stateField/src/Test.java
@@ -0,0 +1,8 @@
+import java.util.*;
+public class Test {
+  private final Map<String, String> myModuleToOutput = new HashMap<String, String>();
+
+  void foo() {
+    if (myModuleToOutput.containsKey(null)) myModuleToOutput.put("", "");
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/fieldCanBeLocal/staticAccess/expected.xml b/java/java-tests/testData/inspection/fieldCanBeLocal/staticAccess/expected.xml
new file mode 100644
index 0000000..580a889
--- /dev/null
+++ b/java/java-tests/testData/inspection/fieldCanBeLocal/staticAccess/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+</problems>
diff --git a/java/java-tests/testData/inspection/fieldCanBeLocal/staticAccess/src/Test.java b/java/java-tests/testData/inspection/fieldCanBeLocal/staticAccess/src/Test.java
new file mode 100644
index 0000000..edfa845
--- /dev/null
+++ b/java/java-tests/testData/inspection/fieldCanBeLocal/staticAccess/src/Test.java
@@ -0,0 +1,8 @@
+class Test {
+private static int count = 0;
+
+	public FieldCanBeLocal() {
+		count = count + 1;
+	}
+
+}
diff --git a/java/java-tests/testData/inspection/fieldCanBeLocal/staticFinal/expected.xml b/java/java-tests/testData/inspection/fieldCanBeLocal/staticFinal/expected.xml
new file mode 100644
index 0000000..580a889
--- /dev/null
+++ b/java/java-tests/testData/inspection/fieldCanBeLocal/staticFinal/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+</problems>
diff --git a/java/java-tests/testData/inspection/fieldCanBeLocal/staticFinal/src/Test.java b/java/java-tests/testData/inspection/fieldCanBeLocal/staticFinal/src/Test.java
new file mode 100644
index 0000000..1a24dbc
--- /dev/null
+++ b/java/java-tests/testData/inspection/fieldCanBeLocal/staticFinal/src/Test.java
@@ -0,0 +1,11 @@
+class Test {
+    private static final int f = 0;
+
+    void foo () {
+        int k = f;
+    }
+
+    int bar () {
+        return f;
+    }
+}
diff --git a/java/java-tests/testData/inspection/fieldCanBeLocal/twoMethods/expected.xml b/java/java-tests/testData/inspection/fieldCanBeLocal/twoMethods/expected.xml
new file mode 100644
index 0000000..580a889
--- /dev/null
+++ b/java/java-tests/testData/inspection/fieldCanBeLocal/twoMethods/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+</problems>
diff --git a/java/java-tests/testData/inspection/fieldCanBeLocal/twoMethods/src/Test.java b/java/java-tests/testData/inspection/fieldCanBeLocal/twoMethods/src/Test.java
new file mode 100644
index 0000000..94df44e
--- /dev/null
+++ b/java/java-tests/testData/inspection/fieldCanBeLocal/twoMethods/src/Test.java
@@ -0,0 +1,10 @@
+class Test {
+  private int f;
+
+  public void bar() {
+    foo(() -> {f++;});
+  }
+
+  private void foo(Runnable r) {
+  }
+}
diff --git a/java/java-tests/testData/inspection/globalContext/Foo.java b/java/java-tests/testData/inspection/globalContext/Foo.java
new file mode 100644
index 0000000..4a2b44d
--- /dev/null
+++ b/java/java-tests/testData/inspection/globalContext/Foo.java
@@ -0,0 +1 @@
+public class Foo {}
diff --git a/java/java-tests/testData/inspection/javaDocInspection/doubleMissedTags/expected.xml b/java/java-tests/testData/inspection/javaDocInspection/doubleMissedTags/expected.xml
new file mode 100644
index 0000000..8cbc214
--- /dev/null
+++ b/java/java-tests/testData/inspection/javaDocInspection/doubleMissedTags/expected.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Foo.java</file>
+    <line>6</line>
+    <description>missing</description>
+  </problem>
+  <problem>
+    <file>Foo.java</file>
+    <line>7</line>
+    <description>missing</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/javaDocInspection/doubleMissedTags/src/Foo.java b/java/java-tests/testData/inspection/javaDocInspection/doubleMissedTags/src/Foo.java
new file mode 100644
index 0000000..0606d74
--- /dev/null
+++ b/java/java-tests/testData/inspection/javaDocInspection/doubleMissedTags/src/Foo.java
@@ -0,0 +1,10 @@
+/**
+  @author me
+*/
+public abstract class Foo {
+  /**
+  @param i
+  @param j
+  */
+  public abstract void foo(int i, int j);
+}
diff --git a/java/java-tests/testData/inspection/javaDocInspection/duplicateDeprecated/expected.xml b/java/java-tests/testData/inspection/javaDocInspection/duplicateDeprecated/expected.xml
new file mode 100644
index 0000000..75c4fbf
--- /dev/null
+++ b/java/java-tests/testData/inspection/javaDocInspection/duplicateDeprecated/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Foo.java</file>
+    <line>4</line>
+    <description>Duplicate @deprecated tag</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/javaDocInspection/duplicateDeprecated/src/Foo.java b/java/java-tests/testData/inspection/javaDocInspection/duplicateDeprecated/src/Foo.java
new file mode 100644
index 0000000..fe8b4e6
--- /dev/null
+++ b/java/java-tests/testData/inspection/javaDocInspection/duplicateDeprecated/src/Foo.java
@@ -0,0 +1,7 @@
+/**
+ * Test.
+ * @deprecated You bet.
+ * @deprecated Gotcha.
+ */
+class Foo {
+}
diff --git a/java/java-tests/testData/inspection/javaDocInspection/duplicateParam/expected.xml b/java/java-tests/testData/inspection/javaDocInspection/duplicateParam/expected.xml
new file mode 100644
index 0000000..42959e7
--- /dev/null
+++ b/java/java-tests/testData/inspection/javaDocInspection/duplicateParam/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Foo.java</file>
+    <line>5</line>
+    <description>Duplicate @param tag for parameter 's'</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/javaDocInspection/duplicateParam/src/Foo.java b/java/java-tests/testData/inspection/javaDocInspection/duplicateParam/src/Foo.java
new file mode 100644
index 0000000..50f0fc2
--- /dev/null
+++ b/java/java-tests/testData/inspection/javaDocInspection/duplicateParam/src/Foo.java
@@ -0,0 +1,9 @@
+class Test {
+  /**
+   * Test.
+   * @param s my string
+   * @param s another string
+   */
+  void test(String s) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/javaDocInspection/duplicateReturn/expected.xml b/java/java-tests/testData/inspection/javaDocInspection/duplicateReturn/expected.xml
new file mode 100644
index 0000000..59c11f6
--- /dev/null
+++ b/java/java-tests/testData/inspection/javaDocInspection/duplicateReturn/expected.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Foo.java</file>
+    <line>5</line>
+    <description>Duplicate @return tag</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/javaDocInspection/duplicateReturn/src/Foo.java b/java/java-tests/testData/inspection/javaDocInspection/duplicateReturn/src/Foo.java
new file mode 100644
index 0000000..2e812a0
--- /dev/null
+++ b/java/java-tests/testData/inspection/javaDocInspection/duplicateReturn/src/Foo.java
@@ -0,0 +1,9 @@
+class Test {
+  /**
+   * Test.
+   * @return my string
+   * @return another string
+   */
+  String test() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/javaDocInspection/duplicateSerial/expected.xml b/java/java-tests/testData/inspection/javaDocInspection/duplicateSerial/expected.xml
new file mode 100644
index 0000000..b36fb15
--- /dev/null
+++ b/java/java-tests/testData/inspection/javaDocInspection/duplicateSerial/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Foo.java</file>
+    <line>5</line>
+    <description>Duplicate @serial tag</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/javaDocInspection/duplicateSerial/src/Foo.java b/java/java-tests/testData/inspection/javaDocInspection/duplicateSerial/src/Foo.java
new file mode 100644
index 0000000..abc54c3
--- /dev/null
+++ b/java/java-tests/testData/inspection/javaDocInspection/duplicateSerial/src/Foo.java
@@ -0,0 +1,8 @@
+class Test {
+  /**
+   * Test.
+   * @serial something
+   * @serial something else
+   */
+   private int a;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/javaDocInspection/duplicateThrows/expected.xml b/java/java-tests/testData/inspection/javaDocInspection/duplicateThrows/expected.xml
new file mode 100644
index 0000000..a525a68
--- /dev/null
+++ b/java/java-tests/testData/inspection/javaDocInspection/duplicateThrows/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Foo.java</file>
+    <line>5</line>
+    <description>Duplicate @throws tag for exception 'java.lang.Exception'</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/javaDocInspection/duplicateThrows/src/Foo.java b/java/java-tests/testData/inspection/javaDocInspection/duplicateThrows/src/Foo.java
new file mode 100644
index 0000000..a3f8819
--- /dev/null
+++ b/java/java-tests/testData/inspection/javaDocInspection/duplicateThrows/src/Foo.java
@@ -0,0 +1,9 @@
+class Test {
+  /**
+   * Test.
+   * @throws java.lang.Exception in case of problems
+   * @exception java.lang.Exception in case of other problems
+   */
+  void test() throws java.lang.Exception {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/javaDocInspection/genericsParams/expected.xml b/java/java-tests/testData/inspection/javaDocInspection/genericsParams/expected.xml
new file mode 100644
index 0000000..79e1a0f
--- /dev/null
+++ b/java/java-tests/testData/inspection/javaDocInspection/genericsParams/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>  
+</problems>
+
diff --git a/java/java-tests/testData/inspection/javaDocInspection/genericsParams/src/Foo.java b/java/java-tests/testData/inspection/javaDocInspection/genericsParams/src/Foo.java
new file mode 100644
index 0000000..54e403f
--- /dev/null
+++ b/java/java-tests/testData/inspection/javaDocInspection/genericsParams/src/Foo.java
@@ -0,0 +1,8 @@
+public class Foo {
+  /**
+  *description
+  *@param i this is a parameter
+  *@param <T> type of object to do something with.
+  */
+  public <T> void foo(T i){}
+}
diff --git a/java/java-tests/testData/inspection/javaDocInspection/ignoreDuplicateThrows/expected.xml b/java/java-tests/testData/inspection/javaDocInspection/ignoreDuplicateThrows/expected.xml
new file mode 100644
index 0000000..d704d58
--- /dev/null
+++ b/java/java-tests/testData/inspection/javaDocInspection/ignoreDuplicateThrows/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/javaDocInspection/ignoreDuplicateThrows/src/Test.java b/java/java-tests/testData/inspection/javaDocInspection/ignoreDuplicateThrows/src/Test.java
new file mode 100644
index 0000000..02ba559
--- /dev/null
+++ b/java/java-tests/testData/inspection/javaDocInspection/ignoreDuplicateThrows/src/Test.java
@@ -0,0 +1,9 @@
+class Test {
+/**
+ *@throws ArrayIndexOutOfBoundsException in some case
+ *@throws ArrayIndexOutOfBoundsException and in some other case
+ */
+  void foo() throws ArrayIndexOutOfBoundsException {
+
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/javaDocInspection/misorderedThrowsTag/expected.xml b/java/java-tests/testData/inspection/javaDocInspection/misorderedThrowsTag/expected.xml
new file mode 100644
index 0000000..79e1a0f
--- /dev/null
+++ b/java/java-tests/testData/inspection/javaDocInspection/misorderedThrowsTag/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>  
+</problems>
+
diff --git a/java/java-tests/testData/inspection/javaDocInspection/misorderedThrowsTag/src/Test.java b/java/java-tests/testData/inspection/javaDocInspection/misorderedThrowsTag/src/Test.java
new file mode 100644
index 0000000..71a347e
--- /dev/null
+++ b/java/java-tests/testData/inspection/javaDocInspection/misorderedThrowsTag/src/Test.java
@@ -0,0 +1,9 @@
+public class Test {
+    /**
+     * @throws java.io.IOException exception in some case
+     * @throws Exception exception in other case
+     */
+    public void foo() throws Exception, java.io.IOException {
+
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/javaDocInspection/missedTags/expected.xml b/java/java-tests/testData/inspection/javaDocInspection/missedTags/expected.xml
new file mode 100644
index 0000000..79e1a0f
--- /dev/null
+++ b/java/java-tests/testData/inspection/javaDocInspection/missedTags/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>  
+</problems>
+
diff --git a/java/java-tests/testData/inspection/javaDocInspection/missedTags/src/Bar.java b/java/java-tests/testData/inspection/javaDocInspection/missedTags/src/Bar.java
new file mode 100644
index 0000000..ceec047
--- /dev/null
+++ b/java/java-tests/testData/inspection/javaDocInspection/missedTags/src/Bar.java
@@ -0,0 +1,10 @@
+/**
+  @author me
+*/
+public class Bar extends Foo {
+  /**
+  */
+  public void foo(int i) {
+    i++;
+  }
+}
diff --git a/java/java-tests/testData/inspection/javaDocInspection/missedTags/src/Foo.java b/java/java-tests/testData/inspection/javaDocInspection/missedTags/src/Foo.java
new file mode 100644
index 0000000..0c27f8e
--- /dev/null
+++ b/java/java-tests/testData/inspection/javaDocInspection/missedTags/src/Foo.java
@@ -0,0 +1,9 @@
+/**
+  @author me
+*/
+public abstract class Foo {
+  /**
+  @param i this is a parameter
+  */
+  public abstract void foo(int i);
+}
diff --git a/java/java-tests/testData/inspection/javaDocInspection/missedThrowsTag/expected.xml b/java/java-tests/testData/inspection/javaDocInspection/missedThrowsTag/expected.xml
new file mode 100644
index 0000000..7a13959
--- /dev/null
+++ b/java/java-tests/testData/inspection/javaDocInspection/missedThrowsTag/expected.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+  <file>Test.java</file>
+  <line>5</line>
+  <text_range start="79" end="82" />
+  <method>
+    <name>void foo()</name>
+    <display_name>foo()</display_name>
+    <package>&lt;default&gt;</package>
+    <class>
+      <name>Test</name>
+      <display_name>Test</display_name>
+    </class>
+  </method>
+  <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Declaration has javadoc problems</problem_class>
+  <description>Required tag &lt;code&gt;@throws&lt;/code&gt; java.io.IOException is missing</description>
+</problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/javaDocInspection/missedThrowsTag/src/Test.java b/java/java-tests/testData/inspection/javaDocInspection/missedThrowsTag/src/Test.java
new file mode 100644
index 0000000..341a9d1
--- /dev/null
+++ b/java/java-tests/testData/inspection/javaDocInspection/missedThrowsTag/src/Test.java
@@ -0,0 +1,8 @@
+class Test {
+/**
+ *@throws java.lang.ArrayIndexOutOfBoundsException in some case
+ */
+  void foo() throws java.io.IOException, java.lang.ArrayIndexOutOfBoundsException {
+
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/localCanBeFinal/SCR11757/expected.xml b/java/java-tests/testData/inspection/localCanBeFinal/SCR11757/expected.xml
new file mode 100644
index 0000000..d704d58
--- /dev/null
+++ b/java/java-tests/testData/inspection/localCanBeFinal/SCR11757/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/localCanBeFinal/SCR11757/src/Test.java b/java/java-tests/testData/inspection/localCanBeFinal/SCR11757/src/Test.java
new file mode 100644
index 0000000..9891721
--- /dev/null
+++ b/java/java-tests/testData/inspection/localCanBeFinal/SCR11757/src/Test.java
@@ -0,0 +1,24 @@
+public class Test {
+  public int fib(int n) {
+    switch (n) {
+    case 0:
+      return 0;
+    // you can comment out the next three lines -- same thing
+    case 1:
+    case 2:
+      return 1;
+    default:
+      int a;
+      int b = 1;
+      int c = 2;
+      n -= 3;
+      while (n-- > 0) {
+        a = b;
+        b = c;
+        c = a + b;
+      }
+      return c;
+    }
+  }
+}
+
diff --git a/java/java-tests/testData/inspection/localCanBeFinal/SCR6744_1/expected.xml b/java/java-tests/testData/inspection/localCanBeFinal/SCR6744_1/expected.xml
new file mode 100644
index 0000000..d704d58
--- /dev/null
+++ b/java/java-tests/testData/inspection/localCanBeFinal/SCR6744_1/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/localCanBeFinal/SCR6744_1/src/foo/Test.java b/java/java-tests/testData/inspection/localCanBeFinal/SCR6744_1/src/foo/Test.java
new file mode 100644
index 0000000..eee4422
--- /dev/null
+++ b/java/java-tests/testData/inspection/localCanBeFinal/SCR6744_1/src/foo/Test.java
@@ -0,0 +1,6 @@
+package foo;
+
+public class Test {
+    public static void main(final String[] args) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/localCanBeFinal/SCR6744_2/expected.xml b/java/java-tests/testData/inspection/localCanBeFinal/SCR6744_2/expected.xml
new file mode 100644
index 0000000..c84b699
--- /dev/null
+++ b/java/java-tests/testData/inspection/localCanBeFinal/SCR6744_2/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>5</line>
+    <description>final</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/localCanBeFinal/SCR6744_2/src/foo/Test.java b/java/java-tests/testData/inspection/localCanBeFinal/SCR6744_2/src/foo/Test.java
new file mode 100644
index 0000000..06ff2f3
--- /dev/null
+++ b/java/java-tests/testData/inspection/localCanBeFinal/SCR6744_2/src/foo/Test.java
@@ -0,0 +1,7 @@
+package foo;
+
+public class Test {
+    public static void main(final String[] args) {
+	int foo = 12;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/localCanBeFinal/SCR6744_3/expected.xml b/java/java-tests/testData/inspection/localCanBeFinal/SCR6744_3/expected.xml
new file mode 100644
index 0000000..d704d58
--- /dev/null
+++ b/java/java-tests/testData/inspection/localCanBeFinal/SCR6744_3/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/localCanBeFinal/SCR6744_3/src/foo/Test.java b/java/java-tests/testData/inspection/localCanBeFinal/SCR6744_3/src/foo/Test.java
new file mode 100644
index 0000000..8400897
--- /dev/null
+++ b/java/java-tests/testData/inspection/localCanBeFinal/SCR6744_3/src/foo/Test.java
@@ -0,0 +1,7 @@
+package foo;
+
+public class Test {
+    public static void main(final String[] args) {
+	final int foo = 12;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/localCanBeFinal/SCR6744_4/expected.xml b/java/java-tests/testData/inspection/localCanBeFinal/SCR6744_4/expected.xml
new file mode 100644
index 0000000..d704d58
--- /dev/null
+++ b/java/java-tests/testData/inspection/localCanBeFinal/SCR6744_4/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/localCanBeFinal/SCR6744_4/src/foo/Test.java b/java/java-tests/testData/inspection/localCanBeFinal/SCR6744_4/src/foo/Test.java
new file mode 100644
index 0000000..38d7c37
--- /dev/null
+++ b/java/java-tests/testData/inspection/localCanBeFinal/SCR6744_4/src/foo/Test.java
@@ -0,0 +1,8 @@
+package foo;
+
+public class Test {
+    public static void main(final String[] args) {
+	final int foo = 12;
+	final int bar = 24;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/localCanBeFinal/SCR6744_5/expected.xml b/java/java-tests/testData/inspection/localCanBeFinal/SCR6744_5/expected.xml
new file mode 100644
index 0000000..d704d58
--- /dev/null
+++ b/java/java-tests/testData/inspection/localCanBeFinal/SCR6744_5/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/localCanBeFinal/SCR6744_5/src/foo/Test.java b/java/java-tests/testData/inspection/localCanBeFinal/SCR6744_5/src/foo/Test.java
new file mode 100644
index 0000000..80fc34b
--- /dev/null
+++ b/java/java-tests/testData/inspection/localCanBeFinal/SCR6744_5/src/foo/Test.java
@@ -0,0 +1,9 @@
+package foo;
+
+public class Test {
+    public static void main(final String[] args) {
+	final int foo = 12;
+	final int bar = 24;
+	final int gazonk = 48;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/localCanBeFinal/SCR6744_6/expected.xml b/java/java-tests/testData/inspection/localCanBeFinal/SCR6744_6/expected.xml
new file mode 100644
index 0000000..d704d58
--- /dev/null
+++ b/java/java-tests/testData/inspection/localCanBeFinal/SCR6744_6/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/localCanBeFinal/SCR6744_6/src/foo/Test.java b/java/java-tests/testData/inspection/localCanBeFinal/SCR6744_6/src/foo/Test.java
new file mode 100644
index 0000000..e0bda3b
--- /dev/null
+++ b/java/java-tests/testData/inspection/localCanBeFinal/SCR6744_6/src/foo/Test.java
@@ -0,0 +1,10 @@
+package foo;
+
+public class Test {
+    public static void main(final String[] args) {
+	final int foo = 12;
+	final int bar = 24;
+	final int gazonk = 48;
+	final int banana = 96;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/localCanBeFinal/SCR7428/expected.xml b/java/java-tests/testData/inspection/localCanBeFinal/SCR7428/expected.xml
new file mode 100644
index 0000000..f137833
--- /dev/null
+++ b/java/java-tests/testData/inspection/localCanBeFinal/SCR7428/expected.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Junk.java</file>
+    <line>5</line>
+    <description>bar final</description>
+  </problem>
+  <problem>
+    <file>Junk.java</file>
+    <line>8</line>
+    <description>i final</description>
+  </problem>
+  <problem>
+    <file>Junk.java</file>
+    <line>9</line>
+    <description>foo final</description>
+  </problem>
+  <problem>
+    <file>Junk.java</file>
+    <line>15</line>
+    <description>j final</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/localCanBeFinal/SCR7428/src/Junk.java b/java/java-tests/testData/inspection/localCanBeFinal/SCR7428/src/Junk.java
new file mode 100644
index 0000000..bc26cc4
--- /dev/null
+++ b/java/java-tests/testData/inspection/localCanBeFinal/SCR7428/src/Junk.java
@@ -0,0 +1,20 @@
+public final class Junk
+   {
+   public void sillyMethod()
+      {
+      String bar = "bar";
+      try
+         {
+         int i = 1;
+         String foo = "foo";
+         System.out.println("[" + bar + "|" + i + "|" + foo + "]");
+         //throw new Exception();
+         }
+      catch (Exception e)
+         {
+         int j = 2;
+         System.out.println("j = [" + j + "]");
+         }
+      }
+   }
+
diff --git a/java/java-tests/testData/inspection/localCanBeFinal/SCR7428_1/expected.xml b/java/java-tests/testData/inspection/localCanBeFinal/SCR7428_1/expected.xml
new file mode 100644
index 0000000..f137833
--- /dev/null
+++ b/java/java-tests/testData/inspection/localCanBeFinal/SCR7428_1/expected.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Junk.java</file>
+    <line>5</line>
+    <description>bar final</description>
+  </problem>
+  <problem>
+    <file>Junk.java</file>
+    <line>8</line>
+    <description>i final</description>
+  </problem>
+  <problem>
+    <file>Junk.java</file>
+    <line>9</line>
+    <description>foo final</description>
+  </problem>
+  <problem>
+    <file>Junk.java</file>
+    <line>15</line>
+    <description>j final</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/localCanBeFinal/SCR7428_1/src/Junk.java b/java/java-tests/testData/inspection/localCanBeFinal/SCR7428_1/src/Junk.java
new file mode 100644
index 0000000..b8b201c
--- /dev/null
+++ b/java/java-tests/testData/inspection/localCanBeFinal/SCR7428_1/src/Junk.java
@@ -0,0 +1,24 @@
+public final class Junk
+   {
+   public void sillyMethod()
+      {
+      String bar = "bar";
+      try
+         {
+         int i = 1;
+         String foo = "foo";
+         System.out.println("[" + bar + "|" + i + "|" + foo + "]");
+         throw new Exception();
+         }
+      catch (Exception e)
+         {
+         int j = 2;
+         System.out.println("j = [" + j + "]");
+         }
+      finally
+         {
+         System.out.println("In finally");
+         }
+      }
+   }
+
diff --git a/java/java-tests/testData/inspection/localCanBeFinal/SCR7601/expected.xml b/java/java-tests/testData/inspection/localCanBeFinal/SCR7601/expected.xml
new file mode 100644
index 0000000..23b8622
--- /dev/null
+++ b/java/java-tests/testData/inspection/localCanBeFinal/SCR7601/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>TestFinal2.java</file>
+    <line>4</line>
+    <description>i final</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/localCanBeFinal/SCR7601/src/TestFinal2.java b/java/java-tests/testData/inspection/localCanBeFinal/SCR7601/src/TestFinal2.java
new file mode 100644
index 0000000..47e1d07
--- /dev/null
+++ b/java/java-tests/testData/inspection/localCanBeFinal/SCR7601/src/TestFinal2.java
@@ -0,0 +1,8 @@
+public class TestFinal2 {
+    static void foo(final boolean b) {
+	if (b) {
+	    int i = 12;
+	    System.out.println("i = " + i);
+	}
+    }
+}
diff --git a/java/java-tests/testData/inspection/localCanBeFinal/foreach/expected.xml b/java/java-tests/testData/inspection/localCanBeFinal/foreach/expected.xml
new file mode 100644
index 0000000..3bf733c
--- /dev/null
+++ b/java/java-tests/testData/inspection/localCanBeFinal/foreach/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>TestFinal2.java</file>
+    <line>3</line>
+    <description>bx final</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/localCanBeFinal/foreach/src/TestFinal2.java b/java/java-tests/testData/inspection/localCanBeFinal/foreach/src/TestFinal2.java
new file mode 100644
index 0000000..2700236
--- /dev/null
+++ b/java/java-tests/testData/inspection/localCanBeFinal/foreach/src/TestFinal2.java
@@ -0,0 +1,10 @@
+public class TestFinal2 {
+    static void foo(final boolean[] b) {
+        for(boolean bx : b) {
+            System.out.println("bx = " + bx);
+        }
+        for(boolean by : b) {
+            by = false;
+        }
+    }
+}
diff --git a/java/java-tests/testData/inspection/localCanBeFinal/if/expected.xml b/java/java-tests/testData/inspection/localCanBeFinal/if/expected.xml
new file mode 100644
index 0000000..114dfd4
--- /dev/null
+++ b/java/java-tests/testData/inspection/localCanBeFinal/if/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>4</line>
+    <description>final</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/localCanBeFinal/if/src/Test.java b/java/java-tests/testData/inspection/localCanBeFinal/if/src/Test.java
new file mode 100644
index 0000000..e329d63
--- /dev/null
+++ b/java/java-tests/testData/inspection/localCanBeFinal/if/src/Test.java
@@ -0,0 +1,11 @@
+public class Test{
+
+  public void t() {
+    Object v;
+    if (true) {
+      v = new Object(); 
+    } else {
+      v = new Object();
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/localCanBeFinal/incompleteAssignment/expected.xml b/java/java-tests/testData/inspection/localCanBeFinal/incompleteAssignment/expected.xml
new file mode 100644
index 0000000..3c8a8ef
--- /dev/null
+++ b/java/java-tests/testData/inspection/localCanBeFinal/incompleteAssignment/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>5</line>
+    <description>o final</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/localCanBeFinal/incompleteAssignment/src/Test.java b/java/java-tests/testData/inspection/localCanBeFinal/incompleteAssignment/src/Test.java
new file mode 100644
index 0000000..ec4ab91
--- /dev/null
+++ b/java/java-tests/testData/inspection/localCanBeFinal/incompleteAssignment/src/Test.java
@@ -0,0 +1,13 @@
+public class Test{
+
+  public void t() {
+    Object v;
+    Object o;
+    if (true) {
+      v = new Object(); 
+      o = new Object();
+    } else {
+    }
+    System.out.println(v);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/localCanBeFinal/multiWriteNoRead/expected.xml b/java/java-tests/testData/inspection/localCanBeFinal/multiWriteNoRead/expected.xml
new file mode 100644
index 0000000..9ac879d
--- /dev/null
+++ b/java/java-tests/testData/inspection/localCanBeFinal/multiWriteNoRead/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems />
+
diff --git a/java/java-tests/testData/inspection/localCanBeFinal/multiWriteNoRead/src/Test.java b/java/java-tests/testData/inspection/localCanBeFinal/multiWriteNoRead/src/Test.java
new file mode 100644
index 0000000..6a08490
--- /dev/null
+++ b/java/java-tests/testData/inspection/localCanBeFinal/multiWriteNoRead/src/Test.java
@@ -0,0 +1,9 @@
+public class Test{
+
+  public void t() {
+    Object v;
+    for (int i = 0;i<10;i++) {
+      v = new Object();
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/localCanBeFinal/parameters/expected.xml b/java/java-tests/testData/inspection/localCanBeFinal/parameters/expected.xml
new file mode 100644
index 0000000..f1d3a29
--- /dev/null
+++ b/java/java-tests/testData/inspection/localCanBeFinal/parameters/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>3</line>
+    <description>args final</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/localCanBeFinal/parameters/src/Test.java b/java/java-tests/testData/inspection/localCanBeFinal/parameters/src/Test.java
new file mode 100644
index 0000000..c104d3f
--- /dev/null
+++ b/java/java-tests/testData/inspection/localCanBeFinal/parameters/src/Test.java
@@ -0,0 +1,19 @@
+public class Test
+{
+    public static void main(String[] args) {
+       System.out.println(args[0]);
+    }
+
+    public static void foo(String cannotBeFinal) {
+       cannotBeFinal = "";
+       System.out.println(cannotBeFinal);
+    }
+
+    public static void bar(final String alreadyFinal) {
+       System.out.println(alreadyFinal);
+    }
+
+    public static void bar1(final String alreadyFinal) {
+    }
+}
+
diff --git a/java/java-tests/testData/inspection/magic/simple/expected.xml b/java/java-tests/testData/inspection/magic/simple/expected.xml
new file mode 100644
index 0000000..e247be9
--- /dev/null
+++ b/java/java-tests/testData/inspection/magic/simple/expected.xml
@@ -0,0 +1,449 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <!--<problem>-->
+    <!--<file>X.java</file>-->
+    <!--<line>5</line>-->
+    <!--<problem_class>Duplicate throws</problem_class>-->
+    <!--<description>Duplicate throws</description>-->
+  <!--</problem>-->
+
+  <problem>
+    <file>X.java</file>
+    <line>29</line>
+    
+    
+    
+    <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">magic constant</problem_class>
+    <description>Must be one of: Const.X, Const.Y, Const.Z</description>
+  </problem>
+  
+  
+  
+  <problem>
+    <file>X.java</file>
+    <line>30</line>
+    
+    
+    
+    <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">magic constant</problem_class>
+    <description>Must be one of: Const.X, Const.Y, Const.Z</description>
+  </problem>
+  
+  
+  
+  <problem>
+    <file>X.java</file>
+    <line>31</line>
+    
+    
+    
+    <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">magic constant</problem_class>
+    <description>Must be one of: Const.X, Const.Y, Const.Z</description>
+  </problem>
+  
+  
+  
+  <problem>
+    <file>X.java</file>
+    <line>33</line>
+    
+    
+    
+    <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">magic constant</problem_class>
+    <description>Must be one of: Const.X, Const.Y, Const.Z</description>
+  </problem>
+  
+  
+  
+  <problem>
+    <file>X.java</file>
+    <line>34</line>
+    
+    
+    
+    <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">magic constant</problem_class>
+    <description>Must be one of: Const.X, Const.Y, Const.Z</description>
+  </problem>
+  
+  
+  
+  <problem>
+    <file>X.java</file>
+    <line>35</line>
+    
+    
+    
+    <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">magic constant</problem_class>
+    <description>Must be one of: Const.X, Const.Y, Const.Z</description>
+  </problem>
+  
+  
+  
+  <problem>
+    <file>X.java</file>
+    <line>36</line>
+    
+    
+    
+    <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">magic constant</problem_class>
+    <description>Must be one of: Const.X, Const.Y, Const.Z</description>
+  </problem>
+  
+
+  
+<problem>
+  <file>X.java</file>
+  <line>55</line>
+  
+  
+  
+  <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">magic constant</problem_class>
+  <description>Must be one of: Const.X, Const.Y, Const.Z</description>
+</problem>
+
+
+
+<problem>
+  <file>X.java</file>
+  <line>56</line>
+  
+  
+  
+  <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">magic constant</problem_class>
+  <description>Must be one of: Const.X, Const.Y, Const.Z</description>
+</problem>
+
+
+
+<problem>
+  <file>X.java</file>
+  <line>57</line>
+  
+  
+  
+  <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">magic constant</problem_class>
+  <description>Must be one of: Const.X, Const.Y, Const.Z</description>
+</problem>
+
+
+
+<problem>
+  <file>X.java</file>
+  <line>59</line>
+  
+  
+  
+  <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">magic constant</problem_class>
+  <description>Must be one of: Const.X, Const.Y, Const.Z</description>
+</problem>
+
+
+
+<problem>
+  <file>X.java</file>
+  <line>60</line>
+  
+  
+  
+  <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">magic constant</problem_class>
+  <description>Must be one of: Const.X, Const.Y, Const.Z</description>
+</problem>
+
+
+
+<problem>
+  <file>X.java</file>
+  <line>61</line>
+  
+  
+  
+  <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">magic constant</problem_class>
+  <description>Must be one of: Const.X, Const.Y, Const.Z</description>
+</problem>
+
+
+
+<problem>
+  <file>X.java</file>
+  <line>62</line>
+  
+  
+  
+  <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">magic constant</problem_class>
+  <description>Must be one of: Const.X, Const.Y, Const.Z</description>
+</problem>
+
+
+<problem>
+   <file>X.java</file>
+   <line>81</line>
+   <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">magic constant</problem_class>
+   <description>Must be one of: Const.X, Const.Y, Const.Z</description>
+ </problem>
+
+  
+  <problem>
+    <file>X.java</file>
+    <line>82</line>
+    
+    
+    
+    <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">magic constant</problem_class>
+    <description>Must be one of: Const.X, Const.Y, Const.Z</description>
+  </problem>
+  
+  
+  
+  <problem>
+    <file>X.java</file>
+    <line>83</line>
+    
+    
+    
+    <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">magic constant</problem_class>
+    <description>Must be one of: Const.X, Const.Y, Const.Z</description>
+  </problem>
+  
+  
+  
+  <problem>
+    <file>X.java</file>
+    <line>85</line>
+    
+    
+    
+    <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">magic constant</problem_class>
+    <description>Must be one of: Const.X, Const.Y, Const.Z</description>
+  </problem>
+  
+  
+  
+  <problem>
+    <file>X.java</file>
+    <line>86</line>
+    
+    
+    
+    <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">magic constant</problem_class>
+    <description>Must be one of: Const.X, Const.Y, Const.Z</description>
+  </problem>
+  
+  
+  
+  <problem>
+    <file>X.java</file>
+    <line>87</line>
+    
+    
+    
+    <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">magic constant</problem_class>
+    <description>Must be one of: Const.X, Const.Y, Const.Z</description>
+  </problem>
+  
+  
+  
+  <problem>
+    <file>X.java</file>
+    <line>88</line>
+    
+    
+    
+    <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">magic constant</problem_class>
+    <description>Must be one of: Const.X, Const.Y, Const.Z</description>
+  </problem>
+  
+  
+  <problem>
+    <file>X.java</file>
+    <line>118</line>
+    <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">magic constant</problem_class>
+    <description>Must be one of: Const.X, Const.Y, Const.Z</description>
+  </problem>
+
+ <problem>
+   <file>X.java</file>
+   <line>119</line>
+   <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">magic constant</problem_class>
+   <description>Must be one of: Const.X, Const.Y, Const.Z</description>
+ </problem>
+ 
+ 
+ 
+ <problem>
+   <file>X.java</file>
+   <line>122</line>
+   
+   
+   
+   <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">magic constant</problem_class>
+   <description>Must be one of: Const.X, Const.Y, Const.Z</description>
+ </problem>
+ 
+ 
+ 
+ <problem>
+   <file>X.java</file>
+   <line>123</line>
+   
+   
+   
+   <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">magic constant</problem_class>
+   <description>Must be one of: Const.X, Const.Y, Const.Z</description>
+ </problem>
+ 
+ 
+ 
+ <problem>
+   <file>X.java</file>
+   <line>124</line>
+   
+   
+   
+   <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">magic constant</problem_class>
+   <description>Must be one of: Const.X, Const.Y, Const.Z</description>
+ </problem>
+ 
+ 
+ 
+ <problem>
+   <file>X.java</file>
+   <line>125</line>
+   
+   
+   
+   <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">magic constant</problem_class>
+   <description>Must be one of: Const.X, Const.Y, Const.Z</description>
+ </problem>
+ 
+
+  
+
+<problem>
+  <file>X.java</file>
+  <line>173</line>
+  <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">magic constant</problem_class>
+  <description>Must be one of: Const.X, Const.Y, Const.Z</description>
+</problem>
+
+
+
+<problem>
+  <file>X.java</file>
+  <line>174</line>
+  <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">magic constant</problem_class>
+  <description>Must be one of: Const.X, Const.Y, Const.Z</description>
+</problem>
+
+
+
+<problem>
+  <file>X.java</file>
+  <line>175</line>
+  <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">magic constant</problem_class>
+  <description>Must be one of: Const.X, Const.Y, Const.Z</description>
+</problem>
+
+
+
+<problem>
+  <file>X.java</file>
+  <line>177</line>
+  <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">magic constant</problem_class>
+  <description>Must be one of: Const.X, Const.Y, Const.Z</description>
+</problem>
+  
+
+<problem>
+  <file>X.java</file>
+  <line>178</line>
+  <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">magic constant</problem_class>
+  <description>Must be one of: Const.X, Const.Y, Const.Z</description>
+</problem>
+
+
+
+<problem>
+  <file>X.java</file>
+  <line>179</line>
+  <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">magic constant</problem_class>
+  <description>Must be one of: Const.X, Const.Y, Const.Z</description>
+</problem>
+
+
+
+<problem>
+  <file>X.java</file>
+  <line>180</line>
+  <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">magic constant</problem_class>
+  <description>Must be one of: Const.X, Const.Y, Const.Z</description>
+</problem>
+  
+
+<problem>
+  <file>X.java</file>
+   <line>193</line>
+   <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">magic constant</problem_class>
+   <description>Must be one of: Const.X, Const.Y</description>
+ </problem>
+
+
+ <problem>
+   <file>X.java</file>
+   <line>195</line>
+   <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">magic constant</problem_class>
+   <description>Must be one of: Const.X, Const.Y</description>
+ </problem>
+
+  <problem>
+    <file>X.java</file>
+    <line>227</line>
+    <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">magic constant</problem_class>
+    <description>Must be one of: Const.X, Const.Y</description>
+  </problem>
+
+
+  <problem>
+    <file>X.java</file>
+    <line>228</line>
+    <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">magic constant</problem_class>
+    <description>Must be one of: Const.X, Const.Y</description>
+  </problem>
+
+
+  <problem>
+    <file>X.java</file>
+    <line>229</line>
+    <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">magic constant</problem_class>
+    <description>Must be one of: Const.X, Const.Y</description>
+  </problem>
+
+
+  <problem>
+    <file>X.java</file>
+    <line>230</line>
+    <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">magic constant</problem_class>
+    <description>Must be one of: Const.X, Const.Y</description>
+  </problem>
+
+  <problem>
+    <file>X.java</file>
+    <line>231</line>
+    <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">magic constant</problem_class>
+    <description>Must be one of: Const.X, Const.Y</description>
+  </problem>
+
+  <problem>
+    <file>X.java</file>
+    <line>238</line>
+    <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Magic Constant</problem_class>
+    <description>Must be one of: Calendar.JANUARY, Calendar.FEBRUARY, Calendar.MARCH, Calendar.APRIL, Calendar.MAY, Calendar.JUNE, Calendar.JULY, Calendar.AUGUST, Calendar.SEPTEMBER, Calendar.OCTOBER, Calendar.NOVEMBER, Calendar.DECEMBER</description>
+  </problem>
+
+  <problem>
+    <file>X.java</file>
+    <line>239</line>
+    <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Magic Constant</problem_class>
+    <description>Must be one of: SwingConstants.LEFT, SwingConstants.CENTER, SwingConstants.RIGHT, SwingConstants.LEADING, SwingConstants.TRAILING</description>
+  </problem>
+
+</problems>
diff --git a/java/java-tests/testData/inspection/magic/simple/src/X.java b/java/java-tests/testData/inspection/magic/simple/src/X.java
new file mode 100644
index 0000000..9fcf812
--- /dev/null
+++ b/java/java-tests/testData/inspection/magic/simple/src/X.java
@@ -0,0 +1,259 @@
+/*
+ * Copyright 2000-2011 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.
+ */
+import org.intellij.lang.annotations.MagicConstant;
+
+import java.io.*;
+
+class Const {
+  public static final int X = 0;
+  public static final int Y = 2;
+  public static final int Z = 3;
+}
+public class X {
+
+  void f(@MagicConstant(intValues={Const.X, Const.Y, Const.Z}) int x) {
+    /////////// BAD
+    f(0);
+    f(1);
+    f(Const.X | Const.Y);
+    int i = Const.X | Const.Y;
+    f(i);
+    if (x == 3) {
+      x = 2;
+      assert x != 1;
+    }
+
+    ////////////// GOOD
+    f(Const.X);
+    f(Const.Y);
+    f(Const.Z);
+    int i2 = this == null ? Const.X : Const.Y;
+    f(i2);
+    if (x == Const.X) {
+      x = Const.Y;
+      assert x != Const.Z;
+    }
+
+    f2(x);
+  }
+
+  void f2(@MagicConstant(valuesFromClass =Const.class) int x) {
+    /////////// BAD
+    f2(0);
+    f2(1);
+    f2(Const.X | Const.Y);
+    int i = Const.X | Const.Y;
+    f2(i);
+    if (x == 3) {
+      x = 2;
+      assert x != 1;
+    }
+
+    ////////////// GOOD
+    f2(Const.X);
+    f2(Const.Y);
+    f2(Const.Z);
+    int i2 = this == null ? Const.X : Const.Y;
+    f2(i2);
+    if (x == Const.X) {
+      x = Const.Y;
+      assert x != Const.Z;
+    }
+
+    f(x);
+  }
+
+  void f3(@MagicConstant(flags ={Const.X, Const.Y, Const.Z}) int x) {
+    /////////// BAD
+    f3(2);
+    f3(1);
+    f(Const.X | Const.Y);
+    int i = Const.X | 4;
+    f3(i);
+    if (x == 3) {
+      x = 2;
+      assert x != 1;
+    }
+
+    ////////////// GOOD
+    f3(Const.X);
+    f3(Const.Y);
+    f3(Const.Z);
+
+    int i2 = this == null ? Const.X : Const.Y;
+    f3(i2);
+    int ix = Const.X | Const.Y;
+    f3(ix);
+    f3(0);
+    f3(-1);
+    int f = 0;
+    if (x == Const.X) {
+      x = Const.Y;
+      assert x != Const.Z;
+      f |= Const.Y;  f &= Const.X & ~(Const.Z | Const.X);
+    }
+    else {
+      f |= Const.X;  f = f & ~(Const.X | Const.X);
+    }
+    f3(f);
+
+    f4(x);
+  }
+
+  void f4(@MagicConstant(flagsFromClass =Const.class) int x) {
+    /////////// BAD
+    f4(-3);
+    f4(1);
+    f4(Const.X | Const.Y);
+    int i = Const.X | 4;
+    f4(i);
+    if (x == 3) {
+      x = 2;
+      assert x != 1;
+    }
+
+    ////////////// GOOD
+    f4(Const.X);
+    f4(Const.Y);
+    f4(Const.Z);
+
+    int i2 = this == null ? Const.X : Const.Y;
+    f4(i2);
+    int ix = Const.X | Const.Y;
+    f4(ix);
+    f4(0);
+    f4(-1);
+    int f = 0;
+    if (x == Const.X) {
+      x = Const.Y;
+      assert x != Const.Z;
+      f |= Const.Y;
+    }
+    else {
+      f |= Const.X;
+    }
+    f4(f);
+
+    f3(x);
+  }
+
+
+  class Alias {
+    @MagicConstant(intValues={Const.X, Const.Y, Const.Z})
+    @interface IntEnum{}
+
+    void f(@IntEnum int x) {
+      ////////////// GOOD
+      f(Const.X);
+      f(Const.Y);
+      f(Const.Z);
+      int i2 = this == null ? Const.X : Const.Y;
+      f(i2);
+      if (x == Const.X) {
+        x = Const.Y;
+        assert x != Const.Z;
+      }
+
+      f2(x);
+
+      /////////// BAD
+      f(0);
+      f(1);
+      f(Const.X | Const.Y);
+      int i = Const.X | Const.Y;
+      f(i);
+      if (x == 3 || getClass().isInterface()) {
+        x = 2;
+        assert x != 1;
+      }
+
+      f2(x);
+    }
+  }
+
+  class MagicAnnoInsideAnnotationUsage {
+    @interface III {
+      @MagicConstant(intValues = {Const.X, Const.Y}) int val();
+    }
+
+    // bad
+    @III(val = 2)
+    int h;
+    @III(val = Const.X | Const.Y)
+    void f(){}
+
+    // good
+    @III(val = Const.X)
+    int h2;
+  }
+
+  abstract class BeanInfoParsing {
+    /**
+     * @see        java.lang.Runtime#exit(int)
+     *
+     * @beaninfo
+     *   preferred: true
+     *       bound: true
+     *        enum: DO_NOTHING_ON_CLOSE Const.X
+     *              HIDE_ON_CLOSE       Const.Y
+     * description: The frame's default close operation.
+     */
+    public void setX(int operation) {
+
+    }
+
+    public abstract int getX();
+
+    {
+      // good
+      setX(Const.X);
+      setX(Const.Y);
+      if (getX() == Const.X || getX() == Const.Y) {}
+
+      // bad
+      setX(0);
+      setX(-1);
+      setX(Const.Z);
+      if (getX() == 1) {}
+      if (getX() == Const.Z) {}
+    }
+
+  }
+
+  class ExternalAnnotations {
+    void f() {
+      java.util.Calendar.getInstance().set(2000,9,0)
+      new javax.swing.JLabel("text", 3);
+    }
+  }
+  static class OverrideX extends X {
+    void f(int x) {
+      super.f(x);
+    }
+  }
+
+  void plusSupportedInFlags(@MagicConstant(flags ={Const.X, Const.Y, Const.Z}) int x) {
+    ////////////// GOOD
+    plusSupportedInFlags(Const.X + Const.Y);
+    plusSupportedInFlags(Const.Z + Const.X + Const.Y);
+    plusSupportedInFlags(Const.Z + (Const.X + Const.Y));
+
+    int ix = Const.X + Const.Y;
+    plusSupportedInFlags(ix);
+    plusSupportedInFlags(0);
+    plusSupportedInFlags(-1);
+  }
+}
diff --git a/java/java-tests/testData/inspection/nullableProblems/getterSetterProblems/expected.xml b/java/java-tests/testData/inspection/nullableProblems/getterSetterProblems/expected.xml
new file mode 100644
index 0000000..e83b29b
--- /dev/null
+++ b/java/java-tests/testData/inspection/nullableProblems/getterSetterProblems/expected.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>11</line>
+    <method>
+      <name>void setB(B b)</name>
+      <display_name>setB(B)</display_name>
+      <package>&lt;default&gt;</package>
+      <class>
+        <name>B</name>
+        <display_name>B</display_name>
+      </class>
+    </method>
+    <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">@NotNull/@Nullable problems</problem_class>
+    <description>Setter parameter for @NotNull field might be annotated @NotNull itself</description>
+  </problem>
+  <problem>
+    <file>Test.java</file>
+    <line>7</line>
+    <method>
+      <name>B getB()</name>
+      <display_name>getB()</display_name>
+      <package>&lt;default&gt;</package>
+      <class>
+        <name>B</name>
+        <display_name>B</display_name>
+      </class>
+    </method>
+    <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">@NotNull/@Nullable problems</problem_class>
+    <description>Getter for @NotNull field might be annotated @NotNull itself</description>
+  </problem>
+  
+  <problem>
+    <file>Test.java</file>
+    <line>25</line>
+    <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">@NotNull/@Nullable problems</problem_class>
+    <description>Constructor parameter for @NotNull field might be annotated @NotNull itself</description>
+  </problem>
+
+
+  <problem>
+    <file>Test.java</file>
+    <line>38</line>
+    <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">@NotNull/@Nullable problems</problem_class>
+    <description>Setter parameter for @NotNull field might be annotated @NotNull itself</description>
+  </problem>
+
+
+  <problem>
+    <file>Test.java</file>
+    <line>34</line>
+    <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">@NotNull/@Nullable problems</problem_class>
+    <description>Getter for @NotNull field might be annotated @NotNull itself</description>
+  </problem>
+
+
+  <problem>
+    <file>Test.java</file>
+    <line>29</line>
+    <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">@NotNull/@Nullable problems</problem_class>
+    <description>Constructor parameter for @NotNull field might be annotated @NotNull itself</description>
+  </problem>
+
+  <problem>
+    <file>Test.java</file>
+    <line>63</line>
+    <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">@NotNull/@Nullable problems</problem_class>
+    <description>Constructor parameter for @NotNull field might be annotated @NotNull itself</description>
+  </problem>
+
+
+</problems>
diff --git a/java/java-tests/testData/inspection/nullableProblems/getterSetterProblems/src/Test.java b/java/java-tests/testData/inspection/nullableProblems/getterSetterProblems/src/Test.java
new file mode 100644
index 0000000..6fc47b4
--- /dev/null
+++ b/java/java-tests/testData/inspection/nullableProblems/getterSetterProblems/src/Test.java
@@ -0,0 +1,67 @@
+import org.jetbrains.annotations.NotNull;
+
+class B {
+     @NotNull
+     B b;
+
+    public B getB() {
+        return b;
+    }
+
+    public void setB(B b) {
+        this.b = b;
+    }
+
+        @NotNull
+        private String bug = "true";
+
+        public boolean getBug() {
+            return Boolean.valueOf(bug);
+        }
+}
+class C {
+  @NotNull C c;
+
+  C(C c) {
+    this.c = c;
+  }
+
+  C(@Nullable C c, int i) {
+    this.c = c;
+  }
+
+  @Nullable
+  public C getC() {
+    return c;
+  }
+
+  public void setC(@Nullable C c) {
+    this.c = c;
+  }
+
+  @NotNull C c1;
+  @org.jetbrains.annotations.Nullable
+  public C getC1() {
+    if (c1 != null) {
+      return null;
+    }
+    return c1;
+  }
+}
+
+class D {
+    @Nullable Long myL;
+
+    D(long l) {
+      myL = l;
+    }
+}
+
+class E {
+  final @NotNull C c;
+
+  E(C c) {
+    this.c = c;
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/nullableProblems/jdk14/expected.xml b/java/java-tests/testData/inspection/nullableProblems/jdk14/expected.xml
new file mode 100644
index 0000000..d704d58
--- /dev/null
+++ b/java/java-tests/testData/inspection/nullableProblems/jdk14/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/nullableProblems/jdk14/src/Test.java b/java/java-tests/testData/inspection/nullableProblems/jdk14/src/Test.java
new file mode 100644
index 0000000..a1403cc
--- /dev/null
+++ b/java/java-tests/testData/inspection/nullableProblems/jdk14/src/Test.java
@@ -0,0 +1,26 @@
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+class B {
+    public void f(@NotNull String p){}
+    @NotNull
+    public String nn(@Nullable String param) {
+        return "";
+    }
+}
+         
+public class Y extends B {
+    @NotNull @Nullable String s;
+    public void f(String p){}
+       
+          
+    public String nn(@NotNull String param) { 
+        return "";
+    }
+    void p(@NotNull @Nullable String p2){}
+
+
+    @Nullable int f;
+    @NotNull void vf(){}
+    void t(@NotNull double d){}
+}
diff --git a/java/java-tests/testData/inspection/nullableProblems/nullableFieldNotnullParam/expected.xml b/java/java-tests/testData/inspection/nullableProblems/nullableFieldNotnullParam/expected.xml
new file mode 100644
index 0000000..407582e
--- /dev/null
+++ b/java/java-tests/testData/inspection/nullableProblems/nullableFieldNotnullParam/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>8</line>
+    <description>Constructor parameter for @Nullable field is annotated @NotNull</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/nullableProblems/nullableFieldNotnullParam/src/Test.java b/java/java-tests/testData/inspection/nullableProblems/nullableFieldNotnullParam/src/Test.java
new file mode 100644
index 0000000..5cebab7
--- /dev/null
+++ b/java/java-tests/testData/inspection/nullableProblems/nullableFieldNotnullParam/src/Test.java
@@ -0,0 +1,21 @@
+import org.jetbrains.annotations.*;
+
+class Test {
+     @Nullable private final String baseFile;
+     @Nullable private final String baseFile1;
+
+
+     public Test(@NotNull String baseFile) {
+         this.baseFile = baseFile;
+         this.baseFile1 = null;
+     }
+
+     public Test(@NotNull String baseFile1, boolean a) {
+         this.baseFile1 = baseFile1;
+         if (baseFile1.contains("foo")) {
+           this.baseFile = null;
+         } else {
+           this.baseFile = null;
+         }
+     }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/nullableProblems/overriddenMethods/expected.xml b/java/java-tests/testData/inspection/nullableProblems/overriddenMethods/expected.xml
new file mode 100644
index 0000000..1c1f7ce
--- /dev/null
+++ b/java/java-tests/testData/inspection/nullableProblems/overriddenMethods/expected.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+<problem>
+  <file>Test.java</file>
+  <line>18</line>
+  <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">@NotNull/@Nullable problems</problem_class>
+  <description>Not annotated method overrides method annotated with @NotNull</description>
+</problem>
+
+<problem>
+  <file>Test.java</file>
+  <line>18</line>
+  <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">@NotNull/@Nullable problems</problem_class>
+  <description>Not annotated parameter overrides @NotNull parameter</description>
+</problem>
+
+<problem>
+  <file>Test.java</file>
+  <line>5</line>
+  <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">@NotNull/@Nullable problems</problem_class>
+  <description>Overridden methods are not annotated</description>
+</problem>
+
+<problem>
+  <file>Test.java</file>
+  <line>6</line>
+  <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">@NotNull/@Nullable problems</problem_class>
+  <description>Overridden method parameters are not annotated</description>
+</problem>
+
+<problem>
+  <file>Test.java</file>
+  <line>12</line>
+  <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">@NotNull/@Nullable problems</problem_class>
+  <description>Not annotated method overrides method annotated with @NotNull</description>
+</problem>
+
+<problem>
+  <file>Test.java</file>
+  <line>12</line>
+  <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">@NotNull/@Nullable problems</problem_class>
+  <description>Not annotated parameter overrides @NotNull parameter</description>
+</problem></problems>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/nullableProblems/overriddenMethods/src/Test.java b/java/java-tests/testData/inspection/nullableProblems/overriddenMethods/src/Test.java
new file mode 100644
index 0000000..e44eb8c
--- /dev/null
+++ b/java/java-tests/testData/inspection/nullableProblems/overriddenMethods/src/Test.java
@@ -0,0 +1,53 @@
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+abstract class P2 {
+    @NotNull
+    String foo(@NotNull P p) {
+        return "";
+    }
+}
+
+class PPP extends P2 {
+    String foo(P p) {
+        return super.foo(p);
+    }
+}
+class PPP2 extends P2 {
+
+    String foo(P p) {
+        return super.foo(p);
+    }
+}
+
+///////  in library
+interface Foo {
+    @NotNull
+    String getTitle();
+}
+class FooImpl extends java.awt.Frame implements Foo {
+//    public String getTitle() {
+//        return super.getTitle();    //To change body of overridden methods use File | Settings | File Templates.
+//    }
+}
+
+
+interface I1 {
+  @Nullable
+  Object foo();
+}
+
+interface I2 extends I1 {
+  @NotNull
+  Object foo();
+}
+
+class A implements I1 {
+  @Override
+  public Object foo() {
+    // returns something
+  }
+}
+
+class B extends A implements I2 {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/nullableProblems/problems/expected.xml b/java/java-tests/testData/inspection/nullableProblems/problems/expected.xml
new file mode 100644
index 0000000..9346d37
--- /dev/null
+++ b/java/java-tests/testData/inspection/nullableProblems/problems/expected.xml
@@ -0,0 +1,169 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+<problem>
+  <file>Test.java</file>
+  <line>14</line>
+  <method>
+    <name>void f(String p)</name>
+    <display_name>f(String)</display_name>
+    <package>&lt;default&gt;</package>
+    <class>
+      <name>Y</name>
+      <display_name>Y</display_name>
+    </class>
+  </method>
+  <description>Not annotated parameter overrides @NotNull parameter</description>
+</problem>
+
+
+<problem>
+  <file>Test.java</file>
+  <line>17</line>
+  <text_range start="361" end="363" />
+  <method>
+    <name>String nn(String param)</name>
+    <display_name>nn(String)</display_name>
+    <package>&lt;default&gt;</package>
+    <class>
+      <name>Y</name>
+      <display_name>Y</display_name>
+    </class>
+  </method>
+  <description>Not annotated method overrides method annotated with @NotNull</description>
+</problem>
+
+
+<problem>
+  <file>Test.java</file>
+  <line>17</line>
+  <text_range start="380" end="385" />
+  <method>
+    <name>String nn(String param)</name>
+    <display_name>nn(String)</display_name>
+    <package>&lt;default&gt;</package>
+    <class>
+      <name>Y</name>
+      <display_name>Y</display_name>
+    </class>
+  </method>
+  <description>Parameter annotated @NonNull must not override @Nullable parameter</description>
+</problem>
+
+
+<problem>
+  <file>Test.java</file>
+  <line>13</line>
+  <text_range start="291" end="292" />
+  <field>
+    <name>String s</name>
+    <display_name>s</display_name>
+    <package>&lt;default&gt;</package>
+    <class>
+      <name>Y</name>
+      <display_name>Y</display_name>
+    </class>
+  </field>
+  <description>Cannot annotate with both @Nullable and @NotNull</description>
+
+</problem>
+  <problem>
+    <file>Test.java</file>
+    <line>13</line>
+    <field>
+      <name>String s</name>
+      <display_name>s</display_name>
+      <package>&lt;default&gt;</package>
+      <class>
+        <name>Y</name>
+        <display_name>Y</display_name>
+      </class>
+    </field>
+    <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">@NotNull/@Nullable problems</problem_class>
+    <description>Cannot annotate with both @Nullable and @NotNull</description>
+  </problem>
+
+
+<problem>
+  <file>Test.java</file>
+  <line>20</line>
+  <text_range start="452" end="454" />
+  <method>
+    <name>void p(String p2)</name>
+    <display_name>p(String)</display_name>
+    <package>&lt;default&gt;</package>
+    <class>
+      <name>Y</name>
+      <display_name>Y</display_name>
+    </class>
+  </method>
+  <description>Cannot annotate with both @Nullable and @NotNull</description>
+</problem>
+
+  <problem>
+    <file>Test.java</file>
+    <line>23</line>
+    <text_range start="476" end="477" />
+    <field>
+      <name>int f</name>
+      <display_name>f</display_name>
+      <package>&lt;default&gt;</package>
+      <class>
+        <name>Y</name>
+        <display_name>Y</display_name>
+      </class>
+    </field>
+    <description>Primitive type members cannot be Nullable/NotNull annotated</description>
+  </problem>
+
+  <problem>
+    <file>Test.java</file>
+    <line>24</line>
+    <text_range start="492" end="496" />
+    <method>
+      <name>void vf()</name>
+      <display_name>vf()</display_name>
+      <package>&lt;default&gt;</package>
+      <class>
+        <name>Y</name>
+        <display_name>Y</display_name>
+      </class>
+    </method>
+    <description>Primitive type members cannot be Nullable/NotNull annotated</description>
+  </problem>
+
+
+  <problem>
+    <file>Test.java</file>
+    <line>25</line>
+    <text_range start="531" end="532" />
+    <method>
+      <name>void t(double d)</name>
+      <display_name>t(double)</display_name>
+      <package>&lt;default&gt;</package>
+      <class>
+        <name>Y</name>
+        <display_name>Y</display_name>
+      </class>
+    </method>
+    <description>Primitive type members cannot be Nullable/NotNull annotated</description>
+  </problem>
+
+
+  <problem>
+    <file>Test.java</file>
+    <line>20</line>
+    <method>
+      <name>void p(String p2)</name>
+      <name>p(String)</name>
+      <package>&lt;default&gt;</package>
+      <class>
+        <name>Y</name>
+        <display_name>Y</display_name>
+      </class>
+    </method>
+    <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">@NotNull/@Nullable problems</problem_class>
+    <description>Cannot annotate with both @Nullable and @NotNull</description>
+  </problem>
+
+</problems>
+
diff --git a/java/java-tests/testData/inspection/nullableProblems/problems/src/Test.java b/java/java-tests/testData/inspection/nullableProblems/problems/src/Test.java
new file mode 100644
index 0000000..a1403cc
--- /dev/null
+++ b/java/java-tests/testData/inspection/nullableProblems/problems/src/Test.java
@@ -0,0 +1,26 @@
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+class B {
+    public void f(@NotNull String p){}
+    @NotNull
+    public String nn(@Nullable String param) {
+        return "";
+    }
+}
+         
+public class Y extends B {
+    @NotNull @Nullable String s;
+    public void f(String p){}
+       
+          
+    public String nn(@NotNull String param) { 
+        return "";
+    }
+    void p(@NotNull @Nullable String p2){}
+
+
+    @Nullable int f;
+    @NotNull void vf(){}
+    void t(@NotNull double d){}
+}
diff --git a/java/java-tests/testData/inspection/nullableProblems/problems2/expected.xml b/java/java-tests/testData/inspection/nullableProblems/problems2/expected.xml
new file mode 100644
index 0000000..7c0603d
--- /dev/null
+++ b/java/java-tests/testData/inspection/nullableProblems/problems2/expected.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>23</line>
+    <text_range start="556" end="557" />
+    <method>
+      <name>String f()</name>
+      <display_name>f()</display_name>
+      <package>&lt;default&gt;</package>
+      <class>
+        <name>CC</name>
+        <display_name>CC</display_name>
+      </class>
+    </method>
+    <description>Cannot annotate with both @Nullable and @NotNull</description>
+  </problem>
+  <problem>
+    <file>Test.java</file>
+    <line>23</line>
+    <method>
+      <name>String f()</name>
+      <name>f()</name>
+      <package>&lt;default&gt;</package>
+      <class>
+        <name>CC</name>
+        <display_name>CC</display_name>
+      </class>
+    </method>
+    <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">@NotNull/@Nullable problems</problem_class>
+    <description>Cannot annotate with both @Nullable and @NotNull</description>
+  </problem>
+
+
+  <problem>
+    <file>Test.java</file>
+    <line>16</line>
+    <text_range start="368" end="373" />
+    <method>
+      <name>C getC2()</name>
+      <display_name>getC2()</display_name>
+      <package>&lt;default&gt;</package>
+      <class>
+        <name>CC</name>
+        <display_name>CC</display_name>
+      </class>
+    </method>
+    <description>Not annotated method overrides method annotated with @NotNull</description>
+  </problem>
+
+
+  <problem>
+    <file>Test.java</file>
+    <line>18</line>
+    <text_range start="417" end="418" />
+    <method>
+      <name>void f1(C p)</name>
+      <display_name>f1(C)</display_name>
+      <package>&lt;default&gt;</package>
+      <class>
+        <name>CC</name>
+        <display_name>CC</display_name>
+      </class>
+    </method>
+    <description>Parameter annotated @NonNull must not override @Nullable parameter</description>
+  </problem>
+
+
+  <problem>
+    <file>Test.java</file>
+    <line>15</line>
+    <text_range start="338" end="342" />
+    <method>
+      <name>C getC()</name>
+      <display_name>getC()</display_name>
+      <package>&lt;default&gt;</package>
+      <class>
+        <name>CC</name>
+        <display_name>CC</display_name>
+      </class>
+    </method>
+    <description>Method annotated with @Nullable must not override @NotNull method</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/nullableProblems/problems2/src/Test.java b/java/java-tests/testData/inspection/nullableProblems/problems2/src/Test.java
new file mode 100644
index 0000000..16a05db
--- /dev/null
+++ b/java/java-tests/testData/inspection/nullableProblems/problems2/src/Test.java
@@ -0,0 +1,24 @@
+import org.jetbrains.annotations.*;
+
+class C {
+  public static C C = null;
+  @NotNull public C getC() {return C;}
+  @NotNull public C getC2() {return C;}
+
+  public void f1(@Nullable C p) {}
+  public void f2(@NotNull C p) {}
+  public void f3(@Nullable C p) {}
+  public void f4(@NotNull C p) {}
+}
+
+class CC extends C {
+  @Nullable public C getC() {return C;}
+  public C getC2() {return C;}
+
+  public void f1(@NotNull C p) {}
+  public void f2(@NotNull C p) {}
+  public void f3(@Nullable C p) {}
+  public void f4(@Nullable C p) {}
+
+  @Nullable @NotNull String f() { return null;}
+}
diff --git a/java/java-tests/testData/inspection/numericOverflow/simple/expected.xml b/java/java-tests/testData/inspection/numericOverflow/simple/expected.xml
new file mode 100644
index 0000000..78d22bf
--- /dev/null
+++ b/java/java-tests/testData/inspection/numericOverflow/simple/expected.xml
@@ -0,0 +1,650 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Foo.java</file>
+    <line>87</line>
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>16</line>
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>17</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>17</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>18</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>18</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>19</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>19</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>25</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>27</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>27</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>28</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>28</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>29</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>29</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>30</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>30</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>34</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>35</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>35</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>36</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>36</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>37</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>37</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>38</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>38</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>39</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>39</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>43</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>43</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>44</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>44</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>45</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>45</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>47</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>47</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>48</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>48</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>51</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>52</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>52</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>53</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>53</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>54</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>54</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>55</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>55</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>56</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>56</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>60</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>60</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>62</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>62</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>63</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>63</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>64</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>64</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>65</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>65</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>67</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>67</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>68</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>68</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>69</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>69</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>71</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>71</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>72</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>72</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>72</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>72</line>
+    
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+  <problem>
+    <file>Foo.java</file>
+    <line>72</line>
+
+    <description>Numeric overflow in expression</description>
+  </problem>
+
+
+  
+</problems>
+
diff --git a/java/java-tests/testData/inspection/numericOverflow/simple/src/Foo.java b/java/java-tests/testData/inspection/numericOverflow/simple/src/Foo.java
new file mode 100644
index 0000000..1aed3c6
--- /dev/null
+++ b/java/java-tests/testData/inspection/numericOverflow/simple/src/Foo.java
@@ -0,0 +1,88 @@
+// overflows in const expressions
+
+
+class c {
+ // @*#$& ! references do not work in JRE
+ static final long LONG_MIN_VALUE = 0x8000000000000000L;
+ static final long LONG_MAX_VALUE = 0x7fffffffffffffffL;
+ static final int INTEGER_MIN_VALUE = 0x80000000;
+ static final int INTEGER_MAX_VALUE = 0x7fffffff;
+ static final float FLOAT_MIN_VALUE = 1.4e-45f;
+ static final float FLOAT_MAX_VALUE = 3.4028235e+38f;
+ static final double DOUBLE_MIN_VALUE = 4.9e-324;
+ static final double DOUBLE_MAX_VALUE = 1.7976931348623157e+308;
+
+ void f() {
+   float f1 = 1.0f / 0.0f;
+   f1 = FLOAT_MAX_VALUE + FLOAT_MAX_VALUE;
+   f1 = FLOAT_MAX_VALUE * 2;
+   f1 = 2 / FLOAT_MIN_VALUE;
+   f1 = FLOAT_MIN_VALUE + 1;
+   f1 = - FLOAT_MIN_VALUE;
+   f1 = -FLOAT_MAX_VALUE;
+   System.out.println(f1);
+
+   double d1 = DOUBLE_MAX_VALUE - -DOUBLE_MAX_VALUE;
+   d1 = DOUBLE_MAX_VALUE + 1;
+   d1 = 2 * DOUBLE_MAX_VALUE;
+   d1 = 2 / DOUBLE_MIN_VALUE;
+   d1 = 2 / 0.0d;
+   d1 = 2 / 0.0;
+   System.out.println(d1);
+
+
+   int i1 = INTEGER_MAX_VALUE + 1;
+   i1 = INTEGER_MAX_VALUE - 1 + 2;
+   i1 = INTEGER_MAX_VALUE - INTEGER_MIN_VALUE;
+   i1 = -INTEGER_MIN_VALUE;
+   i1 = INTEGER_MIN_VALUE - 1;
+   i1 = INTEGER_MIN_VALUE - INTEGER_MAX_VALUE;
+   i1 = INTEGER_MIN_VALUE + INTEGER_MAX_VALUE;
+   i1 = - INTEGER_MAX_VALUE;
+   i1 = - -INTEGER_MAX_VALUE;
+   i1 = INTEGER_MIN_VALUE * -1;
+   i1 = INTEGER_MIN_VALUE * 2;
+   i1 = INTEGER_MAX_VALUE * -2;
+   i1 = INTEGER_MAX_VALUE * -1;
+   i1 = 2 / 0;
+   i1 = INTEGER_MIN_VALUE / -1;
+   System.out.println(i1);
+
+   long l1 = LONG_MAX_VALUE + 1;
+   l1 = LONG_MAX_VALUE - 1 + 2;
+   l1 = LONG_MAX_VALUE - LONG_MIN_VALUE;
+   l1 = -LONG_MIN_VALUE;
+   l1 = LONG_MIN_VALUE - 1;
+   l1 = LONG_MIN_VALUE - LONG_MAX_VALUE;
+   l1 = LONG_MIN_VALUE + LONG_MAX_VALUE;
+   l1 = - LONG_MAX_VALUE;
+   l1 = - -LONG_MAX_VALUE;
+   l1 = -INTEGER_MIN_VALUE;
+   l1 =  -1L + INTEGER_MIN_VALUE;
+   l1 = LONG_MIN_VALUE * INTEGER_MIN_VALUE;
+   l1 = LONG_MIN_VALUE * -1;
+   l1 = LONG_MIN_VALUE * 2;
+   l1 = LONG_MAX_VALUE * -2;
+   l1 = INTEGER_MIN_VALUE * -1L;
+   l1 = 2 / 0L;
+   l1 = 2 % 0L;
+   l1 = LONG_MIN_VALUE / -1;
+
+   l1 = 30 * 24 * 60 * 60 * 1000; 
+   l1 = 30000000 * 243232323 * (LONG_MAX_VALUE +3) / 5;
+
+   System.out.println(l1);
+
+
+   
+   }
+   
+    private static final long MILLIS_PER_DAY = 24 * 3600 * 1000;
+    private static final long _7DAYS = 7 * MILLIS_PER_DAY;
+    private static final long _30DAYS = 30 * MILLIS_PER_DAY;
+    private static final long _1000DAYS = 1000 * MILLIS_PER_DAY;
+    {
+       System.out.println(_1000DAYS + _30DAYS + _7DAYS);
+    }
+    int iii = 2 % 0;
+}
diff --git a/java/java-tests/testData/inspection/parameterCanBeLocal/for/expected.xml b/java/java-tests/testData/inspection/parameterCanBeLocal/for/expected.xml
new file mode 100644
index 0000000..ecdf154
--- /dev/null
+++ b/java/java-tests/testData/inspection/parameterCanBeLocal/for/expected.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>2</line>
+    <description>Parameter can be converted to a variable</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/parameterCanBeLocal/for/src/Test.java b/java/java-tests/testData/inspection/parameterCanBeLocal/for/src/Test.java
new file mode 100644
index 0000000..95467a6
--- /dev/null
+++ b/java/java-tests/testData/inspection/parameterCanBeLocal/for/src/Test.java
@@ -0,0 +1,8 @@
+class Temp {
+  public Temp(int p) {
+    for (int i = 0; i < 10; i++) {
+      p = i;
+      System.out.print(p);
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/parameterCanBeLocal/if/expected.xml b/java/java-tests/testData/inspection/parameterCanBeLocal/if/expected.xml
new file mode 100644
index 0000000..06abec6
--- /dev/null
+++ b/java/java-tests/testData/inspection/parameterCanBeLocal/if/expected.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>4</line>
+    <description>Parameter can be converted to a variable</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/parameterCanBeLocal/if/src/Test.java b/java/java-tests/testData/inspection/parameterCanBeLocal/if/src/Test.java
new file mode 100644
index 0000000..4ae6800
--- /dev/null
+++ b/java/java-tests/testData/inspection/parameterCanBeLocal/if/src/Test.java
@@ -0,0 +1,13 @@
+class Temp {
+  public boolean flag;
+
+  void test(int p) {
+    if (flag) {
+      p = 1;
+    }
+    else {
+      p = 2;
+    }
+    System.out.print(p);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/parameterCanBeLocal/readOnly/expected.xml b/java/java-tests/testData/inspection/parameterCanBeLocal/readOnly/expected.xml
new file mode 100644
index 0000000..4704d91
--- /dev/null
+++ b/java/java-tests/testData/inspection/parameterCanBeLocal/readOnly/expected.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems/>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/parameterCanBeLocal/readOnly/src/Test.java b/java/java-tests/testData/inspection/parameterCanBeLocal/readOnly/src/Test.java
new file mode 100644
index 0000000..9296e7e
--- /dev/null
+++ b/java/java-tests/testData/inspection/parameterCanBeLocal/readOnly/src/Test.java
@@ -0,0 +1,8 @@
+class Test {
+    public static final boolean myFoo = false;
+
+    public static void foo(int p) {
+        if (!myFoo) return;
+        System.out.println("p = " + p);
+    }
+}
diff --git a/java/java-tests/testData/inspection/parameterCanBeLocal/simple/expected.xml b/java/java-tests/testData/inspection/parameterCanBeLocal/simple/expected.xml
new file mode 100644
index 0000000..a83abd2
--- /dev/null
+++ b/java/java-tests/testData/inspection/parameterCanBeLocal/simple/expected.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>3</line>
+    <description>Parameter can be converted to a variable</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/parameterCanBeLocal/simple/src/Test.java b/java/java-tests/testData/inspection/parameterCanBeLocal/simple/src/Test.java
new file mode 100644
index 0000000..33ec47a
--- /dev/null
+++ b/java/java-tests/testData/inspection/parameterCanBeLocal/simple/src/Test.java
@@ -0,0 +1,7 @@
+class Temp {
+
+  void test(int p) {
+    p = 1;
+    System.out.print(p);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/afterFor.java b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/afterFor.java
new file mode 100644
index 0000000..ce8711e
--- /dev/null
+++ b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/afterFor.java
@@ -0,0 +1,9 @@
+// "Convert to local variable" "true"
+class Temp {
+  public Temp() {
+    for (int i = 0; i < 10; i++) {
+        <caret>int p = i;
+      System.out.print(p);
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/afterIf.java b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/afterIf.java
new file mode 100644
index 0000000..e6d8f75
--- /dev/null
+++ b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/afterIf.java
@@ -0,0 +1,15 @@
+// "Convert to local variable" "true"
+class Temp {
+  public boolean flag;
+
+  void test() {
+      <caret>int p;
+      if (flag) {
+      p = 1;
+    }
+    else {
+      p = 2;
+    }
+    System.out.print(p);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/afterSimple.java b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/afterSimple.java
new file mode 100644
index 0000000..f692ff1
--- /dev/null
+++ b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/afterSimple.java
@@ -0,0 +1,8 @@
+// "Convert to local variable" "true"
+class Temp {
+
+  void test() {
+      <caret>int p = 1;
+    System.out.print(p);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/afterUpdateCallers.java b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/afterUpdateCallers.java
new file mode 100644
index 0000000..bbda711
--- /dev/null
+++ b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/afterUpdateCallers.java
@@ -0,0 +1,12 @@
+// "Convert to local variable" "true"
+class Temp {
+
+  void foo() {
+      <caret>int x = 5;
+    System.out.println(x);
+  }
+
+  void bar() {
+    foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/afterUpdateCallers1.java b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/afterUpdateCallers1.java
new file mode 100644
index 0000000..b9c0318
--- /dev/null
+++ b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/afterUpdateCallers1.java
@@ -0,0 +1,12 @@
+// "Convert to local variable" "true"
+class Temp {
+
+  void foo(int k) {
+      int x = 5;
+    System.out.println(x);
+  }
+
+  void bar() {
+    foo(42);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/beforeFor.java b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/beforeFor.java
new file mode 100644
index 0000000..598b2378
--- /dev/null
+++ b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/beforeFor.java
@@ -0,0 +1,9 @@
+// "Convert to local variable" "true"
+class Temp {
+  public Temp(int <caret>p) {
+    for (int i = 0; i < 10; i++) {
+      p = i;
+      System.out.print(p);
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/beforeIf.java b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/beforeIf.java
new file mode 100644
index 0000000..6dc3bb1
--- /dev/null
+++ b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/beforeIf.java
@@ -0,0 +1,14 @@
+// "Convert to local variable" "true"
+class Temp {
+  public boolean flag;
+
+  void test(int <caret>p) {
+    if (flag) {
+      p = 1;
+    }
+    else {
+      p = 2;
+    }
+    System.out.print(p);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/beforeSimple.java b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/beforeSimple.java
new file mode 100644
index 0000000..cf03ce2
--- /dev/null
+++ b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/beforeSimple.java
@@ -0,0 +1,8 @@
+// "Convert to local variable" "true"
+class Temp {
+
+  void test(int <caret>p) {
+    p = 1;
+    System.out.print(p);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/beforeUpdateCallers.java b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/beforeUpdateCallers.java
new file mode 100644
index 0000000..441d503
--- /dev/null
+++ b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/beforeUpdateCallers.java
@@ -0,0 +1,12 @@
+// "Convert to local variable" "true"
+class Temp {
+
+  void foo(int <caret>x) {
+    x = 5;
+    System.out.println(x);
+  }
+
+  void bar() {
+    foo(2);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/beforeUpdateCallers1.java b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/beforeUpdateCallers1.java
new file mode 100644
index 0000000..e84b373
--- /dev/null
+++ b/java/java-tests/testData/inspection/quickFix/ConvertParameterToLocalVariable/beforeUpdateCallers1.java
@@ -0,0 +1,12 @@
+// "Convert to local variable" "true"
+class Temp {
+
+  void foo(int <caret>x, int k) {
+    x = 5;
+    System.out.println(x);
+  }
+
+  void bar() {
+    foo(2, 42);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/quickFix/SameParameterValue/after1.java b/java/java-tests/testData/inspection/quickFix/SameParameterValue/after1.java
new file mode 100644
index 0000000..bf45925
--- /dev/null
+++ b/java/java-tests/testData/inspection/quickFix/SameParameterValue/after1.java
@@ -0,0 +1,6 @@
+// "f false" "true"
+public class Test {
+  void foo(<caret>){}
+  void bar(){foo();}
+  void bar1(){foo();}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/quickFix/SameParameterValue/after2.java b/java/java-tests/testData/inspection/quickFix/SameParameterValue/after2.java
new file mode 100644
index 0000000..b05de54
--- /dev/null
+++ b/java/java-tests/testData/inspection/quickFix/SameParameterValue/after2.java
@@ -0,0 +1,10 @@
+// "f false" "true"
+public class Test {
+  void foo(<caret>){
+    if (false) {
+      Syste.out.print(false);
+    }
+  }
+  void bar(){foo();}
+  void bar1(){foo();}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/quickFix/SameParameterValue/after3.java b/java/java-tests/testData/inspection/quickFix/SameParameterValue/after3.java
new file mode 100644
index 0000000..3565ed6
--- /dev/null
+++ b/java/java-tests/testData/inspection/quickFix/SameParameterValue/after3.java
@@ -0,0 +1,10 @@
+// "b false" "true"
+public class Test {
+  void foo(boolean f<caret>){
+    if (f) {
+      Syste.out.print(f);
+    }
+  }
+  void bar(){foo(false);}
+  void bar1(){foo(true);}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/quickFix/SameParameterValue/after4.java b/java/java-tests/testData/inspection/quickFix/SameParameterValue/after4.java
new file mode 100644
index 0000000..55ea930
--- /dev/null
+++ b/java/java-tests/testData/inspection/quickFix/SameParameterValue/after4.java
@@ -0,0 +1,10 @@
+// "f false" "true"
+public class Test {
+  void foo(<caret>boolean b){
+    if (false) {
+      Syste.out.print(false);
+    }
+  }
+  void bar(){foo(false);}
+  void bar1(){foo(true);}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/quickFix/SameParameterValue/after5.java b/java/java-tests/testData/inspection/quickFix/SameParameterValue/after5.java
new file mode 100644
index 0000000..1244bb7
--- /dev/null
+++ b/java/java-tests/testData/inspection/quickFix/SameParameterValue/after5.java
@@ -0,0 +1,10 @@
+// "f 5" "true"
+public class Test {
+  void foo(<caret>){
+    if (5 == 5) {
+      Syste.out.print(5);
+    }
+  }
+  void bar(){foo();}
+  void bar1(){foo();}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/quickFix/SameParameterValue/after6.java b/java/java-tests/testData/inspection/quickFix/SameParameterValue/after6.java
new file mode 100644
index 0000000..2ee8c7d
--- /dev/null
+++ b/java/java-tests/testData/inspection/quickFix/SameParameterValue/after6.java
@@ -0,0 +1,9 @@
+// "f 5" "true"
+public class Test {
+  void foo(<caret>){
+    Syste.out.print(d(new int[]{5}));
+  }
+  int d(int[] d){}
+  void bar(){foo();}
+  void bar1(){foo();}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/quickFix/SameParameterValue/before1.java b/java/java-tests/testData/inspection/quickFix/SameParameterValue/before1.java
new file mode 100644
index 0000000..6be405c
--- /dev/null
+++ b/java/java-tests/testData/inspection/quickFix/SameParameterValue/before1.java
@@ -0,0 +1,6 @@
+// "f false" "true"
+public class Test {
+  void foo(boolean <caret>f){}
+  void bar(){foo(false);}
+  void bar1(){foo(false);}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/quickFix/SameParameterValue/before2.java b/java/java-tests/testData/inspection/quickFix/SameParameterValue/before2.java
new file mode 100644
index 0000000..a3ae42b
--- /dev/null
+++ b/java/java-tests/testData/inspection/quickFix/SameParameterValue/before2.java
@@ -0,0 +1,10 @@
+// "f false" "true"
+public class Test {
+  void foo(boolean <caret>f){
+    if (f) {
+      Syste.out.print(f);
+    }
+  }
+  void bar(){foo(false);}
+  void bar1(){foo(false);}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/quickFix/SameParameterValue/before3.java b/java/java-tests/testData/inspection/quickFix/SameParameterValue/before3.java
new file mode 100644
index 0000000..1f3dbbe
--- /dev/null
+++ b/java/java-tests/testData/inspection/quickFix/SameParameterValue/before3.java
@@ -0,0 +1,10 @@
+// "b false" "true"
+public class Test {
+  void foo(boolean f, boolean <caret>b){
+    if (f) {
+      Syste.out.print(f);
+    }
+  }
+  void bar(){foo(false, false);}
+  void bar1(){foo(true, false);}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/quickFix/SameParameterValue/before4.java b/java/java-tests/testData/inspection/quickFix/SameParameterValue/before4.java
new file mode 100644
index 0000000..cd79927
--- /dev/null
+++ b/java/java-tests/testData/inspection/quickFix/SameParameterValue/before4.java
@@ -0,0 +1,10 @@
+// "f false" "true"
+public class Test {
+  void foo(boolean <caret>f, boolean b){
+    if (f) {
+      Syste.out.print(f);
+    }
+  }
+  void bar(){foo(false, false);}
+  void bar1(){foo(false, true);}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/quickFix/SameParameterValue/before5.java b/java/java-tests/testData/inspection/quickFix/SameParameterValue/before5.java
new file mode 100644
index 0000000..a730545
--- /dev/null
+++ b/java/java-tests/testData/inspection/quickFix/SameParameterValue/before5.java
@@ -0,0 +1,10 @@
+// "f 5" "true"
+public class Test {
+  void foo(int <caret>f){
+    if (f == 5) {
+      Syste.out.print(f);
+    }
+  }
+  void bar(){foo(5);}
+  void bar1(){foo(5);}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/quickFix/SameParameterValue/before6.java b/java/java-tests/testData/inspection/quickFix/SameParameterValue/before6.java
new file mode 100644
index 0000000..672d480
--- /dev/null
+++ b/java/java-tests/testData/inspection/quickFix/SameParameterValue/before6.java
@@ -0,0 +1,9 @@
+// "f 5" "true"
+public class Test {
+  void foo(int... <caret>f){
+    Syste.out.print(d(f));
+  }
+  int d(int[] d){}
+  void bar(){foo(5);}
+  void bar1(){foo(5);}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantArrayForVarargs/IDEADEV15215/expected.xml b/java/java-tests/testData/inspection/redundantArrayForVarargs/IDEADEV15215/expected.xml
new file mode 100644
index 0000000..feec61b
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantArrayForVarargs/IDEADEV15215/expected.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+<problem>
+  <file>Test.java</file>
+  <line>18</line>
+  <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Redundant array creation</problem_class>
+  <description>Redundant array creation for calling varargs method</description>
+</problem>
+  
+</problems>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantArrayForVarargs/IDEADEV15215/src/Test.java b/java/java-tests/testData/inspection/redundantArrayForVarargs/IDEADEV15215/src/Test.java
new file mode 100644
index 0000000..6e59062
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantArrayForVarargs/IDEADEV15215/src/Test.java
@@ -0,0 +1,20 @@
+
+public class Test {
+
+    public static void main(String[] args) {
+        foo(new byte[]{ 1, 2, 3 });
+    }
+
+    private static void foo(byte... bytes) {
+        System.out.println("Test.foo(byte...)");
+        for (int i = 0; i < bytes.length; i++) {
+            System.out.println("bytes[" + i + "] = " + bytes[i]);
+        }
+    }
+
+
+    
+    public static void extra(String... args) {
+      extra(new String[]{"vvv","aaa"});
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantArrayForVarargs/IDEADEV25923/expected.xml b/java/java-tests/testData/inspection/redundantArrayForVarargs/IDEADEV25923/expected.xml
new file mode 100644
index 0000000..39c2716
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantArrayForVarargs/IDEADEV25923/expected.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+<problem>
+  <file>Test.java</file>
+  <line>7</line>
+  <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Redundant array creation</problem_class>
+  <description>Redundant array creation for calling varargs method</description>
+</problem>
+
+</problems>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantArrayForVarargs/IDEADEV25923/src/Test.java b/java/java-tests/testData/inspection/redundantArrayForVarargs/IDEADEV25923/src/Test.java
new file mode 100644
index 0000000..7d8c3b1
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantArrayForVarargs/IDEADEV25923/src/Test.java
@@ -0,0 +1,9 @@
+
+public class Test {
+    public void foo(Object... params) {}
+
+    {
+        foo(new Object[2]);
+        foo(new Object[0]);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantArrayForVarargs/checkEnumConstant/expected.xml b/java/java-tests/testData/inspection/redundantArrayForVarargs/checkEnumConstant/expected.xml
new file mode 100644
index 0000000..d4c072d
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantArrayForVarargs/checkEnumConstant/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>3</line>
+    <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Redundant array creation</problem_class>
+    <description>Redundant array creation for calling varargs method</description>
+  </problem>
+</problems>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantArrayForVarargs/checkEnumConstant/src/Test.java b/java/java-tests/testData/inspection/redundantArrayForVarargs/checkEnumConstant/src/Test.java
new file mode 100644
index 0000000..abef220
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantArrayForVarargs/checkEnumConstant/src/Test.java
@@ -0,0 +1,7 @@
+
+public enum Test {
+  A(new String[]{"1", "2"});
+
+  Test(String... ss) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantArrayForVarargs/generic/expected.xml b/java/java-tests/testData/inspection/redundantArrayForVarargs/generic/expected.xml
new file mode 100644
index 0000000..403962e
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantArrayForVarargs/generic/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>10</line>
+    <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Redundant array creation</problem_class>
+    <description>Redundant array creation for calling varargs method</description>
+  </problem>
+</problems>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantArrayForVarargs/generic/src/Test.java b/java/java-tests/testData/inspection/redundantArrayForVarargs/generic/src/Test.java
new file mode 100644
index 0000000..9f38ddc
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantArrayForVarargs/generic/src/Test.java
@@ -0,0 +1,18 @@
+
+class Test {
+  class A {}
+  class B extends A {}
+
+  void f() {
+    B b = new B();
+    C<A> l = asC(new A[]{b});
+    A a = new A();
+    C<A> m = asC(new A[]{a});
+  }
+
+  public static <T> C<T> asC(T... ts) {
+    return null;
+  }
+
+  class C<T> {}
+}
diff --git a/java/java-tests/testData/inspection/redundantArrayForVarargs/nestedArray/expected.xml b/java/java-tests/testData/inspection/redundantArrayForVarargs/nestedArray/expected.xml
new file mode 100644
index 0000000..35e28d8
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantArrayForVarargs/nestedArray/expected.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>13</line>
+    <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Redundant array creation</problem_class>
+    <description>Redundant array creation for calling varargs method</description>
+  </problem>
+
+  <problem>
+    <file>Test.java</file>
+    <line>14</line>
+    <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Redundant array creation</problem_class>
+    <description>Redundant array creation for calling varargs method</description>
+  </problem>
+
+</problems>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantArrayForVarargs/nestedArray/src/Test.java b/java/java-tests/testData/inspection/redundantArrayForVarargs/nestedArray/src/Test.java
new file mode 100644
index 0000000..863ac6f
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantArrayForVarargs/nestedArray/src/Test.java
@@ -0,0 +1,16 @@
+public class IntentionTest {
+    public IntentionTest() {}
+
+    public void method( Object ... args ) {
+        for (int i = 0; i < args.length; i++) {
+            System.out.println("args["+i+"] = " + args[i]);
+        }
+    }
+
+    public void main(String[] args) {
+        String[] params = new String[]{ "0", "1" };
+        method(new Object[]{params});
+        method(new Object[]{"2", params});
+        method(new Object[]{params, params});
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantArrayForVarargs/quickFix/PreserveComments.java b/java/java-tests/testData/inspection/redundantArrayForVarargs/quickFix/PreserveComments.java
new file mode 100644
index 0000000..854b0a4
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantArrayForVarargs/quickFix/PreserveComments.java
@@ -0,0 +1,8 @@
+class Test {
+  void foo(String... strs){}
+  void bar() {
+    foo(new S<caret>tring[] {
+      "edwqefwe", //my comment
+    });
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantArrayForVarargs/quickFix/PreserveComments_after.java b/java/java-tests/testData/inspection/redundantArrayForVarargs/quickFix/PreserveComments_after.java
new file mode 100644
index 0000000..d118e75
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantArrayForVarargs/quickFix/PreserveComments_after.java
@@ -0,0 +1,7 @@
+class Test {
+  void foo(String... strs){}
+  void bar() {
+    foo("edwqefwe", //my comment
+    );
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantArrayForVarargs/quickFix/RemoveTailingCommas.java b/java/java-tests/testData/inspection/redundantArrayForVarargs/quickFix/RemoveTailingCommas.java
new file mode 100644
index 0000000..952e96c
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantArrayForVarargs/quickFix/RemoveTailingCommas.java
@@ -0,0 +1,9 @@
+public class Main {
+    public static void main(String[] args) {
+        display(new S<caret>tring[]{
+                "hi",
+        });
+    }
+
+    private static void display(String... messages) { }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantArrayForVarargs/quickFix/RemoveTailingCommas_after.java b/java/java-tests/testData/inspection/redundantArrayForVarargs/quickFix/RemoveTailingCommas_after.java
new file mode 100644
index 0000000..95e5c5d
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantArrayForVarargs/quickFix/RemoveTailingCommas_after.java
@@ -0,0 +1,7 @@
+public class Main {
+    public static void main(String[] args) {
+        display("hi");
+    }
+
+    private static void display(String... messages) { }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/AmbigousParm1/expected.xml b/java/java-tests/testData/inspection/redundantCast/AmbigousParm1/expected.xml
new file mode 100644
index 0000000..a34576e
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/AmbigousParm1/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>AmbigousParm1.java</file>
+    <line>11</line>
+    <description>Casting c to A is redundant</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/redundantCast/AmbigousParm1/src/AmbigousParm1.java b/java/java-tests/testData/inspection/redundantCast/AmbigousParm1/src/AmbigousParm1.java
new file mode 100644
index 0000000..d2e90c4
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/AmbigousParm1/src/AmbigousParm1.java
@@ -0,0 +1,13 @@
+interface A {}
+
+interface B {}
+
+class C implements A, B {}
+
+public class AmbigousParameter {
+   public void ua(A a) {}
+
+   public void caller(C c) {
+     ua((A)c);
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/AmbigousParm2/expected.xml b/java/java-tests/testData/inspection/redundantCast/AmbigousParm2/expected.xml
new file mode 100644
index 0000000..4190a65
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/AmbigousParm2/expected.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>AmbigousParm2.java</file>
+    <line>14</line>
+    <description>Casting c to A is redundant</description>
+  </problem>
+  <problem>
+    <file>AmbigousParm2.java</file>
+    <line>15</line>
+    <description>Casting a to A is redundant</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/redundantCast/AmbigousParm2/src/.AmbigousParm2.java.swp b/java/java-tests/testData/inspection/redundantCast/AmbigousParm2/src/.AmbigousParm2.java.swp
new file mode 100644
index 0000000..17471d1
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/AmbigousParm2/src/.AmbigousParm2.java.swp
Binary files differ
diff --git a/java/java-tests/testData/inspection/redundantCast/AmbigousParm2/src/AmbigousParm2.java b/java/java-tests/testData/inspection/redundantCast/AmbigousParm2/src/AmbigousParm2.java
new file mode 100644
index 0000000..714aee6
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/AmbigousParm2/src/AmbigousParm2.java
@@ -0,0 +1,17 @@
+interface A {}
+
+interface B {}
+
+class C implements A, B {}
+
+public class AmbigousParameter {
+   void m(A a) {}
+   void m(B b) {}
+
+   public void caller(C c) {
+     m((A)c);
+     m((A)null);
+     A a = (A)c;
+     m((A)a);
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/AmbigousParm3/expected.xml b/java/java-tests/testData/inspection/redundantCast/AmbigousParm3/expected.xml
new file mode 100644
index 0000000..e211556
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/AmbigousParm3/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>AmbigousParm3.java</file>
+    <line>13</line>
+    <description>Casting null to A is redundant</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/redundantCast/AmbigousParm3/src/AmbigousParm3.java b/java/java-tests/testData/inspection/redundantCast/AmbigousParm3/src/AmbigousParm3.java
new file mode 100644
index 0000000..70356c0
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/AmbigousParm3/src/AmbigousParm3.java
@@ -0,0 +1,15 @@
+interface A {}
+interface B {}
+
+public class AmbigousParameter {
+   public void f(A a) {}
+   public void f(B b) {}
+   public void f(Object o) {}
+
+   public void g(Object o) {}
+
+   public void caller() {
+     f((A)null);
+     g((A)null);
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/AmbigousParm4/expected.xml b/java/java-tests/testData/inspection/redundantCast/AmbigousParm4/expected.xml
new file mode 100644
index 0000000..9ac879d
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/AmbigousParm4/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems />
+
diff --git a/java/java-tests/testData/inspection/redundantCast/AmbigousParm4/src/AmbigousParm4.java b/java/java-tests/testData/inspection/redundantCast/AmbigousParm4/src/AmbigousParm4.java
new file mode 100644
index 0000000..3ca6069
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/AmbigousParm4/src/AmbigousParm4.java
@@ -0,0 +1,8 @@
+import javax.swing.*;
+import java.awt.*;
+
+public class AmbigousParameter {
+   public void caller() {
+     new JDialog((Frame)null, "Title", true);
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/AmbigousParm5/expected.xml b/java/java-tests/testData/inspection/redundantCast/AmbigousParm5/expected.xml
new file mode 100644
index 0000000..9ac879d
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/AmbigousParm5/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems />
+
diff --git a/java/java-tests/testData/inspection/redundantCast/AmbigousParm5/src/AmbigousParm5.java b/java/java-tests/testData/inspection/redundantCast/AmbigousParm5/src/AmbigousParm5.java
new file mode 100644
index 0000000..fb61553a80
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/AmbigousParm5/src/AmbigousParm5.java
@@ -0,0 +1,8 @@
+import javax.swing.*;
+import java.awt.*;
+
+public class AmbigousParameter {
+   public void caller() {
+     new JDialog( ((Frame)null), "Title", true);
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/AnyOfTwo/expected.xml b/java/java-tests/testData/inspection/redundantCast/AnyOfTwo/expected.xml
new file mode 100644
index 0000000..9ac879d
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/AnyOfTwo/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems />
+
diff --git a/java/java-tests/testData/inspection/redundantCast/AnyOfTwo/src/AnyOfTwo.java b/java/java-tests/testData/inspection/redundantCast/AnyOfTwo/src/AnyOfTwo.java
new file mode 100644
index 0000000..fb922ac
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/AnyOfTwo/src/AnyOfTwo.java
@@ -0,0 +1,11 @@
+package com;
+
+public class Test {
+  static void f(Object s, Object o){}
+  static void f(String s, String o){}
+
+  void foo(){
+    Object o;
+    f((String)o, (String)o);
+  }
+}
diff --git a/java/java-tests/testData/inspection/redundantCast/ArrayAccess/expected.xml b/java/java-tests/testData/inspection/redundantCast/ArrayAccess/expected.xml
new file mode 100644
index 0000000..9ac879d
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/ArrayAccess/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems />
+
diff --git a/java/java-tests/testData/inspection/redundantCast/ArrayAccess/src/ArrayAccess.java b/java/java-tests/testData/inspection/redundantCast/ArrayAccess/src/ArrayAccess.java
new file mode 100644
index 0000000..1cbaa08
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/ArrayAccess/src/ArrayAccess.java
@@ -0,0 +1,24 @@
+import java.util.*;
+/*
+ * 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 A {
+  public static void main(String args) {
+    Map<String, Object> map = new HashMap<String, Object>();
+    map.put("a", new int[1]);
+    ((int[])map.get("a"))[0] += 5;
+  }
+}
diff --git a/java/java-tests/testData/inspection/redundantCast/Assignment1/expected.xml b/java/java-tests/testData/inspection/redundantCast/Assignment1/expected.xml
new file mode 100644
index 0000000..706f86e
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/Assignment1/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Assignment1.java</file>
+    <line>4</line>
+    <description>Casting null to String is redundant</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/redundantCast/Assignment1/src/Assignment1.java b/java/java-tests/testData/inspection/redundantCast/Assignment1/src/Assignment1.java
new file mode 100644
index 0000000..0ff6c4b
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/Assignment1/src/Assignment1.java
@@ -0,0 +1,6 @@
+class Test{
+  static f(){
+    Object o;
+    o = (String)null;
+  }
+}
diff --git a/java/java-tests/testData/inspection/redundantCast/ComparingToNull/expected.xml b/java/java-tests/testData/inspection/redundantCast/ComparingToNull/expected.xml
new file mode 100644
index 0000000..c942f37
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/ComparingToNull/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>4</line>
+    <description>Casting o to String is redundant</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/redundantCast/ComparingToNull/src/Test.java b/java/java-tests/testData/inspection/redundantCast/ComparingToNull/src/Test.java
new file mode 100644
index 0000000..68d9829
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/ComparingToNull/src/Test.java
@@ -0,0 +1,6 @@
+public class Test {
+   public boolean foo() {
+        Object o = null;
+        return (String) o == null;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/DifferentFields/expected.xml b/java/java-tests/testData/inspection/redundantCast/DifferentFields/expected.xml
new file mode 100644
index 0000000..5e93349
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/DifferentFields/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+</problems>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/DifferentFields/src/Test.java b/java/java-tests/testData/inspection/redundantCast/DifferentFields/src/Test.java
new file mode 100644
index 0000000..df25a83
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/DifferentFields/src/Test.java
@@ -0,0 +1,12 @@
+class Y {
+    int size = 4;
+}
+
+class Z extends Y {
+    int size = 5;
+
+    public static void main(String[] args) {
+        Z z = new Z();
+        System.out.println("z.size = " + ((Y)z).size);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/DoubleCast1/expected.xml b/java/java-tests/testData/inspection/redundantCast/DoubleCast1/expected.xml
new file mode 100644
index 0000000..89a59ec
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/DoubleCast1/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>DoubleCast1.java</file>
+    <line>7</line>
+    <description>Casting o to List is redundant</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/redundantCast/DoubleCast1/src/DoubleCast1.java b/java/java-tests/testData/inspection/redundantCast/DoubleCast1/src/DoubleCast1.java
new file mode 100644
index 0000000..f05698d
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/DoubleCast1/src/DoubleCast1.java
@@ -0,0 +1,9 @@
+import java.util.List;
+import java.util.ArrayList;
+
+class Test{
+  static f(){
+    Object o;
+    ArrayList list = (ArrayList)(List)o;
+  }
+}
diff --git a/java/java-tests/testData/inspection/redundantCast/DoubleCast2/expected.xml b/java/java-tests/testData/inspection/redundantCast/DoubleCast2/expected.xml
new file mode 100644
index 0000000..56829e1
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/DoubleCast2/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>DoubleCast2.java</file>
+    <line>7</line>
+    <description>Casting o to List is redundant</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/redundantCast/DoubleCast2/src/DoubleCast2.java b/java/java-tests/testData/inspection/redundantCast/DoubleCast2/src/DoubleCast2.java
new file mode 100644
index 0000000..8bb8b64
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/DoubleCast2/src/DoubleCast2.java
@@ -0,0 +1,9 @@
+import java.util.List;
+import java.util.ArrayList;
+
+class Test{
+  static f(){
+    Object o;
+    ArrayList list = (ArrayList)((List)o);
+  }
+}
diff --git a/java/java-tests/testData/inspection/redundantCast/DoubleCast3/expected.xml b/java/java-tests/testData/inspection/redundantCast/DoubleCast3/expected.xml
new file mode 100644
index 0000000..e8c201c
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/DoubleCast3/expected.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>DoubleCast3.java</file>
+    <line>4</line>
+    <description>Casting '(String) o' to String is redundant</description>
+  </problem>
+  <problem>
+    <file>DoubleCast3.java</file>
+    <line>4</line>
+    <description>Casting 'o' to String is redundant</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/redundantCast/DoubleCast3/src/DoubleCast3.java b/java/java-tests/testData/inspection/redundantCast/DoubleCast3/src/DoubleCast3.java
new file mode 100644
index 0000000..36da9cb
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/DoubleCast3/src/DoubleCast3.java
@@ -0,0 +1,6 @@
+class Test{
+  static f(){
+    Object o;
+    String s = (String) (String) o;
+  }
+}
diff --git a/java/java-tests/testData/inspection/redundantCast/DoubleCast4/expected.xml b/java/java-tests/testData/inspection/redundantCast/DoubleCast4/expected.xml
new file mode 100644
index 0000000..70d5cfe
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/DoubleCast4/expected.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>DoubleCast4.java</file>
+    <line>4</line>
+    <description>Casting '(String) o' to Object is redundant</description>
+  </problem>
+  <problem>
+    <file>DoubleCast4.java</file>
+    <line>4</line>
+    <description>Casting 'o' to String is redundant</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/redundantCast/DoubleCast4/src/DoubleCast4.java b/java/java-tests/testData/inspection/redundantCast/DoubleCast4/src/DoubleCast4.java
new file mode 100644
index 0000000..24b9009
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/DoubleCast4/src/DoubleCast4.java
@@ -0,0 +1,6 @@
+class Test{
+  static f(){
+    Object o;
+    Object o2 = (Object) (String) o;
+  }
+}
diff --git a/java/java-tests/testData/inspection/redundantCast/DoubleCast5/expected.xml b/java/java-tests/testData/inspection/redundantCast/DoubleCast5/expected.xml
new file mode 100644
index 0000000..9ac879d
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/DoubleCast5/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems />
+
diff --git a/java/java-tests/testData/inspection/redundantCast/DoubleCast5/src/DoubleCast5.java b/java/java-tests/testData/inspection/redundantCast/DoubleCast5/src/DoubleCast5.java
new file mode 100644
index 0000000..b0d9703
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/DoubleCast5/src/DoubleCast5.java
@@ -0,0 +1,5 @@
+class Test{
+  static f(double a){
+    double b = (double)(int)a / 100;
+  }
+}
diff --git a/java/java-tests/testData/inspection/redundantCast/FieldAccessOnTheLeftOfAssignment/expected.xml b/java/java-tests/testData/inspection/redundantCast/FieldAccessOnTheLeftOfAssignment/expected.xml
new file mode 100644
index 0000000..2d8028a
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/FieldAccessOnTheLeftOfAssignment/expected.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>A.java</file>
+    <line>6</line>
+    <description>Casting &lt;code&gt;t&lt;/code&gt; to &lt;code&gt;Foo&lt;/code&gt; is redundant</description>
+  </problem>
+
+  <problem>
+    <file>A.java</file>
+    <line>5</line>
+    <description>Casting &lt;code&gt;t&lt;/code&gt; to &lt;code&gt;Foo&lt;/code&gt; is redundant</description>
+  </problem>
+
+</problems>
+
diff --git a/java/java-tests/testData/inspection/redundantCast/FieldAccessOnTheLeftOfAssignment/src/A.java b/java/java-tests/testData/inspection/redundantCast/FieldAccessOnTheLeftOfAssignment/src/A.java
new file mode 100644
index 0000000..238f711
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/FieldAccessOnTheLeftOfAssignment/src/A.java
@@ -0,0 +1,11 @@
+abstract class Foo {
+  protected int field;
+
+  public int f(Bar t){
+    ((Foo)t).field = 0;
+    return ((Foo)t).field;
+  }
+
+}
+
+class Bar extends Foo{}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/IDEADEV15170/expected.xml b/java/java-tests/testData/inspection/redundantCast/IDEADEV15170/expected.xml
new file mode 100644
index 0000000..796a315
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/IDEADEV15170/expected.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems />
diff --git a/java/java-tests/testData/inspection/redundantCast/IDEADEV15170/src/Test.java b/java/java-tests/testData/inspection/redundantCast/IDEADEV15170/src/Test.java
new file mode 100644
index 0000000..5bda42c
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/IDEADEV15170/src/Test.java
@@ -0,0 +1,16 @@
+class A {
+    void foo() throws Exception {}
+}
+
+class B extends A {
+    void foo()  {
+
+    }
+}
+
+class C {
+    {
+        A a = new B();
+        ((B) a).foo();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/IDEADEV25675/expected.xml b/java/java-tests/testData/inspection/redundantCast/IDEADEV25675/expected.xml
new file mode 100644
index 0000000..c440a49
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/IDEADEV25675/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>A.java</file>
+    <line>3</line>
+    <description>Casting 'array' to String[] is redundant</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/redundantCast/IDEADEV25675/src/A.java b/java/java-tests/testData/inspection/redundantCast/IDEADEV25675/src/A.java
new file mode 100644
index 0000000..074a041
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/IDEADEV25675/src/A.java
@@ -0,0 +1,15 @@
+public class Test {
+    public void foo(Object[] array) {
+        ((String[]) array)[0] = " ";
+    }
+
+    public void bar(String[] array) {
+        ((Object[]) array)[0] = new Object();
+    }
+
+    public Object obj;  
+    public static void setObjValueInArray(Test t, Object val) {
+      t.obj = new Object[1];
+      ((Object[])t.obj)[0] = val;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/IDEADEV6818/expected.xml b/java/java-tests/testData/inspection/redundantCast/IDEADEV6818/expected.xml
new file mode 100644
index 0000000..0d178e9
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/IDEADEV6818/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>A.java</file>
+    <line>13</line>
+    <description>Casting prices.get(null) to BidAsk is redundant</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/redundantCast/IDEADEV6818/src/A.java b/java/java-tests/testData/inspection/redundantCast/IDEADEV6818/src/A.java
new file mode 100644
index 0000000..00e6fbd
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/IDEADEV6818/src/A.java
@@ -0,0 +1,15 @@
+class Getter {
+    BidAsk get(String s) {
+        return null;
+    }
+}
+
+class BidAsk {
+    public Object getOpenQuote;
+}
+
+public class A {
+    static Object f(Getter prices) {
+        return System.currentTimeMillis() == 2.0 ?   ((BidAsk) prices.get(null)).getOpenQuote : null;
+    }
+}
diff --git a/java/java-tests/testData/inspection/redundantCast/InConditional/expected.xml b/java/java-tests/testData/inspection/redundantCast/InConditional/expected.xml
new file mode 100644
index 0000000..d93fb1c
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/InConditional/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>A.java</file>
+    <line>3</line>
+    <problem_class severity="WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Redundant type cast</problem_class>
+    <description>Casting &lt;code&gt;null&lt;/code&gt; to &lt;code&gt;String&lt;/code&gt; is redundant</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/redundantCast/InConditional/src/A.java b/java/java-tests/testData/inspection/redundantCast/InConditional/src/A.java
new file mode 100644
index 0000000..24ac60c
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/InConditional/src/A.java
@@ -0,0 +1,5 @@
+class A {
+   {
+     String s = true ? "" : (String) null; //cast is needed
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/InConditionalPreserveResolve/expected.xml b/java/java-tests/testData/inspection/redundantCast/InConditionalPreserveResolve/expected.xml
new file mode 100644
index 0000000..3343eb0
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/InConditionalPreserveResolve/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>A.java</file>
+    <line>4</line>
+    <problem_class severity="WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Redundant type cast</problem_class>
+    <description>Casting &lt;code&gt;param&lt;/code&gt; to &lt;code&gt;Object&lt;/code&gt; is redundant</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/redundantCast/InConditionalPreserveResolve/src/A.java b/java/java-tests/testData/inspection/redundantCast/InConditionalPreserveResolve/src/A.java
new file mode 100644
index 0000000..59d95de
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/InConditionalPreserveResolve/src/A.java
@@ -0,0 +1,10 @@
+class A {
+  void add(Object o, String param) {
+    add(o, o != null ? null : (Object) param);
+    add(o, o == null ? new Object() : (Object) param);
+  }
+
+  void add(Object o, Object param) {
+
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/Inaccessible/expected.xml b/java/java-tests/testData/inspection/redundantCast/Inaccessible/expected.xml
new file mode 100644
index 0000000..580a889
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/Inaccessible/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+</problems>
diff --git a/java/java-tests/testData/inspection/redundantCast/Inaccessible/src/Test.java b/java/java-tests/testData/inspection/redundantCast/Inaccessible/src/Test.java
new file mode 100644
index 0000000..4c36d5b
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/Inaccessible/src/Test.java
@@ -0,0 +1,12 @@
+class Entry {
+  private final Object obj;
+  protected Entry(Directory parent) {
+    obj = ((Entry)parent).obj; //cast is needed because 'obj' is not visible with 'Directory' access class
+  }
+}
+
+class Directory extends Entry {
+  public Directory(Directory parent) {
+    super(parent);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/Initializer1/expected.xml b/java/java-tests/testData/inspection/redundantCast/Initializer1/expected.xml
new file mode 100644
index 0000000..5054e5b
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/Initializer1/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Initializer1.java</file>
+    <line>3</line>
+    <description>Casting null to String is redundant</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/redundantCast/Initializer1/src/Initializer1.java b/java/java-tests/testData/inspection/redundantCast/Initializer1/src/Initializer1.java
new file mode 100644
index 0000000..de9bef7
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/Initializer1/src/Initializer1.java
@@ -0,0 +1,5 @@
+class Test{
+  static f(){
+    Object o = (String)null;
+  }
+}
diff --git a/java/java-tests/testData/inspection/redundantCast/IntToDouble/expected.xml b/java/java-tests/testData/inspection/redundantCast/IntToDouble/expected.xml
new file mode 100644
index 0000000..9ac879d
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/IntToDouble/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems />
+
diff --git a/java/java-tests/testData/inspection/redundantCast/IntToDouble/src/Test.java b/java/java-tests/testData/inspection/redundantCast/IntToDouble/src/Test.java
new file mode 100644
index 0000000..0790268
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/IntToDouble/src/Test.java
@@ -0,0 +1,5 @@
+class A{
+  void f(){
+    double d = (double)1 / 5;
+  }
+}
diff --git a/java/java-tests/testData/inspection/redundantCast/NestedCast/expected.xml b/java/java-tests/testData/inspection/redundantCast/NestedCast/expected.xml
new file mode 100644
index 0000000..ee594a2
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/NestedCast/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>CastTest.java</file>
+    <line>7</line>
+    <problem_class severity="WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Redundant type cast</problem_class>
+    <description>Casting &lt;code&gt;ct1&lt;/code&gt; to &lt;code&gt;CastTest&lt;/code&gt; is redundant</description>
+  </problem>
+</problems>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/NestedCast/src/CastTest.java b/java/java-tests/testData/inspection/redundantCast/NestedCast/src/CastTest.java
new file mode 100644
index 0000000..84bbabb
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/NestedCast/src/CastTest.java
@@ -0,0 +1,9 @@
+class CastTest
+{
+    public static void main (String[] args) throws CloneNotSupportedException
+    {
+        CastTest ct1 = new CastTest ();
+        // The cast of ct1 is obviously redundant (although the cast of the result is necessary)
+        CastTest ct2 = (CastTest) ((CastTest)ct1).clone();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/NestedThings/expected.xml b/java/java-tests/testData/inspection/redundantCast/NestedThings/expected.xml
new file mode 100644
index 0000000..c381c34
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/NestedThings/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>NestedThings.java</file>
+    <line>13</line>
+    <description>Casting "" to String is redundant</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/redundantCast/NestedThings/src/NestedThings.java b/java/java-tests/testData/inspection/redundantCast/NestedThings/src/NestedThings.java
new file mode 100644
index 0000000..ab19af9
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/NestedThings/src/NestedThings.java
@@ -0,0 +1,26 @@
+class XXX {
+    String f() {
+        new Runnable() {
+            public void run() {
+                new Runnable() {
+                    public void run() {
+                        new Runnable() {
+                            public void run() {
+                                new Runnable() {
+                                    public void run() {
+                                        new Runnable() {
+                                            public void run() {
+                                                String s = (String)"";
+                                            }
+                                        };
+                                    }
+                                };
+                            }
+                        };
+                    }
+                };
+            }
+        };
+        return "";
+    }
+}
diff --git a/java/java-tests/testData/inspection/redundantCast/New1/expected.xml b/java/java-tests/testData/inspection/redundantCast/New1/expected.xml
new file mode 100644
index 0000000..a35fe67
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/New1/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>New1.java</file>
+    <line>5</line>
+    <description>Casting null to String is redundant</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/redundantCast/New1/src/New1.java b/java/java-tests/testData/inspection/redundantCast/New1/src/New1.java
new file mode 100644
index 0000000..f1a6625
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/New1/src/New1.java
@@ -0,0 +1,7 @@
+class Test{
+  Test(Object o){}
+
+  static f(){
+    new Test((String)null);
+  }
+}
diff --git a/java/java-tests/testData/inspection/redundantCast/OneOfTwo/expected.xml b/java/java-tests/testData/inspection/redundantCast/OneOfTwo/expected.xml
new file mode 100644
index 0000000..f19096e
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/OneOfTwo/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>OneOfTwo.java</file>
+    <line>8</line>
+    <description>Casting o to String is redundant</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/redundantCast/OneOfTwo/src/OneOfTwo.java b/java/java-tests/testData/inspection/redundantCast/OneOfTwo/src/OneOfTwo.java
new file mode 100644
index 0000000..dff6850
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/OneOfTwo/src/OneOfTwo.java
@@ -0,0 +1,10 @@
+package com;
+
+public class Test {
+  static void f(String s, Object o){}
+
+  void foo(){
+    Object o;
+    f((String)o, (String)o);
+  }
+}
diff --git a/java/java-tests/testData/inspection/redundantCast/PrimitiveInsideSynchronized/expected.xml b/java/java-tests/testData/inspection/redundantCast/PrimitiveInsideSynchronized/expected.xml
new file mode 100644
index 0000000..5e93349
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/PrimitiveInsideSynchronized/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+</problems>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/PrimitiveInsideSynchronized/src/CastTest.java b/java/java-tests/testData/inspection/redundantCast/PrimitiveInsideSynchronized/src/CastTest.java
new file mode 100644
index 0000000..9d607cb
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/PrimitiveInsideSynchronized/src/CastTest.java
@@ -0,0 +1,8 @@
+class CastTest
+{
+    public static void main (String[] args) throws CloneNotSupportedException
+    {
+       int i = 0;
+       synchronized ((Object)i){}
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/SCR11555/expected.xml b/java/java-tests/testData/inspection/redundantCast/SCR11555/expected.xml
new file mode 100644
index 0000000..9ac879d
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/SCR11555/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems />
+
diff --git a/java/java-tests/testData/inspection/redundantCast/SCR11555/src/Test.java b/java/java-tests/testData/inspection/redundantCast/SCR11555/src/Test.java
new file mode 100644
index 0000000..439a70b
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/SCR11555/src/Test.java
@@ -0,0 +1,9 @@
+
+import java.awt.*;
+
+public class Test {
+  void foo(){
+    Component c = null;
+    ((Frame) c).show();
+  }
+}
diff --git a/java/java-tests/testData/inspection/redundantCast/SCR13397/expected.xml b/java/java-tests/testData/inspection/redundantCast/SCR13397/expected.xml
new file mode 100644
index 0000000..ec272ab
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/SCR13397/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems/>
+
diff --git a/java/java-tests/testData/inspection/redundantCast/SCR13397/src/Test.java b/java/java-tests/testData/inspection/redundantCast/SCR13397/src/Test.java
new file mode 100644
index 0000000..772f47c
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/SCR13397/src/Test.java
@@ -0,0 +1,21 @@
+class RedundantCastProblem {
+    public abstract static class Top {
+        public String f(Object o) {
+            return "Top.f(Object)";
+        }
+    }
+ 
+    public static class Sub extends Top {
+        public String f(String s) {
+            return "Middle.f(String)";
+        }
+    }
+ 
+    public static void main(String[] args) {
+        Sub sub = new Sub();
+        String aString = "";
+ 
+        System.out.println(((Top)sub).f(aString));
+        System.out.println(sub.f(aString));
+    }
+}
diff --git a/java/java-tests/testData/inspection/redundantCast/SCR14502/expected.xml b/java/java-tests/testData/inspection/redundantCast/SCR14502/expected.xml
new file mode 100644
index 0000000..ea60f9b
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/SCR14502/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>3</line>
+    <description>Casting new Test() to Test is redundant</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/redundantCast/SCR14502/src/Test.java b/java/java-tests/testData/inspection/redundantCast/SCR14502/src/Test.java
new file mode 100644
index 0000000..844664c
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/SCR14502/src/Test.java
@@ -0,0 +1,5 @@
+public class Test {
+   public void foo(Test t) {
+     foo(((Test) new Test()));
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/SCR14559/expected.xml b/java/java-tests/testData/inspection/redundantCast/SCR14559/expected.xml
new file mode 100644
index 0000000..ec272ab
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/SCR14559/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems/>
+
diff --git a/java/java-tests/testData/inspection/redundantCast/SCR14559/src/Test.java b/java/java-tests/testData/inspection/redundantCast/SCR14559/src/Test.java
new file mode 100644
index 0000000..26eb609
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/SCR14559/src/Test.java
@@ -0,0 +1,15 @@
+public class Test {
+  class Super {
+    Object foo() { return new Object(); }
+  }
+  class Sub extends Super{
+    String foo() { return ""; }
+  }
+  public String get(final Super obj) {
+    if (obj instanceof Sub) {
+      return ((Sub)obj).foo();
+    } else {
+      return "The value is " + obj.foo();
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/SCR15236/expected.xml b/java/java-tests/testData/inspection/redundantCast/SCR15236/expected.xml
new file mode 100644
index 0000000..ab033e5
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/SCR15236/expected.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>3</line>
+    <description>Casting s to String is redundant</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/redundantCast/SCR15236/src/Test.java b/java/java-tests/testData/inspection/redundantCast/SCR15236/src/Test.java
new file mode 100644
index 0000000..dbb5fe9
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/SCR15236/src/Test.java
@@ -0,0 +1,5 @@
+public class Test {
+   public void test(Object s) {
+      Object o = ((String) s);
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/SCR6907/expected.xml b/java/java-tests/testData/inspection/redundantCast/SCR6907/expected.xml
new file mode 100644
index 0000000..ca36c52
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/SCR6907/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>7</line>
+    <description>Casting null to String is redundant</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/redundantCast/SCR6907/src/Test.java b/java/java-tests/testData/inspection/redundantCast/SCR6907/src/Test.java
new file mode 100644
index 0000000..6747030
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/SCR6907/src/Test.java
@@ -0,0 +1,9 @@
+
+public class Test {
+  void foo(String msg){}
+  void foo(Object o){}
+
+  void method(){
+    foo((String)null);
+  }
+}
diff --git a/java/java-tests/testData/inspection/redundantCast/ShortToShort/expected.xml b/java/java-tests/testData/inspection/redundantCast/ShortToShort/expected.xml
new file mode 100644
index 0000000..a30bea0
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/ShortToShort/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>4</line>
+    <description>Casting v to short is redundant</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/redundantCast/ShortToShort/src/Test.java b/java/java-tests/testData/inspection/redundantCast/ShortToShort/src/Test.java
new file mode 100644
index 0000000..ede4aa3
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/ShortToShort/src/Test.java
@@ -0,0 +1,7 @@
+class Test{
+  short foo(){
+    short v = 0;
+    short s = (short)v;
+    return s;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/ShortVsInt/expected.xml b/java/java-tests/testData/inspection/redundantCast/ShortVsInt/expected.xml
new file mode 100644
index 0000000..9ac879d
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/ShortVsInt/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems />
+
diff --git a/java/java-tests/testData/inspection/redundantCast/ShortVsInt/src/ShortVsInt.java b/java/java-tests/testData/inspection/redundantCast/ShortVsInt/src/ShortVsInt.java
new file mode 100644
index 0000000..d0b690d
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/ShortVsInt/src/ShortVsInt.java
@@ -0,0 +1,8 @@
+class A{
+  String toHex(int i) {} 
+  String toHex(short i) {}
+
+  void f(){
+    String result = toHex((short)'i');
+  }
+}
diff --git a/java/java-tests/testData/inspection/redundantCast/Truncation/expected.xml b/java/java-tests/testData/inspection/redundantCast/Truncation/expected.xml
new file mode 100644
index 0000000..9ac879d
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/Truncation/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems />
+
diff --git a/java/java-tests/testData/inspection/redundantCast/Truncation/src/Test.java b/java/java-tests/testData/inspection/redundantCast/Truncation/src/Test.java
new file mode 100644
index 0000000..68707f63
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/Truncation/src/Test.java
@@ -0,0 +1,5 @@
+class A{
+  void f(){
+    double d = (int) 1.5;
+  }
+}
diff --git a/java/java-tests/testData/inspection/redundantCast/VirtualMethod1/expected.xml b/java/java-tests/testData/inspection/redundantCast/VirtualMethod1/expected.xml
new file mode 100644
index 0000000..e2ed2b8
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/VirtualMethod1/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>VirtualMethod1.java</file>
+    <line>12</line>
+    <description>Casting a B is redundant</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/redundantCast/VirtualMethod1/src/VirtualMethod1.java b/java/java-tests/testData/inspection/redundantCast/VirtualMethod1/src/VirtualMethod1.java
new file mode 100644
index 0000000..f6d1741
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/VirtualMethod1/src/VirtualMethod1.java
@@ -0,0 +1,14 @@
+class A{
+  void f(){}
+}
+
+class B extends A{
+  void f(){}
+}
+
+class Test{
+  static foo(){
+    A a;
+    ((B)a).f();
+  }
+}
diff --git a/java/java-tests/testData/inspection/redundantCast/VirtualMethod2/expected.xml b/java/java-tests/testData/inspection/redundantCast/VirtualMethod2/expected.xml
new file mode 100644
index 0000000..9ac879d
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/VirtualMethod2/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems />
+
diff --git a/java/java-tests/testData/inspection/redundantCast/VirtualMethod2/src/VirtualMethod2.java b/java/java-tests/testData/inspection/redundantCast/VirtualMethod2/src/VirtualMethod2.java
new file mode 100644
index 0000000..ab027cf
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/VirtualMethod2/src/VirtualMethod2.java
@@ -0,0 +1,14 @@
+class A{
+  private void f(){}
+}
+
+class B extends A{
+  void f(){}
+}
+
+class Test{
+  static foo(){
+    A a;
+    ((B)a).f();
+  }
+}
diff --git a/java/java-tests/testData/inspection/redundantCast/VirtualMethod3/expected.xml b/java/java-tests/testData/inspection/redundantCast/VirtualMethod3/expected.xml
new file mode 100644
index 0000000..bbf660d
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/VirtualMethod3/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>VirtualMethod3.java</file>
+    <line>4</line>
+    <description>Casting o to String is redundant</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/redundantCast/VirtualMethod3/src/VirtualMethod3.java b/java/java-tests/testData/inspection/redundantCast/VirtualMethod3/src/VirtualMethod3.java
new file mode 100644
index 0000000..9c13b2e
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/VirtualMethod3/src/VirtualMethod3.java
@@ -0,0 +1,6 @@
+class Test{
+  static foo(){
+    Object o;
+    boolean res = ((String)o).equals(null);
+  }
+}
diff --git a/java/java-tests/testData/inspection/redundantCast/generics/BoxingInRef/expected.xml b/java/java-tests/testData/inspection/redundantCast/generics/BoxingInRef/expected.xml
new file mode 100644
index 0000000..580a889
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/generics/BoxingInRef/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+</problems>
diff --git a/java/java-tests/testData/inspection/redundantCast/generics/BoxingInRef/src/Test.java b/java/java-tests/testData/inspection/redundantCast/generics/BoxingInRef/src/Test.java
new file mode 100644
index 0000000..dd4dd2d
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/generics/BoxingInRef/src/Test.java
@@ -0,0 +1,7 @@
+//This is a test for JDK_15 LanguageLevel
+public class Test {
+    void foo () {
+        int x = 4;
+        ((Integer) x).toString();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/generics/CastToUnboundWildcard/expected.xml b/java/java-tests/testData/inspection/redundantCast/generics/CastToUnboundWildcard/expected.xml
new file mode 100644
index 0000000..4704d91
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/generics/CastToUnboundWildcard/expected.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems/>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/generics/CastToUnboundWildcard/src/Test.java b/java/java-tests/testData/inspection/redundantCast/generics/CastToUnboundWildcard/src/Test.java
new file mode 100644
index 0000000..bf7e46e
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/generics/CastToUnboundWildcard/src/Test.java
@@ -0,0 +1,9 @@
+import java.util.*;
+import java.util.Map;
+
+class Test {
+  {
+    Map<Number, String> map1 = null;
+    Map<Integer, String> map2 = (Map<Integer, String>) (Map<?, ?>) map1;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/generics/EnumConstant/expected.xml b/java/java-tests/testData/inspection/redundantCast/generics/EnumConstant/expected.xml
new file mode 100644
index 0000000..c8c865b
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/generics/EnumConstant/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>3</line>
+    <problem_class severity="WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Redundant type cast</problem_class>
+    <description>Casting &lt;code&gt;&quot;&quot;&lt;/code&gt; to &lt;code&gt;String&lt;/code&gt; is redundant</description>
+  </problem>
+</problems>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/generics/EnumConstant/src/Test.java b/java/java-tests/testData/inspection/redundantCast/generics/EnumConstant/src/Test.java
new file mode 100644
index 0000000..1dcbdcc
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/generics/EnumConstant/src/Test.java
@@ -0,0 +1,7 @@
+
+enum Test {
+  A((String) "");
+
+  Test(String s) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/generics/IDEA22899/expected.xml b/java/java-tests/testData/inspection/redundantCast/generics/IDEA22899/expected.xml
new file mode 100644
index 0000000..4704d91
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/generics/IDEA22899/expected.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems/>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/generics/IDEA22899/src/WrapperToPrimitiveCast.java b/java/java-tests/testData/inspection/redundantCast/generics/IDEA22899/src/WrapperToPrimitiveCast.java
new file mode 100644
index 0000000..ba9b21c
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/generics/IDEA22899/src/WrapperToPrimitiveCast.java
@@ -0,0 +1,15 @@
+public class RedundantIntCast
+{
+    public static void main(String[] args) {
+        Integer i = 8;
+        method((int)i, 1);  // int cast is marked as redundant
+    }
+
+    static void method(Object o, Object o1) {
+        System.out.println("this method works on objects");
+    }
+
+    static void method(int i, int i1) {
+        System.out.println("this method works on ints");
+    }
+}
diff --git a/java/java-tests/testData/inspection/redundantCast/generics/Ignore/expected.xml b/java/java-tests/testData/inspection/redundantCast/generics/Ignore/expected.xml
new file mode 100644
index 0000000..e6aeaad
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/generics/Ignore/expected.xml
@@ -0,0 +1,14 @@
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>11</line>
+    <problem_class severity="WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Redundant type cast</problem_class>
+    <description>Casting &lt;code&gt;this&lt;/code&gt; to &lt;code&gt;CastPreventsNPEDetection&lt;/code&gt; is redundant</description>
+  </problem>
+  <problem>
+    <file>Suspicious.java</file>
+    <line>9</line>
+    <problem_class severity="WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Redundant type cast</problem_class>
+    <description>Casting &lt;code&gt;str&lt;/code&gt; to &lt;code&gt;String&lt;/code&gt; is redundant</description>
+  </problem>
+</problems>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/generics/Ignore/scr/Suspicious.java b/java/java-tests/testData/inspection/redundantCast/generics/Ignore/scr/Suspicious.java
new file mode 100644
index 0000000..45719b0
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/generics/Ignore/scr/Suspicious.java
@@ -0,0 +1,12 @@
+import java.util.Map;
+
+public class Suspicious {
+    Map<String, String> map;
+
+    void f(Object s){
+        String str = (String) s;
+        map.remove((String)s);
+        map.remove((String)str);
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/generics/Ignore/scr/Test.java b/java/java-tests/testData/inspection/redundantCast/generics/Ignore/scr/Test.java
new file mode 100644
index 0000000..f712d33
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/generics/Ignore/scr/Test.java
@@ -0,0 +1,21 @@
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+class CastPreventsNPEDetection {
+    @Nullable Object getParent() {
+        return null;
+    }
+
+    void f() {
+        ((ChildCastImpl)this).getParent().toString();
+        ((CastPreventsNPEDetection)this).getParent().toString();
+    }
+}
+
+class ChildCastImpl extends CastPreventsNPEDetection {
+    @NotNull
+    @Override
+    Object getParent() {
+        return super.getParent();    //To change body of overridden methods use File | Settings | File Templates.
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/generics/Inference1/expected.xml b/java/java-tests/testData/inspection/redundantCast/generics/Inference1/expected.xml
new file mode 100644
index 0000000..580a889
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/generics/Inference1/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+</problems>
diff --git a/java/java-tests/testData/inspection/redundantCast/generics/Inference1/src/Test.java b/java/java-tests/testData/inspection/redundantCast/generics/Inference1/src/Test.java
new file mode 100644
index 0000000..7e3836a6
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/generics/Inference1/src/Test.java
@@ -0,0 +1,20 @@
+import java.util.Map;
+class Test2 {
+    public String s;
+  public void maina(Object key, Map parameters) {
+      s = ((String[]) parameters.get(key))[0];
+  }
+}
+
+public class Test {
+    static class SomeClass {
+        public <T> T getX() {
+            return null;
+        }
+    }
+
+    public static void main(String[] args) {
+        //cast is needed for 'String' to be infered!
+        System.getProperty((String)new SomeClass().getX());
+    }
+}
diff --git a/java/java-tests/testData/inspection/redundantCast/generics/Inference2/expected.xml b/java/java-tests/testData/inspection/redundantCast/generics/Inference2/expected.xml
new file mode 100644
index 0000000..5e93349
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/generics/Inference2/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+</problems>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/generics/Inference2/src/Test.java b/java/java-tests/testData/inspection/redundantCast/generics/Inference2/src/Test.java
new file mode 100644
index 0000000..c121c05
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/generics/Inference2/src/Test.java
@@ -0,0 +1,32 @@
+import java.util.HashSet;
+import java.util.Set;
+
+final class Pair<A, B> {
+    public final A first;
+    public final B second;
+
+    public Pair(A first, B second) {
+        this.first = first;
+        this.second = second;
+    }
+
+    public final A getFirst() {
+        return first;
+    }
+
+    public final B getSecond() {
+        return second;
+    }
+
+    public static <A, B> Pair<A, B> create(A first, B second) {
+        return new Pair<A, B>(first, second);
+    }
+
+}
+
+class Test {
+    final Set<String> strings = new HashSet<String>();
+    final Pair<Set<String>, Set<String>> x = Boolean.TRUE.booleanValue()
+            ? Pair.create(strings, strings)
+            : Pair.create(((Set<String>)  null), (Set<String>) null); //these casts are not redundant
+}
diff --git a/java/java-tests/testData/inspection/redundantCast/generics/Inference3/expected.xml b/java/java-tests/testData/inspection/redundantCast/generics/Inference3/expected.xml
new file mode 100644
index 0000000..380236b
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/generics/Inference3/expected.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+<problem>
+  <file>Test.java</file>
+  <line>31</line>
+  <description>Casting 'null' to 'Set&lt;String&gt;' is redundant</description>
+</problem>
+<problem>
+  <file>Test.java</file>
+  <line>31</line>
+  <description>Casting 'null' to 'Set&lt;String&gt;' is redundant</description>
+</problem>
+</problems>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/generics/Inference3/src/Test.java b/java/java-tests/testData/inspection/redundantCast/generics/Inference3/src/Test.java
new file mode 100644
index 0000000..64cf6d2
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/generics/Inference3/src/Test.java
@@ -0,0 +1,32 @@
+import java.util.HashSet;
+import java.util.Set;
+
+final class Pair<A, B> {
+    public final A first;
+    public final B second;
+
+    public Pair(A first, B second) {
+        this.first = first;
+        this.second = second;
+    }
+
+    public final A getFirst() {
+        return first;
+    }
+
+    public final B getSecond() {
+        return second;
+    }
+
+    public static <A> Pair<A, A> create(A first, A second) {
+        return new Pair<A, A>(first, second);
+    }
+
+}
+
+class Test {
+    final Set<String> strings = new HashSet<String>();
+    final Pair<Set<String>, Set<String>> x = Boolean.TRUE.booleanValue()
+            ? Pair.create(strings, strings)
+            : Pair.create(((Set<String>)  null), (Set<String>) null); //both casts are marked, but one is required for correct inference
+}
diff --git a/java/java-tests/testData/inspection/redundantCast/generics/InferenceFromCast/expected.xml b/java/java-tests/testData/inspection/redundantCast/generics/InferenceFromCast/expected.xml
new file mode 100644
index 0000000..daab2af
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/generics/InferenceFromCast/expected.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>5</line>
+    <description>Casting &lt;code&gt;getComponent(&quot;bar&quot;)&lt;/code&gt; to &lt;code&gt;Bar&lt;/code&gt; is redundant</description>
+  </problem>
+  <problem>
+    <file>Test.java</file>
+    <line>6</line>
+    <description>Casting &lt;code&gt;getComponent(&quot;bar&quot;)&lt;/code&gt; to &lt;code&gt;Bar&lt;/code&gt; is redundant</description>
+  </problem>
+</problems>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/generics/InferenceFromCast/src/Test.java b/java/java-tests/testData/inspection/redundantCast/generics/InferenceFromCast/src/Test.java
new file mode 100644
index 0000000..8552725
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/generics/InferenceFromCast/src/Test.java
@@ -0,0 +1,18 @@
+class Test {
+
+    {
+        f((Bar) getComponent("bar"));
+        f1((Bar) getComponent("bar"));
+        Bar b = (Bar) getComponent("bar");
+    }
+
+    private <J extends Bar> void f(J j) {}
+
+    private <J> void f1(J j) {}
+
+    private <T> T getComponent(String name) {
+        return null;
+    }
+
+    static class Bar {}
+}
diff --git a/java/java-tests/testData/inspection/redundantCast/generics/NullInVarargsParameter/expected.xml b/java/java-tests/testData/inspection/redundantCast/generics/NullInVarargsParameter/expected.xml
new file mode 100644
index 0000000..48906bd
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/generics/NullInVarargsParameter/expected.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>8</line>
+    <description>Casting null to Class[] is redundant</description>
+  </problem>
+  <problem>
+    <file>Test.java</file>
+    <line>9</line>
+    <description>Casting null to Class[] is redundant</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/redundantCast/generics/NullInVarargsParameter/src/Test.java b/java/java-tests/testData/inspection/redundantCast/generics/NullInVarargsParameter/src/Test.java
new file mode 100644
index 0000000..c17d2647
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/generics/NullInVarargsParameter/src/Test.java
@@ -0,0 +1,11 @@
+class Test {
+  void f(Class... classes) {
+  }
+
+  void g() {
+    f(((Class[])null));
+    f(((Class)null));
+    f(((Class)null),
+      ((Class)null));
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/generics/RawCast/expected.xml b/java/java-tests/testData/inspection/redundantCast/generics/RawCast/expected.xml
new file mode 100644
index 0000000..4704d91
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/generics/RawCast/expected.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems/>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/generics/RawCast/src/Test.java b/java/java-tests/testData/inspection/redundantCast/generics/RawCast/src/Test.java
new file mode 100644
index 0000000..c38a855
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/generics/RawCast/src/Test.java
@@ -0,0 +1,21 @@
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+public class Main {
+    public static void main(String[] args) throws Exception {
+        Properties properties = new Properties();
+
+        Map<String, String> map = (Map) properties;
+        System.out.println(map);
+    }
+}
+
+interface I {}
+class C implements I {}
+class U {
+  void foo() {
+    List<C> listOfC = null;
+    List<I> listOfI = (List) listOfC;
+  }
+}
diff --git a/java/java-tests/testData/inspection/redundantCast/generics/RawCast1/expected.xml b/java/java-tests/testData/inspection/redundantCast/generics/RawCast1/expected.xml
new file mode 100644
index 0000000..4704d91
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/generics/RawCast1/expected.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems/>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/generics/RawCast1/src/Test.java b/java/java-tests/testData/inspection/redundantCast/generics/RawCast1/src/Test.java
new file mode 100644
index 0000000..6f302de
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/generics/RawCast1/src/Test.java
@@ -0,0 +1,10 @@
+class Test {
+  {
+    class TypedQuery<T> {}
+    class TemporalDataDTO<K> {}
+    class FOLDER_ID {}
+
+    TypedQuery<TemporalDataDTO> h = null;
+    TypedQuery<TemporalDataDTO<FOLDER_ID>> typedQuery = (TypedQuery<TemporalDataDTO<FOLDER_ID>>) (TypedQuery<?>)h;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/generics/RawCastsToAvoidIncompatibility/expected.xml b/java/java-tests/testData/inspection/redundantCast/generics/RawCastsToAvoidIncompatibility/expected.xml
new file mode 100644
index 0000000..c63c925
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/generics/RawCastsToAvoidIncompatibility/expected.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems/>
diff --git a/java/java-tests/testData/inspection/redundantCast/generics/RawCastsToAvoidIncompatibility/src/CastCast.java b/java/java-tests/testData/inspection/redundantCast/generics/RawCastsToAvoidIncompatibility/src/CastCast.java
new file mode 100644
index 0000000..ef81def
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/generics/RawCastsToAvoidIncompatibility/src/CastCast.java
@@ -0,0 +1,13 @@
+import java.util.List;
+
+
+class RedundantCasts {
+    List<TranslatingCompiler> myTranslators;
+    void t() {
+        b((List<Compiler>) (List)myTranslators);
+    }
+
+    void b(List<Compiler> l){}
+}
+interface Compiler{}
+interface TranslatingCompiler extends Compiler{}
diff --git a/java/java-tests/testData/inspection/redundantCast/generics/RawCastsToAvoidIncompatibility/src/ReturnValue.java b/java/java-tests/testData/inspection/redundantCast/generics/RawCastsToAvoidIncompatibility/src/ReturnValue.java
new file mode 100644
index 0000000..f30870b
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/generics/RawCastsToAvoidIncompatibility/src/ReturnValue.java
@@ -0,0 +1,16 @@
+interface GenericValue<T> {
+    T getValue();
+}
+
+interface GenericAttValue<T> extends GenericValue<T> {
+}
+
+interface Property {
+    GenericAttValue<Object> getValue();
+}
+
+class RedCast {
+    public GenericValue<String> getDataSourceName(Property property) {
+        return  (GenericValue)  property.getValue();
+    }
+}
diff --git a/java/java-tests/testData/inspection/redundantCast/generics/TypeParameterAccessChecksJava7/expected.xml b/java/java-tests/testData/inspection/redundantCast/generics/TypeParameterAccessChecksJava7/expected.xml
new file mode 100644
index 0000000..4704d91
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/generics/TypeParameterAccessChecksJava7/expected.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems/>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/generics/TypeParameterAccessChecksJava7/src/TypeParameterAccessChecksJava7.java b/java/java-tests/testData/inspection/redundantCast/generics/TypeParameterAccessChecksJava7/src/TypeParameterAccessChecksJava7.java
new file mode 100644
index 0000000..82e2763
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/generics/TypeParameterAccessChecksJava7/src/TypeParameterAccessChecksJava7.java
@@ -0,0 +1,7 @@
+public abstract class Foo<T extends Foo<T>> {
+  private int field;
+
+  public int bar(T t){
+    return ((Foo<T>)t).field;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/generics/WrapperToPrimitiveCast/expected.xml b/java/java-tests/testData/inspection/redundantCast/generics/WrapperToPrimitiveCast/expected.xml
new file mode 100644
index 0000000..7574cc7
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/generics/WrapperToPrimitiveCast/expected.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>WrapperToPrimitiveCast.java</file>
+    <line>8</line>
+    <problem_class severity="WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Redundant type cast</problem_class>
+    <description>Casting &lt;code&gt;J&lt;/code&gt; to &lt;code&gt;int&lt;/code&gt; is redundant</description>
+  </problem>
+
+  <problem>
+    <file>WrapperToPrimitiveCast.java</file>
+    <line>9</line>
+    <problem_class severity="WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Redundant type cast</problem_class>
+    <description>Casting &lt;code&gt;I&lt;/code&gt; to &lt;code&gt;int&lt;/code&gt; is redundant</description>
+  </problem>
+
+  <problem>
+    <file>WrapperToPrimitiveCast.java</file>
+    <line>12</line>
+    <problem_class severity="WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Redundant type cast</problem_class>
+    <description>Casting &lt;code&gt;p&lt;/code&gt; to &lt;code&gt;Integer&lt;/code&gt; is redundant</description>
+  </problem>
+
+  <problem>
+    <file>WrapperToPrimitiveCast.java</file>
+    <line>15</line>
+    <problem_class severity="WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Redundant type cast</problem_class>
+    <description>Casting &lt;code&gt;p&lt;/code&gt; to &lt;code&gt;Integer&lt;/code&gt; is redundant</description>
+  </problem>
+
+
+  <problem>
+    <file>WrapperToPrimitiveCast.java</file>
+    <line>24</line>
+    <problem_class severity="WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Redundant type cast</problem_class>
+    <description>Casting &lt;code&gt;lnumber&lt;/code&gt; to &lt;code&gt;long&lt;/code&gt; is redundant</description>
+  </problem>
+
+
+  <problem>
+    <file>WrapperToPrimitiveCast.java</file>
+    <line>24</line>
+    <problem_class severity="WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Redundant type cast</problem_class>
+    <description>Casting &lt;code&gt;lnumber&lt;/code&gt; to &lt;code&gt;long&lt;/code&gt; is redundant</description>
+  </problem>
+
+</problems>
+
diff --git a/java/java-tests/testData/inspection/redundantCast/generics/WrapperToPrimitiveCast/src/WrapperToPrimitiveCast.java b/java/java-tests/testData/inspection/redundantCast/generics/WrapperToPrimitiveCast/src/WrapperToPrimitiveCast.java
new file mode 100644
index 0000000..ba3e773
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/generics/WrapperToPrimitiveCast/src/WrapperToPrimitiveCast.java
@@ -0,0 +1,32 @@
+public class Main {
+    public static void main(String[] args) {
+        Integer J = 4;
+        Integer I = new Integer(4);
+
+        System.out.println(I == J);
+        System.out.println((int) I == J);
+        int j = (int)J;
+        System.out.println((int) I == j);
+
+        int p = 555555;
+        Integer W = (Integer) p;
+        System.out.println((Integer) p == W);
+        int w = W;
+        System.out.println((Integer) p == w);
+
+        Integer test = 10;
+        double d = ((double)test/100);
+
+        Double number = Double.valueOf(3);
+        long integerPart = (long) (double) number;
+
+        Long lnumber = Long.valueOf(3);
+        long integerPartL = (long) (long) lnumber;
+    }
+}
+
+class Foo<T> {
+  T foo() {
+    return (T)(Object)1;
+  }
+}
diff --git a/java/java-tests/testData/inspection/redundantCast/lambda/ExpectedSupertype/expected.xml b/java/java-tests/testData/inspection/redundantCast/lambda/ExpectedSupertype/expected.xml
new file mode 100644
index 0000000..5e93349
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/lambda/ExpectedSupertype/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+</problems>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/lambda/ExpectedSupertype/src/Test.java b/java/java-tests/testData/inspection/redundantCast/lambda/ExpectedSupertype/src/Test.java
new file mode 100644
index 0000000..97832e4
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/lambda/ExpectedSupertype/src/Test.java
@@ -0,0 +1,31 @@
+/*
+ * 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.
+ */
+public class Test {
+  interface I {
+  }
+
+  interface Bar extends I {
+    int compare(String o1, String o2);
+  }
+
+  {
+    I bar2 = (Bar) (o1, o2) -> 0;
+    g((Bar) (o1, o2) -> 0);
+    ((Bar) (o1, o2) -> 0).getClass();
+  }
+
+  void g(I i){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/lambda/LambdaContext/expected.xml b/java/java-tests/testData/inspection/redundantCast/lambda/LambdaContext/expected.xml
new file mode 100644
index 0000000..5373cdc
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/lambda/LambdaContext/expected.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>7</line>
+    <description>Casting &lt;code&gt;s -&gt; s.endsWith(&quot;.java&quot;)&lt;/code&gt; to &lt;code&gt;I&lt;/code&gt; is redundant</description>
+  </problem>
+</problems>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/lambda/LambdaContext/src/Test.java b/java/java-tests/testData/inspection/redundantCast/lambda/LambdaContext/src/Test.java
new file mode 100644
index 0000000..510d184
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/lambda/LambdaContext/src/Test.java
@@ -0,0 +1,10 @@
+class Test {
+  interface I {
+    boolean foo(String s);
+  }
+  {
+    ((I)s -> s.endsWith(".java")).getClass();
+    I i = (I)s -> s.endsWith(".java");
+    
+  }
+}
diff --git a/java/java-tests/testData/inspection/redundantCast/lambda/MethodRefContext/expected.xml b/java/java-tests/testData/inspection/redundantCast/lambda/MethodRefContext/expected.xml
new file mode 100644
index 0000000..4704d91
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/lambda/MethodRefContext/expected.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems/>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/lambda/MethodRefContext/src/Test.java b/java/java-tests/testData/inspection/redundantCast/lambda/MethodRefContext/src/Test.java
new file mode 100644
index 0000000..b82f2ca
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/lambda/MethodRefContext/src/Test.java
@@ -0,0 +1,13 @@
+class Test {
+  {
+      ((Bar) Test::length)._("");
+  }
+
+  public static Integer length(String s) {
+    return s.length();
+  }
+
+  interface Bar {
+    Integer _(String s);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantSuppress/defaultFile/expected.xml b/java/java-tests/testData/inspection/redundantSuppress/defaultFile/expected.xml
new file mode 100644
index 0000000..6fd7f7a
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantSuppress/defaultFile/expected.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+
+  <problem>
+    <file>X.java</file>
+    <line>4</line>
+    <problem_class>Redundant suppression</problem_class>
+    <description>Redundant suppression</description>
+    <entry_point TYPE="method" FQNAME="x.S void f()" />
+  </problem>
+
+  <problem>
+    <file>X.java</file>
+    <line>42</line>
+    <problem_class>Redundant suppression</problem_class>
+    <description>Redundant suppression</description>
+    <entry_point TYPE="method" FQNAME="x.S void j()" />
+  </problem>
+
+  <problem>
+    <file>X.java</file>
+    <line>53</line>
+    <problem_class>Redundant suppression</problem_class>
+    <description>Redundant suppression</description>
+     <entry_point TYPE="field" FQNAME="x.S$3ss s" />
+  </problem>
+
+
+  <problem>
+    <file>X.java</file>
+    <line>19</line>
+    <problem_class>Redundant suppression</problem_class>
+    <description>Redundant suppression</description>
+    <entry_point TYPE="method" FQNAME="x.S void h()" />
+  </problem>
+
+
+  <problem>
+    <file>X.java</file>
+    <line>30</line>
+    <problem_class>Redundant suppression</problem_class>
+    <description>Redundant suppression</description>
+    <entry_point TYPE="class" FQNAME="x.S$1ss" />
+  </problem>
+
+
+  <problem>
+    <file>X.java</file>
+    <line>11</line>
+    <problem_class>Redundant suppression</problem_class>
+    <description>Redundant suppression</description>
+    <entry_point TYPE="method" FQNAME="x.S void g()" />
+  </problem>
+
+  <problem>
+    <file>X.java</file>
+    <line>67</line>
+    <problem_class>Redundant suppression</problem_class>
+    <description>Redundant suppression</description>
+    <entry_point TYPE="method" FQNAME="x.S void foo1()" />
+  </problem>
+
+</problems>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantSuppress/defaultFile/src/x/X.java b/java/java-tests/testData/inspection/redundantSuppress/defaultFile/src/x/X.java
new file mode 100644
index 0000000..95e1a63
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantSuppress/defaultFile/src/x/X.java
@@ -0,0 +1,69 @@
+package x;
+
+class S {
+    public void f() {
+        //noinspection HardCodedStringLiteral
+        String s=null;
+        //noinspection HardCodedStringLiteral
+        String s2="sssssss";
+    }
+    @SuppressWarnings({"HardCodedStringLiteral"})
+    void g() {
+        String s = null;
+    }
+    @SuppressWarnings({"HardCodedStringLiteral"})
+    void g2() {
+        String s = "sssssss";
+    }
+
+    void h() {
+        @SuppressWarnings({"HardCodedStringLiteral"})
+        String s = null;
+    }
+    void h2() {
+        @SuppressWarnings({"HardCodedStringLiteral"})
+        String s = "sssssss";
+    }
+
+    void i() {
+        @SuppressWarnings({"HardCodedStringLiteral"})
+        class ss {
+          String s = null;
+        }
+    }
+    void i2() {
+        @SuppressWarnings({"HardCodedStringLiteral"})
+        class ss {
+          String s = "sssssss";
+        }
+    }
+
+    /** @noinspection HardCodedStringLiteral */
+    void j() {
+        String s = null;
+    }
+    /** @noinspection HardCodedStringLiteral */
+    void j2() {
+        String s = "sssssss";
+    }
+
+    void k() {
+        class ss {
+          /** @noinspection HardCodedStringLiteral */
+          String s = null;
+        }
+    }
+    void k2() {
+        class ss {
+          /** @noinspection HardCodedStringLiteral */
+          String s = "sssssss";
+        }
+    }
+
+    @SuppressWarnings({"EmptyMethod"})
+    void foo() {}
+
+    @SuppressWarnings({"EmptyMethod"})
+    void foo1() {String f;}
+
+}
diff --git a/java/java-tests/testData/inspection/redundantSuppress/suppressAll/expected.xml b/java/java-tests/testData/inspection/redundantSuppress/suppressAll/expected.xml
new file mode 100644
index 0000000..5e93349
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantSuppress/suppressAll/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+</problems>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantSuppress/suppressAll/src/x/X.java b/java/java-tests/testData/inspection/redundantSuppress/suppressAll/src/x/X.java
new file mode 100644
index 0000000..7645e60
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantSuppress/suppressAll/src/x/X.java
@@ -0,0 +1,8 @@
+package x;
+
+public class S {
+  @SuppressWarnings("ALL")
+  public static void main(String[] args) {
+    System.out.println(args[0]);
+  }
+}
diff --git a/java/java-tests/testData/inspection/redundantThrow/ImplicitSuper/expected.xml b/java/java-tests/testData/inspection/redundantThrow/ImplicitSuper/expected.xml
new file mode 100644
index 0000000..dc55723
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantThrow/ImplicitSuper/expected.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Copyright 2000-2010 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.
+  -->
+<problems>
+
+</problems>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantThrow/ImplicitSuper/src/A.java b/java/java-tests/testData/inspection/redundantThrow/ImplicitSuper/src/A.java
new file mode 100644
index 0000000..9b6c8c8
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantThrow/ImplicitSuper/src/A.java
@@ -0,0 +1,20 @@
+/*
+ * 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.
+ */
+public class A {
+    public A() throws Exception {
+        throw new Exception("Oops");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantThrow/ImplicitSuper/src/B.java b/java/java-tests/testData/inspection/redundantThrow/ImplicitSuper/src/B.java
new file mode 100644
index 0000000..65af754
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantThrow/ImplicitSuper/src/B.java
@@ -0,0 +1,20 @@
+/*
+ * 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.
+ */
+public class B extends A {
+    public B() throws Exception {
+        // Implicit call to super()
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantThrow/Inherited/expected.xml b/java/java-tests/testData/inspection/redundantThrow/Inherited/expected.xml
new file mode 100644
index 0000000..d704d58
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantThrow/Inherited/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/redundantThrow/Inherited/src/Test.java b/java/java-tests/testData/inspection/redundantThrow/Inherited/src/Test.java
new file mode 100644
index 0000000..1ee0343
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantThrow/Inherited/src/Test.java
@@ -0,0 +1,24 @@
+/*
+ * 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.
+ */
+public class Test {
+  void foo() throws java.lang.Exception {
+    throw new java.io.IOException();
+  }
+
+  void bar() throws java.io.IOException {
+    throw new java.lang.Exception();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantThrow/Remote/expected.xml b/java/java-tests/testData/inspection/redundantThrow/Remote/expected.xml
new file mode 100644
index 0000000..7efddea
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantThrow/Remote/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>E.java</file>
+    <line>15</line>
+    <description>The declared exception &lt;code&gt;RemoteException&lt;/code&gt; is never thrown in method implementations.</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/redundantThrow/Remote/src/E.java b/java/java-tests/testData/inspection/redundantThrow/Remote/src/E.java
new file mode 100644
index 0000000..6527eb2
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantThrow/Remote/src/E.java
@@ -0,0 +1,24 @@
+import java.rmi.*;
+
+interface A extends Remote {
+  void a() throws RemoteException;
+}
+
+
+class D implements A {
+  public void a() {
+  }
+}
+
+
+interface NotRemotable {
+  void a() throws RemoteException;
+}
+
+
+class DNotRemotable implements NotRemotable {
+  public void a() {
+  }
+}
+
+
diff --git a/java/java-tests/testData/inspection/redundantThrow/SCR14543/expected.xml b/java/java-tests/testData/inspection/redundantThrow/SCR14543/expected.xml
new file mode 100644
index 0000000..d704d58
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantThrow/SCR14543/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/redundantThrow/SCR14543/src/E.java b/java/java-tests/testData/inspection/redundantThrow/SCR14543/src/E.java
new file mode 100644
index 0000000..39908e0
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantThrow/SCR14543/src/E.java
@@ -0,0 +1,14 @@
+class D extends E {
+ 
+  protected void doSomething() throws Exception {
+    throw new Exception();
+  }
+ 
+}
+ 
+ 
+public abstract class E {
+ 
+  protected abstract void doSomething() throws Exception;
+ 
+}
diff --git a/java/java-tests/testData/inspection/redundantThrow/SCR6858/expected.xml b/java/java-tests/testData/inspection/redundantThrow/SCR6858/expected.xml
new file mode 100644
index 0000000..67e5336
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantThrow/SCR6858/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Foo.java</file>
+    <line>4</line>
+    <description>IOException</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/redundantThrow/SCR6858/src/Foo.java b/java/java-tests/testData/inspection/redundantThrow/SCR6858/src/Foo.java
new file mode 100644
index 0000000..8799987
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantThrow/SCR6858/src/Foo.java
@@ -0,0 +1,6 @@
+import java.io.*;
+
+public class Foo {
+   public Foo() throws IOException {
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantThrow/SCR6858ByRange/expected.xml b/java/java-tests/testData/inspection/redundantThrow/SCR6858ByRange/expected.xml
new file mode 100644
index 0000000..fe3a18c
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantThrow/SCR6858ByRange/expected.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Foo.java</file>
+    <line>4</line>
+    <description>IOException</description>
+    <entry_point TYPE="method" FQNAME="Foo Foo()" />
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/redundantThrow/SCR6858ByRange/src/Foo.java b/java/java-tests/testData/inspection/redundantThrow/SCR6858ByRange/src/Foo.java
new file mode 100644
index 0000000..8799987
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantThrow/SCR6858ByRange/src/Foo.java
@@ -0,0 +1,6 @@
+import java.io.*;
+
+public class Foo {
+   public Foo() throws IOException {
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantThrow/SCR8322/expected.xml b/java/java-tests/testData/inspection/redundantThrow/SCR8322/expected.xml
new file mode 100644
index 0000000..9fcb617
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantThrow/SCR8322/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>AnInterface.java</file>
+    <line>6</line>
+    <description>IOException</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/redundantThrow/SCR8322/src/aPackage/AClass.java b/java/java-tests/testData/inspection/redundantThrow/SCR8322/src/aPackage/AClass.java
new file mode 100644
index 0000000..aab3242
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantThrow/SCR8322/src/aPackage/AClass.java
@@ -0,0 +1,13 @@
+package aPackage;
+
+import java.io.IOException;
+
+public class AClass implements AnInterface{
+	int aField_1;
+	int aField_2;
+
+	public void methodA(int myInt) throws IOException {
+		//some code here
+	  aField_1 = 1;
+	}
+  }
diff --git a/java/java-tests/testData/inspection/redundantThrow/SCR8322/src/aPackage/AClassTwo.java b/java/java-tests/testData/inspection/redundantThrow/SCR8322/src/aPackage/AClassTwo.java
new file mode 100644
index 0000000..cd05bdd
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantThrow/SCR8322/src/aPackage/AClassTwo.java
@@ -0,0 +1,10 @@
+package aPackage;
+
+import java.io.IOException;
+
+public class AClassTwo implements AnInterface {
+
+	public void methodA(int myInt) throws IOException{
+	  //some code here
+	}
+}
diff --git a/java/java-tests/testData/inspection/redundantThrow/SCR8322/src/aPackage/AnInterface.java b/java/java-tests/testData/inspection/redundantThrow/SCR8322/src/aPackage/AnInterface.java
new file mode 100644
index 0000000..5fb8825
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantThrow/SCR8322/src/aPackage/AnInterface.java
@@ -0,0 +1,7 @@
+package aPackage;
+
+import java.io.IOException;
+
+public interface AnInterface {
+	void methodA(int myInt) throws IOException;
+}
diff --git a/java/java-tests/testData/inspection/redundantThrow/SelfCall/expected.xml b/java/java-tests/testData/inspection/redundantThrow/SelfCall/expected.xml
new file mode 100644
index 0000000..67e5336
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantThrow/SelfCall/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Foo.java</file>
+    <line>4</line>
+    <description>IOException</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/redundantThrow/SelfCall/src/Foo.java b/java/java-tests/testData/inspection/redundantThrow/SelfCall/src/Foo.java
new file mode 100644
index 0000000..3602d5d
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantThrow/SelfCall/src/Foo.java
@@ -0,0 +1,9 @@
+import java.io.*;
+
+public class Foo {
+  public void foo() throws IOException {
+    if (4 > 3) {
+      foo();
+    }
+  }
+}
diff --git a/java/java-tests/testData/inspection/redundantThrow/entryPoint/expected.xml b/java/java-tests/testData/inspection/redundantThrow/entryPoint/expected.xml
new file mode 100644
index 0000000..e8aa67c
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantThrow/entryPoint/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems></problems>
+
diff --git a/java/java-tests/testData/inspection/redundantThrow/entryPoint/src/Test.java b/java/java-tests/testData/inspection/redundantThrow/entryPoint/src/Test.java
new file mode 100644
index 0000000..5cb2b8f
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantThrow/entryPoint/src/Test.java
@@ -0,0 +1,3 @@
+public class Test implements java.io.Serializable {
+  public void readObject(java.io.ObjectInputStream in) throws Exception {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantTypeArgs/ReturnPrimitiveTypes.java b/java/java-tests/testData/inspection/redundantTypeArgs/ReturnPrimitiveTypes.java
new file mode 100644
index 0000000..77c3b52
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantTypeArgs/ReturnPrimitiveTypes.java
@@ -0,0 +1,12 @@
+import java.util.Map;
+class Test {
+  Map someMap;
+
+  public int getGetBar() {
+    return this.<Integer>getFoo("numberOfConfigurations");
+  }
+
+  protected <T> T getFoo(String key) {
+    return (T)someMap.get(key);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/sameParameterValue/entryPoint/expected.xml b/java/java-tests/testData/inspection/sameParameterValue/entryPoint/expected.xml
new file mode 100644
index 0000000..e8aa67c
--- /dev/null
+++ b/java/java-tests/testData/inspection/sameParameterValue/entryPoint/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems></problems>
+
diff --git a/java/java-tests/testData/inspection/sameParameterValue/entryPoint/src/Test.java b/java/java-tests/testData/inspection/sameParameterValue/entryPoint/src/Test.java
new file mode 100644
index 0000000..0eaa560
--- /dev/null
+++ b/java/java-tests/testData/inspection/sameParameterValue/entryPoint/src/Test.java
@@ -0,0 +1,10 @@
+public class Test {
+
+  public Test() {
+    Test.main(null);
+  }
+
+  public static void main(String[] args){}
+
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/sameParameterValue/simpleVararg/expected.xml b/java/java-tests/testData/inspection/sameParameterValue/simpleVararg/expected.xml
new file mode 100644
index 0000000..bfa2f7c
--- /dev/null
+++ b/java/java-tests/testData/inspection/sameParameterValue/simpleVararg/expected.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>3</line>
+    <problem_class>Actual method parameter is the same constant</problem_class>
+    <description>Actual value of parameter</description>
+  </problem>
+</problems>
+
+
diff --git a/java/java-tests/testData/inspection/sameParameterValue/simpleVararg/src/Test.java b/java/java-tests/testData/inspection/sameParameterValue/simpleVararg/src/Test.java
new file mode 100644
index 0000000..74058d8
--- /dev/null
+++ b/java/java-tests/testData/inspection/sameParameterValue/simpleVararg/src/Test.java
@@ -0,0 +1,13 @@
+public class Test {
+
+   private void foo(String... args) {}
+
+   public void bar() {
+     foo("foo");
+     foo("foo");
+   }
+
+   public static void main(String[] args){
+     new Test().bar();
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/sameParameterValue/varargs/expected.xml b/java/java-tests/testData/inspection/sameParameterValue/varargs/expected.xml
new file mode 100644
index 0000000..e8aa67c
--- /dev/null
+++ b/java/java-tests/testData/inspection/sameParameterValue/varargs/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems></problems>
+
diff --git a/java/java-tests/testData/inspection/sameParameterValue/varargs/src/Test.java b/java/java-tests/testData/inspection/sameParameterValue/varargs/src/Test.java
new file mode 100644
index 0000000..39c7cd4
--- /dev/null
+++ b/java/java-tests/testData/inspection/sameParameterValue/varargs/src/Test.java
@@ -0,0 +1,13 @@
+public class Test {
+
+   private void foo(String... args) {}
+
+   public void bar() {
+     foo("foo", "bar");
+     foo("bla");
+   }
+
+   public static void main(String[] args){
+     new Test().bar();
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/sameParameterValue/withoutDeadCode/expected.xml b/java/java-tests/testData/inspection/sameParameterValue/withoutDeadCode/expected.xml
new file mode 100644
index 0000000..63b2e00
--- /dev/null
+++ b/java/java-tests/testData/inspection/sameParameterValue/withoutDeadCode/expected.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>7</line>
+    <problem_class>Actual method parameter is the same constant</problem_class>
+    <description>Actual value of parameter</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/sameParameterValue/withoutDeadCode/src/Test.java b/java/java-tests/testData/inspection/sameParameterValue/withoutDeadCode/src/Test.java
new file mode 100644
index 0000000..0eaa560
--- /dev/null
+++ b/java/java-tests/testData/inspection/sameParameterValue/withoutDeadCode/src/Test.java
@@ -0,0 +1,10 @@
+public class Test {
+
+  public Test() {
+    Test.main(null);
+  }
+
+  public static void main(String[] args){}
+
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/sillyAssignment/multiple/expected.xml b/java/java-tests/testData/inspection/sillyAssignment/multiple/expected.xml
new file mode 100644
index 0000000..dea9f25
--- /dev/null
+++ b/java/java-tests/testData/inspection/sillyAssignment/multiple/expected.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+
+  <problem>
+    <file>Test.java</file>
+    <line>3</line>
+    <description>Variable 'args' is assigned to itself</description>
+  </problem>
+
+  <problem>
+    <file>Test.java</file>
+    <line>4</line>
+    <description>Variable 'j' is initialized with self assignment</description>
+  </problem>
+
+  <problem>
+    <file>Test.java</file>
+    <line>5</line>
+    <description>Variable 'args' is assigned to itself</description>
+  </problem>
+
+  <problem>
+    <file>Test.java</file>
+    <line>8</line>
+    <description>Variable 'z' is initialized with self assignment</description>
+  </problem>
+
+  <problem>
+    <file>Test.java</file>
+    <line>13</line>
+    <description>Variable 'y' is assigned to itself</description>
+  </problem>
+
+  <problem>
+    <file>Test.java</file>
+    <line>17</line>
+    <description>Variable 'h' is assigned to itself</description>
+  </problem>
+
+  <problem>
+    <file>Test.java</file>
+    <line>18</line>
+    <description>Variable 'h' is assigned to itself</description>
+  </problem>
+
+</problems>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/sillyAssignment/multiple/src/Test.java b/java/java-tests/testData/inspection/sillyAssignment/multiple/src/Test.java
new file mode 100644
index 0000000..0b3feb5
--- /dev/null
+++ b/java/java-tests/testData/inspection/sillyAssignment/multiple/src/Test.java
@@ -0,0 +1,24 @@
+public class Test extends Super {
+    public static void main(String[] args) {
+        args = args;
+        int j = ((j) = 1);
+        args = (args) = null;
+    }
+
+    private final int z = this.z;
+    public static int y = ABCV.y;
+    public static final int x = ABCV.x;
+
+    static void foo() {
+        y = Test.y;
+    }
+
+    void call() {
+      h = super.h;
+      h = (h) = 1;
+    }
+}
+class Super {
+    int h;
+}
+
diff --git a/java/java-tests/testData/inspection/sillyAssignment/suppressed/expected.xml b/java/java-tests/testData/inspection/sillyAssignment/suppressed/expected.xml
new file mode 100644
index 0000000..4704d91
--- /dev/null
+++ b/java/java-tests/testData/inspection/sillyAssignment/suppressed/expected.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems/>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/sillyAssignment/suppressed/src/Test.java b/java/java-tests/testData/inspection/sillyAssignment/suppressed/src/Test.java
new file mode 100644
index 0000000..41f4a0b
--- /dev/null
+++ b/java/java-tests/testData/inspection/sillyAssignment/suppressed/src/Test.java
@@ -0,0 +1,11 @@
+public class Test {
+    public static void main(String[] args) {
+        //noinspection SillyAssignment
+        args = args;
+        int i = 0;
+        if (i == 0) {
+
+        } else //noinspection SillyAssignment
+          i == i;
+    }
+}
diff --git a/java/java-tests/testData/inspection/suspiciousCalls/IgnoreConvertible.java b/java/java-tests/testData/inspection/suspiciousCalls/IgnoreConvertible.java
new file mode 100644
index 0000000..1433b2b
--- /dev/null
+++ b/java/java-tests/testData/inspection/suspiciousCalls/IgnoreConvertible.java
@@ -0,0 +1,16 @@
+import java.util.Map;
+import java.util.List;
+import java.util.ArrayList;
+
+class Clazz {
+  void f(Map<Integer,String> map) {
+    Number n = new Integer(3);
+    if (map.containsKey(n)) {
+      return;
+    }
+  }
+
+  void foo(List<? extends Number> c) {
+    c.contains(<warning descr="'List<? extends Number>' may not contain objects of type 'String'">""</warning>);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/suspiciousCalls/UseDfa.java b/java/java-tests/testData/inspection/suspiciousCalls/UseDfa.java
new file mode 100644
index 0000000..7ba8c3d
--- /dev/null
+++ b/java/java-tests/testData/inspection/suspiciousCalls/UseDfa.java
@@ -0,0 +1,11 @@
+import java.lang.Integer;
+import java.util.Map;
+
+class Clazz {
+  void f(Map<Integer, String> map, Object o) {
+    if (o instanceof Integer && map.containsKey(o)) {
+      System.out.println();
+    }
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/suspiciousCalls/Wildcard.java b/java/java-tests/testData/inspection/suspiciousCalls/Wildcard.java
new file mode 100644
index 0000000..179810f
--- /dev/null
+++ b/java/java-tests/testData/inspection/suspiciousCalls/Wildcard.java
@@ -0,0 +1,12 @@
+import java.util.List;
+import java.util.ArrayList;
+
+class Clazz {
+    void foo(List<? extends Number> l) {
+      boolean b = l.contains(<warning descr="'List<? extends Number>' may not contain objects of type 'String'">""</warning>);    }
+    void bar() {
+      List<? extends Class<?>> l = new ArrayList<Class<?>>();
+      Class<?> o = String.class;
+      int i = l.indexOf(o);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/suspiciousNameCombination/assignment/expected.xml b/java/java-tests/testData/inspection/suspiciousNameCombination/assignment/expected.xml
new file mode 100644
index 0000000..8356ea5
--- /dev/null
+++ b/java/java-tests/testData/inspection/suspiciousNameCombination/assignment/expected.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Assignment.java</file>
+    <line>4</line>
+    <description>'x' should probably not be assigned to 'y'</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/suspiciousNameCombination/assignment/src/Assignment.java b/java/java-tests/testData/inspection/suspiciousNameCombination/assignment/src/Assignment.java
new file mode 100644
index 0000000..8170c00
--- /dev/null
+++ b/java/java-tests/testData/inspection/suspiciousNameCombination/assignment/src/Assignment.java
@@ -0,0 +1,6 @@
+public class Assignment {
+  public void test() {
+    int x = 0, y = 0;
+    y = x;
+  }
+}
diff --git a/java/java-tests/testData/inspection/suspiciousNameCombination/initializer/expected.xml b/java/java-tests/testData/inspection/suspiciousNameCombination/initializer/expected.xml
new file mode 100644
index 0000000..ea850de
--- /dev/null
+++ b/java/java-tests/testData/inspection/suspiciousNameCombination/initializer/expected.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Initializer.java</file>
+    <line>4</line>
+    <description>'x' should probably not be assigned to 'y'</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/suspiciousNameCombination/initializer/src/Initializer.java b/java/java-tests/testData/inspection/suspiciousNameCombination/initializer/src/Initializer.java
new file mode 100644
index 0000000..8e1922e
--- /dev/null
+++ b/java/java-tests/testData/inspection/suspiciousNameCombination/initializer/src/Initializer.java
@@ -0,0 +1,6 @@
+public class Initializer {
+  public void test() {
+    int x = 0;
+    int y = x;
+  }
+}
diff --git a/java/java-tests/testData/inspection/suspiciousNameCombination/parameter/expected.xml b/java/java-tests/testData/inspection/suspiciousNameCombination/parameter/expected.xml
new file mode 100644
index 0000000..7b9a45a
--- /dev/null
+++ b/java/java-tests/testData/inspection/suspiciousNameCombination/parameter/expected.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Parameter.java</file>
+    <line>4</line>
+    <description>'startX' should probably not be passed as parameter 'y'</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/suspiciousNameCombination/parameter/src/Parameter.java b/java/java-tests/testData/inspection/suspiciousNameCombination/parameter/src/Parameter.java
new file mode 100644
index 0000000..32cac5e
--- /dev/null
+++ b/java/java-tests/testData/inspection/suspiciousNameCombination/parameter/src/Parameter.java
@@ -0,0 +1,9 @@
+public class Parameter {
+  public void test() {
+    int startX = 0;
+    method(startX);
+  }
+
+  private void method(int y) {
+  }
+}
diff --git a/java/java-tests/testData/inspection/suspiciousNameCombination/returnValue/expected.xml b/java/java-tests/testData/inspection/suspiciousNameCombination/returnValue/expected.xml
new file mode 100644
index 0000000..d7d2e74
--- /dev/null
+++ b/java/java-tests/testData/inspection/suspiciousNameCombination/returnValue/expected.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>ReturnValue.java</file>
+    <line>4</line>
+    <description>'y' should probably not be returned from method 'getX'</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/suspiciousNameCombination/returnValue/src/ReturnValue.java b/java/java-tests/testData/inspection/suspiciousNameCombination/returnValue/src/ReturnValue.java
new file mode 100644
index 0000000..663d192
--- /dev/null
+++ b/java/java-tests/testData/inspection/suspiciousNameCombination/returnValue/src/ReturnValue.java
@@ -0,0 +1,6 @@
+public class ReturnValue {
+  public int getX() {
+    int y=0;
+    return y;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/unusedMethodParameter/appMainUnusedParams/expected.xml b/java/java-tests/testData/inspection/unusedMethodParameter/appMainUnusedParams/expected.xml
new file mode 100644
index 0000000..e8aa67c
--- /dev/null
+++ b/java/java-tests/testData/inspection/unusedMethodParameter/appMainUnusedParams/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems></problems>
+
diff --git a/java/java-tests/testData/inspection/unusedMethodParameter/appMainUnusedParams/src/Test.java b/java/java-tests/testData/inspection/unusedMethodParameter/appMainUnusedParams/src/Test.java
new file mode 100644
index 0000000..838c6ba
--- /dev/null
+++ b/java/java-tests/testData/inspection/unusedMethodParameter/appMainUnusedParams/src/Test.java
@@ -0,0 +1,4 @@
+public class Test {
+  public static void main(String[] args) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/unusedMethodParameter/entryPointUnusedParameter/expected.xml b/java/java-tests/testData/inspection/unusedMethodParameter/entryPointUnusedParameter/expected.xml
new file mode 100644
index 0000000..e8aa67c
--- /dev/null
+++ b/java/java-tests/testData/inspection/unusedMethodParameter/entryPointUnusedParameter/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems></problems>
+
diff --git a/java/java-tests/testData/inspection/unusedMethodParameter/entryPointUnusedParameter/src/Test.java b/java/java-tests/testData/inspection/unusedMethodParameter/entryPointUnusedParameter/src/Test.java
new file mode 100644
index 0000000..5ad4a18
--- /dev/null
+++ b/java/java-tests/testData/inspection/unusedMethodParameter/entryPointUnusedParameter/src/Test.java
@@ -0,0 +1,5 @@
+public class Test {
+  public static void main(String[] args){
+  
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/unusedMethodParameter/fieldInAnonymousClass/expected.xml b/java/java-tests/testData/inspection/unusedMethodParameter/fieldInAnonymousClass/expected.xml
new file mode 100644
index 0000000..e8aa67c
--- /dev/null
+++ b/java/java-tests/testData/inspection/unusedMethodParameter/fieldInAnonymousClass/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems></problems>
+
diff --git a/java/java-tests/testData/inspection/unusedMethodParameter/fieldInAnonymousClass/src/Test.java b/java/java-tests/testData/inspection/unusedMethodParameter/fieldInAnonymousClass/src/Test.java
new file mode 100644
index 0000000..385dc11
--- /dev/null
+++ b/java/java-tests/testData/inspection/unusedMethodParameter/fieldInAnonymousClass/src/Test.java
@@ -0,0 +1,9 @@
+public class Test {
+  public Runnable foo(final int i) {
+    return new Runnable() {
+      private int myInt = i;      
+      public void run(){
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/unusedMethodParameter/unusedParameter/expected.xml b/java/java-tests/testData/inspection/unusedMethodParameter/unusedParameter/expected.xml
new file mode 100644
index 0000000..c996b17
--- /dev/null
+++ b/java/java-tests/testData/inspection/unusedMethodParameter/unusedParameter/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>2</line>
+    <description>b</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/unusedMethodParameter/unusedParameter/src/Test.java b/java/java-tests/testData/inspection/unusedMethodParameter/unusedParameter/src/Test.java
new file mode 100644
index 0000000..f0276d9
--- /dev/null
+++ b/java/java-tests/testData/inspection/unusedMethodParameter/unusedParameter/src/Test.java
@@ -0,0 +1,5 @@
+public class Test {
+  public void foo(boolean b) {
+
+  }
+}
diff --git a/java/java-tests/testData/inspection/unusedMethodParameter/usedForReading/expected.xml b/java/java-tests/testData/inspection/unusedMethodParameter/usedForReading/expected.xml
new file mode 100644
index 0000000..e8aa67c
--- /dev/null
+++ b/java/java-tests/testData/inspection/unusedMethodParameter/usedForReading/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems></problems>
+
diff --git a/java/java-tests/testData/inspection/unusedMethodParameter/usedForReading/src/Test.java b/java/java-tests/testData/inspection/unusedMethodParameter/usedForReading/src/Test.java
new file mode 100644
index 0000000..5b60ed5
--- /dev/null
+++ b/java/java-tests/testData/inspection/unusedMethodParameter/usedForReading/src/Test.java
@@ -0,0 +1,5 @@
+public class Test {
+  public void foo(boolean b) {
+    boolean f = b;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/unusedReturnValue/hierarchy/expected.xml b/java/java-tests/testData/inspection/unusedReturnValue/hierarchy/expected.xml
new file mode 100644
index 0000000..97671a8
--- /dev/null
+++ b/java/java-tests/testData/inspection/unusedReturnValue/hierarchy/expected.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>I.java</file>
+    <line>2</line>
+    <description>Return value of the method is never used</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/unusedReturnValue/hierarchy/src/B.java b/java/java-tests/testData/inspection/unusedReturnValue/hierarchy/src/B.java
new file mode 100644
index 0000000..d0f279e
--- /dev/null
+++ b/java/java-tests/testData/inspection/unusedReturnValue/hierarchy/src/B.java
@@ -0,0 +1,10 @@
+class B implements I {
+  public boolean isUnused(){
+    return false;
+  }
+
+  public static void main(String[] args) {
+    I i = new B();
+    i.isUnused();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/unusedReturnValue/hierarchy/src/I.java b/java/java-tests/testData/inspection/unusedReturnValue/hierarchy/src/I.java
new file mode 100644
index 0000000..aca1361
--- /dev/null
+++ b/java/java-tests/testData/inspection/unusedReturnValue/hierarchy/src/I.java
@@ -0,0 +1,3 @@
+interface I {
+  boolean isUnused();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/unusedReturnValue/native/expected.xml b/java/java-tests/testData/inspection/unusedReturnValue/native/expected.xml
new file mode 100644
index 0000000..1e9ac4b
--- /dev/null
+++ b/java/java-tests/testData/inspection/unusedReturnValue/native/expected.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>2</line>
+    <description>Return value of the method is never used</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/unusedReturnValue/native/src/Test.java b/java/java-tests/testData/inspection/unusedReturnValue/native/src/Test.java
new file mode 100644
index 0000000..3cae2c1
--- /dev/null
+++ b/java/java-tests/testData/inspection/unusedReturnValue/native/src/Test.java
@@ -0,0 +1,7 @@
+class Test {
+  private static native boolean isUnused();
+
+  public static void main(String[] args) {
+    Test.isUnused();
+  }
+}
diff --git a/java/java-tests/testData/inspection/unusedReturnValue/nonLiteral/expected.xml b/java/java-tests/testData/inspection/unusedReturnValue/nonLiteral/expected.xml
new file mode 100644
index 0000000..c922ef8
--- /dev/null
+++ b/java/java-tests/testData/inspection/unusedReturnValue/nonLiteral/expected.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>6</line>
+    <description>Return value of the method is never used</description>
+  </problem>
+</problems>
diff --git a/java/java-tests/testData/inspection/unusedReturnValue/nonLiteral/src/Test.java b/java/java-tests/testData/inspection/unusedReturnValue/nonLiteral/src/Test.java
new file mode 100644
index 0000000..e87ace5
--- /dev/null
+++ b/java/java-tests/testData/inspection/unusedReturnValue/nonLiteral/src/Test.java
@@ -0,0 +1,13 @@
+class Test {
+  boolean foo() {
+    return false;
+  }
+
+  boolean isUnused() {
+    return !foo();
+  }
+
+  public static void main(String[] args) {
+    new Test().isUnused();
+  }
+}
diff --git a/java/java-tests/testData/inspection/unusedReturnValue/simpleSetter/expected.xml b/java/java-tests/testData/inspection/unusedReturnValue/simpleSetter/expected.xml
new file mode 100644
index 0000000..4704d91
--- /dev/null
+++ b/java/java-tests/testData/inspection/unusedReturnValue/simpleSetter/expected.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems/>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/unusedReturnValue/simpleSetter/src/Test.java b/java/java-tests/testData/inspection/unusedReturnValue/simpleSetter/src/Test.java
new file mode 100644
index 0000000..8df38c1
--- /dev/null
+++ b/java/java-tests/testData/inspection/unusedReturnValue/simpleSetter/src/Test.java
@@ -0,0 +1,13 @@
+class Test {
+  private String myStr;
+
+  public Test setStr(String str) {
+    myStr = str;
+    return this;
+  }
+
+  public static void main(String[] args) {
+    final Test test = new Test();
+    test.setStr("");
+  }
+}
diff --git a/java/java-tests/testData/inspection/usage1.5/constructor/expected.xml b/java/java-tests/testData/inspection/usage1.5/constructor/expected.xml
new file mode 100644
index 0000000..fbdcff5
--- /dev/null
+++ b/java/java-tests/testData/inspection/usage1.5/constructor/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Test.java</file>
+    <line>3</line>
+    <description>Usage of API documented as @since 1.5</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/usage1.5/constructor/src/Test.java b/java/java-tests/testData/inspection/usage1.5/constructor/src/Test.java
new file mode 100644
index 0000000..b55fcb2
--- /dev/null
+++ b/java/java-tests/testData/inspection/usage1.5/constructor/src/Test.java
@@ -0,0 +1,5 @@
+public class Test {
+  void foo() {
+    throw new IllegalArgumentException ("", new RuntimeException());
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/usage1.5/ignored/expected.xml b/java/java-tests/testData/inspection/usage1.5/ignored/expected.xml
new file mode 100644
index 0000000..8625635
--- /dev/null
+++ b/java/java-tests/testData/inspection/usage1.5/ignored/expected.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems></problems>
diff --git a/java/java-tests/testData/inspection/usage1.5/ignored/src/Test.java b/java/java-tests/testData/inspection/usage1.5/ignored/src/Test.java
new file mode 100644
index 0000000..a309b1c
--- /dev/null
+++ b/java/java-tests/testData/inspection/usage1.5/ignored/src/Test.java
@@ -0,0 +1,7 @@
+import java.awt.geom.GeneralPath;
+public class Test {
+  void foo() {
+    GeneralPath path = new GeneralPath();
+    path.moveTo(0,0);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/visibility/IDEADEV10312/expected.xml b/java/java-tests/testData/inspection/visibility/IDEADEV10312/expected.xml
new file mode 100644
index 0000000..79e1a0f
--- /dev/null
+++ b/java/java-tests/testData/inspection/visibility/IDEADEV10312/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>  
+</problems>
+
diff --git a/java/java-tests/testData/inspection/visibility/IDEADEV10312/ext_src/weaker/b/B.java b/java/java-tests/testData/inspection/visibility/IDEADEV10312/ext_src/weaker/b/B.java
new file mode 100644
index 0000000..0fb13ab
--- /dev/null
+++ b/java/java-tests/testData/inspection/visibility/IDEADEV10312/ext_src/weaker/b/B.java
@@ -0,0 +1,10 @@
+package weaker.b;
+
+import weaker.a.A;
+
+public class B {
+
+    public static void main(String[] args) {
+        A.f();
+    }
+}
diff --git a/java/java-tests/testData/inspection/visibility/IDEADEV10312/src/weaker/a/A.java b/java/java-tests/testData/inspection/visibility/IDEADEV10312/src/weaker/a/A.java
new file mode 100644
index 0000000..141d1b1
--- /dev/null
+++ b/java/java-tests/testData/inspection/visibility/IDEADEV10312/src/weaker/a/A.java
@@ -0,0 +1,11 @@
+package weaker.a;
+
+public class A {
+
+    public static void f() {
+    }
+
+    public static void main(String[] args) {
+        f();
+    }
+}
diff --git a/java/java-tests/testData/inspection/visibility/IDEADEV10883/expected.xml b/java/java-tests/testData/inspection/visibility/IDEADEV10883/expected.xml
new file mode 100644
index 0000000..79e1a0f
--- /dev/null
+++ b/java/java-tests/testData/inspection/visibility/IDEADEV10883/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>  
+</problems>
+
diff --git a/java/java-tests/testData/inspection/visibility/IDEADEV10883/src/Bar.java b/java/java-tests/testData/inspection/visibility/IDEADEV10883/src/Bar.java
new file mode 100644
index 0000000..9e9ce07
--- /dev/null
+++ b/java/java-tests/testData/inspection/visibility/IDEADEV10883/src/Bar.java
@@ -0,0 +1,12 @@
+public class Bar {
+  public static boolean execute(boolean isFoo) {
+    if (isFoo) {
+      return new Foo().isTransparentsOnly();
+    }
+    return false;
+  }
+
+  boolean isTransparentsOnly() {
+    return false;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/visibility/IDEADEV10883/src/Foo.java b/java/java-tests/testData/inspection/visibility/IDEADEV10883/src/Foo.java
new file mode 100644
index 0000000..1364e29
--- /dev/null
+++ b/java/java-tests/testData/inspection/visibility/IDEADEV10883/src/Foo.java
@@ -0,0 +1,3 @@
+public class Foo extends Bar {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/visibility/SCR11792/expected.xml b/java/java-tests/testData/inspection/visibility/SCR11792/expected.xml
new file mode 100644
index 0000000..d704d58
--- /dev/null
+++ b/java/java-tests/testData/inspection/visibility/SCR11792/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/visibility/SCR11792/src/Foo.java b/java/java-tests/testData/inspection/visibility/SCR11792/src/Foo.java
new file mode 100644
index 0000000..6b57ff9
--- /dev/null
+++ b/java/java-tests/testData/inspection/visibility/SCR11792/src/Foo.java
@@ -0,0 +1,10 @@
+class Foo {
+    private void method() {
+        final class MyClass{}
+        Object o = new MyClass();
+    }
+
+    private void foo() {
+        method();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/visibility/SCR5008/expected.xml b/java/java-tests/testData/inspection/visibility/SCR5008/expected.xml
new file mode 100644
index 0000000..5c8bc53
--- /dev/null
+++ b/java/java-tests/testData/inspection/visibility/SCR5008/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>SuperClass.java</file>
+    <line>3</line>
+    <description>package local</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/visibility/SCR5008/src/marti/p1/SubClass.java b/java/java-tests/testData/inspection/visibility/SCR5008/src/marti/p1/SubClass.java
new file mode 100644
index 0000000..bfd92b2
--- /dev/null
+++ b/java/java-tests/testData/inspection/visibility/SCR5008/src/marti/p1/SubClass.java
@@ -0,0 +1,6 @@
+package marti.p1;
+class SubClass extends SuperClass{
+    public SubClass() {
+        super();
+    }
+}
diff --git a/java/java-tests/testData/inspection/visibility/SCR5008/src/marti/p1/SuperClass.java b/java/java-tests/testData/inspection/visibility/SCR5008/src/marti/p1/SuperClass.java
new file mode 100644
index 0000000..328175d
--- /dev/null
+++ b/java/java-tests/testData/inspection/visibility/SCR5008/src/marti/p1/SuperClass.java
@@ -0,0 +1,5 @@
+package marti.p1;
+class SuperClass {
+    public SuperClass() {
+    }
+}
diff --git a/java/java-tests/testData/inspection/visibility/SCR6856/expected.xml b/java/java-tests/testData/inspection/visibility/SCR6856/expected.xml
new file mode 100644
index 0000000..ba27863
--- /dev/null
+++ b/java/java-tests/testData/inspection/visibility/SCR6856/expected.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>A.java</file>
+    <line>3</line>
+    <description>private</description>
+  </problem>
+  <problem>
+    <file>A.java</file>
+    <line>4</line>
+    <description>private</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/visibility/SCR6856/src/A.java b/java/java-tests/testData/inspection/visibility/SCR6856/src/A.java
new file mode 100644
index 0000000..19b2575
--- /dev/null
+++ b/java/java-tests/testData/inspection/visibility/SCR6856/src/A.java
@@ -0,0 +1,13 @@
+class A {
+    A(){}    
+    static class B {
+        int k=0;
+        {
+            System.out.println(k);
+        }
+    }
+    public static void main(String[] args) {
+        new B();
+    }
+}
+
diff --git a/java/java-tests/testData/inspection/visibility/annotationUsages/expected.xml b/java/java-tests/testData/inspection/visibility/annotationUsages/expected.xml
new file mode 100644
index 0000000..79e1a0f
--- /dev/null
+++ b/java/java-tests/testData/inspection/visibility/annotationUsages/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>  
+</problems>
+
diff --git a/java/java-tests/testData/inspection/visibility/annotationUsages/src/Observer.java b/java/java-tests/testData/inspection/visibility/annotationUsages/src/Observer.java
new file mode 100644
index 0000000..aec2cdb
--- /dev/null
+++ b/java/java-tests/testData/inspection/visibility/annotationUsages/src/Observer.java
@@ -0,0 +1,3 @@
+public @interface Observer {
+    String value();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/visibility/annotationUsages/src/Test.java b/java/java-tests/testData/inspection/visibility/annotationUsages/src/Test.java
new file mode 100644
index 0000000..23b4baa
--- /dev/null
+++ b/java/java-tests/testData/inspection/visibility/annotationUsages/src/Test.java
@@ -0,0 +1,6 @@
+public class Test {
+   public static final String CONST = "const";
+   public static void main(String[] args){
+    System.out.println(CONST);
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/visibility/annotationUsages/src/Usage.java b/java/java-tests/testData/inspection/visibility/annotationUsages/src/Usage.java
new file mode 100644
index 0000000..0d933ee
--- /dev/null
+++ b/java/java-tests/testData/inspection/visibility/annotationUsages/src/Usage.java
@@ -0,0 +1,8 @@
+@Observer(Test.CONST)
+class Usage {
+  @Observer(Test.CONST)
+  int f;
+
+  @Observer(Test.CONST)
+  void foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/visibility/defaultConstructor/expected.xml b/java/java-tests/testData/inspection/visibility/defaultConstructor/expected.xml
new file mode 100644
index 0000000..79e1a0f
--- /dev/null
+++ b/java/java-tests/testData/inspection/visibility/defaultConstructor/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>  
+</problems>
+
diff --git a/java/java-tests/testData/inspection/visibility/defaultConstructor/ext_src/res.xml b/java/java-tests/testData/inspection/visibility/defaultConstructor/ext_src/res.xml
new file mode 100644
index 0000000..38009bb
--- /dev/null
+++ b/java/java-tests/testData/inspection/visibility/defaultConstructor/ext_src/res.xml
@@ -0,0 +1 @@
+<root>Test</root>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/visibility/defaultConstructor/src/Test.java b/java/java-tests/testData/inspection/visibility/defaultConstructor/src/Test.java
new file mode 100644
index 0000000..bc3a2a5
--- /dev/null
+++ b/java/java-tests/testData/inspection/visibility/defaultConstructor/src/Test.java
@@ -0,0 +1,6 @@
+public class Test implements java.lang.Clonable {
+   public Test(){}
+   public Object clone() {
+     return new Test();
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/visibility/enumConstantsVisibility/expected.xml b/java/java-tests/testData/inspection/visibility/enumConstantsVisibility/expected.xml
new file mode 100644
index 0000000..79e1a0f
--- /dev/null
+++ b/java/java-tests/testData/inspection/visibility/enumConstantsVisibility/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>  
+</problems>
+
diff --git a/java/java-tests/testData/inspection/visibility/enumConstantsVisibility/src/Foo.java b/java/java-tests/testData/inspection/visibility/enumConstantsVisibility/src/Foo.java
new file mode 100644
index 0000000..6403da47
--- /dev/null
+++ b/java/java-tests/testData/inspection/visibility/enumConstantsVisibility/src/Foo.java
@@ -0,0 +1,7 @@
+public enum Foo {
+  BAR, UNUSED;
+  
+  public static void main(String[] args){
+    System.out.println(BAR);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/visibility/implicitConstructor/expected.xml b/java/java-tests/testData/inspection/visibility/implicitConstructor/expected.xml
new file mode 100644
index 0000000..79e1a0f
--- /dev/null
+++ b/java/java-tests/testData/inspection/visibility/implicitConstructor/expected.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>  
+</problems>
+
diff --git a/java/java-tests/testData/inspection/visibility/implicitConstructor/ext_src/res.xml b/java/java-tests/testData/inspection/visibility/implicitConstructor/ext_src/res.xml
new file mode 100644
index 0000000..38009bb
--- /dev/null
+++ b/java/java-tests/testData/inspection/visibility/implicitConstructor/ext_src/res.xml
@@ -0,0 +1 @@
+<root>Test</root>
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/visibility/implicitConstructor/src/Test.java b/java/java-tests/testData/inspection/visibility/implicitConstructor/src/Test.java
new file mode 100644
index 0000000..9f4261a
--- /dev/null
+++ b/java/java-tests/testData/inspection/visibility/implicitConstructor/src/Test.java
@@ -0,0 +1,5 @@
+public class Test implements java.lang.Clonable {
+   public Object clone() {
+     return new Test();
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/visibility/innerConstructor/expected.xml b/java/java-tests/testData/inspection/visibility/innerConstructor/expected.xml
new file mode 100644
index 0000000..a6f25ac
--- /dev/null
+++ b/java/java-tests/testData/inspection/visibility/innerConstructor/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>Foo.java</file>
+    <line>4</line>
+    <description>private</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/visibility/innerConstructor/src/Foo.java b/java/java-tests/testData/inspection/visibility/innerConstructor/src/Foo.java
new file mode 100644
index 0000000..6159016
--- /dev/null
+++ b/java/java-tests/testData/inspection/visibility/innerConstructor/src/Foo.java
@@ -0,0 +1,7 @@
+class Foo {
+  private final Bar bar = new Bar();
+  private class Bar {
+    public Bar() {
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/visibility/packageLevelTops/expected.xml b/java/java-tests/testData/inspection/visibility/packageLevelTops/expected.xml
new file mode 100644
index 0000000..53c105b
--- /dev/null
+++ b/java/java-tests/testData/inspection/visibility/packageLevelTops/expected.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>PackageLevelServer.java</file>
+    <line>3</line>
+    <description>package local</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/visibility/packageLevelTops/src/package1/PackageLevelServer.java b/java/java-tests/testData/inspection/visibility/packageLevelTops/src/package1/PackageLevelServer.java
new file mode 100644
index 0000000..656f2b9
--- /dev/null
+++ b/java/java-tests/testData/inspection/visibility/packageLevelTops/src/package1/PackageLevelServer.java
@@ -0,0 +1,5 @@
+package package1;
+
+public class PackageLevelServer {
+  public static void foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/visibility/packageLevelTops/src/package1/PublicServer.java b/java/java-tests/testData/inspection/visibility/packageLevelTops/src/package1/PublicServer.java
new file mode 100644
index 0000000..398dc0e
--- /dev/null
+++ b/java/java-tests/testData/inspection/visibility/packageLevelTops/src/package1/PublicServer.java
@@ -0,0 +1,5 @@
+package package1;
+
+public class PublicServer {
+  public static void foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/visibility/packageLevelTops/src/package2/Client.java b/java/java-tests/testData/inspection/visibility/packageLevelTops/src/package2/Client.java
new file mode 100644
index 0000000..5b55de3
--- /dev/null
+++ b/java/java-tests/testData/inspection/visibility/packageLevelTops/src/package2/Client.java
@@ -0,0 +1,9 @@
+package package2;
+
+import package1.PublicServer;
+
+class Client {
+  public static void main(String args[]) {
+    PublicServer.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/visibility/typeArguments/expected.xml b/java/java-tests/testData/inspection/visibility/typeArguments/expected.xml
new file mode 100644
index 0000000..ec272ab
--- /dev/null
+++ b/java/java-tests/testData/inspection/visibility/typeArguments/expected.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems/>
+
diff --git a/java/java-tests/testData/inspection/visibility/typeArguments/src/AbstractSetup.java b/java/java-tests/testData/inspection/visibility/typeArguments/src/AbstractSetup.java
new file mode 100644
index 0000000..4fc642d
--- /dev/null
+++ b/java/java-tests/testData/inspection/visibility/typeArguments/src/AbstractSetup.java
@@ -0,0 +1,14 @@
+public abstract class AbstractSetup<T extends AbstractSetupParams>
+{
+   private T parameters;
+
+   public T getParameters()
+   {
+      return parameters;
+   }
+
+   protected void setParameters(T pParameters)
+   {
+      parameters = pParameters;
+   }
+}
diff --git a/java/java-tests/testData/inspection/visibility/typeArguments/src/AbstractSetupParams.java b/java/java-tests/testData/inspection/visibility/typeArguments/src/AbstractSetupParams.java
new file mode 100644
index 0000000..adc0137
--- /dev/null
+++ b/java/java-tests/testData/inspection/visibility/typeArguments/src/AbstractSetupParams.java
@@ -0,0 +1,3 @@
+public class AbstractSetupParams
+{
+}
diff --git a/java/java-tests/testData/inspection/visibility/typeArguments/src/ChildClass.java b/java/java-tests/testData/inspection/visibility/typeArguments/src/ChildClass.java
new file mode 100644
index 0000000..4f673b1
--- /dev/null
+++ b/java/java-tests/testData/inspection/visibility/typeArguments/src/ChildClass.java
@@ -0,0 +1,33 @@
+public final class ChildClass extends Superclass<ChildClass.Param, ChildClass.Setup>
+{
+// --- FIELDS ---
+
+   private ChildClass()
+   {
+
+
+   }
+
+// --- OTHER METHODS ---
+
+   @Override
+   protected Setup createInitializer()
+   {
+      return new ChildClass.Setup();
+   }
+
+
+   class Param extends AbstractSetupParams
+   {
+   }
+
+   private class Setup extends AbstractSetup<Param>
+   {
+
+   }
+
+    public static void main(String[] args) {}
+
+    
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/visibility/typeArguments/src/Superclass.java b/java/java-tests/testData/inspection/visibility/typeArguments/src/Superclass.java
new file mode 100644
index 0000000..c89c741
--- /dev/null
+++ b/java/java-tests/testData/inspection/visibility/typeArguments/src/Superclass.java
@@ -0,0 +1,8 @@
+public abstract class Superclass<TParam extends AbstractSetupParams, TSetup extends AbstractSetup<TParam>>
+{
+
+
+   protected abstract TSetup createInitializer();
+
+
+}
diff --git a/java/java-tests/testData/inspection/visibility/usedFromAnnotationsExtendsList/expected.xml b/java/java-tests/testData/inspection/visibility/usedFromAnnotationsExtendsList/expected.xml
new file mode 100644
index 0000000..8153247
--- /dev/null
+++ b/java/java-tests/testData/inspection/visibility/usedFromAnnotationsExtendsList/expected.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>ThisClass.java</file>
+    <line>5</line>
+    <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Declaration access can be weaker</problem_class>
+    <hints>
+      <hint value="packageLocal" />
+    </hints>
+    <description>Can be package local</description>
+  </problem>
+  <problem>
+    <file>ThisClass.java</file>
+    <line>4</line>
+    <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Declaration access can be weaker</problem_class>
+    <hints>
+      <hint value="packageLocal" />
+    </hints>
+    <description>Can be package local</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/visibility/usedFromAnnotationsExtendsList/src/ThisClass.java b/java/java-tests/testData/inspection/visibility/usedFromAnnotationsExtendsList/src/ThisClass.java
new file mode 100644
index 0000000..67433f2
--- /dev/null
+++ b/java/java-tests/testData/inspection/visibility/usedFromAnnotationsExtendsList/src/ThisClass.java
@@ -0,0 +1,9 @@
+import java.util.ArrayList;
+@SuppressWarnings(ThisClass.PUBLICFINALNAME)
+public class ThisClass extends ArrayList<ThisClass.FF> {
+    public static final String PUBLICFINALNAME = "stuff";
+    public static class FF {}
+
+    public static void main(String[] args) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/libResolve/classesAndSources/classesAndSources.jar b/java/java-tests/testData/libResolve/classesAndSources/classesAndSources.jar
new file mode 100644
index 0000000..b4cf119
--- /dev/null
+++ b/java/java-tests/testData/libResolve/classesAndSources/classesAndSources.jar
Binary files differ
diff --git a/java/java-tests/testData/libResolve/inheritance/fullLibrary.jar b/java/java-tests/testData/libResolve/inheritance/fullLibrary.jar
new file mode 100644
index 0000000..0b8be7a
--- /dev/null
+++ b/java/java-tests/testData/libResolve/inheritance/fullLibrary.jar
Binary files differ
diff --git a/java/java-tests/testData/libResolve/inheritance/middleBottom.jar b/java/java-tests/testData/libResolve/inheritance/middleBottom.jar
new file mode 100644
index 0000000..2fe3e51
--- /dev/null
+++ b/java/java-tests/testData/libResolve/inheritance/middleBottom.jar
Binary files differ
diff --git a/java/java-tests/testData/model/Model.iml b/java/java-tests/testData/model/Model.iml
new file mode 100644
index 0000000..d5c0743
--- /dev/null
+++ b/java/java-tests/testData/model/Model.iml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>
+
diff --git a/java/java-tests/testData/model/model.ipr b/java/java-tests/testData/model/model.ipr
new file mode 100644
index 0000000..9bcc32e
--- /dev/null
+++ b/java/java-tests/testData/model/model.ipr
@@ -0,0 +1,177 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="CompilerConfiguration">
+    <option name="DEFAULT_COMPILER" value="Javac" />
+    <resourceExtensions />
+    <wildcardResourcePatterns>
+      <entry name="?*.properties" />
+      <entry name="?*.xml" />
+      <entry name="?*.gif" />
+      <entry name="?*.png" />
+      <entry name="?*.jpeg" />
+      <entry name="?*.jpg" />
+      <entry name="?*.html" />
+      <entry name="?*.dtd" />
+      <entry name="?*.tld" />
+      <entry name="?*.ftl" />
+    </wildcardResourcePatterns>
+    <annotationProcessing enabled="false" useClasspath="true" />
+  </component>
+  <component name="DependencyValidationManager">
+    <option name="SKIP_IMPORT_STATEMENTS" value="false" />
+  </component>
+  <component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false" />
+  <component name="EntryPointsManager">
+    <entry_points version="2.0" />
+  </component>
+  <component name="Palette2">
+    <group name="Swing">
+      <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
+      </item>
+      <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
+        <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
+        <initial-values>
+          <property name="text" value="Button" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="RadioButton" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="CheckBox" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="Label" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
+          <preferred-size width="-1" height="20" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
+      </item>
+    </group>
+  </component>
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/Model.iml" filepath="$PROJECT_DIR$/Model.iml" />
+    </modules>
+  </component>
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_6" assert-keyword="true" jdk-15="true" project-jdk-name="1.7 (1)" project-jdk-type="JavaSDK">
+    <output url="file://$PROJECT_DIR$/out" />
+  </component>
+  <component name="VcsDirectoryMappings">
+    <mapping directory="" vcs="" />
+  </component>
+  <component name="WebServicesPlugin" addRequiredLibraries="true" />
+  <component name="masterDetails">
+    <states>
+      <state key="ProjectJDKs.UI">
+        <settings>
+          <last-edited>1.6</last-edited>
+          <splitter-proportions>
+            <option name="proportions">
+              <list>
+                <option value="0.2" />
+              </list>
+            </option>
+          </splitter-proportions>
+        </settings>
+      </state>
+    </states>
+  </component>
+</project>
+
diff --git a/java/java-tests/testData/model/model.iws b/java/java-tests/testData/model/model.iws
new file mode 100644
index 0000000..29b59379
--- /dev/null
+++ b/java/java-tests/testData/model/model.iws
@@ -0,0 +1,340 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ChangeListManager">
+    <list default="true" id="0c3c74ae-381e-4d71-9f80-4356a2a1638a" name="Default" comment="" />
+    <ignored path="model.iws" />
+    <ignored path=".idea/workspace.xml" />
+    <option name="TRACKING_ENABLED" value="true" />
+    <option name="SHOW_DIALOG" value="false" />
+    <option name="HIGHLIGHT_CONFLICTS" value="true" />
+    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
+    <option name="LAST_RESOLUTION" value="IGNORE" />
+  </component>
+  <component name="ChangesViewManager" flattened_view="true" show_ignored="false" />
+  <component name="CreatePatchCommitExecutor">
+    <option name="PATCH_PATH" value="" />
+    <option name="REVERSE_PATCH" value="false" />
+  </component>
+  <component name="DaemonCodeAnalyzer">
+    <disable_hints />
+  </component>
+  <component name="DebuggerManager">
+    <breakpoint_any>
+      <breakpoint>
+        <option name="NOTIFY_CAUGHT" value="true" />
+        <option name="NOTIFY_UNCAUGHT" value="true" />
+        <option name="ENABLED" value="false" />
+        <option name="LOG_ENABLED" value="false" />
+        <option name="LOG_EXPRESSION_ENABLED" value="false" />
+        <option name="SUSPEND_POLICY" value="SuspendAll" />
+        <option name="COUNT_FILTER_ENABLED" value="false" />
+        <option name="COUNT_FILTER" value="0" />
+        <option name="CONDITION_ENABLED" value="false" />
+        <option name="CLASS_FILTERS_ENABLED" value="false" />
+        <option name="INSTANCE_FILTERS_ENABLED" value="false" />
+        <option name="CONDITION" value="" />
+        <option name="LOG_MESSAGE" value="" />
+      </breakpoint>
+      <breakpoint>
+        <option name="NOTIFY_CAUGHT" value="true" />
+        <option name="NOTIFY_UNCAUGHT" value="true" />
+        <option name="ENABLED" value="false" />
+        <option name="LOG_ENABLED" value="false" />
+        <option name="LOG_EXPRESSION_ENABLED" value="false" />
+        <option name="SUSPEND_POLICY" value="SuspendAll" />
+        <option name="COUNT_FILTER_ENABLED" value="false" />
+        <option name="COUNT_FILTER" value="0" />
+        <option name="CONDITION_ENABLED" value="false" />
+        <option name="CLASS_FILTERS_ENABLED" value="false" />
+        <option name="INSTANCE_FILTERS_ENABLED" value="false" />
+        <option name="CONDITION" value="" />
+        <option name="LOG_MESSAGE" value="" />
+      </breakpoint>
+    </breakpoint_any>
+    <breakpoint_rules />
+    <ui_properties />
+  </component>
+  <component name="FavoritesManager">
+    <favorites_list name="model" />
+  </component>
+  <component name="FileEditorManager">
+    <leaf>
+      <file leaf-file-name="AClass.java" pinned="false" current="true" current-in-tab="true">
+        <entry file="file://$PROJECT_DIR$/src/x/AClass.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="3" column="49" selection-start="35" selection-end="35" vertical-scroll-proportion="0.019406393">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+    </leaf>
+  </component>
+  <component name="Git.Settings">
+    <option name="CHECKOUT_INCLUDE_TAGS" value="false" />
+    <option name="UPDATE_CHANGES_POLICY" value="STASH" />
+    <option name="LINE_SEPARATORS_CONVERSION" value="ASK" />
+  </component>
+  <component name="ProjectFrameBounds">
+    <option name="x" value="1276" />
+    <option name="y" value="-4" />
+    <option name="width" value="1288" />
+    <option name="height" value="1032" />
+  </component>
+  <component name="ProjectLevelVcsManager" settingsEditedManually="false">
+    <OptionsSetting value="true" id="Add" />
+    <OptionsSetting value="true" id="Remove" />
+    <OptionsSetting value="true" id="Checkout" />
+    <OptionsSetting value="true" id="Update" />
+    <OptionsSetting value="true" id="Status" />
+    <OptionsSetting value="true" id="Edit" />
+    <ConfirmationsSetting value="0" id="Add" />
+    <ConfirmationsSetting value="0" id="Remove" />
+  </component>
+  <component name="ProjectReloadState">
+    <option name="STATE" value="0" />
+  </component>
+  <component name="ProjectView">
+    <navigator currentView="ProjectPane" proportions="" version="1" splitterProportion="0.5">
+      <flattenPackages />
+      <showMembers />
+      <showModules />
+      <showLibraryContents />
+      <hideEmptyPackages />
+      <abbreviatePackageNames />
+      <autoscrollToSource />
+      <autoscrollFromSource />
+      <sortByType />
+    </navigator>
+    <panes>
+      <pane id="ProjectPane">
+        <subPane>
+          <PATH>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="model" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+            </PATH_ELEMENT>
+          </PATH>
+          <PATH>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="model" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="model" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+          </PATH>
+          <PATH>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="model" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="model" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="src" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="x" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+          </PATH>
+        </subPane>
+      </pane>
+      <pane id="Scope" />
+      <pane id="PackagesPane" />
+    </panes>
+  </component>
+  <component name="PropertiesComponent">
+    <property name="GoToFile.includeJavaFiles" value="false" />
+    <property name="GoToClass.toSaveIncludeLibraries" value="false" />
+    <property name="WebServerToolWindowFactoryState" value="false" />
+    <property name="MemberChooser.sorted" value="false" />
+    <property name="MemberChooser.showClasses" value="true" />
+    <property name="GoToClass.includeLibraries" value="false" />
+    <property name="MemberChooser.copyJavadoc" value="false" />
+  </component>
+  <component name="RunManager">
+    <configuration default="true" type="#org.jetbrains.idea.devkit.run.PluginConfigurationType" factoryName="Plugin">
+      <module name="" />
+      <option name="VM_PARAMETERS" value="-Xmx512m -Xms256m -XX:MaxPermSize=250m" />
+      <option name="PROGRAM_PARAMETERS" />
+      <method>
+        <option name="BuildArtifacts" enabled="false" />
+        <option name="Make" enabled="true" />
+        <option name="Maven.BeforeRunTask" enabled="false" />
+        <option name="PhingTarget" enabled="false" />
+      </method>
+    </configuration>
+    <configuration default="true" type="Remote" factoryName="Remote">
+      <option name="USE_SOCKET_TRANSPORT" value="true" />
+      <option name="SERVER_MODE" value="false" />
+      <option name="SHMEM_ADDRESS" value="javadebug" />
+      <option name="HOST" value="localhost" />
+      <option name="PORT" value="5005" />
+      <method>
+        <option name="BuildArtifacts" enabled="false" />
+        <option name="Maven.BeforeRunTask" enabled="false" />
+      </method>
+    </configuration>
+    <configuration default="true" type="Applet" factoryName="Applet">
+      <module name="" />
+      <option name="MAIN_CLASS_NAME" />
+      <option name="HTML_FILE_NAME" />
+      <option name="HTML_USED" value="false" />
+      <option name="WIDTH" value="400" />
+      <option name="HEIGHT" value="300" />
+      <option name="POLICY_FILE" value="$APPLICATION_HOME_DIR$/bin/appletviewer.policy" />
+      <option name="VM_PARAMETERS" />
+      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+      <option name="ALTERNATIVE_JRE_PATH" />
+      <method>
+        <option name="BuildArtifacts" enabled="false" />
+        <option name="Make" enabled="true" />
+        <option name="Maven.BeforeRunTask" enabled="false" />
+        <option name="PhingTarget" enabled="false" />
+      </method>
+    </configuration>
+    <configuration default="true" type="Application" factoryName="Application">
+      <option name="MAIN_CLASS_NAME" />
+      <option name="VM_PARAMETERS" />
+      <option name="PROGRAM_PARAMETERS" />
+      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
+      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+      <option name="ALTERNATIVE_JRE_PATH" />
+      <option name="ENABLE_SWING_INSPECTOR" value="false" />
+      <option name="ENV_VARIABLES" />
+      <option name="PASS_PARENT_ENVS" value="true" />
+      <module name="" />
+      <envs />
+      <method>
+        <option name="BuildArtifacts" enabled="false" />
+        <option name="Make" enabled="true" />
+        <option name="Maven.BeforeRunTask" enabled="false" />
+        <option name="PhingTarget" enabled="false" />
+      </method>
+    </configuration>
+    <configuration default="true" type="JUnit" factoryName="JUnit">
+      <module name="" />
+      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+      <option name="ALTERNATIVE_JRE_PATH" />
+      <option name="PACKAGE_NAME" />
+      <option name="MAIN_CLASS_NAME" />
+      <option name="METHOD_NAME" />
+      <option name="TEST_OBJECT" value="class" />
+      <option name="VM_PARAMETERS" value="-ea" />
+      <option name="PARAMETERS" />
+      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
+      <option name="ENV_VARIABLES" />
+      <option name="PASS_PARENT_ENVS" value="true" />
+      <option name="TEST_SEARCH_SCOPE">
+        <value defaultName="moduleWithDependencies" />
+      </option>
+      <envs />
+      <patterns />
+      <method>
+        <option name="BuildArtifacts" enabled="false" />
+        <option name="Make" enabled="true" />
+        <option name="Maven.BeforeRunTask" enabled="false" />
+        <option name="PhingTarget" enabled="false" />
+      </method>
+    </configuration>
+    <list size="0" />
+    <configuration name="&lt;template&gt;" type="WebApp" default="true" selected="false">
+      <Host>localhost</Host>
+      <Port>5050</Port>
+    </configuration>
+  </component>
+  <component name="ShelveChangesManager" show_recycled="false" />
+  <component name="ToolWindowManager">
+    <frame x="1276" y="-4" width="1288" height="1032" extended-state="6" />
+    <editor active="true" />
+    <layout>
+      <window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
+      <window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
+      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="true" content_ui="tabs" />
+      <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="true" content_ui="tabs" />
+      <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
+      <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
+      <window_info id="Profiler" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
+      <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="true" content_ui="tabs" />
+      <window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
+      <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
+      <window_info id="Application Servers" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
+      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.2495935" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
+      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
+      <window_info id="JsTestDriver Server" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
+      <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
+      <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
+      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+      <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+      <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
+      <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
+    </layout>
+  </component>
+  <component name="VcsContentAnnotationSettings">
+    <option name="myLimit" value="2678400000" />
+  </component>
+  <component name="VcsManagerConfiguration">
+    <option name="OFFER_MOVE_TO_ANOTHER_CHANGELIST_ON_PARTIAL_COMMIT" value="true" />
+    <option name="CHECK_CODE_SMELLS_BEFORE_PROJECT_COMMIT" value="true" />
+    <option name="CHECK_NEW_TODO" value="true" />
+    <option name="myTodoPanelSettings">
+      <value>
+        <are-packages-shown value="false" />
+        <are-modules-shown value="false" />
+        <flatten-packages value="false" />
+        <is-autoscroll-to-source value="false" />
+      </value>
+    </option>
+    <option name="PERFORM_UPDATE_IN_BACKGROUND" value="true" />
+    <option name="PERFORM_COMMIT_IN_BACKGROUND" value="true" />
+    <option name="PERFORM_EDIT_IN_BACKGROUND" value="true" />
+    <option name="PERFORM_CHECKOUT_IN_BACKGROUND" value="true" />
+    <option name="PERFORM_ADD_REMOVE_IN_BACKGROUND" value="true" />
+    <option name="PERFORM_ROLLBACK_IN_BACKGROUND" value="false" />
+    <option name="CHECK_LOCALLY_CHANGED_CONFLICTS_IN_BACKGROUND" value="false" />
+    <option name="ENABLE_BACKGROUND_PROCESSES" value="false" />
+    <option name="CHANGED_ON_SERVER_INTERVAL" value="60" />
+    <option name="SHOW_ONLY_CHANGED_IN_SELECTION_DIFF" value="true" />
+    <option name="CHECK_COMMIT_MESSAGE_SPELLING" value="true" />
+    <option name="DEFAULT_PATCH_EXTENSION" value="patch" />
+    <option name="SHORT_DIFF_HORISONTALLY" value="true" />
+    <option name="SHORT_DIFF_EXTRA_LINES" value="2" />
+    <option name="SOFT_WRAPS_IN_SHORT_DIFF" value="true" />
+    <option name="INCLUDE_TEXT_INTO_PATCH" value="false" />
+    <option name="INCLUDE_TEXT_INTO_SHELF" value="false" />
+    <option name="FORCE_NON_EMPTY_COMMENT" value="false" />
+    <option name="LAST_COMMIT_MESSAGE" />
+    <option name="MAKE_NEW_CHANGELIST_ACTIVE" value="true" />
+    <option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="false" />
+    <option name="CHECK_FILES_UP_TO_DATE_BEFORE_COMMIT" value="false" />
+    <option name="REFORMAT_BEFORE_PROJECT_COMMIT" value="false" />
+    <option name="REFORMAT_BEFORE_FILE_COMMIT" value="false" />
+    <option name="FILE_HISTORY_DIALOG_COMMENTS_SPLITTER_PROPORTION" value="0.8" />
+    <option name="FILE_HISTORY_DIALOG_SPLITTER_PROPORTION" value="0.5" />
+    <option name="ACTIVE_VCS_NAME" />
+    <option name="UPDATE_GROUP_BY_PACKAGES" value="false" />
+    <option name="UPDATE_GROUP_BY_CHANGELIST" value="false" />
+    <option name="SHOW_FILE_HISTORY_AS_TREE" value="false" />
+    <option name="FILE_HISTORY_SPLITTER_PROPORTION" value="0.6" />
+  </component>
+  <component name="XDebuggerManager">
+    <breakpoint-manager />
+  </component>
+  <component name="editorHistoryManager">
+    <entry file="file://$PROJECT_DIR$/src/x/AClass.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="3" column="49" selection-start="35" selection-end="35" vertical-scroll-proportion="0.019406393">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+  </component>
+</project>
+
diff --git a/java/java-tests/testData/model/src/x/AClass.java b/java/java-tests/testData/model/src/x/AClass.java
new file mode 100644
index 0000000..2d12eb2
--- /dev/null
+++ b/java/java-tests/testData/model/src/x/AClass.java
@@ -0,0 +1,19 @@
+/*
+ * 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.
+ */
+package x;
+
+public class AClass {
+}
diff --git a/java/java-tests/testData/model/src/x/BClass.java b/java/java-tests/testData/model/src/x/BClass.java
new file mode 100644
index 0000000..d5e1b6d
--- /dev/null
+++ b/java/java-tests/testData/model/src/x/BClass.java
@@ -0,0 +1,19 @@
+/*
+ * 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.
+ */
+package x;
+
+public class BClass {
+}
diff --git a/java/java-tests/testData/moduleRootManager/compilerOutputInheritance/test.iml b/java/java-tests/testData/moduleRootManager/compilerOutputInheritance/test.iml
new file mode 100644
index 0000000..ad19605
--- /dev/null
+++ b/java/java-tests/testData/moduleRootManager/compilerOutputInheritance/test.iml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module version="4" relativePaths="true">
+<component name="NewModuleRootManager" />
+</module>
\ No newline at end of file
diff --git a/java/java-tests/testData/moduleRootManager/contentWrite/classes/empty.txt b/java/java-tests/testData/moduleRootManager/contentWrite/classes/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/moduleRootManager/contentWrite/classes/empty.txt
diff --git a/java/java-tests/testData/moduleRootManager/contentWrite/exclude/empty.txt b/java/java-tests/testData/moduleRootManager/contentWrite/exclude/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/moduleRootManager/contentWrite/exclude/empty.txt
diff --git a/java/java-tests/testData/moduleRootManager/contentWrite/source/empty.txt b/java/java-tests/testData/moduleRootManager/contentWrite/source/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/moduleRootManager/contentWrite/source/empty.txt
diff --git a/java/java-tests/testData/moduleRootManager/contentWrite/test.iml b/java/java-tests/testData/moduleRootManager/contentWrite/test.iml
new file mode 100644
index 0000000..ad19605
--- /dev/null
+++ b/java/java-tests/testData/moduleRootManager/contentWrite/test.iml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module version="4" relativePaths="true">
+<component name="NewModuleRootManager" />
+</module>
\ No newline at end of file
diff --git a/java/java-tests/testData/moduleRootManager/contentWrite/testClasses/empty.txt b/java/java-tests/testData/moduleRootManager/contentWrite/testClasses/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/moduleRootManager/contentWrite/testClasses/empty.txt
diff --git a/java/java-tests/testData/moduleRootManager/contentWrite/testSource/empty.txt b/java/java-tests/testData/moduleRootManager/contentWrite/testSource/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/moduleRootManager/contentWrite/testSource/empty.txt
diff --git a/java/java-tests/testData/moduleRootManager/convertor34/libraryTable/after/applicationLibraries.xml b/java/java-tests/testData/moduleRootManager/convertor34/libraryTable/after/applicationLibraries.xml
new file mode 100644
index 0000000..a9c63f0
--- /dev/null
+++ b/java/java-tests/testData/moduleRootManager/convertor34/libraryTable/after/applicationLibraries.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<application>
+  <component name="libraryTable">
+    <library name="xxx">
+      <CLASSES>
+        <root url="file:///bin" />
+      </CLASSES>
+      <JAVADOC />
+      <SOURCES />
+    </library>
+  </component>
+</application>
\ No newline at end of file
diff --git a/java/java-tests/testData/moduleRootManager/convertor34/libraryTable/before/library.table.xml b/java/java-tests/testData/moduleRootManager/convertor34/libraryTable/before/library.table.xml
new file mode 100644
index 0000000..8c481b1
--- /dev/null
+++ b/java/java-tests/testData/moduleRootManager/convertor34/libraryTable/before/library.table.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<application>
+  <component name="ProjectLibraryTable">
+    <library>
+      <name value="xxx" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+             <root type="simple" url="file:///bin" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite" />
+        </javadocPath>
+      </roots>
+    </library>
+  </component>
+</application>
\ No newline at end of file
diff --git a/java/java-tests/testData/moduleRootManager/convertor34/scr24517/after/se.mdh.html.iml b/java/java-tests/testData/moduleRootManager/convertor34/scr24517/after/se.mdh.html.iml
new file mode 100644
index 0000000..9a25f6e
--- /dev/null
+++ b/java/java-tests/testData/moduleRootManager/convertor34/scr24517/after/se.mdh.html.iml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module version="4" relativePaths="true">
+<component name="NewModuleRootManager">
+  <content url="file://$MODULE_DIR$">
+    <sourceFolder isTestSource="false" url="file://$MODULE_DIR$/src" />
+    <sourceFolder isTestSource="false" url="file://$MODULE_DIR$/test/src" />
+  </content>
+  <orderEntry type="jdk" jdkName="java version &quot;1.3.1&quot;" />
+  <orderEntry type="sourceFolder" />
+  <orderEntry type="library" name="jakarta-commons-lang-2.0" level="application" />
+  <output url="file://$MODULE_DIR$/build" />
+  <output-test url="file://$MODULE_DIR$/build" />
+  <exclude-output />
+</component>
+</module>
diff --git a/java/java-tests/testData/moduleRootManager/convertor34/scr24517/after/se.mdh.html.ipr b/java/java-tests/testData/moduleRootManager/convertor34/scr24517/after/se.mdh.html.ipr
new file mode 100644
index 0000000..1641512
--- /dev/null
+++ b/java/java-tests/testData/moduleRootManager/convertor34/scr24517/after/se.mdh.html.ipr
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4" relativePaths="true">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module filepath="$PROJECT_DIR$/se.mdh.html.iml" fileurl="file://$PROJECT_DIR$/se.mdh.html.iml" />
+    </modules>
+  </component>
+</project>
diff --git a/java/java-tests/testData/moduleRootManager/convertor34/scr24517/before/se.mdh.html.ipr b/java/java-tests/testData/moduleRootManager/convertor34/scr24517/before/se.mdh.html.ipr
new file mode 100644
index 0000000..a680d8a
--- /dev/null
+++ b/java/java-tests/testData/moduleRootManager/convertor34/scr24517/before/se.mdh.html.ipr
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="3" relativePaths="false">
+  <component name="ProjectRootManager" version="2">
+    <jdk name="java version &quot;1.3.1&quot;" />
+    <library name="jakarta-commons-lang-2.0" />
+    <projectPath>
+      <root type="composite">
+        <root type="simple" url="file://$PROJECT_DIR$" />
+      </root>
+    </projectPath>
+    <sourcePath>
+      <root type="composite">
+        <root type="jdk" rootType="sourcePath" name="java version &quot;1.3.1&quot;" />
+        <root type="simple" url="file://$PROJECT_DIR$/src" />
+        <root type="simple" url="file://$PROJECT_DIR$/test/src" />
+        <root type="library" rootType="sourcePath" name="jakarta-commons-lang-2.0" />
+      </root>
+    </sourcePath>
+    <classPath>
+      <root type="composite">
+        <root type="jdk" rootType="classPath" name="java version &quot;1.3.1&quot;" />
+        <root type="output" />
+        <root type="library" rootType="classPath" name="jakarta-commons-lang-2.0" />
+      </root>
+    </classPath>
+    <excludePath>
+      <root type="composite">
+        <root type="jdk" rootType="excludePath" name="java version &quot;1.3.1&quot;" />
+        <root type="excludedOutput" />
+      </root>
+    </excludePath>
+    <javadocPath>
+      <root type="composite">
+        <root type="jdk" rootType="javadocPath" name="java version &quot;1.3.1&quot;" />
+        <root type="library" rootType="javadocPath" name="jakarta-commons-lang-2.0" />
+      </root>
+    </javadocPath>
+    <assert_keyword enabled="no" />
+    <exclude_output enabled="yes" />
+  </component>
+  <component name="CompilerConfiguration">
+    <option name="DEFAULT_COMPILER" value="Javac" />
+    <option name="SYNCHRONIZE_OUTPUT_DIRECTORY" value="false" />
+    <option name="DEFAULT_OUTPUT_PATH" value="$PROJECT_DIR$/build" />
+    <option name="OUTPUT_MODE" value="single" />
+    <resourceExtensions />
+  </component>
+  <component name="JavacSettings">
+    <option name="DEBUGGING_INFO" value="true" />
+    <option name="GENERATE_NO_WARNINGS" value="false" />
+    <option name="DEPRECATION" value="true" />
+    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+    <option name="MAXIMUM_HEAP_SIZE" value="128" />
+  </component>
+  <component name="JikesSettings">
+    <option name="JIKES_PATH" value="" />
+    <option name="DEBUGGING_INFO" value="true" />
+    <option name="DEPRECATION" value="true" />
+    <option name="GENERATE_NO_WARNINGS" value="false" />
+    <option name="GENERATE_MAKE_FILE_DEPENDENCIES" value="false" />
+    <option name="DO_FULL_DEPENDENCE_CHECK" value="false" />
+    <option name="IS_EMACS_ERRORS_MODE" value="true" />
+    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+  </component>
+  <component name="AntConfiguration">
+    <option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
+    <option name="FILTER_TARGETS" value="false" />
+  </component>
+  <component name="JavadocGenerationManager">
+    <option name="OUTPUT_DIRECTORY" />
+    <option name="OPTION_SCOPE" value="protected" />
+    <option name="OPTION_HIERARCHY" value="false" />
+    <option name="OPTION_NAVIGATOR" value="false" />
+    <option name="OPTION_INDEX" value="false" />
+    <option name="OPTION_SEPARATE_INDEX" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_USE" value="true" />
+    <option name="OPTION_DOCUMENT_TAG_AUTHOR" value="true" />
+    <option name="OPTION_DOCUMENT_TAG_VERSION" value="true" />
+    <option name="OPTION_DOCUMENT_TAG_DEPRECATED" value="true" />
+    <option name="OPTION_DEPRECATED_LIST" value="true" />
+    <option name="OTHER_OPTIONS" />
+    <option name="HEAP_SIZE" />
+    <option name="OPEN_IN_BROWSER" value="false" />
+  </component>
+  <component name="WebManager">
+    <option enabled="false" />
+  </component>
+  <component name="WebRootContainer" />
+  <component name="EjbManager" enabled="false" />
+  <component name="JUnitProjectSettings">
+    <option name="TEST_RUNNER" value="UI" />
+  </component>
+  <component name="EntryPointsManager">
+    <entry_points />
+  </component>
+  <component name="EjbActionsConfiguration">
+    <option name="NEW_MESSAGE_BEAN_LAST_PACKAGE" value="" />
+    <option name="NEW_ENTITY_BEAN_LAST_PACKAGE" value="" />
+    <option name="NEW_SESSION_BEAN_LAST_PACKAGE" value="" />
+  </component>
+  <component name="CodeStyleManager">
+    <option name="USE_DEFAULT_CODE_STYLE_SCHEME" value="true" />
+    <option name="CODE_STYLE_SCHEME" value="" />
+  </component>
+  <component name="ExportToHTMLSettings">
+    <option name="PRINT_LINE_NUMBERS" value="false" />
+    <option name="OPEN_IN_BROWSER" value="false" />
+    <option name="OUTPUT_DIRECTORY" />
+  </component>
+</project>
+
diff --git a/java/java-tests/testData/moduleRootManager/convertor34/scr25298/after/applicationLibraries.xml b/java/java-tests/testData/moduleRootManager/convertor34/scr25298/after/applicationLibraries.xml
new file mode 100644
index 0000000..df13fef
--- /dev/null
+++ b/java/java-tests/testData/moduleRootManager/convertor34/scr25298/after/applicationLibraries.xml
@@ -0,0 +1,743 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<application>
+  <component name="libraryTable">
+    <library name="activation">
+      <CLASSES>
+        <root url="jar://C:/lib/ext/jaf/1_0_1/activation.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/ext/jaf/1_0_1/docs/javadocs" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="comm-2.0">
+      <CLASSES>
+        <root url="jar://C:/lib/ext/comm/comm.jar!/" />
+        <root url="file://C:/lib/ext/comm" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/ext/comm/javadocs" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="dennislundberg-codegeneration-2.0">
+      <CLASSES>
+        <root url="jar://C:/lib/dennislundberg-codegeneration/RELEASE-2_0/codegeneration.jar!/" />
+      </CLASSES>
+      <JAVADOC />
+      <SOURCES />
+    </library>
+    <library name="dennislundberg-skatt-1.0">
+      <CLASSES>
+        <root url="jar://C:/lib/dennislundberg-skatt/RELEASE-1_0/dennislundberg-skatt.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/dennislundberg-skatt/RELEASE-1_0/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="itext-1.00">
+      <CLASSES>
+        <root url="jar://C:/lib/ext/itext/itext-1.00.jar!/" />
+      </CLASSES>
+      <JAVADOC />
+      <SOURCES />
+    </library>
+    <library name="itext-1.01">
+      <CLASSES>
+        <root url="jar://C:/lib/ext/itext/itext-1.01.jar!/" />
+      </CLASSES>
+      <JAVADOC />
+      <SOURCES />
+    </library>
+    <library name="jakarta-commons-lang-1.0.1">
+      <CLASSES>
+        <root url="jar://C:/lib/ext/jakarta-commons/commons-lang-1.0.1/commons-lang-1.0.1.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/ext/jakarta-commons/commons-lang-1.0.1/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="jakarta-commons-lang-2.0">
+      <CLASSES>
+        <root url="jar://C:/lib/ext/jakarta-commons/commons-lang-2.0/commons-lang-2.0.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/ext/jakarta-commons/commons-lang-2.0/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="jakarta-commons-logging-1.0.2">
+      <CLASSES>
+        <root url="jar://C:/lib/ext/jakarta-commons/commons-logging-1.0.2/commons-logging.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/ext/jakarta-commons/commons-logging-1.0.2/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="jakarta-commons-logging-1.0.3">
+      <CLASSES>
+        <root url="jar://C:/lib/ext/jakarta-commons/commons-logging-1.0.3/commons-logging.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/ext/jakarta-commons/commons-logging-1.0.3/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="jndi">
+      <CLASSES>
+        <root url="jar://C:/lib/ext/jndi/1_2_1/lib/jndi.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/ext/jndi/1_2_1/ldap/doc/ldapcontrols" />
+        <root url="file://C:/lib/ext/jndi/1_2_1/ldap/doc/sasl" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="jsse">
+      <CLASSES>
+        <root url="jar://C:/lib/ext/jsse/lib/jcert.jar!/" />
+        <root url="jar://C:/lib/ext/jsse/lib/jnet.jar!/" />
+        <root url="jar://C:/lib/ext/jsse/lib/jsse.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/ext/jsse/doc/apidoc" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="jstl-1.0">
+      <CLASSES>
+        <root url="jar://C:/lib/ext/jakarta-taglibs/standard-1.0.3/lib/jstl.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/ext/jakarta-taglibs/standard-1.0.3/javadoc" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="jta">
+      <CLASSES>
+        <root url="jar://C:/lib/ext/jta/jta20.jar!/" />
+      </CLASSES>
+      <JAVADOC />
+      <SOURCES />
+    </library>
+    <library name="junit">
+      <CLASSES>
+        <root url="jar://C:/lib/ext/junit/3_8_1/junit.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/ext/junit/3_8_1/javadoc" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="log4j">
+      <CLASSES>
+        <root url="jar://C:/lib/ext/jakarta-log4j/1.2.8/dist/lib/log4j-1.2.8.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/ext/jakarta-log4j/1.2.8/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="mail-1.1.3">
+      <CLASSES>
+        <root url="jar://C:/lib/ext/javamail/javamail-1.1.3/mail.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/ext/javamail/javamail-1.1.3/docs/javadocs" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="mail-1.2">
+      <CLASSES>
+        <root url="jar://C:/lib/ext/javamail/javamail-1.2/mail.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/ext/javamail/javamail-1.2/docs/javadocs" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="mdh-application-1.1.3">
+      <CLASSES>
+        <root url="jar://C:/lib/application/RELEASE-1_1_3/application.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/application/RELEASE-1_1_3/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="mdh-awt-applet-2.2.4">
+      <CLASSES>
+        <root url="jar://C:/lib/awt/RELEASE-2_2_4/awt-applet.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/awt/RELEASE-2_2_4/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="mdh-databas-1.1.2">
+      <CLASSES>
+        <root url="jar://C:/lib/databas/RELEASE-1_1_2/databas.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/databas/RELEASE-1_1_2/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="mdh-databas-util-1.1.1">
+      <CLASSES>
+        <root url="jar://C:/lib/databas-util/RELEASE-1_1_1/databas-util.jar!/" />
+      </CLASSES>
+      <JAVADOC />
+      <SOURCES />
+    </library>
+    <library name="mdh-databas-util-1.1.2">
+      <CLASSES>
+        <root url="jar://C:/lib/databas-util/RELEASE-1_1_2/databas-util.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/databas-util/RELEASE-1_1_2/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="mdh-databas-util-applet-1.1.2">
+      <CLASSES>
+        <root url="jar://C:/lib/databas-util/RELEASE-1_1_2/databas-util-applet.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/databas-util/RELEASE-1_1_2/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="mdh-epost-1.0.1">
+      <CLASSES>
+        <root url="jar://C:/lib/epost/RELEASE-1_0_1/epost.jar!/" />
+      </CLASSES>
+      <JAVADOC />
+      <SOURCES />
+    </library>
+    <library name="mdh-epost-1.1.1">
+      <CLASSES>
+        <root url="jar://C:/lib/epost/RELEASE-1_1_1/epost.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/epost/RELEASE-1_1_1/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="mdh-epost-2.0">
+      <CLASSES>
+        <root url="jar://C:/lib/epost/RELEASE-2_0/shared/lib/epost-shared.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/epost/RELEASE-2_0/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="mdh-html-1.6.2">
+      <CLASSES>
+        <root url="jar://C:/lib/html/RELEASE-1_6_2/html.jar!/" />
+      </CLASSES>
+      <JAVADOC />
+      <SOURCES />
+    </library>
+    <library name="mdh-html-1.6.4">
+      <CLASSES>
+        <root url="jar://C:/lib/html/RELEASE-1_6_4/html.jar!/" />
+      </CLASSES>
+      <JAVADOC />
+      <SOURCES />
+    </library>
+    <library name="mdh-html-2.0.1">
+      <CLASSES>
+        <root url="jar://C:/lib/html/RELEASE-2_0_1/html.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/html/RELEASE-2_0_1/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="mdh-html-2.1">
+      <CLASSES>
+        <root url="jar://C:/lib/html/RELEASE-2_1/html.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/html/RELEASE-2_1/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="mdh-ladok-1.2">
+      <CLASSES>
+        <root url="jar://C:/lib/ladok/RELEASE-1_2/ladok.jar!/" />
+      </CLASSES>
+      <JAVADOC />
+      <SOURCES />
+    </library>
+    <library name="mdh-ladok-1.3">
+      <CLASSES>
+        <root url="jar://C:/lib/ladok/RELEASE-1_3/ladok.jar!/" />
+      </CLASSES>
+      <JAVADOC />
+      <SOURCES />
+    </library>
+    <library name="mdh-ladok-1.4">
+      <CLASSES>
+        <root url="jar://C:/lib/ladok/RELEASE-1_4/ladok.jar!/" />
+      </CLASSES>
+      <JAVADOC />
+      <SOURCES />
+    </library>
+    <library name="mdh-ladok-2.0">
+      <CLASSES>
+        <root url="jar://C:/lib/ladok/RELEASE-2_0/shared/lib/ladok-shared.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/ladok/RELEASE-2_0/shared/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="mdh-ladok-2.1">
+      <CLASSES>
+        <root url="jar://C:/lib/ladok/RELEASE-2_1/shared/lib/ladok-shared.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/ladok/RELEASE-2_1/shared/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="mdh-ladok-2.2">
+      <CLASSES>
+        <root url="jar://C:/lib/ladok/RELEASE-2_2/shared/lib/ladok-shared.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/ladok/RELEASE-2_2/shared/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="mdh-nds-2.3">
+      <CLASSES>
+        <root url="jar://C:/lib/nds/RELEASE-2_3/nds.jar!/" />
+      </CLASSES>
+      <JAVADOC />
+      <SOURCES />
+    </library>
+    <library name="mdh-nds-2.4">
+      <CLASSES>
+        <root url="jar://C:/lib/nds/RELEASE-2_4/nds.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/nds/RELEASE-2_4/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="mdh-nds-admin-2.3">
+      <CLASSES>
+        <root url="jar://C:/lib/nds/RELEASE-2_3/nds-admin.jar!/" />
+      </CLASSES>
+      <JAVADOC />
+      <SOURCES />
+    </library>
+    <library name="mdh-nds-admin-2.4">
+      <CLASSES>
+        <root url="jar://C:/lib/nds/RELEASE-2_4/nds-admin.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/nds/RELEASE-2_4/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="mdh-nyhet-2.5">
+      <CLASSES>
+        <root url="jar://C:/lib/nyhet/RELEASE-2_5/nyhet.jar!/" />
+      </CLASSES>
+      <JAVADOC />
+      <SOURCES>
+        <root url="file://C:/release/nyhet/src" />
+      </SOURCES>
+    </library>
+    <library name="mdh-nyhet-3.0.1">
+      <CLASSES>
+        <root url="jar://C:/lib/nyhet/RELEASE-3_0_1/shared/lib/nyhet-shared.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/nyhet/RELEASE-3_0_1/shared/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="mdh-pas-admin-1.2.1">
+      <CLASSES>
+        <root url="jar://C:/lib/pas/RELEASE-1_2_1/pas-admin.jar!/" />
+      </CLASSES>
+      <JAVADOC />
+      <SOURCES>
+        <root url="file://C:/release/pas/src" />
+      </SOURCES>
+    </library>
+    <library name="mdh-passage-admin-2.5">
+      <CLASSES>
+        <root url="jar://C:/lib/passage/RELEASE-2_5/passage-admin.jar!/" />
+      </CLASSES>
+      <JAVADOC />
+      <SOURCES>
+        <root url="file://C:/release/passage/src" />
+      </SOURCES>
+    </library>
+    <library name="mdh-personal-5.0">
+      <CLASSES>
+        <root url="jar://C:/lib/personal/RELEASE-5_0/shared/lib/personal-shared.jar!/" />
+      </CLASSES>
+      <JAVADOC />
+      <SOURCES>
+        <root url="file://C:/release/personal/shared/src" />
+      </SOURCES>
+    </library>
+    <library name="mdh-personal-5.3">
+      <CLASSES>
+        <root url="jar://C:/lib/personal/RELEASE-5_3/shared/lib/personal-shared.jar!/" />
+      </CLASSES>
+      <JAVADOC />
+      <SOURCES>
+        <root url="file://C:/release/personal/shared/src" />
+      </SOURCES>
+    </library>
+    <library name="mdh-personal-5.3.1">
+      <CLASSES>
+        <root url="jar://C:/lib/personal/RELEASE-5_3_1/shared/lib/personal-shared.jar!/" />
+      </CLASSES>
+      <JAVADOC />
+      <SOURCES>
+        <root url="file://C:/release/personal/shared/src" />
+      </SOURCES>
+    </library>
+    <library name="mdh-portal-2.1">
+      <CLASSES>
+        <root url="jar://C:/lib/portal/RELEASE-2_1/portal/lib/portal.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/portal/RELEASE-2_1/portal/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="mdh-robot-1.1">
+      <CLASSES>
+        <root url="jar://C:/lib/robot/RELEASE-1_1/robot.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/robot/RELEASE-1_1/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="mdh-schema-2.7">
+      <CLASSES>
+        <root url="jar://C:/lib/schema/RELEASE-2_7/schema.jar!/" />
+      </CLASSES>
+      <JAVADOC />
+      <SOURCES>
+        <root url="file://C:/release/schema/src" />
+      </SOURCES>
+    </library>
+    <library name="mdh-schema-3.0.2">
+      <CLASSES>
+        <root url="jar://C:/lib/schema/RELEASE-3_0_2/shared/lib/schema-shared.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/schema/RELEASE-3_0_2/shared/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="mdh-schema-3.0.3">
+      <CLASSES>
+        <root url="jar://C:/lib/schema/RELEASE-3_0_3/shared/lib/schema-shared.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/schema/RELEASE-3_0_3/shared/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="mdh-servlet-1.4.2">
+      <CLASSES>
+        <root url="jar://C:/lib/servlet/RELEASE-1_4_2/servlet.jar!/" />
+      </CLASSES>
+      <JAVADOC />
+      <SOURCES />
+    </library>
+    <library name="mdh-servlet-1.4.3">
+      <CLASSES>
+        <root url="jar://C:/lib/servlet/RELEASE-1_4_3/servlet.jar!/" />
+      </CLASSES>
+      <JAVADOC />
+      <SOURCES />
+    </library>
+    <library name="mdh-servlet-2.1">
+      <CLASSES>
+        <root url="jar://C:/lib/servlet/RELEASE-2_1/servlet.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/servlet/RELEASE-2_1_1/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="mdh-servlet-2.1.1">
+      <CLASSES>
+        <root url="jar://C:/lib/servlet/RELEASE-2_1_1/servlet.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/servlet/RELEASE-2_1_1/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="mdh-sic-3.1">
+      <CLASSES>
+        <root url="jar://C:/lib/sic/RELEASE-3_1/sic.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/release/sic/src" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="mdh-sic-4.1.1">
+      <CLASSES>
+        <root url="jar://C:/lib/sic/RELEASE-4_1_1/shared/lib/sic-shared.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/sic/RELEASE-4_1_1/shared/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="mdh-sic-4.2">
+      <CLASSES>
+        <root url="jar://C:/lib/sic/RELEASE-4_2/shared/lib/sic-shared.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/sic/RELEASE-4_2/shared/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="mdh-studieinformation-3.4">
+      <CLASSES>
+        <root url="jar://C:/lib/studieinformation/RELEASE-3_4/studieinformation.jar!/" />
+      </CLASSES>
+      <JAVADOC />
+      <SOURCES />
+    </library>
+    <library name="mdh-studieinformation-4.0">
+      <CLASSES>
+        <root url="jar://C:/lib/studieinformation/RELEASE-4_0/shared/lib/studieinformation-shared.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/studieinformation/RELEASE-4_0/shared/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="mdh-studieinformation-4.2.1">
+      <CLASSES>
+        <root url="jar://C:/lib/studieinformation/RELEASE-4_2_1/shared/lib/studieinformation-shared.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/studieinformation/RELEASE-4_2_1/shared/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="mdh-studieinformation-admin-3.5.2">
+      <CLASSES>
+        <root url="jar://C:/lib/studieinformation/RELEASE-3_5_2/studieinformation-admin.jar!/" />
+      </CLASSES>
+      <JAVADOC />
+      <SOURCES />
+    </library>
+    <library name="mdh-swing-1.1">
+      <CLASSES>
+        <root url="jar://C:/lib/swing/RELEASE-1_1/swing.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/swing/RELEASE-1_1/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="mdh-swing-1.2">
+      <CLASSES>
+        <root url="jar://C:/lib/swing/RELEASE-1_2/swing.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/swing/RELEASE-1_2/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="mdh-taglib-html-1.5">
+      <CLASSES>
+        <root url="jar://C:/lib/taglib/RELEASE-1_5/html/lib/taglib-html.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/taglib/RELEASE-1_5/html/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="mdh-taglib-html-1.6">
+      <CLASSES>
+        <root url="jar://C:/lib/taglib/RELEASE-1_6/html/lib/taglib-html.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/taglib/RELEASE-1_6/html/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="mdh-taglib-sprak-1.5">
+      <CLASSES>
+        <root url="jar://C:/lib/taglib/RELEASE-1_5/sprak/lib/taglib-sprak.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/taglib/RELEASE-1_5/sprak/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="mdh-taglib-sprak-1.6">
+      <CLASSES>
+        <root url="jar://C:/lib/taglib/RELEASE-1_6/sprak/lib/taglib-sprak.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/taglib/RELEASE-1_6/sprak/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="mdh-taglib-token-1.5">
+      <CLASSES>
+        <root url="jar://C:/lib/taglib/RELEASE-1_5/token/lib/taglib-token.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/taglib/RELEASE-1_5/token/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="mdh-taglib-token-1.6">
+      <CLASSES>
+        <root url="jar://C:/lib/taglib/RELEASE-1_6/token/lib/taglib-token.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/taglib/RELEASE-1_6/token/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="mdh-util-2.0.1">
+      <CLASSES>
+        <root url="jar://C:/lib/util/RELEASE-2_0_1/util.jar!/" />
+      </CLASSES>
+      <JAVADOC />
+      <SOURCES />
+    </library>
+    <library name="mdh-util-2.1">
+      <CLASSES>
+        <root url="jar://C:/lib/util/RELEASE-2_1/util.jar!/" />
+      </CLASSES>
+      <JAVADOC />
+      <SOURCES />
+    </library>
+    <library name="mdh-util-2.2">
+      <CLASSES>
+        <root url="jar://C:/lib/util/RELEASE-2_2/util.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/util/RELEASE-2_2/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="mdh-util-2.3">
+      <CLASSES>
+        <root url="jar://C:/lib/util/RELEASE-2_3/util.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/util/RELEASE-2_3/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="mdh-util-2.3.1">
+      <CLASSES>
+        <root url="jar://C:/lib/util/RELEASE-2_3_1/util.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/util/RELEASE-2_3_1/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="mdh-util-applet-2.2">
+      <CLASSES>
+        <root url="jar://C:/lib/util/RELEASE-2_2/util-applet.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/util/RELEASE-2_2/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="mdh-util-applet-2.3.1">
+      <CLASSES>
+        <root url="jar://C:/lib/util/RELEASE-2_3_1/util-applet.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/util/RELEASE-2_3_1/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="mysql-2.0">
+      <CLASSES>
+        <root url="jar://C:/lib/ext/mysql/2_0/mysql.jar!/" />
+      </CLASSES>
+      <JAVADOC />
+      <SOURCES />
+    </library>
+    <library name="mysql-3.0">
+      <CLASSES>
+        <root url="jar://C:/lib/ext/mysql/3_0/mysql.jar!/" />
+      </CLASSES>
+      <JAVADOC />
+      <SOURCES />
+    </library>
+    <library name="oracle">
+      <CLASSES>
+        <root url="jar://C:/lib/dist/classes12.zip!/" />
+      </CLASSES>
+      <JAVADOC />
+      <SOURCES />
+    </library>
+    <library name="oracle-8.1">
+      <CLASSES>
+        <root url="jar://C:/lib/ext/oracle/8_1/oracle.jar!/" />
+      </CLASSES>
+      <JAVADOC />
+      <SOURCES />
+    </library>
+    <library name="oru-2.0.1">
+      <CLASSES>
+        <root url="jar://C:/lib/oru/RELEASE-2_0_1/oru.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/oru/RELEASE-2_0_1/docs/api" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="servlet-api-2.3">
+      <CLASSES>
+        <root url="jar://C:/lib/ext/servlet/2_3/servlet.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="file://C:/lib/ext/servlet/2_3/servlet-2_3-fcs-docs" />
+        <root url="file://C:/lib/ext/servlet/2_3/jsp-1_2-fcs-docs" />
+      </JAVADOC>
+      <SOURCES />
+    </library>
+    <library name="westermarck-vcalendar">
+      <CLASSES>
+        <root url="jar://C:/lib/ext/westermarck-vcalendar/westermarck-vcalendar.jar!/" />
+      </CLASSES>
+      <JAVADOC />
+      <SOURCES />
+    </library>
+    <library name="log4jmonitor">
+      <CLASSES>
+        <root url="jar://C:/Program/IntelliJ-IDEA-3.0.5/lib/log4jmonitor.jar!/" />
+      </CLASSES>
+      <JAVADOC />
+      <SOURCES />
+    </library>
+  </component>
+</application>
\ No newline at end of file
diff --git a/java/java-tests/testData/moduleRootManager/convertor34/scr25298/before/library.table.xml b/java/java-tests/testData/moduleRootManager/convertor34/scr25298/before/library.table.xml
new file mode 100644
index 0000000..f2c8bb7
--- /dev/null
+++ b/java/java-tests/testData/moduleRootManager/convertor34/scr25298/before/library.table.xml
@@ -0,0 +1,2049 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<application>
+  <component name="ProjectLibraryTable">
+    <library>
+      <name value="activation" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/ext/jaf/1_0_1/activation.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/ext/jaf/1_0_1/docs/javadocs" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="comm-2.0" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/ext/comm/comm.jar!/" />
+            <root type="simple" url="file://C:/lib/ext/comm" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/ext/comm/javadocs" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="dennislundberg-codegeneration-2.0" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/dennislundberg-codegeneration/RELEASE-2_0/codegeneration.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite" />
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="dennislundberg-skatt-1.0" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/dennislundberg-skatt/RELEASE-1_0/dennislundberg-skatt.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/dennislundberg-skatt/RELEASE-1_0/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="itext-1.00" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/ext/itext/itext-1.00.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite" />
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="itext-1.01" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/ext/itext/itext-1.01.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite" />
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="jakarta-commons-lang-1.0.1" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/ext/jakarta-commons/commons-lang-1.0.1/commons-lang-1.0.1.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/ext/jakarta-commons/commons-lang-1.0.1/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="jakarta-commons-lang-2.0" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/ext/jakarta-commons/commons-lang-2.0/commons-lang-2.0.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/ext/jakarta-commons/commons-lang-2.0/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="jakarta-commons-logging-1.0.2" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/ext/jakarta-commons/commons-logging-1.0.2/commons-logging.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/ext/jakarta-commons/commons-logging-1.0.2/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="jakarta-commons-logging-1.0.3" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/ext/jakarta-commons/commons-logging-1.0.3/commons-logging.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/ext/jakarta-commons/commons-logging-1.0.3/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="jndi" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/ext/jndi/1_2_1/lib/jndi.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/ext/jndi/1_2_1/ldap/doc/ldapcontrols" />
+            <root type="simple" url="file://C:/lib/ext/jndi/1_2_1/ldap/doc/sasl" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="jsse" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/ext/jsse/lib/jcert.jar!/" />
+            <root type="simple" url="jar://C:/lib/ext/jsse/lib/jnet.jar!/" />
+            <root type="simple" url="jar://C:/lib/ext/jsse/lib/jsse.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/ext/jsse/doc/apidoc" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="jstl-1.0" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/ext/jakarta-taglibs/standard-1.0.3/lib/jstl.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/ext/jakarta-taglibs/standard-1.0.3/javadoc" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="jta" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/ext/jta/jta20.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite" />
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="junit" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/ext/junit/3_8_1/junit.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/ext/junit/3_8_1/javadoc" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="log4j" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/ext/jakarta-log4j/1.2.8/dist/lib/log4j-1.2.8.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/ext/jakarta-log4j/1.2.8/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mail-1.1.3" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/ext/javamail/javamail-1.1.3/mail.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/ext/javamail/javamail-1.1.3/docs/javadocs" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mail-1.2" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/ext/javamail/javamail-1.2/mail.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/ext/javamail/javamail-1.2/docs/javadocs" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-application-1.1.3" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/application/RELEASE-1_1_3/application.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/application/RELEASE-1_1_3/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-awt-applet-2.2.4" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/awt/RELEASE-2_2_4/awt-applet.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/awt/RELEASE-2_2_4/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-databas-1.1.2" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/databas/RELEASE-1_1_2/databas.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/databas/RELEASE-1_1_2/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-databas-util-1.1.1" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/databas-util/RELEASE-1_1_1/databas-util.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite" />
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-databas-util-1.1.2" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/databas-util/RELEASE-1_1_2/databas-util.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/databas-util/RELEASE-1_1_2/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-databas-util-applet-1.1.2" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/databas-util/RELEASE-1_1_2/databas-util-applet.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/databas-util/RELEASE-1_1_2/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-epost-1.0.1" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/epost/RELEASE-1_0_1/epost.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite" />
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-epost-1.1.1" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/epost/RELEASE-1_1_1/epost.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/epost/RELEASE-1_1_1/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-epost-2.0" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/epost/RELEASE-2_0/shared/lib/epost-shared.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/epost/RELEASE-2_0/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-html-1.6.2" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/html/RELEASE-1_6_2/html.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite" />
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-html-1.6.4" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/html/RELEASE-1_6_4/html.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite" />
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-html-2.0.1" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/html/RELEASE-2_0_1/html.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/html/RELEASE-2_0_1/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-html-2.1" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/html/RELEASE-2_1/html.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/html/RELEASE-2_1/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-ladok-1.2" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/ladok/RELEASE-1_2/ladok.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite" />
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-ladok-1.3" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/ladok/RELEASE-1_3/ladok.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite" />
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-ladok-1.4" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/ladok/RELEASE-1_4/ladok.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite" />
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-ladok-2.0" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/ladok/RELEASE-2_0/shared/lib/ladok-shared.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/ladok/RELEASE-2_0/shared/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-ladok-2.1" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/ladok/RELEASE-2_1/shared/lib/ladok-shared.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/ladok/RELEASE-2_1/shared/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-ladok-2.2" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/ladok/RELEASE-2_2/shared/lib/ladok-shared.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/ladok/RELEASE-2_2/shared/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-nds-2.3" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/nds/RELEASE-2_3/nds.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite" />
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-nds-2.4" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/nds/RELEASE-2_4/nds.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/nds/RELEASE-2_4/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-nds-admin-2.3" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/nds/RELEASE-2_3/nds-admin.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite" />
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-nds-admin-2.4" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/nds/RELEASE-2_4/nds-admin.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/nds/RELEASE-2_4/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-nyhet-2.5" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite">
+            <root type="simple" url="file://C:/release/nyhet/src" />
+          </root>
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/nyhet/RELEASE-2_5/nyhet.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite" />
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-nyhet-3.0.1" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/nyhet/RELEASE-3_0_1/shared/lib/nyhet-shared.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/nyhet/RELEASE-3_0_1/shared/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-pas-admin-1.2.1" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite">
+            <root type="simple" url="file://C:/release/pas/src" />
+          </root>
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/pas/RELEASE-1_2_1/pas-admin.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite" />
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-passage-admin-2.5" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite">
+            <root type="simple" url="file://C:/release/passage/src" />
+          </root>
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/passage/RELEASE-2_5/passage-admin.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite" />
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-personal-5.0" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite">
+            <root type="simple" url="file://C:/release/personal/shared/src" />
+          </root>
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/personal/RELEASE-5_0/shared/lib/personal-shared.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite" />
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-personal-5.3" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite">
+            <root type="simple" url="file://C:/release/personal/shared/src" />
+          </root>
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/personal/RELEASE-5_3/shared/lib/personal-shared.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite" />
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-personal-5.3.1" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite">
+            <root type="simple" url="file://C:/release/personal/shared/src" />
+          </root>
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/personal/RELEASE-5_3_1/shared/lib/personal-shared.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite" />
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-portal-2.1" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/portal/RELEASE-2_1/portal/lib/portal.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/portal/RELEASE-2_1/portal/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-robot-1.1" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/robot/RELEASE-1_1/robot.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/robot/RELEASE-1_1/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-schema-2.7" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite">
+            <root type="simple" url="file://C:/release/schema/src" />
+          </root>
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/schema/RELEASE-2_7/schema.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite" />
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-schema-3.0.2" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/schema/RELEASE-3_0_2/shared/lib/schema-shared.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/schema/RELEASE-3_0_2/shared/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-schema-3.0.3" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/schema/RELEASE-3_0_3/shared/lib/schema-shared.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/schema/RELEASE-3_0_3/shared/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-servlet-1.4.2" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/servlet/RELEASE-1_4_2/servlet.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite" />
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-servlet-1.4.3" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/servlet/RELEASE-1_4_3/servlet.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite" />
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-servlet-2.1" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/servlet/RELEASE-2_1/servlet.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/servlet/RELEASE-2_1_1/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-servlet-2.1.1" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/servlet/RELEASE-2_1_1/servlet.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/servlet/RELEASE-2_1_1/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-sic-3.1" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/sic/RELEASE-3_1/sic.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/release/sic/src" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-sic-4.1.1" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/sic/RELEASE-4_1_1/shared/lib/sic-shared.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/sic/RELEASE-4_1_1/shared/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-sic-4.2" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/sic/RELEASE-4_2/shared/lib/sic-shared.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/sic/RELEASE-4_2/shared/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-studieinformation-3.4" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/studieinformation/RELEASE-3_4/studieinformation.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite" />
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-studieinformation-4.0" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/studieinformation/RELEASE-4_0/shared/lib/studieinformation-shared.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/studieinformation/RELEASE-4_0/shared/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-studieinformation-4.2.1" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/studieinformation/RELEASE-4_2_1/shared/lib/studieinformation-shared.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/studieinformation/RELEASE-4_2_1/shared/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-studieinformation-admin-3.5.2" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/studieinformation/RELEASE-3_5_2/studieinformation-admin.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite" />
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-swing-1.1" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/swing/RELEASE-1_1/swing.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/swing/RELEASE-1_1/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-swing-1.2" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/swing/RELEASE-1_2/swing.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/swing/RELEASE-1_2/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-taglib-html-1.5" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/taglib/RELEASE-1_5/html/lib/taglib-html.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/taglib/RELEASE-1_5/html/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-taglib-html-1.6" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/taglib/RELEASE-1_6/html/lib/taglib-html.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/taglib/RELEASE-1_6/html/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-taglib-sprak-1.5" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/taglib/RELEASE-1_5/sprak/lib/taglib-sprak.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/taglib/RELEASE-1_5/sprak/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-taglib-sprak-1.6" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/taglib/RELEASE-1_6/sprak/lib/taglib-sprak.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/taglib/RELEASE-1_6/sprak/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-taglib-token-1.5" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/taglib/RELEASE-1_5/token/lib/taglib-token.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/taglib/RELEASE-1_5/token/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-taglib-token-1.6" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/taglib/RELEASE-1_6/token/lib/taglib-token.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/taglib/RELEASE-1_6/token/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-util-2.0.1" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/util/RELEASE-2_0_1/util.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite" />
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-util-2.1" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/util/RELEASE-2_1/util.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite" />
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-util-2.2" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/util/RELEASE-2_2/util.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/util/RELEASE-2_2/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-util-2.3" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/util/RELEASE-2_3/util.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/util/RELEASE-2_3/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-util-2.3.1" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/util/RELEASE-2_3_1/util.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/util/RELEASE-2_3_1/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-util-applet-2.2" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/util/RELEASE-2_2/util-applet.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/util/RELEASE-2_2/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mdh-util-applet-2.3.1" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/util/RELEASE-2_3_1/util-applet.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/util/RELEASE-2_3_1/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mysql-2.0" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/ext/mysql/2_0/mysql.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite" />
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="mysql-3.0" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/ext/mysql/3_0/mysql.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite" />
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="oracle" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/dist/classes12.zip!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite" />
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="oracle-8.1" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/ext/oracle/8_1/oracle.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite" />
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="oru-2.0.1" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/oru/RELEASE-2_0_1/oru.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/oru/RELEASE-2_0_1/docs/api" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="servlet-api-2.3" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/ext/servlet/2_3/servlet.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite">
+            <root type="simple" url="file://C:/lib/ext/servlet/2_3/servlet-2_3-fcs-docs" />
+            <root type="simple" url="file://C:/lib/ext/servlet/2_3/jsp-1_2-fcs-docs" />
+          </root>
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="westermarck-vcalendar" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/lib/ext/westermarck-vcalendar/westermarck-vcalendar.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite" />
+        </javadocPath>
+      </roots>
+    </library>
+    <library>
+      <name value="log4jmonitor" />
+      <roots>
+        <projectPath>
+          <root type="composite" />
+        </projectPath>
+        <sourcePath>
+          <root type="composite" />
+        </sourcePath>
+        <classPath>
+          <root type="composite">
+            <root type="simple" url="jar://C:/Program/IntelliJ-IDEA-3.0.5/lib/log4jmonitor.jar!/" />
+          </root>
+        </classPath>
+        <excludePath>
+          <root type="composite" />
+        </excludePath>
+        <javadocPath>
+          <root type="composite" />
+        </javadocPath>
+      </roots>
+    </library>
+  </component>
+</application>
+
diff --git a/java/java-tests/testData/moduleRootManager/convertor34/test1/after/prj.iml b/java/java-tests/testData/moduleRootManager/convertor34/test1/after/prj.iml
new file mode 100644
index 0000000..9972859
--- /dev/null
+++ b/java/java-tests/testData/moduleRootManager/convertor34/test1/after/prj.iml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module version="4" relativePaths="true">
+<component name="NewModuleRootManager">
+  <content url="file://$MODULE_DIR$">
+    <sourceFolder isTestSource="false" url="file://$MODULE_DIR$/src" />
+  </content>
+  <orderEntry type="sourceFolder" />
+  <orderEntry type="jdk" jdkName="java version &quot;1.4.2&quot;" />
+  <output url="file://$MODULE_DIR$/classes" />
+  <output-test url="file://$MODULE_DIR$/classes" />
+  <exclude-output />
+</component>
+</module>
diff --git a/java/java-tests/testData/moduleRootManager/convertor34/test1/after/prj.ipr b/java/java-tests/testData/moduleRootManager/convertor34/test1/after/prj.ipr
new file mode 100644
index 0000000..e755885
--- /dev/null
+++ b/java/java-tests/testData/moduleRootManager/convertor34/test1/after/prj.ipr
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4" relativePaths="true">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module filepath="$PROJECT_DIR$/prj.iml" fileurl="file://$PROJECT_DIR$/prj.iml" />
+    </modules>
+  </component>
+</project>
+
diff --git a/java/java-tests/testData/moduleRootManager/convertor34/test1/before/prj.ipr b/java/java-tests/testData/moduleRootManager/convertor34/test1/before/prj.ipr
new file mode 100644
index 0000000..97b1641
--- /dev/null
+++ b/java/java-tests/testData/moduleRootManager/convertor34/test1/before/prj.ipr
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="3" relativePaths="false">
+  <component name="ProjectRootManager" version="2">
+    <jdk name="java version &quot;1.4.2&quot;" />
+    <projectPath>
+      <root type="composite">
+        <root type="simple" url="file://$PROJECT_DIR$" />
+      </root>
+    </projectPath>
+    <sourcePath>
+      <root type="composite">
+        <root type="simple" url="file://$PROJECT_DIR$/src" />
+        <root type="jdk" rootType="sourcePath" name="java version &quot;1.4.2&quot;" />
+      </root>
+    </sourcePath>
+    <classPath>
+      <root type="composite">
+        <root type="output" />
+        <root type="jdk" rootType="classPath" name="java version &quot;1.4.2&quot;" />
+      </root>
+    </classPath>
+    <excludePath>
+      <root type="composite">
+        <root type="excludedOutput" />
+      </root>
+    </excludePath>
+    <javadocPath>
+      <root type="composite">
+        <root type="jdk" rootType="javadocPath" name="java version &quot;1.4.2&quot;" />
+      </root>
+    </javadocPath>
+    <assert_keyword enabled="no" />
+    <exclude_output enabled="yes" />
+  </component>
+  <component name="CompilerConfiguration">
+    <option name="DEFAULT_COMPILER" value="Javac" />
+    <option name="SYNCHRONIZE_OUTPUT_DIRECTORY" value="false" />
+    <option name="DEFAULT_OUTPUT_PATH" value="$PROJECT_DIR$/classes" />
+    <option name="OUTPUT_MODE" value="single" />
+    <resourceExtensions>
+      <entry name=".+\.(properties|xml|html)" />
+      <entry name=".+\.(gif|png|jpeg|jpg)" />
+    </resourceExtensions>
+  </component>
+  <component name="JavacSettings">
+    <option name="DEBUGGING_INFO" value="true" />
+    <option name="GENERATE_NO_WARNINGS" value="false" />
+    <option name="DEPRECATION" value="true" />
+    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+    <option name="MAXIMUM_HEAP_SIZE" value="128" />
+  </component>
+  <component name="JikesSettings">
+    <option name="JIKES_PATH" value="" />
+    <option name="DEBUGGING_INFO" value="true" />
+    <option name="DEPRECATION" value="true" />
+    <option name="GENERATE_NO_WARNINGS" value="false" />
+    <option name="GENERATE_MAKE_FILE_DEPENDENCIES" value="false" />
+    <option name="DO_FULL_DEPENDENCE_CHECK" value="false" />
+    <option name="IS_EMACS_ERRORS_MODE" value="true" />
+    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+  </component>
+  <component name="AntConfiguration">
+    <option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
+    <option name="FILTER_TARGETS" value="false" />
+  </component>
+  <component name="JavadocGenerationManager">
+    <option name="OUTPUT_DIRECTORY" />
+    <option name="OPTION_SCOPE" value="protected" />
+    <option name="OPTION_HIERARCHY" value="true" />
+    <option name="OPTION_NAVIGATOR" value="true" />
+    <option name="OPTION_INDEX" value="true" />
+    <option name="OPTION_SEPARATE_INDEX" value="true" />
+    <option name="OPTION_DOCUMENT_TAG_USE" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_AUTHOR" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_VERSION" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_DEPRECATED" value="true" />
+    <option name="OPTION_DEPRECATED_LIST" value="true" />
+    <option name="OTHER_OPTIONS" value="" />
+    <option name="HEAP_SIZE" />
+    <option name="OPEN_IN_BROWSER" value="true" />
+  </component>
+  <component name="WebManager">
+    <option enabled="false" />
+  </component>
+  <component name="WebRootContainer" />
+  <component name="EjbManager" enabled="false" />
+  <component name="JUnitProjectSettings">
+    <option name="TEST_RUNNER" value="UI" />
+  </component>
+  <component name="EntryPointsManager">
+    <entry_points />
+  </component>
+  <component name="EjbActionsConfiguration">
+    <option name="NEW_MESSAGE_BEAN_LAST_PACKAGE" value="" />
+    <option name="NEW_ENTITY_BEAN_LAST_PACKAGE" value="" />
+    <option name="NEW_SESSION_BEAN_LAST_PACKAGE" value="" />
+  </component>
+  <component name="CodeStyleManager">
+    <option name="USE_DEFAULT_CODE_STYLE_SCHEME" value="true" />
+    <option name="CODE_STYLE_SCHEME" value="" />
+  </component>
+  <component name="ExportToHTMLSettings">
+    <option name="PRINT_LINE_NUMBERS" value="false" />
+    <option name="OPEN_IN_BROWSER" value="false" />
+    <option name="OUTPUT_DIRECTORY" />
+  </component>
+</project>
+
diff --git a/java/java-tests/testData/moduleRootManager/convertor34/test2/after/prj2.iml b/java/java-tests/testData/moduleRootManager/convertor34/test2/after/prj2.iml
new file mode 100644
index 0000000..b71ebe4
--- /dev/null
+++ b/java/java-tests/testData/moduleRootManager/convertor34/test2/after/prj2.iml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module version="4" relativePaths="true">
+<component name="NewModuleRootManager">
+  <content url="file://$MODULE_DIR$">
+    <sourceFolder isTestSource="false" url="file://$MODULE_DIR$/src" />
+  </content>
+  <orderEntry type="module-library">
+    <library>
+      <CLASSES>
+        <root url="jar://$MODULE_DIR$/openapi.jar!/" />
+      </CLASSES>
+    </library>
+  </orderEntry>
+  <orderEntry type="jdk" jdkName="java version &quot;1.4.2&quot;" />
+  <orderEntry type="sourceFolder" />
+  <output url="file://$MODULE_DIR$/classes" />
+  <output-test url="file://$MODULE_DIR$/classes" />
+  <exclude-output />
+</component>
+</module>
diff --git a/java/java-tests/testData/moduleRootManager/convertor34/test2/after/prj2.ipr b/java/java-tests/testData/moduleRootManager/convertor34/test2/after/prj2.ipr
new file mode 100644
index 0000000..97d572b
--- /dev/null
+++ b/java/java-tests/testData/moduleRootManager/convertor34/test2/after/prj2.ipr
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4" relativePaths="true">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module filepath="$PROJECT_DIR$/prj2.iml" fileurl="file://$PROJECT_DIR$/prj2.iml"/>
+    </modules>
+  </component>
+</project>
+
diff --git a/java/java-tests/testData/moduleRootManager/convertor34/test2/before/prj2.ipr b/java/java-tests/testData/moduleRootManager/convertor34/test2/before/prj2.ipr
new file mode 100644
index 0000000..3d90f1e
--- /dev/null
+++ b/java/java-tests/testData/moduleRootManager/convertor34/test2/before/prj2.ipr
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="3" relativePaths="false">
+  <component name="ProjectRootManager" version="2">
+    <jdk name="java version &quot;1.4.2&quot;" />
+    <projectPath>
+      <root type="composite">
+        <root type="simple" url="file://$PROJECT_DIR$" />
+      </root>
+    </projectPath>
+    <sourcePath>
+      <root type="composite">
+        <root type="simple" url="file://$PROJECT_DIR$/src" />
+        <root type="jdk" rootType="sourcePath" name="java version &quot;1.4.2&quot;" />
+      </root>
+    </sourcePath>
+    <classPath>
+      <root type="composite">
+        <root type="simple" url="jar://$PROJECT_DIR$/openapi.jar!/" />
+        <root type="jdk" rootType="classPath" name="java version &quot;1.4.2&quot;" />
+        <root type="output" />
+      </root>
+    </classPath>
+    <excludePath>
+      <root type="composite">
+        <root type="excludedOutput" />
+      </root>
+    </excludePath>
+    <javadocPath>
+      <root type="composite">
+        <root type="jdk" rootType="javadocPath" name="java version &quot;1.4.2&quot;" />
+      </root>
+    </javadocPath>
+    <assert_keyword enabled="no" />
+    <exclude_output enabled="yes" />
+  </component>
+  <component name="CompilerConfiguration">
+    <option name="DEFAULT_COMPILER" value="Javac" />
+    <option name="SYNCHRONIZE_OUTPUT_DIRECTORY" value="false" />
+    <option name="DEFAULT_OUTPUT_PATH" value="$PROJECT_DIR$/classes" />
+    <option name="OUTPUT_MODE" value="single" />
+    <resourceExtensions>
+      <entry name=".+\.(properties|xml|html)" />
+      <entry name=".+\.(gif|png|jpeg|jpg)" />
+    </resourceExtensions>
+  </component>
+  <component name="JavacSettings">
+    <option name="DEBUGGING_INFO" value="true" />
+    <option name="GENERATE_NO_WARNINGS" value="false" />
+    <option name="DEPRECATION" value="true" />
+    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+    <option name="MAXIMUM_HEAP_SIZE" value="128" />
+  </component>
+  <component name="JikesSettings">
+    <option name="JIKES_PATH" value="" />
+    <option name="DEBUGGING_INFO" value="true" />
+    <option name="DEPRECATION" value="true" />
+    <option name="GENERATE_NO_WARNINGS" value="false" />
+    <option name="GENERATE_MAKE_FILE_DEPENDENCIES" value="false" />
+    <option name="DO_FULL_DEPENDENCE_CHECK" value="false" />
+    <option name="IS_EMACS_ERRORS_MODE" value="true" />
+    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+  </component>
+  <component name="AntConfiguration">
+    <option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
+    <option name="FILTER_TARGETS" value="false" />
+  </component>
+  <component name="JavadocGenerationManager">
+    <option name="OUTPUT_DIRECTORY" />
+    <option name="OPTION_SCOPE" value="protected" />
+    <option name="OPTION_HIERARCHY" value="true" />
+    <option name="OPTION_NAVIGATOR" value="true" />
+    <option name="OPTION_INDEX" value="true" />
+    <option name="OPTION_SEPARATE_INDEX" value="true" />
+    <option name="OPTION_DOCUMENT_TAG_USE" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_AUTHOR" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_VERSION" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_DEPRECATED" value="true" />
+    <option name="OPTION_DEPRECATED_LIST" value="true" />
+    <option name="OTHER_OPTIONS" value="" />
+    <option name="HEAP_SIZE" />
+    <option name="OPEN_IN_BROWSER" value="true" />
+  </component>
+  <component name="WebManager">
+    <option enabled="false" />
+  </component>
+  <component name="WebRootContainer" />
+  <component name="EjbManager" enabled="false" />
+  <component name="JUnitProjectSettings">
+    <option name="TEST_RUNNER" value="UI" />
+  </component>
+  <component name="EntryPointsManager">
+    <entry_points />
+  </component>
+  <component name="EjbActionsConfiguration">
+    <option name="NEW_MESSAGE_BEAN_LAST_PACKAGE" value="" />
+    <option name="NEW_ENTITY_BEAN_LAST_PACKAGE" value="" />
+    <option name="NEW_SESSION_BEAN_LAST_PACKAGE" value="" />
+  </component>
+  <component name="CodeStyleManager">
+    <option name="USE_DEFAULT_CODE_STYLE_SCHEME" value="true" />
+    <option name="CODE_STYLE_SCHEME" value="" />
+  </component>
+  <component name="ExportToHTMLSettings">
+    <option name="PRINT_LINE_NUMBERS" value="false" />
+    <option name="OPEN_IN_BROWSER" value="false" />
+    <option name="OUTPUT_DIRECTORY" />
+  </component>
+</project>
+
diff --git a/java/java-tests/testData/moduleRootManager/convertor34/test3/after/prj3.iml b/java/java-tests/testData/moduleRootManager/convertor34/test3/after/prj3.iml
new file mode 100644
index 0000000..07586cb
--- /dev/null
+++ b/java/java-tests/testData/moduleRootManager/convertor34/test3/after/prj3.iml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module version="4" relativePaths="true">
+<component name="NewModuleRootManager">
+  <content url="file://$MODULE_DIR$/p1">
+    <sourceFolder isTestSource="false" url="file://$MODULE_DIR$/p1/src" />
+    <excludeFolder url="file://$MODULE_DIR$/p1/excluded1" />
+  </content>
+  <content url="file://$MODULE_DIR$/p2">
+    <sourceFolder isTestSource="false" url="file://$MODULE_DIR$/p2/src" />
+    <excludeFolder url="file://$MODULE_DIR$/p2/src/excluded2" />
+  </content>
+  <orderEntry type="sourceFolder" />
+  <orderEntry type="jdk" jdkName="java version &quot;1.4.2&quot;" />
+  <orderEntry type="library" name="XYZ" level="application" />
+  <output url="file://$MODULE_DIR$/classes" />
+  <output-test url="file://$MODULE_DIR$/classes" />
+  <exclude-output />
+</component>
+</module>
diff --git a/java/java-tests/testData/moduleRootManager/convertor34/test3/after/prj3.ipr b/java/java-tests/testData/moduleRootManager/convertor34/test3/after/prj3.ipr
new file mode 100644
index 0000000..b666af4
--- /dev/null
+++ b/java/java-tests/testData/moduleRootManager/convertor34/test3/after/prj3.ipr
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4" relativePaths="true">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module filepath="$PROJECT_DIR$/prj3.iml" fileurl="file://$PROJECT_DIR$/prj3.iml" />
+    </modules>
+  </component>
+</project>
\ No newline at end of file
diff --git a/java/java-tests/testData/moduleRootManager/convertor34/test3/before/prj3.ipr b/java/java-tests/testData/moduleRootManager/convertor34/test3/before/prj3.ipr
new file mode 100644
index 0000000..4f4f800
--- /dev/null
+++ b/java/java-tests/testData/moduleRootManager/convertor34/test3/before/prj3.ipr
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="3" relativePaths="true">
+  <component name="ProjectRootManager" version="2">
+    <jdk name="java version &quot;1.4.2&quot;" />
+    <projectPath>
+      <root type="composite">
+        <root type="simple" url="file://$PROJECT_DIR$/p1" />
+        <root type="simple" url="file://$PROJECT_DIR$/p2" />
+      </root>
+    </projectPath>
+    <sourcePath>
+      <root type="composite">
+        <root type="simple" url="file://$PROJECT_DIR$/p1/src" />
+        <root type="jdk" rootType="sourcePath" name="java version &quot;1.4.2&quot;" />
+        <root type="simple" url="file://$PROJECT_DIR$/p2/src" />
+        <root type="library" rootType="sourcePath" name="XYZ" />
+      </root>
+    </sourcePath>
+    <classPath>
+      <root type="composite">
+        <root type="output" />
+        <root type="jdk" rootType="classPath" name="java version &quot;1.4.2&quot;" />
+        <root type="library" rootType="classPath" name="XYZ" />
+      </root>
+    </classPath>
+    <excludePath>
+      <root type="composite">
+        <root type="excludedOutput" />
+        <root type="simple" url="file://$PROJECT_DIR$/p2/src/excluded2" />
+        <root type="simple" url="file://$PROJECT_DIR$/p1/excluded1" />
+        <root type="simple" url="file://$PROJECT_DIR$/excludedTop" />
+      </root>
+    </excludePath>
+    <javadocPath>
+      <root type="composite">
+        <root type="jdk" rootType="javadocPath" name="java version &quot;1.4.2&quot;" />
+      </root>
+    </javadocPath>
+    <assert_keyword enabled="no" />
+    <exclude_output enabled="yes" />
+  </component>
+  <component name="CompilerConfiguration">
+    <option name="DEFAULT_COMPILER" value="Javac" />
+    <option name="SYNCHRONIZE_OUTPUT_DIRECTORY" value="false" />
+    <option name="DEFAULT_OUTPUT_PATH" value="$PROJECT_DIR$/classes" />
+    <option name="OUTPUT_MODE" value="single" />
+    <resourceExtensions>
+      <entry name=".+\.(properties|xml|html)" />
+      <entry name=".+\.(gif|png|jpeg|jpg)" />
+    </resourceExtensions>
+  </component>
+  <component name="JavacSettings">
+    <option name="DEBUGGING_INFO" value="true" />
+    <option name="GENERATE_NO_WARNINGS" value="false" />
+    <option name="DEPRECATION" value="true" />
+    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+    <option name="MAXIMUM_HEAP_SIZE" value="128" />
+  </component>
+  <component name="JikesSettings">
+    <option name="JIKES_PATH" value="" />
+    <option name="DEBUGGING_INFO" value="true" />
+    <option name="DEPRECATION" value="true" />
+    <option name="GENERATE_NO_WARNINGS" value="false" />
+    <option name="GENERATE_MAKE_FILE_DEPENDENCIES" value="false" />
+    <option name="DO_FULL_DEPENDENCE_CHECK" value="false" />
+    <option name="IS_EMACS_ERRORS_MODE" value="true" />
+    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+  </component>
+  <component name="AntConfiguration">
+    <option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
+    <option name="FILTER_TARGETS" value="false" />
+  </component>
+  <component name="JavadocGenerationManager">
+    <option name="OUTPUT_DIRECTORY" />
+    <option name="OPTION_SCOPE" value="protected" />
+    <option name="OPTION_HIERARCHY" value="true" />
+    <option name="OPTION_NAVIGATOR" value="true" />
+    <option name="OPTION_INDEX" value="true" />
+    <option name="OPTION_SEPARATE_INDEX" value="true" />
+    <option name="OPTION_DOCUMENT_TAG_USE" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_AUTHOR" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_VERSION" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_DEPRECATED" value="true" />
+    <option name="OPTION_DEPRECATED_LIST" value="true" />
+    <option name="OTHER_OPTIONS" value="" />
+    <option name="HEAP_SIZE" />
+    <option name="OPEN_IN_BROWSER" value="true" />
+  </component>
+  <component name="WebManager">
+    <option enabled="false" />
+  </component>
+  <component name="WebRootContainer" />
+  <component name="EjbManager" enabled="false" />
+  <component name="JUnitProjectSettings">
+    <option name="TEST_RUNNER" value="UI" />
+  </component>
+  <component name="EntryPointsManager">
+    <entry_points />
+  </component>
+  <component name="EjbActionsConfiguration">
+    <option name="NEW_MESSAGE_BEAN_LAST_PACKAGE" value="" />
+    <option name="NEW_ENTITY_BEAN_LAST_PACKAGE" value="" />
+    <option name="NEW_SESSION_BEAN_LAST_PACKAGE" value="" />
+  </component>
+  <component name="CodeStyleManager">
+    <option name="USE_DEFAULT_CODE_STYLE_SCHEME" value="true" />
+    <option name="CODE_STYLE_SCHEME" value="" />
+  </component>
+  <component name="ExportToHTMLSettings">
+    <option name="PRINT_LINE_NUMBERS" value="false" />
+    <option name="OPEN_IN_BROWSER" value="false" />
+    <option name="OUTPUT_DIRECTORY" />
+  </component>
+</project>
+
diff --git a/java/java-tests/testData/moduleRootManager/convertor34/test4/after/prj4.iml b/java/java-tests/testData/moduleRootManager/convertor34/test4/after/prj4.iml
new file mode 100644
index 0000000..58313f8
--- /dev/null
+++ b/java/java-tests/testData/moduleRootManager/convertor34/test4/after/prj4.iml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module version="4" relativePaths="true">
+  <component name="NewModuleRootManager">
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder isTestSource="false" url="file://$MODULE_DIR$/src" />
+    </content>
+  <orderEntry type="sourceFolder" />
+  <orderEntry type="jdk" jdkName="java version &quot;1.4.1_02&quot;" />
+  <exclude-output />
+</component>
+</module>
diff --git a/java/java-tests/testData/moduleRootManager/convertor34/test4/after/prj4.ipr b/java/java-tests/testData/moduleRootManager/convertor34/test4/after/prj4.ipr
new file mode 100644
index 0000000..630f170
--- /dev/null
+++ b/java/java-tests/testData/moduleRootManager/convertor34/test4/after/prj4.ipr
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4" relativePaths="true">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module filepath="$PROJECT_DIR$/prj4.iml" fileurl="file://$PROJECT_DIR$/prj4.iml" />
+    </modules>
+  </component>
+</project>
\ No newline at end of file
diff --git a/java/java-tests/testData/moduleRootManager/convertor34/test4/before/prj4.ipr b/java/java-tests/testData/moduleRootManager/convertor34/test4/before/prj4.ipr
new file mode 100644
index 0000000..3a0b38c
--- /dev/null
+++ b/java/java-tests/testData/moduleRootManager/convertor34/test4/before/prj4.ipr
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="3" relativePaths="true">
+  <component name="ProjectRootManager" version="2">
+    <jdk name="java version &quot;1.4.1_02&quot;" />
+    <projectPath>
+      <root type="composite">
+        <root type="simple" url="file://$PROJECT_DIR$" />
+      </root>
+    </projectPath>
+    <sourcePath>
+      <root type="composite">
+        <root type="simple" url="file://$PROJECT_DIR$/src" />
+        <root type="jdk" rootType="sourcePath" name="java version &quot;1.4.1_02&quot;" />
+      </root>
+    </sourcePath>
+    <classPath>
+      <root type="composite">
+        <root type="output" />
+        <root type="jdk" rootType="classPath" name="java version &quot;1.4.1_02&quot;" />
+      </root>
+    </classPath>
+    <excludePath>
+      <root type="composite">
+        <root type="excludedOutput" />
+      </root>
+    </excludePath>
+    <javadocPath>
+      <root type="composite">
+        <root type="jdk" rootType="javadocPath" name="java version &quot;1.4.1_02&quot;" />
+      </root>
+    </javadocPath>
+    <assert_keyword enabled="no" />
+    <exclude_output enabled="yes" />
+  </component>
+  <component name="CompilerConfiguration">
+    <option name="DEFAULT_COMPILER" value="Javac" />
+    <option name="SYNCHRONIZE_OUTPUT_DIRECTORY" value="false" />
+    <option name="DEFAULT_OUTPUT_PATH" />
+    <option name="OUTPUT_MODE" value="single" />
+    <resourceExtensions>
+      <entry name=".+\.(properties|xml|html)" />
+      <entry name=".+\.(gif|png|jpeg|jpg)" />
+    </resourceExtensions>
+  </component>
+  <component name="JavacSettings">
+    <option name="DEBUGGING_INFO" value="true" />
+    <option name="GENERATE_NO_WARNINGS" value="false" />
+    <option name="DEPRECATION" value="true" />
+    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+    <option name="MAXIMUM_HEAP_SIZE" value="128" />
+  </component>
+  <component name="JikesSettings">
+    <option name="JIKES_PATH" value="" />
+    <option name="DEBUGGING_INFO" value="true" />
+    <option name="DEPRECATION" value="true" />
+    <option name="GENERATE_NO_WARNINGS" value="false" />
+    <option name="GENERATE_MAKE_FILE_DEPENDENCIES" value="false" />
+    <option name="DO_FULL_DEPENDENCE_CHECK" value="false" />
+    <option name="IS_EMACS_ERRORS_MODE" value="true" />
+    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+  </component>
+  <component name="AntConfiguration">
+    <option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
+    <option name="FILTER_TARGETS" value="false" />
+  </component>
+  <component name="JavadocGenerationManager">
+    <option name="OUTPUT_DIRECTORY" />
+    <option name="OPTION_SCOPE" value="protected" />
+    <option name="OPTION_HIERARCHY" value="true" />
+    <option name="OPTION_NAVIGATOR" value="true" />
+    <option name="OPTION_INDEX" value="true" />
+    <option name="OPTION_SEPARATE_INDEX" value="true" />
+    <option name="OPTION_DOCUMENT_TAG_USE" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_AUTHOR" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_VERSION" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_DEPRECATED" value="true" />
+    <option name="OPTION_DEPRECATED_LIST" value="true" />
+    <option name="OTHER_OPTIONS" value="" />
+    <option name="HEAP_SIZE" />
+    <option name="OPEN_IN_BROWSER" value="true" />
+  </component>
+  <component name="WebManager">
+    <option enabled="false" />
+  </component>
+  <component name="WebRootContainer" />
+  <component name="EjbManager" enabled="false" />
+  <component name="JUnitProjectSettings">
+    <option name="TEST_RUNNER" value="UI" />
+  </component>
+  <component name="EntryPointsManager">
+    <entry_points />
+  </component>
+  <component name="EjbActionsConfiguration">
+    <option name="NEW_MESSAGE_BEAN_LAST_PACKAGE" value="" />
+    <option name="NEW_ENTITY_BEAN_LAST_PACKAGE" value="" />
+    <option name="NEW_SESSION_BEAN_LAST_PACKAGE" value="" />
+  </component>
+  <component name="CodeStyleManager">
+    <option name="USE_DEFAULT_CODE_STYLE_SCHEME" value="true" />
+    <option name="CODE_STYLE_SCHEME" value="" />
+  </component>
+  <component name="ExportToHTMLSettings">
+    <option name="PRINT_LINE_NUMBERS" value="false" />
+    <option name="OPEN_IN_BROWSER" value="false" />
+    <option name="OUTPUT_DIRECTORY" />
+  </component>
+</project>
+
diff --git a/java/java-tests/testData/moduleRootManager/exportedModules/A/src/p/A.java b/java/java-tests/testData/moduleRootManager/exportedModules/A/src/p/A.java
new file mode 100644
index 0000000..149bb90
--- /dev/null
+++ b/java/java-tests/testData/moduleRootManager/exportedModules/A/src/p/A.java
@@ -0,0 +1,4 @@
+package p;
+
+public class A {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/moduleRootManager/exportedModules/B/src/p/B.java b/java/java-tests/testData/moduleRootManager/exportedModules/B/src/p/B.java
new file mode 100644
index 0000000..20e7bf3
--- /dev/null
+++ b/java/java-tests/testData/moduleRootManager/exportedModules/B/src/p/B.java
@@ -0,0 +1,4 @@
+package p;
+
+public class B {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/moduleRootManager/exportedModules/C/src/p/C.java b/java/java-tests/testData/moduleRootManager/exportedModules/C/src/p/C.java
new file mode 100644
index 0000000..1e3e1b6
--- /dev/null
+++ b/java/java-tests/testData/moduleRootManager/exportedModules/C/src/p/C.java
@@ -0,0 +1,4 @@
+package p;
+
+public class C {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/moduleRootManager/moduleLibraries/namedLibClasses/empty.txt b/java/java-tests/testData/moduleRootManager/moduleLibraries/namedLibClasses/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/moduleRootManager/moduleLibraries/namedLibClasses/empty.txt
diff --git a/java/java-tests/testData/moduleRootManager/moduleLibraries/test.iml b/java/java-tests/testData/moduleRootManager/moduleLibraries/test.iml
new file mode 100644
index 0000000..ad19605
--- /dev/null
+++ b/java/java-tests/testData/moduleRootManager/moduleLibraries/test.iml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module version="4" relativePaths="true">
+<component name="NewModuleRootManager" />
+</module>
\ No newline at end of file
diff --git a/java/java-tests/testData/moduleRootManager/moduleLibraries/unnamedLibClasses/empty.txt b/java/java-tests/testData/moduleRootManager/moduleLibraries/unnamedLibClasses/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/moduleRootManager/moduleLibraries/unnamedLibClasses/empty.txt
diff --git a/java/java-tests/testData/moduleRootManager/multiModuleEditing/rootsEditing/a/src/q/A.java b/java/java-tests/testData/moduleRootManager/multiModuleEditing/rootsEditing/a/src/q/A.java
new file mode 100644
index 0000000..19d4aa2
--- /dev/null
+++ b/java/java-tests/testData/moduleRootManager/multiModuleEditing/rootsEditing/a/src/q/A.java
@@ -0,0 +1,4 @@
+package q;
+
+class A {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/moduleRootManager/multiModuleEditing/rootsEditing/b/src/j/B.java b/java/java-tests/testData/moduleRootManager/multiModuleEditing/rootsEditing/b/src/j/B.java
new file mode 100644
index 0000000..b369250a
--- /dev/null
+++ b/java/java-tests/testData/moduleRootManager/multiModuleEditing/rootsEditing/b/src/j/B.java
@@ -0,0 +1,4 @@
+package j;
+
+class B {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/moduleRootManager/roots/test1/classes/y.txt b/java/java-tests/testData/moduleRootManager/roots/test1/classes/y.txt
new file mode 100644
index 0000000..202dbf3
--- /dev/null
+++ b/java/java-tests/testData/moduleRootManager/roots/test1/classes/y.txt
@@ -0,0 +1 @@
+zzzzz
\ No newline at end of file
diff --git a/java/java-tests/testData/moduleRootManager/roots/test1/x.txt b/java/java-tests/testData/moduleRootManager/roots/test1/x.txt
new file mode 100644
index 0000000..f0c1bd0
--- /dev/null
+++ b/java/java-tests/testData/moduleRootManager/roots/test1/x.txt
@@ -0,0 +1 @@
+blah blah blah
\ No newline at end of file
diff --git a/java/java-tests/testData/projectView/1/src/com/package1/Class2.java b/java/java-tests/testData/projectView/1/src/com/package1/Class2.java
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/projectView/1/src/com/package1/Class2.java
diff --git a/java/java-tests/testData/projectView/1/src/com/package1/Form1.form b/java/java-tests/testData/projectView/1/src/com/package1/Form1.form
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/projectView/1/src/com/package1/Form1.form
diff --git a/java/java-tests/testData/projectView/1/src/com/package1/Form1.java b/java/java-tests/testData/projectView/1/src/com/package1/Form1.java
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/projectView/1/src/com/package1/Form1.java
diff --git a/java/java-tests/testData/projectView/1/src/com/package1/Form2.form b/java/java-tests/testData/projectView/1/src/com/package1/Form2.form
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/projectView/1/src/com/package1/Form2.form
diff --git a/java/java-tests/testData/projectView/annoyingScrolling/src/com/package1/Class1.java b/java/java-tests/testData/projectView/annoyingScrolling/src/com/package1/Class1.java
new file mode 100644
index 0000000..b50e374
--- /dev/null
+++ b/java/java-tests/testData/projectView/annoyingScrolling/src/com/package1/Class1.java
@@ -0,0 +1,15 @@
+package com.package1;
+
+public class Class1 {
+  private boolean myField1;
+  public boolean myField2;
+  
+  public int getValue(){
+   return 0;
+  }
+  
+  public class InnerClass{
+    public int myInnerClassField;
+  }
+  
+}
diff --git a/java/java-tests/testData/projectView/autoscrollFromSourceOnOpening/src/com/package1/Class1.java b/java/java-tests/testData/projectView/autoscrollFromSourceOnOpening/src/com/package1/Class1.java
new file mode 100644
index 0000000..54ff9da
--- /dev/null
+++ b/java/java-tests/testData/projectView/autoscrollFromSourceOnOpening/src/com/package1/Class1.java
@@ -0,0 +1,30 @@
+/*
+ * 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.
+ */
+package com.package1;
+
+public class Class1 {
+  private boolean myField1;
+  public boolean myField2;
+  
+  public int getValue(){
+   return 0;
+  }
+  
+  public class InnerClass{
+    public int myInnerClassField;
+  }
+  
+}
diff --git a/java/java-tests/testData/projectView/fileStructureForClass/src/com/package1/Class1.java b/java/java-tests/testData/projectView/fileStructureForClass/src/com/package1/Class1.java
new file mode 100644
index 0000000..8d9b926
--- /dev/null
+++ b/java/java-tests/testData/projectView/fileStructureForClass/src/com/package1/Class1.java
@@ -0,0 +1,22 @@
+package com.package1;
+
+public class Class1 {
+
+  private String _myField2;
+  
+
+  class Inner2{
+
+  }
+
+  int _myField1;
+
+  class Inner1{
+
+  }
+
+  private void __method() {
+
+  }
+
+}
diff --git a/java/java-tests/testData/projectView/getParentObject/src/com/package1/Class1.java b/java/java-tests/testData/projectView/getParentObject/src/com/package1/Class1.java
new file mode 100644
index 0000000..92d4ea7
--- /dev/null
+++ b/java/java-tests/testData/projectView/getParentObject/src/com/package1/Class1.java
@@ -0,0 +1,12 @@
+package com.package1;
+
+public class Class1 {
+
+  private String myField;
+  
+  private void method() {
+  
+  }
+  
+
+}
diff --git a/java/java-tests/testData/projectView/getParentObject/src/com/package1/Class2.java b/java/java-tests/testData/projectView/getParentObject/src/com/package1/Class2.java
new file mode 100644
index 0000000..00c893c
--- /dev/null
+++ b/java/java-tests/testData/projectView/getParentObject/src/com/package1/Class2.java
@@ -0,0 +1,8 @@
+package com.package1;
+
+public class Class2 {
+}
+
+class Class3 {
+
+}
diff --git a/java/java-tests/testData/projectView/getParentObject/src/com/package1/Class4.java b/java/java-tests/testData/projectView/getParentObject/src/com/package1/Class4.java
new file mode 100644
index 0000000..73eeb93
--- /dev/null
+++ b/java/java-tests/testData/projectView/getParentObject/src/com/package1/Class4.java
@@ -0,0 +1,4 @@
+package com.package1;
+
+public Class4 {
+}
diff --git a/java/java-tests/testData/projectView/getParentObject/src/com/package1/Form1.form b/java/java-tests/testData/projectView/getParentObject/src/com/package1/Form1.form
new file mode 100644
index 0000000..1407ffe
--- /dev/null
+++ b/java/java-tests/testData/projectView/getParentObject/src/com/package1/Form1.form
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="com.package1.Form1"/>
diff --git a/java/java-tests/testData/projectView/getParentObject/src/com/package1/Form1.java b/java/java-tests/testData/projectView/getParentObject/src/com/package1/Form1.java
new file mode 100644
index 0000000..24fb0ad
--- /dev/null
+++ b/java/java-tests/testData/projectView/getParentObject/src/com/package1/Form1.java
@@ -0,0 +1,4 @@
+package com.package1;
+
+public class Form1 {
+}
diff --git a/java/java-tests/testData/projectView/getParentObject/src/com/package1/Form2.form b/java/java-tests/testData/projectView/getParentObject/src/com/package1/Form2.form
new file mode 100644
index 0000000..43535f5
--- /dev/null
+++ b/java/java-tests/testData/projectView/getParentObject/src/com/package1/Form2.form
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<form version="1" xmlns="http://www.intellij.com/uidesigner/form/"/>
\ No newline at end of file
diff --git a/java/java-tests/testData/projectView/packageView/src/com/package1/Class1.java b/java/java-tests/testData/projectView/packageView/src/com/package1/Class1.java
new file mode 100644
index 0000000..9fc5f3f
--- /dev/null
+++ b/java/java-tests/testData/projectView/packageView/src/com/package1/Class1.java
@@ -0,0 +1,4 @@
+package com.package1;
+
+public class Class1 {
+}
diff --git a/java/java-tests/testData/projectView/packageView/src/com/package1/Class2.java b/java/java-tests/testData/projectView/packageView/src/com/package1/Class2.java
new file mode 100644
index 0000000..00c893c
--- /dev/null
+++ b/java/java-tests/testData/projectView/packageView/src/com/package1/Class2.java
@@ -0,0 +1,8 @@
+package com.package1;
+
+public class Class2 {
+}
+
+class Class3 {
+
+}
diff --git a/java/java-tests/testData/projectView/packageView/src/com/package1/Class4.java b/java/java-tests/testData/projectView/packageView/src/com/package1/Class4.java
new file mode 100644
index 0000000..73eeb93
--- /dev/null
+++ b/java/java-tests/testData/projectView/packageView/src/com/package1/Class4.java
@@ -0,0 +1,4 @@
+package com.package1;
+
+public Class4 {
+}
diff --git a/java/java-tests/testData/projectView/packageView/src/com/package1/Form1.form b/java/java-tests/testData/projectView/packageView/src/com/package1/Form1.form
new file mode 100644
index 0000000..1407ffe
--- /dev/null
+++ b/java/java-tests/testData/projectView/packageView/src/com/package1/Form1.form
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="com.package1.Form1"/>
diff --git a/java/java-tests/testData/projectView/packageView/src/com/package1/Form1.java b/java/java-tests/testData/projectView/packageView/src/com/package1/Form1.java
new file mode 100644
index 0000000..24fb0ad
--- /dev/null
+++ b/java/java-tests/testData/projectView/packageView/src/com/package1/Form1.java
@@ -0,0 +1,4 @@
+package com.package1;
+
+public class Form1 {
+}
diff --git a/java/java-tests/testData/projectView/packageView/src/com/package1/Form2.form b/java/java-tests/testData/projectView/packageView/src/com/package1/Form2.form
new file mode 100644
index 0000000..43535f5
--- /dev/null
+++ b/java/java-tests/testData/projectView/packageView/src/com/package1/Form2.form
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<form version="1" xmlns="http://www.intellij.com/uidesigner/form/"/>
\ No newline at end of file
diff --git a/java/java-tests/testData/projectView/packageView/src/java/Class1.java b/java/java-tests/testData/projectView/packageView/src/java/Class1.java
new file mode 100644
index 0000000..9fc5f3f
--- /dev/null
+++ b/java/java-tests/testData/projectView/packageView/src/java/Class1.java
@@ -0,0 +1,4 @@
+package com.package1;
+
+public class Class1 {
+}
diff --git a/java/java-tests/testData/projectView/packageView/src/javax/servlet/Class1.java b/java/java-tests/testData/projectView/packageView/src/javax/servlet/Class1.java
new file mode 100644
index 0000000..9fc5f3f
--- /dev/null
+++ b/java/java-tests/testData/projectView/packageView/src/javax/servlet/Class1.java
@@ -0,0 +1,4 @@
+package com.package1;
+
+public class Class1 {
+}
diff --git a/java/java-tests/testData/projectView/selectProject/src/com/package1/Class1.java b/java/java-tests/testData/projectView/selectProject/src/com/package1/Class1.java
new file mode 100644
index 0000000..92d4ea7
--- /dev/null
+++ b/java/java-tests/testData/projectView/selectProject/src/com/package1/Class1.java
@@ -0,0 +1,12 @@
+package com.package1;
+
+public class Class1 {
+
+  private String myField;
+  
+  private void method() {
+  
+  }
+  
+
+}
diff --git a/java/java-tests/testData/projectView/selectProject/src/com/package1/Class2.java b/java/java-tests/testData/projectView/selectProject/src/com/package1/Class2.java
new file mode 100644
index 0000000..00c893c
--- /dev/null
+++ b/java/java-tests/testData/projectView/selectProject/src/com/package1/Class2.java
@@ -0,0 +1,8 @@
+package com.package1;
+
+public class Class2 {
+}
+
+class Class3 {
+
+}
diff --git a/java/java-tests/testData/projectView/selectProject/src/com/package1/Class4.java b/java/java-tests/testData/projectView/selectProject/src/com/package1/Class4.java
new file mode 100644
index 0000000..73eeb93
--- /dev/null
+++ b/java/java-tests/testData/projectView/selectProject/src/com/package1/Class4.java
@@ -0,0 +1,4 @@
+package com.package1;
+
+public Class4 {
+}
diff --git a/java/java-tests/testData/projectView/selectProject/src/com/package1/Form1.java b/java/java-tests/testData/projectView/selectProject/src/com/package1/Form1.java
new file mode 100644
index 0000000..24fb0ad
--- /dev/null
+++ b/java/java-tests/testData/projectView/selectProject/src/com/package1/Form1.java
@@ -0,0 +1,4 @@
+package com.package1;
+
+public class Form1 {
+}
diff --git a/java/java-tests/testData/projectView/showClassMembers/src/com/package1/Class1.java b/java/java-tests/testData/projectView/showClassMembers/src/com/package1/Class1.java
new file mode 100644
index 0000000..b50e374
--- /dev/null
+++ b/java/java-tests/testData/projectView/showClassMembers/src/com/package1/Class1.java
@@ -0,0 +1,15 @@
+package com.package1;
+
+public class Class1 {
+  private boolean myField1;
+  public boolean myField2;
+  
+  public int getValue(){
+   return 0;
+  }
+  
+  public class InnerClass{
+    public int myInnerClassField;
+  }
+  
+}
diff --git a/java/java-tests/testData/projectView/showClassMembers/src/com/package1/Class2.java b/java/java-tests/testData/projectView/showClassMembers/src/com/package1/Class2.java
new file mode 100644
index 0000000..c9d2aab
--- /dev/null
+++ b/java/java-tests/testData/projectView/showClassMembers/src/com/package1/Class2.java
@@ -0,0 +1,53 @@
+package com.package1;
+
+public class Class2 {
+  private boolean myField1;
+  public boolean myField2;
+  public boolean myField3;
+  public boolean myField4;
+
+  public int getValue() {
+    return 0;
+  }
+
+  public class InnerClass1 {
+    public int myInnerClassField;
+
+    public class InnerClass12 {
+      public int myInnerClassField;
+
+      public class InnerClass13 {
+        public int myInnerClassField;
+
+        public class InnerClass14 {
+          public int myInnerClassField;
+
+          public class InnerClass15 {
+            public int myInnerClassField;
+          }
+        }
+      }
+    }
+  }
+
+  public class InnerClass2 {
+    public int myInnerClassField;
+
+    public class InnerClass22 {
+      public int myInnerClassField;
+
+      public class InnerClass23 {
+        public int myInnerClassField;
+
+        public class InnerClass24 {
+          public int myFieldToSelect;
+
+          public class InnerClass25 {
+            public int myInnerClassField;
+          }
+        }
+      }
+    }
+  }
+
+}
diff --git a/java/java-tests/testData/projectView/standardProviders/src/com/package1/Class1.java b/java/java-tests/testData/projectView/standardProviders/src/com/package1/Class1.java
new file mode 100644
index 0000000..9fc5f3f
--- /dev/null
+++ b/java/java-tests/testData/projectView/standardProviders/src/com/package1/Class1.java
@@ -0,0 +1,4 @@
+package com.package1;
+
+public class Class1 {
+}
diff --git a/java/java-tests/testData/projectView/standardProviders/src/com/package1/Class2.java b/java/java-tests/testData/projectView/standardProviders/src/com/package1/Class2.java
new file mode 100644
index 0000000..00c893c
--- /dev/null
+++ b/java/java-tests/testData/projectView/standardProviders/src/com/package1/Class2.java
@@ -0,0 +1,8 @@
+package com.package1;
+
+public class Class2 {
+}
+
+class Class3 {
+
+}
diff --git a/java/java-tests/testData/projectView/standardProviders/src/com/package1/Class4.java b/java/java-tests/testData/projectView/standardProviders/src/com/package1/Class4.java
new file mode 100644
index 0000000..73eeb93
--- /dev/null
+++ b/java/java-tests/testData/projectView/standardProviders/src/com/package1/Class4.java
@@ -0,0 +1,4 @@
+package com.package1;
+
+public Class4 {
+}
diff --git a/java/java-tests/testData/projectView/standardProviders/src/com/package1/Form1.form b/java/java-tests/testData/projectView/standardProviders/src/com/package1/Form1.form
new file mode 100644
index 0000000..1407ffe
--- /dev/null
+++ b/java/java-tests/testData/projectView/standardProviders/src/com/package1/Form1.form
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="com.package1.Form1"/>
diff --git a/java/java-tests/testData/projectView/standardProviders/src/com/package1/Form1.java b/java/java-tests/testData/projectView/standardProviders/src/com/package1/Form1.java
new file mode 100644
index 0000000..24fb0ad
--- /dev/null
+++ b/java/java-tests/testData/projectView/standardProviders/src/com/package1/Form1.java
@@ -0,0 +1,4 @@
+package com.package1;
+
+public class Form1 {
+}
diff --git a/java/java-tests/testData/projectView/standardProviders/src/com/package1/Form2.form b/java/java-tests/testData/projectView/standardProviders/src/com/package1/Form2.form
new file mode 100644
index 0000000..43535f5
--- /dev/null
+++ b/java/java-tests/testData/projectView/standardProviders/src/com/package1/Form2.form
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<form version="1" xmlns="http://www.intellij.com/uidesigner/form/"/>
\ No newline at end of file
diff --git a/java/java-tests/testData/projectView/toDo/src/package1/JavaClass.java b/java/java-tests/testData/projectView/toDo/src/package1/JavaClass.java
new file mode 100644
index 0000000..546b0f0
--- /dev/null
+++ b/java/java-tests/testData/projectView/toDo/src/package1/JavaClass.java
@@ -0,0 +1,11 @@
+package src.package1;
+
+public class JavaClass {
+
+ //todo: Class body
+  protected Object clone() throws CloneNotSupportedException {
+//todo: Method body
+    return super.clone();
+  }
+
+}
diff --git a/java/java-tests/testData/projectView/toDo/src/package1/package2/JavaClass.java b/java/java-tests/testData/projectView/toDo/src/package1/package2/JavaClass.java
new file mode 100644
index 0000000..dd78422
--- /dev/null
+++ b/java/java-tests/testData/projectView/toDo/src/package1/package2/JavaClass.java
@@ -0,0 +1,11 @@
+package src.package1.package2;
+
+public class JavaClass {
+
+  //todo: Class body
+   protected Object clone() throws CloneNotSupportedException {
+//todo: Method body
+     return super.clone();
+   }
+
+}
diff --git a/java/java-tests/testData/projectView/toDo/src/package3/JavaClass.java b/java/java-tests/testData/projectView/toDo/src/package3/JavaClass.java
new file mode 100644
index 0000000..bc77625
--- /dev/null
+++ b/java/java-tests/testData/projectView/toDo/src/package3/JavaClass.java
@@ -0,0 +1,11 @@
+package src.package3;
+
+public class JavaClass {
+
+  //todo: Class body
+   protected Object clone() throws CloneNotSupportedException {
+//todo: Method body
+     return super.clone();
+   }
+
+}
diff --git a/java/java-tests/testData/projectView/toDo/xmlFile.xml b/java/java-tests/testData/projectView/toDo/xmlFile.xml
new file mode 100644
index 0000000..02040a4
--- /dev/null
+++ b/java/java-tests/testData/projectView/toDo/xmlFile.xml
@@ -0,0 +1,3 @@
+<tag>
+  <!--todo-->
+</tag>
\ No newline at end of file
diff --git a/java/java-tests/testData/projectView/toDo1/src/package1/package2/JavaClass.java b/java/java-tests/testData/projectView/toDo1/src/package1/package2/JavaClass.java
new file mode 100644
index 0000000..dd78422
--- /dev/null
+++ b/java/java-tests/testData/projectView/toDo1/src/package1/package2/JavaClass.java
@@ -0,0 +1,11 @@
+package src.package1.package2;
+
+public class JavaClass {
+
+  //todo: Class body
+   protected Object clone() throws CloneNotSupportedException {
+//todo: Method body
+     return super.clone();
+   }
+
+}
diff --git a/java/java-tests/testData/projectView/updateProjectView/src/com/package1/Class1.java b/java/java-tests/testData/projectView/updateProjectView/src/com/package1/Class1.java
new file mode 100644
index 0000000..9fc5f3f
--- /dev/null
+++ b/java/java-tests/testData/projectView/updateProjectView/src/com/package1/Class1.java
@@ -0,0 +1,4 @@
+package com.package1;
+
+public class Class1 {
+}
diff --git a/java/java-tests/testData/projectView/updateProjectView/src/com/package1/Class2.java b/java/java-tests/testData/projectView/updateProjectView/src/com/package1/Class2.java
new file mode 100644
index 0000000..00c893c
--- /dev/null
+++ b/java/java-tests/testData/projectView/updateProjectView/src/com/package1/Class2.java
@@ -0,0 +1,8 @@
+package com.package1;
+
+public class Class2 {
+}
+
+class Class3 {
+
+}
diff --git a/java/java-tests/testData/projectView/updateProjectView/src/com/package1/Class4.java b/java/java-tests/testData/projectView/updateProjectView/src/com/package1/Class4.java
new file mode 100644
index 0000000..73eeb93
--- /dev/null
+++ b/java/java-tests/testData/projectView/updateProjectView/src/com/package1/Class4.java
@@ -0,0 +1,4 @@
+package com.package1;
+
+public Class4 {
+}
diff --git a/java/java-tests/testData/projectView/updateProjectView/src/com/package1/Form1.form b/java/java-tests/testData/projectView/updateProjectView/src/com/package1/Form1.form
new file mode 100644
index 0000000..1407ffe
--- /dev/null
+++ b/java/java-tests/testData/projectView/updateProjectView/src/com/package1/Form1.form
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="com.package1.Form1"/>
diff --git a/java/java-tests/testData/projectView/updateProjectView/src/com/package1/Form1.java b/java/java-tests/testData/projectView/updateProjectView/src/com/package1/Form1.java
new file mode 100644
index 0000000..24fb0ad
--- /dev/null
+++ b/java/java-tests/testData/projectView/updateProjectView/src/com/package1/Form1.java
@@ -0,0 +1,4 @@
+package com.package1;
+
+public class Form1 {
+}
diff --git a/java/java-tests/testData/projectView/updateProjectView/src/com/package1/Form2.form b/java/java-tests/testData/projectView/updateProjectView/src/com/package1/Form2.form
new file mode 100644
index 0000000..43535f5
--- /dev/null
+++ b/java/java-tests/testData/projectView/updateProjectView/src/com/package1/Form2.form
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<form version="1" xmlns="http://www.intellij.com/uidesigner/form/"/>
\ No newline at end of file
diff --git a/java/java-tests/testData/projectView/updatingAfterRename/src/com/package1/Class2.java b/java/java-tests/testData/projectView/updatingAfterRename/src/com/package1/Class2.java
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/projectView/updatingAfterRename/src/com/package1/Class2.java
diff --git a/java/java-tests/testData/projectView/updatingAfterRename/src/com/package1/Form1.form b/java/java-tests/testData/projectView/updatingAfterRename/src/com/package1/Form1.form
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/projectView/updatingAfterRename/src/com/package1/Form1.form
diff --git a/java/java-tests/testData/projectView/updatingAfterRename/src/com/package1/Form1.java b/java/java-tests/testData/projectView/updatingAfterRename/src/com/package1/Form1.java
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/projectView/updatingAfterRename/src/com/package1/Form1.java
diff --git a/java/java-tests/testData/projectView/updatingAfterRename/src/com/package1/Form2.form b/java/java-tests/testData/projectView/updatingAfterRename/src/com/package1/Form2.form
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/projectView/updatingAfterRename/src/com/package1/Form2.form
diff --git a/java/java-tests/testData/projectView/xmlStructureView/file1.dtd b/java/java-tests/testData/projectView/xmlStructureView/file1.dtd
new file mode 100644
index 0000000..5a345557
--- /dev/null
+++ b/java/java-tests/testData/projectView/xmlStructureView/file1.dtd
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!ELEMENT myplugin (helpset)>
+<!ATTLIST myplugin
+    url CDATA #IMPLIED
+    version CDATA #IMPLIED>
+<!ELEMENT helpset EMPTY>
+<!ATTLIST helpset
+  file CDATA #REQUIRED
+  path CDATA #REQUIRED>
+
+<!ENTITY % draft 'IGNORE'>
+ <!ENTITY % final 'INCLUDE'>
+
+<![%draft;[
+<!ELEMENT book (comments*, title, body, supplements?)>
+<!ELEMENT comments EMPTY>
+]]>
+<![%final;[
+<!ELEMENT book (price,title, body, supplements?)>
+<!ELEMENT price EMPTY>
+]]>
\ No newline at end of file
diff --git a/java/java-tests/testData/projectView/xmlStructureView/file1.html b/java/java-tests/testData/projectView/xmlStructureView/file1.html
new file mode 100644
index 0000000..98dff75
--- /dev/null
+++ b/java/java-tests/testData/projectView/xmlStructureView/file1.html
@@ -0,0 +1,11 @@
+<HEAD>
+<TITLE>CSS Example</TITLE>
+<STYLE TYPE="text/css">
+  H1 { font-size: x-large; color: red }
+  H2 { font-size: large; color: blue }
+</STYLE>
+<BODY>
+  <P>text
+  <BR>text2
+</BODY>
+</HEAD>
diff --git a/java/java-tests/testData/projectView/xmlStructureView/file1.xml b/java/java-tests/testData/projectView/xmlStructureView/file1.xml
new file mode 100644
index 0000000..d58fb0e
--- /dev/null
+++ b/java/java-tests/testData/projectView/xmlStructureView/file1.xml
@@ -0,0 +1,11 @@
+<root name="IDEA_ZKM" default="all_dist" basedir=".">
+  <a attr1="value1" attr2="value2">
+    text
+    <a attr1="value1" attr2="value2">
+      text2
+    <text><![CDATA[Text with
+a new line]]></text>      
+      <b/>
+    </a>
+  </a>
+</root>
diff --git a/java/java-tests/testData/projectView/xmlStructureView/file2.dtd b/java/java-tests/testData/projectView/xmlStructureView/file2.dtd
new file mode 100644
index 0000000..3dbaa54
--- /dev/null
+++ b/java/java-tests/testData/projectView/xmlStructureView/file2.dtd
@@ -0,0 +1,4 @@
+<!ENTITY % HTMLlat1 PUBLIC
+  "-//W3C//ENTITIES Latin 1 for XHTML//EN"
+  "xhtml-lat1-modified.ent">
+%HTMLlat1;
diff --git a/java/java-tests/testData/projectView/xmlStructureView/file2.xml b/java/java-tests/testData/projectView/xmlStructureView/file2.xml
new file mode 100644
index 0000000..52306bc
--- /dev/null
+++ b/java/java-tests/testData/projectView/xmlStructureView/file2.xml
@@ -0,0 +1,8 @@
+<!DOCTYPE title 
+  [
+<!ELEMENT title (#PCDATA | body)* >
+<!ELEMENT body EMPTY>
+<!ELEMENT supplements EMPTY>
+  ]>
+
+<title/>
\ No newline at end of file
diff --git a/java/java-tests/testData/projectView/xmlStructureView/xhtml-lat1-modified.ent b/java/java-tests/testData/projectView/xmlStructureView/xhtml-lat1-modified.ent
new file mode 100644
index 0000000..22bee77
--- /dev/null
+++ b/java/java-tests/testData/projectView/xmlStructureView/xhtml-lat1-modified.ent
@@ -0,0 +1,2 @@
+<!ENTITY nbsp   "&#160;"> <!-- no-break space = non-breaking space,
+                                  U+00A0 ISOnum -->
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/arrayIndexOutOfBounds/src/bla/Bla.java b/java/java-tests/testData/psi/arrayIndexOutOfBounds/src/bla/Bla.java
new file mode 100644
index 0000000..0b0955c
--- /dev/null
+++ b/java/java-tests/testData/psi/arrayIndexOutOfBounds/src/bla/Bla.java
@@ -0,0 +1,4 @@
+package bla;
+
+public class Bla {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/arrayIndexOutOfBounds/src/bla/Blu.java b/java/java-tests/testData/psi/arrayIndexOutOfBounds/src/bla/Blu.java
new file mode 100644
index 0000000..13283b2
--- /dev/null
+++ b/java/java-tests/testData/psi/arrayIndexOutOfBounds/src/bla/Blu.java
@@ -0,0 +1,4 @@
+package bla;
+
+public class Blu {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/classUtil/ManyClasses.java b/java/java-tests/testData/psi/classUtil/ManyClasses.java
new file mode 100644
index 0000000..461dfb4
--- /dev/null
+++ b/java/java-tests/testData/psi/classUtil/ManyClasses.java
@@ -0,0 +1,47 @@
+import java.lang.Comparable;
+import java.lang.Integer;
+import java.lang.Override;
+import java.lang.Runnable;
+
+public class ManyClasses {
+  public void foo() {
+    Runnable r = new Runnable() {
+      @Override
+      public void run() {
+        Comparable<Integer> c = new Comparable<Integer>() {
+          @Override
+          public int compareTo(Integer o) {
+            return 0;
+          }
+        };
+      }
+    };
+    
+    class FooLocal {
+      Runnable r = new Runnable() {
+        @Override
+        public void run() {
+        }
+      };
+    }
+  }
+  
+  public void bar() {
+    class FooLocal implements Runnable {
+      @Override
+      public void run() {
+      }
+    }
+  }
+  
+  public class Child {
+    
+  }
+  
+}
+
+class Local {
+  public static class Sub {
+
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/cls/1/TestClass.class b/java/java-tests/testData/psi/cls/1/TestClass.class
new file mode 100644
index 0000000..efe92ee
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/1/TestClass.class
Binary files differ
diff --git a/java/java-tests/testData/psi/cls/2/TestClass.class b/java/java-tests/testData/psi/cls/2/TestClass.class
new file mode 100644
index 0000000..a17c2b5
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/2/TestClass.class
Binary files differ
diff --git a/java/java-tests/testData/psi/cls/mirror/$BuckClass.txt b/java/java-tests/testData/psi/cls/mirror/$BuckClass.txt
new file mode 100644
index 0000000..d94f6e3
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/$BuckClass.txt
@@ -0,0 +1,11 @@
+
+  // IntelliJ API Decompiler stub source generated from a class file
+  // Implementation of methods is not available
+
+package pkg;
+
+class $BuckClass {
+    $BuckClass() { /* compiled code */ }
+
+    static pkg.$BuckClass getInstance() { /* compiled code */ }
+}
diff --git a/java/java-tests/testData/psi/cls/mirror/Annotations.txt b/java/java-tests/testData/psi/cls/mirror/Annotations.txt
new file mode 100644
index 0000000..9bbe384
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/Annotations.txt
@@ -0,0 +1,58 @@
+
+  // IntelliJ API Decompiler stub source generated from a class file
+  // Implementation of methods is not available
+
+package pkg;
+
+abstract class Annotations {
+    Annotations() { /* compiled code */ }
+
+    @pkg.Annotations.A1
+    abstract void m1();
+
+    @pkg.Annotations.A2
+    abstract void m2a();
+
+    @pkg.Annotations.A2("+")
+    abstract void m2b();
+
+    @pkg.Annotations.A3(a1 = @pkg.Annotations.A1, a2 = @pkg.Annotations.A2)
+    abstract void m3();
+
+    @pkg.Annotations.A4
+    abstract void m4a();
+
+    @pkg.Annotations.A4(ids = {42, 84})
+    abstract void m4b();
+
+    static @interface IndeterminateAnno {
+        float f1() default -1.0f / 0.0;
+
+        float f2() default 0.0f / 0.0;
+
+        float f3() default 1.0f / 0.0;
+
+        double d1() default -1.0 / 0.0;
+
+        double d2() default 0.0d / 0.0;
+
+        double d3() default 1.0 / 0.0;
+    }
+
+    static @interface A4 {
+        int[] ids() default {};
+    }
+
+    static @interface A3 {
+        pkg.Annotations.A1 a1();
+
+        pkg.Annotations.A2 a2();
+    }
+
+    static @interface A2 {
+        java.lang.String value() default "-";
+    }
+
+    static @interface A1 {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/cls/mirror/BuckClass$.txt b/java/java-tests/testData/psi/cls/mirror/BuckClass$.txt
new file mode 100644
index 0000000..43f5a0b
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/BuckClass$.txt
@@ -0,0 +1,11 @@
+
+  // IntelliJ API Decompiler stub source generated from a class file
+  // Implementation of methods is not available
+
+package pkg;
+
+class BuckClass$ {
+    BuckClass$() { /* compiled code */ }
+
+    static pkg.BuckClass$ getInstance() { /* compiled code */ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/cls/mirror/Deprecated.txt b/java/java-tests/testData/psi/cls/mirror/Deprecated.txt
new file mode 100644
index 0000000..efa33fb
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/Deprecated.txt
@@ -0,0 +1,22 @@
+
+  // IntelliJ API Decompiler stub source generated from a class file
+  // Implementation of methods is not available
+
+package pkg;
+
+/**
+ * @deprecated
+ */
+class Deprecated {
+    /**
+     * @deprecated
+     */
+    int f;
+
+    Deprecated() { /* compiled code */ }
+
+    /**
+     * @deprecated
+     */
+    void m() { /* compiled code */ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/cls/mirror/EA40568.txt b/java/java-tests/testData/psi/cls/mirror/EA40568.txt
new file mode 100644
index 0000000..6b82d81
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/EA40568.txt
@@ -0,0 +1,31 @@
+
+  // IntelliJ API Decompiler stub source generated from a class file
+  // Implementation of methods is not available
+
+package com.google.android.maps;
+
+public class OverlayItem {
+    protected final com.google.android.maps.GeoPoint mPoint;
+    protected final java.lang.String mTitle;
+    protected final java.lang.String mSnippet;
+    protected android.graphics.drawable.Drawable mMarker;
+    public static final int ITEM_STATE_FOCUSED_MASK = 4;
+    public static final int ITEM_STATE_SELECTED_MASK = 2;
+    public static final int ITEM_STATE_PRESSED_MASK = 1;
+
+    public OverlayItem(com.google.android.maps.GeoPoint geoPoint, java.lang.String s, java.lang.String s1) { /* compiled code */ }
+
+    public void setMarker(android.graphics.drawable.Drawable drawable) { /* compiled code */ }
+
+    public android.graphics.drawable.Drawable getMarker(int i) { /* compiled code */ }
+
+    public static void setState(android.graphics.drawable.Drawable drawable, int i) { /* compiled code */ }
+
+    public java.lang.String getTitle() { /* compiled code */ }
+
+    public java.lang.String getSnippet() { /* compiled code */ }
+
+    public com.google.android.maps.GeoPoint getPoint() { /* compiled code */ }
+
+    public java.lang.String routableAddress() { /* compiled code */ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/cls/mirror/EmptyEnum.txt b/java/java-tests/testData/psi/cls/mirror/EmptyEnum.txt
new file mode 100644
index 0000000..808cc55
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/EmptyEnum.txt
@@ -0,0 +1,15 @@
+
+  // IntelliJ API Decompiler stub source generated from a class file
+  // Implementation of methods is not available
+
+package pkg;
+
+enum EmptyEnum {
+    ;
+
+    public static pkg.EmptyEnum[] values() { /* compiled code */ }
+
+    public static pkg.EmptyEnum valueOf(java.lang.String s) { /* compiled code */ }
+
+    private EmptyEnum() { /* compiled code */ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/cls/mirror/EnumWithFields.txt b/java/java-tests/testData/psi/cls/mirror/EnumWithFields.txt
new file mode 100644
index 0000000..8823f10
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/EnumWithFields.txt
@@ -0,0 +1,18 @@
+
+  // IntelliJ API Decompiler stub source generated from a class file
+  // Implementation of methods is not available
+
+package pkg;
+
+public enum EnumWithFields {
+    E1, E2;
+
+    private boolean f1;
+    static boolean f2;
+
+    public static pkg.EnumWithFields[] values() { /* compiled code */ }
+
+    public static pkg.EnumWithFields valueOf(java.lang.String s) { /* compiled code */ }
+
+    private EnumWithFields() { /* compiled code */ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/cls/mirror/ExtMethods.txt b/java/java-tests/testData/psi/cls/mirror/ExtMethods.txt
new file mode 100644
index 0000000..e5f9e54
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/ExtMethods.txt
@@ -0,0 +1,11 @@
+
+  // IntelliJ API Decompiler stub source generated from a class file
+  // Implementation of methods is not available
+
+package pkg;
+
+interface ExtMethods {
+    void m1();
+
+    default void m2() { /* compiled code */ }
+}
diff --git a/java/java-tests/testData/psi/cls/mirror/MethodReceiver.txt b/java/java-tests/testData/psi/cls/mirror/MethodReceiver.txt
new file mode 100644
index 0000000..c5b7fc5
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/MethodReceiver.txt
@@ -0,0 +1,14 @@
+
+  // IntelliJ API Decompiler stub source generated from a class file
+  // Implementation of methods is not available
+
+package pkg;
+
+class MethodReceiver {
+    MethodReceiver() { /* compiled code */ }
+
+    void m(int i) { /* compiled code */ }
+
+    static @interface A {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/cls/mirror/Nested.txt b/java/java-tests/testData/psi/cls/mirror/Nested.txt
new file mode 100644
index 0000000..622cdc1
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/Nested.txt
@@ -0,0 +1,17 @@
+
+  // IntelliJ API Decompiler stub source generated from a class file
+  // Implementation of methods is not available
+
+package pkg;
+
+public class Nested {
+    public Nested() { /* compiled code */ }
+
+    public static class Inner1 {
+        public Inner1() { /* compiled code */ }
+
+        public class Inner2 {
+            public Inner2() { /* compiled code */ }
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/cls/mirror/NormalClass.txt b/java/java-tests/testData/psi/cls/mirror/NormalClass.txt
new file mode 100644
index 0000000..82532ce
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/NormalClass.txt
@@ -0,0 +1,17 @@
+
+  // IntelliJ API Decompiler stub source generated from a class file
+  // Implementation of methods is not available
+
+package pkg;
+
+class NormalClass {
+    private final java.lang.Object o;
+
+    NormalClass() { /* compiled code */ }
+
+    java.lang.Object get() { /* compiled code */ }
+
+    private static class Inner {
+        private Inner() { /* compiled code */ }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/cls/mirror/ParameterNames.txt b/java/java-tests/testData/psi/cls/mirror/ParameterNames.txt
new file mode 100644
index 0000000..71e6d46
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/ParameterNames.txt
@@ -0,0 +1,13 @@
+
+  // IntelliJ API Decompiler stub source generated from a class file
+  // Implementation of methods is not available
+
+package pkg;
+
+public class ParameterNames {
+    public ParameterNames() { /* compiled code */ }
+
+    public void test(int i, int i1, java.lang.String s) { /* compiled code */ }
+
+    private void testImpl(int i, int i1, java.lang.String s, boolean b) { /* compiled code */ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/cls/mirror/SimpleEnum.txt b/java/java-tests/testData/psi/cls/mirror/SimpleEnum.txt
new file mode 100644
index 0000000..654770a
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/SimpleEnum.txt
@@ -0,0 +1,15 @@
+
+  // IntelliJ API Decompiler stub source generated from a class file
+  // Implementation of methods is not available
+
+package pkg;
+
+public enum SimpleEnum {
+    E1, E2;
+
+    public static pkg.SimpleEnum[] values() { /* compiled code */ }
+
+    public static pkg.SimpleEnum valueOf(java.lang.String s) { /* compiled code */ }
+
+    private SimpleEnum() { /* compiled code */ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/cls/mirror/package-info.txt b/java/java-tests/testData/psi/cls/mirror/package-info.txt
new file mode 100644
index 0000000..5c25b9f
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/package-info.txt
@@ -0,0 +1,9 @@
+
+  // IntelliJ API Decompiler stub source generated from a class file
+  // Implementation of methods is not available
+
+package pkg;
+
[email protected]
+interface $$package-info /* Real name is 'package-info' */ {
+}
diff --git a/java/java-tests/testData/psi/cls/mirror/pkg/$BuckClass.class b/java/java-tests/testData/psi/cls/mirror/pkg/$BuckClass.class
new file mode 100644
index 0000000..6ac4f3b
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/pkg/$BuckClass.class
Binary files differ
diff --git a/java/java-tests/testData/psi/cls/mirror/pkg/Annotations$A1.class b/java/java-tests/testData/psi/cls/mirror/pkg/Annotations$A1.class
new file mode 100644
index 0000000..6120960
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/pkg/Annotations$A1.class
Binary files differ
diff --git a/java/java-tests/testData/psi/cls/mirror/pkg/Annotations$A2.class b/java/java-tests/testData/psi/cls/mirror/pkg/Annotations$A2.class
new file mode 100644
index 0000000..8d94afe
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/pkg/Annotations$A2.class
Binary files differ
diff --git a/java/java-tests/testData/psi/cls/mirror/pkg/Annotations$A3.class b/java/java-tests/testData/psi/cls/mirror/pkg/Annotations$A3.class
new file mode 100644
index 0000000..630cfd9
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/pkg/Annotations$A3.class
Binary files differ
diff --git a/java/java-tests/testData/psi/cls/mirror/pkg/Annotations$A4.class b/java/java-tests/testData/psi/cls/mirror/pkg/Annotations$A4.class
new file mode 100644
index 0000000..040a84c
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/pkg/Annotations$A4.class
Binary files differ
diff --git a/java/java-tests/testData/psi/cls/mirror/pkg/Annotations$IndeterminateAnno.class b/java/java-tests/testData/psi/cls/mirror/pkg/Annotations$IndeterminateAnno.class
new file mode 100644
index 0000000..d77b499
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/pkg/Annotations$IndeterminateAnno.class
Binary files differ
diff --git a/java/java-tests/testData/psi/cls/mirror/pkg/Annotations.class b/java/java-tests/testData/psi/cls/mirror/pkg/Annotations.class
new file mode 100644
index 0000000..03f1f52
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/pkg/Annotations.class
Binary files differ
diff --git a/java/java-tests/testData/psi/cls/mirror/pkg/BuckClass$.class b/java/java-tests/testData/psi/cls/mirror/pkg/BuckClass$.class
new file mode 100644
index 0000000..0f4d2de
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/pkg/BuckClass$.class
Binary files differ
diff --git a/java/java-tests/testData/psi/cls/mirror/pkg/Deprecated.class b/java/java-tests/testData/psi/cls/mirror/pkg/Deprecated.class
new file mode 100644
index 0000000..89e87d5
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/pkg/Deprecated.class
Binary files differ
diff --git a/java/java-tests/testData/psi/cls/mirror/pkg/EA40568.class b/java/java-tests/testData/psi/cls/mirror/pkg/EA40568.class
new file mode 100644
index 0000000..72b32fd
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/pkg/EA40568.class
Binary files differ
diff --git a/java/java-tests/testData/psi/cls/mirror/pkg/EmptyEnum.class b/java/java-tests/testData/psi/cls/mirror/pkg/EmptyEnum.class
new file mode 100644
index 0000000..2ffd189
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/pkg/EmptyEnum.class
Binary files differ
diff --git a/java/java-tests/testData/psi/cls/mirror/pkg/EnumWithFields.class b/java/java-tests/testData/psi/cls/mirror/pkg/EnumWithFields.class
new file mode 100644
index 0000000..08920ff
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/pkg/EnumWithFields.class
Binary files differ
diff --git a/java/java-tests/testData/psi/cls/mirror/pkg/ExtMethods.class b/java/java-tests/testData/psi/cls/mirror/pkg/ExtMethods.class
new file mode 100644
index 0000000..6404c71
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/pkg/ExtMethods.class
Binary files differ
diff --git a/java/java-tests/testData/psi/cls/mirror/pkg/MethodReceiver$A.class b/java/java-tests/testData/psi/cls/mirror/pkg/MethodReceiver$A.class
new file mode 100644
index 0000000..88ff02d
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/pkg/MethodReceiver$A.class
Binary files differ
diff --git a/java/java-tests/testData/psi/cls/mirror/pkg/MethodReceiver.class b/java/java-tests/testData/psi/cls/mirror/pkg/MethodReceiver.class
new file mode 100644
index 0000000..b58fd8e
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/pkg/MethodReceiver.class
Binary files differ
diff --git a/java/java-tests/testData/psi/cls/mirror/pkg/Nested$Inner1$Inner2.class b/java/java-tests/testData/psi/cls/mirror/pkg/Nested$Inner1$Inner2.class
new file mode 100644
index 0000000..79fca87
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/pkg/Nested$Inner1$Inner2.class
Binary files differ
diff --git a/java/java-tests/testData/psi/cls/mirror/pkg/Nested$Inner1.class b/java/java-tests/testData/psi/cls/mirror/pkg/Nested$Inner1.class
new file mode 100644
index 0000000..81b314a
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/pkg/Nested$Inner1.class
Binary files differ
diff --git a/java/java-tests/testData/psi/cls/mirror/pkg/Nested.class b/java/java-tests/testData/psi/cls/mirror/pkg/Nested.class
new file mode 100644
index 0000000..857498d
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/pkg/Nested.class
Binary files differ
diff --git a/java/java-tests/testData/psi/cls/mirror/pkg/NormalClass$1.class b/java/java-tests/testData/psi/cls/mirror/pkg/NormalClass$1.class
new file mode 100644
index 0000000..8369e5b
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/pkg/NormalClass$1.class
Binary files differ
diff --git a/java/java-tests/testData/psi/cls/mirror/pkg/NormalClass$Inner.class b/java/java-tests/testData/psi/cls/mirror/pkg/NormalClass$Inner.class
new file mode 100644
index 0000000..7137515
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/pkg/NormalClass$Inner.class
Binary files differ
diff --git a/java/java-tests/testData/psi/cls/mirror/pkg/NormalClass.class b/java/java-tests/testData/psi/cls/mirror/pkg/NormalClass.class
new file mode 100644
index 0000000..f818b49
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/pkg/NormalClass.class
Binary files differ
diff --git a/java/java-tests/testData/psi/cls/mirror/pkg/ParameterNames.class b/java/java-tests/testData/psi/cls/mirror/pkg/ParameterNames.class
new file mode 100644
index 0000000..dd92601
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/pkg/ParameterNames.class
Binary files differ
diff --git a/java/java-tests/testData/psi/cls/mirror/pkg/PkgAnno.class b/java/java-tests/testData/psi/cls/mirror/pkg/PkgAnno.class
new file mode 100644
index 0000000..50cbb59
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/pkg/PkgAnno.class
Binary files differ
diff --git a/java/java-tests/testData/psi/cls/mirror/pkg/SimpleEnum.class b/java/java-tests/testData/psi/cls/mirror/pkg/SimpleEnum.class
new file mode 100644
index 0000000..00f1d07
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/pkg/SimpleEnum.class
Binary files differ
diff --git a/java/java-tests/testData/psi/cls/mirror/pkg/package-info.class b/java/java-tests/testData/psi/cls/mirror/pkg/package-info.class
new file mode 100644
index 0000000..0fbbecf
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/pkg/package-info.class
Binary files differ
diff --git a/java/java-tests/testData/psi/cls/mirror/src/pkg/$BuckClass.java b/java/java-tests/testData/psi/cls/mirror/src/pkg/$BuckClass.java
new file mode 100644
index 0000000..a7736cc
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/src/pkg/$BuckClass.java
@@ -0,0 +1,5 @@
+package pkg;
+
+class $BuckClass {
+  static $BuckClass getInstance() { return null; }
+}
diff --git a/java/java-tests/testData/psi/cls/mirror/src/pkg/Annotations.java b/java/java-tests/testData/psi/cls/mirror/src/pkg/Annotations.java
new file mode 100644
index 0000000..5aeda68
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/src/pkg/Annotations.java
@@ -0,0 +1,37 @@
+package pkg;
+
+abstract class Annotations {
+  @interface A1 { }
+
+  @interface A2 {
+    String value() default "-";
+  }
+
+  @interface A3 {
+    A1 a1();
+    A2 a2();
+  }
+
+  @interface A4 {
+    int[] ids() default { };
+  }
+
+  @A1 abstract void m1();
+
+  @A2() abstract void m2a();
+  @A2("+") abstract void m2b();
+
+  @A3(a1 = @A1, a2 = @A2) abstract void m3();
+
+  @A4 abstract void m4a();
+  @A4(ids = {42, 84}) abstract void m4b();
+
+  @interface IndeterminateAnno {
+    float f1() default Float.NEGATIVE_INFINITY;
+    float f2() default Float.NaN;
+    float f3() default Float.POSITIVE_INFINITY;
+    double d1() default Double.NEGATIVE_INFINITY;
+    double d2() default Double.NaN;
+    double d3() default Double.POSITIVE_INFINITY;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/cls/mirror/src/pkg/BuckClass$.java b/java/java-tests/testData/psi/cls/mirror/src/pkg/BuckClass$.java
new file mode 100644
index 0000000..65edd13
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/src/pkg/BuckClass$.java
@@ -0,0 +1,11 @@
+package pkg;
+
+class BuckClass$ {
+  BuckClass$() {
+    System.out.println(this);
+  }
+
+  static BuckClass$ getInstance() {
+    return new BuckClass$();
+  }
+}
diff --git a/java/java-tests/testData/psi/cls/mirror/src/pkg/Deprecated.java b/java/java-tests/testData/psi/cls/mirror/src/pkg/Deprecated.java
new file mode 100644
index 0000000..e93e0579
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/src/pkg/Deprecated.java
@@ -0,0 +1,10 @@
+package pkg;
+
+/** @deprecated don't use */
+class Deprecated {
+  /** @deprecated don't use */
+  int f;
+
+  /** @deprecated don't use */
+  void m() { }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/cls/mirror/src/pkg/EmptyEnum.java b/java/java-tests/testData/psi/cls/mirror/src/pkg/EmptyEnum.java
new file mode 100644
index 0000000..3784ac8
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/src/pkg/EmptyEnum.java
@@ -0,0 +1,3 @@
+package pkg;
+
+enum EmptyEnum { }
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/cls/mirror/src/pkg/EnumWithFields.java b/java/java-tests/testData/psi/cls/mirror/src/pkg/EnumWithFields.java
new file mode 100644
index 0000000..c21d166
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/src/pkg/EnumWithFields.java
@@ -0,0 +1,8 @@
+package pkg;
+
+public enum EnumWithFields {
+  E1, E2;
+
+  private boolean f1;
+  static boolean f2;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/cls/mirror/src/pkg/ExtMethods.java b/java/java-tests/testData/psi/cls/mirror/src/pkg/ExtMethods.java
new file mode 100644
index 0000000..82c281b
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/src/pkg/ExtMethods.java
@@ -0,0 +1,6 @@
+package pkg;
+
+interface ExtMethods {
+  void m1();
+  void m2() default { System.out.println("Hello there."); }
+}
diff --git a/java/java-tests/testData/psi/cls/mirror/src/pkg/MethodReceiver.java b/java/java-tests/testData/psi/cls/mirror/src/pkg/MethodReceiver.java
new file mode 100644
index 0000000..9bdb2c6
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/src/pkg/MethodReceiver.java
@@ -0,0 +1,6 @@
+package pkg;
+
+class MethodReceiver {
+  @interface A { }
+  void m(@A MethodReceiver this, int i) { System.out.println("i=" + i); }
+}
diff --git a/java/java-tests/testData/psi/cls/mirror/src/pkg/Nested.java b/java/java-tests/testData/psi/cls/mirror/src/pkg/Nested.java
new file mode 100644
index 0000000..901c95b
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/src/pkg/Nested.java
@@ -0,0 +1,7 @@
+package pkg;
+
+public class Nested {
+  public static class Inner1 {
+    public class Inner2 { }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/cls/mirror/src/pkg/NormalClass.java b/java/java-tests/testData/psi/cls/mirror/src/pkg/NormalClass.java
new file mode 100644
index 0000000..42f1434
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/src/pkg/NormalClass.java
@@ -0,0 +1,11 @@
+package pkg;
+
+class NormalClass {
+  private final Object o = new Inner();
+
+  Object get() {
+    return o;
+  }
+
+  private static class Inner { }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/cls/mirror/src/pkg/ParameterNames.class b/java/java-tests/testData/psi/cls/mirror/src/pkg/ParameterNames.class
new file mode 100644
index 0000000..6b1d495
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/src/pkg/ParameterNames.class
Binary files differ
diff --git a/java/java-tests/testData/psi/cls/mirror/src/pkg/ParameterNames.java b/java/java-tests/testData/psi/cls/mirror/src/pkg/ParameterNames.java
new file mode 100644
index 0000000..738f087
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/src/pkg/ParameterNames.java
@@ -0,0 +1,13 @@
+package pkg;
+
+public class ParameterNames {
+  public void test(int index, int id, String name) {
+    testImpl(index, id, name, true);
+  }
+
+  private void testImpl(int index, int id, String name, boolean print) {
+    if (print) {
+      System.out.println("[" + index + "] " + id + ":" + name);
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/cls/mirror/src/pkg/PkgAnno.java b/java/java-tests/testData/psi/cls/mirror/src/pkg/PkgAnno.java
new file mode 100644
index 0000000..d6091f6
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/src/pkg/PkgAnno.java
@@ -0,0 +1,3 @@
+package pkg;
+
+@interface PkgAnno { }
diff --git a/java/java-tests/testData/psi/cls/mirror/src/pkg/SimpleEnum.java b/java/java-tests/testData/psi/cls/mirror/src/pkg/SimpleEnum.java
new file mode 100644
index 0000000..054609e
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/src/pkg/SimpleEnum.java
@@ -0,0 +1,5 @@
+package pkg;
+
+public enum SimpleEnum {
+  E1, E2
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/cls/mirror/src/pkg/package-info.java b/java/java-tests/testData/psi/cls/mirror/src/pkg/package-info.java
new file mode 100644
index 0000000..a92068a
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/mirror/src/pkg/package-info.java
@@ -0,0 +1,2 @@
+@PkgAnno
+package pkg;
diff --git a/java/java-tests/testData/psi/cls/stubBuilder/AnnotatedEnumConstructor.class b/java/java-tests/testData/psi/cls/stubBuilder/AnnotatedEnumConstructor.class
new file mode 100644
index 0000000..823dac6
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/stubBuilder/AnnotatedEnumConstructor.class
Binary files differ
diff --git a/java/java-tests/testData/psi/cls/stubBuilder/AnnotatedEnumConstructor.txt b/java/java-tests/testData/psi/cls/stubBuilder/AnnotatedEnumConstructor.txt
new file mode 100644
index 0000000..2ed8f00
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/stubBuilder/AnnotatedEnumConstructor.txt
@@ -0,0 +1,32 @@
+PsiJavaFileStub []
+  PsiClassStub[enum name=AnnotatedEnumConstructor fqn=AnnotatedEnumConstructor]
+    PsiModifierListStub[mask=17]
+    PsiTypeParameterListStub
+    PsiRefListStub[EXTENDS_LIST:]
+    PsiRefListStub[IMPLEMENTS_LIST:]
+    PsiFieldStub[enumconst A:AnnotatedEnumConstructor]
+      PsiModifierListStub[mask=25]
+    PsiFieldStub[enumconst B:AnnotatedEnumConstructor]
+      PsiModifierListStub[mask=25]
+    PsiFieldStub[enumconst C:AnnotatedEnumConstructor]
+      PsiModifierListStub[mask=25]
+    PsiMethodStub[values:AnnotatedEnumConstructor[]]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[valueOf:AnnotatedEnumConstructor]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[name:java.lang.String]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[cons varargs AnnotatedEnumConstructor:void]
+      PsiModifierListStub[mask=2]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[names:java.lang.String...]
+          PsiModifierListStub[mask=0]
+            PsiAnnotationStub[@org.jetbrains.annotations.Nullable]
+      PsiRefListStub[THROWS_LIST:]
diff --git a/java/java-tests/testData/psi/cls/stubBuilder/AnnotatedNonStaticInnerClassConstructor$Inner.class b/java/java-tests/testData/psi/cls/stubBuilder/AnnotatedNonStaticInnerClassConstructor$Inner.class
new file mode 100644
index 0000000..b53ec9d
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/stubBuilder/AnnotatedNonStaticInnerClassConstructor$Inner.class
Binary files differ
diff --git a/java/java-tests/testData/psi/cls/stubBuilder/AnnotatedNonStaticInnerClassConstructor.class b/java/java-tests/testData/psi/cls/stubBuilder/AnnotatedNonStaticInnerClassConstructor.class
new file mode 100644
index 0000000..cce6bd9
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/stubBuilder/AnnotatedNonStaticInnerClassConstructor.class
Binary files differ
diff --git a/java/java-tests/testData/psi/cls/stubBuilder/AnnotatedNonStaticInnerClassConstructor.txt b/java/java-tests/testData/psi/cls/stubBuilder/AnnotatedNonStaticInnerClassConstructor.txt
new file mode 100644
index 0000000..3ca4e6e
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/stubBuilder/AnnotatedNonStaticInnerClassConstructor.txt
@@ -0,0 +1,24 @@
+PsiJavaFileStub []
+  PsiClassStub[name=AnnotatedNonStaticInnerClassConstructor fqn=AnnotatedNonStaticInnerClassConstructor]
+    PsiModifierListStub[mask=1]
+    PsiTypeParameterListStub
+    PsiRefListStub[EXTENDS_LIST:]
+    PsiRefListStub[IMPLEMENTS_LIST:]
+    PsiClassStub[name=Inner fqn=AnnotatedNonStaticInnerClassConstructor.Inner]
+      PsiModifierListStub[mask=4096]
+      PsiTypeParameterListStub
+      PsiRefListStub[EXTENDS_LIST:]
+      PsiRefListStub[IMPLEMENTS_LIST:]
+      PsiMethodStub[cons Inner:void]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[param:java.lang.Integer]
+            PsiModifierListStub[mask=0]
+              PsiAnnotationStub[@org.jetbrains.annotations.NotNull]
+        PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[cons AnnotatedNonStaticInnerClassConstructor:void]
+      PsiModifierListStub[mask=1]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
diff --git a/java/java-tests/testData/psi/cls/stubBuilder/DoubleTest.class b/java/java-tests/testData/psi/cls/stubBuilder/DoubleTest.class
new file mode 100644
index 0000000..8faa982
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/stubBuilder/DoubleTest.class
Binary files differ
diff --git a/java/java-tests/testData/psi/cls/stubBuilder/DoubleTest.txt b/java/java-tests/testData/psi/cls/stubBuilder/DoubleTest.txt
new file mode 100644
index 0000000..f606d65
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/stubBuilder/DoubleTest.txt
@@ -0,0 +1,22 @@
+PsiJavaFileStub []
+  PsiClassStub[name=DoubleTest fqn=DoubleTest]
+    PsiModifierListStub[mask=1]
+    PsiTypeParameterListStub
+    PsiRefListStub[EXTENDS_LIST:]
+    PsiRefListStub[IMPLEMENTS_LIST:]
+    PsiMethodStub[cons DoubleTest:void]
+      PsiModifierListStub[mask=1]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[foo:void]
+      PsiModifierListStub[mask=4096]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[one:double]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[two:double]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[three:double]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
diff --git a/java/java-tests/testData/psi/cls/stubBuilder/Modifiers.txt b/java/java-tests/testData/psi/cls/stubBuilder/Modifiers.txt
new file mode 100644
index 0000000..a608ee7
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/stubBuilder/Modifiers.txt
@@ -0,0 +1,27 @@
+PsiJavaFileStub [pack]
+  PsiClassStub[name=Modifiers fqn=pack.Modifiers]
+    PsiModifierListStub[mask=1]
+    PsiTypeParameterListStub
+    PsiRefListStub[EXTENDS_LIST:]
+    PsiRefListStub[IMPLEMENTS_LIST:]
+    PsiFieldStub[f1:int]
+      PsiModifierListStub[mask=130]
+    PsiFieldStub[f2:int]
+      PsiModifierListStub[mask=66]
+    PsiMethodStub[cons Modifiers:void]
+      PsiModifierListStub[mask=1]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[varargs m1:void]
+      PsiModifierListStub[mask=2]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[i:int...]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[m2:void]
+      PsiModifierListStub[mask=34]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
diff --git a/java/java-tests/testData/psi/cls/stubBuilder/Nullable.txt b/java/java-tests/testData/psi/cls/stubBuilder/Nullable.txt
new file mode 100644
index 0000000..277fe14
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/stubBuilder/Nullable.txt
@@ -0,0 +1,14 @@
+PsiJavaFileStub [org.jetbrains.annotations]
+  PsiClassStub[interface annotation name=Nullable fqn=org.jetbrains.annotations.Nullable]
+    PsiModifierListStub[mask=1025]
+      PsiAnnotationStub[@java.lang.annotation.Documented]
+      PsiAnnotationStub[@java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS)]
+      PsiAnnotationStub[@java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD,java.lang.annotation.ElementType.FIELD,java.lang.annotation.ElementType.PARAMETER,java.lang.annotation.ElementType.LOCAL_VARIABLE})]
+    PsiTypeParameterListStub
+    PsiRefListStub[EXTENDS_LIST:]
+    PsiRefListStub[IMPLEMENTS_LIST:]
+    PsiMethodStub[annotation value:java.lang.String default=""]
+      PsiModifierListStub[mask=1025]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
diff --git a/java/java-tests/testData/psi/cls/stubBuilder/TestSuite.class b/java/java-tests/testData/psi/cls/stubBuilder/TestSuite.class
new file mode 100644
index 0000000..2764caf
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/stubBuilder/TestSuite.class
Binary files differ
diff --git a/java/java-tests/testData/psi/cls/stubBuilder/TestSuite.txt b/java/java-tests/testData/psi/cls/stubBuilder/TestSuite.txt
new file mode 100644
index 0000000..1d1b22a
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/stubBuilder/TestSuite.txt
@@ -0,0 +1,162 @@
+PsiJavaFileStub [junit.framework]
+  PsiClassStub[name=TestSuite fqn=junit.framework.TestSuite]
+    PsiModifierListStub[mask=1]
+    PsiTypeParameterListStub
+    PsiRefListStub[EXTENDS_LIST:]
+    PsiRefListStub[IMPLEMENTS_LIST:junit.framework.Test]
+    PsiFieldStub[fTests:java.util.Vector]
+      PsiModifierListStub[mask=2]
+    PsiFieldStub[fName:java.lang.String]
+      PsiModifierListStub[mask=2]
+    PsiMethodStub[cons TestSuite:void]
+      PsiModifierListStub[mask=1]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[cons TestSuite:void]
+      PsiModifierListStub[mask=1]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[theClass:java.lang.Class]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[name:java.lang.String]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[cons TestSuite:void]
+      PsiModifierListStub[mask=1]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[theClass:java.lang.Class]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[cons TestSuite:void]
+      PsiModifierListStub[mask=1]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[name:java.lang.String]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[addTest:void]
+      PsiModifierListStub[mask=1]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[test:junit.framework.Test]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[addTestSuite:void]
+      PsiModifierListStub[mask=1]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[testClass:java.lang.Class]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[addTestMethod:void]
+      PsiModifierListStub[mask=2]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[m:java.lang.reflect.Method]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[names:java.util.Vector]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[theClass:java.lang.Class]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[createTest:junit.framework.Test]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[theClass:java.lang.Class]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[name:java.lang.String]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[exceptionToString:java.lang.String]
+      PsiModifierListStub[mask=10]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[t:java.lang.Throwable]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[countTestCases:int]
+      PsiModifierListStub[mask=1]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[getTestConstructor:java.lang.reflect.Constructor]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[theClass:java.lang.Class]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:java.lang.NoSuchMethodException]
+    PsiMethodStub[isPublicTestMethod:boolean]
+      PsiModifierListStub[mask=2]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[m:java.lang.reflect.Method]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[isTestMethod:boolean]
+      PsiModifierListStub[mask=2]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[m:java.lang.reflect.Method]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[run:void]
+      PsiModifierListStub[mask=1]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[result:junit.framework.TestResult]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[runTest:void]
+      PsiModifierListStub[mask=1]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[test:junit.framework.Test]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[result:junit.framework.TestResult]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[testAt:junit.framework.Test]
+      PsiModifierListStub[mask=1]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[index:int]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[testCount:int]
+      PsiModifierListStub[mask=1]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[tests:java.util.Enumeration]
+      PsiModifierListStub[mask=1]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[toString:java.lang.String]
+      PsiModifierListStub[mask=1]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[setName:void]
+      PsiModifierListStub[mask=1]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[name:java.lang.String]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[getName:java.lang.String]
+      PsiModifierListStub[mask=1]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[warning:junit.framework.Test]
+      PsiModifierListStub[mask=10]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[message:java.lang.String]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
diff --git a/java/java-tests/testData/psi/cls/stubBuilder/TimeUnit.txt b/java/java-tests/testData/psi/cls/stubBuilder/TimeUnit.txt
new file mode 100644
index 0000000..ffbba35
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/stubBuilder/TimeUnit.txt
@@ -0,0 +1,119 @@
+PsiJavaFileStub [java.util.concurrent]
+  PsiClassStub[enum name=TimeUnit fqn=java.util.concurrent.TimeUnit]
+    PsiModifierListStub[mask=17]
+    PsiTypeParameterListStub
+    PsiRefListStub[EXTENDS_LIST:]
+    PsiRefListStub[IMPLEMENTS_LIST:]
+    PsiFieldStub[enumconst NANOSECONDS:java.util.concurrent.TimeUnit]
+      PsiModifierListStub[mask=25]
+    PsiFieldStub[enumconst MICROSECONDS:java.util.concurrent.TimeUnit]
+      PsiModifierListStub[mask=25]
+    PsiFieldStub[enumconst MILLISECONDS:java.util.concurrent.TimeUnit]
+      PsiModifierListStub[mask=25]
+    PsiFieldStub[enumconst SECONDS:java.util.concurrent.TimeUnit]
+      PsiModifierListStub[mask=25]
+    PsiFieldStub[index:int]
+      PsiModifierListStub[mask=18]
+    PsiFieldStub[multipliers:int[]]
+      PsiModifierListStub[mask=26]
+    PsiFieldStub[overflows:long[]]
+      PsiModifierListStub[mask=26]
+    PsiMethodStub[values:java.util.concurrent.TimeUnit[]]
+      PsiModifierListStub[mask=25]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[valueOf:java.util.concurrent.TimeUnit]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.lang.String]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[cons TimeUnit:void]
+      PsiModifierListStub[mask=2]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:int]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[doConvert:long]
+      PsiModifierListStub[mask=10]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:int]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:long]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[convert:long]
+      PsiModifierListStub[mask=1]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:long]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:java.util.concurrent.TimeUnit]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[toNanos:long]
+      PsiModifierListStub[mask=1]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:long]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[toMicros:long]
+      PsiModifierListStub[mask=1]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:long]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[toMillis:long]
+      PsiModifierListStub[mask=1]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:long]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[toSeconds:long]
+      PsiModifierListStub[mask=1]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:long]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[excessNanos:int]
+      PsiModifierListStub[mask=2]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:long]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:long]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[timedWait:void]
+      PsiModifierListStub[mask=1]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.lang.Object]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:long]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:java.lang.InterruptedException]
+    PsiMethodStub[timedJoin:void]
+      PsiModifierListStub[mask=1]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.lang.Thread]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:long]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:java.lang.InterruptedException]
+    PsiMethodStub[sleep:void]
+      PsiModifierListStub[mask=1]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:long]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:java.lang.InterruptedException]
diff --git a/java/java-tests/testData/psi/cls/stubBuilder/UtilCollections.txt b/java/java-tests/testData/psi/cls/stubBuilder/UtilCollections.txt
new file mode 100644
index 0000000..d58e2e6
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/stubBuilder/UtilCollections.txt
@@ -0,0 +1,2301 @@
+PsiJavaFileStub [java.util]
+  PsiClassStub[name=Collections fqn=java.util.Collections]
+    PsiModifierListStub[mask=1]
+    PsiTypeParameterListStub
+    PsiRefListStub[EXTENDS_LIST:]
+    PsiRefListStub[IMPLEMENTS_LIST:]
+    PsiClassStub[name=CopiesList fqn=java.util.Collections.CopiesList]
+      PsiModifierListStub[mask=10]
+      PsiTypeParameterListStub
+        PsiTypeParameter[E]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiRefListStub[EXTENDS_LIST:java.util.AbstractList<E>]
+      PsiRefListStub[IMPLEMENTS_LIST:java.util.RandomAccess, java.io.Serializable]
+      PsiFieldStub[serialVersionUID:long=2739099268398711800L]
+        PsiModifierListStub[mask=4120]
+      PsiFieldStub[n:int]
+        PsiModifierListStub[mask=4096]
+      PsiFieldStub[element:E]
+        PsiModifierListStub[mask=4096]
+      PsiMethodStub[cons CopiesList:void]
+        PsiModifierListStub[mask=4096]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:int]
+            PsiModifierListStub[mask=0]
+          PsiParameterStub[p2:E]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[size:int]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[contains:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[get:E]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:int]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+    PsiClassStub[name=EmptyList fqn=java.util.Collections.EmptyList]
+      PsiModifierListStub[mask=10]
+      PsiTypeParameterListStub
+      PsiRefListStub[EXTENDS_LIST:java.util.AbstractList<java.lang.Object>]
+      PsiRefListStub[IMPLEMENTS_LIST:java.util.RandomAccess, java.io.Serializable]
+      PsiFieldStub[serialVersionUID:long=8842843931221139166L]
+        PsiModifierListStub[mask=26]
+      PsiMethodStub[cons EmptyList:void]
+        PsiModifierListStub[mask=2]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[size:int]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[contains:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[get:java.lang.Object]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:int]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[readResolve:java.lang.Object]
+        PsiModifierListStub[mask=2]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+    PsiClassStub[name=EmptyMap fqn=java.util.Collections.EmptyMap]
+      PsiModifierListStub[mask=10]
+      PsiTypeParameterListStub
+      PsiRefListStub[EXTENDS_LIST:java.util.AbstractMap<java.lang.Object,java.lang.Object>]
+      PsiRefListStub[IMPLEMENTS_LIST:java.io.Serializable]
+      PsiFieldStub[serialVersionUID:long=6428348081105594320L]
+        PsiModifierListStub[mask=26]
+      PsiMethodStub[cons EmptyMap:void]
+        PsiModifierListStub[mask=2]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[size:int]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[isEmpty:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[containsKey:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[containsValue:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[get:java.lang.Object]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[keySet:java.util.Set<java.lang.Object>]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[values:java.util.Collection<java.lang.Object>]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[entrySet:java.util.Set<java.util.Map.Entry<java.lang.Object,java.lang.Object>>]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[equals:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[hashCode:int]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[readResolve:java.lang.Object]
+        PsiModifierListStub[mask=2]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+    PsiClassStub[name=EmptySet fqn=java.util.Collections.EmptySet]
+      PsiModifierListStub[mask=10]
+      PsiTypeParameterListStub
+      PsiRefListStub[EXTENDS_LIST:java.util.AbstractSet<java.lang.Object>]
+      PsiRefListStub[IMPLEMENTS_LIST:java.io.Serializable]
+      PsiFieldStub[serialVersionUID:long=1582296315990362920L]
+        PsiModifierListStub[mask=26]
+      PsiMethodStub[cons EmptySet:void]
+        PsiModifierListStub[mask=2]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[iterator:java.util.Iterator<java.lang.Object>]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[size:int]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[contains:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[readResolve:java.lang.Object]
+        PsiModifierListStub[mask=2]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+    PsiClassStub[name=ReverseComparator fqn=java.util.Collections.ReverseComparator]
+      PsiModifierListStub[mask=10]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiRefListStub[EXTENDS_LIST:]
+      PsiRefListStub[IMPLEMENTS_LIST:java.util.Comparator<java.lang.Comparable<java.lang.Object>>, java.io.Serializable]
+      PsiFieldStub[serialVersionUID:long=7207038068494060240L]
+        PsiModifierListStub[mask=26]
+      PsiMethodStub[cons ReverseComparator:void]
+        PsiModifierListStub[mask=2]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[compare:int]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.lang.Comparable<java.lang.Object>]
+            PsiModifierListStub[mask=0]
+          PsiParameterStub[p2:java.lang.Comparable<java.lang.Object>]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+    PsiClassStub[name=ReverseComparator2 fqn=java.util.Collections.ReverseComparator2]
+      PsiModifierListStub[mask=10]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiRefListStub[EXTENDS_LIST:]
+      PsiRefListStub[IMPLEMENTS_LIST:java.util.Comparator<T>, java.io.Serializable]
+      PsiFieldStub[serialVersionUID:long=4374092139857L]
+        PsiModifierListStub[mask=26]
+      PsiFieldStub[cmp:java.util.Comparator<T>]
+        PsiModifierListStub[mask=2]
+      PsiMethodStub[cons ReverseComparator2:void]
+        PsiModifierListStub[mask=4096]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.util.Comparator<T>]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[compare:int]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:T]
+            PsiModifierListStub[mask=0]
+          PsiParameterStub[p2:T]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+    PsiClassStub[interface name=SelfComparable fqn=java.util.Collections.SelfComparable]
+      PsiModifierListStub[mask=1034]
+      PsiTypeParameterListStub
+      PsiRefListStub[EXTENDS_LIST:java.lang.Comparable<java.util.Collections.SelfComparable>]
+      PsiRefListStub[IMPLEMENTS_LIST:]
+    PsiClassStub[name=SingletonList fqn=java.util.Collections.SingletonList]
+      PsiModifierListStub[mask=10]
+      PsiTypeParameterListStub
+        PsiTypeParameter[E]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiRefListStub[EXTENDS_LIST:java.util.AbstractList<E>]
+      PsiRefListStub[IMPLEMENTS_LIST:java.util.RandomAccess, java.io.Serializable]
+      PsiFieldStub[serialVersionUID:long=3093736618740652951L]
+        PsiModifierListStub[mask=4120]
+      PsiFieldStub[element:E]
+        PsiModifierListStub[mask=18]
+      PsiMethodStub[cons SingletonList:void]
+        PsiModifierListStub[mask=4096]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:E]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[size:int]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[contains:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[get:E]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:int]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+    PsiClassStub[name=SingletonMap fqn=java.util.Collections.SingletonMap]
+      PsiModifierListStub[mask=10]
+      PsiTypeParameterListStub
+        PsiTypeParameter[K]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+        PsiTypeParameter[V]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiRefListStub[EXTENDS_LIST:java.util.AbstractMap<K,V>]
+      PsiRefListStub[IMPLEMENTS_LIST:java.io.Serializable]
+      PsiClassStub[name=ImmutableEntry fqn=java.util.Collections.SingletonMap.ImmutableEntry]
+        PsiModifierListStub[mask=10]
+        PsiTypeParameterListStub
+          PsiTypeParameter[K]
+            PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+          PsiTypeParameter[V]
+            PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+        PsiRefListStub[EXTENDS_LIST:]
+        PsiRefListStub[IMPLEMENTS_LIST:java.util.Map.Entry<K,V>]
+        PsiFieldStub[k:K]
+          PsiModifierListStub[mask=4112]
+        PsiFieldStub[v:V]
+          PsiModifierListStub[mask=4112]
+        PsiMethodStub[cons ImmutableEntry:void]
+          PsiModifierListStub[mask=4096]
+          PsiTypeParameterListStub
+          PsiParameterListStub
+            PsiParameterStub[p1:K]
+              PsiModifierListStub[mask=0]
+            PsiParameterStub[p2:V]
+              PsiModifierListStub[mask=0]
+          PsiRefListStub[THROWS_LIST:]
+        PsiMethodStub[getKey:K]
+          PsiModifierListStub[mask=1]
+          PsiTypeParameterListStub
+          PsiParameterListStub
+          PsiRefListStub[THROWS_LIST:]
+        PsiMethodStub[getValue:V]
+          PsiModifierListStub[mask=1]
+          PsiTypeParameterListStub
+          PsiParameterListStub
+          PsiRefListStub[THROWS_LIST:]
+        PsiMethodStub[setValue:V]
+          PsiModifierListStub[mask=1]
+          PsiTypeParameterListStub
+          PsiParameterListStub
+            PsiParameterStub[p1:V]
+              PsiModifierListStub[mask=0]
+          PsiRefListStub[THROWS_LIST:]
+        PsiMethodStub[equals:boolean]
+          PsiModifierListStub[mask=1]
+          PsiTypeParameterListStub
+          PsiParameterListStub
+            PsiParameterStub[p1:java.lang.Object]
+              PsiModifierListStub[mask=0]
+          PsiRefListStub[THROWS_LIST:]
+        PsiMethodStub[hashCode:int]
+          PsiModifierListStub[mask=1]
+          PsiTypeParameterListStub
+          PsiParameterListStub
+          PsiRefListStub[THROWS_LIST:]
+        PsiMethodStub[toString:java.lang.String]
+          PsiModifierListStub[mask=1]
+          PsiTypeParameterListStub
+          PsiParameterListStub
+          PsiRefListStub[THROWS_LIST:]
+      PsiFieldStub[serialVersionUID:long=-6979724477215052911L]
+        PsiModifierListStub[mask=26]
+      PsiFieldStub[k:K]
+        PsiModifierListStub[mask=18]
+      PsiFieldStub[v:V]
+        PsiModifierListStub[mask=18]
+      PsiFieldStub[keySet:java.util.Set<K>]
+        PsiModifierListStub[mask=130]
+      PsiFieldStub[entrySet:java.util.Set<java.util.Map.Entry<K,V>>]
+        PsiModifierListStub[mask=130]
+      PsiFieldStub[values:java.util.Collection<V>]
+        PsiModifierListStub[mask=130]
+      PsiMethodStub[cons SingletonMap:void]
+        PsiModifierListStub[mask=4096]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:K]
+            PsiModifierListStub[mask=0]
+          PsiParameterStub[p2:V]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[size:int]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[isEmpty:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[containsKey:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[containsValue:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[get:V]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[keySet:java.util.Set<K>]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[entrySet:java.util.Set<java.util.Map.Entry<K,V>>]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[values:java.util.Collection<V>]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+    PsiClassStub[name=SingletonSet fqn=java.util.Collections.SingletonSet]
+      PsiModifierListStub[mask=10]
+      PsiTypeParameterListStub
+        PsiTypeParameter[E]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiRefListStub[EXTENDS_LIST:java.util.AbstractSet<E>]
+      PsiRefListStub[IMPLEMENTS_LIST:java.io.Serializable]
+      PsiFieldStub[serialVersionUID:long=3193687207550431679L]
+        PsiModifierListStub[mask=26]
+      PsiFieldStub[element:E]
+        PsiModifierListStub[mask=18]
+      PsiMethodStub[cons SingletonSet:void]
+        PsiModifierListStub[mask=4096]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:E]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[iterator:java.util.Iterator<E>]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[size:int]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[contains:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+    PsiClassStub[name=SynchronizedCollection fqn=java.util.Collections.SynchronizedCollection]
+      PsiModifierListStub[mask=4104]
+      PsiTypeParameterListStub
+        PsiTypeParameter[E]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiRefListStub[EXTENDS_LIST:]
+      PsiRefListStub[IMPLEMENTS_LIST:java.util.Collection<E>, java.io.Serializable]
+      PsiFieldStub[serialVersionUID:long=3053995032091335093L]
+        PsiModifierListStub[mask=26]
+      PsiFieldStub[c:java.util.Collection<E>]
+        PsiModifierListStub[mask=4096]
+      PsiFieldStub[mutex:java.lang.Object]
+        PsiModifierListStub[mask=4096]
+      PsiMethodStub[cons SynchronizedCollection:void]
+        PsiModifierListStub[mask=4096]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.util.Collection<E>]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[cons SynchronizedCollection:void]
+        PsiModifierListStub[mask=4096]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.util.Collection<E>]
+            PsiModifierListStub[mask=0]
+          PsiParameterStub[p2:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[size:int]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[isEmpty:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[contains:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[toArray:java.lang.Object[]]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[toArray:T[]]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+          PsiTypeParameter[T]
+            PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+        PsiParameterListStub
+          PsiParameterStub[p1:T[]]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[iterator:java.util.Iterator<E>]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[add:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:E]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[remove:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[containsAll:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.util.Collection<?>]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[addAll:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.util.Collection<? extends E>]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[removeAll:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.util.Collection<?>]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[retainAll:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.util.Collection<?>]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[clear:void]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[toString:java.lang.String]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+    PsiClassStub[name=SynchronizedList fqn=java.util.Collections.SynchronizedList]
+      PsiModifierListStub[mask=4104]
+      PsiTypeParameterListStub
+        PsiTypeParameter[E]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiRefListStub[EXTENDS_LIST:java.util.Collections.SynchronizedCollection<E>]
+      PsiRefListStub[IMPLEMENTS_LIST:java.util.List<E>]
+      PsiFieldStub[serialVersionUID:long=-7754090372962971524L]
+        PsiModifierListStub[mask=4120]
+      PsiFieldStub[list:java.util.List<E>]
+        PsiModifierListStub[mask=4096]
+      PsiMethodStub[cons SynchronizedList:void]
+        PsiModifierListStub[mask=4096]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.util.List<E>]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[cons SynchronizedList:void]
+        PsiModifierListStub[mask=4096]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.util.List<E>]
+            PsiModifierListStub[mask=0]
+          PsiParameterStub[p2:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[equals:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[hashCode:int]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[get:E]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:int]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[set:E]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:int]
+            PsiModifierListStub[mask=0]
+          PsiParameterStub[p2:E]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[add:void]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:int]
+            PsiModifierListStub[mask=0]
+          PsiParameterStub[p2:E]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[remove:E]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:int]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[indexOf:int]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[lastIndexOf:int]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[addAll:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:int]
+            PsiModifierListStub[mask=0]
+          PsiParameterStub[p2:java.util.Collection<? extends E>]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[listIterator:java.util.ListIterator<E>]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[listIterator:java.util.ListIterator<E>]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:int]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[subList:java.util.List<E>]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:int]
+            PsiModifierListStub[mask=0]
+          PsiParameterStub[p2:int]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[readResolve:java.lang.Object]
+        PsiModifierListStub[mask=2]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+    PsiClassStub[name=SynchronizedMap fqn=java.util.Collections.SynchronizedMap]
+      PsiModifierListStub[mask=10]
+      PsiTypeParameterListStub
+        PsiTypeParameter[K]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+        PsiTypeParameter[V]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiRefListStub[EXTENDS_LIST:]
+      PsiRefListStub[IMPLEMENTS_LIST:java.util.Map<K,V>, java.io.Serializable]
+      PsiFieldStub[serialVersionUID:long=1978198479659022715L]
+        PsiModifierListStub[mask=26]
+      PsiFieldStub[m:java.util.Map<K,V>]
+        PsiModifierListStub[mask=2]
+      PsiFieldStub[mutex:java.lang.Object]
+        PsiModifierListStub[mask=4096]
+      PsiFieldStub[keySet:java.util.Set<K>]
+        PsiModifierListStub[mask=130]
+      PsiFieldStub[entrySet:java.util.Set<java.util.Map.Entry<K,V>>]
+        PsiModifierListStub[mask=130]
+      PsiFieldStub[values:java.util.Collection<V>]
+        PsiModifierListStub[mask=130]
+      PsiMethodStub[cons SynchronizedMap:void]
+        PsiModifierListStub[mask=4096]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.util.Map<K,V>]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[cons SynchronizedMap:void]
+        PsiModifierListStub[mask=4096]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.util.Map<K,V>]
+            PsiModifierListStub[mask=0]
+          PsiParameterStub[p2:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[size:int]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[isEmpty:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[containsKey:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[containsValue:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[get:V]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[put:V]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:K]
+            PsiModifierListStub[mask=0]
+          PsiParameterStub[p2:V]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[remove:V]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[putAll:void]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.util.Map<? extends K,? extends V>]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[clear:void]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[keySet:java.util.Set<K>]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[entrySet:java.util.Set<java.util.Map.Entry<K,V>>]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[values:java.util.Collection<V>]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[equals:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[hashCode:int]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[toString:java.lang.String]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+    PsiClassStub[name=SynchronizedRandomAccessList fqn=java.util.Collections.SynchronizedRandomAccessList]
+      PsiModifierListStub[mask=4104]
+      PsiTypeParameterListStub
+        PsiTypeParameter[E]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiRefListStub[EXTENDS_LIST:java.util.Collections.SynchronizedList<E>]
+      PsiRefListStub[IMPLEMENTS_LIST:java.util.RandomAccess]
+      PsiFieldStub[serialVersionUID:long=1530674583602358482L]
+        PsiModifierListStub[mask=4120]
+      PsiMethodStub[cons SynchronizedRandomAccessList:void]
+        PsiModifierListStub[mask=4096]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.util.List<E>]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[cons SynchronizedRandomAccessList:void]
+        PsiModifierListStub[mask=4096]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.util.List<E>]
+            PsiModifierListStub[mask=0]
+          PsiParameterStub[p2:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[subList:java.util.List<E>]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:int]
+            PsiModifierListStub[mask=0]
+          PsiParameterStub[p2:int]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[writeReplace:java.lang.Object]
+        PsiModifierListStub[mask=2]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+    PsiClassStub[name=SynchronizedSet fqn=java.util.Collections.SynchronizedSet]
+      PsiModifierListStub[mask=4104]
+      PsiTypeParameterListStub
+        PsiTypeParameter[E]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiRefListStub[EXTENDS_LIST:java.util.Collections.SynchronizedCollection<E>]
+      PsiRefListStub[IMPLEMENTS_LIST:java.util.Set<E>]
+      PsiFieldStub[serialVersionUID:long=487447009682186044L]
+        PsiModifierListStub[mask=26]
+      PsiMethodStub[cons SynchronizedSet:void]
+        PsiModifierListStub[mask=4096]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.util.Set<E>]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[cons SynchronizedSet:void]
+        PsiModifierListStub[mask=4096]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.util.Set<E>]
+            PsiModifierListStub[mask=0]
+          PsiParameterStub[p2:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[equals:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[hashCode:int]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+    PsiClassStub[name=SynchronizedSortedMap fqn=java.util.Collections.SynchronizedSortedMap]
+      PsiModifierListStub[mask=4104]
+      PsiTypeParameterListStub
+        PsiTypeParameter[K]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+        PsiTypeParameter[V]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiRefListStub[EXTENDS_LIST:java.util.Collections.SynchronizedMap<K,V>]
+      PsiRefListStub[IMPLEMENTS_LIST:java.util.SortedMap<K,V>]
+      PsiFieldStub[serialVersionUID:long=-8798146769416483793L]
+        PsiModifierListStub[mask=26]
+      PsiFieldStub[sm:java.util.SortedMap<K,V>]
+        PsiModifierListStub[mask=2]
+      PsiMethodStub[cons SynchronizedSortedMap:void]
+        PsiModifierListStub[mask=4096]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.util.SortedMap<K,V>]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[cons SynchronizedSortedMap:void]
+        PsiModifierListStub[mask=4096]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.util.SortedMap<K,V>]
+            PsiModifierListStub[mask=0]
+          PsiParameterStub[p2:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[comparator:java.util.Comparator<? super K>]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[subMap:java.util.SortedMap<K,V>]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:K]
+            PsiModifierListStub[mask=0]
+          PsiParameterStub[p2:K]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[headMap:java.util.SortedMap<K,V>]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:K]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[tailMap:java.util.SortedMap<K,V>]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:K]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[firstKey:K]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[lastKey:K]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+    PsiClassStub[name=SynchronizedSortedSet fqn=java.util.Collections.SynchronizedSortedSet]
+      PsiModifierListStub[mask=4104]
+      PsiTypeParameterListStub
+        PsiTypeParameter[E]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiRefListStub[EXTENDS_LIST:java.util.Collections.SynchronizedSet<E>]
+      PsiRefListStub[IMPLEMENTS_LIST:java.util.SortedSet<E>]
+      PsiFieldStub[serialVersionUID:long=8695801310862127406L]
+        PsiModifierListStub[mask=26]
+      PsiFieldStub[ss:java.util.SortedSet<E>]
+        PsiModifierListStub[mask=2]
+      PsiMethodStub[cons SynchronizedSortedSet:void]
+        PsiModifierListStub[mask=4096]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.util.SortedSet<E>]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[cons SynchronizedSortedSet:void]
+        PsiModifierListStub[mask=4096]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.util.SortedSet<E>]
+            PsiModifierListStub[mask=0]
+          PsiParameterStub[p2:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[comparator:java.util.Comparator<? super E>]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[subSet:java.util.SortedSet<E>]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:E]
+            PsiModifierListStub[mask=0]
+          PsiParameterStub[p2:E]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[headSet:java.util.SortedSet<E>]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:E]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[tailSet:java.util.SortedSet<E>]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:E]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[first:E]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[last:E]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+    PsiClassStub[name=UnmodifiableCollection fqn=java.util.Collections.UnmodifiableCollection]
+      PsiModifierListStub[mask=4104]
+      PsiTypeParameterListStub
+        PsiTypeParameter[E]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiRefListStub[EXTENDS_LIST:]
+      PsiRefListStub[IMPLEMENTS_LIST:java.util.Collection<E>, java.io.Serializable]
+      PsiFieldStub[serialVersionUID:long=1820017752578914078L]
+        PsiModifierListStub[mask=26]
+      PsiFieldStub[c:java.util.Collection<? extends E>]
+        PsiModifierListStub[mask=4096]
+      PsiMethodStub[cons UnmodifiableCollection:void]
+        PsiModifierListStub[mask=4096]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.util.Collection<? extends E>]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[size:int]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[isEmpty:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[contains:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[toArray:java.lang.Object[]]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[toArray:T[]]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+          PsiTypeParameter[T]
+            PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+        PsiParameterListStub
+          PsiParameterStub[p1:T[]]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[toString:java.lang.String]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[iterator:java.util.Iterator<E>]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[add:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:E]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[remove:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[containsAll:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.util.Collection<?>]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[addAll:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.util.Collection<? extends E>]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[removeAll:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.util.Collection<?>]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[retainAll:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.util.Collection<?>]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[clear:void]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+    PsiClassStub[name=UnmodifiableList fqn=java.util.Collections.UnmodifiableList]
+      PsiModifierListStub[mask=4104]
+      PsiTypeParameterListStub
+        PsiTypeParameter[E]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiRefListStub[EXTENDS_LIST:java.util.Collections.UnmodifiableCollection<E>]
+      PsiRefListStub[IMPLEMENTS_LIST:java.util.List<E>]
+      PsiFieldStub[serialVersionUID:long=-283967356065247728L]
+        PsiModifierListStub[mask=4120]
+      PsiFieldStub[list:java.util.List<? extends E>]
+        PsiModifierListStub[mask=4096]
+      PsiMethodStub[cons UnmodifiableList:void]
+        PsiModifierListStub[mask=4096]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.util.List<? extends E>]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[equals:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[hashCode:int]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[get:E]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:int]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[set:E]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:int]
+            PsiModifierListStub[mask=0]
+          PsiParameterStub[p2:E]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[add:void]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:int]
+            PsiModifierListStub[mask=0]
+          PsiParameterStub[p2:E]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[remove:E]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:int]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[indexOf:int]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[lastIndexOf:int]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[addAll:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:int]
+            PsiModifierListStub[mask=0]
+          PsiParameterStub[p2:java.util.Collection<? extends E>]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[listIterator:java.util.ListIterator<E>]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[listIterator:java.util.ListIterator<E>]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:int]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[subList:java.util.List<E>]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:int]
+            PsiModifierListStub[mask=0]
+          PsiParameterStub[p2:int]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[readResolve:java.lang.Object]
+        PsiModifierListStub[mask=2]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+    PsiClassStub[name=UnmodifiableMap fqn=java.util.Collections.UnmodifiableMap]
+      PsiModifierListStub[mask=10]
+      PsiTypeParameterListStub
+        PsiTypeParameter[K]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+        PsiTypeParameter[V]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiRefListStub[EXTENDS_LIST:]
+      PsiRefListStub[IMPLEMENTS_LIST:java.util.Map<K,V>, java.io.Serializable]
+      PsiClassStub[name=UnmodifiableEntrySet fqn=java.util.Collections.UnmodifiableMap.UnmodifiableEntrySet]
+        PsiModifierListStub[mask=4104]
+        PsiTypeParameterListStub
+          PsiTypeParameter[K]
+            PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+          PsiTypeParameter[V]
+            PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+        PsiRefListStub[EXTENDS_LIST:java.util.Collections.UnmodifiableSet<java.util.Map.Entry<K,V>>]
+        PsiRefListStub[IMPLEMENTS_LIST:]
+        PsiClassStub[name=UnmodifiableEntry fqn=java.util.Collections.UnmodifiableMap.UnmodifiableEntrySet.UnmodifiableEntry]
+          PsiModifierListStub[mask=10]
+          PsiTypeParameterListStub
+            PsiTypeParameter[K]
+              PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+            PsiTypeParameter[V]
+              PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+          PsiRefListStub[EXTENDS_LIST:]
+          PsiRefListStub[IMPLEMENTS_LIST:java.util.Map.Entry<K,V>]
+          PsiFieldStub[e:java.util.Map.Entry<? extends K,? extends V>]
+            PsiModifierListStub[mask=2]
+          PsiMethodStub[cons UnmodifiableEntry:void]
+            PsiModifierListStub[mask=4096]
+            PsiTypeParameterListStub
+            PsiParameterListStub
+              PsiParameterStub[p1:java.util.Map.Entry<? extends K,? extends V>]
+                PsiModifierListStub[mask=0]
+            PsiRefListStub[THROWS_LIST:]
+          PsiMethodStub[getKey:K]
+            PsiModifierListStub[mask=1]
+            PsiTypeParameterListStub
+            PsiParameterListStub
+            PsiRefListStub[THROWS_LIST:]
+          PsiMethodStub[getValue:V]
+            PsiModifierListStub[mask=1]
+            PsiTypeParameterListStub
+            PsiParameterListStub
+            PsiRefListStub[THROWS_LIST:]
+          PsiMethodStub[setValue:V]
+            PsiModifierListStub[mask=1]
+            PsiTypeParameterListStub
+            PsiParameterListStub
+              PsiParameterStub[p1:V]
+                PsiModifierListStub[mask=0]
+            PsiRefListStub[THROWS_LIST:]
+          PsiMethodStub[hashCode:int]
+            PsiModifierListStub[mask=1]
+            PsiTypeParameterListStub
+            PsiParameterListStub
+            PsiRefListStub[THROWS_LIST:]
+          PsiMethodStub[equals:boolean]
+            PsiModifierListStub[mask=1]
+            PsiTypeParameterListStub
+            PsiParameterListStub
+              PsiParameterStub[p1:java.lang.Object]
+                PsiModifierListStub[mask=0]
+            PsiRefListStub[THROWS_LIST:]
+          PsiMethodStub[toString:java.lang.String]
+            PsiModifierListStub[mask=1]
+            PsiTypeParameterListStub
+            PsiParameterListStub
+            PsiRefListStub[THROWS_LIST:]
+        PsiFieldStub[serialVersionUID:long=7854390611657943733L]
+          PsiModifierListStub[mask=26]
+        PsiMethodStub[cons UnmodifiableEntrySet:void]
+          PsiModifierListStub[mask=4096]
+          PsiTypeParameterListStub
+          PsiParameterListStub
+            PsiParameterStub[p1:java.util.Set<? extends java.util.Map.Entry<? extends K,? extends V>>]
+              PsiModifierListStub[mask=0]
+          PsiRefListStub[THROWS_LIST:]
+        PsiMethodStub[iterator:java.util.Iterator<java.util.Map.Entry<K,V>>]
+          PsiModifierListStub[mask=1]
+          PsiTypeParameterListStub
+          PsiParameterListStub
+          PsiRefListStub[THROWS_LIST:]
+        PsiMethodStub[toArray:java.lang.Object[]]
+          PsiModifierListStub[mask=1]
+          PsiTypeParameterListStub
+          PsiParameterListStub
+          PsiRefListStub[THROWS_LIST:]
+        PsiMethodStub[toArray:T[]]
+          PsiModifierListStub[mask=1]
+          PsiTypeParameterListStub
+            PsiTypeParameter[T]
+              PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+          PsiParameterListStub
+            PsiParameterStub[p1:T[]]
+              PsiModifierListStub[mask=0]
+          PsiRefListStub[THROWS_LIST:]
+        PsiMethodStub[contains:boolean]
+          PsiModifierListStub[mask=1]
+          PsiTypeParameterListStub
+          PsiParameterListStub
+            PsiParameterStub[p1:java.lang.Object]
+              PsiModifierListStub[mask=0]
+          PsiRefListStub[THROWS_LIST:]
+        PsiMethodStub[containsAll:boolean]
+          PsiModifierListStub[mask=1]
+          PsiTypeParameterListStub
+          PsiParameterListStub
+            PsiParameterStub[p1:java.util.Collection<?>]
+              PsiModifierListStub[mask=0]
+          PsiRefListStub[THROWS_LIST:]
+        PsiMethodStub[equals:boolean]
+          PsiModifierListStub[mask=1]
+          PsiTypeParameterListStub
+          PsiParameterListStub
+            PsiParameterStub[p1:java.lang.Object]
+              PsiModifierListStub[mask=0]
+          PsiRefListStub[THROWS_LIST:]
+      PsiFieldStub[serialVersionUID:long=-1034234728574286014L]
+        PsiModifierListStub[mask=26]
+      PsiFieldStub[m:java.util.Map<? extends K,? extends V>]
+        PsiModifierListStub[mask=18]
+      PsiFieldStub[keySet:java.util.Set<K>]
+        PsiModifierListStub[mask=130]
+      PsiFieldStub[entrySet:java.util.Set<java.util.Map.Entry<K,V>>]
+        PsiModifierListStub[mask=130]
+      PsiFieldStub[values:java.util.Collection<V>]
+        PsiModifierListStub[mask=130]
+      PsiMethodStub[cons UnmodifiableMap:void]
+        PsiModifierListStub[mask=4096]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.util.Map<? extends K,? extends V>]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[size:int]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[isEmpty:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[containsKey:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[containsValue:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[get:V]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[put:V]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:K]
+            PsiModifierListStub[mask=0]
+          PsiParameterStub[p2:V]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[remove:V]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[putAll:void]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.util.Map<? extends K,? extends V>]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[clear:void]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[keySet:java.util.Set<K>]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[entrySet:java.util.Set<java.util.Map.Entry<K,V>>]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[values:java.util.Collection<V>]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[equals:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[hashCode:int]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[toString:java.lang.String]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+    PsiClassStub[name=UnmodifiableRandomAccessList fqn=java.util.Collections.UnmodifiableRandomAccessList]
+      PsiModifierListStub[mask=4104]
+      PsiTypeParameterListStub
+        PsiTypeParameter[E]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiRefListStub[EXTENDS_LIST:java.util.Collections.UnmodifiableList<E>]
+      PsiRefListStub[IMPLEMENTS_LIST:java.util.RandomAccess]
+      PsiFieldStub[serialVersionUID:long=-2542308836966382001L]
+        PsiModifierListStub[mask=26]
+      PsiMethodStub[cons UnmodifiableRandomAccessList:void]
+        PsiModifierListStub[mask=4096]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.util.List<? extends E>]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[subList:java.util.List<E>]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:int]
+            PsiModifierListStub[mask=0]
+          PsiParameterStub[p2:int]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[writeReplace:java.lang.Object]
+        PsiModifierListStub[mask=2]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+    PsiClassStub[name=UnmodifiableSet fqn=java.util.Collections.UnmodifiableSet]
+      PsiModifierListStub[mask=4104]
+      PsiTypeParameterListStub
+        PsiTypeParameter[E]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiRefListStub[EXTENDS_LIST:java.util.Collections.UnmodifiableCollection<E>]
+      PsiRefListStub[IMPLEMENTS_LIST:java.util.Set<E>, java.io.Serializable]
+      PsiFieldStub[serialVersionUID:long=-9215047833775013803L]
+        PsiModifierListStub[mask=26]
+      PsiMethodStub[cons UnmodifiableSet:void]
+        PsiModifierListStub[mask=4096]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.util.Set<? extends E>]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[equals:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[hashCode:int]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+    PsiClassStub[name=UnmodifiableSortedMap fqn=java.util.Collections.UnmodifiableSortedMap]
+      PsiModifierListStub[mask=4104]
+      PsiTypeParameterListStub
+        PsiTypeParameter[K]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+        PsiTypeParameter[V]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiRefListStub[EXTENDS_LIST:java.util.Collections.UnmodifiableMap<K,V>]
+      PsiRefListStub[IMPLEMENTS_LIST:java.util.SortedMap<K,V>, java.io.Serializable]
+      PsiFieldStub[serialVersionUID:long=-8806743815996713206L]
+        PsiModifierListStub[mask=26]
+      PsiFieldStub[sm:java.util.SortedMap<K,? extends V>]
+        PsiModifierListStub[mask=2]
+      PsiMethodStub[cons UnmodifiableSortedMap:void]
+        PsiModifierListStub[mask=4096]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.util.SortedMap<K,? extends V>]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[comparator:java.util.Comparator<? super K>]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[subMap:java.util.SortedMap<K,V>]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:K]
+            PsiModifierListStub[mask=0]
+          PsiParameterStub[p2:K]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[headMap:java.util.SortedMap<K,V>]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:K]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[tailMap:java.util.SortedMap<K,V>]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:K]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[firstKey:K]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[lastKey:K]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+    PsiClassStub[name=UnmodifiableSortedSet fqn=java.util.Collections.UnmodifiableSortedSet]
+      PsiModifierListStub[mask=4104]
+      PsiTypeParameterListStub
+        PsiTypeParameter[E]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiRefListStub[EXTENDS_LIST:java.util.Collections.UnmodifiableSet<E>]
+      PsiRefListStub[IMPLEMENTS_LIST:java.util.SortedSet<E>, java.io.Serializable]
+      PsiFieldStub[serialVersionUID:long=-4929149591599911165L]
+        PsiModifierListStub[mask=26]
+      PsiFieldStub[ss:java.util.SortedSet<E>]
+        PsiModifierListStub[mask=2]
+      PsiMethodStub[cons UnmodifiableSortedSet:void]
+        PsiModifierListStub[mask=4096]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.util.SortedSet<E>]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[comparator:java.util.Comparator<? super E>]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[subSet:java.util.SortedSet<E>]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:E]
+            PsiModifierListStub[mask=0]
+          PsiParameterStub[p2:E]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[headSet:java.util.SortedSet<E>]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:E]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[tailSet:java.util.SortedSet<E>]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:E]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[first:E]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[last:E]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+    PsiFieldStub[BINARYSEARCH_THRESHOLD:int=5000]
+      PsiModifierListStub[mask=26]
+    PsiFieldStub[REVERSE_THRESHOLD:int=18]
+      PsiModifierListStub[mask=26]
+    PsiFieldStub[SHUFFLE_THRESHOLD:int=5]
+      PsiModifierListStub[mask=26]
+    PsiFieldStub[FILL_THRESHOLD:int=25]
+      PsiModifierListStub[mask=26]
+    PsiFieldStub[ROTATE_THRESHOLD:int=100]
+      PsiModifierListStub[mask=26]
+    PsiFieldStub[COPY_THRESHOLD:int=10]
+      PsiModifierListStub[mask=26]
+    PsiFieldStub[REPLACEALL_THRESHOLD:int=11]
+      PsiModifierListStub[mask=26]
+    PsiFieldStub[INDEXOFSUBLIST_THRESHOLD:int=35]
+      PsiModifierListStub[mask=26]
+    PsiFieldStub[r:java.util.Random]
+      PsiModifierListStub[mask=10]
+    PsiFieldStub[EMPTY_SET:java.util.Set]
+      PsiModifierListStub[mask=25]
+    PsiFieldStub[EMPTY_LIST:java.util.List]
+      PsiModifierListStub[mask=25]
+    PsiFieldStub[EMPTY_MAP:java.util.Map]
+      PsiModifierListStub[mask=25]
+    PsiFieldStub[REVERSE_ORDER:java.util.Comparator]
+      PsiModifierListStub[mask=26]
+    PsiMethodStub[cons Collections:void]
+      PsiModifierListStub[mask=2]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[sort:void]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:java.lang.Comparable<? super T>]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.List<T>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[sort:void]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.List<T>]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:java.util.Comparator<? super T>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[binarySearch:int]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:java.lang.Comparable<? super T>]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.List<? extends T>]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:T]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[indexedBinarySearch:int]
+      PsiModifierListStub[mask=10]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:java.lang.Comparable<? super T>]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.List<? extends T>]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:T]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[iteratorBinarySearch:int]
+      PsiModifierListStub[mask=10]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:java.lang.Comparable<? super T>]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.List<? extends T>]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:T]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[get:T]
+      PsiModifierListStub[mask=10]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.ListIterator<? extends T>]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:int]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[binarySearch:int]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.List<? extends T>]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:T]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p3:java.util.Comparator<? super T>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[indexedBinarySearch:int]
+      PsiModifierListStub[mask=10]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.List<? extends T>]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:T]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p3:java.util.Comparator<? super T>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[iteratorBinarySearch:int]
+      PsiModifierListStub[mask=10]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.List<? extends T>]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:T]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p3:java.util.Comparator<? super T>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[reverse:void]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.List<?>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[shuffle:void]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.List<?>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[shuffle:void]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.List<?>]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:java.util.Random]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[swap:void]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.List<?>]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:int]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p3:int]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[swap:void]
+      PsiModifierListStub[mask=10]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.lang.Object[]]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:int]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p3:int]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[fill:void]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.List<? super T>]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:T]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[copy:void]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.List<? super T>]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:java.util.List<? extends T>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[min:T]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:java.lang.Comparable<? super T>]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.Collection<? extends T>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[min:T]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.Collection<? extends T>]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:java.util.Comparator<? super T>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[max:T]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:java.lang.Comparable<? super T>]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.Collection<? extends T>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[max:T]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.Collection<? extends T>]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:java.util.Comparator<? super T>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[rotate:void]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.List<?>]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:int]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[rotate1:void]
+      PsiModifierListStub[mask=10]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.List<T>]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:int]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[rotate2:void]
+      PsiModifierListStub[mask=10]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.List<?>]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:int]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[replaceAll:boolean]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.List<T>]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:T]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p3:T]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[indexOfSubList:int]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.List<?>]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:java.util.List<?>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[lastIndexOfSubList:int]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.List<?>]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:java.util.List<?>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[unmodifiableCollection:java.util.Collection<T>]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.Collection<? extends T>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[unmodifiableSet:java.util.Set<T>]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.Set<? extends T>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[unmodifiableSortedSet:java.util.SortedSet<T>]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.SortedSet<T>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[unmodifiableList:java.util.List<T>]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.List<? extends T>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[unmodifiableMap:java.util.Map<K,V>]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+        PsiTypeParameter[K]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+        PsiTypeParameter[V]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.Map<? extends K,? extends V>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[unmodifiableSortedMap:java.util.SortedMap<K,V>]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+        PsiTypeParameter[K]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+        PsiTypeParameter[V]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.SortedMap<K,? extends V>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[synchronizedCollection:java.util.Collection<T>]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.Collection<T>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[synchronizedCollection:java.util.Collection<T>]
+      PsiModifierListStub[mask=4104]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.Collection<T>]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:java.lang.Object]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[synchronizedSet:java.util.Set<T>]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.Set<T>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[synchronizedSet:java.util.Set<T>]
+      PsiModifierListStub[mask=4104]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.Set<T>]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:java.lang.Object]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[synchronizedSortedSet:java.util.SortedSet<T>]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.SortedSet<T>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[synchronizedList:java.util.List<T>]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.List<T>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[synchronizedList:java.util.List<T>]
+      PsiModifierListStub[mask=4104]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.List<T>]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:java.lang.Object]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[synchronizedMap:java.util.Map<K,V>]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+        PsiTypeParameter[K]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+        PsiTypeParameter[V]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.Map<K,V>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[synchronizedSortedMap:java.util.SortedMap<K,V>]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+        PsiTypeParameter[K]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+        PsiTypeParameter[V]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.SortedMap<K,V>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[checkedCollection:java.util.Collection<E>]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+        PsiTypeParameter[E]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.Collection<E>]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:java.lang.Class<E>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[checkedSet:java.util.Set<E>]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+        PsiTypeParameter[E]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.Set<E>]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:java.lang.Class<E>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[checkedSortedSet:java.util.SortedSet<E>]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+        PsiTypeParameter[E]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.SortedSet<E>]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:java.lang.Class<E>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[checkedList:java.util.List<E>]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+        PsiTypeParameter[E]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.List<E>]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:java.lang.Class<E>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[checkedMap:java.util.Map<K,V>]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+        PsiTypeParameter[K]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+        PsiTypeParameter[V]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.Map<K,V>]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:java.lang.Class<K>]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p3:java.lang.Class<V>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[checkedSortedMap:java.util.SortedMap<K,V>]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+        PsiTypeParameter[K]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+        PsiTypeParameter[V]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.SortedMap<K,V>]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:java.lang.Class<K>]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p3:java.lang.Class<V>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[emptySet:java.util.Set<T>]
+      PsiModifierListStub[mask=25]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[emptyList:java.util.List<T>]
+      PsiModifierListStub[mask=25]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[emptyMap:java.util.Map<K,V>]
+      PsiModifierListStub[mask=25]
+      PsiTypeParameterListStub
+        PsiTypeParameter[K]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+        PsiTypeParameter[V]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[singleton:java.util.Set<T>]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:T]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[singletonList:java.util.List<T>]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:T]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[singletonMap:java.util.Map<K,V>]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+        PsiTypeParameter[K]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+        PsiTypeParameter[V]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:K]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:V]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[nCopies:java.util.List<T>]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:int]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:T]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[reverseOrder:java.util.Comparator<T>]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[reverseOrder:java.util.Comparator<T>]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.Comparator<T>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[enumeration:java.util.Enumeration<T>]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.Collection<T>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[list:java.util.ArrayList<T>]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.Enumeration<T>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[eq:boolean]
+      PsiModifierListStub[mask=10]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.lang.Object]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:java.lang.Object]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[frequency:int]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.Collection<?>]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:java.lang.Object]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[disjoint:boolean]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.Collection<?>]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:java.util.Collection<?>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[varargs addAll:boolean]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.Collection<? super T>]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:T...]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
diff --git a/java/java-tests/testData/psi/cls/stubBuilder/UtilHashMap.txt b/java/java-tests/testData/psi/cls/stubBuilder/UtilHashMap.txt
new file mode 100644
index 0000000..5c2b9d8
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/stubBuilder/UtilHashMap.txt
@@ -0,0 +1,308 @@
+PsiJavaFileStub [java.util]
+  PsiClassStub[name=HashMap fqn=java.util.HashMap]
+    PsiModifierListStub[mask=1]
+    PsiTypeParameterListStub
+      PsiTypeParameter[K]
+        PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiTypeParameter[V]
+        PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+    PsiRefListStub[EXTENDS_LIST:java.util.AbstractMap<K,V>]
+    PsiRefListStub[IMPLEMENTS_LIST:java.util.Map<K,V>, java.lang.Cloneable, java.io.Serializable]
+    PsiFieldStub[DEFAULT_INITIAL_CAPACITY:int=16]
+      PsiModifierListStub[mask=4120]
+    PsiFieldStub[MAXIMUM_CAPACITY:int=1073741824]
+      PsiModifierListStub[mask=4120]
+    PsiFieldStub[DEFAULT_LOAD_FACTOR:float=0.75f]
+      PsiModifierListStub[mask=4120]
+    PsiFieldStub[table:java.util.HashMap.Entry[]]
+      PsiModifierListStub[mask=4224]
+    PsiFieldStub[size:int]
+      PsiModifierListStub[mask=4224]
+    PsiFieldStub[threshold:int]
+      PsiModifierListStub[mask=4096]
+    PsiFieldStub[loadFactor:float]
+      PsiModifierListStub[mask=4112]
+    PsiFieldStub[modCount:int]
+      PsiModifierListStub[mask=4288]
+    PsiFieldStub[NULL_KEY:java.lang.Object]
+      PsiModifierListStub[mask=4120]
+    PsiFieldStub[entrySet:java.util.Set<java.util.Map.Entry<K,V>>]
+      PsiModifierListStub[mask=130]
+    PsiFieldStub[serialVersionUID:long=362498820763181265L]
+      PsiModifierListStub[mask=26]
+    PsiMethodStub[cons HashMap:void]
+      PsiModifierListStub[mask=1]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:int]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:float]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[cons HashMap:void]
+      PsiModifierListStub[mask=1]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:int]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[cons HashMap:void]
+      PsiModifierListStub[mask=1]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[cons HashMap:void]
+      PsiModifierListStub[mask=1]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.Map<? extends K,? extends V>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[init:void]
+      PsiModifierListStub[mask=4096]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[maskNull:T]
+      PsiModifierListStub[mask=4104]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:T]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[unmaskNull:T]
+      PsiModifierListStub[mask=4104]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:T]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[hash:int]
+      PsiModifierListStub[mask=4104]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.lang.Object]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[eq:boolean]
+      PsiModifierListStub[mask=4104]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.lang.Object]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:java.lang.Object]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[indexFor:int]
+      PsiModifierListStub[mask=4104]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:int]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:int]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[size:int]
+      PsiModifierListStub[mask=1]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[isEmpty:boolean]
+      PsiModifierListStub[mask=1]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[get:V]
+      PsiModifierListStub[mask=1]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.lang.Object]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[containsKey:boolean]
+      PsiModifierListStub[mask=1]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.lang.Object]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[getEntry:java.util.HashMap.Entry<K,V>]
+      PsiModifierListStub[mask=4096]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.lang.Object]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[put:V]
+      PsiModifierListStub[mask=1]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:K]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:V]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[putForCreate:void]
+      PsiModifierListStub[mask=2]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:K]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:V]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[putAllForCreate:void]
+      PsiModifierListStub[mask=4096]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.Map<? extends K,? extends V>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[resize:void]
+      PsiModifierListStub[mask=4096]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:int]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[transfer:void]
+      PsiModifierListStub[mask=4096]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.HashMap.Entry[]]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[putAll:void]
+      PsiModifierListStub[mask=1]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.Map<? extends K,? extends V>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[remove:V]
+      PsiModifierListStub[mask=1]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.lang.Object]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[removeEntryForKey:java.util.HashMap.Entry<K,V>]
+      PsiModifierListStub[mask=4096]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.lang.Object]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[removeMapping:java.util.HashMap.Entry<K,V>]
+      PsiModifierListStub[mask=4096]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.lang.Object]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[clear:void]
+      PsiModifierListStub[mask=1]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[containsValue:boolean]
+      PsiModifierListStub[mask=1]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.lang.Object]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[containsNullValue:boolean]
+      PsiModifierListStub[mask=2]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[clone:java.lang.Object]
+      PsiModifierListStub[mask=1]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[addEntry:void]
+      PsiModifierListStub[mask=4096]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:int]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:K]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p3:V]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p4:int]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[createEntry:void]
+      PsiModifierListStub[mask=4096]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:int]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:K]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p3:V]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p4:int]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[newKeyIterator:java.util.Iterator<K>]
+      PsiModifierListStub[mask=4096]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[newValueIterator:java.util.Iterator<V>]
+      PsiModifierListStub[mask=4096]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[newEntryIterator:java.util.Iterator<java.util.Map.Entry<K,V>>]
+      PsiModifierListStub[mask=4096]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[keySet:java.util.Set<K>]
+      PsiModifierListStub[mask=1]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[values:java.util.Collection<V>]
+      PsiModifierListStub[mask=1]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[entrySet:java.util.Set<java.util.Map.Entry<K,V>>]
+      PsiModifierListStub[mask=1]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[writeObject:void]
+      PsiModifierListStub[mask=2]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.io.ObjectOutputStream]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:java.io.IOException]
+    PsiMethodStub[readObject:void]
+      PsiModifierListStub[mask=2]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.io.ObjectInputStream]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:java.io.IOException, java.lang.ClassNotFoundException]
+    PsiMethodStub[capacity:int]
+      PsiModifierListStub[mask=4096]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[loadFactor:float]
+      PsiModifierListStub[mask=4096]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
diff --git a/java/java-tests/testData/psi/cls/stubBuilder/UtilList.txt b/java/java-tests/testData/psi/cls/stubBuilder/UtilList.txt
new file mode 100644
index 0000000..5744cbe
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/stubBuilder/UtilList.txt
@@ -0,0 +1,179 @@
+PsiJavaFileStub [java.util]
+  PsiClassStub[interface name=List fqn=java.util.List]
+    PsiModifierListStub[mask=1025]
+    PsiTypeParameterListStub
+      PsiTypeParameter[E]
+        PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+    PsiRefListStub[EXTENDS_LIST:java.util.Collection<E>]
+    PsiRefListStub[IMPLEMENTS_LIST:]
+    PsiMethodStub[size:int]
+      PsiModifierListStub[mask=1025]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[isEmpty:boolean]
+      PsiModifierListStub[mask=1025]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[contains:boolean]
+      PsiModifierListStub[mask=1025]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.lang.Object]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[iterator:java.util.Iterator<E>]
+      PsiModifierListStub[mask=1025]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[toArray:java.lang.Object[]]
+      PsiModifierListStub[mask=1025]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[toArray:T[]]
+      PsiModifierListStub[mask=1025]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:T[]]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[add:boolean]
+      PsiModifierListStub[mask=1025]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:E]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[remove:boolean]
+      PsiModifierListStub[mask=1025]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.lang.Object]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[containsAll:boolean]
+      PsiModifierListStub[mask=1025]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.Collection<?>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[addAll:boolean]
+      PsiModifierListStub[mask=1025]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.Collection<? extends E>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[addAll:boolean]
+      PsiModifierListStub[mask=1025]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:int]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:java.util.Collection<? extends E>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[removeAll:boolean]
+      PsiModifierListStub[mask=1025]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.Collection<?>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[retainAll:boolean]
+      PsiModifierListStub[mask=1025]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.Collection<?>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[clear:void]
+      PsiModifierListStub[mask=1025]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[equals:boolean]
+      PsiModifierListStub[mask=1025]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.lang.Object]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[hashCode:int]
+      PsiModifierListStub[mask=1025]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[get:E]
+      PsiModifierListStub[mask=1025]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:int]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[set:E]
+      PsiModifierListStub[mask=1025]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:int]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:E]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[add:void]
+      PsiModifierListStub[mask=1025]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:int]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:E]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[remove:E]
+      PsiModifierListStub[mask=1025]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:int]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[indexOf:int]
+      PsiModifierListStub[mask=1025]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.lang.Object]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[lastIndexOf:int]
+      PsiModifierListStub[mask=1025]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.lang.Object]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[listIterator:java.util.ListIterator<E>]
+      PsiModifierListStub[mask=1025]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[listIterator:java.util.ListIterator<E>]
+      PsiModifierListStub[mask=1025]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:int]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[subList:java.util.List<E>]
+      PsiModifierListStub[mask=1025]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:int]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:int]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
diff --git a/java/java-tests/testData/psi/cls/stubBuilder/UtilMap.txt b/java/java-tests/testData/psi/cls/stubBuilder/UtilMap.txt
new file mode 100644
index 0000000..2132f3b
--- /dev/null
+++ b/java/java-tests/testData/psi/cls/stubBuilder/UtilMap.txt
@@ -0,0 +1,134 @@
+PsiJavaFileStub [java.util]
+  PsiClassStub[interface name=Map fqn=java.util.Map]
+    PsiModifierListStub[mask=1025]
+    PsiTypeParameterListStub
+      PsiTypeParameter[K]
+        PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiTypeParameter[V]
+        PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+    PsiRefListStub[EXTENDS_LIST:]
+    PsiRefListStub[IMPLEMENTS_LIST:]
+    PsiClassStub[interface name=Entry fqn=java.util.Map.Entry]
+      PsiModifierListStub[mask=1033]
+      PsiTypeParameterListStub
+        PsiTypeParameter[K]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+        PsiTypeParameter[V]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiRefListStub[EXTENDS_LIST:]
+      PsiRefListStub[IMPLEMENTS_LIST:]
+      PsiMethodStub[getKey:K]
+        PsiModifierListStub[mask=1025]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[getValue:V]
+        PsiModifierListStub[mask=1025]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[setValue:V]
+        PsiModifierListStub[mask=1025]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:V]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[equals:boolean]
+        PsiModifierListStub[mask=1025]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[hashCode:int]
+        PsiModifierListStub[mask=1025]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[size:int]
+      PsiModifierListStub[mask=1025]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[isEmpty:boolean]
+      PsiModifierListStub[mask=1025]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[containsKey:boolean]
+      PsiModifierListStub[mask=1025]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.lang.Object]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[containsValue:boolean]
+      PsiModifierListStub[mask=1025]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.lang.Object]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[get:V]
+      PsiModifierListStub[mask=1025]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.lang.Object]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[put:V]
+      PsiModifierListStub[mask=1025]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:K]
+          PsiModifierListStub[mask=0]
+        PsiParameterStub[p2:V]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[remove:V]
+      PsiModifierListStub[mask=1025]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.lang.Object]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[putAll:void]
+      PsiModifierListStub[mask=1025]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.Map<? extends K,? extends V>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[clear:void]
+      PsiModifierListStub[mask=1025]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[keySet:java.util.Set<K>]
+      PsiModifierListStub[mask=1025]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[values:java.util.Collection<V>]
+      PsiModifierListStub[mask=1025]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[entrySet:java.util.Set<java.util.Map.Entry<K,V>>]
+      PsiModifierListStub[mask=1025]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[equals:boolean]
+      PsiModifierListStub[mask=1025]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+        PsiParameterStub[p1:java.lang.Object]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[hashCode:int]
+      PsiModifierListStub[mask=1025]
+      PsiTypeParameterListStub
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
diff --git a/java/java-tests/testData/psi/constantValues/ClassWithConstants.java b/java/java-tests/testData/psi/constantValues/ClassWithConstants.java
new file mode 100644
index 0000000..374c0cf
--- /dev/null
+++ b/java/java-tests/testData/psi/constantValues/ClassWithConstants.java
@@ -0,0 +1,19 @@
+public class ClassWithConstants {
+  public static final int INT_CONST1 = 1;
+  public static final int INT_CONST2 = -1;
+  public static final int INT_CONST3 = -2147483648;
+  public static final long LONG_CONST1 = 2;
+  public static final long LONG_CONST2 = 1000000000000L;
+  public static final long LONG_CONST3 = -9223372036854775808L;
+  public static final short SHORT_CONST = 3;
+  public static final byte BYTE_CONST = 4;
+  public static final char CHAR_CONST = '5';
+  public static final boolean BOOL_CONST = true;
+  public static final float FLOAT_CONST = 1.234f;
+  public static final double DOUBLE_CONST = 3.456;
+  public static final java.lang.String STRING_CONST = "a\r\n\"bcd";
+
+  public static final double d1 = Double.POSITIVE_INFINITY;
+  public static final double d2 = Double.NEGATIVE_INFINITY;
+  public static final double d3 = Double.NaN;
+}
diff --git a/java/java-tests/testData/psi/controlFlow/flow0.java b/java/java-tests/testData/psi/controlFlow/flow0.java
new file mode 100644
index 0000000..8255213
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flow0.java
@@ -0,0 +1,5 @@
+// LocalsOrMyInstanceFieldsControlFlowPolicy
+public class a {
+  void f() {<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/controlFlow/flow0.txt b/java/java-tests/testData/psi/controlFlow/flow0.txt
new file mode 100644
index 0000000..7a91a25
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flow0.txt
@@ -0,0 +1 @@
+0: EMPTY
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/controlFlow/flow1.java b/java/java-tests/testData/psi/controlFlow/flow1.java
new file mode 100644
index 0000000..8288e77
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flow1.java
@@ -0,0 +1,10 @@
+// LocalsOrMyInstanceFieldsControlFlowPolicy
+public class a {
+  void f() {<caret>
+    int i = 0;
+    if (i==0) {
+      i = 5;
+      i = 9;
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/controlFlow/flow1.txt b/java/java-tests/testData/psi/controlFlow/flow1.txt
new file mode 100644
index 0000000..f29710d
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flow1.txt
@@ -0,0 +1,5 @@
+0: WRITE i
+1: READ i
+2: COND_GOTO [END] 5
+3: WRITE i
+4: WRITE i
diff --git a/java/java-tests/testData/psi/controlFlow/flow10.java b/java/java-tests/testData/psi/controlFlow/flow10.java
new file mode 100644
index 0000000..0c20afe
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flow10.java
@@ -0,0 +1,17 @@
+// LocalsOrMyInstanceFieldsControlFlowPolicy
+
+
+public class d {
+  void f(d[] aspects) {
+    for (int i = 0; i < aspects.length; i++) {<caret>
+      final int line;
+      try {
+        line = Integer.parseInt("2");  // /
+      }
+      catch (Exception e) {
+        continue;
+      }
+    }
+  }
+
+}
diff --git a/java/java-tests/testData/psi/controlFlow/flow10.txt b/java/java-tests/testData/psi/controlFlow/flow10.txt
new file mode 100644
index 0000000..daee929
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flow10.txt
@@ -0,0 +1,11 @@
+0: EMPTY
+1: COND_THROW_TO 8
+2: EMPTY
+3: WRITE line
+4: COND_THROW_TO 8
+5: COND_THROW_TO 8
+6: COND_THROW_TO 8
+7: GOTO [END] 11
+8: WRITE e
+9: GOTO [END] 11
+10: GOTO [END] 11
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/controlFlow/flow11.java b/java/java-tests/testData/psi/controlFlow/flow11.java
new file mode 100644
index 0000000..ecaa0ba
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flow11.java
@@ -0,0 +1,11 @@
+// LocalsOrMyInstanceFieldsControlFlowPolicy
+
+
+public class a {
+  int f(boolean b1, boolean b2) {<caret>
+    while (b1 || b2) {
+    }
+    return 0;
+  }
+
+}
diff --git a/java/java-tests/testData/psi/controlFlow/flow11.txt b/java/java-tests/testData/psi/controlFlow/flow11.txt
new file mode 100644
index 0000000..3042062
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flow11.txt
@@ -0,0 +1,7 @@
+0: READ b1
+1: COND_GOTO [END] 4
+2: READ b2
+3: COND_GOTO [END] 6
+4: EMPTY
+5: GOTO [END] 0
+6: GOTO [END] 7 RETURN
diff --git a/java/java-tests/testData/psi/controlFlow/flow12.java b/java/java-tests/testData/psi/controlFlow/flow12.java
new file mode 100644
index 0000000..0f29919
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flow12.java
@@ -0,0 +1,11 @@
+// LocalsOrMyInstanceFieldsControlFlowPolicy
+
+
+public class a {
+  int f(boolean b1, boolean b2) {<caret>
+    do {
+    } while (b1 || b2);
+    return 0;
+  }
+
+}
diff --git a/java/java-tests/testData/psi/controlFlow/flow12.txt b/java/java-tests/testData/psi/controlFlow/flow12.txt
new file mode 100644
index 0000000..84ebf6b
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flow12.txt
@@ -0,0 +1,6 @@
+0: EMPTY
+1: READ b1
+2: COND_GOTO [END] 0
+3: READ b2
+4: COND_GOTO [END] 0
+5: GOTO [END] 6 RETURN
diff --git a/java/java-tests/testData/psi/controlFlow/flow13.java b/java/java-tests/testData/psi/controlFlow/flow13.java
new file mode 100644
index 0000000..ab5a7d9
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flow13.java
@@ -0,0 +1,22 @@
+// LocalsOrMyInstanceFieldsControlFlowPolicy
+
+import java.io.IOException;
+
+import java.io.EOFException;
+
+public class a {
+  
+  int f(boolean b1, boolean b2) {<caret>        
+  
+  try {
+            throw new IOException();
+        } catch (EOFException eof) {
+            eof.printStackTrace();
+        } catch (IOException io) {
+            io.printStackTrace();
+        }
+
+    return 0;
+  }
+
+}
diff --git a/java/java-tests/testData/psi/controlFlow/flow13.txt b/java/java-tests/testData/psi/controlFlow/flow13.txt
new file mode 100644
index 0000000..9b908b4
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flow13.txt
@@ -0,0 +1,15 @@
+0: COND_THROW_TO 10
+1: COND_THROW_TO 6
+2: EMPTY
+3: COND_THROW_TO 10
+4: THROW_TO 6
+5: GOTO [END] 14
+6: WRITE io
+7: READ io
+8: EMPTY
+9: GOTO [END] 14
+10: WRITE eof
+11: READ eof
+12: EMPTY
+13: GOTO [END] 14
+14: GOTO [END] 15 RETURN
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/controlFlow/flow14.java b/java/java-tests/testData/psi/controlFlow/flow14.java
new file mode 100644
index 0000000..eac657f
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flow14.java
@@ -0,0 +1,20 @@
+// LocalsOrMyInstanceFieldsControlFlowPolicy
+
+
+
+public class B {
+    protected Object invokeNext(Object mi)
+       throws Exception
+    {<caret>
+          try {
+             return this;
+          } finally {
+             try {
+             } finally {
+                return null;
+             }
+          }
+    }
+
+
+}
diff --git a/java/java-tests/testData/psi/controlFlow/flow14.txt b/java/java-tests/testData/psi/controlFlow/flow14.txt
new file mode 100644
index 0000000..88a23d8
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flow14.txt
@@ -0,0 +1,30 @@
+0: COND_THROW_TO 9
+1: GOTO [END] 7 RETURN
+2: COND_THROW_TO 9
+3: COND_THROW_TO 9
+4: GOTO [END] 5
+5: CALL 11
+6: GOTO [END] 30
+7: CALL 11
+8: GOTO [END] 30 RETURN
+9: CALL 11
+10: GOTO [END] 29
+11: COND_THROW_TO 19
+12: EMPTY
+13: COND_THROW_TO 19
+14: GOTO [END] 15
+15: CALL 21
+16: GOTO [END] 26
+17: CALL 21
+18: GOTO [END] 27 RETURN
+19: CALL 21
+20: GOTO [END] 25
+21: GOTO [END] 23 RETURN
+22: RETURN FROM 21
+23: RETURN FROM 21 TO 18
+24: RETURN FROM 21 TO 20
+25: THROW_TO 30
+26: RETURN FROM 11
+27: RETURN FROM 11 TO 8
+28: RETURN FROM 11 TO 10
+29: THROW_TO 30
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/controlFlow/flow15.java b/java/java-tests/testData/psi/controlFlow/flow15.java
new file mode 100644
index 0000000..710f44d
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flow15.java
@@ -0,0 +1,37 @@
+// LocalsOrMyInstanceFieldsControlFlowPolicy
+// SCR 12926 
+
+import java.rmi.RemoteException;
+
+public class B {
+    public Object show(Object obj)
+    {
+        try
+        {
+            throw new NullPointerException();
+        }
+        catch ( NullPointerException npe )
+        {
+        }
+        finally
+        {<caret>
+            if ( obj != null )
+            {
+                try
+                {
+                    throw new RemoteException();
+                }
+                catch ( RemoteException re )
+                {
+                    System.out.println( re );
+                }
+                finally
+                {
+                    obj = null;
+                }
+            }
+        }
+        return null;
+    }
+
+}
diff --git a/java/java-tests/testData/psi/controlFlow/flow15.txt b/java/java-tests/testData/psi/controlFlow/flow15.txt
new file mode 100644
index 0000000..11aaeb7
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flow15.txt
@@ -0,0 +1,27 @@
+0: READ obj
+1: COND_GOTO [END] 27
+2: COND_THROW_TO 9
+3: COND_THROW_TO 20
+4: EMPTY
+5: THROW_TO 9
+6: COND_THROW_TO 20
+7: COND_THROW_TO 20
+8: GOTO [END] 16
+9: WRITE re
+10: COND_THROW_TO 20
+11: READ re
+12: EMPTY
+13: COND_THROW_TO 20
+14: COND_THROW_TO 20
+15: GOTO [END] 16
+16: CALL 22
+17: GOTO [END] 27
+18: CALL 22
+19: GOTO [END] 27 RETURN
+20: CALL 22
+21: GOTO [END] 26
+22: WRITE obj
+23: RETURN FROM 22
+24: RETURN FROM 22 TO 19
+25: RETURN FROM 22 TO 21
+26: THROW_TO 27
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/controlFlow/flow16.java b/java/java-tests/testData/psi/controlFlow/flow16.java
new file mode 100644
index 0000000..9c5a8ca
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flow16.java
@@ -0,0 +1,20 @@
+// LocalsOrMyInstanceFieldsControlFlowPolicy
+import java.io.IOException;
+
+class TestIdea939 {
+    public boolean test() throws IOException {<caret>
+        try {
+            return geta();
+        } catch (IOException e) {
+            throw new RuntimeException();
+        } finally {
+            geta();
+        }
+    }
+
+    private boolean geta() throws IOException {
+        return true;
+    }
+
+}
+
diff --git a/java/java-tests/testData/psi/controlFlow/flow16.txt b/java/java-tests/testData/psi/controlFlow/flow16.txt
new file mode 100644
index 0000000..41d81dc
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flow16.txt
@@ -0,0 +1,28 @@
+0: COND_THROW_TO 8
+1: COND_THROW_TO 19
+2: EMPTY
+3: COND_THROW_TO 8
+4: GOTO [END] 17 RETURN
+5: COND_THROW_TO 19
+6: COND_THROW_TO 19
+7: GOTO [END] 15
+8: WRITE e
+9: COND_THROW_TO 19
+10: EMPTY
+11: THROW_TO 19
+12: COND_THROW_TO 19
+13: COND_THROW_TO 19
+14: GOTO [END] 15
+15: CALL 21
+16: GOTO [END] 28
+17: CALL 21
+18: GOTO [END] 28 RETURN
+19: CALL 21
+20: GOTO [END] 27
+21: EMPTY
+22: COND_THROW_TO 26
+23: RETURN FROM 21
+24: RETURN FROM 21 TO 18
+25: RETURN FROM 21 TO 20
+26: RETURN FROM 21 TO 20
+27: THROW_TO 28
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/controlFlow/flow17.java b/java/java-tests/testData/psi/controlFlow/flow17.java
new file mode 100644
index 0000000..29b9f0a
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flow17.java
@@ -0,0 +1,10 @@
+// LocalsOrMyInstanceFieldsControlFlowPolicy
+class TestForeach {
+  {<caret>
+    String[] args = new String[256];
+
+    for(String s : args) {
+      foo(s);
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/controlFlow/flow17.txt b/java/java-tests/testData/psi/controlFlow/flow17.txt
new file mode 100644
index 0000000..8c6dc0e
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flow17.txt
@@ -0,0 +1,8 @@
+0: EMPTY
+1: WRITE args
+2: READ args
+3: COND_GOTO [END] 8
+4: WRITE s
+5: READ s
+6: EMPTY
+7: GOTO [END] 3
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/controlFlow/flow18.java b/java/java-tests/testData/psi/controlFlow/flow18.java
new file mode 100644
index 0000000..f9aee73
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flow18.java
@@ -0,0 +1,17 @@
+// LocalsOrMyInstanceFieldsControlFlowPolicy
+import java.io.IOException;
+import java.io.OutputStream;
+public class Outer {
+    void f(OutputStream writer) {  <caret>
+        try {
+            try {
+                throw new IOException();
+            } finally {
+                writer.close();
+            }
+        }
+        catch (IOException e) {
+          e.hashCode();
+        }
+    }
+}
diff --git a/java/java-tests/testData/psi/controlFlow/flow18.txt b/java/java-tests/testData/psi/controlFlow/flow18.txt
new file mode 100644
index 0000000..dcaf786
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flow18.txt
@@ -0,0 +1,28 @@
+0: COND_THROW_TO 24
+1: COND_THROW_TO 24
+2: COND_THROW_TO 12
+3: EMPTY
+4: THROW_TO 24
+5: COND_THROW_TO 12
+6: COND_THROW_TO 12
+7: GOTO [END] 8
+8: CALL 14
+9: GOTO [END] 23
+10: CALL 14
+11: GOTO [END] 28 RETURN
+12: CALL 14
+13: GOTO [END] 22
+14: READ writer
+15: EMPTY
+16: COND_THROW_TO 21
+17: COND_THROW_TO 21
+18: RETURN FROM 14
+19: RETURN FROM 14 TO 11
+20: RETURN FROM 14 TO 13
+21: RETURN FROM 14 TO 24
+22: THROW_TO 28
+23: GOTO [END] 28
+24: WRITE e
+25: READ e
+26: EMPTY
+27: GOTO [END] 28
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/controlFlow/flow2.java b/java/java-tests/testData/psi/controlFlow/flow2.java
new file mode 100644
index 0000000..580cb3e
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flow2.java
@@ -0,0 +1,9 @@
+// LocalsOrMyInstanceFieldsControlFlowPolicy
+public class a {
+  void f(int i) {<caret>
+    while (i==0) {
+      i = 5;
+      if (i==3) break;
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/controlFlow/flow2.txt b/java/java-tests/testData/psi/controlFlow/flow2.txt
new file mode 100644
index 0000000..9fc6bda
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flow2.txt
@@ -0,0 +1,7 @@
+0: READ i
+1: COND_GOTO [END] 7
+2: WRITE i
+3: READ i
+4: COND_GOTO [END] 6
+5: GOTO [END] 7
+6: GOTO [END] 0
diff --git a/java/java-tests/testData/psi/controlFlow/flow3.java b/java/java-tests/testData/psi/controlFlow/flow3.java
new file mode 100644
index 0000000..7016e67
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flow3.java
@@ -0,0 +1,17 @@
+// LocalsOrMyInstanceFieldsControlFlowPolicy
+
+public class a {
+  void f(int i) throws Exception {<caret>
+      i = 5;
+      try {
+        f(i);
+      } catch (Exception e) {
+        i = 0;
+      }
+      finally {
+        i = 9;
+      }
+
+
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/controlFlow/flow3.txt b/java/java-tests/testData/psi/controlFlow/flow3.txt
new file mode 100644
index 0000000..1ccbde9
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flow3.txt
@@ -0,0 +1,30 @@
+0: WRITE i
+1: COND_THROW_TO 13
+2: COND_THROW_TO 13
+3: COND_THROW_TO 23
+4: READ i
+5: EMPTY
+6: COND_THROW_TO 13
+7: COND_THROW_TO 13
+8: COND_THROW_TO 13
+9: COND_THROW_TO 23
+10: COND_THROW_TO 13
+11: COND_THROW_TO 23
+12: GOTO [END] 19
+13: WRITE e
+14: COND_THROW_TO 23
+15: WRITE i
+16: COND_THROW_TO 23
+17: COND_THROW_TO 23
+18: GOTO [END] 19
+19: CALL 25
+20: GOTO [END] 30
+21: CALL 25
+22: GOTO [END] 30 RETURN
+23: CALL 25
+24: GOTO [END] 29
+25: WRITE i
+26: RETURN FROM 25
+27: RETURN FROM 25 TO 22
+28: RETURN FROM 25 TO 24
+29: THROW_TO 30
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/controlFlow/flow4.java b/java/java-tests/testData/psi/controlFlow/flow4.java
new file mode 100644
index 0000000..9b38faf
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flow4.java
@@ -0,0 +1,11 @@
+// LocalsOrMyInstanceFieldsControlFlowPolicy
+
+public class a {
+  void f(int i) throws Exception {<caret>
+        int k =0;
+        switch (k) {
+            //case 0:
+        }
+
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/controlFlow/flow4.txt b/java/java-tests/testData/psi/controlFlow/flow4.txt
new file mode 100644
index 0000000..88dfcc6
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flow4.txt
@@ -0,0 +1,4 @@
+0: WRITE k
+1: READ k
+2: GOTO [END] 3
+
diff --git a/java/java-tests/testData/psi/controlFlow/flow5.java b/java/java-tests/testData/psi/controlFlow/flow5.java
new file mode 100644
index 0000000..7680ae3
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flow5.java
@@ -0,0 +1,13 @@
+// LocalsOrMyInstanceFieldsControlFlowPolicy
+
+public class a {
+  void f(int i) throws Exception {<caret>
+        int k =0;
+        switch (k) {
+            case 0: k=0; break;
+            case 1: k=1; break;
+            default: k=9; break;
+        }
+
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/controlFlow/flow5.txt b/java/java-tests/testData/psi/controlFlow/flow5.txt
new file mode 100644
index 0000000..d688ce4
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flow5.txt
@@ -0,0 +1,12 @@
+0: WRITE k
+1: READ k
+2: COND_GOTO [END] 5
+3: COND_GOTO [END] 7
+4: COND_GOTO [END] 9
+5: WRITE k
+6: GOTO [END] 11
+7: WRITE k
+8: GOTO [END] 11
+9: WRITE k
+10: GOTO [END] 11
+
diff --git a/java/java-tests/testData/psi/controlFlow/flow6.java b/java/java-tests/testData/psi/controlFlow/flow6.java
new file mode 100644
index 0000000..b33fb3b
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flow6.java
@@ -0,0 +1,13 @@
+// LocalsOrMyInstanceFieldsControlFlowPolicy
+
+public class a {
+  boolean c;
+  void f(int i) throws Exception {<caret>
+        for (int i=0; i<100; i++) {
+            if (i==0) break;
+            if (i==1) continue;
+            c = !c;
+        }
+
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/controlFlow/flow6.txt b/java/java-tests/testData/psi/controlFlow/flow6.txt
new file mode 100644
index 0000000..012f67a
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flow6.txt
@@ -0,0 +1,15 @@
+0: WRITE i
+1: READ i
+2: COND_GOTO [END] 14
+3: READ i
+4: COND_GOTO [END] 6
+5: GOTO [END] 14
+6: READ i
+7: COND_GOTO [END] 9
+8: GOTO [END] 11
+9: READ c
+10: WRITE c
+11: READ i
+12: WRITE i
+13: GOTO [END] 1
+
diff --git a/java/java-tests/testData/psi/controlFlow/flow7.java b/java/java-tests/testData/psi/controlFlow/flow7.java
new file mode 100644
index 0000000..7494236
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flow7.java
@@ -0,0 +1,11 @@
+// LocalsOrMyInstanceFieldsControlFlowPolicy
+
+public class a {
+  boolean c;
+  void f(int i) throws Exception {<caret>
+        do {
+            c=!c;
+        } while (!c);
+
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/controlFlow/flow7.txt b/java/java-tests/testData/psi/controlFlow/flow7.txt
new file mode 100644
index 0000000..dc7ba9b
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flow7.txt
@@ -0,0 +1,5 @@
+0: READ c
+1: WRITE c
+2: READ c
+3: COND_GOTO [END] 0
+
diff --git a/java/java-tests/testData/psi/controlFlow/flow8.java b/java/java-tests/testData/psi/controlFlow/flow8.java
new file mode 100644
index 0000000..d205258
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flow8.java
@@ -0,0 +1,12 @@
+// LocalsOrMyInstanceFieldsControlFlowPolicy
+
+public class a {
+  boolean c;
+  void f(int i) throws Exception {<caret>
+        do {
+            if (c) break;
+            c=!c;
+            if (c) continue;
+        } while (!c);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/controlFlow/flow8.txt b/java/java-tests/testData/psi/controlFlow/flow8.txt
new file mode 100644
index 0000000..ae4fa30
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flow8.txt
@@ -0,0 +1,10 @@
+0: READ c
+1: COND_GOTO [END] 3
+2: GOTO [END] 10
+3: READ c
+4: WRITE c
+5: READ c
+6: COND_GOTO [END] 8
+7: GOTO [END] 8
+8: READ c
+9: COND_GOTO [END] 0
diff --git a/java/java-tests/testData/psi/controlFlow/flow9.java b/java/java-tests/testData/psi/controlFlow/flow9.java
new file mode 100644
index 0000000..6e24d2e
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flow9.java
@@ -0,0 +1,20 @@
+// LocalsOrMyInstanceFieldsControlFlowPolicy
+
+
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+
+class ExceptionTestCase {
+
+    void cf1(int i) {<caret>
+      Object o;
+      try {
+        o = new FileReader("");   //
+      }
+      catch (FileNotFoundException e) { //
+      }
+      finally {
+        if (i==1) return;
+      }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/controlFlow/flow9.txt b/java/java-tests/testData/psi/controlFlow/flow9.txt
new file mode 100644
index 0000000..b764d8d
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flow9.txt
@@ -0,0 +1,27 @@
+0: EMPTY
+1: COND_THROW_TO 9
+2: COND_THROW_TO 18
+3: COND_THROW_TO 9
+4: WRITE o
+5: COND_THROW_TO 9
+6: COND_THROW_TO 18
+7: COND_THROW_TO 18
+8: GOTO [END] 14
+9: WRITE e
+10: COND_THROW_TO 18
+11: EMPTY
+12: COND_THROW_TO 18
+13: GOTO [END] 14
+14: CALL 20
+15: GOTO [END] 27
+16: CALL 20
+17: GOTO [END] 27 RETURN
+18: CALL 20
+19: GOTO [END] 26
+20: READ i
+21: COND_GOTO [END] 23
+22: GOTO [END] 24 RETURN
+23: RETURN FROM 20
+24: RETURN FROM 20 TO 17
+25: RETURN FROM 20 TO 19
+26: THROW_TO 27
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/controlFlow/flowAnd.java b/java/java-tests/testData/psi/controlFlow/flowAnd.java
new file mode 100644
index 0000000..ff52046
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flowAnd.java
@@ -0,0 +1,12 @@
+// LocalsOrMyInstanceFieldsControlFlowPolicy
+
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+
+class ExceptionTestCase {
+
+	public void ensureAllInvalidateTasksCompleted(boolean a, boolean b, boolean c) {<caret>
+		final boolean doProgressThing;
+		doProgressThing = c && a && b;
+	}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/controlFlow/flowAnd.txt b/java/java-tests/testData/psi/controlFlow/flowAnd.txt
new file mode 100644
index 0000000..f5ae047
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flowAnd.txt
@@ -0,0 +1,7 @@
+0: EMPTY
+1: READ c
+2: COND_GOTO [END] 6
+3: READ a
+4: COND_GOTO [END] 6
+5: READ b
+6: WRITE doProgressThing
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/controlFlow/flowAnd2.java b/java/java-tests/testData/psi/controlFlow/flowAnd2.java
new file mode 100644
index 0000000..6a30f52
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flowAnd2.java
@@ -0,0 +1,15 @@
+// LocalsOrMyInstanceFieldsControlFlowPolicy
+
+class ExceptionTestCase {
+	public String getIndexingLexer(final boolean file, boolean b1, boolean b2) {<caret>
+		String highlighter;
+
+		if (file && b1 && b2) {
+			highlighter = "then";
+		}
+		else {
+			highlighter = "else";
+		}
+		return highlighter;
+	}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/controlFlow/flowAnd2.txt b/java/java-tests/testData/psi/controlFlow/flowAnd2.txt
new file mode 100644
index 0000000..203f5b6
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flowAnd2.txt
@@ -0,0 +1,12 @@
+0: EMPTY
+1: READ file
+2: COND_GOTO [ELSE] 9
+3: READ b1
+4: COND_GOTO [ELSE] 9
+5: READ b2
+6: COND_GOTO [ELSE] 9
+7: WRITE highlighter
+8: GOTO [END] 10
+9: WRITE highlighter
+10: READ highlighter
+11: GOTO [END] 12 RETURN
diff --git a/java/java-tests/testData/psi/controlFlow/flowAnd3.java b/java/java-tests/testData/psi/controlFlow/flowAnd3.java
new file mode 100644
index 0000000..9b7ac0f
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flowAnd3.java
@@ -0,0 +1,9 @@
+// LocalsOrMyInstanceFieldsControlFlowPolicy
+
+class c {
+  String container;
+  void f() {<caret>
+    String parent;
+    if (container == null && (parent = null) != null && parent != null) {}
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/controlFlow/flowAnd3.txt b/java/java-tests/testData/psi/controlFlow/flowAnd3.txt
new file mode 100644
index 0000000..b9e8391
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flowAnd3.txt
@@ -0,0 +1,8 @@
+0: EMPTY
+1: READ container
+2: COND_GOTO [END] 8
+3: WRITE parent
+4: COND_GOTO [END] 8
+5: READ parent
+6: COND_GOTO [END] 8
+7: EMPTY
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/controlFlow/flowConditional.java b/java/java-tests/testData/psi/controlFlow/flowConditional.java
new file mode 100644
index 0000000..fb9fd91
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flowConditional.java
@@ -0,0 +1,10 @@
+// LocalsOrMyInstanceFieldsControlFlowPolicy
+
+class ExceptionTestCase {
+   void f(boolean a, boolean b) {<caret>
+        int n;
+        if ((a || a) && (n = 0) >= 2) {
+            n++;   //
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/controlFlow/flowConditional.txt b/java/java-tests/testData/psi/controlFlow/flowConditional.txt
new file mode 100644
index 0000000..f3e7a88
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flowConditional.txt
@@ -0,0 +1,9 @@
+0: EMPTY
+1: READ a
+2: COND_GOTO [END] 5
+3: READ a
+4: COND_GOTO [END] 9
+5: WRITE n
+6: COND_GOTO [END] 9
+7: READ n
+8: WRITE n
diff --git a/java/java-tests/testData/psi/controlFlow/flowNestedConditional.java b/java/java-tests/testData/psi/controlFlow/flowNestedConditional.java
new file mode 100644
index 0000000..1098e2e
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flowNestedConditional.java
@@ -0,0 +1,15 @@
+// LocalsOrMyInstanceFieldsControlFlowPolicy
+
+class MyTest  {
+    void f(Object o, long childrenStamp, Object o2) {<caret>
+        long currentStamp;
+        if ((o instanceof String && childrenStamp != (currentStamp = 0))
+                ||
+              (o2 instanceof Integer && childrenStamp != (currentStamp = 1))
+           )
+        {
+          childrenStamp = currentStamp;
+        }
+    }
+
+}
diff --git a/java/java-tests/testData/psi/controlFlow/flowNestedConditional.txt b/java/java-tests/testData/psi/controlFlow/flowNestedConditional.txt
new file mode 100644
index 0000000..dce8abf
--- /dev/null
+++ b/java/java-tests/testData/psi/controlFlow/flowNestedConditional.txt
@@ -0,0 +1,13 @@
+0: EMPTY
+1: READ o
+2: COND_GOTO [END] 6
+3: READ childrenStamp
+4: WRITE currentStamp
+5: COND_GOTO [THEN] 11
+6: READ o2
+7: COND_GOTO [END] 13
+8: READ childrenStamp
+9: WRITE currentStamp
+10: COND_GOTO [END] 13
+11: READ currentStamp
+12: WRITE childrenStamp
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/1.java b/java/java-tests/testData/psi/formatter/java/1.java
new file mode 100644
index 0000000..e091662
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/1.java
@@ -0,0 +1,5 @@
+     class Test {
+     class Inner{
+     int myField;
+     }
+     }
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/1_after.java b/java/java-tests/testData/psi/formatter/java/1_after.java
new file mode 100644
index 0000000..37b2894
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/1_after.java
@@ -0,0 +1,5 @@
+     class Test {
+     class Inner{
+         int myField;
+     }
+     }
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/2.java b/java/java-tests/testData/psi/formatter/java/2.java
new file mode 100644
index 0000000..f63511f
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/2.java
@@ -0,0 +1,6 @@
+class Foo {
+    void foo() {
+        foo(
+        );
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/2_after.java b/java/java-tests/testData/psi/formatter/java/2_after.java
new file mode 100644
index 0000000..f63511f
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/2_after.java
@@ -0,0 +1,6 @@
+class Foo {
+    void foo() {
+        foo(
+        );
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/3.java b/java/java-tests/testData/psi/formatter/java/3.java
new file mode 100644
index 0000000..784a880
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/3.java
@@ -0,0 +1,15 @@
+public class A {
+    private void foo() {
+        Runnable a = new Runnable() {
+            private int a;
+
+            public void run() {
+                newMethod();
+            }
+
+private void newMethod() {
+    a = 2;
+}
+        };
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/3_after.java b/java/java-tests/testData/psi/formatter/java/3_after.java
new file mode 100644
index 0000000..e729174
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/3_after.java
@@ -0,0 +1,15 @@
+public class A {
+    private void foo() {
+        Runnable a = new Runnable() {
+            private int a;
+
+            public void run() {
+                newMethod();
+            }
+
+            private void newMethod() {
+                a = 2;
+            }
+        };
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/4.java b/java/java-tests/testData/psi/formatter/java/4.java
new file mode 100644
index 0000000..fe15bcdc
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/4.java
@@ -0,0 +1,11 @@
+class Foo {
+void foo(){
+try {
+    // comment before
+    g();
+    // comment after
+} catch (Exception e) {
+    e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
+}
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/4_after.java b/java/java-tests/testData/psi/formatter/java/4_after.java
new file mode 100644
index 0000000..fff51ad
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/4_after.java
@@ -0,0 +1,11 @@
+class Foo {
+void foo(){
+    try {
+        // comment before
+        g();
+        // comment after
+    } catch (Exception e) {
+        e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
+    }
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/AlignAssignment.java b/java/java-tests/testData/psi/formatter/java/AlignAssignment.java
new file mode 100644
index 0000000..cee55a5
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/AlignAssignment.java
@@ -0,0 +1,8 @@
+class Foo{
+    void foo() {
+    someVariable = x =
+            x +
+            y;
+    
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/AlignAssignment_after.java b/java/java-tests/testData/psi/formatter/java/AlignAssignment_after.java
new file mode 100644
index 0000000..b1c5310
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/AlignAssignment_after.java
@@ -0,0 +1,8 @@
+class Foo {
+    void foo() {
+        someVariable = x =
+                x +
+                y;
+
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/AlignFor.java b/java/java-tests/testData/psi/formatter/java/AlignFor.java
new file mode 100644
index 0000000..75ca88f0
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/AlignFor.java
@@ -0,0 +1,10 @@
+class Foo {
+    void foo(){
+                        for (int i = 0;
+                                     i < 5;
+                             i++) {
+                            doSomething(i);
+                        }
+        
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/AlignFor_after.java b/java/java-tests/testData/psi/formatter/java/AlignFor_after.java
new file mode 100644
index 0000000..37862dc
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/AlignFor_after.java
@@ -0,0 +1,10 @@
+class Foo {
+    void foo() {
+        for (int i = 0;
+             i < 5;
+             i++) {
+            doSomething(i);
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/AlignMultiLine.java b/java/java-tests/testData/psi/formatter/java/AlignMultiLine.java
new file mode 100644
index 0000000..8b52f5d
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/AlignMultiLine.java
@@ -0,0 +1,7 @@
+class Foo{
+    public void foo(){
+        int someVariable = (y +
+                            z
+        );
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/AlignMultiLine_after.java b/java/java-tests/testData/psi/formatter/java/AlignMultiLine_after.java
new file mode 100644
index 0000000..a4a6235
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/AlignMultiLine_after.java
@@ -0,0 +1,7 @@
+class Foo {
+    public void foo() {
+        int someVariable = (y +
+                            z
+        );
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/AnonymousInner2.java b/java/java-tests/testData/psi/formatter/java/AnonymousInner2.java
new file mode 100644
index 0000000..9dbc29f
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/AnonymousInner2.java
@@ -0,0 +1,7 @@
+class A {
+    A IMPL = new A() {
+                                  void f(boolean b) {
+                                      bar();
+                                  }
+    };
+}
diff --git a/java/java-tests/testData/psi/formatter/java/AnonymousInner2_after.java b/java/java-tests/testData/psi/formatter/java/AnonymousInner2_after.java
new file mode 100644
index 0000000..9c92e99
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/AnonymousInner2_after.java
@@ -0,0 +1,7 @@
+class A {
+    A IMPL = new A() {
+        void f(boolean b) {
+            bar();
+        }
+    };
+}
diff --git a/java/java-tests/testData/psi/formatter/java/AnonymousInnerClasses.java b/java/java-tests/testData/psi/formatter/java/AnonymousInnerClasses.java
new file mode 100644
index 0000000..6f9b847
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/AnonymousInnerClasses.java
@@ -0,0 +1,17 @@
+public class A {
+    void f() {
+        new My() {
+        public void f() {
+            int i = 9;
+            int j = 9;
+        }
+    };
+        new My() {
+        public void f() {
+            l();
+            l();
+        }
+    };
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/AnonymousInnerClasses_after.java b/java/java-tests/testData/psi/formatter/java/AnonymousInnerClasses_after.java
new file mode 100644
index 0000000..49b5a1c
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/AnonymousInnerClasses_after.java
@@ -0,0 +1,17 @@
+public class A {
+    void f() {
+        new My() {
+            public void f() {
+                int i = 9;
+                int j = 9;
+            }
+        };
+        new My() {
+            public void f() {
+                l();
+                l();
+            }
+        };
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/Assert.java b/java/java-tests/testData/psi/formatter/java/Assert.java
new file mode 100644
index 0000000..39ff3d5
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/Assert.java
@@ -0,0 +1,5 @@
+class Foo {
+    void foo () {
+        assert false;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/Assert_after.java b/java/java-tests/testData/psi/formatter/java/Assert_after.java
new file mode 100644
index 0000000..2fd4559
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/Assert_after.java
@@ -0,0 +1,5 @@
+class Foo {
+    void foo() {
+        assert false;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/Blocks.java b/java/java-tests/testData/psi/formatter/java/Blocks.java
new file mode 100644
index 0000000..75f591d
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/Blocks.java
@@ -0,0 +1,34 @@
+class Foo {
+    void foo(){
+        if (a)
+        {
+        }
+
+        while(a)
+        {
+        }
+
+        do
+        {
+        } while(a);
+
+
+        try
+        {
+        }
+        catch(Exception e)
+        {
+        }
+        finally
+        {
+        }
+
+        switch(a)
+        {
+        }
+
+        for(a)
+        {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/Blocks_after.java b/java/java-tests/testData/psi/formatter/java/Blocks_after.java
new file mode 100644
index 0000000..ce19eb1
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/Blocks_after.java
@@ -0,0 +1,24 @@
+class Foo {
+    void foo() {
+        if (a) {
+        }
+
+        while (a) {
+        }
+
+        do {
+        } while (a);
+
+
+        try {
+        } catch (Exception e) {
+        } finally {
+        }
+
+        switch (a) {
+        }
+
+        for (a) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/BreakInsideIf.java b/java/java-tests/testData/psi/formatter/java/BreakInsideIf.java
new file mode 100644
index 0000000..d32f26d
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/BreakInsideIf.java
@@ -0,0 +1,7 @@
+class Foo{
+    public void a(){
+        if (b) {
+                        break;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/BreakInsideIf_after.java b/java/java-tests/testData/psi/formatter/java/BreakInsideIf_after.java
new file mode 100644
index 0000000..5bdf719
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/BreakInsideIf_after.java
@@ -0,0 +1,7 @@
+class Foo {
+    public void a() {
+        if (b) {
+            break;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/CastInsideElse.java b/java/java-tests/testData/psi/formatter/java/CastInsideElse.java
new file mode 100644
index 0000000..7c2130a
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/CastInsideElse.java
@@ -0,0 +1,9 @@
+class Foo {
+    public void foo(){
+        if (a) {
+
+        } else {
+((String)value)
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/CastInsideElse_after.java b/java/java-tests/testData/psi/formatter/java/CastInsideElse_after.java
new file mode 100644
index 0000000..c413b86
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/CastInsideElse_after.java
@@ -0,0 +1,9 @@
+class Foo {
+  public void foo() {
+    if (a) {
+
+    } else {
+      ((String) value)
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/ChainedMethodsAlignment.java b/java/java-tests/testData/psi/formatter/java/ChainedMethodsAlignment.java
new file mode 100644
index 0000000..47c1abe
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/ChainedMethodsAlignment.java
@@ -0,0 +1,37 @@
+class FormattingTest {
+
+    private static FormattingTest staticFoo;
+
+    private FormattingTest instanceFoo;
+
+    @SuppressWarnings({"AccessStaticViaInstance"})
+    public void test() {
+
+        // Long chained method calls with initial instance target - method calls are aligned to the first method
+        // call place.
+        instanceFoo.instanceMethodWithQuiteLongNameIndeed().staticMethodWithQuiteLongNameIndeed().instanceMethodWithQuiteLongNameIndeed().instanceMethodWithQuiteLongNameIndeed().staticMethodWithQuiteLongNameIndeed();
+
+        // Long chained method calls with initial static target - method calls are aligned to the first method
+        // call place.
+        staticFoo.instanceMethodWithQuiteLongNameIndeed().staticMethodWithQuiteLongNameIndeed().instanceMethodWithQuiteLongNameIndeed().instanceMethodWithQuiteLongNameIndeed().staticMethodWithQuiteLongNameIndeed();
+
+        // Interleaved method call chains - every sub-chain is aligned to its own target
+        instanceFoo.instanceMethodWithQuiteLongNameIndeed().staticMethodWithQuiteLongNameIndeed().instanceMethodWithQuiteLongNameIndeed().instanceFoo.instanceMethodWithQuiteLongNameIndeed().staticMethodWithQuiteLongNameIndeed().instanceMethodWithQuiteLongNameIndeed();
+
+        // Interleaved method call chains with manual line break - every sub-chain is aligned to its own
+        // target and manual line break is preserved.
+        instanceFoo.instanceMethodWithQuiteLongNameIndeed().staticMethodWithQuiteLongNameIndeed()
+            .instanceFoo.instanceMethodWithQuiteLongNameIndeed().staticMethodWithQuiteLongNameIndeed().instanceMethodWithQuiteLongNameIndeed();
+
+        // Chained calls with implicit target - method calls are not aligned and use continuation indent instead.
+        instanceMethodWithQuiteLongNameIndeed().instanceMethodWithQuiteLongNameIndeed().instanceMethodWithQuiteLongNameIndeed().instanceMethodWithQuiteLongNameIndeed();
+    }
+
+    public FormattingTest instanceMethodWithQuiteLongNameIndeed() {
+        return instanceFoo;
+    }
+
+    public static FormattingTest staticMethodWithQuiteLongNameIndeed() {
+        return staticFoo;
+    }
+}
diff --git a/java/java-tests/testData/psi/formatter/java/ChainedMethodsAlignment_after.java b/java/java-tests/testData/psi/formatter/java/ChainedMethodsAlignment_after.java
new file mode 100644
index 0000000..0b21b92
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/ChainedMethodsAlignment_after.java
@@ -0,0 +1,46 @@
+class FormattingTest {
+
+    private static FormattingTest staticFoo;
+
+    private FormattingTest instanceFoo;
+
+    @SuppressWarnings({"AccessStaticViaInstance"})
+    public void test() {
+
+        // Long chained method calls with initial instance target - method calls are aligned to the first method
+        // call place.
+        instanceFoo.instanceMethodWithQuiteLongNameIndeed().staticMethodWithQuiteLongNameIndeed()
+                   .instanceMethodWithQuiteLongNameIndeed().instanceMethodWithQuiteLongNameIndeed()
+                   .staticMethodWithQuiteLongNameIndeed();
+
+        // Long chained method calls with initial static target - method calls are aligned to the first method
+        // call place.
+        staticFoo.instanceMethodWithQuiteLongNameIndeed().staticMethodWithQuiteLongNameIndeed()
+                 .instanceMethodWithQuiteLongNameIndeed().instanceMethodWithQuiteLongNameIndeed()
+                 .staticMethodWithQuiteLongNameIndeed();
+
+        // Interleaved method call chains - every sub-chain is aligned to its own target
+        instanceFoo.instanceMethodWithQuiteLongNameIndeed().staticMethodWithQuiteLongNameIndeed()
+                   .instanceMethodWithQuiteLongNameIndeed().instanceFoo.instanceMethodWithQuiteLongNameIndeed()
+                                                                       .staticMethodWithQuiteLongNameIndeed()
+                                                                       .instanceMethodWithQuiteLongNameIndeed();
+
+        // Interleaved method call chains with manual line break - every sub-chain is aligned to its own
+        // target and manual line break is preserved.
+        instanceFoo.instanceMethodWithQuiteLongNameIndeed().staticMethodWithQuiteLongNameIndeed()
+                .instanceFoo.instanceMethodWithQuiteLongNameIndeed().staticMethodWithQuiteLongNameIndeed()
+                            .instanceMethodWithQuiteLongNameIndeed();
+
+        // Chained calls with implicit target - method calls are not aligned and use continuation indent instead.
+        instanceMethodWithQuiteLongNameIndeed().instanceMethodWithQuiteLongNameIndeed()
+                .instanceMethodWithQuiteLongNameIndeed().instanceMethodWithQuiteLongNameIndeed();
+    }
+
+    public FormattingTest instanceMethodWithQuiteLongNameIndeed() {
+        return instanceFoo;
+    }
+
+    public static FormattingTest staticMethodWithQuiteLongNameIndeed() {
+        return staticFoo;
+    }
+}
diff --git a/java/java-tests/testData/psi/formatter/java/Continue.java b/java/java-tests/testData/psi/formatter/java/Continue.java
new file mode 100644
index 0000000..7177a32
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/Continue.java
@@ -0,0 +1,5 @@
+class A {
+  void foo() {
+      continue;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/Continue_after.java b/java/java-tests/testData/psi/formatter/java/Continue_after.java
new file mode 100644
index 0000000..de5c18d
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/Continue_after.java
@@ -0,0 +1,5 @@
+class A {
+    void foo() {
+        continue;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/DoubleCast.java b/java/java-tests/testData/psi/formatter/java/DoubleCast.java
new file mode 100644
index 0000000..613c86e
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/DoubleCast.java
@@ -0,0 +1,5 @@
+class C {
+    {
+        String q = (String) ( (String)"abc" );
+    }
+}
diff --git a/java/java-tests/testData/psi/formatter/java/DoubleCast_after.java b/java/java-tests/testData/psi/formatter/java/DoubleCast_after.java
new file mode 100644
index 0000000..970953d
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/DoubleCast_after.java
@@ -0,0 +1,5 @@
+class C {
+    {
+        String q = (String) ((String) "abc");
+    }
+}
diff --git a/java/java-tests/testData/psi/formatter/java/ForEach.java b/java/java-tests/testData/psi/formatter/java/ForEach.java
new file mode 100644
index 0000000..7aa3507
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/ForEach.java
@@ -0,0 +1,6 @@
+class C {
+    {
+        for(String s   :collection) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/ForEach_after.java b/java/java-tests/testData/psi/formatter/java/ForEach_after.java
new file mode 100644
index 0000000..78e83a4
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/ForEach_after.java
@@ -0,0 +1,6 @@
+class C {
+    {
+        for (String s : collection) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/If.java b/java/java-tests/testData/psi/formatter/java/If.java
new file mode 100644
index 0000000..0c73402
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/If.java
@@ -0,0 +1,6 @@
+class Foo {
+    void foo() {
+        if (a) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/IfBraces.java b/java/java-tests/testData/psi/formatter/java/IfBraces.java
new file mode 100644
index 0000000..6f37553
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/IfBraces.java
@@ -0,0 +1,6 @@
+class Foo {
+    void foo() {
+        if (a)
+            return;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/IfBraces_after.java b/java/java-tests/testData/psi/formatter/java/IfBraces_after.java
new file mode 100644
index 0000000..8ee2722
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/IfBraces_after.java
@@ -0,0 +1,7 @@
+class Foo {
+    void foo() {
+        if (a) {
+            return;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/IfElse.java b/java/java-tests/testData/psi/formatter/java/IfElse.java
new file mode 100644
index 0000000..c902e96
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/IfElse.java
@@ -0,0 +1,59 @@
+public class Foo {
+    public void foo(boolean a, int x,
+                    int y, int z) {
+        label1:
+        do {
+            try {
+                if (x > 0) {
+                    int someVariable = a ?
+                                       x :
+                                       y;
+                }
+                else if (x < 0) {
+                        int someVariable = (y +
+                                            z
+                                           );
+                        someVariable = x =
+                                       x +
+                                       y;
+                    }
+                    else {
+                        label2:
+                        for (int i = 0;
+                             i < 5;
+                             i++)
+                            doSomething(i);
+                    }
+                switch (a) {
+                    case 0:
+                        doCase0();
+                        break;
+                    default:
+                        doDefault();
+                }
+            }
+            catch (Exception e) {
+                processException(e.getMessage(),
+                                 x + y, z, a);
+            }
+            finally {
+                processFinally();
+            }
+        }
+        while (true);
+
+        if (2 < 3) return;
+        if (3 < 4)
+            return;
+        do x++ while (x < 10000);
+        while (x < 50000) x++;
+        for (int i = 0; i < 5; i++) System.out.println(i);
+    }
+
+    private class InnerClass implements I1,
+                                        I2 {
+        public void bar() throws E1,
+                                 E2 {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/IfElse_after.java b/java/java-tests/testData/psi/formatter/java/IfElse_after.java
new file mode 100644
index 0000000..ef5e4db
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/IfElse_after.java
@@ -0,0 +1,59 @@
+public class Foo {
+    public void foo(boolean a, int x,
+                    int y, int z) {
+        label1:
+        do {
+            try {
+                if (x > 0) {
+                    int someVariable = a ?
+                                       x :
+                                       y;
+                }
+                else
+                    if (x < 0) {
+                        int someVariable = (y +
+                                            z
+                        );
+                        someVariable = x =
+                                x +
+                                y;
+                    }
+                    else {
+                        label2:
+                        for (int i = 0;
+                             i < 5;
+                             i++) { doSomething(i); }
+                    }
+                switch (a) {
+                    case 0:
+                        doCase0();
+                        break;
+                    default:
+                        doDefault();
+                }
+            }
+            catch (Exception e) {
+                processException(e.getMessage(),
+                                 x + y, z, a);
+            }
+            finally {
+                processFinally();
+            }
+        }
+        while (true);
+
+        if (2 < 3) return;
+        if (3 < 4)
+            return;
+        do x++ while (x < 10000);
+        while (x < 50000) x++;
+        for (int i = 0; i < 5; i++) System.out.println(i);
+    }
+
+    private class InnerClass implements I1,
+                                        I2 {
+        public void bar() throws E1,
+                                 E2 {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/If_after.java b/java/java-tests/testData/psi/formatter/java/If_after.java
new file mode 100644
index 0000000..c835eb6
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/If_after.java
@@ -0,0 +1,7 @@
+class Foo {
+    void foo() {
+        if (a)
+        {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/InnerClassAsParameter.java b/java/java-tests/testData/psi/formatter/java/InnerClassAsParameter.java
new file mode 100644
index 0000000..b5240f2
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/InnerClassAsParameter.java
@@ -0,0 +1,10 @@
+class Foo{
+public void foo(){
+bar_call(new Runnable(){
+void run(){
+bar();
+bar();
+}
+});
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/InnerClassAsParameter_after.java b/java/java-tests/testData/psi/formatter/java/InnerClassAsParameter_after.java
new file mode 100644
index 0000000..1e1b081
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/InnerClassAsParameter_after.java
@@ -0,0 +1,10 @@
+class Foo {
+    public void foo() {
+        bar_call(new Runnable() {
+            void run() {
+                bar();
+                bar();
+            }
+        });
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/JavaDoc.java b/java/java-tests/testData/psi/formatter/java/JavaDoc.java
new file mode 100644
index 0000000..8b9e6e1
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/JavaDoc.java
@@ -0,0 +1,10 @@
+public class Test {
+    void anotherMethod(String s);
+    String field;
+    /**
+     * @param anObject
+     */
+    void method(Test anObject, String field1) {
+        anObject.anotherMethod(field1);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/JavaDoc_after.java b/java/java-tests/testData/psi/formatter/java/JavaDoc_after.java
new file mode 100644
index 0000000..e0569d8
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/JavaDoc_after.java
@@ -0,0 +1,12 @@
+public class Test {
+    void anotherMethod(String s);
+
+    String field;
+
+    /**
+     * @param anObject
+     */
+    void method(Test anObject, String field1) {
+        anObject.anotherMethod(field1);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/Label.java b/java/java-tests/testData/psi/formatter/java/Label.java
new file mode 100644
index 0000000..4178d65
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/Label.java
@@ -0,0 +1,5 @@
+class X {
+    void Y() {
+        z: for (int i = 0; i < 24; i++) {}
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/Label_after1.java b/java/java-tests/testData/psi/formatter/java/Label_after1.java
new file mode 100644
index 0000000..806eda7
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/Label_after1.java
@@ -0,0 +1,7 @@
+class X {
+    void Y() {
+z:
+        for (int i = 0; i < 24; i++) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/LongAnnotationsAreNotWrapped.java b/java/java-tests/testData/psi/formatter/java/LongAnnotationsAreNotWrapped.java
new file mode 100644
index 0000000..0a5b7a1
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/LongAnnotationsAreNotWrapped.java
@@ -0,0 +1,4 @@
+@XmlType(name = "submissionData",
+        propOrder = {"submissionId", "submitterId", "contestId", "submittedDate", "submissionContent", "passedScreening", "placement", "paidFor", "price", "markedForPurchase", "removed"})
+public class SubmissionData {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/LongAnnotationsAreNotWrapped_after.java b/java/java-tests/testData/psi/formatter/java/LongAnnotationsAreNotWrapped_after.java
new file mode 100644
index 0000000..6cbb921
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/LongAnnotationsAreNotWrapped_after.java
@@ -0,0 +1,5 @@
+@XmlType(name = "submissionData",
+        propOrder = {"submissionId", "submitterId", "contestId", "submittedDate", "submissionContent",
+                "passedScreening", "placement", "paidFor", "price", "markedForPurchase", "removed"})
+public class SubmissionData {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/MethodCallInAssignment.java b/java/java-tests/testData/psi/formatter/java/MethodCallInAssignment.java
new file mode 100644
index 0000000..eda361d
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/MethodCallInAssignment.java
@@ -0,0 +1,6 @@
+class Foo{
+  void foo(){
+    ClassBar bar =
+    createBar();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/MethodCallInAssignment_after.java b/java/java-tests/testData/psi/formatter/java/MethodCallInAssignment_after.java
new file mode 100644
index 0000000..6f2c773
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/MethodCallInAssignment_after.java
@@ -0,0 +1,6 @@
+class Foo {
+    void foo() {
+        ClassBar bar =
+                createBar();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/New.java b/java/java-tests/testData/psi/formatter/java/New.java
new file mode 100644
index 0000000..67969ab
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/New.java
@@ -0,0 +1,6 @@
+public class C {
+    C ourC =
+            new C(
+                new C()
+                );
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/New_after.java b/java/java-tests/testData/psi/formatter/java/New_after.java
new file mode 100644
index 0000000..7fcaeb6
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/New_after.java
@@ -0,0 +1,6 @@
+public class C {
+    C ourC =
+            new C(
+                    new C()
+            );
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/NullMethodParameter.java b/java/java-tests/testData/psi/formatter/java/NullMethodParameter.java
new file mode 100644
index 0000000..63e4635
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/NullMethodParameter.java
@@ -0,0 +1,4 @@
+class C {
+public static final C1 ourC =
+new C2(new C3(),null,new C4(),new C5(),new C6(),new C7());
+}
diff --git a/java/java-tests/testData/psi/formatter/java/NullMethodParameter_after.java b/java/java-tests/testData/psi/formatter/java/NullMethodParameter_after.java
new file mode 100644
index 0000000..f9db747
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/NullMethodParameter_after.java
@@ -0,0 +1,9 @@
+class C {
+    public static final C1 ourC =
+            new C2(new C3(),
+                   null,
+                   new C4(),
+                   new C5(),
+                   new C6(),
+                   new C7());
+}
diff --git a/java/java-tests/testData/psi/formatter/java/ParametersAlignment.java b/java/java-tests/testData/psi/formatter/java/ParametersAlignment.java
new file mode 100644
index 0000000..f6772a6
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/ParametersAlignment.java
@@ -0,0 +1,12 @@
+class Foo{
+    void foo() {
+      final IndentInfo indentProperty = Formatter.getInstance().getWhiteSpaceBefore(new PsiBasedFormattingModel(element.getContainingFile(),
+                                                                                                                settings),
+                                                                                                                         CodeFormatterFacade.createBlock(element.getContainingFile(),
+                                                                                                                                                         settings),
+                                                                                                                                                                  settings,
+                                                                                                                                                                  indentOptions,
+                                                                                                                                                                                   child2.getTextRange(),
+                                                                                                                                                                                   false);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/ParametersAlignment_after.java b/java/java-tests/testData/psi/formatter/java/ParametersAlignment_after.java
new file mode 100644
index 0000000..0e0dee8
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/ParametersAlignment_after.java
@@ -0,0 +1,12 @@
+class Foo {
+    void foo() {
+        final IndentInfo indentProperty = Formatter.getInstance().getWhiteSpaceBefore(new PsiBasedFormattingModel(element.getContainingFile(),
+                                                                                                                  settings),
+                                                                                      CodeFormatterFacade.createBlock(element.getContainingFile(),
+                                                                                                                      settings),
+                                                                                      settings,
+                                                                                      indentOptions,
+                                                                                      child2.getTextRange(),
+                                                                                      false);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/SCR11296.java b/java/java-tests/testData/psi/formatter/java/SCR11296.java
new file mode 100644
index 0000000..f3f3d4a
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/SCR11296.java
@@ -0,0 +1,17 @@
+class A {
+/**
+ * The <code>String</code> class represents character strings. All
+ * string literals in Java programs, such as <code>"abc"</code>, are
+ * implemented as instances of this class.
+ *
+ * Some text after empty line
+ *
+ * @author  Lee Boynton
+ * @author  Arthur van Hoff
+ * @version 1.152, 02/01/03
+ * @since   JDK1.0
+ */
+void foo() {
+
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/SCR11296_after.java b/java/java-tests/testData/psi/formatter/java/SCR11296_after.java
new file mode 100644
index 0000000..502dc50
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/SCR11296_after.java
@@ -0,0 +1,17 @@
+class A {
+    /**
+     * The <code>String</code> class represents
+     * character strings. All string literals in Java
+     * programs, such as <code>"abc"</code>, are
+     * implemented as instances of this class.
+     * Some text after empty line
+     *
+     * @author Lee Boynton
+     * @author Arthur van Hoff
+     * @version 1.152, 02/01/03
+     * @since JDK1.0
+     */
+    void foo() {
+
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/SCR114.java b/java/java-tests/testData/psi/formatter/java/SCR114.java
new file mode 100644
index 0000000..d53aa50
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/SCR114.java
@@ -0,0 +1,11 @@
+class Foo{
+    void foo() {
+try
+{
+   //whatever
+}
+catch(Exception ex)
+{
+}    
+    }
+}
diff --git a/java/java-tests/testData/psi/formatter/java/SCR114_after.java b/java/java-tests/testData/psi/formatter/java/SCR114_after.java
new file mode 100644
index 0000000..2eb942b
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/SCR114_after.java
@@ -0,0 +1,11 @@
+class Foo {
+    void foo() {
+        try
+        {
+            //whatever
+        }
+        catch (Exception ex)
+        {
+        }
+    }
+}
diff --git a/java/java-tests/testData/psi/formatter/java/SCR11799.java b/java/java-tests/testData/psi/formatter/java/SCR11799.java
new file mode 100644
index 0000000..5d1f353
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/SCR11799.java
@@ -0,0 +1,73 @@
+package br.com.vivo.torpedeiro.pull.impl;
+
+import br.com.vivo.torpedeiro.pull.MensagemPull;
+import br.com.vivo.torpedeiro.pull.PullDAO;
+import org.springframework.jdbc.core.JdbcTemplate;
+
+import javax.sql.DataSource;
+
+/**
+ * Implementa? padr?de {@link PullDAO} que realiza todas as opera?s utilizando SQL atrav?de um {@link
+ * JdbcTemplate} do Spring Framework.
+ *
+ * @author Marcus Brito
+ */
+public class PullDAOJdbcTemplate implements PullDAO
+{
+    private static final int STATUS_INICIAL = -7;
+
+    private JdbcTemplate template;
+
+    public String buscarURLProvedor(String provedor)
+    {
+        String sql = "SELECT url FROM pull_url WHERE provedor = ?";
+        return (String) template.queryForObject(sql, new Object[]{provedor}, String.class);
+    }
+
+    public Long inserirMensagemHistorico(MensagemPull mensagem)
+    {
+        String sql = "" +
+            "INSERT INTO pull_historico (\n" +
+            "    id_log,\n" +
+            "    provedor,\n" +
+            "    origem,\n" +
+            "    destino,\n" +
+            "    msg_originada,\n" +
+            "    cod_erro,\n" +
+            "    dt_recepcao\n" +
+            ") VALUES (?, ?, ?, ?, ?, ?, sysdate)";
+
+        Long id = buscarProximoID();
+
+        template.update(sql, new Object[]{id, mensagem.getCodigoProvedor(),
+                mensagem.getMensagemOriginal().getOrigem(), mensagem.getMensagemOriginal().getDestino(),
+                mensagem.getMensagemOriginal().getMensagem(), STATUS_INICIAL});
+
+        return id;
+    }
+
+    public void atualizarMensagemHistorico(Long id, int status, String mensagem)
+    {
+        String sql = "" +
+            "UPDATE pull_historico\n" +
+            "   SET cod_erro     = ?,\n" +
+            "       msg_recebida = ?,\n" +
+            "       dt_resposta  = SYSDATE\n" +
+            " WHERE id_log       = ?";
+
+        template.update(sql, new Object[]{status, mensagem, id});
+    }
+
+    private long buscarProximoID()
+    {
+        return template.queryForLong("SELECT seq_id_log.nextval FROM dual");
+    }
+
+    /**
+     * @param ds O DataSource utilizado para acesso ao banco de dados.
+     */
+    public void setDataSource(DataSource ds)
+    {
+        this.template = new JdbcTemplate(ds);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/SCR11799_after.java b/java/java-tests/testData/psi/formatter/java/SCR11799_after.java
new file mode 100644
index 0000000..1dfffd1
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/SCR11799_after.java
@@ -0,0 +1,73 @@
+package br.com.vivo.torpedeiro.pull.impl;
+
+import br.com.vivo.torpedeiro.pull.MensagemPull;
+import br.com.vivo.torpedeiro.pull.PullDAO;
+import org.springframework.jdbc.core.JdbcTemplate;
+
+import javax.sql.DataSource;
+
+/**
+ * Implementa? padr?de {@link PullDAO} que realiza todas as opera?s utilizando SQL atrav?de um {@link
+ * JdbcTemplate} do Spring Framework.
+ *
+ * @author Marcus Brito
+ */
+public class PullDAOJdbcTemplate implements PullDAO
+{
+    private static final int STATUS_INICIAL = -7;
+
+    private JdbcTemplate template;
+
+    public String buscarURLProvedor(String provedor)
+    {
+        String sql = "SELECT url FROM pull_url WHERE provedor = ?";
+        return (String) template.queryForObject(sql, new Object[]{provedor}, String.class);
+    }
+
+    public Long inserirMensagemHistorico(MensagemPull mensagem)
+    {
+        String sql = "" +
+            "INSERT INTO pull_historico (\n" +
+            "    id_log,\n" +
+            "    provedor,\n" +
+            "    origem,\n" +
+            "    destino,\n" +
+            "    msg_originada,\n" +
+            "    cod_erro,\n" +
+            "    dt_recepcao\n" +
+            ") VALUES (?, ?, ?, ?, ?, ?, sysdate)";
+
+        Long id = buscarProximoID();
+
+        template.update(sql, new Object[]{id, mensagem.getCodigoProvedor(),
+            mensagem.getMensagemOriginal().getOrigem(), mensagem.getMensagemOriginal().getDestino(),
+            mensagem.getMensagemOriginal().getMensagem(), STATUS_INICIAL});
+
+        return id;
+    }
+
+    public void atualizarMensagemHistorico(Long id, int status, String mensagem)
+    {
+        String sql = "" +
+            "UPDATE pull_historico\n" +
+            "   SET cod_erro     = ?,\n" +
+            "       msg_recebida = ?,\n" +
+            "       dt_resposta  = SYSDATE\n" +
+            " WHERE id_log       = ?";
+
+        template.update(sql, new Object[]{status, mensagem, id});
+    }
+
+    private long buscarProximoID()
+    {
+        return template.queryForLong("SELECT seq_id_log.nextval FROM dual");
+    }
+
+    /**
+     * @param ds O DataSource utilizado para acesso ao banco de dados.
+     */
+    public void setDataSource(DataSource ds)
+    {
+        this.template = new JdbcTemplate(ds);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/SCR259.java b/java/java-tests/testData/psi/formatter/java/SCR259.java
new file mode 100644
index 0000000..b376526
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/SCR259.java
@@ -0,0 +1,6 @@
+class Foo {
+    void foo(){
+      if (a)
+        foo();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/SCR259_after.java b/java/java-tests/testData/psi/formatter/java/SCR259_after.java
new file mode 100644
index 0000000..86be367
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/SCR259_after.java
@@ -0,0 +1,7 @@
+class Foo {
+    void foo(){
+        if (a) {
+            foo();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/SCR260.java b/java/java-tests/testData/psi/formatter/java/SCR260.java
new file mode 100644
index 0000000..719bd57
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/SCR260.java
@@ -0,0 +1,16 @@
+class TestFormat
+{
+  public void test(boolean isA, boolean isB, boolean isC) {
+    if (isA)
+    // doSomethingElse(1)
+      doSomething(1);
+    else if (isB)
+    // doSomethingElse(2)
+      doSomething(2);
+    else if (isC)
+    // doSomethingElse(3)
+      doSomething(3);
+
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/SCR260_after.java b/java/java-tests/testData/psi/formatter/java/SCR260_after.java
new file mode 100644
index 0000000..9e07ffc
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/SCR260_after.java
@@ -0,0 +1,19 @@
+class TestFormat {
+    public void test(boolean isA, boolean isB, boolean isC) {
+        if (isA)
+        // doSomethingElse(1)
+        {
+            doSomething(1);
+        } else if (isB)
+        // doSomethingElse(2)
+        {
+            doSomething(2);
+        } else if (isC)
+        // doSomethingElse(3)
+        {
+            doSomething(3);
+        }
+
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/SCR279.java b/java/java-tests/testData/psi/formatter/java/SCR279.java
new file mode 100644
index 0000000..e6f10bb
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/SCR279.java
@@ -0,0 +1,6 @@
+class Foo {
+    void foo(){
+        if (AAA == BBB ||
+            CCC) continue;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/SCR279_after.java b/java/java-tests/testData/psi/formatter/java/SCR279_after.java
new file mode 100644
index 0000000..4ee477e
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/SCR279_after.java
@@ -0,0 +1,6 @@
+class Foo {
+    void foo() {
+        if (AAA == BBB ||
+            CCC) continue;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/SCR395.java b/java/java-tests/testData/psi/formatter/java/SCR395.java
new file mode 100644
index 0000000..420f753
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/SCR395.java
@@ -0,0 +1,5 @@
+public class Y implements X {
+    public void doSomething() // this does something
+    { 
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/SCR395_after.java b/java/java-tests/testData/psi/formatter/java/SCR395_after.java
new file mode 100644
index 0000000..8b78dbf
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/SCR395_after.java
@@ -0,0 +1,5 @@
+public class Y implements X {
+    public void doSomething() // this does something
+    {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/SCR429.java b/java/java-tests/testData/psi/formatter/java/SCR429.java
new file mode 100644
index 0000000..f783585
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/SCR429.java
@@ -0,0 +1,32 @@
+class Foo {
+
+
+
+
+
+
+    void foo() {
+
+
+
+
+
+        int i = 0;
+
+
+
+
+
+        int j = 0;
+
+
+
+
+
+    }
+
+
+
+
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/SCR429_after.java b/java/java-tests/testData/psi/formatter/java/SCR429_after.java
new file mode 100644
index 0000000..ceb62ae
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/SCR429_after.java
@@ -0,0 +1,16 @@
+class Foo {
+
+
+    void foo() {
+
+
+        int i = 0;
+
+
+        int j = 0;
+
+
+    }
+
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/SCR501.java b/java/java-tests/testData/psi/formatter/java/SCR501.java
new file mode 100644
index 0000000..d1cb7b9
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/SCR501.java
@@ -0,0 +1,13 @@
+class A {
+//comment1
+void method()
+//comment2
+{
+if (a)
+//comment3
+{
+//comment4
+}
+//comment5
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/SCR501_after.java b/java/java-tests/testData/psi/formatter/java/SCR501_after.java
new file mode 100644
index 0000000..afcbd97
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/SCR501_after.java
@@ -0,0 +1,13 @@
+class A {
+    //comment1
+    void method()
+//comment2
+    {
+        if (a)
+//comment3
+        {
+//comment4
+        }
+//comment5
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/SCR548.java b/java/java-tests/testData/psi/formatter/java/SCR548.java
new file mode 100644
index 0000000..2acbed2
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/SCR548.java
@@ -0,0 +1,8 @@
+class Foo {
+  public void foo(){
+    return _status == EnhancedMemberOrderStatus.EDITING
+|| _status == EnhancedMemberOrderStatus.RESUMING
+|| _status == EnhancedMemberOrderStatus.OPEN; 
+
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/SCR548_after.java b/java/java-tests/testData/psi/formatter/java/SCR548_after.java
new file mode 100644
index 0000000..2706312
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/SCR548_after.java
@@ -0,0 +1,8 @@
+class Foo {
+    public void foo() {
+        return _status == EnhancedMemberOrderStatus.EDITING
+          || _status == EnhancedMemberOrderStatus.RESUMING
+          || _status == EnhancedMemberOrderStatus.OPEN;
+
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/SCR879.java b/java/java-tests/testData/psi/formatter/java/SCR879.java
new file mode 100644
index 0000000..911081f
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/SCR879.java
@@ -0,0 +1,23 @@
+class A {
+void foo(){
+switch (x)
+{
+
+case 0:
+{ // don't want the brace indented
+
+break;
+}
+
+
+case 1:
+{
+
+break;
+}
+
+
+} 
+
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/SCR879_after.java b/java/java-tests/testData/psi/formatter/java/SCR879_after.java
new file mode 100644
index 0000000..1f42730
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/SCR879_after.java
@@ -0,0 +1,23 @@
+class A {
+    void foo() {
+        switch (x)
+        {
+
+            case 0:
+            { // don't want the brace indented
+
+                break;
+            }
+
+
+            case 1:
+            {
+
+                break;
+            }
+
+
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/SCR915.java b/java/java-tests/testData/psi/formatter/java/SCR915.java
new file mode 100644
index 0000000..29a5d66
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/SCR915.java
@@ -0,0 +1,6 @@
+class A{
+    {
+        y = x++ + 6;
+        y = 6 + ++x;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/SCR915_after.java b/java/java-tests/testData/psi/formatter/java/SCR915_after.java
new file mode 100644
index 0000000..d773a02
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/SCR915_after.java
@@ -0,0 +1,6 @@
+class A {
+    {
+        y = x+++6;
+        y = 6+ ++x;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/SCR970.java b/java/java-tests/testData/psi/formatter/java/SCR970.java
new file mode 100644
index 0000000..8fbbce1
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/SCR970.java
@@ -0,0 +1,5 @@
+class Foo {
+    void foo(int a, int b, int c, int d) throws Exception, RuntimeException{
+
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/SCR970_after.java b/java/java-tests/testData/psi/formatter/java/SCR970_after.java
new file mode 100644
index 0000000..e3c3302
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/SCR970_after.java
@@ -0,0 +1,6 @@
+class Foo {
+    void foo(int a, int b, int c, int d)
+            throws Exception, RuntimeException {
+
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/Spaces.java b/java/java-tests/testData/psi/formatter/java/Spaces.java
new file mode 100644
index 0000000..0b01c32
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/Spaces.java
@@ -0,0 +1,9 @@
+class Foo{
+    void foo(int i,int j){
+        for(int i=0;i<1;i++){
+
+        }
+        if(a){}
+        foo(1,2);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/SpacesBeforeLBrace.java b/java/java-tests/testData/psi/formatter/java/SpacesBeforeLBrace.java
new file mode 100644
index 0000000..cb12c64
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/SpacesBeforeLBrace.java
@@ -0,0 +1,37 @@
+class Foo{
+    void foo(){
+        if (a){
+
+        } else{
+
+        }
+        while (a){
+
+        }
+        for (int i = 0; i < 10; i++){
+
+        }
+
+        do{
+
+        } while (true);
+
+        switch (a){
+            default:
+                return;
+        }
+        try{
+
+        } catch (E e){
+
+        } finally{
+
+        }
+
+        synchronized (this){
+
+        }
+
+        int[] i = new int[]{1, 2, 3};
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/SpacesBeforeLBrace_after.java b/java/java-tests/testData/psi/formatter/java/SpacesBeforeLBrace_after.java
new file mode 100644
index 0000000..428701c
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/SpacesBeforeLBrace_after.java
@@ -0,0 +1,37 @@
+class Foo {
+    void foo() {
+        if (a) {
+
+        } else {
+
+        }
+        while (a) {
+
+        }
+        for (int i = 0; i < 10; i++) {
+
+        }
+
+        do {
+
+        } while (true);
+
+        switch (a) {
+            default:
+                return;
+        }
+        try {
+
+        } catch (E e) {
+
+        } finally {
+
+        }
+
+        synchronized (this) {
+
+        }
+
+        int[] i = new int[] {1, 2, 3};
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/Spaces_after.java b/java/java-tests/testData/psi/formatter/java/Spaces_after.java
new file mode 100644
index 0000000..27449e4
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/Spaces_after.java
@@ -0,0 +1,10 @@
+class Foo {
+    void foo ( int i, int j ) {
+        for ( int i = 0; i < 1; i++ ) {
+
+        }
+        if ( a ) {
+        }
+        foo ( 1, 2 );
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/Switch.java b/java/java-tests/testData/psi/formatter/java/Switch.java
new file mode 100644
index 0000000..2557d36
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/Switch.java
@@ -0,0 +1,11 @@
+class Foo{
+    void foo(){
+                switch (a) {
+                    case 0:
+                           doCase0();
+                           break;
+                    default:
+                           doDefault();
+                    }    
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/Switch_after.java b/java/java-tests/testData/psi/formatter/java/Switch_after.java
new file mode 100644
index 0000000..e14648a
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/Switch_after.java
@@ -0,0 +1,11 @@
+class Foo {
+    void foo() {
+        switch (a) {
+            case 0:
+                doCase0();
+                break;
+            default:
+                doDefault();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/SynchronizedBlock.java b/java/java-tests/testData/psi/formatter/java/SynchronizedBlock.java
new file mode 100644
index 0000000..18191b9
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/SynchronizedBlock.java
@@ -0,0 +1,9 @@
+class Foo{
+public void foo(){
+LOG.bar();
+synchronized (this){
+bar();
+bar();
+}
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/SynchronizedBlock_after.java b/java/java-tests/testData/psi/formatter/java/SynchronizedBlock_after.java
new file mode 100644
index 0000000..3e7d6967
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/SynchronizedBlock_after.java
@@ -0,0 +1,9 @@
+class Foo {
+    public void foo() {
+        LOG.bar();
+        synchronized(this){
+            bar();
+            bar();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/TernaryExpression.java b/java/java-tests/testData/psi/formatter/java/TernaryExpression.java
new file mode 100644
index 0000000..4fd04bc
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/TernaryExpression.java
@@ -0,0 +1,8 @@
+class Foo{
+    void foo(){
+                    int someVariable = a ?
+                                         x :
+                                         y;
+
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/TernaryExpression_DoNotAlign_after.java b/java/java-tests/testData/psi/formatter/java/TernaryExpression_DoNotAlign_after.java
new file mode 100644
index 0000000..eaa0b52
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/TernaryExpression_DoNotAlign_after.java
@@ -0,0 +1,8 @@
+class Foo {
+    void foo() {
+        int someVariable = a ?
+                x :
+                y;
+
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/TernaryExpression_after.java b/java/java-tests/testData/psi/formatter/java/TernaryExpression_after.java
new file mode 100644
index 0000000..8135bc8
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/TernaryExpression_after.java
@@ -0,0 +1,8 @@
+class Foo {
+    void foo() {
+        int someVariable = a ?
+                           x :
+                           y;
+
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/TryCatch.java b/java/java-tests/testData/psi/formatter/java/TryCatch.java
new file mode 100644
index 0000000..81de349
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/TryCatch.java
@@ -0,0 +1,16 @@
+ class C{
+ void method(){
+  try {
+  } catch (Exception e){
+  int i=0;
+ } catch (Exception e){
+ int i=0;
+ }catch (Exception e){
+ int i=0;
+ }catch (Exception e){
+ int i=0;
+ }catch (Exception e){
+ int i=0;
+ }
+ }
+ }
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/TryCatch_after.java b/java/java-tests/testData/psi/formatter/java/TryCatch_after.java
new file mode 100644
index 0000000..0c5d701
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/TryCatch_after.java
@@ -0,0 +1,16 @@
+ class C{
+ void method(){
+  try {
+  } catch (Exception e) {
+      int i = 0;
+  } catch (Exception e){
+ int i=0;
+ }catch (Exception e){
+ int i=0;
+ }catch (Exception e){
+ int i=0;
+ }catch (Exception e){
+ int i=0;
+ }
+ }
+ }
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/WrapAssertion.java b/java/java-tests/testData/psi/formatter/java/WrapAssertion.java
new file mode 100644
index 0000000..9f7cfd9
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/WrapAssertion.java
@@ -0,0 +1,5 @@
+class Foo{
+    public void foo(){
+        assertEquals(map.get(new File("C:\\PerforceTest1\\created2.txt")), );
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/formatter/java/WrapAssertion_after.java b/java/java-tests/testData/psi/formatter/java/WrapAssertion_after.java
new file mode 100644
index 0000000..b9c3388
--- /dev/null
+++ b/java/java-tests/testData/psi/formatter/java/WrapAssertion_after.java
@@ -0,0 +1,5 @@
+class Foo {
+    public void foo() {
+        assertEquals(map.get(new File("C:\\PerforceTest1\\created2.txt")), );
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/generics22/collect-2.2.jar b/java/java-tests/testData/psi/generics22/collect-2.2.jar
new file mode 100644
index 0000000..a453bba
--- /dev/null
+++ b/java/java-tests/testData/psi/generics22/collect-2.2.jar
Binary files differ
diff --git a/java/java-tests/testData/psi/impl/bindToElementTest/ReplacingType.java b/java/java-tests/testData/psi/impl/bindToElementTest/ReplacingType.java
new file mode 100644
index 0000000..adb70cf
--- /dev/null
+++ b/java/java-tests/testData/psi/impl/bindToElementTest/ReplacingType.java
@@ -0,0 +1,5 @@
+import p1.A;
+
+class C {
+  <caret>I i = null;
+}
diff --git a/java/java-tests/testData/psi/impl/bindToElementTest/ReplacingType.java.after b/java/java-tests/testData/psi/impl/bindToElementTest/ReplacingType.java.after
new file mode 100644
index 0000000..98b8f45
--- /dev/null
+++ b/java/java-tests/testData/psi/impl/bindToElementTest/ReplacingType.java.after
@@ -0,0 +1,5 @@
+import p1.A;
+
+class C {
+  p2.A i = null;
+}
diff --git a/java/java-tests/testData/psi/impl/bindToElementTest/SingleClassImport.java b/java/java-tests/testData/psi/impl/bindToElementTest/SingleClassImport.java
new file mode 100644
index 0000000..adb70cf
--- /dev/null
+++ b/java/java-tests/testData/psi/impl/bindToElementTest/SingleClassImport.java
@@ -0,0 +1,5 @@
+import p1.A;
+
+class C {
+  <caret>I i = null;
+}
diff --git a/java/java-tests/testData/psi/impl/bindToElementTest/SingleClassImport.java.after b/java/java-tests/testData/psi/impl/bindToElementTest/SingleClassImport.java.after
new file mode 100644
index 0000000..98b8f45
--- /dev/null
+++ b/java/java-tests/testData/psi/impl/bindToElementTest/SingleClassImport.java.after
@@ -0,0 +1,5 @@
+import p1.A;
+
+class C {
+  p2.A i = null;
+}
diff --git a/java/java-tests/testData/psi/impl/bindToElementTest/prj/p1/A.java b/java/java-tests/testData/psi/impl/bindToElementTest/prj/p1/A.java
new file mode 100644
index 0000000..5ec3bff
--- /dev/null
+++ b/java/java-tests/testData/psi/impl/bindToElementTest/prj/p1/A.java
@@ -0,0 +1,4 @@
+package p1;
+
+class A {
+}
diff --git a/java/java-tests/testData/psi/impl/bindToElementTest/prj/p2/A.java b/java/java-tests/testData/psi/impl/bindToElementTest/prj/p2/A.java
new file mode 100644
index 0000000..ba9dcda
--- /dev/null
+++ b/java/java-tests/testData/psi/impl/bindToElementTest/prj/p2/A.java
@@ -0,0 +1,4 @@
+package p2;
+
+class A {
+}
diff --git a/java/java-tests/testData/psi/impl/cache/1.java b/java/java-tests/testData/psi/impl/cache/1.java
new file mode 100644
index 0000000..3d70858
--- /dev/null
+++ b/java/java-tests/testData/psi/impl/cache/1.java
@@ -0,0 +1 @@
+a b c //todo
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/impl/cache/2.java b/java/java-tests/testData/psi/impl/cache/2.java
new file mode 100644
index 0000000..dd04a83
--- /dev/null
+++ b/java/java-tests/testData/psi/impl/cache/2.java
@@ -0,0 +1,2 @@
+b c d
+//newtodo
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/impl/cache/3.java b/java/java-tests/testData/psi/impl/cache/3.java
new file mode 100644
index 0000000..a033be3
--- /dev/null
+++ b/java/java-tests/testData/psi/impl/cache/3.java
@@ -0,0 +1,3 @@
+c d e
+//todo
+//todo
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/impl/extendsBoundList/addBound.java b/java/java-tests/testData/psi/impl/extendsBoundList/addBound.java
new file mode 100644
index 0000000..a653e3c
--- /dev/null
+++ b/java/java-tests/testData/psi/impl/extendsBoundList/addBound.java
@@ -0,0 +1,2 @@
+class X<T> {
+}
diff --git a/java/java-tests/testData/psi/impl/extendsBoundList/addBoundInEnd.java b/java/java-tests/testData/psi/impl/extendsBoundList/addBoundInEnd.java
new file mode 100644
index 0000000..c648f01
--- /dev/null
+++ b/java/java-tests/testData/psi/impl/extendsBoundList/addBoundInEnd.java
@@ -0,0 +1,2 @@
+class X <T extends Runnable & Compareable> {
+}
diff --git a/java/java-tests/testData/psi/impl/extendsBoundList/addBoundInEnd_after.java b/java/java-tests/testData/psi/impl/extendsBoundList/addBoundInEnd_after.java
new file mode 100644
index 0000000..037433b
--- /dev/null
+++ b/java/java-tests/testData/psi/impl/extendsBoundList/addBoundInEnd_after.java
@@ -0,0 +1,2 @@
+class X <T extends Runnable & Compareable & Cloneable> {
+}
diff --git a/java/java-tests/testData/psi/impl/extendsBoundList/addBoundInFront.java b/java/java-tests/testData/psi/impl/extendsBoundList/addBoundInFront.java
new file mode 100644
index 0000000..c648f01
--- /dev/null
+++ b/java/java-tests/testData/psi/impl/extendsBoundList/addBoundInFront.java
@@ -0,0 +1,2 @@
+class X <T extends Runnable & Compareable> {
+}
diff --git a/java/java-tests/testData/psi/impl/extendsBoundList/addBoundInFront_after.java b/java/java-tests/testData/psi/impl/extendsBoundList/addBoundInFront_after.java
new file mode 100644
index 0000000..a96ff67
--- /dev/null
+++ b/java/java-tests/testData/psi/impl/extendsBoundList/addBoundInFront_after.java
@@ -0,0 +1,2 @@
+class X <T extends Cloneable & Runnable & Compareable> {
+}
diff --git a/java/java-tests/testData/psi/impl/extendsBoundList/addBoundInTheMiddle.java b/java/java-tests/testData/psi/impl/extendsBoundList/addBoundInTheMiddle.java
new file mode 100644
index 0000000..c648f01
--- /dev/null
+++ b/java/java-tests/testData/psi/impl/extendsBoundList/addBoundInTheMiddle.java
@@ -0,0 +1,2 @@
+class X <T extends Runnable & Compareable> {
+}
diff --git a/java/java-tests/testData/psi/impl/extendsBoundList/addBoundInTheMiddle_after.java b/java/java-tests/testData/psi/impl/extendsBoundList/addBoundInTheMiddle_after.java
new file mode 100644
index 0000000..068eba2
--- /dev/null
+++ b/java/java-tests/testData/psi/impl/extendsBoundList/addBoundInTheMiddle_after.java
@@ -0,0 +1,2 @@
+class X <T extends Runnable & Cloneable & Compareable> {
+}
diff --git a/java/java-tests/testData/psi/impl/extendsBoundList/addBound_after.java b/java/java-tests/testData/psi/impl/extendsBoundList/addBound_after.java
new file mode 100644
index 0000000..9a61753
--- /dev/null
+++ b/java/java-tests/testData/psi/impl/extendsBoundList/addBound_after.java
@@ -0,0 +1,2 @@
+class X<T extends Runnable> {
+}
diff --git a/java/java-tests/testData/psi/impl/extendsBoundList/removeBoundFromEnd.java b/java/java-tests/testData/psi/impl/extendsBoundList/removeBoundFromEnd.java
new file mode 100644
index 0000000..ab9aafa
--- /dev/null
+++ b/java/java-tests/testData/psi/impl/extendsBoundList/removeBoundFromEnd.java
@@ -0,0 +1,2 @@
+public class X<T extends Runnable & Compareable> {
+}
diff --git a/java/java-tests/testData/psi/impl/extendsBoundList/removeBoundFromEnd_after.java b/java/java-tests/testData/psi/impl/extendsBoundList/removeBoundFromEnd_after.java
new file mode 100644
index 0000000..427564c
--- /dev/null
+++ b/java/java-tests/testData/psi/impl/extendsBoundList/removeBoundFromEnd_after.java
@@ -0,0 +1,2 @@
+public class X<T extends Runnable> {
+}
diff --git a/java/java-tests/testData/psi/impl/extendsBoundList/removeBoundFromFront.java b/java/java-tests/testData/psi/impl/extendsBoundList/removeBoundFromFront.java
new file mode 100644
index 0000000..ab9aafa
--- /dev/null
+++ b/java/java-tests/testData/psi/impl/extendsBoundList/removeBoundFromFront.java
@@ -0,0 +1,2 @@
+public class X<T extends Runnable & Compareable> {
+}
diff --git a/java/java-tests/testData/psi/impl/extendsBoundList/removeBoundFromFront_after.java b/java/java-tests/testData/psi/impl/extendsBoundList/removeBoundFromFront_after.java
new file mode 100644
index 0000000..34963a2
--- /dev/null
+++ b/java/java-tests/testData/psi/impl/extendsBoundList/removeBoundFromFront_after.java
@@ -0,0 +1,2 @@
+public class X<T extends Compareable> {
+}
diff --git a/java/java-tests/testData/psi/impl/extendsBoundList/removeBoundFromMiddle.java b/java/java-tests/testData/psi/impl/extendsBoundList/removeBoundFromMiddle.java
new file mode 100644
index 0000000..3a6ce935
--- /dev/null
+++ b/java/java-tests/testData/psi/impl/extendsBoundList/removeBoundFromMiddle.java
@@ -0,0 +1,2 @@
+public class X<T extends Runnable & Cloneable & Compareable> {
+}
diff --git a/java/java-tests/testData/psi/impl/extendsBoundList/removeBoundFromMiddle_after.java b/java/java-tests/testData/psi/impl/extendsBoundList/removeBoundFromMiddle_after.java
new file mode 100644
index 0000000..ab9aafa
--- /dev/null
+++ b/java/java-tests/testData/psi/impl/extendsBoundList/removeBoundFromMiddle_after.java
@@ -0,0 +1,2 @@
+public class X<T extends Runnable & Compareable> {
+}
diff --git a/java/java-tests/testData/psi/java/cls/Clazz.class b/java/java-tests/testData/psi/java/cls/Clazz.class
new file mode 100644
index 0000000..117efbe
--- /dev/null
+++ b/java/java-tests/testData/psi/java/cls/Clazz.class
Binary files differ
diff --git a/java/java-tests/testData/psi/libraryOrder/lib1/classes/test/A.class b/java/java-tests/testData/psi/libraryOrder/lib1/classes/test/A.class
new file mode 100644
index 0000000..27ab007
--- /dev/null
+++ b/java/java-tests/testData/psi/libraryOrder/lib1/classes/test/A.class
Binary files differ
diff --git a/java/java-tests/testData/psi/libraryOrder/lib1/src/test/A.java b/java/java-tests/testData/psi/libraryOrder/lib1/src/test/A.java
new file mode 100644
index 0000000..691fe65
--- /dev/null
+++ b/java/java-tests/testData/psi/libraryOrder/lib1/src/test/A.java
@@ -0,0 +1,5 @@
+package test;
+class A {
+  void methodOfClassFromLib1() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/libraryOrder/lib2/classes/test/A.class b/java/java-tests/testData/psi/libraryOrder/lib2/classes/test/A.class
new file mode 100644
index 0000000..e1a4640
--- /dev/null
+++ b/java/java-tests/testData/psi/libraryOrder/lib2/classes/test/A.class
Binary files differ
diff --git a/java/java-tests/testData/psi/libraryOrder/lib2/src/test/A.java b/java/java-tests/testData/psi/libraryOrder/lib2/src/test/A.java
new file mode 100644
index 0000000..9f54891
--- /dev/null
+++ b/java/java-tests/testData/psi/libraryOrder/lib2/src/test/A.java
@@ -0,0 +1,5 @@
+package test;
+class A {
+  void methodOfClassFromLib2() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/normalizeDeclaration/1.java b/java/java-tests/testData/psi/normalizeDeclaration/1.java
new file mode 100644
index 0000000..de28d4e
--- /dev/null
+++ b/java/java-tests/testData/psi/normalizeDeclaration/1.java
@@ -0,0 +1,5 @@
+class A{
+    {
+        AAA[] <var>x[], y, z;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/normalizeDeclaration/1_after.java b/java/java-tests/testData/psi/normalizeDeclaration/1_after.java
new file mode 100644
index 0000000..af20328
--- /dev/null
+++ b/java/java-tests/testData/psi/normalizeDeclaration/1_after.java
@@ -0,0 +1,7 @@
+class A{
+    {
+        AAA[][] x;
+        AAA[] y;
+        AAA[] z;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/normalizeDeclaration/2.java b/java/java-tests/testData/psi/normalizeDeclaration/2.java
new file mode 100644
index 0000000..c78020d
--- /dev/null
+++ b/java/java-tests/testData/psi/normalizeDeclaration/2.java
@@ -0,0 +1,5 @@
+class A{
+    {
+        AAA[] <var>x [][], y, z;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/normalizeDeclaration/2_after.java b/java/java-tests/testData/psi/normalizeDeclaration/2_after.java
new file mode 100644
index 0000000..6713d93
--- /dev/null
+++ b/java/java-tests/testData/psi/normalizeDeclaration/2_after.java
@@ -0,0 +1,7 @@
+class A{
+    {
+        AAA[][][] x ;
+        AAA[] y;
+        AAA[] z;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/normalizeDeclaration/SCR6549.java b/java/java-tests/testData/psi/normalizeDeclaration/SCR6549.java
new file mode 100644
index 0000000..e43504f
--- /dev/null
+++ b/java/java-tests/testData/psi/normalizeDeclaration/SCR6549.java
@@ -0,0 +1,5 @@
+class A{
+    {
+        long <var>x, y; // comment
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/normalizeDeclaration/SCR6549_after.java b/java/java-tests/testData/psi/normalizeDeclaration/SCR6549_after.java
new file mode 100644
index 0000000..7027e93
--- /dev/null
+++ b/java/java-tests/testData/psi/normalizeDeclaration/SCR6549_after.java
@@ -0,0 +1,6 @@
+class A{
+    {
+        long x; // comment
+        long y;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/normalizeDeclaration/SCR9467.java b/java/java-tests/testData/psi/normalizeDeclaration/SCR9467.java
new file mode 100644
index 0000000..336648d
--- /dev/null
+++ b/java/java-tests/testData/psi/normalizeDeclaration/SCR9467.java
@@ -0,0 +1,5 @@
+class A{
+    {
+        final int <var>a = 1, b = 2, c = 3;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/normalizeDeclaration/SCR9467_1.java b/java/java-tests/testData/psi/normalizeDeclaration/SCR9467_1.java
new file mode 100644
index 0000000..719e53d
--- /dev/null
+++ b/java/java-tests/testData/psi/normalizeDeclaration/SCR9467_1.java
@@ -0,0 +1,3 @@
+class A{
+    final int <var>a = 1, b = 2, c = 3;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/normalizeDeclaration/SCR9467_1_after.java b/java/java-tests/testData/psi/normalizeDeclaration/SCR9467_1_after.java
new file mode 100644
index 0000000..e1b2d3a
--- /dev/null
+++ b/java/java-tests/testData/psi/normalizeDeclaration/SCR9467_1_after.java
@@ -0,0 +1,5 @@
+class A{
+    final int a = 1;
+    final int b = 2;
+    final int c = 3;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/normalizeDeclaration/SCR9467_after.java b/java/java-tests/testData/psi/normalizeDeclaration/SCR9467_after.java
new file mode 100644
index 0000000..acacab6
--- /dev/null
+++ b/java/java-tests/testData/psi/normalizeDeclaration/SCR9467_after.java
@@ -0,0 +1,7 @@
+class A{
+    {
+        final int a = 1;
+        final int b = 2;
+        final int c = 3;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/optimizeImports/EmptyImportList.java b/java/java-tests/testData/psi/optimizeImports/EmptyImportList.java
new file mode 100644
index 0000000..5d2e47d
--- /dev/null
+++ b/java/java-tests/testData/psi/optimizeImports/EmptyImportList.java
@@ -0,0 +1,5 @@
+import java.util.List;
+import java.util.ArrayList;
+
+class A {
+}
diff --git a/java/java-tests/testData/psi/optimizeImports/EmptyImportList_after.java b/java/java-tests/testData/psi/optimizeImports/EmptyImportList_after.java
new file mode 100644
index 0000000..2e2439c
--- /dev/null
+++ b/java/java-tests/testData/psi/optimizeImports/EmptyImportList_after.java
@@ -0,0 +1,2 @@
+class A {
+}
diff --git a/java/java-tests/testData/psi/optimizeImports/IDEADEV10716.java b/java/java-tests/testData/psi/optimizeImports/IDEADEV10716.java
new file mode 100644
index 0000000..baf6e40
--- /dev/null
+++ b/java/java-tests/testData/psi/optimizeImports/IDEADEV10716.java
@@ -0,0 +1,9 @@
+import IdeaBug.Anno;
+
+class IdeaBug {
+  @interface Anno { }
+}
+
+@Anno
+public class IdeaBugUser extends IdeaBug {
+}
diff --git a/java/java-tests/testData/psi/optimizeImports/IDEADEV10716_after.java b/java/java-tests/testData/psi/optimizeImports/IDEADEV10716_after.java
new file mode 100644
index 0000000..baf6e40
--- /dev/null
+++ b/java/java-tests/testData/psi/optimizeImports/IDEADEV10716_after.java
@@ -0,0 +1,9 @@
+import IdeaBug.Anno;
+
+class IdeaBug {
+  @interface Anno { }
+}
+
+@Anno
+public class IdeaBugUser extends IdeaBug {
+}
diff --git a/java/java-tests/testData/psi/optimizeImports/NewImportListIsEmptyAndCommentPreserved.java b/java/java-tests/testData/psi/optimizeImports/NewImportListIsEmptyAndCommentPreserved.java
new file mode 100644
index 0000000..fbf0eb8
--- /dev/null
+++ b/java/java-tests/testData/psi/optimizeImports/NewImportListIsEmptyAndCommentPreserved.java
@@ -0,0 +1,6 @@
+import java.util.List;
+// This is a comment
+import java.util.ArrayList;
+
+public class Test {
+}
diff --git a/java/java-tests/testData/psi/optimizeImports/NewImportListIsEmptyAndCommentPreserved_after.java b/java/java-tests/testData/psi/optimizeImports/NewImportListIsEmptyAndCommentPreserved_after.java
new file mode 100644
index 0000000..5d7dab5
--- /dev/null
+++ b/java/java-tests/testData/psi/optimizeImports/NewImportListIsEmptyAndCommentPreserved_after.java
@@ -0,0 +1,4 @@
+// This is a comment
+
+public class Test {
+}
diff --git a/java/java-tests/testData/psi/optimizeImports/NewImportListIsEmptyAndJavaDocWithInvalidCodePreserved.java b/java/java-tests/testData/psi/optimizeImports/NewImportListIsEmptyAndJavaDocWithInvalidCodePreserved.java
new file mode 100644
index 0000000..5b56eef
--- /dev/null
+++ b/java/java-tests/testData/psi/optimizeImports/NewImportListIsEmptyAndJavaDocWithInvalidCodePreserved.java
@@ -0,0 +1,8 @@
+import java.util.List;
+
+/**
+ * @deprecated
+ */
+/
+public class Foo  {
+}
diff --git a/java/java-tests/testData/psi/optimizeImports/NewImportListIsEmptyAndJavaDocWithInvalidCodePreserved_after.java b/java/java-tests/testData/psi/optimizeImports/NewImportListIsEmptyAndJavaDocWithInvalidCodePreserved_after.java
new file mode 100644
index 0000000..0548453
--- /dev/null
+++ b/java/java-tests/testData/psi/optimizeImports/NewImportListIsEmptyAndJavaDocWithInvalidCodePreserved_after.java
@@ -0,0 +1,6 @@
+/**
+ * @deprecated
+ */
+/
+public class Foo  {
+}
diff --git a/java/java-tests/testData/psi/optimizeImports/SCR18364.java b/java/java-tests/testData/psi/optimizeImports/SCR18364.java
new file mode 100644
index 0000000..29dd658
--- /dev/null
+++ b/java/java-tests/testData/psi/optimizeImports/SCR18364.java
@@ -0,0 +1,8 @@
+import java.util.List;
+
+class A {
+    B<List> create;
+}
+
+interface B<T> {
+}
diff --git a/java/java-tests/testData/psi/optimizeImports/SCR18364_after.java b/java/java-tests/testData/psi/optimizeImports/SCR18364_after.java
new file mode 100644
index 0000000..29dd658
--- /dev/null
+++ b/java/java-tests/testData/psi/optimizeImports/SCR18364_after.java
@@ -0,0 +1,8 @@
+import java.util.List;
+
+class A {
+    B<List> create;
+}
+
+interface B<T> {
+}
diff --git a/java/java-tests/testData/psi/optimizeImports/SCR6138.java b/java/java-tests/testData/psi/optimizeImports/SCR6138.java
new file mode 100644
index 0000000..ab919b6
--- /dev/null
+++ b/java/java-tests/testData/psi/optimizeImports/SCR6138.java
@@ -0,0 +1,8 @@
+import javax.swing.*;
+
+class Foo{
+  {
+    JComponent component;
+    component.new AccessibleJComponent();
+  }
+}
diff --git a/java/java-tests/testData/psi/optimizeImports/SCR6138_after.java b/java/java-tests/testData/psi/optimizeImports/SCR6138_after.java
new file mode 100644
index 0000000..ab919b6
--- /dev/null
+++ b/java/java-tests/testData/psi/optimizeImports/SCR6138_after.java
@@ -0,0 +1,8 @@
+import javax.swing.*;
+
+class Foo{
+  {
+    JComponent component;
+    component.new AccessibleJComponent();
+  }
+}
diff --git a/java/java-tests/testData/psi/optimizeImports/StaticImports1.java b/java/java-tests/testData/psi/optimizeImports/StaticImports1.java
new file mode 100644
index 0000000..2d394ea
--- /dev/null
+++ b/java/java-tests/testData/psi/optimizeImports/StaticImports1.java
@@ -0,0 +1,8 @@
+import java.util.List;
+import static java.util.Arrays.sort;
+
+class Foo {
+  {
+    sort(new Integer[0]);
+  }
+}
diff --git a/java/java-tests/testData/psi/optimizeImports/StaticImports1_after.java b/java/java-tests/testData/psi/optimizeImports/StaticImports1_after.java
new file mode 100644
index 0000000..5ddfe61
--- /dev/null
+++ b/java/java-tests/testData/psi/optimizeImports/StaticImports1_after.java
@@ -0,0 +1,7 @@
+import static java.util.Arrays.sort;
+
+class Foo {
+  {
+    sort(new Integer[0]);
+  }
+}
diff --git a/java/java-tests/testData/psi/optimizeImports/StaticImportsToOptimize.java b/java/java-tests/testData/psi/optimizeImports/StaticImportsToOptimize.java
new file mode 100644
index 0000000..0f17b4c
--- /dev/null
+++ b/java/java-tests/testData/psi/optimizeImports/StaticImportsToOptimize.java
@@ -0,0 +1,11 @@
+import java.util.List;
+import static java.util.Arrays.sort;
+import static java.util.Arrays.asList;
+import static java.util.Arrays.invalid;
+import static invalid.*;
+
+class Foo {
+  {
+    sort(new Integer[0]);
+  }
+}
diff --git a/java/java-tests/testData/psi/optimizeImports/StaticImportsToOptimize2.java b/java/java-tests/testData/psi/optimizeImports/StaticImportsToOptimize2.java
new file mode 100644
index 0000000..a54d9072
--- /dev/null
+++ b/java/java-tests/testData/psi/optimizeImports/StaticImportsToOptimize2.java
@@ -0,0 +1,9 @@
+import java.util.List;
+import static java.util.Arrays.sort;
+import static invalid.*;
+
+class Foo {
+  {
+    sort(new long[0]);
+  }
+}
diff --git a/java/java-tests/testData/psi/optimizeImports/StaticImportsToOptimize2_after.java b/java/java-tests/testData/psi/optimizeImports/StaticImportsToOptimize2_after.java
new file mode 100644
index 0000000..105a37d
--- /dev/null
+++ b/java/java-tests/testData/psi/optimizeImports/StaticImportsToOptimize2_after.java
@@ -0,0 +1,7 @@
+import static java.util.Arrays.sort;
+
+class Foo {
+  {
+    sort(new long[0]);
+  }
+}
diff --git a/java/java-tests/testData/psi/optimizeImports/StaticImportsToOptimizeMixed.java b/java/java-tests/testData/psi/optimizeImports/StaticImportsToOptimizeMixed.java
new file mode 100644
index 0000000..b9f1c77
--- /dev/null
+++ b/java/java-tests/testData/psi/optimizeImports/StaticImportsToOptimizeMixed.java
@@ -0,0 +1,41 @@
+package example;
+
+import static java.lang.Math.cos;
+import static java.lang.Math.sin;
+import example.ImportedClass.I1;
+import example.ImportedClass.I1A;
+import static example.ImportedClass.BAZZ.E1;
+import static example.ImportedClass.V;
+import static example.ImportedClass.FOO;
+import example.ImportedClass.BAR;
+
+public class MyTest {
+    protected MyTest() {
+        super();
+        String az = BAR.AZ + V;
+        System.out.println(FOO);
+    }
+}
+
+class ImportedClass {
+    public static String V = "";
+
+    public static enum I1 {
+        E1;
+    }
+    public static enum I1A {
+        E1;
+    }
+
+    public static enum BAR {
+        E1, AZ;
+    }
+
+    public static String FOO = "";
+
+    public static enum BAZZ {
+        E1;
+    }
+
+
+}
diff --git a/java/java-tests/testData/psi/optimizeImports/StaticImportsToOptimizeMixed_after.java b/java/java-tests/testData/psi/optimizeImports/StaticImportsToOptimizeMixed_after.java
new file mode 100644
index 0000000..418a344
--- /dev/null
+++ b/java/java-tests/testData/psi/optimizeImports/StaticImportsToOptimizeMixed_after.java
@@ -0,0 +1,37 @@
+package example;
+
+import example.ImportedClass.BAR;
+
+import static example.ImportedClass.FOO;
+import static example.ImportedClass.V;
+
+public class MyTest {
+    protected MyTest() {
+        super();
+        String az = BAR.AZ + V;
+        System.out.println(FOO);
+    }
+}
+
+class ImportedClass {
+    public static String V = "";
+
+    public static enum I1 {
+        E1;
+    }
+    public static enum I1A {
+        E1;
+    }
+
+    public static enum BAR {
+        E1, AZ;
+    }
+
+    public static String FOO = "";
+
+    public static enum BAZZ {
+        E1;
+    }
+
+
+}
diff --git a/java/java-tests/testData/psi/optimizeImports/StaticImportsToOptimize_after.java b/java/java-tests/testData/psi/optimizeImports/StaticImportsToOptimize_after.java
new file mode 100644
index 0000000..5ddfe61
--- /dev/null
+++ b/java/java-tests/testData/psi/optimizeImports/StaticImportsToOptimize_after.java
@@ -0,0 +1,7 @@
+import static java.util.Arrays.sort;
+
+class Foo {
+  {
+    sort(new Integer[0]);
+  }
+}
diff --git a/java/java-tests/testData/psi/optimizeImports/UnresolvedImports.java b/java/java-tests/testData/psi/optimizeImports/UnresolvedImports.java
new file mode 100644
index 0000000..321ed97
--- /dev/null
+++ b/java/java-tests/testData/psi/optimizeImports/UnresolvedImports.java
@@ -0,0 +1,11 @@
+import xxxx.ddd;
+import com.XXX;
+import yyy.com.*;
+import static zzz.yyy.com.AAA.*;
+import static zzz.yyy.com.BBB;
+
+class Foo {
+  {
+
+  }
+}
diff --git a/java/java-tests/testData/psi/optimizeImports/UnresolvedImports2.java b/java/java-tests/testData/psi/optimizeImports/UnresolvedImports2.java
new file mode 100644
index 0000000..effe740
--- /dev/null
+++ b/java/java-tests/testData/psi/optimizeImports/UnresolvedImports2.java
@@ -0,0 +1,12 @@
+import xxxx.ddd;
+import com.XXX;
+import yyy.com.*;
+import static zzz.yyy.com.AAA.*;
+import static zzz.yyy.com.BBB;
+
+class Foo {
+  {
+    // maybe it's from yyy.com.*
+    ZZZ z = null;
+  }
+}
diff --git a/java/java-tests/testData/psi/optimizeImports/UnresolvedImports2_after.java b/java/java-tests/testData/psi/optimizeImports/UnresolvedImports2_after.java
new file mode 100644
index 0000000..0e98663
--- /dev/null
+++ b/java/java-tests/testData/psi/optimizeImports/UnresolvedImports2_after.java
@@ -0,0 +1,10 @@
+import yyy.com.*;
+
+import static zzz.yyy.com.AAA.*;
+
+class Foo {
+  {
+    // maybe it's from yyy.com.*
+    ZZZ z = null;
+  }
+}
diff --git a/java/java-tests/testData/psi/optimizeImports/UnresolvedImports_after.java b/java/java-tests/testData/psi/optimizeImports/UnresolvedImports_after.java
new file mode 100644
index 0000000..aa0ccb8
--- /dev/null
+++ b/java/java-tests/testData/psi/optimizeImports/UnresolvedImports_after.java
@@ -0,0 +1,5 @@
+class Foo {
+  {
+
+  }
+}
diff --git a/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Array.java b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Array.java
new file mode 100644
index 0000000..9e1e295
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Array.java
@@ -0,0 +1 @@
+@Endorsers({"Children", "Unscrupulous dentisits"}) public class Lollilop {}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Array.txt b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Array.txt
new file mode 100644
index 0000000..97ee8ee
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Array.txt
@@ -0,0 +1,39 @@
+PsiJavaFile:Array.java
+  PsiImportList
+    <empty list>
+  PsiClass:Lollilop
+    PsiModifierList:@Endorsers({"Children", "Unscrupulous dentisits"}) public
+      PsiAnnotation
+        PsiJavaToken:AT('@')
+        PsiJavaCodeReferenceElement:Endorsers
+          PsiIdentifier:Endorsers('Endorsers')
+          PsiReferenceParameterList
+            <empty list>
+        PsiAnnotationParameterList
+          PsiJavaToken:LPARENTH('(')
+          PsiNameValuePair
+            PsiArrayInitializerMemberValue:{"Children", "Unscrupulous dentisits"}
+              PsiJavaToken:LBRACE('{')
+              PsiLiteralExpression:"Children"
+                PsiJavaToken:STRING_LITERAL('"Children"')
+              PsiJavaToken:COMMA(',')
+              PsiWhiteSpace(' ')
+              PsiLiteralExpression:"Unscrupulous dentisits"
+                PsiJavaToken:STRING_LITERAL('"Unscrupulous dentisits"')
+              PsiJavaToken:RBRACE('}')
+          PsiJavaToken:RPARENTH(')')
+      PsiWhiteSpace(' ')
+      PsiKeyword:public('public')
+    PsiWhiteSpace(' ')
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Lollilop('Lollilop')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Complex.java b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Complex.java
new file mode 100644
index 0000000..8530828
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Complex.java
@@ -0,0 +1,3 @@
+class Fantasy {
+  @Author(first="Eugene", second="Wampirchik") void compose () {} 
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Complex.txt b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Complex.txt
new file mode 100644
index 0000000..bfda4fc
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Complex.txt
@@ -0,0 +1,60 @@
+PsiJavaFile:Complex.java
+  PsiImportList
+    <empty list>
+  PsiClass:Fantasy
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Fantasy('Fantasy')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiMethod:compose
+      PsiModifierList:@Author(first="Eugene", second="Wampirchik")
+        PsiAnnotation
+          PsiJavaToken:AT('@')
+          PsiJavaCodeReferenceElement:Author
+            PsiIdentifier:Author('Author')
+            PsiReferenceParameterList
+              <empty list>
+          PsiAnnotationParameterList
+            PsiJavaToken:LPARENTH('(')
+            PsiNameValuePair
+              PsiIdentifier:first('first')
+              PsiJavaToken:EQ('=')
+              PsiLiteralExpression:"Eugene"
+                PsiJavaToken:STRING_LITERAL('"Eugene"')
+            PsiJavaToken:COMMA(',')
+            PsiWhiteSpace(' ')
+            PsiNameValuePair
+              PsiIdentifier:second('second')
+              PsiJavaToken:EQ('=')
+              PsiLiteralExpression:"Wampirchik"
+                PsiJavaToken:STRING_LITERAL('"Wampirchik"')
+            PsiJavaToken:RPARENTH(')')
+      PsiTypeParameterList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:compose('compose')
+      PsiWhiteSpace(' ')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace(' \n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/EnumSmartTypeCompletion.java b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/EnumSmartTypeCompletion.java
new file mode 100644
index 0000000..57e0cf2
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/EnumSmartTypeCompletion.java
@@ -0,0 +1,8 @@
+@Preliminary(A.B
+#) public class TimeTravel {}
+
+@Preliminary(a=A.B
+#) public class TimeTravel {}
+
+@Preliminary(a=A.B
+#, b=c) public class TimeTravel {}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/EnumSmartTypeCompletion.txt b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/EnumSmartTypeCompletion.txt
new file mode 100644
index 0000000..9cda6b2
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/EnumSmartTypeCompletion.txt
@@ -0,0 +1,141 @@
+PsiJavaFile:EnumSmartTypeCompletion.java
+  PsiImportList
+    <empty list>
+  PsiClass:TimeTravel
+    PsiModifierList:@Preliminary(A.B
+#) public
+      PsiAnnotation
+        PsiJavaToken:AT('@')
+        PsiJavaCodeReferenceElement:Preliminary
+          PsiIdentifier:Preliminary('Preliminary')
+          PsiReferenceParameterList
+            <empty list>
+        PsiAnnotationParameterList
+          PsiJavaToken:LPARENTH('(')
+          PsiNameValuePair
+            PsiReferenceExpression:A.B
+              PsiReferenceExpression:A
+                PsiReferenceParameterList
+                  <empty list>
+                PsiIdentifier:A('A')
+              PsiJavaToken:DOT('.')
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:B('B')
+          PsiErrorElement:',' or ')' expected
+            <empty list>
+          PsiWhiteSpace('\n')
+          PsiElement(BAD_CHARACTER)('#')
+          PsiJavaToken:RPARENTH(')')
+      PsiWhiteSpace(' ')
+      PsiKeyword:public('public')
+    PsiWhiteSpace(' ')
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:TimeTravel('TimeTravel')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
+  PsiWhiteSpace('\n\n')
+  PsiClass:TimeTravel
+    PsiModifierList:@Preliminary(a=A.B
+#) public
+      PsiAnnotation
+        PsiJavaToken:AT('@')
+        PsiJavaCodeReferenceElement:Preliminary
+          PsiIdentifier:Preliminary('Preliminary')
+          PsiReferenceParameterList
+            <empty list>
+        PsiAnnotationParameterList
+          PsiJavaToken:LPARENTH('(')
+          PsiNameValuePair
+            PsiIdentifier:a('a')
+            PsiJavaToken:EQ('=')
+            PsiReferenceExpression:A.B
+              PsiReferenceExpression:A
+                PsiReferenceParameterList
+                  <empty list>
+                PsiIdentifier:A('A')
+              PsiJavaToken:DOT('.')
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:B('B')
+          PsiErrorElement:',' or ')' expected
+            <empty list>
+          PsiWhiteSpace('\n')
+          PsiElement(BAD_CHARACTER)('#')
+          PsiJavaToken:RPARENTH(')')
+      PsiWhiteSpace(' ')
+      PsiKeyword:public('public')
+    PsiWhiteSpace(' ')
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:TimeTravel('TimeTravel')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
+  PsiWhiteSpace('\n\n')
+  PsiClass:TimeTravel
+    PsiModifierList:@Preliminary(a=A.B
+#, b=c) public
+      PsiAnnotation
+        PsiJavaToken:AT('@')
+        PsiJavaCodeReferenceElement:Preliminary
+          PsiIdentifier:Preliminary('Preliminary')
+          PsiReferenceParameterList
+            <empty list>
+        PsiAnnotationParameterList
+          PsiJavaToken:LPARENTH('(')
+          PsiNameValuePair
+            PsiIdentifier:a('a')
+            PsiJavaToken:EQ('=')
+            PsiReferenceExpression:A.B
+              PsiReferenceExpression:A
+                PsiReferenceParameterList
+                  <empty list>
+                PsiIdentifier:A('A')
+              PsiJavaToken:DOT('.')
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:B('B')
+          PsiErrorElement:',' or ')' expected
+            <empty list>
+          PsiWhiteSpace('\n')
+          PsiElement(BAD_CHARACTER)('#')
+          PsiJavaToken:COMMA(',')
+          PsiWhiteSpace(' ')
+          PsiNameValuePair
+            PsiIdentifier:b('b')
+            PsiJavaToken:EQ('=')
+            PsiReferenceExpression:c
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:c('c')
+          PsiJavaToken:RPARENTH(')')
+      PsiWhiteSpace(' ')
+      PsiKeyword:public('public')
+    PsiWhiteSpace(' ')
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:TimeTravel('TimeTravel')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Errors.java b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Errors.java
new file mode 100644
index 0000000..200c37e
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Errors.java
@@ -0,0 +1,2 @@
+@Ann(<error descr="Cannot find method 'value'">0</error>) class D {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Errors.txt b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Errors.txt
new file mode 100644
index 0000000..9f1efdb
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Errors.txt
@@ -0,0 +1,73 @@
+PsiJavaFile:Errors.java
+  PsiImportList
+    <empty list>
+  PsiClass:D
+    PsiModifierList:@Ann(<error descr="Cannot find method 'value'">0</error>)
+      PsiAnnotation
+        PsiJavaToken:AT('@')
+        PsiJavaCodeReferenceElement:Ann
+          PsiIdentifier:Ann('Ann')
+          PsiReferenceParameterList
+            <empty list>
+        PsiAnnotationParameterList
+          PsiJavaToken:LPARENTH('(')
+          PsiNameValuePair
+            PsiErrorElement:Value expected
+              <empty list>
+          PsiErrorElement:',' or ')' expected
+            <empty list>
+          PsiJavaToken:LT('<')
+          PsiNameValuePair
+            PsiIdentifier:error('error')
+            PsiErrorElement:'=' expected
+              <empty list>
+            PsiWhiteSpace(' ')
+            PsiReferenceExpression:descr
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:descr('descr')
+          PsiErrorElement:',' or ')' expected
+            <empty list>
+          PsiJavaToken:EQ('=')
+          PsiNameValuePair
+            PsiErrorElement:Identifier expected
+              <empty list>
+            PsiErrorElement:'=' expected
+              <empty list>
+            PsiBinaryExpression:"Cannot find method 'value'">0<
+              PsiBinaryExpression:"Cannot find method 'value'">0
+                PsiLiteralExpression:"Cannot find method 'value'"
+                  PsiJavaToken:STRING_LITERAL('"Cannot find method 'value'"')
+                PsiJavaToken:GT('>')
+                PsiLiteralExpression:0
+                  PsiJavaToken:INTEGER_LITERAL('0')
+              PsiJavaToken:LT('<')
+              PsiErrorElement:Expression expected
+                <empty list>
+          PsiErrorElement:',' or ')' expected
+            <empty list>
+          PsiJavaToken:DIV('/')
+          PsiNameValuePair
+            PsiIdentifier:error('error')
+            PsiErrorElement:'=' expected
+              <empty list>
+            PsiErrorElement:Value expected
+              <empty list>
+          PsiErrorElement:',' or ')' expected
+            <empty list>
+          PsiJavaToken:GT('>')
+          PsiJavaToken:RPARENTH(')')
+    PsiWhiteSpace(' ')
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:D('D')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Marker.java b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Marker.java
new file mode 100644
index 0000000..fd86786
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Marker.java
@@ -0,0 +1 @@
+@Preliminary public class TimeTravel {}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Marker.txt b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Marker.txt
new file mode 100644
index 0000000..a483c6c
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Marker.txt
@@ -0,0 +1,28 @@
+PsiJavaFile:Marker.java
+  PsiImportList
+    <empty list>
+  PsiClass:TimeTravel
+    PsiModifierList:@Preliminary public
+      PsiAnnotation
+        PsiJavaToken:AT('@')
+        PsiJavaCodeReferenceElement:Preliminary
+          PsiIdentifier:Preliminary('Preliminary')
+          PsiReferenceParameterList
+            <empty list>
+        PsiAnnotationParameterList
+          <empty list>
+      PsiWhiteSpace(' ')
+      PsiKeyword:public('public')
+    PsiWhiteSpace(' ')
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:TimeTravel('TimeTravel')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Multiple.java b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Multiple.java
new file mode 100644
index 0000000..df47f520
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Multiple.java
@@ -0,0 +1 @@
+@Preliminary public @Other(name=value) class TimeTravel {}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Multiple.txt b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Multiple.txt
new file mode 100644
index 0000000..142a0dc
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Multiple.txt
@@ -0,0 +1,45 @@
+PsiJavaFile:Multiple.java
+  PsiImportList
+    <empty list>
+  PsiClass:TimeTravel
+    PsiModifierList:@Preliminary public @Other(name=value)
+      PsiAnnotation
+        PsiJavaToken:AT('@')
+        PsiJavaCodeReferenceElement:Preliminary
+          PsiIdentifier:Preliminary('Preliminary')
+          PsiReferenceParameterList
+            <empty list>
+        PsiAnnotationParameterList
+          <empty list>
+      PsiWhiteSpace(' ')
+      PsiKeyword:public('public')
+      PsiWhiteSpace(' ')
+      PsiAnnotation
+        PsiJavaToken:AT('@')
+        PsiJavaCodeReferenceElement:Other
+          PsiIdentifier:Other('Other')
+          PsiReferenceParameterList
+            <empty list>
+        PsiAnnotationParameterList
+          PsiJavaToken:LPARENTH('(')
+          PsiNameValuePair
+            PsiIdentifier:name('name')
+            PsiJavaToken:EQ('=')
+            PsiReferenceExpression:value
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:value('value')
+          PsiJavaToken:RPARENTH(')')
+    PsiWhiteSpace(' ')
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:TimeTravel('TimeTravel')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Nested.java b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Nested.java
new file mode 100644
index 0000000..4523bc3
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Nested.java
@@ -0,0 +1,3 @@
+class Fantasy {
+  @Author(@Name(first="Eugene", second="Wampirchik")) void compose () {} 
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Nested.txt b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Nested.txt
new file mode 100644
index 0000000..6bb8926
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Nested.txt
@@ -0,0 +1,70 @@
+PsiJavaFile:Nested.java
+  PsiImportList
+    <empty list>
+  PsiClass:Fantasy
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Fantasy('Fantasy')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiMethod:compose
+      PsiModifierList:@Author(@Name(first="Eugene", second="Wampirchik"))
+        PsiAnnotation
+          PsiJavaToken:AT('@')
+          PsiJavaCodeReferenceElement:Author
+            PsiIdentifier:Author('Author')
+            PsiReferenceParameterList
+              <empty list>
+          PsiAnnotationParameterList
+            PsiJavaToken:LPARENTH('(')
+            PsiNameValuePair
+              PsiAnnotation
+                PsiJavaToken:AT('@')
+                PsiJavaCodeReferenceElement:Name
+                  PsiIdentifier:Name('Name')
+                  PsiReferenceParameterList
+                    <empty list>
+                PsiAnnotationParameterList
+                  PsiJavaToken:LPARENTH('(')
+                  PsiNameValuePair
+                    PsiIdentifier:first('first')
+                    PsiJavaToken:EQ('=')
+                    PsiLiteralExpression:"Eugene"
+                      PsiJavaToken:STRING_LITERAL('"Eugene"')
+                  PsiJavaToken:COMMA(',')
+                  PsiWhiteSpace(' ')
+                  PsiNameValuePair
+                    PsiIdentifier:second('second')
+                    PsiJavaToken:EQ('=')
+                    PsiLiteralExpression:"Wampirchik"
+                      PsiJavaToken:STRING_LITERAL('"Wampirchik"')
+                  PsiJavaToken:RPARENTH(')')
+            PsiJavaToken:RPARENTH(')')
+      PsiTypeParameterList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:compose('compose')
+      PsiWhiteSpace(' ')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace(' \n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/PackageAnnotation.java b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/PackageAnnotation.java
new file mode 100644
index 0000000..12ec8ff
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/PackageAnnotation.java
@@ -0,0 +1 @@
+@Annotation package P;
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/PackageAnnotation.txt b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/PackageAnnotation.txt
new file mode 100644
index 0000000..768862b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/PackageAnnotation.txt
@@ -0,0 +1,21 @@
+PsiJavaFile:PackageAnnotation.java
+  PsiPackageStatement:P
+    PsiModifierList:@Annotation
+      PsiAnnotation
+        PsiJavaToken:AT('@')
+        PsiJavaCodeReferenceElement:Annotation
+          PsiIdentifier:Annotation('Annotation')
+          PsiReferenceParameterList
+            <empty list>
+        PsiAnnotationParameterList
+          <empty list>
+    PsiWhiteSpace(' ')
+    PsiKeyword:package('package')
+    PsiWhiteSpace(' ')
+    PsiJavaCodeReferenceElement:P
+      PsiIdentifier:P('P')
+      PsiReferenceParameterList
+        <empty list>
+    PsiJavaToken:SEMICOLON(';')
+  PsiImportList
+    <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/ParameterAnnotation.java b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/ParameterAnnotation.java
new file mode 100644
index 0000000..816dd6d
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/ParameterAnnotation.java
@@ -0,0 +1,4 @@
+public class Annotated {
+    void foo (@Annotation(value=77) int param) {
+    }
+}
diff --git a/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/ParameterAnnotation.txt b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/ParameterAnnotation.txt
new file mode 100644
index 0000000..a350062
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/ParameterAnnotation.txt
@@ -0,0 +1,62 @@
+PsiJavaFile:ParameterAnnotation.java
+  PsiImportList
+    <empty list>
+  PsiClass:Annotated
+    PsiModifierList:public
+      PsiKeyword:public('public')
+    PsiWhiteSpace(' ')
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Annotated('Annotated')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n    ')
+    PsiMethod:foo
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiWhiteSpace(' ')
+      PsiParameterList:(@Annotation(value=77) int param)
+        PsiJavaToken:LPARENTH('(')
+        PsiParameter:param
+          PsiModifierList:@Annotation(value=77)
+            PsiAnnotation
+              PsiJavaToken:AT('@')
+              PsiJavaCodeReferenceElement:Annotation
+                PsiIdentifier:Annotation('Annotation')
+                PsiReferenceParameterList
+                  <empty list>
+              PsiAnnotationParameterList
+                PsiJavaToken:LPARENTH('(')
+                PsiNameValuePair
+                  PsiIdentifier:value('value')
+                  PsiJavaToken:EQ('=')
+                  PsiLiteralExpression:77
+                    PsiJavaToken:INTEGER_LITERAL('77')
+                PsiJavaToken:RPARENTH(')')
+          PsiWhiteSpace(' ')
+          PsiTypeElement:int
+            PsiKeyword:int('int')
+          PsiWhiteSpace(' ')
+          PsiIdentifier:param('param')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/ParameterizedMethod.java b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/ParameterizedMethod.java
new file mode 100644
index 0000000..ea5f391
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/ParameterizedMethod.java
@@ -0,0 +1,5 @@
+class Tester {
+  @Nullable <T> T bar() {
+    return null;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/ParameterizedMethod.txt b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/ParameterizedMethod.txt
new file mode 100644
index 0000000..e76d78c
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/ParameterizedMethod.txt
@@ -0,0 +1,63 @@
+PsiJavaFile:ParameterizedMethod.java
+  PsiImportList
+    <empty list>
+  PsiClass:Tester
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Tester('Tester')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiMethod:bar
+      PsiModifierList:@Nullable
+        PsiAnnotation
+          PsiJavaToken:AT('@')
+          PsiJavaCodeReferenceElement:Nullable
+            PsiIdentifier:Nullable('Nullable')
+            PsiReferenceParameterList
+              <empty list>
+          PsiAnnotationParameterList
+            <empty list>
+      PsiWhiteSpace(' ')
+      PsiTypeParameterList
+        PsiJavaToken:LT('<')
+        PsiTypeParameter:T
+          PsiIdentifier:T('T')
+          PsiElement(EXTENDS_BOUND_LIST)
+            <empty list>
+        PsiJavaToken:GT('>')
+      PsiWhiteSpace(' ')
+      PsiTypeElement:T
+        PsiJavaCodeReferenceElement:T
+          PsiIdentifier:T('T')
+          PsiReferenceParameterList
+            <empty list>
+      PsiWhiteSpace(' ')
+      PsiIdentifier:bar('bar')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiReturnStatement
+          PsiKeyword:return('return')
+          PsiWhiteSpace(' ')
+          PsiLiteralExpression:null
+            PsiJavaToken:NULL_KEYWORD('null')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/QualifiedAnnotation.java b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/QualifiedAnnotation.java
new file mode 100644
index 0000000..fee5f26
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/QualifiedAnnotation.java
@@ -0,0 +1,3 @@
+interface PsiElement {
+  @org.jetbrains.annotations.Nullable <T> T getCopyableUserData(Key<T> key);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/QualifiedAnnotation.txt b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/QualifiedAnnotation.txt
new file mode 100644
index 0000000..67c1308
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/QualifiedAnnotation.txt
@@ -0,0 +1,83 @@
+PsiJavaFile:QualifiedAnnotation.java
+  PsiImportList
+    <empty list>
+  PsiClass:PsiElement
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:interface('interface')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:PsiElement('PsiElement')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiMethod:getCopyableUserData
+      PsiModifierList:@org.jetbrains.annotations.Nullable
+        PsiAnnotation
+          PsiJavaToken:AT('@')
+          PsiJavaCodeReferenceElement:org.jetbrains.annotations.Nullable
+            PsiJavaCodeReferenceElement:org.jetbrains.annotations
+              PsiJavaCodeReferenceElement:org.jetbrains
+                PsiJavaCodeReferenceElement:org
+                  PsiIdentifier:org('org')
+                  PsiReferenceParameterList
+                    <empty list>
+                PsiJavaToken:DOT('.')
+                PsiIdentifier:jetbrains('jetbrains')
+                PsiReferenceParameterList
+                  <empty list>
+              PsiJavaToken:DOT('.')
+              PsiIdentifier:annotations('annotations')
+              PsiReferenceParameterList
+                <empty list>
+            PsiJavaToken:DOT('.')
+            PsiIdentifier:Nullable('Nullable')
+            PsiReferenceParameterList
+              <empty list>
+          PsiAnnotationParameterList
+            <empty list>
+      PsiWhiteSpace(' ')
+      PsiTypeParameterList
+        PsiJavaToken:LT('<')
+        PsiTypeParameter:T
+          PsiIdentifier:T('T')
+          PsiElement(EXTENDS_BOUND_LIST)
+            <empty list>
+        PsiJavaToken:GT('>')
+      PsiWhiteSpace(' ')
+      PsiTypeElement:T
+        PsiJavaCodeReferenceElement:T
+          PsiIdentifier:T('T')
+          PsiReferenceParameterList
+            <empty list>
+      PsiWhiteSpace(' ')
+      PsiIdentifier:getCopyableUserData('getCopyableUserData')
+      PsiParameterList:(Key<T> key)
+        PsiJavaToken:LPARENTH('(')
+        PsiParameter:key
+          PsiModifierList:
+            <empty list>
+          PsiTypeElement:Key<T>
+            PsiJavaCodeReferenceElement:Key<T>
+              PsiIdentifier:Key('Key')
+              PsiReferenceParameterList
+                PsiJavaToken:LT('<')
+                PsiTypeElement:T
+                  PsiJavaCodeReferenceElement:T
+                    PsiIdentifier:T('T')
+                    PsiReferenceParameterList
+                      <empty list>
+                PsiJavaToken:GT('>')
+          PsiWhiteSpace(' ')
+          PsiIdentifier:key('key')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Simple1.java b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Simple1.java
new file mode 100644
index 0000000..6a90bf6
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Simple1.java
@@ -0,0 +1 @@
+public @Copyright("bla-bla-bla") class TimeTravel {}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Simple1.txt b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Simple1.txt
new file mode 100644
index 0000000..7213017
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Simple1.txt
@@ -0,0 +1,32 @@
+PsiJavaFile:Simple1.java
+  PsiImportList
+    <empty list>
+  PsiClass:TimeTravel
+    PsiModifierList:public @Copyright("bla-bla-bla")
+      PsiKeyword:public('public')
+      PsiWhiteSpace(' ')
+      PsiAnnotation
+        PsiJavaToken:AT('@')
+        PsiJavaCodeReferenceElement:Copyright
+          PsiIdentifier:Copyright('Copyright')
+          PsiReferenceParameterList
+            <empty list>
+        PsiAnnotationParameterList
+          PsiJavaToken:LPARENTH('(')
+          PsiNameValuePair
+            PsiLiteralExpression:"bla-bla-bla"
+              PsiJavaToken:STRING_LITERAL('"bla-bla-bla"')
+          PsiJavaToken:RPARENTH(')')
+    PsiWhiteSpace(' ')
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:TimeTravel('TimeTravel')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Simple2.java b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Simple2.java
new file mode 100644
index 0000000..5b316a2
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Simple2.java
@@ -0,0 +1 @@
+public @Copyright(treatedAsValue) class TimeTravel {}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Simple2.txt b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Simple2.txt
new file mode 100644
index 0000000..b42211a
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Simple2.txt
@@ -0,0 +1,34 @@
+PsiJavaFile:Simple2.java
+  PsiImportList
+    <empty list>
+  PsiClass:TimeTravel
+    PsiModifierList:public @Copyright(treatedAsValue)
+      PsiKeyword:public('public')
+      PsiWhiteSpace(' ')
+      PsiAnnotation
+        PsiJavaToken:AT('@')
+        PsiJavaCodeReferenceElement:Copyright
+          PsiIdentifier:Copyright('Copyright')
+          PsiReferenceParameterList
+            <empty list>
+        PsiAnnotationParameterList
+          PsiJavaToken:LPARENTH('(')
+          PsiNameValuePair
+            PsiReferenceExpression:treatedAsValue
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:treatedAsValue('treatedAsValue')
+          PsiJavaToken:RPARENTH(')')
+    PsiWhiteSpace(' ')
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:TimeTravel('TimeTravel')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/TypeAnno.java b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/TypeAnno.java
new file mode 100644
index 0000000..7bd7bf6
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/TypeAnno.java
@@ -0,0 +1,9 @@
+class C<@D T extends @F Object> extends @F Object {
+  @F int @F[] methodf() throws @F Exception {
+    a = this instanceof @F C;
+    C<@F @G C> c = new @Q C<@F C>();
+    c = (@F Object)c;
+    Class c = @TA String.class;
+    @F C.field++;
+  }
+}
diff --git a/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/TypeAnno.txt b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/TypeAnno.txt
new file mode 100644
index 0000000..b16a03a
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/TypeAnno.txt
@@ -0,0 +1,315 @@
+PsiJavaFile:TypeAnno.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      PsiJavaToken:LT('<')
+      PsiTypeParameter:T
+        PsiAnnotation
+          PsiJavaToken:AT('@')
+          PsiJavaCodeReferenceElement:D
+            PsiIdentifier:D('D')
+            PsiReferenceParameterList
+              <empty list>
+          PsiAnnotationParameterList
+            <empty list>
+        PsiWhiteSpace(' ')
+        PsiIdentifier:T('T')
+        PsiWhiteSpace(' ')
+        PsiElement(EXTENDS_BOUND_LIST)
+          PsiKeyword:extends('extends')
+          PsiWhiteSpace(' ')
+          PsiJavaCodeReferenceElement:@F Object
+            PsiAnnotation
+              PsiJavaToken:AT('@')
+              PsiJavaCodeReferenceElement:F
+                PsiIdentifier:F('F')
+                PsiReferenceParameterList
+                  <empty list>
+              PsiAnnotationParameterList
+                <empty list>
+            PsiWhiteSpace(' ')
+            PsiIdentifier:Object('Object')
+            PsiReferenceParameterList
+              <empty list>
+      PsiJavaToken:GT('>')
+    PsiWhiteSpace(' ')
+    PsiReferenceList
+      PsiKeyword:extends('extends')
+      PsiWhiteSpace(' ')
+      PsiJavaCodeReferenceElement:@F Object
+        PsiAnnotation
+          PsiJavaToken:AT('@')
+          PsiJavaCodeReferenceElement:F
+            PsiIdentifier:F('F')
+            PsiReferenceParameterList
+              <empty list>
+          PsiAnnotationParameterList
+            <empty list>
+        PsiWhiteSpace(' ')
+        PsiIdentifier:Object('Object')
+        PsiReferenceParameterList
+          <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiMethod:methodf
+      PsiModifierList:@F
+        PsiAnnotation
+          PsiJavaToken:AT('@')
+          PsiJavaCodeReferenceElement:F
+            PsiIdentifier:F('F')
+            PsiReferenceParameterList
+              <empty list>
+          PsiAnnotationParameterList
+            <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiTypeElement:int @F[]
+        PsiTypeElement:int
+          PsiKeyword:int('int')
+        PsiWhiteSpace(' ')
+        PsiAnnotation
+          PsiJavaToken:AT('@')
+          PsiJavaCodeReferenceElement:F
+            PsiIdentifier:F('F')
+            PsiReferenceParameterList
+              <empty list>
+          PsiAnnotationParameterList
+            <empty list>
+        PsiJavaToken:LBRACKET('[')
+        PsiJavaToken:RBRACKET(']')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:methodf('methodf')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiWhiteSpace(' ')
+      PsiReferenceList
+        PsiKeyword:throws('throws')
+        PsiWhiteSpace(' ')
+        PsiJavaCodeReferenceElement:@F Exception
+          PsiAnnotation
+            PsiJavaToken:AT('@')
+            PsiJavaCodeReferenceElement:F
+              PsiIdentifier:F('F')
+              PsiReferenceParameterList
+                <empty list>
+            PsiAnnotationParameterList
+              <empty list>
+          PsiWhiteSpace(' ')
+          PsiIdentifier:Exception('Exception')
+          PsiReferenceParameterList
+            <empty list>
+      PsiWhiteSpace(' ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiAssignmentExpression:a = this instanceof @F C
+            PsiReferenceExpression:a
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:a('a')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:EQ('=')
+            PsiWhiteSpace(' ')
+            PsiInstanceofExpression:this instanceof @F C
+              PsiThisExpression:this
+                PsiReferenceParameterList
+                  <empty list>
+                PsiKeyword:this('this')
+              PsiWhiteSpace(' ')
+              PsiKeyword:instanceof('instanceof')
+              PsiWhiteSpace(' ')
+              PsiTypeElement:@F C
+                PsiAnnotation
+                  PsiJavaToken:AT('@')
+                  PsiJavaCodeReferenceElement:F
+                    PsiIdentifier:F('F')
+                    PsiReferenceParameterList
+                      <empty list>
+                  PsiAnnotationParameterList
+                    <empty list>
+                PsiWhiteSpace(' ')
+                PsiJavaCodeReferenceElement:C
+                  PsiIdentifier:C('C')
+                  PsiReferenceParameterList
+                    <empty list>
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n    ')
+        PsiDeclarationStatement
+          PsiLocalVariable:c
+            PsiModifierList:
+              <empty list>
+            PsiTypeElement:C<@F @G C>
+              PsiJavaCodeReferenceElement:C<@F @G C>
+                PsiIdentifier:C('C')
+                PsiReferenceParameterList
+                  PsiJavaToken:LT('<')
+                  PsiTypeElement:@F @G C
+                    PsiAnnotation
+                      PsiJavaToken:AT('@')
+                      PsiJavaCodeReferenceElement:F
+                        PsiIdentifier:F('F')
+                        PsiReferenceParameterList
+                          <empty list>
+                      PsiAnnotationParameterList
+                        <empty list>
+                    PsiWhiteSpace(' ')
+                    PsiAnnotation
+                      PsiJavaToken:AT('@')
+                      PsiJavaCodeReferenceElement:G
+                        PsiIdentifier:G('G')
+                        PsiReferenceParameterList
+                          <empty list>
+                      PsiAnnotationParameterList
+                        <empty list>
+                    PsiWhiteSpace(' ')
+                    PsiJavaCodeReferenceElement:C
+                      PsiIdentifier:C('C')
+                      PsiReferenceParameterList
+                        <empty list>
+                  PsiJavaToken:GT('>')
+            PsiWhiteSpace(' ')
+            PsiIdentifier:c('c')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:EQ('=')
+            PsiWhiteSpace(' ')
+            PsiNewExpression:new @Q C<@F C>()
+              PsiKeyword:new('new')
+              PsiReferenceParameterList
+                <empty list>
+              PsiWhiteSpace(' ')
+              PsiJavaCodeReferenceElement:@Q C<@F C>
+                PsiAnnotation
+                  PsiJavaToken:AT('@')
+                  PsiJavaCodeReferenceElement:Q
+                    PsiIdentifier:Q('Q')
+                    PsiReferenceParameterList
+                      <empty list>
+                  PsiAnnotationParameterList
+                    <empty list>
+                PsiWhiteSpace(' ')
+                PsiIdentifier:C('C')
+                PsiReferenceParameterList
+                  PsiJavaToken:LT('<')
+                  PsiTypeElement:@F C
+                    PsiAnnotation
+                      PsiJavaToken:AT('@')
+                      PsiJavaCodeReferenceElement:F
+                        PsiIdentifier:F('F')
+                        PsiReferenceParameterList
+                          <empty list>
+                      PsiAnnotationParameterList
+                        <empty list>
+                    PsiWhiteSpace(' ')
+                    PsiJavaCodeReferenceElement:C
+                      PsiIdentifier:C('C')
+                      PsiReferenceParameterList
+                        <empty list>
+                  PsiJavaToken:GT('>')
+              PsiExpressionList
+                PsiJavaToken:LPARENTH('(')
+                PsiJavaToken:RPARENTH(')')
+            PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiAssignmentExpression:c = (@F Object)c
+            PsiReferenceExpression:c
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:c('c')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:EQ('=')
+            PsiWhiteSpace(' ')
+            PsiTypeCastExpression:(@F Object)c
+              PsiJavaToken:LPARENTH('(')
+              PsiTypeElement:@F Object
+                PsiAnnotation
+                  PsiJavaToken:AT('@')
+                  PsiJavaCodeReferenceElement:F
+                    PsiIdentifier:F('F')
+                    PsiReferenceParameterList
+                      <empty list>
+                  PsiAnnotationParameterList
+                    <empty list>
+                PsiWhiteSpace(' ')
+                PsiJavaCodeReferenceElement:Object
+                  PsiIdentifier:Object('Object')
+                  PsiReferenceParameterList
+                    <empty list>
+              PsiJavaToken:RPARENTH(')')
+              PsiReferenceExpression:c
+                PsiReferenceParameterList
+                  <empty list>
+                PsiIdentifier:c('c')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n    ')
+        PsiDeclarationStatement
+          PsiLocalVariable:c
+            PsiModifierList:
+              <empty list>
+            PsiTypeElement:Class
+              PsiJavaCodeReferenceElement:Class
+                PsiIdentifier:Class('Class')
+                PsiReferenceParameterList
+                  <empty list>
+            PsiWhiteSpace(' ')
+            PsiIdentifier:c('c')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:EQ('=')
+            PsiWhiteSpace(' ')
+            PsiClassObjectAccessExpression:@TA String.class
+              PsiTypeElement:@TA String
+                PsiAnnotation
+                  PsiJavaToken:AT('@')
+                  PsiJavaCodeReferenceElement:TA
+                    PsiIdentifier:TA('TA')
+                    PsiReferenceParameterList
+                      <empty list>
+                  PsiAnnotationParameterList
+                    <empty list>
+                PsiWhiteSpace(' ')
+                PsiJavaCodeReferenceElement:String
+                  PsiIdentifier:String('String')
+                  PsiReferenceParameterList
+                    <empty list>
+              PsiJavaToken:DOT('.')
+              PsiKeyword:class('class')
+            PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiPostfixExpression:@F C.field++
+            PsiReferenceExpression:@F C.field
+              PsiReferenceExpression:@F C
+                PsiReferenceParameterList
+                  <empty list>
+                PsiAnnotation
+                  PsiJavaToken:AT('@')
+                  PsiJavaCodeReferenceElement:F
+                    PsiIdentifier:F('F')
+                    PsiReferenceParameterList
+                      <empty list>
+                  PsiAnnotationParameterList
+                    <empty list>
+                PsiWhiteSpace(' ')
+                PsiIdentifier:C('C')
+              PsiJavaToken:DOT('.')
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:field('field')
+            PsiJavaToken:PLUSPLUS('++')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/annotationParsing/declaration/Default.java b/java/java-tests/testData/psi/parser-full/annotationParsing/declaration/Default.java
new file mode 100644
index 0000000..9837735
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/annotationParsing/declaration/Default.java
@@ -0,0 +1,3 @@
+@interface Annotation {
+  Class foo () default String.class;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/annotationParsing/declaration/Default.txt b/java/java-tests/testData/psi/parser-full/annotationParsing/declaration/Default.txt
new file mode 100644
index 0000000..10caf8f
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/annotationParsing/declaration/Default.txt
@@ -0,0 +1,51 @@
+PsiJavaFile:Default.java
+  PsiImportList
+    <empty list>
+  PsiClass:Annotation
+    PsiModifierList:
+      <empty list>
+    PsiJavaToken:AT('@')
+    PsiKeyword:interface('interface')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Annotation('Annotation')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiAnnotationMethod:foo
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:Class
+        PsiJavaCodeReferenceElement:Class
+          PsiIdentifier:Class('Class')
+          PsiReferenceParameterList
+            <empty list>
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiWhiteSpace(' ')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiKeyword:default('default')
+      PsiWhiteSpace(' ')
+      PsiClassObjectAccessExpression:String.class
+        PsiTypeElement:String
+          PsiJavaCodeReferenceElement:String
+            PsiIdentifier:String('String')
+            PsiReferenceParameterList
+              <empty list>
+        PsiJavaToken:DOT('.')
+        PsiKeyword:class('class')
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/annotationParsing/declaration/Inner.java b/java/java-tests/testData/psi/parser-full/annotationParsing/declaration/Inner.java
new file mode 100644
index 0000000..c088212
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/annotationParsing/declaration/Inner.java
@@ -0,0 +1,5 @@
+class Annotation {
+  @interface Inner {
+    double bar () default 0.0;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/annotationParsing/declaration/Inner.txt b/java/java-tests/testData/psi/parser-full/annotationParsing/declaration/Inner.txt
new file mode 100644
index 0000000..d84c8a7
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/annotationParsing/declaration/Inner.txt
@@ -0,0 +1,59 @@
+PsiJavaFile:Inner.java
+  PsiImportList
+    <empty list>
+  PsiClass:Annotation
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Annotation('Annotation')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClass:Inner
+      PsiModifierList:
+        <empty list>
+      PsiJavaToken:AT('@')
+      PsiKeyword:interface('interface')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:Inner('Inner')
+      PsiTypeParameterList
+        <empty list>
+      PsiReferenceList
+        <empty list>
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiJavaToken:LBRACE('{')
+      PsiWhiteSpace('\n    ')
+      PsiAnnotationMethod:bar
+        PsiModifierList:
+          <empty list>
+        PsiTypeParameterList
+          <empty list>
+        PsiTypeElement:double
+          PsiKeyword:double('double')
+        PsiWhiteSpace(' ')
+        PsiIdentifier:bar('bar')
+        PsiWhiteSpace(' ')
+        PsiParameterList:()
+          PsiJavaToken:LPARENTH('(')
+          PsiJavaToken:RPARENTH(')')
+        PsiReferenceList
+          <empty list>
+        PsiWhiteSpace(' ')
+        PsiKeyword:default('default')
+        PsiWhiteSpace(' ')
+        PsiLiteralExpression:0.0
+          PsiJavaToken:DOUBLE_LITERAL('0.0')
+        PsiJavaToken:SEMICOLON(';')
+      PsiWhiteSpace('\n  ')
+      PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/annotationParsing/declaration/Nested.java b/java/java-tests/testData/psi/parser-full/annotationParsing/declaration/Nested.java
new file mode 100644
index 0000000..ca0667c
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/annotationParsing/declaration/Nested.java
@@ -0,0 +1,7 @@
+@interface Annotation {
+  Class foo () default String.class;
+
+  @interface Inner {
+    String bar () default "<unspecified>";
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/annotationParsing/declaration/Nested.txt b/java/java-tests/testData/psi/parser-full/annotationParsing/declaration/Nested.txt
new file mode 100644
index 0000000..a2030ea
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/annotationParsing/declaration/Nested.txt
@@ -0,0 +1,94 @@
+PsiJavaFile:Nested.java
+  PsiImportList
+    <empty list>
+  PsiClass:Annotation
+    PsiModifierList:
+      <empty list>
+    PsiJavaToken:AT('@')
+    PsiKeyword:interface('interface')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Annotation('Annotation')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiAnnotationMethod:foo
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:Class
+        PsiJavaCodeReferenceElement:Class
+          PsiIdentifier:Class('Class')
+          PsiReferenceParameterList
+            <empty list>
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiWhiteSpace(' ')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiKeyword:default('default')
+      PsiWhiteSpace(' ')
+      PsiClassObjectAccessExpression:String.class
+        PsiTypeElement:String
+          PsiJavaCodeReferenceElement:String
+            PsiIdentifier:String('String')
+            PsiReferenceParameterList
+              <empty list>
+        PsiJavaToken:DOT('.')
+        PsiKeyword:class('class')
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n\n  ')
+    PsiClass:Inner
+      PsiModifierList:
+        <empty list>
+      PsiJavaToken:AT('@')
+      PsiKeyword:interface('interface')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:Inner('Inner')
+      PsiTypeParameterList
+        <empty list>
+      PsiReferenceList
+        <empty list>
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiJavaToken:LBRACE('{')
+      PsiWhiteSpace('\n    ')
+      PsiAnnotationMethod:bar
+        PsiModifierList:
+          <empty list>
+        PsiTypeParameterList
+          <empty list>
+        PsiTypeElement:String
+          PsiJavaCodeReferenceElement:String
+            PsiIdentifier:String('String')
+            PsiReferenceParameterList
+              <empty list>
+        PsiWhiteSpace(' ')
+        PsiIdentifier:bar('bar')
+        PsiWhiteSpace(' ')
+        PsiParameterList:()
+          PsiJavaToken:LPARENTH('(')
+          PsiJavaToken:RPARENTH(')')
+        PsiReferenceList
+          <empty list>
+        PsiWhiteSpace(' ')
+        PsiKeyword:default('default')
+        PsiWhiteSpace(' ')
+        PsiLiteralExpression:"<unspecified>"
+          PsiJavaToken:STRING_LITERAL('"<unspecified>"')
+        PsiJavaToken:SEMICOLON(';')
+      PsiWhiteSpace('\n  ')
+      PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/annotationParsing/declaration/OtherMembers.java b/java/java-tests/testData/psi/parser-full/annotationParsing/declaration/OtherMembers.java
new file mode 100644
index 0000000..f7274b3
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/annotationParsing/declaration/OtherMembers.java
@@ -0,0 +1,7 @@
+@interface Annotation {
+  Class foo () default String.class;
+  int field;
+  void m() {}
+  class C {}
+  interface I {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/annotationParsing/declaration/OtherMembers.txt b/java/java-tests/testData/psi/parser-full/annotationParsing/declaration/OtherMembers.txt
new file mode 100644
index 0000000..17d9ddd
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/annotationParsing/declaration/OtherMembers.txt
@@ -0,0 +1,111 @@
+PsiJavaFile:OtherMembers.java
+  PsiImportList
+    <empty list>
+  PsiClass:Annotation
+    PsiModifierList:
+      <empty list>
+    PsiJavaToken:AT('@')
+    PsiKeyword:interface('interface')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Annotation('Annotation')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiAnnotationMethod:foo
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:Class
+        PsiJavaCodeReferenceElement:Class
+          PsiIdentifier:Class('Class')
+          PsiReferenceParameterList
+            <empty list>
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiWhiteSpace(' ')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiKeyword:default('default')
+      PsiWhiteSpace(' ')
+      PsiClassObjectAccessExpression:String.class
+        PsiTypeElement:String
+          PsiJavaCodeReferenceElement:String
+            PsiIdentifier:String('String')
+            PsiReferenceParameterList
+              <empty list>
+        PsiJavaToken:DOT('.')
+        PsiKeyword:class('class')
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n  ')
+    PsiField:field
+      PsiModifierList:
+        <empty list>
+      PsiTypeElement:int
+        PsiKeyword:int('int')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:field('field')
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n  ')
+    PsiAnnotationMethod:m
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:m('m')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n  ')
+    PsiClass:C
+      PsiModifierList:
+        <empty list>
+      PsiKeyword:class('class')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:C('C')
+      PsiTypeParameterList
+        <empty list>
+      PsiReferenceList
+        <empty list>
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiJavaToken:LBRACE('{')
+      PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n  ')
+    PsiClass:I
+      PsiModifierList:
+        <empty list>
+      PsiKeyword:interface('interface')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:I('I')
+      PsiTypeParameterList
+        <empty list>
+      PsiReferenceList
+        <empty list>
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiJavaToken:LBRACE('{')
+      PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/annotationParsing/declaration/Simple.java b/java/java-tests/testData/psi/parser-full/annotationParsing/declaration/Simple.java
new file mode 100644
index 0000000..ac1648e
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/annotationParsing/declaration/Simple.java
@@ -0,0 +1,5 @@
+import java.util.*;
+
+public @interface Annotation {
+  int foo ();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/annotationParsing/declaration/Simple.txt b/java/java-tests/testData/psi/parser-full/annotationParsing/declaration/Simple.txt
new file mode 100644
index 0000000..3d8862a
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/annotationParsing/declaration/Simple.txt
@@ -0,0 +1,53 @@
+PsiJavaFile:Simple.java
+  PsiImportList
+    PsiImportStatement
+      PsiKeyword:import('import')
+      PsiWhiteSpace(' ')
+      PsiJavaCodeReferenceElement:java.util
+        PsiJavaCodeReferenceElement:java
+          PsiIdentifier:java('java')
+          PsiReferenceParameterList
+            <empty list>
+        PsiJavaToken:DOT('.')
+        PsiIdentifier:util('util')
+        PsiReferenceParameterList
+          <empty list>
+      PsiJavaToken:DOT('.')
+      PsiJavaToken:ASTERISK('*')
+      PsiJavaToken:SEMICOLON(';')
+  PsiWhiteSpace('\n\n')
+  PsiClass:Annotation
+    PsiModifierList:public
+      PsiKeyword:public('public')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:AT('@')
+    PsiKeyword:interface('interface')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Annotation('Annotation')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiAnnotationMethod:foo
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:int
+        PsiKeyword:int('int')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiWhiteSpace(' ')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/commonParsing/ImportListBug.java b/java/java-tests/testData/psi/parser-full/commonParsing/ImportListBug.java
new file mode 100644
index 0000000..76bf289
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/commonParsing/ImportListBug.java
@@ -0,0 +1,2 @@
+/**//******/class AClass{
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/commonParsing/ImportListBug.txt b/java/java-tests/testData/psi/parser-full/commonParsing/ImportListBug.txt
new file mode 100644
index 0000000..e18e9a3
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/commonParsing/ImportListBug.txt
@@ -0,0 +1,22 @@
+PsiJavaFile:ImportListBug.java
+  PsiComment(C_STYLE_COMMENT)('/**/')
+  PsiImportList
+    <empty list>
+  PsiClass:AClass
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiDocToken:DOC_COMMENT_END('****/')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:AClass('AClass')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/commonParsing/IncompleteCodeBlock.java b/java/java-tests/testData/psi/parser-full/commonParsing/IncompleteCodeBlock.java
new file mode 100644
index 0000000..60061a8
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/commonParsing/IncompleteCodeBlock.java
@@ -0,0 +1,5 @@
+class A {
+    void method() {
+        <identifier
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/commonParsing/IncompleteCodeBlock.txt b/java/java-tests/testData/psi/parser-full/commonParsing/IncompleteCodeBlock.txt
new file mode 100644
index 0000000..54e7369
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/commonParsing/IncompleteCodeBlock.txt
@@ -0,0 +1,49 @@
+PsiJavaFile:IncompleteCodeBlock.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n    ')
+    PsiMethod:method
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:method('method')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n        ')
+        PsiErrorElement:Unexpected token
+          PsiJavaToken:LT('<')
+        PsiExpressionStatement
+          PsiReferenceExpression:identifier
+            PsiReferenceParameterList
+              <empty list>
+            PsiIdentifier:identifier('identifier')
+          PsiErrorElement:';' expected
+            <empty list>
+        PsiWhiteSpace('\n    ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/commonParsing/IncompleteFor.java b/java/java-tests/testData/psi/parser-full/commonParsing/IncompleteFor.java
new file mode 100644
index 0000000..4a48d1e
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/commonParsing/IncompleteFor.java
@@ -0,0 +1,12 @@
+import java.util.*;
+
+class BarGoo {}
+
+class Foo {
+    {
+        List<BarGoo> goos;
+        for (BarGoo  : goos) {
+
+}
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/commonParsing/IncompleteFor.txt b/java/java-tests/testData/psi/parser-full/commonParsing/IncompleteFor.txt
new file mode 100644
index 0000000..c25b370
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/commonParsing/IncompleteFor.txt
@@ -0,0 +1,103 @@
+PsiJavaFile:IncompleteFor.java
+  PsiImportList
+    PsiImportStatement
+      PsiKeyword:import('import')
+      PsiWhiteSpace(' ')
+      PsiJavaCodeReferenceElement:java.util
+        PsiJavaCodeReferenceElement:java
+          PsiIdentifier:java('java')
+          PsiReferenceParameterList
+            <empty list>
+        PsiJavaToken:DOT('.')
+        PsiIdentifier:util('util')
+        PsiReferenceParameterList
+          <empty list>
+      PsiJavaToken:DOT('.')
+      PsiJavaToken:ASTERISK('*')
+      PsiJavaToken:SEMICOLON(';')
+  PsiWhiteSpace('\n\n')
+  PsiClass:BarGoo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:BarGoo('BarGoo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
+  PsiWhiteSpace('\n\n')
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n    ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n        ')
+        PsiDeclarationStatement
+          PsiLocalVariable:goos
+            PsiModifierList:
+              <empty list>
+            PsiTypeElement:List<BarGoo>
+              PsiJavaCodeReferenceElement:List<BarGoo>
+                PsiIdentifier:List('List')
+                PsiReferenceParameterList
+                  PsiJavaToken:LT('<')
+                  PsiTypeElement:BarGoo
+                    PsiJavaCodeReferenceElement:BarGoo
+                      PsiIdentifier:BarGoo('BarGoo')
+                      PsiReferenceParameterList
+                        <empty list>
+                  PsiJavaToken:GT('>')
+            PsiWhiteSpace(' ')
+            PsiIdentifier:goos('goos')
+            PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n        ')
+        PsiForStatement
+          PsiKeyword:for('for')
+          PsiWhiteSpace(' ')
+          PsiJavaToken:LPARENTH('(')
+          PsiLabeledStatement
+            PsiIdentifier:BarGoo('BarGoo')
+            PsiWhiteSpace('  ')
+            PsiJavaToken:COLON(':')
+            PsiWhiteSpace(' ')
+            PsiExpressionStatement
+              PsiReferenceExpression:goos
+                PsiReferenceParameterList
+                  <empty list>
+                PsiIdentifier:goos('goos')
+              PsiErrorElement:';' expected
+                <empty list>
+          PsiErrorElement:';' expected
+            <empty list>
+          PsiJavaToken:RPARENTH(')')
+          PsiWhiteSpace(' ')
+          PsiBlockStatement
+            PsiCodeBlock
+              PsiJavaToken:LBRACE('{')
+              PsiWhiteSpace('\n\n')
+              PsiJavaToken:RBRACE('}')
+        PsiWhiteSpace('\n    ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/commonParsing/RefParamsAfterError.java b/java/java-tests/testData/psi/parser-full/commonParsing/RefParamsAfterError.java
new file mode 100644
index 0000000..931d101
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/commonParsing/RefParamsAfterError.java
@@ -0,0 +1,3 @@
+class C {
+  BCSSChild.<error descr="">BCSSCServiceClassRef</error> fd = null;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/commonParsing/RefParamsAfterError.txt b/java/java-tests/testData/psi/parser-full/commonParsing/RefParamsAfterError.txt
new file mode 100644
index 0000000..fd394aa
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/commonParsing/RefParamsAfterError.txt
@@ -0,0 +1,100 @@
+PsiJavaFile:RefParamsAfterError.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiModifierList:
+      <empty list>
+    PsiTypeElement:BCSSChild.
+      PsiJavaCodeReferenceElement:BCSSChild.
+        PsiJavaCodeReferenceElement:BCSSChild
+          PsiIdentifier:BCSSChild('BCSSChild')
+          PsiReferenceParameterList
+            <empty list>
+        PsiJavaToken:DOT('.')
+        PsiErrorElement:Identifier expected
+          <empty list>
+        PsiReferenceParameterList
+          <empty list>
+    PsiErrorElement:Identifier expected
+      <empty list>
+    PsiModifierList:
+      <empty list>
+    PsiErrorElement:Unexpected token
+      PsiTypeParameterList
+        PsiJavaToken:LT('<')
+        PsiTypeParameter:error
+          PsiIdentifier:error('error')
+          PsiElement(EXTENDS_BOUND_LIST)
+            <empty list>
+        PsiErrorElement:'>' expected.
+          <empty list>
+    PsiWhiteSpace(' ')
+    PsiTypeElement:descr
+      PsiJavaCodeReferenceElement:descr
+        PsiIdentifier:descr('descr')
+        PsiReferenceParameterList
+          <empty list>
+    PsiErrorElement:Identifier expected
+      <empty list>
+    PsiErrorElement:Unexpected token
+      PsiJavaToken:EQ('=')
+      PsiJavaToken:STRING_LITERAL('""')
+      PsiJavaToken:GT('>')
+    PsiModifierList:
+      <empty list>
+    PsiTypeElement:BCSSCServiceClassRef<
+      PsiJavaCodeReferenceElement:BCSSCServiceClassRef<
+        PsiIdentifier:BCSSCServiceClassRef('BCSSCServiceClassRef')
+        PsiReferenceParameterList
+          PsiJavaToken:LT('<')
+          PsiErrorElement:Identifier expected
+            <empty list>
+          PsiErrorElement:'>' or ',' expected.
+            <empty list>
+    PsiErrorElement:Identifier expected
+      <empty list>
+    PsiErrorElement:Unexpected token
+      PsiJavaToken:DIV('/')
+    PsiModifierList:
+      <empty list>
+    PsiTypeElement:error
+      PsiJavaCodeReferenceElement:error
+        PsiIdentifier:error('error')
+        PsiReferenceParameterList
+          <empty list>
+    PsiErrorElement:Identifier expected
+      <empty list>
+    PsiErrorElement:Unexpected token
+      PsiJavaToken:GT('>')
+    PsiWhiteSpace(' ')
+    PsiModifierList:
+      <empty list>
+    PsiTypeElement:fd
+      PsiJavaCodeReferenceElement:fd
+        PsiIdentifier:fd('fd')
+        PsiReferenceParameterList
+          <empty list>
+    PsiErrorElement:Identifier expected
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiErrorElement:Unexpected token
+      PsiJavaToken:EQ('=')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:NULL_KEYWORD('null')
+    PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/commonParsing/SCR5202.java b/java/java-tests/testData/psi/parser-full/commonParsing/SCR5202.java
new file mode 100644
index 0000000..5d99bb5
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/commonParsing/SCR5202.java
@@ -0,0 +1,6 @@
+class FreezeTest {
+	void test() {
+		String.class.
+		String[] strings;
+	}
+}
diff --git a/java/java-tests/testData/psi/parser-full/commonParsing/SCR5202.txt b/java/java-tests/testData/psi/parser-full/commonParsing/SCR5202.txt
new file mode 100644
index 0000000..e34d2a7
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/commonParsing/SCR5202.txt
@@ -0,0 +1,69 @@
+PsiJavaFile:SCR5202.java
+  PsiImportList
+    <empty list>
+  PsiClass:FreezeTest
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:FreezeTest('FreezeTest')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n\t')
+    PsiMethod:test
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:test('test')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n\t\t')
+        PsiExpressionStatement
+          PsiReferenceExpression:String.class.
+		String
+            PsiClassObjectAccessExpression:String.class
+              PsiTypeElement:String
+                PsiJavaCodeReferenceElement:String
+                  PsiIdentifier:String('String')
+                  PsiReferenceParameterList
+                    <empty list>
+              PsiJavaToken:DOT('.')
+              PsiKeyword:class('class')
+            PsiJavaToken:DOT('.')
+            PsiReferenceParameterList
+              <empty list>
+            PsiWhiteSpace('\n\t\t')
+            PsiIdentifier:String('String')
+          PsiErrorElement:';' expected
+            <empty list>
+        PsiErrorElement:Unexpected token
+          PsiJavaToken:LBRACKET('[')
+        PsiErrorElement:Unexpected token
+          PsiJavaToken:RBRACKET(']')
+        PsiWhiteSpace(' ')
+        PsiExpressionStatement
+          PsiReferenceExpression:strings
+            PsiReferenceParameterList
+              <empty list>
+            PsiIdentifier:strings('strings')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n\t')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/commonParsing/UnclosedComment.java b/java/java-tests/testData/psi/parser-full/commonParsing/UnclosedComment.java
new file mode 100644
index 0000000..43141b9
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/commonParsing/UnclosedComment.java
@@ -0,0 +1,7 @@
+// unclosed comment
+/*
+
+import java.io.*;
+
+class a {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/commonParsing/UnclosedComment.txt b/java/java-tests/testData/psi/parser-full/commonParsing/UnclosedComment.txt
new file mode 100644
index 0000000..2296d8e
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/commonParsing/UnclosedComment.txt
@@ -0,0 +1,6 @@
+PsiJavaFile:UnclosedComment.java
+  PsiComment(END_OF_LINE_COMMENT)('// unclosed comment')
+  PsiWhiteSpace('\n')
+  PsiComment(C_STYLE_COMMENT)('/*\n\nimport java.io.*;\n\nclass a {\n}')
+  PsiImportList
+    <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/EmptyImportList.java b/java/java-tests/testData/psi/parser-full/declarationParsing/class/EmptyImportList.java
new file mode 100644
index 0000000..c4afabc
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/EmptyImportList.java
@@ -0,0 +1,4 @@
+/**
+*/
+public abstract class Test {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/EmptyImportList.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/class/EmptyImportList.txt
new file mode 100644
index 0000000..ebd2239
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/EmptyImportList.txt
@@ -0,0 +1,27 @@
+PsiJavaFile:EmptyImportList.java
+  PsiImportList
+    <empty list>
+  PsiClass:Test
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n')
+    PsiModifierList:public abstract
+      PsiKeyword:public('public')
+      PsiWhiteSpace(' ')
+      PsiKeyword:abstract('abstract')
+    PsiWhiteSpace(' ')
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Test('Test')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/Enum1.java b/java/java-tests/testData/psi/parser-full/declarationParsing/class/Enum1.java
new file mode 100644
index 0000000..b1b1118
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/Enum1.java
@@ -0,0 +1,2 @@
+public enum OurEnum {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/Enum1.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/class/Enum1.txt
new file mode 100644
index 0000000..4d1ed2c
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/Enum1.txt
@@ -0,0 +1,20 @@
+PsiJavaFile:Enum1.java
+  PsiImportList
+    <empty list>
+  PsiClass:OurEnum
+    PsiModifierList:public
+      PsiKeyword:public('public')
+    PsiWhiteSpace(' ')
+    PsiKeyword:enum('enum')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:OurEnum('OurEnum')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/Enum2.java b/java/java-tests/testData/psi/parser-full/declarationParsing/class/Enum2.java
new file mode 100644
index 0000000..19273e9
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/Enum2.java
@@ -0,0 +1,2 @@
+enum OurEnum {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/Enum2.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/class/Enum2.txt
new file mode 100644
index 0000000..9f23876
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/Enum2.txt
@@ -0,0 +1,19 @@
+PsiJavaFile:Enum2.java
+  PsiImportList
+    <empty list>
+  PsiClass:OurEnum
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:enum('enum')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:OurEnum('OurEnum')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithAnnotatedConstants.java b/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithAnnotatedConstants.java
new file mode 100644
index 0000000..9aa8e3c
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithAnnotatedConstants.java
@@ -0,0 +1,3 @@
+enum OurEnum {
+  @ANNOTATION A(10)
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithAnnotatedConstants.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithAnnotatedConstants.txt
new file mode 100644
index 0000000..cd6f42d
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithAnnotatedConstants.txt
@@ -0,0 +1,37 @@
+PsiJavaFile:EnumWithAnnotatedConstants.java
+  PsiImportList
+    <empty list>
+  PsiClass:OurEnum
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:enum('enum')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:OurEnum('OurEnum')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiEnumConstant:A
+      PsiModifierList:@ANNOTATION
+        PsiAnnotation
+          PsiJavaToken:AT('@')
+          PsiJavaCodeReferenceElement:ANNOTATION
+            PsiIdentifier:ANNOTATION('ANNOTATION')
+            PsiReferenceParameterList
+              <empty list>
+          PsiAnnotationParameterList
+            <empty list>
+      PsiWhiteSpace(' ')
+      PsiIdentifier:A('A')
+      PsiExpressionList
+        PsiJavaToken:LPARENTH('(')
+        PsiLiteralExpression:10
+          PsiJavaToken:INTEGER_LITERAL('10')
+        PsiJavaToken:RPARENTH(')')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithConstants1.java b/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithConstants1.java
new file mode 100644
index 0000000..cfc96fc
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithConstants1.java
@@ -0,0 +1,3 @@
+public enum OurEnum {
+  ;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithConstants1.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithConstants1.txt
new file mode 100644
index 0000000..de9c2cd
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithConstants1.txt
@@ -0,0 +1,22 @@
+PsiJavaFile:EnumWithConstants1.java
+  PsiImportList
+    <empty list>
+  PsiClass:OurEnum
+    PsiModifierList:public
+      PsiKeyword:public('public')
+    PsiWhiteSpace(' ')
+    PsiKeyword:enum('enum')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:OurEnum('OurEnum')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithConstants2.java b/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithConstants2.java
new file mode 100644
index 0000000..71efcd3
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithConstants2.java
@@ -0,0 +1,3 @@
+public enum OurEnum {
+  RED, GREEN, BLUE;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithConstants2.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithConstants2.txt
new file mode 100644
index 0000000..6faa604
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithConstants2.txt
@@ -0,0 +1,44 @@
+PsiJavaFile:EnumWithConstants2.java
+  PsiImportList
+    <empty list>
+  PsiClass:OurEnum
+    PsiModifierList:public
+      PsiKeyword:public('public')
+    PsiWhiteSpace(' ')
+    PsiKeyword:enum('enum')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:OurEnum('OurEnum')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiEnumConstant:RED
+      PsiModifierList:
+        <empty list>
+      PsiIdentifier:RED('RED')
+      PsiExpressionList
+        <empty list>
+    PsiJavaToken:COMMA(',')
+    PsiWhiteSpace(' ')
+    PsiEnumConstant:GREEN
+      PsiModifierList:
+        <empty list>
+      PsiIdentifier:GREEN('GREEN')
+      PsiExpressionList
+        <empty list>
+    PsiJavaToken:COMMA(',')
+    PsiWhiteSpace(' ')
+    PsiEnumConstant:BLUE
+      PsiModifierList:
+        <empty list>
+      PsiIdentifier:BLUE('BLUE')
+      PsiExpressionList
+        <empty list>
+    PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithConstants3.java b/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithConstants3.java
new file mode 100644
index 0000000..a952b2d
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithConstants3.java
@@ -0,0 +1,3 @@
+public enum OurEnum {
+  RED, GREEN, BLUE
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithConstants3.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithConstants3.txt
new file mode 100644
index 0000000..4cda058
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithConstants3.txt
@@ -0,0 +1,43 @@
+PsiJavaFile:EnumWithConstants3.java
+  PsiImportList
+    <empty list>
+  PsiClass:OurEnum
+    PsiModifierList:public
+      PsiKeyword:public('public')
+    PsiWhiteSpace(' ')
+    PsiKeyword:enum('enum')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:OurEnum('OurEnum')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiEnumConstant:RED
+      PsiModifierList:
+        <empty list>
+      PsiIdentifier:RED('RED')
+      PsiExpressionList
+        <empty list>
+    PsiJavaToken:COMMA(',')
+    PsiWhiteSpace(' ')
+    PsiEnumConstant:GREEN
+      PsiModifierList:
+        <empty list>
+      PsiIdentifier:GREEN('GREEN')
+      PsiExpressionList
+        <empty list>
+    PsiJavaToken:COMMA(',')
+    PsiWhiteSpace(' ')
+    PsiEnumConstant:BLUE
+      PsiModifierList:
+        <empty list>
+      PsiIdentifier:BLUE('BLUE')
+      PsiExpressionList
+        <empty list>
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithConstants4.java b/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithConstants4.java
new file mode 100644
index 0000000..c67d35d
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithConstants4.java
@@ -0,0 +1,3 @@
+public enum OurEnum {
+  RED, GREEN, BLUE,
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithConstants4.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithConstants4.txt
new file mode 100644
index 0000000..e338f96
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithConstants4.txt
@@ -0,0 +1,44 @@
+PsiJavaFile:EnumWithConstants4.java
+  PsiImportList
+    <empty list>
+  PsiClass:OurEnum
+    PsiModifierList:public
+      PsiKeyword:public('public')
+    PsiWhiteSpace(' ')
+    PsiKeyword:enum('enum')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:OurEnum('OurEnum')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiEnumConstant:RED
+      PsiModifierList:
+        <empty list>
+      PsiIdentifier:RED('RED')
+      PsiExpressionList
+        <empty list>
+    PsiJavaToken:COMMA(',')
+    PsiWhiteSpace(' ')
+    PsiEnumConstant:GREEN
+      PsiModifierList:
+        <empty list>
+      PsiIdentifier:GREEN('GREEN')
+      PsiExpressionList
+        <empty list>
+    PsiJavaToken:COMMA(',')
+    PsiWhiteSpace(' ')
+    PsiEnumConstant:BLUE
+      PsiModifierList:
+        <empty list>
+      PsiIdentifier:BLUE('BLUE')
+      PsiExpressionList
+        <empty list>
+    PsiJavaToken:COMMA(',')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithConstants5.java b/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithConstants5.java
new file mode 100644
index 0000000..f7b0c22
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithConstants5.java
@@ -0,0 +1,6 @@
+public enum OurEnum {
+  RED, GREEN, BLUE
+
+  OurEnum() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithConstants5.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithConstants5.txt
new file mode 100644
index 0000000..1612500
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithConstants5.txt
@@ -0,0 +1,62 @@
+PsiJavaFile:EnumWithConstants5.java
+  PsiImportList
+    <empty list>
+  PsiClass:OurEnum
+    PsiModifierList:public
+      PsiKeyword:public('public')
+    PsiWhiteSpace(' ')
+    PsiKeyword:enum('enum')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:OurEnum('OurEnum')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiEnumConstant:RED
+      PsiModifierList:
+        <empty list>
+      PsiIdentifier:RED('RED')
+      PsiExpressionList
+        <empty list>
+    PsiJavaToken:COMMA(',')
+    PsiWhiteSpace(' ')
+    PsiEnumConstant:GREEN
+      PsiModifierList:
+        <empty list>
+      PsiIdentifier:GREEN('GREEN')
+      PsiExpressionList
+        <empty list>
+    PsiJavaToken:COMMA(',')
+    PsiWhiteSpace(' ')
+    PsiEnumConstant:BLUE
+      PsiModifierList:
+        <empty list>
+      PsiIdentifier:BLUE('BLUE')
+      PsiExpressionList
+        <empty list>
+    PsiErrorElement:',' or ';' expected
+      <empty list>
+    PsiWhiteSpace('\n\n  ')
+    PsiMethod:OurEnum
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiIdentifier:OurEnum('OurEnum')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithConstants6.java b/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithConstants6.java
new file mode 100644
index 0000000..2dd0c2c
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithConstants6.java
@@ -0,0 +1,3 @@
+public enum OurEnum {
+  RED(0), GREEN(1), BLUE(2);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithConstants6.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithConstants6.txt
new file mode 100644
index 0000000..4f84ef3
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithConstants6.txt
@@ -0,0 +1,53 @@
+PsiJavaFile:EnumWithConstants6.java
+  PsiImportList
+    <empty list>
+  PsiClass:OurEnum
+    PsiModifierList:public
+      PsiKeyword:public('public')
+    PsiWhiteSpace(' ')
+    PsiKeyword:enum('enum')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:OurEnum('OurEnum')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiEnumConstant:RED
+      PsiModifierList:
+        <empty list>
+      PsiIdentifier:RED('RED')
+      PsiExpressionList
+        PsiJavaToken:LPARENTH('(')
+        PsiLiteralExpression:0
+          PsiJavaToken:INTEGER_LITERAL('0')
+        PsiJavaToken:RPARENTH(')')
+    PsiJavaToken:COMMA(',')
+    PsiWhiteSpace(' ')
+    PsiEnumConstant:GREEN
+      PsiModifierList:
+        <empty list>
+      PsiIdentifier:GREEN('GREEN')
+      PsiExpressionList
+        PsiJavaToken:LPARENTH('(')
+        PsiLiteralExpression:1
+          PsiJavaToken:INTEGER_LITERAL('1')
+        PsiJavaToken:RPARENTH(')')
+    PsiJavaToken:COMMA(',')
+    PsiWhiteSpace(' ')
+    PsiEnumConstant:BLUE
+      PsiModifierList:
+        <empty list>
+      PsiIdentifier:BLUE('BLUE')
+      PsiExpressionList
+        PsiJavaToken:LPARENTH('(')
+        PsiLiteralExpression:2
+          PsiJavaToken:INTEGER_LITERAL('2')
+        PsiJavaToken:RPARENTH(')')
+    PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithImport.java b/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithImport.java
new file mode 100644
index 0000000..cfc96fc
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithImport.java
@@ -0,0 +1,3 @@
+public enum OurEnum {
+  ;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithImport.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithImport.txt
new file mode 100644
index 0000000..4ff8a1d
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithImport.txt
@@ -0,0 +1,22 @@
+PsiJavaFile:EnumWithImport.java
+  PsiImportList
+    <empty list>
+  PsiClass:OurEnum
+    PsiModifierList:public
+      PsiKeyword:public('public')
+    PsiWhiteSpace(' ')
+    PsiKeyword:enum('enum')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:OurEnum('OurEnum')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithInitializedConstants.java b/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithInitializedConstants.java
new file mode 100644
index 0000000..da8d07a
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithInitializedConstants.java
@@ -0,0 +1,6 @@
+enum OurEnum {
+  A(10) { },
+  B {
+    void method() {}
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithInitializedConstants.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithInitializedConstants.txt
new file mode 100644
index 0000000..553f4c2
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithInitializedConstants.txt
@@ -0,0 +1,66 @@
+PsiJavaFile:EnumWithInitializedConstants.java
+  PsiImportList
+    <empty list>
+  PsiClass:OurEnum
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:enum('enum')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:OurEnum('OurEnum')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiEnumConstant:A
+      PsiModifierList:
+        <empty list>
+      PsiIdentifier:A('A')
+      PsiExpressionList
+        PsiJavaToken:LPARENTH('(')
+        PsiLiteralExpression:10
+          PsiJavaToken:INTEGER_LITERAL('10')
+        PsiJavaToken:RPARENTH(')')
+      PsiWhiteSpace(' ')
+      PsiAnonymousClass (PsiEnumConstantInitializerImpl)):
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace(' ')
+        PsiJavaToken:RBRACE('}')
+    PsiJavaToken:COMMA(',')
+    PsiWhiteSpace('\n  ')
+    PsiEnumConstant:B
+      PsiModifierList:
+        <empty list>
+      PsiIdentifier:B('B')
+      PsiExpressionList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiAnonymousClass (PsiEnumConstantInitializerImpl)):
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiMethod:method
+          PsiModifierList:
+            <empty list>
+          PsiTypeParameterList
+            <empty list>
+          PsiTypeElement:void
+            PsiKeyword:void('void')
+          PsiWhiteSpace(' ')
+          PsiIdentifier:method('method')
+          PsiParameterList:()
+            PsiJavaToken:LPARENTH('(')
+            PsiJavaToken:RPARENTH(')')
+          PsiReferenceList
+            <empty list>
+          PsiWhiteSpace(' ')
+          PsiCodeBlock
+            PsiJavaToken:LBRACE('{')
+            PsiJavaToken:RBRACE('}')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithoutConstants.java b/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithoutConstants.java
new file mode 100644
index 0000000..5fdad83
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithoutConstants.java
@@ -0,0 +1,3 @@
+public enum OurEnum {
+  private A
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithoutConstants.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithoutConstants.txt
new file mode 100644
index 0000000..5e61f3b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/EnumWithoutConstants.txt
@@ -0,0 +1,33 @@
+PsiJavaFile:EnumWithoutConstants.java
+  PsiImportList
+    <empty list>
+  PsiClass:OurEnum
+    PsiModifierList:public
+      PsiKeyword:public('public')
+    PsiWhiteSpace(' ')
+    PsiKeyword:enum('enum')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:OurEnum('OurEnum')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiErrorElement:';' expected
+      <empty list>
+    PsiWhiteSpace('\n  ')
+    PsiModifierList:private
+      PsiKeyword:private('private')
+    PsiWhiteSpace(' ')
+    PsiTypeElement:A
+      PsiJavaCodeReferenceElement:A
+        PsiIdentifier:A('A')
+        PsiReferenceParameterList
+          <empty list>
+    PsiErrorElement:Identifier expected
+      <empty list>
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/Errors0.java b/java/java-tests/testData/psi/parser-full/declarationParsing/class/Errors0.java
new file mode 100644
index 0000000..9191e2b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/Errors0.java
@@ -0,0 +1 @@
+public class <caret>B {}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/Errors0.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/class/Errors0.txt
new file mode 100644
index 0000000..d94bbafd
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/Errors0.txt
@@ -0,0 +1,26 @@
+PsiJavaFile:Errors0.java
+  PsiImportList
+    <empty list>
+  PsiModifierList:public
+    PsiKeyword:public('public')
+  PsiWhiteSpace(' ')
+  PsiKeyword:class('class')
+  PsiErrorElement:Identifier expected
+    <empty list>
+  PsiWhiteSpace(' ')
+  PsiModifierList:
+    <empty list>
+  PsiErrorElement:'class' or 'interface' expected
+    <empty list>
+  PsiTypeParameterList
+    PsiJavaToken:LT('<')
+    PsiTypeParameter:caret
+      PsiIdentifier:caret('caret')
+      PsiElement(EXTENDS_BOUND_LIST)
+        <empty list>
+    PsiJavaToken:GT('>')
+  PsiErrorElement:'class' or 'interface' expected
+    PsiIdentifier:B('B')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/Errors1.java b/java/java-tests/testData/psi/parser-full/declarationParsing/class/Errors1.java
new file mode 100644
index 0000000..4b1de6f
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/Errors1.java
@@ -0,0 +1,4 @@
+// "Replace Implements with Static Import" "true"
+interface I<caret>n {
+    int FOO = 0;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/Errors1.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/class/Errors1.txt
new file mode 100644
index 0000000..f98dc0d
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/Errors1.txt
@@ -0,0 +1,42 @@
+PsiJavaFile:Errors1.java
+  PsiImportList
+    <empty list>
+  PsiClass:I
+    PsiComment(END_OF_LINE_COMMENT)('// "Replace Implements with Static Import" "true"')
+    PsiWhiteSpace('\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:interface('interface')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:I('I')
+    PsiTypeParameterList
+      PsiJavaToken:LT('<')
+      PsiTypeParameter:caret
+        PsiIdentifier:caret('caret')
+        PsiElement(EXTENDS_BOUND_LIST)
+          <empty list>
+      PsiJavaToken:GT('>')
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiErrorElement:'{' expected
+      PsiIdentifier:n('n')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n    ')
+    PsiField:FOO
+      PsiModifierList:
+        <empty list>
+      PsiTypeElement:int
+        PsiKeyword:int('int')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:FOO('FOO')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:EQ('=')
+      PsiWhiteSpace(' ')
+      PsiLiteralExpression:0
+        PsiJavaToken:INTEGER_LITERAL('0')
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/Errors2.java b/java/java-tests/testData/psi/parser-full/declarationParsing/class/Errors2.java
new file mode 100644
index 0000000..f2c4c89
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/Errors2.java
@@ -0,0 +1,3 @@
+public class Main {
+@interface <caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/Errors2.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/class/Errors2.txt
new file mode 100644
index 0000000..64ff573
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/Errors2.txt
@@ -0,0 +1,38 @@
+PsiJavaFile:Errors2.java
+  PsiImportList
+    <empty list>
+  PsiClass:Main
+    PsiModifierList:public
+      PsiKeyword:public('public')
+    PsiWhiteSpace(' ')
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Main('Main')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n')
+    PsiModifierList:
+      <empty list>
+    PsiJavaToken:AT('@')
+    PsiKeyword:interface('interface')
+    PsiErrorElement:Identifier expected
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiModifierList:
+      <empty list>
+    PsiErrorElement:Identifier or type expected
+      PsiTypeParameterList
+        PsiJavaToken:LT('<')
+        PsiTypeParameter:caret
+          PsiIdentifier:caret('caret')
+          PsiElement(EXTENDS_BOUND_LIST)
+            <empty list>
+        PsiJavaToken:GT('>')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/Errors3.java b/java/java-tests/testData/psi/parser-full/declarationParsing/class/Errors3.java
new file mode 100644
index 0000000..c3fe1cc
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/Errors3.java
@@ -0,0 +1,5 @@
+class C {
+  public Object fa(int toDelete) sdfskdlfabcdavcd {
+    return null;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/Errors3.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/class/Errors3.txt
new file mode 100644
index 0000000..b71eb30
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/Errors3.txt
@@ -0,0 +1,60 @@
+PsiJavaFile:Errors3.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiMethod:fa
+      PsiModifierList:public
+        PsiKeyword:public('public')
+      PsiTypeParameterList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiTypeElement:Object
+        PsiJavaCodeReferenceElement:Object
+          PsiIdentifier:Object('Object')
+          PsiReferenceParameterList
+            <empty list>
+      PsiWhiteSpace(' ')
+      PsiIdentifier:fa('fa')
+      PsiParameterList:(int toDelete)
+        PsiJavaToken:LPARENTH('(')
+        PsiParameter:toDelete
+          PsiModifierList:
+            <empty list>
+          PsiTypeElement:int
+            PsiKeyword:int('int')
+          PsiWhiteSpace(' ')
+          PsiIdentifier:toDelete('toDelete')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiErrorElement:'{' or ';' expected
+        PsiIdentifier:sdfskdlfabcdavcd('sdfskdlfabcdavcd')
+      PsiWhiteSpace(' ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiReturnStatement
+          PsiKeyword:return('return')
+          PsiWhiteSpace(' ')
+          PsiLiteralExpression:null
+            PsiJavaToken:NULL_KEYWORD('null')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/Errors4.java b/java/java-tests/testData/psi/parser-full/declarationParsing/class/Errors4.java
new file mode 100644
index 0000000..73e318e
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/Errors4.java
@@ -0,0 +1,6 @@
+class OutOfMemoryExceptionDemo {
+    void main() {
+        List<Object> list = new Linked
+        @Deprecated List<Object>();
+    }
+}
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/Errors4.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/class/Errors4.txt
new file mode 100644
index 0000000..8380253
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/Errors4.txt
@@ -0,0 +1,104 @@
+PsiJavaFile:Errors4.java
+  PsiImportList
+    <empty list>
+  PsiClass:OutOfMemoryExceptionDemo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:OutOfMemoryExceptionDemo('OutOfMemoryExceptionDemo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n    ')
+    PsiMethod:main
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:main('main')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n        ')
+        PsiDeclarationStatement
+          PsiLocalVariable:list
+            PsiModifierList:
+              <empty list>
+            PsiTypeElement:List<Object>
+              PsiJavaCodeReferenceElement:List<Object>
+                PsiIdentifier:List('List')
+                PsiReferenceParameterList
+                  PsiJavaToken:LT('<')
+                  PsiTypeElement:Object
+                    PsiJavaCodeReferenceElement:Object
+                      PsiIdentifier:Object('Object')
+                      PsiReferenceParameterList
+                        <empty list>
+                  PsiJavaToken:GT('>')
+            PsiWhiteSpace(' ')
+            PsiIdentifier:list('list')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:EQ('=')
+            PsiWhiteSpace(' ')
+            PsiNewExpression:new Linked
+              PsiKeyword:new('new')
+              PsiReferenceParameterList
+                <empty list>
+              PsiWhiteSpace(' ')
+              PsiJavaCodeReferenceElement:Linked
+                PsiIdentifier:Linked('Linked')
+                PsiReferenceParameterList
+                  <empty list>
+              PsiErrorElement:'(' or '[' expected
+                <empty list>
+            PsiErrorElement:';' expected
+              <empty list>
+        PsiWhiteSpace('\n        ')
+        PsiDeclarationStatement
+          PsiTypeElement:@Deprecated List<Object>
+            PsiAnnotation
+              PsiJavaToken:AT('@')
+              PsiJavaCodeReferenceElement:Deprecated
+                PsiIdentifier:Deprecated('Deprecated')
+                PsiReferenceParameterList
+                  <empty list>
+              PsiAnnotationParameterList
+                <empty list>
+            PsiWhiteSpace(' ')
+            PsiJavaCodeReferenceElement:List<Object>
+              PsiIdentifier:List('List')
+              PsiReferenceParameterList
+                PsiJavaToken:LT('<')
+                PsiTypeElement:Object
+                  PsiJavaCodeReferenceElement:Object
+                    PsiIdentifier:Object('Object')
+                    PsiReferenceParameterList
+                      <empty list>
+                PsiJavaToken:GT('>')
+          PsiErrorElement:Identifier expected
+            <empty list>
+        PsiExpressionStatement
+          PsiParenthesizedExpression:()
+            PsiJavaToken:LPARENTH('(')
+            PsiErrorElement:Expression expected
+              <empty list>
+            PsiJavaToken:RPARENTH(')')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n    ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/Errors5.java b/java/java-tests/testData/psi/parser-full/declarationParsing/class/Errors5.java
new file mode 100644
index 0000000..a88db6b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/Errors5.java
@@ -0,0 +1,22 @@
+/*
+ * 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.
+ */
+private static class My extends JComponent {
+  private My(Map<String, List<Object>> param) {
+    setBorder(null);
+    param
+    list();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/Errors5.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/class/Errors5.txt
new file mode 100644
index 0000000..93ee511
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/Errors5.txt
@@ -0,0 +1,109 @@
+PsiJavaFile:Errors5.java
+  PsiImportList
+    <empty list>
+  PsiClass:My
+    PsiComment(C_STYLE_COMMENT)('/*\n * Copyright 2000-2012 JetBrains s.r.o.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */')
+    PsiWhiteSpace('\n')
+    PsiModifierList:private static
+      PsiKeyword:private('private')
+      PsiWhiteSpace(' ')
+      PsiKeyword:static('static')
+    PsiWhiteSpace(' ')
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:My('My')
+    PsiTypeParameterList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiReferenceList
+      PsiKeyword:extends('extends')
+      PsiWhiteSpace(' ')
+      PsiJavaCodeReferenceElement:JComponent
+        PsiIdentifier:JComponent('JComponent')
+        PsiReferenceParameterList
+          <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiMethod:My
+      PsiModifierList:private
+        PsiKeyword:private('private')
+      PsiTypeParameterList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiIdentifier:My('My')
+      PsiParameterList:(Map<String, List<Object>> param)
+        PsiJavaToken:LPARENTH('(')
+        PsiParameter:param
+          PsiModifierList:
+            <empty list>
+          PsiTypeElement:Map<String, List<Object>>
+            PsiJavaCodeReferenceElement:Map<String, List<Object>>
+              PsiIdentifier:Map('Map')
+              PsiReferenceParameterList
+                PsiJavaToken:LT('<')
+                PsiTypeElement:String
+                  PsiJavaCodeReferenceElement:String
+                    PsiIdentifier:String('String')
+                    PsiReferenceParameterList
+                      <empty list>
+                PsiJavaToken:COMMA(',')
+                PsiWhiteSpace(' ')
+                PsiTypeElement:List<Object>
+                  PsiJavaCodeReferenceElement:List<Object>
+                    PsiIdentifier:List('List')
+                    PsiReferenceParameterList
+                      PsiJavaToken:LT('<')
+                      PsiTypeElement:Object
+                        PsiJavaCodeReferenceElement:Object
+                          PsiIdentifier:Object('Object')
+                          PsiReferenceParameterList
+                            <empty list>
+                      PsiJavaToken:GT('>')
+                PsiJavaToken:GT('>')
+          PsiWhiteSpace(' ')
+          PsiIdentifier:param('param')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiMethodCallExpression:setBorder(null)
+            PsiReferenceExpression:setBorder
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:setBorder('setBorder')
+            PsiExpressionList
+              PsiJavaToken:LPARENTH('(')
+              PsiLiteralExpression:null
+                PsiJavaToken:NULL_KEYWORD('null')
+              PsiJavaToken:RPARENTH(')')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiReferenceExpression:param
+            PsiReferenceParameterList
+              <empty list>
+            PsiIdentifier:param('param')
+          PsiErrorElement:';' expected
+            <empty list>
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiMethodCallExpression:list()
+            PsiReferenceExpression:list
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:list('list')
+            PsiExpressionList
+              PsiJavaToken:LPARENTH('(')
+              PsiJavaToken:RPARENTH(')')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/ExtraClosingBraceInMethod.java b/java/java-tests/testData/psi/parser-full/declarationParsing/class/ExtraClosingBraceInMethod.java
new file mode 100644
index 0000000..4385b55
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/ExtraClosingBraceInMethod.java
@@ -0,0 +1,10 @@
+class Foo {
+   public void testSomething() {
+     }
+   }
+
+   public void testSomething() {
+
+   }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/ExtraClosingBraceInMethod.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/class/ExtraClosingBraceInMethod.txt
new file mode 100644
index 0000000..643aedb
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/ExtraClosingBraceInMethod.txt
@@ -0,0 +1,65 @@
+PsiJavaFile:ExtraClosingBraceInMethod.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n   ')
+    PsiMethod:testSomething
+      PsiModifierList:public
+        PsiKeyword:public('public')
+      PsiTypeParameterList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:testSomething('testSomething')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n     ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n   ')
+    PsiJavaToken:RBRACE('}')
+    PsiErrorElement:'class' or 'interface' expected
+      <empty list>
+    PsiWhiteSpace('\n\n   ')
+    PsiMethod:testSomething
+      PsiModifierList:public
+        PsiKeyword:public('public')
+      PsiTypeParameterList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:testSomething('testSomething')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n\n   ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/ExtraOpeningBraceInMethod.java b/java/java-tests/testData/psi/parser-full/declarationParsing/class/ExtraOpeningBraceInMethod.java
new file mode 100644
index 0000000..da27af7
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/ExtraOpeningBraceInMethod.java
@@ -0,0 +1,12 @@
+package foo;
+
+public class Foo {
+   public void testSomething() {
+     {
+   }
+
+   public void testSomething() {
+
+   }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/ExtraOpeningBraceInMethod.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/class/ExtraOpeningBraceInMethod.txt
new file mode 100644
index 0000000..c070d1e
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/ExtraOpeningBraceInMethod.txt
@@ -0,0 +1,77 @@
+PsiJavaFile:ExtraOpeningBraceInMethod.java
+  PsiPackageStatement:foo
+    PsiKeyword:package('package')
+    PsiWhiteSpace(' ')
+    PsiJavaCodeReferenceElement:foo
+      PsiIdentifier:foo('foo')
+      PsiReferenceParameterList
+        <empty list>
+    PsiJavaToken:SEMICOLON(';')
+  PsiWhiteSpace('\n\n')
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:public
+      PsiKeyword:public('public')
+    PsiWhiteSpace(' ')
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n   ')
+    PsiMethod:testSomething
+      PsiModifierList:public
+        PsiKeyword:public('public')
+      PsiTypeParameterList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:testSomething('testSomething')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n     ')
+        PsiBlockStatement
+          PsiCodeBlock
+            PsiJavaToken:LBRACE('{')
+            PsiWhiteSpace('\n   ')
+            PsiJavaToken:RBRACE('}')
+        PsiErrorElement:'}' expected
+          <empty list>
+        PsiWhiteSpace('\n\n   ')
+    PsiMethod:testSomething
+      PsiModifierList:public
+        PsiKeyword:public('public')
+      PsiTypeParameterList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:testSomething('testSomething')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n\n   ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/ForError.java b/java/java-tests/testData/psi/parser-full/declarationParsing/class/ForError.java
new file mode 100644
index 0000000..71165d7
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/ForError.java
@@ -0,0 +1,5 @@
+class Test{
+  {
+    for(int i = 0; i < 10;<EOLError/>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/ForError.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/class/ForError.txt
new file mode 100644
index 0000000..4472f8d
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/ForError.txt
@@ -0,0 +1,75 @@
+PsiJavaFile:ForError.java
+  PsiImportList
+    <empty list>
+  PsiClass:Test
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Test('Test')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiForStatement
+          PsiKeyword:for('for')
+          PsiJavaToken:LPARENTH('(')
+          PsiDeclarationStatement
+            PsiLocalVariable:i
+              PsiModifierList:
+                <empty list>
+              PsiTypeElement:int
+                PsiKeyword:int('int')
+              PsiWhiteSpace(' ')
+              PsiIdentifier:i('i')
+              PsiWhiteSpace(' ')
+              PsiJavaToken:EQ('=')
+              PsiWhiteSpace(' ')
+              PsiLiteralExpression:0
+                PsiJavaToken:INTEGER_LITERAL('0')
+              PsiJavaToken:SEMICOLON(';')
+          PsiWhiteSpace(' ')
+          PsiBinaryExpression:i < 10
+            PsiReferenceExpression:i
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:i('i')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:LT('<')
+            PsiWhiteSpace(' ')
+            PsiLiteralExpression:10
+              PsiJavaToken:INTEGER_LITERAL('10')
+          PsiJavaToken:SEMICOLON(';')
+          PsiErrorElement:')' expected
+            <empty list>
+        PsiErrorElement:Unexpected token
+          PsiJavaToken:LT('<')
+        PsiExpressionStatement
+          PsiBinaryExpression:EOLError/>
+            PsiBinaryExpression:EOLError/
+              PsiReferenceExpression:EOLError
+                PsiReferenceParameterList
+                  <empty list>
+                PsiIdentifier:EOLError('EOLError')
+              PsiJavaToken:DIV('/')
+              PsiErrorElement:Expression expected
+                <empty list>
+            PsiJavaToken:GT('>')
+            PsiErrorElement:Expression expected
+              <empty list>
+          PsiErrorElement:';' expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/IncompleteAnnotation.java b/java/java-tests/testData/psi/parser-full/declarationParsing/class/IncompleteAnnotation.java
new file mode 100644
index 0000000..d8dbd64
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/IncompleteAnnotation.java
@@ -0,0 +1,7 @@
+package foo;
+
+public class Foo {
+   public void testSomething();
+
+   @Null
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/IncompleteAnnotation.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/class/IncompleteAnnotation.txt
new file mode 100644
index 0000000..55dba34
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/IncompleteAnnotation.txt
@@ -0,0 +1,58 @@
+PsiJavaFile:IncompleteAnnotation.java
+  PsiPackageStatement:foo
+    PsiKeyword:package('package')
+    PsiWhiteSpace(' ')
+    PsiJavaCodeReferenceElement:foo
+      PsiIdentifier:foo('foo')
+      PsiReferenceParameterList
+        <empty list>
+    PsiJavaToken:SEMICOLON(';')
+  PsiWhiteSpace('\n\n')
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:public
+      PsiKeyword:public('public')
+    PsiWhiteSpace(' ')
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n   ')
+    PsiMethod:testSomething
+      PsiModifierList:public
+        PsiKeyword:public('public')
+      PsiTypeParameterList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:testSomething('testSomething')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n\n   ')
+    PsiModifierList:@Null
+      PsiAnnotation
+        PsiJavaToken:AT('@')
+        PsiJavaCodeReferenceElement:Null
+          PsiIdentifier:Null('Null')
+          PsiReferenceParameterList
+            <empty list>
+        PsiAnnotationParameterList
+          <empty list>
+    PsiErrorElement:Identifier or type expected
+      <empty list>
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/LongClass.java b/java/java-tests/testData/psi/parser-full/declarationParsing/class/LongClass.java
new file mode 100644
index 0000000..d467c53
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/LongClass.java
@@ -0,0 +1,30451 @@
+class A{
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+ 
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+
+ /***/
+ void foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/LongClass.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/class/LongClass.txt
new file mode 100644
index 0000000..8507878
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/LongClass.txt
@@ -0,0 +1,223626 @@
+PsiJavaFile:LongClass.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n \n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/NoClass.java b/java/java-tests/testData/psi/parser-full/declarationParsing/class/NoClass.java
new file mode 100644
index 0000000..91e965a
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/NoClass.java
@@ -0,0 +1,4 @@
+import a.b;
+
+public ClassName{
+}
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/NoClass.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/class/NoClass.txt
new file mode 100644
index 0000000..8859384f
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/NoClass.txt
@@ -0,0 +1,26 @@
+PsiJavaFile:NoClass.java
+  PsiImportList
+    PsiImportStatement
+      PsiKeyword:import('import')
+      PsiWhiteSpace(' ')
+      PsiJavaCodeReferenceElement:a.b
+        PsiJavaCodeReferenceElement:a
+          PsiIdentifier:a('a')
+          PsiReferenceParameterList
+            <empty list>
+        PsiJavaToken:DOT('.')
+        PsiIdentifier:b('b')
+        PsiReferenceParameterList
+          <empty list>
+      PsiJavaToken:SEMICOLON(';')
+  PsiWhiteSpace('\n\n')
+  PsiModifierList:public
+    PsiKeyword:public('public')
+  PsiErrorElement:'class' or 'interface' expected
+    <empty list>
+  PsiWhiteSpace(' ')
+  PsiErrorElement:'class' or 'interface' expected
+    PsiIdentifier:ClassName('ClassName')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/NoType.java b/java/java-tests/testData/psi/parser-full/declarationParsing/class/NoType.java
new file mode 100644
index 0000000..111de45
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/NoType.java
@@ -0,0 +1,3 @@
+class ClassName{
+  new X();
+}
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/NoType.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/class/NoType.txt
new file mode 100644
index 0000000..114f4c4
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/NoType.txt
@@ -0,0 +1,34 @@
+PsiJavaFile:NoType.java
+  PsiImportList
+    <empty list>
+  PsiClass:ClassName
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:ClassName('ClassName')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiErrorElement:Unexpected token
+      PsiKeyword:new('new')
+    PsiWhiteSpace(' ')
+    PsiMethod:X
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiIdentifier:X('X')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/ParametrizedClass.java b/java/java-tests/testData/psi/parser-full/declarationParsing/class/ParametrizedClass.java
new file mode 100644
index 0000000..fedaa35
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/ParametrizedClass.java
@@ -0,0 +1,3 @@
+public class A <T extends java.util.List> {
+  T x;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/ParametrizedClass.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/class/ParametrizedClass.txt
new file mode 100644
index 0000000..d7e6b25
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/ParametrizedClass.txt
@@ -0,0 +1,54 @@
+PsiJavaFile:ParametrizedClass.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:public
+      PsiKeyword:public('public')
+    PsiWhiteSpace(' ')
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiWhiteSpace(' ')
+    PsiTypeParameterList
+      PsiJavaToken:LT('<')
+      PsiTypeParameter:T
+        PsiIdentifier:T('T')
+        PsiWhiteSpace(' ')
+        PsiElement(EXTENDS_BOUND_LIST)
+          PsiKeyword:extends('extends')
+          PsiWhiteSpace(' ')
+          PsiJavaCodeReferenceElement:java.util.List
+            PsiJavaCodeReferenceElement:java.util
+              PsiJavaCodeReferenceElement:java
+                PsiIdentifier:java('java')
+                PsiReferenceParameterList
+                  <empty list>
+              PsiJavaToken:DOT('.')
+              PsiIdentifier:util('util')
+              PsiReferenceParameterList
+                <empty list>
+            PsiJavaToken:DOT('.')
+            PsiIdentifier:List('List')
+            PsiReferenceParameterList
+              <empty list>
+      PsiJavaToken:GT('>')
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiField:x
+      PsiModifierList:
+        <empty list>
+      PsiTypeElement:T
+        PsiJavaCodeReferenceElement:T
+          PsiIdentifier:T('T')
+          PsiReferenceParameterList
+            <empty list>
+      PsiWhiteSpace(' ')
+      PsiIdentifier:x('x')
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/Pines.java b/java/java-tests/testData/psi/parser-full/declarationParsing/class/Pines.java
new file mode 100644
index 0000000..f791df2
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/Pines.java
@@ -0,0 +1,5 @@
+class A<T extends List<String>> extends List<List<Integer>> {
+    int method(T x)  {
+        return x.size() >> 2;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/Pines.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/class/Pines.txt
new file mode 100644
index 0000000..f90fd25
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/Pines.txt
@@ -0,0 +1,108 @@
+PsiJavaFile:Pines.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      PsiJavaToken:LT('<')
+      PsiTypeParameter:T
+        PsiIdentifier:T('T')
+        PsiWhiteSpace(' ')
+        PsiElement(EXTENDS_BOUND_LIST)
+          PsiKeyword:extends('extends')
+          PsiWhiteSpace(' ')
+          PsiJavaCodeReferenceElement:List<String>
+            PsiIdentifier:List('List')
+            PsiReferenceParameterList
+              PsiJavaToken:LT('<')
+              PsiTypeElement:String
+                PsiJavaCodeReferenceElement:String
+                  PsiIdentifier:String('String')
+                  PsiReferenceParameterList
+                    <empty list>
+              PsiJavaToken:GT('>')
+      PsiJavaToken:GT('>')
+    PsiWhiteSpace(' ')
+    PsiReferenceList
+      PsiKeyword:extends('extends')
+      PsiWhiteSpace(' ')
+      PsiJavaCodeReferenceElement:List<List<Integer>>
+        PsiIdentifier:List('List')
+        PsiReferenceParameterList
+          PsiJavaToken:LT('<')
+          PsiTypeElement:List<Integer>
+            PsiJavaCodeReferenceElement:List<Integer>
+              PsiIdentifier:List('List')
+              PsiReferenceParameterList
+                PsiJavaToken:LT('<')
+                PsiTypeElement:Integer
+                  PsiJavaCodeReferenceElement:Integer
+                    PsiIdentifier:Integer('Integer')
+                    PsiReferenceParameterList
+                      <empty list>
+                PsiJavaToken:GT('>')
+          PsiJavaToken:GT('>')
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n    ')
+    PsiMethod:method
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:int
+        PsiKeyword:int('int')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:method('method')
+      PsiParameterList:(T x)
+        PsiJavaToken:LPARENTH('(')
+        PsiParameter:x
+          PsiModifierList:
+            <empty list>
+          PsiTypeElement:T
+            PsiJavaCodeReferenceElement:T
+              PsiIdentifier:T('T')
+              PsiReferenceParameterList
+                <empty list>
+          PsiWhiteSpace(' ')
+          PsiIdentifier:x('x')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace('  ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n        ')
+        PsiReturnStatement
+          PsiKeyword:return('return')
+          PsiWhiteSpace(' ')
+          PsiBinaryExpression:x.size() >> 2
+            PsiMethodCallExpression:x.size()
+              PsiReferenceExpression:x.size
+                PsiReferenceExpression:x
+                  PsiReferenceParameterList
+                    <empty list>
+                  PsiIdentifier:x('x')
+                PsiJavaToken:DOT('.')
+                PsiReferenceParameterList
+                  <empty list>
+                PsiIdentifier:size('size')
+              PsiExpressionList
+                PsiJavaToken:LPARENTH('(')
+                PsiJavaToken:RPARENTH(')')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:GTGT('>>')
+            PsiWhiteSpace(' ')
+            PsiLiteralExpression:2
+              PsiJavaToken:INTEGER_LITERAL('2')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n    ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/Semicolon.java b/java/java-tests/testData/psi/parser-full/declarationParsing/class/Semicolon.java
new file mode 100644
index 0000000..7ddcda1
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/Semicolon.java
@@ -0,0 +1,6 @@
+class ClassName{
+  void f(){
+  };
+  void g(){
+  };
+}
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/Semicolon.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/class/Semicolon.txt
new file mode 100644
index 0000000..4d866b4
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/Semicolon.txt
@@ -0,0 +1,58 @@
+PsiJavaFile:Semicolon.java
+  PsiImportList
+    <empty list>
+  PsiClass:ClassName
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:ClassName('ClassName')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiMethod:f
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:f('f')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n  ')
+    PsiMethod:g
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:g('g')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/Semicolon2.java b/java/java-tests/testData/psi/parser-full/declarationParsing/class/Semicolon2.java
new file mode 100644
index 0000000..daa9909
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/Semicolon2.java
@@ -0,0 +1,2 @@
+class ClassName{
+};
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/class/Semicolon2.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/class/Semicolon2.txt
new file mode 100644
index 0000000..1eb4ed0
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/class/Semicolon2.txt
@@ -0,0 +1,19 @@
+PsiJavaFile:Semicolon2.java
+  PsiImportList
+    <empty list>
+  PsiClass:ClassName
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:ClassName('ClassName')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
+  PsiJavaToken:SEMICOLON(';')
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBefore1.java b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBefore1.java
new file mode 100644
index 0000000..bbb8e7d
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBefore1.java
@@ -0,0 +1,4 @@
+class A{
+  // comment
+  int field;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBefore1.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBefore1.txt
new file mode 100644
index 0000000..8489e5b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBefore1.txt
@@ -0,0 +1,29 @@
+PsiJavaFile:BindBefore1.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiField:field
+      PsiComment(END_OF_LINE_COMMENT)('// comment')
+      PsiWhiteSpace('\n  ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeElement:int
+        PsiKeyword:int('int')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:field('field')
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBefore2.java b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBefore2.java
new file mode 100644
index 0000000..3a8a911
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBefore2.java
@@ -0,0 +1,5 @@
+class A{
+  // comment
+
+  int field;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBefore2.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBefore2.txt
new file mode 100644
index 0000000..29224a6
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBefore2.txt
@@ -0,0 +1,29 @@
+PsiJavaFile:BindBefore2.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiComment(END_OF_LINE_COMMENT)('// comment')
+    PsiWhiteSpace('\n\n  ')
+    PsiField:field
+      PsiModifierList:
+        <empty list>
+      PsiTypeElement:int
+        PsiKeyword:int('int')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:field('field')
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBefore3.java b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBefore3.java
new file mode 100644
index 0000000..1104bbc
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBefore3.java
@@ -0,0 +1,3 @@
+class A{ // comment
+  int field;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBefore3.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBefore3.txt
new file mode 100644
index 0000000..9388af7
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBefore3.txt
@@ -0,0 +1,29 @@
+PsiJavaFile:BindBefore3.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace(' ')
+    PsiComment(END_OF_LINE_COMMENT)('// comment')
+    PsiWhiteSpace('\n  ')
+    PsiField:field
+      PsiModifierList:
+        <empty list>
+      PsiTypeElement:int
+        PsiKeyword:int('int')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:field('field')
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBefore3a.java b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBefore3a.java
new file mode 100644
index 0000000..7ba1706
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBefore3a.java
@@ -0,0 +1,3 @@
+class A{// comment
+  int field;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBefore3a.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBefore3a.txt
new file mode 100644
index 0000000..85262bb
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBefore3a.txt
@@ -0,0 +1,28 @@
+PsiJavaFile:BindBefore3a.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiComment(END_OF_LINE_COMMENT)('// comment')
+    PsiWhiteSpace('\n  ')
+    PsiField:field
+      PsiModifierList:
+        <empty list>
+      PsiTypeElement:int
+        PsiKeyword:int('int')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:field('field')
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBefore4.java b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBefore4.java
new file mode 100644
index 0000000..82411d7
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBefore4.java
@@ -0,0 +1,6 @@
+class A{
+  // comment 1
+  // comment 2
+  // comment 3
+  int field;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBefore4.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBefore4.txt
new file mode 100644
index 0000000..117f263
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBefore4.txt
@@ -0,0 +1,33 @@
+PsiJavaFile:BindBefore4.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiField:field
+      PsiComment(END_OF_LINE_COMMENT)('// comment 1')
+      PsiWhiteSpace('\n  ')
+      PsiComment(END_OF_LINE_COMMENT)('// comment 2')
+      PsiWhiteSpace('\n  ')
+      PsiComment(END_OF_LINE_COMMENT)('// comment 3')
+      PsiWhiteSpace('\n  ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeElement:int
+        PsiKeyword:int('int')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:field('field')
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBefore5.java b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBefore5.java
new file mode 100644
index 0000000..210d956
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBefore5.java
@@ -0,0 +1,5 @@
+/** doc */
+class C {
+  // plain
+  int f;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBefore5.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBefore5.txt
new file mode 100644
index 0000000..6724776
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBefore5.txt
@@ -0,0 +1,36 @@
+PsiJavaFile:BindBefore5.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace(' ')
+      PsiDocToken:DOC_COMMENT_DATA('doc ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiField:f
+      PsiComment(END_OF_LINE_COMMENT)('// plain')
+      PsiWhiteSpace('\n  ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeElement:int
+        PsiKeyword:int('int')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:f('f')
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBeforeClass1.java b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBeforeClass1.java
new file mode 100644
index 0000000..6c10b29
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBeforeClass1.java
@@ -0,0 +1,4 @@
+package p;
+
+// comment
+class A { }
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBeforeClass1.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBeforeClass1.txt
new file mode 100644
index 0000000..313cbba
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBeforeClass1.txt
@@ -0,0 +1,30 @@
+PsiJavaFile:BindBeforeClass1.java
+  PsiPackageStatement:p
+    PsiKeyword:package('package')
+    PsiWhiteSpace(' ')
+    PsiJavaCodeReferenceElement:p
+      PsiIdentifier:p('p')
+      PsiReferenceParameterList
+        <empty list>
+    PsiJavaToken:SEMICOLON(';')
+  PsiWhiteSpace('\n\n')
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiComment(END_OF_LINE_COMMENT)('// comment')
+    PsiWhiteSpace('\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBeforeClass2.java b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBeforeClass2.java
new file mode 100644
index 0000000..3d742c9
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBeforeClass2.java
@@ -0,0 +1,2 @@
+// comment
+class A { }
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBeforeClass2.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBeforeClass2.txt
new file mode 100644
index 0000000..efaadd0
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBeforeClass2.txt
@@ -0,0 +1,21 @@
+PsiJavaFile:BindBeforeClass2.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiComment(END_OF_LINE_COMMENT)('// comment')
+    PsiWhiteSpace('\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBeforeClass3.java b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBeforeClass3.java
new file mode 100644
index 0000000..5dc50c6
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBeforeClass3.java
@@ -0,0 +1,3 @@
+// comment
+
+class A { }
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBeforeClass3.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBeforeClass3.txt
new file mode 100644
index 0000000..483844e
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBeforeClass3.txt
@@ -0,0 +1,21 @@
+PsiJavaFile:BindBeforeClass3.java
+  PsiComment(END_OF_LINE_COMMENT)('// comment')
+  PsiWhiteSpace('\n\n')
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBeforeClass4.java b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBeforeClass4.java
new file mode 100644
index 0000000..1b05c90
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBeforeClass4.java
@@ -0,0 +1,2 @@
+package p;// comment
+class A { }
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBeforeClass4.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBeforeClass4.txt
new file mode 100644
index 0000000..212dd6a
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBeforeClass4.txt
@@ -0,0 +1,29 @@
+PsiJavaFile:BindBeforeClass4.java
+  PsiPackageStatement:p
+    PsiKeyword:package('package')
+    PsiWhiteSpace(' ')
+    PsiJavaCodeReferenceElement:p
+      PsiIdentifier:p('p')
+      PsiReferenceParameterList
+        <empty list>
+    PsiJavaToken:SEMICOLON(';')
+    PsiComment(END_OF_LINE_COMMENT)('// comment')
+  PsiWhiteSpace('\n')
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBeforeClass5.java b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBeforeClass5.java
new file mode 100644
index 0000000..36bf7bb
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBeforeClass5.java
@@ -0,0 +1,3 @@
+// comment 1
+// comment 2
+class A { }
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBeforeClass5.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBeforeClass5.txt
new file mode 100644
index 0000000..a18710f
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBeforeClass5.txt
@@ -0,0 +1,23 @@
+PsiJavaFile:BindBeforeClass5.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiComment(END_OF_LINE_COMMENT)('// comment 1')
+    PsiWhiteSpace('\n')
+    PsiComment(END_OF_LINE_COMMENT)('// comment 2')
+    PsiWhiteSpace('\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBeforeClass6.java b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBeforeClass6.java
new file mode 100644
index 0000000..bffac86
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBeforeClass6.java
@@ -0,0 +1 @@
+/* comment */class A { }
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBeforeClass6.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBeforeClass6.txt
new file mode 100644
index 0000000..0325000
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/commentBinding/BindBeforeClass6.txt
@@ -0,0 +1,20 @@
+PsiJavaFile:BindBeforeClass6.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiComment(C_STYLE_COMMENT)('/* comment */')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/field/ComplexInitializer.java b/java/java-tests/testData/psi/parser-full/declarationParsing/field/ComplexInitializer.java
new file mode 100644
index 0000000..a95028a
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/field/ComplexInitializer.java
@@ -0,0 +1,3 @@
+public class SystemInfo {
+  public static final boolean isKDE = SUN_DESKTOP != null && SUN_DESKTOP.toLowerCase().indexOf("kde") >= 0;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/field/ComplexInitializer.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/field/ComplexInitializer.txt
new file mode 100644
index 0000000..533de56
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/field/ComplexInitializer.txt
@@ -0,0 +1,81 @@
+PsiJavaFile:ComplexInitializer.java
+  PsiImportList
+    <empty list>
+  PsiClass:SystemInfo
+    PsiModifierList:public
+      PsiKeyword:public('public')
+    PsiWhiteSpace(' ')
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:SystemInfo('SystemInfo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiField:isKDE
+      PsiModifierList:public static final
+        PsiKeyword:public('public')
+        PsiWhiteSpace(' ')
+        PsiKeyword:static('static')
+        PsiWhiteSpace(' ')
+        PsiKeyword:final('final')
+      PsiWhiteSpace(' ')
+      PsiTypeElement:boolean
+        PsiKeyword:boolean('boolean')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:isKDE('isKDE')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:EQ('=')
+      PsiWhiteSpace(' ')
+      PsiBinaryExpression:SUN_DESKTOP != null && SUN_DESKTOP.toLowerCase().indexOf("kde") >= 0
+        PsiBinaryExpression:SUN_DESKTOP != null
+          PsiReferenceExpression:SUN_DESKTOP
+            PsiReferenceParameterList
+              <empty list>
+            PsiIdentifier:SUN_DESKTOP('SUN_DESKTOP')
+          PsiWhiteSpace(' ')
+          PsiJavaToken:NE('!=')
+          PsiWhiteSpace(' ')
+          PsiLiteralExpression:null
+            PsiJavaToken:NULL_KEYWORD('null')
+        PsiWhiteSpace(' ')
+        PsiJavaToken:ANDAND('&&')
+        PsiWhiteSpace(' ')
+        PsiBinaryExpression:SUN_DESKTOP.toLowerCase().indexOf("kde") >= 0
+          PsiMethodCallExpression:SUN_DESKTOP.toLowerCase().indexOf("kde")
+            PsiReferenceExpression:SUN_DESKTOP.toLowerCase().indexOf
+              PsiMethodCallExpression:SUN_DESKTOP.toLowerCase()
+                PsiReferenceExpression:SUN_DESKTOP.toLowerCase
+                  PsiReferenceExpression:SUN_DESKTOP
+                    PsiReferenceParameterList
+                      <empty list>
+                    PsiIdentifier:SUN_DESKTOP('SUN_DESKTOP')
+                  PsiJavaToken:DOT('.')
+                  PsiReferenceParameterList
+                    <empty list>
+                  PsiIdentifier:toLowerCase('toLowerCase')
+                PsiExpressionList
+                  PsiJavaToken:LPARENTH('(')
+                  PsiJavaToken:RPARENTH(')')
+              PsiJavaToken:DOT('.')
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:indexOf('indexOf')
+            PsiExpressionList
+              PsiJavaToken:LPARENTH('(')
+              PsiLiteralExpression:"kde"
+                PsiJavaToken:STRING_LITERAL('"kde"')
+              PsiJavaToken:RPARENTH(')')
+          PsiWhiteSpace(' ')
+          PsiJavaToken:GE('>=')
+          PsiWhiteSpace(' ')
+          PsiLiteralExpression:0
+            PsiJavaToken:INTEGER_LITERAL('0')
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/field/Errors.java b/java/java-tests/testData/psi/parser-full/declarationParsing/field/Errors.java
new file mode 100644
index 0000000..533b0de
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/field/Errors.java
@@ -0,0 +1,3 @@
+class Test {
+  int[0];
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/field/Errors.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/field/Errors.txt
new file mode 100644
index 0000000..4424416
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/field/Errors.txt
@@ -0,0 +1,31 @@
+PsiJavaFile:Errors.java
+  PsiImportList
+    <empty list>
+  PsiClass:Test
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Test('Test')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiModifierList:
+      <empty list>
+    PsiTypeElement:int
+      PsiKeyword:int('int')
+    PsiErrorElement:Identifier expected
+      <empty list>
+    PsiErrorElement:Unexpected token
+      PsiJavaToken:LBRACKET('[')
+      PsiJavaToken:INTEGER_LITERAL('0')
+      PsiJavaToken:RBRACKET(']')
+    PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/field/MissingInitializer.java b/java/java-tests/testData/psi/parser-full/declarationParsing/field/MissingInitializer.java
new file mode 100644
index 0000000..8a226bb53
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/field/MissingInitializer.java
@@ -0,0 +1,3 @@
+class Test{
+  int field =
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/field/MissingInitializer.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/field/MissingInitializer.txt
new file mode 100644
index 0000000..47026ed
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/field/MissingInitializer.txt
@@ -0,0 +1,30 @@
+PsiJavaFile:MissingInitializer.java
+  PsiImportList
+    <empty list>
+  PsiClass:Test
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Test('Test')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiField:field
+      PsiModifierList:
+        <empty list>
+      PsiTypeElement:int
+        PsiKeyword:int('int')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:field('field')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:EQ('=')
+      PsiErrorElement:Expression expected
+        <empty list>
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/field/MissingInitializerExpression.java b/java/java-tests/testData/psi/parser-full/declarationParsing/field/MissingInitializerExpression.java
new file mode 100644
index 0000000..35ce132
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/field/MissingInitializerExpression.java
@@ -0,0 +1,3 @@
+class Test{
+  int field=;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/field/MissingInitializerExpression.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/field/MissingInitializerExpression.txt
new file mode 100644
index 0000000..26b3971
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/field/MissingInitializerExpression.txt
@@ -0,0 +1,30 @@
+PsiJavaFile:MissingInitializerExpression.java
+  PsiImportList
+    <empty list>
+  PsiClass:Test
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Test('Test')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiField:field
+      PsiModifierList:
+        <empty list>
+      PsiTypeElement:int
+        PsiKeyword:int('int')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:field('field')
+      PsiJavaToken:EQ('=')
+      PsiErrorElement:Expression expected
+        <empty list>
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/field/Multi.java b/java/java-tests/testData/psi/parser-full/declarationParsing/field/Multi.java
new file mode 100644
index 0000000..41cf2b8
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/field/Multi.java
@@ -0,0 +1,3 @@
+class Test{
+  int field1 = 0, field2;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/field/Multi.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/field/Multi.txt
new file mode 100644
index 0000000..bc5f73b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/field/Multi.txt
@@ -0,0 +1,36 @@
+PsiJavaFile:Multi.java
+  PsiImportList
+    <empty list>
+  PsiClass:Test
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Test('Test')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiField:field1
+      PsiModifierList:
+        <empty list>
+      PsiTypeElement:int
+        PsiKeyword:int('int')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:field1('field1')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:EQ('=')
+      PsiWhiteSpace(' ')
+      PsiLiteralExpression:0
+        PsiJavaToken:INTEGER_LITERAL('0')
+    PsiJavaToken:COMMA(',')
+    PsiWhiteSpace(' ')
+    PsiField:field2
+      PsiIdentifier:field2('field2')
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/field/MultiLineUnclosed0.java b/java/java-tests/testData/psi/parser-full/declarationParsing/field/MultiLineUnclosed0.java
new file mode 100644
index 0000000..527b50f
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/field/MultiLineUnclosed0.java
@@ -0,0 +1,4 @@
+class Test{
+  int 
+  Object method(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/field/MultiLineUnclosed0.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/field/MultiLineUnclosed0.txt
new file mode 100644
index 0000000..d9a1128
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/field/MultiLineUnclosed0.txt
@@ -0,0 +1,46 @@
+PsiJavaFile:MultiLineUnclosed0.java
+  PsiImportList
+    <empty list>
+  PsiClass:Test
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Test('Test')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiModifierList:
+      <empty list>
+    PsiTypeElement:int
+      PsiKeyword:int('int')
+    PsiErrorElement:Identifier expected
+      <empty list>
+    PsiWhiteSpace(' \n  ')
+    PsiMethod:method
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:Object
+        PsiJavaCodeReferenceElement:Object
+          PsiIdentifier:Object('Object')
+          PsiReferenceParameterList
+            <empty list>
+      PsiWhiteSpace(' ')
+      PsiIdentifier:method('method')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/field/MultiLineUnclosed1.java b/java/java-tests/testData/psi/parser-full/declarationParsing/field/MultiLineUnclosed1.java
new file mode 100644
index 0000000..4841f75
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/field/MultiLineUnclosed1.java
@@ -0,0 +1,4 @@
+class C {
+  String uiTest1 = new String("Test1"),
+         uiTest2<caret> = new String("Test2");
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/field/MultiLineUnclosed1.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/field/MultiLineUnclosed1.txt
new file mode 100644
index 0000000..ffe4704
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/field/MultiLineUnclosed1.txt
@@ -0,0 +1,86 @@
+PsiJavaFile:MultiLineUnclosed1.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiField:uiTest1
+      PsiModifierList:
+        <empty list>
+      PsiTypeElement:String
+        PsiJavaCodeReferenceElement:String
+          PsiIdentifier:String('String')
+          PsiReferenceParameterList
+            <empty list>
+      PsiWhiteSpace(' ')
+      PsiIdentifier:uiTest1('uiTest1')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:EQ('=')
+      PsiWhiteSpace(' ')
+      PsiNewExpression:new String("Test1")
+        PsiKeyword:new('new')
+        PsiReferenceParameterList
+          <empty list>
+        PsiWhiteSpace(' ')
+        PsiJavaCodeReferenceElement:String
+          PsiIdentifier:String('String')
+          PsiReferenceParameterList
+            <empty list>
+        PsiExpressionList
+          PsiJavaToken:LPARENTH('(')
+          PsiLiteralExpression:"Test1"
+            PsiJavaToken:STRING_LITERAL('"Test1"')
+          PsiJavaToken:RPARENTH(')')
+    PsiJavaToken:COMMA(',')
+    PsiErrorElement:Identifier expected
+      <empty list>
+    PsiWhiteSpace('\n         ')
+    PsiModifierList:
+      <empty list>
+    PsiTypeElement:uiTest2<caret>
+      PsiJavaCodeReferenceElement:uiTest2<caret>
+        PsiIdentifier:uiTest2('uiTest2')
+        PsiReferenceParameterList
+          PsiJavaToken:LT('<')
+          PsiTypeElement:caret
+            PsiJavaCodeReferenceElement:caret
+              PsiIdentifier:caret('caret')
+              PsiReferenceParameterList
+                <empty list>
+          PsiJavaToken:GT('>')
+    PsiErrorElement:Identifier expected
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiErrorElement:Unexpected token
+      PsiJavaToken:EQ('=')
+      PsiWhiteSpace(' ')
+      PsiKeyword:new('new')
+    PsiWhiteSpace(' ')
+    PsiMethod:String
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiIdentifier:String('String')
+      PsiParameterList:("Test2")
+        PsiJavaToken:LPARENTH('(')
+        PsiErrorElement:Parameter expected
+          PsiJavaToken:STRING_LITERAL('"Test2"')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/field/Simple.java b/java/java-tests/testData/psi/parser-full/declarationParsing/field/Simple.java
new file mode 100644
index 0000000..a1683a2
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/field/Simple.java
@@ -0,0 +1,3 @@
+class Test{
+  int field = 0;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/field/Simple.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/field/Simple.txt
new file mode 100644
index 0000000..be12806
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/field/Simple.txt
@@ -0,0 +1,32 @@
+PsiJavaFile:Simple.java
+  PsiImportList
+    <empty list>
+  PsiClass:Test
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Test('Test')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiField:field
+      PsiModifierList:
+        <empty list>
+      PsiTypeElement:int
+        PsiKeyword:int('int')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:field('field')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:EQ('=')
+      PsiWhiteSpace(' ')
+      PsiLiteralExpression:0
+        PsiJavaToken:INTEGER_LITERAL('0')
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/field/UnclosedBracket.java b/java/java-tests/testData/psi/parser-full/declarationParsing/field/UnclosedBracket.java
new file mode 100644
index 0000000..4795eb5
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/field/UnclosedBracket.java
@@ -0,0 +1,3 @@
+class Test{
+  int field[
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/field/UnclosedBracket.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/field/UnclosedBracket.txt
new file mode 100644
index 0000000..cea374cf
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/field/UnclosedBracket.txt
@@ -0,0 +1,29 @@
+PsiJavaFile:UnclosedBracket.java
+  PsiImportList
+    <empty list>
+  PsiClass:Test
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Test('Test')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiField:field
+      PsiModifierList:
+        <empty list>
+      PsiTypeElement:int
+        PsiKeyword:int('int')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:field('field')
+      PsiJavaToken:LBRACKET('[')
+      PsiErrorElement:']' expected
+        <empty list>
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/field/UnclosedComma.java b/java/java-tests/testData/psi/parser-full/declarationParsing/field/UnclosedComma.java
new file mode 100644
index 0000000..98a15f2
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/field/UnclosedComma.java
@@ -0,0 +1,3 @@
+class Test{
+  int field,
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/field/UnclosedComma.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/field/UnclosedComma.txt
new file mode 100644
index 0000000..46f52d8
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/field/UnclosedComma.txt
@@ -0,0 +1,29 @@
+PsiJavaFile:UnclosedComma.java
+  PsiImportList
+    <empty list>
+  PsiClass:Test
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Test('Test')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiField:field
+      PsiModifierList:
+        <empty list>
+      PsiTypeElement:int
+        PsiKeyword:int('int')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:field('field')
+    PsiJavaToken:COMMA(',')
+    PsiErrorElement:Identifier expected
+      <empty list>
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/field/UnclosedSemicolon.java b/java/java-tests/testData/psi/parser-full/declarationParsing/field/UnclosedSemicolon.java
new file mode 100644
index 0000000..a645321
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/field/UnclosedSemicolon.java
@@ -0,0 +1,3 @@
+class Test{
+  int field
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/field/UnclosedSemicolon.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/field/UnclosedSemicolon.txt
new file mode 100644
index 0000000..0b16048
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/field/UnclosedSemicolon.txt
@@ -0,0 +1,28 @@
+PsiJavaFile:UnclosedSemicolon.java
+  PsiImportList
+    <empty list>
+  PsiClass:Test
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Test('Test')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiField:field
+      PsiModifierList:
+        <empty list>
+      PsiTypeElement:int
+        PsiKeyword:int('int')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:field('field')
+      PsiErrorElement:';' expected
+        <empty list>
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/method/CompletionHack.java b/java/java-tests/testData/psi/parser-full/declarationParsing/method/CompletionHack.java
new file mode 100644
index 0000000..8960e38
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/method/CompletionHack.java
@@ -0,0 +1,4 @@
+class A {
+  <X IntelliJIdeaRulezz>
+  String s = "";
+}
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/method/CompletionHack.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/method/CompletionHack.txt
new file mode 100644
index 0000000..ce601f3
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/method/CompletionHack.txt
@@ -0,0 +1,48 @@
+PsiJavaFile:CompletionHack.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiField:s
+      PsiModifierList:
+        <empty list>
+      PsiErrorElement:Unexpected token
+        PsiTypeParameterList
+          PsiJavaToken:LT('<')
+          PsiTypeParameter:X
+            PsiIdentifier:X('X')
+            PsiElement(EXTENDS_BOUND_LIST)
+              <empty list>
+          PsiWhiteSpace(' ')
+          PsiErrorElement:Unexpected identifier
+            PsiIdentifier:IntelliJIdeaRulezz('IntelliJIdeaRulezz')
+          PsiJavaToken:GT('>')
+      PsiWhiteSpace('\n  ')
+      PsiTypeElement:String
+        PsiJavaCodeReferenceElement:String
+          PsiIdentifier:String('String')
+          PsiReferenceParameterList
+            <empty list>
+      PsiWhiteSpace(' ')
+      PsiIdentifier:s('s')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:EQ('=')
+      PsiWhiteSpace(' ')
+      PsiLiteralExpression:""
+        PsiJavaToken:STRING_LITERAL('""')
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/method/CompletionHack1.java b/java/java-tests/testData/psi/parser-full/declarationParsing/method/CompletionHack1.java
new file mode 100644
index 0000000..fcdd51a
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/method/CompletionHack1.java
@@ -0,0 +1,4 @@
+class A {
+  <X
+  String s = "";
+}
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/method/CompletionHack1.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/method/CompletionHack1.txt
new file mode 100644
index 0000000..ae22ee1
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/method/CompletionHack1.txt
@@ -0,0 +1,46 @@
+PsiJavaFile:CompletionHack1.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiField:s
+      PsiModifierList:
+        <empty list>
+      PsiErrorElement:Unexpected token
+        PsiTypeParameterList
+          PsiJavaToken:LT('<')
+          PsiTypeParameter:X
+            PsiIdentifier:X('X')
+            PsiElement(EXTENDS_BOUND_LIST)
+              <empty list>
+          PsiErrorElement:'>' expected.
+            <empty list>
+      PsiWhiteSpace('\n  ')
+      PsiTypeElement:String
+        PsiJavaCodeReferenceElement:String
+          PsiIdentifier:String('String')
+          PsiReferenceParameterList
+            <empty list>
+      PsiWhiteSpace(' ')
+      PsiIdentifier:s('s')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:EQ('=')
+      PsiWhiteSpace(' ')
+      PsiLiteralExpression:""
+        PsiJavaToken:STRING_LITERAL('""')
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/method/Errors0.java b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Errors0.java
new file mode 100644
index 0000000..402a353
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Errors0.java
@@ -0,0 +1,9 @@
+// illegal modifier combinations
+
+abstract public class a {
+  public static <error descr="2">protected int f1 = 0; 
+}
+
+class ff {
+ 
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/method/Errors0.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Errors0.txt
new file mode 100644
index 0000000..a18a705
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Errors0.txt
@@ -0,0 +1,82 @@
+PsiJavaFile:Errors0.java
+  PsiComment(END_OF_LINE_COMMENT)('// illegal modifier combinations')
+  PsiWhiteSpace('\n\n')
+  PsiImportList
+    <empty list>
+  PsiClass:a
+    PsiModifierList:abstract public
+      PsiKeyword:abstract('abstract')
+      PsiWhiteSpace(' ')
+      PsiKeyword:public('public')
+    PsiWhiteSpace(' ')
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:a('a')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiModifierList:public static
+      PsiKeyword:public('public')
+      PsiWhiteSpace(' ')
+      PsiKeyword:static('static')
+    PsiWhiteSpace(' ')
+    PsiErrorElement:Unexpected token
+      PsiTypeParameterList
+        PsiJavaToken:LT('<')
+        PsiTypeParameter:error
+          PsiIdentifier:error('error')
+          PsiElement(EXTENDS_BOUND_LIST)
+            <empty list>
+        PsiErrorElement:'>' expected.
+          <empty list>
+    PsiWhiteSpace(' ')
+    PsiTypeElement:descr
+      PsiJavaCodeReferenceElement:descr
+        PsiIdentifier:descr('descr')
+        PsiReferenceParameterList
+          <empty list>
+    PsiErrorElement:Identifier expected
+      <empty list>
+    PsiErrorElement:Unexpected token
+      PsiJavaToken:EQ('=')
+      PsiJavaToken:STRING_LITERAL('"2"')
+      PsiJavaToken:GT('>')
+    PsiField:f1
+      PsiModifierList:protected
+        PsiKeyword:protected('protected')
+      PsiWhiteSpace(' ')
+      PsiTypeElement:int
+        PsiKeyword:int('int')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:f1('f1')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:EQ('=')
+      PsiWhiteSpace(' ')
+      PsiLiteralExpression:0
+        PsiJavaToken:INTEGER_LITERAL('0')
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace(' \n')
+    PsiJavaToken:RBRACE('}')
+  PsiWhiteSpace('\n\n')
+  PsiClass:ff
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:ff('ff')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n \n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/method/Errors1.java b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Errors1.java
new file mode 100644
index 0000000..aecf184
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Errors1.java
@@ -0,0 +1,6 @@
+
+<error descr="Modifier 'private' not allowed here">private</error> 
+<error descr="Modifier 'static' not allowed here">static</error>
+<error descr="Modifier 'volatile' not allowed here">volatile</error>
+class a {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/method/Errors1.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Errors1.txt
new file mode 100644
index 0000000..8075a98
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Errors1.txt
@@ -0,0 +1,118 @@
+PsiJavaFile:Errors1.java
+  PsiImportList
+    <empty list>
+  PsiModifierList:
+    <empty list>
+  PsiErrorElement:'class' or 'interface' expected
+    <empty list>
+  PsiTypeParameterList
+    PsiJavaToken:LT('<')
+    PsiTypeParameter:error
+      PsiIdentifier:error('error')
+      PsiElement(EXTENDS_BOUND_LIST)
+        <empty list>
+    PsiErrorElement:'>' expected.
+      <empty list>
+  PsiWhiteSpace(' ')
+  PsiErrorElement:'class' or 'interface' expected
+    PsiIdentifier:descr('descr')
+    PsiJavaToken:EQ('=')
+    PsiJavaToken:STRING_LITERAL('"Modifier 'private' not allowed here"')
+    PsiJavaToken:GT('>')
+  PsiModifierList:private
+    PsiKeyword:private('private')
+  PsiErrorElement:'class' or 'interface' expected
+    <empty list>
+  PsiTypeParameterList
+    PsiJavaToken:LT('<')
+    PsiErrorElement:Type parameter expected
+      <empty list>
+    PsiErrorElement:'>' expected.
+      <empty list>
+  PsiErrorElement:'class' or 'interface' expected
+    PsiJavaToken:DIV('/')
+    PsiIdentifier:error('error')
+    PsiJavaToken:GT('>')
+  PsiWhiteSpace(' \n')
+  PsiModifierList:
+    <empty list>
+  PsiErrorElement:'class' or 'interface' expected
+    <empty list>
+  PsiTypeParameterList
+    PsiJavaToken:LT('<')
+    PsiTypeParameter:error
+      PsiIdentifier:error('error')
+      PsiElement(EXTENDS_BOUND_LIST)
+        <empty list>
+    PsiErrorElement:'>' expected.
+      <empty list>
+  PsiWhiteSpace(' ')
+  PsiErrorElement:'class' or 'interface' expected
+    PsiIdentifier:descr('descr')
+    PsiJavaToken:EQ('=')
+    PsiJavaToken:STRING_LITERAL('"Modifier 'static' not allowed here"')
+    PsiJavaToken:GT('>')
+  PsiModifierList:static
+    PsiKeyword:static('static')
+  PsiErrorElement:'class' or 'interface' expected
+    <empty list>
+  PsiTypeParameterList
+    PsiJavaToken:LT('<')
+    PsiErrorElement:Type parameter expected
+      <empty list>
+    PsiErrorElement:'>' expected.
+      <empty list>
+  PsiErrorElement:'class' or 'interface' expected
+    PsiJavaToken:DIV('/')
+    PsiIdentifier:error('error')
+    PsiJavaToken:GT('>')
+  PsiWhiteSpace('\n')
+  PsiModifierList:
+    <empty list>
+  PsiErrorElement:'class' or 'interface' expected
+    <empty list>
+  PsiTypeParameterList
+    PsiJavaToken:LT('<')
+    PsiTypeParameter:error
+      PsiIdentifier:error('error')
+      PsiElement(EXTENDS_BOUND_LIST)
+        <empty list>
+    PsiErrorElement:'>' expected.
+      <empty list>
+  PsiWhiteSpace(' ')
+  PsiErrorElement:'class' or 'interface' expected
+    PsiIdentifier:descr('descr')
+    PsiJavaToken:EQ('=')
+    PsiJavaToken:STRING_LITERAL('"Modifier 'volatile' not allowed here"')
+    PsiJavaToken:GT('>')
+  PsiModifierList:volatile
+    PsiKeyword:volatile('volatile')
+  PsiErrorElement:'class' or 'interface' expected
+    <empty list>
+  PsiTypeParameterList
+    PsiJavaToken:LT('<')
+    PsiErrorElement:Type parameter expected
+      <empty list>
+    PsiErrorElement:'>' expected.
+      <empty list>
+  PsiErrorElement:'class' or 'interface' expected
+    PsiJavaToken:DIV('/')
+    PsiIdentifier:error('error')
+    PsiJavaToken:GT('>')
+  PsiWhiteSpace('\n')
+  PsiClass:a
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:a('a')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/method/Errors2.java b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Errors2.java
new file mode 100644
index 0000000..05d4ce6
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Errors2.java
@@ -0,0 +1,5 @@
+public class Testt {
+  @<caret>Configuration(afterTestClass=true)
+  public void after1() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/method/Errors2.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Errors2.txt
new file mode 100644
index 0000000..fdd9015
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Errors2.txt
@@ -0,0 +1,77 @@
+PsiJavaFile:Errors2.java
+  PsiImportList
+    <empty list>
+  PsiClass:Testt
+    PsiModifierList:public
+      PsiKeyword:public('public')
+    PsiWhiteSpace(' ')
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Testt('Testt')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiMethod:Configuration
+      PsiModifierList:@
+        PsiAnnotation
+          PsiJavaToken:AT('@')
+          PsiErrorElement:Class reference expected
+            <empty list>
+          PsiAnnotationParameterList
+            <empty list>
+      PsiTypeParameterList
+        PsiJavaToken:LT('<')
+        PsiTypeParameter:caret
+          PsiIdentifier:caret('caret')
+          PsiElement(EXTENDS_BOUND_LIST)
+            <empty list>
+        PsiJavaToken:GT('>')
+      PsiIdentifier:Configuration('Configuration')
+      PsiParameterList:(afterTestClass=true)
+        PsiJavaToken:LPARENTH('(')
+        PsiModifierList:
+          <empty list>
+        PsiTypeElement:afterTestClass
+          PsiJavaCodeReferenceElement:afterTestClass
+            PsiIdentifier:afterTestClass('afterTestClass')
+            PsiReferenceParameterList
+              <empty list>
+        PsiErrorElement:Identifier expected
+          <empty list>
+        PsiErrorElement:',' expected
+          PsiJavaToken:EQ('=')
+          PsiJavaToken:TRUE_KEYWORD('true')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiErrorElement:'{' or ';' expected
+        <empty list>
+    PsiWhiteSpace('\n  ')
+    PsiMethod:after1
+      PsiModifierList:public
+        PsiKeyword:public('public')
+      PsiTypeParameterList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:after1('after1')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/method/Errors3.java b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Errors3.java
new file mode 100644
index 0000000..c8eadab
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Errors3.java
@@ -0,0 +1,3 @@
+public class Test {
+   void foo(<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/method/Errors3.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Errors3.txt
new file mode 100644
index 0000000..0a0e269
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Errors3.txt
@@ -0,0 +1,51 @@
+PsiJavaFile:Errors3.java
+  PsiImportList
+    <empty list>
+  PsiClass:Test
+    PsiModifierList:public
+      PsiKeyword:public('public')
+    PsiWhiteSpace(' ')
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Test('Test')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n   ')
+    PsiMethod:foo
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:(<caret>
+        PsiJavaToken:LPARENTH('(')
+        PsiErrorElement:Parameter expected
+          PsiJavaToken:LT('<')
+        PsiModifierList:
+          <empty list>
+        PsiTypeElement:caret
+          PsiJavaCodeReferenceElement:caret
+            PsiIdentifier:caret('caret')
+            PsiReferenceParameterList
+              <empty list>
+        PsiErrorElement:Identifier expected
+          <empty list>
+        PsiErrorElement:',' expected
+          PsiJavaToken:GT('>')
+        PsiErrorElement:')' expected
+          <empty list>
+      PsiReferenceList
+        <empty list>
+      PsiErrorElement:'{' or ';' expected
+        <empty list>
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/method/GenericMethod.java b/java/java-tests/testData/psi/parser-full/declarationParsing/method/GenericMethod.java
new file mode 100644
index 0000000..0e3aa9a
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/method/GenericMethod.java
@@ -0,0 +1,8 @@
+public class Test {
+    public static <E> test() {
+    }
+    <E> void test1() {
+    }
+    <E1 extends Integer, E2 extends Runnable> String test2() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/method/GenericMethod.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/method/GenericMethod.txt
new file mode 100644
index 0000000..4fc4d73
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/method/GenericMethod.txt
@@ -0,0 +1,119 @@
+PsiJavaFile:GenericMethod.java
+  PsiImportList
+    <empty list>
+  PsiClass:Test
+    PsiModifierList:public
+      PsiKeyword:public('public')
+    PsiWhiteSpace(' ')
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Test('Test')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n    ')
+    PsiMethod:test
+      PsiModifierList:public static
+        PsiKeyword:public('public')
+        PsiWhiteSpace(' ')
+        PsiKeyword:static('static')
+      PsiWhiteSpace(' ')
+      PsiTypeParameterList
+        PsiJavaToken:LT('<')
+        PsiTypeParameter:E
+          PsiIdentifier:E('E')
+          PsiElement(EXTENDS_BOUND_LIST)
+            <empty list>
+        PsiJavaToken:GT('>')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:test('test')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n    ')
+    PsiMethod:test1
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        PsiJavaToken:LT('<')
+        PsiTypeParameter:E
+          PsiIdentifier:E('E')
+          PsiElement(EXTENDS_BOUND_LIST)
+            <empty list>
+        PsiJavaToken:GT('>')
+      PsiWhiteSpace(' ')
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:test1('test1')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n    ')
+    PsiMethod:test2
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        PsiJavaToken:LT('<')
+        PsiTypeParameter:E1
+          PsiIdentifier:E1('E1')
+          PsiWhiteSpace(' ')
+          PsiElement(EXTENDS_BOUND_LIST)
+            PsiKeyword:extends('extends')
+            PsiWhiteSpace(' ')
+            PsiJavaCodeReferenceElement:Integer
+              PsiIdentifier:Integer('Integer')
+              PsiReferenceParameterList
+                <empty list>
+        PsiJavaToken:COMMA(',')
+        PsiWhiteSpace(' ')
+        PsiTypeParameter:E2
+          PsiIdentifier:E2('E2')
+          PsiWhiteSpace(' ')
+          PsiElement(EXTENDS_BOUND_LIST)
+            PsiKeyword:extends('extends')
+            PsiWhiteSpace(' ')
+            PsiJavaCodeReferenceElement:Runnable
+              PsiIdentifier:Runnable('Runnable')
+              PsiReferenceParameterList
+                <empty list>
+        PsiJavaToken:GT('>')
+      PsiWhiteSpace(' ')
+      PsiTypeElement:String
+        PsiJavaCodeReferenceElement:String
+          PsiIdentifier:String('String')
+          PsiReferenceParameterList
+            <empty list>
+      PsiWhiteSpace(' ')
+      PsiIdentifier:test2('test2')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/method/GenericMethodErrors.java b/java/java-tests/testData/psi/parser-full/declarationParsing/method/GenericMethodErrors.java
new file mode 100644
index 0000000..9f89af6
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/method/GenericMethodErrors.java
@@ -0,0 +1,4 @@
+public class Test {
+    <Error sss /> test <error>() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/method/GenericMethodErrors.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/method/GenericMethodErrors.txt
new file mode 100644
index 0000000..b803ec7
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/method/GenericMethodErrors.txt
@@ -0,0 +1,66 @@
+PsiJavaFile:GenericMethodErrors.java
+  PsiImportList
+    <empty list>
+  PsiClass:Test
+    PsiModifierList:public
+      PsiKeyword:public('public')
+    PsiWhiteSpace(' ')
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Test('Test')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n    ')
+    PsiModifierList:
+      <empty list>
+    PsiErrorElement:Unexpected token
+      PsiTypeParameterList
+        PsiJavaToken:LT('<')
+        PsiTypeParameter:Error
+          PsiIdentifier:Error('Error')
+          PsiElement(EXTENDS_BOUND_LIST)
+            <empty list>
+        PsiErrorElement:'>' expected.
+          <empty list>
+    PsiWhiteSpace(' ')
+    PsiTypeElement:sss
+      PsiJavaCodeReferenceElement:sss
+        PsiIdentifier:sss('sss')
+        PsiReferenceParameterList
+          <empty list>
+    PsiErrorElement:Identifier expected
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiErrorElement:Unexpected token
+      PsiJavaToken:DIV('/')
+      PsiJavaToken:GT('>')
+      PsiWhiteSpace(' ')
+      PsiJavaCodeReferenceElement:test <error>
+        PsiIdentifier:test('test')
+        PsiWhiteSpace(' ')
+        PsiReferenceParameterList
+          PsiJavaToken:LT('<')
+          PsiTypeElement:error
+            PsiJavaCodeReferenceElement:error
+              PsiIdentifier:error('error')
+              PsiReferenceParameterList
+                <empty list>
+          PsiJavaToken:GT('>')
+      PsiJavaToken:LPARENTH('(')
+      PsiJavaToken:RPARENTH(')')
+    PsiWhiteSpace(' ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/method/NoLocalMethod.java b/java/java-tests/testData/psi/parser-full/declarationParsing/method/NoLocalMethod.java
new file mode 100644
index 0000000..6043992
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/method/NoLocalMethod.java
@@ -0,0 +1,6 @@
+class A{
+  {
+    a.b
+    foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/method/NoLocalMethod.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/method/NoLocalMethod.txt
new file mode 100644
index 0000000..f44b2b5
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/method/NoLocalMethod.txt
@@ -0,0 +1,50 @@
+PsiJavaFile:NoLocalMethod.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiReferenceExpression:a.b
+            PsiReferenceExpression:a
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:a('a')
+            PsiJavaToken:DOT('.')
+            PsiReferenceParameterList
+              <empty list>
+            PsiIdentifier:b('b')
+          PsiErrorElement:';' expected
+            <empty list>
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiMethodCallExpression:foo()
+            PsiReferenceExpression:foo
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:foo('foo')
+            PsiExpressionList
+              PsiJavaToken:LPARENTH('(')
+              PsiJavaToken:RPARENTH(')')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/method/Normal1.java b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Normal1.java
new file mode 100644
index 0000000..8e4ca07
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Normal1.java
@@ -0,0 +1,4 @@
+class A{
+  void f(){
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/method/Normal1.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Normal1.txt
new file mode 100644
index 0000000..85ea51f
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Normal1.txt
@@ -0,0 +1,37 @@
+PsiJavaFile:Normal1.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiMethod:f
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:f('f')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/method/Normal2.java b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Normal2.java
new file mode 100644
index 0000000..30bc29f
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Normal2.java
@@ -0,0 +1,3 @@
+class A{
+  void f();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/method/Normal2.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Normal2.txt
new file mode 100644
index 0000000..d86330a
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Normal2.txt
@@ -0,0 +1,34 @@
+PsiJavaFile:Normal2.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiMethod:f
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:f('f')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/method/Unclosed1.java b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Unclosed1.java
new file mode 100644
index 0000000..756f586
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Unclosed1.java
@@ -0,0 +1,3 @@
+class A{
+  void f()
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/method/Unclosed1.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Unclosed1.txt
new file mode 100644
index 0000000..bfa0d86
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Unclosed1.txt
@@ -0,0 +1,35 @@
+PsiJavaFile:Unclosed1.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiMethod:f
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:f('f')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiErrorElement:'{' or ';' expected
+        <empty list>
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/method/Unclosed2.java b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Unclosed2.java
new file mode 100644
index 0000000..4370fe4
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Unclosed2.java
@@ -0,0 +1,3 @@
+class A{
+  void f(
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/method/Unclosed2.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Unclosed2.txt
new file mode 100644
index 0000000..75fbaa4
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Unclosed2.txt
@@ -0,0 +1,36 @@
+PsiJavaFile:Unclosed2.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiMethod:f
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:f('f')
+      PsiParameterList:(
+        PsiJavaToken:LPARENTH('(')
+        PsiErrorElement:')' expected
+          <empty list>
+      PsiReferenceList
+        <empty list>
+      PsiErrorElement:'{' or ';' expected
+        <empty list>
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/method/Unclosed3.java b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Unclosed3.java
new file mode 100644
index 0000000..2c40a01
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Unclosed3.java
@@ -0,0 +1,4 @@
+class A{
+  void f()
+  void g();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/method/Unclosed3.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Unclosed3.txt
new file mode 100644
index 0000000..2d03381
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Unclosed3.txt
@@ -0,0 +1,51 @@
+PsiJavaFile:Unclosed3.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiMethod:f
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:f('f')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiErrorElement:'{' or ';' expected
+        <empty list>
+    PsiWhiteSpace('\n  ')
+    PsiMethod:g
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:g('g')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/method/Unclosed4.java b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Unclosed4.java
new file mode 100644
index 0000000..267a5cf
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Unclosed4.java
@@ -0,0 +1,3 @@
+class A{
+  void f(int a
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/method/Unclosed4.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Unclosed4.txt
new file mode 100644
index 0000000..c1146a58
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Unclosed4.txt
@@ -0,0 +1,43 @@
+PsiJavaFile:Unclosed4.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiMethod:f
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:f('f')
+      PsiParameterList:(int a
+        PsiJavaToken:LPARENTH('(')
+        PsiParameter:a
+          PsiModifierList:
+            <empty list>
+          PsiTypeElement:int
+            PsiKeyword:int('int')
+          PsiWhiteSpace(' ')
+          PsiIdentifier:a('a')
+        PsiErrorElement:')' expected
+          <empty list>
+      PsiReferenceList
+        <empty list>
+      PsiErrorElement:'{' or ';' expected
+        <empty list>
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/method/Unclosed5.java b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Unclosed5.java
new file mode 100644
index 0000000..0bff8d8
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Unclosed5.java
@@ -0,0 +1,3 @@
+class A{
+  void f(int a,,
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/method/Unclosed5.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Unclosed5.txt
new file mode 100644
index 0000000..a774468
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Unclosed5.txt
@@ -0,0 +1,47 @@
+PsiJavaFile:Unclosed5.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiMethod:f
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:f('f')
+      PsiParameterList:(int a,,
+        PsiJavaToken:LPARENTH('(')
+        PsiParameter:a
+          PsiModifierList:
+            <empty list>
+          PsiTypeElement:int
+            PsiKeyword:int('int')
+          PsiWhiteSpace(' ')
+          PsiIdentifier:a('a')
+        PsiJavaToken:COMMA(',')
+        PsiErrorElement:Parameter expected
+          <empty list>
+        PsiJavaToken:COMMA(',')
+        PsiErrorElement:Identifier or type expected
+          <empty list>
+      PsiReferenceList
+        <empty list>
+      PsiErrorElement:'{' or ';' expected
+        <empty list>
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/method/Unclosed6.java b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Unclosed6.java
new file mode 100644
index 0000000..6557214
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Unclosed6.java
@@ -0,0 +1,3 @@
+class A{
+  void f(int a,);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/method/Unclosed6.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Unclosed6.txt
new file mode 100644
index 0000000..a653bd7
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Unclosed6.txt
@@ -0,0 +1,44 @@
+PsiJavaFile:Unclosed6.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiMethod:f
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:f('f')
+      PsiParameterList:(int a,)
+        PsiJavaToken:LPARENTH('(')
+        PsiParameter:a
+          PsiModifierList:
+            <empty list>
+          PsiTypeElement:int
+            PsiKeyword:int('int')
+          PsiWhiteSpace(' ')
+          PsiIdentifier:a('a')
+        PsiJavaToken:COMMA(',')
+        PsiErrorElement:Identifier or type expected
+          <empty list>
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/method/WildcardParsing.java b/java/java-tests/testData/psi/parser-full/declarationParsing/method/WildcardParsing.java
new file mode 100644
index 0000000..1e4686b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/method/WildcardParsing.java
@@ -0,0 +1,6 @@
+class C {
+    List<? extends B> x(Collection<? super B> x) {
+        X<?> x = new X<B>();
+        X<? super Z<? extends B>> k;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/method/WildcardParsing.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/method/WildcardParsing.txt
new file mode 100644
index 0000000..7b2c24e
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/declarationParsing/method/WildcardParsing.txt
@@ -0,0 +1,146 @@
+PsiJavaFile:WildcardParsing.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n    ')
+    PsiMethod:x
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:List<? extends B>
+        PsiJavaCodeReferenceElement:List<? extends B>
+          PsiIdentifier:List('List')
+          PsiReferenceParameterList
+            PsiJavaToken:LT('<')
+            PsiTypeElement:? extends B
+              PsiJavaToken:QUEST('?')
+              PsiWhiteSpace(' ')
+              PsiKeyword:extends('extends')
+              PsiWhiteSpace(' ')
+              PsiTypeElement:B
+                PsiJavaCodeReferenceElement:B
+                  PsiIdentifier:B('B')
+                  PsiReferenceParameterList
+                    <empty list>
+            PsiJavaToken:GT('>')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:x('x')
+      PsiParameterList:(Collection<? super B> x)
+        PsiJavaToken:LPARENTH('(')
+        PsiParameter:x
+          PsiModifierList:
+            <empty list>
+          PsiTypeElement:Collection<? super B>
+            PsiJavaCodeReferenceElement:Collection<? super B>
+              PsiIdentifier:Collection('Collection')
+              PsiReferenceParameterList
+                PsiJavaToken:LT('<')
+                PsiTypeElement:? super B
+                  PsiJavaToken:QUEST('?')
+                  PsiWhiteSpace(' ')
+                  PsiKeyword:super('super')
+                  PsiWhiteSpace(' ')
+                  PsiTypeElement:B
+                    PsiJavaCodeReferenceElement:B
+                      PsiIdentifier:B('B')
+                      PsiReferenceParameterList
+                        <empty list>
+                PsiJavaToken:GT('>')
+          PsiWhiteSpace(' ')
+          PsiIdentifier:x('x')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n        ')
+        PsiDeclarationStatement
+          PsiLocalVariable:x
+            PsiModifierList:
+              <empty list>
+            PsiTypeElement:X<?>
+              PsiJavaCodeReferenceElement:X<?>
+                PsiIdentifier:X('X')
+                PsiReferenceParameterList
+                  PsiJavaToken:LT('<')
+                  PsiTypeElement:?
+                    PsiJavaToken:QUEST('?')
+                  PsiJavaToken:GT('>')
+            PsiWhiteSpace(' ')
+            PsiIdentifier:x('x')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:EQ('=')
+            PsiWhiteSpace(' ')
+            PsiNewExpression:new X<B>()
+              PsiKeyword:new('new')
+              PsiReferenceParameterList
+                <empty list>
+              PsiWhiteSpace(' ')
+              PsiJavaCodeReferenceElement:X<B>
+                PsiIdentifier:X('X')
+                PsiReferenceParameterList
+                  PsiJavaToken:LT('<')
+                  PsiTypeElement:B
+                    PsiJavaCodeReferenceElement:B
+                      PsiIdentifier:B('B')
+                      PsiReferenceParameterList
+                        <empty list>
+                  PsiJavaToken:GT('>')
+              PsiExpressionList
+                PsiJavaToken:LPARENTH('(')
+                PsiJavaToken:RPARENTH(')')
+            PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n        ')
+        PsiDeclarationStatement
+          PsiLocalVariable:k
+            PsiModifierList:
+              <empty list>
+            PsiTypeElement:X<? super Z<? extends B>>
+              PsiJavaCodeReferenceElement:X<? super Z<? extends B>>
+                PsiIdentifier:X('X')
+                PsiReferenceParameterList
+                  PsiJavaToken:LT('<')
+                  PsiTypeElement:? super Z<? extends B>
+                    PsiJavaToken:QUEST('?')
+                    PsiWhiteSpace(' ')
+                    PsiKeyword:super('super')
+                    PsiWhiteSpace(' ')
+                    PsiTypeElement:Z<? extends B>
+                      PsiJavaCodeReferenceElement:Z<? extends B>
+                        PsiIdentifier:Z('Z')
+                        PsiReferenceParameterList
+                          PsiJavaToken:LT('<')
+                          PsiTypeElement:? extends B
+                            PsiJavaToken:QUEST('?')
+                            PsiWhiteSpace(' ')
+                            PsiKeyword:extends('extends')
+                            PsiWhiteSpace(' ')
+                            PsiTypeElement:B
+                              PsiJavaCodeReferenceElement:B
+                                PsiIdentifier:B('B')
+                                PsiReferenceParameterList
+                                  <empty list>
+                          PsiJavaToken:GT('>')
+                  PsiJavaToken:GT('>')
+            PsiWhiteSpace(' ')
+            PsiIdentifier:k('k')
+            PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n    ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/And0.java b/java/java-tests/testData/psi/parser-full/expressionParsing/And0.java
new file mode 100644
index 0000000..3cf100c
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/And0.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    return a & b & c;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/And0.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/And0.txt
new file mode 100644
index 0000000..26388a9
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/And0.txt
@@ -0,0 +1,50 @@
+PsiJavaFile:And0.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiReturnStatement
+          PsiKeyword:return('return')
+          PsiWhiteSpace(' ')
+          PsiPolyadicExpression: a & b & c
+            PsiReferenceExpression:a
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:a('a')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:AND('&')
+            PsiWhiteSpace(' ')
+            PsiReferenceExpression:b
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:b('b')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:AND('&')
+            PsiWhiteSpace(' ')
+            PsiReferenceExpression:c
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:c('c')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/And1.java b/java/java-tests/testData/psi/parser-full/expressionParsing/And1.java
new file mode 100644
index 0000000..462d94e
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/And1.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+     a &
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/And1.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/And1.txt
new file mode 100644
index 0000000..77b20fe
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/And1.txt
@@ -0,0 +1,39 @@
+PsiJavaFile:And1.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n     ')
+        PsiExpressionStatement
+          PsiBinaryExpression:a &
+            PsiReferenceExpression:a
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:a('a')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:AND('&')
+            PsiErrorElement:Expression expected
+              <empty list>
+          PsiErrorElement:';' expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/Anonymous2.java b/java/java-tests/testData/psi/parser-full/expressionParsing/Anonymous2.java
new file mode 100644
index 0000000..a00c2ae
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/Anonymous2.java
@@ -0,0 +1,17 @@
+// "Copy 'a' to temp final variable" "true"
+public class DoubleTrouble {
+    public void test() {
+        int a = 1;
+        a = 2;
+        class s {
+          public void run() {
+            new Runnable() {
+              public void run() {
+                System.out.println(a);
+              }
+            }.run();
+          }
+        }
+      }
+
+}
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/Anonymous2.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/Anonymous2.txt
new file mode 100644
index 0000000..d31ed03
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/Anonymous2.txt
@@ -0,0 +1,197 @@
+PsiJavaFile:Anonymous2.java
+  PsiImportList
+    <empty list>
+  PsiClass:DoubleTrouble
+    PsiComment(END_OF_LINE_COMMENT)('// "Copy 'a' to temp final variable" "true"')
+    PsiWhiteSpace('\n')
+    PsiModifierList:public
+      PsiKeyword:public('public')
+    PsiWhiteSpace(' ')
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:DoubleTrouble('DoubleTrouble')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n    ')
+    PsiMethod:test
+      PsiModifierList:public
+        PsiKeyword:public('public')
+      PsiTypeParameterList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:test('test')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n        ')
+        PsiDeclarationStatement
+          PsiLocalVariable:a
+            PsiModifierList:
+              <empty list>
+            PsiTypeElement:int
+              PsiKeyword:int('int')
+            PsiWhiteSpace(' ')
+            PsiIdentifier:a('a')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:EQ('=')
+            PsiWhiteSpace(' ')
+            PsiLiteralExpression:1
+              PsiJavaToken:INTEGER_LITERAL('1')
+            PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n        ')
+        PsiExpressionStatement
+          PsiAssignmentExpression:a = 2
+            PsiReferenceExpression:a
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:a('a')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:EQ('=')
+            PsiWhiteSpace(' ')
+            PsiLiteralExpression:2
+              PsiJavaToken:INTEGER_LITERAL('2')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n        ')
+        PsiDeclarationStatement
+          PsiClass:s
+            PsiModifierList:
+              <empty list>
+            PsiKeyword:class('class')
+            PsiWhiteSpace(' ')
+            PsiIdentifier:s('s')
+            PsiTypeParameterList
+              <empty list>
+            PsiReferenceList
+              <empty list>
+            PsiReferenceList
+              <empty list>
+            PsiWhiteSpace(' ')
+            PsiJavaToken:LBRACE('{')
+            PsiWhiteSpace('\n          ')
+            PsiMethod:run
+              PsiModifierList:public
+                PsiKeyword:public('public')
+              PsiTypeParameterList
+                <empty list>
+              PsiWhiteSpace(' ')
+              PsiTypeElement:void
+                PsiKeyword:void('void')
+              PsiWhiteSpace(' ')
+              PsiIdentifier:run('run')
+              PsiParameterList:()
+                PsiJavaToken:LPARENTH('(')
+                PsiJavaToken:RPARENTH(')')
+              PsiReferenceList
+                <empty list>
+              PsiWhiteSpace(' ')
+              PsiCodeBlock
+                PsiJavaToken:LBRACE('{')
+                PsiWhiteSpace('\n            ')
+                PsiExpressionStatement
+                  PsiMethodCallExpression:new Runnable() {
+              public void run() {
+                System.out.println(a);
+              }
+            }.run()
+                    PsiReferenceExpression:new Runnable() {
+              public void run() {
+                System.out.println(a);
+              }
+            }.run
+                      PsiNewExpression:new Runnable() {
+              public void run() {
+                System.out.println(a);
+              }
+            }
+                        PsiKeyword:new('new')
+                        PsiReferenceParameterList
+                          <empty list>
+                        PsiWhiteSpace(' ')
+                        PsiAnonymousClass
+                          PsiJavaCodeReferenceElement:Runnable
+                            PsiIdentifier:Runnable('Runnable')
+                            PsiReferenceParameterList
+                              <empty list>
+                          PsiExpressionList
+                            PsiJavaToken:LPARENTH('(')
+                            PsiJavaToken:RPARENTH(')')
+                          PsiWhiteSpace(' ')
+                          PsiJavaToken:LBRACE('{')
+                          PsiWhiteSpace('\n              ')
+                          PsiMethod:run
+                            PsiModifierList:public
+                              PsiKeyword:public('public')
+                            PsiTypeParameterList
+                              <empty list>
+                            PsiWhiteSpace(' ')
+                            PsiTypeElement:void
+                              PsiKeyword:void('void')
+                            PsiWhiteSpace(' ')
+                            PsiIdentifier:run('run')
+                            PsiParameterList:()
+                              PsiJavaToken:LPARENTH('(')
+                              PsiJavaToken:RPARENTH(')')
+                            PsiReferenceList
+                              <empty list>
+                            PsiWhiteSpace(' ')
+                            PsiCodeBlock
+                              PsiJavaToken:LBRACE('{')
+                              PsiWhiteSpace('\n                ')
+                              PsiExpressionStatement
+                                PsiMethodCallExpression:System.out.println(a)
+                                  PsiReferenceExpression:System.out.println
+                                    PsiReferenceExpression:System.out
+                                      PsiReferenceExpression:System
+                                        PsiReferenceParameterList
+                                          <empty list>
+                                        PsiIdentifier:System('System')
+                                      PsiJavaToken:DOT('.')
+                                      PsiReferenceParameterList
+                                        <empty list>
+                                      PsiIdentifier:out('out')
+                                    PsiJavaToken:DOT('.')
+                                    PsiReferenceParameterList
+                                      <empty list>
+                                    PsiIdentifier:println('println')
+                                  PsiExpressionList
+                                    PsiJavaToken:LPARENTH('(')
+                                    PsiReferenceExpression:a
+                                      PsiReferenceParameterList
+                                        <empty list>
+                                      PsiIdentifier:a('a')
+                                    PsiJavaToken:RPARENTH(')')
+                                PsiJavaToken:SEMICOLON(';')
+                              PsiWhiteSpace('\n              ')
+                              PsiJavaToken:RBRACE('}')
+                          PsiWhiteSpace('\n            ')
+                          PsiJavaToken:RBRACE('}')
+                      PsiJavaToken:DOT('.')
+                      PsiReferenceParameterList
+                        <empty list>
+                      PsiIdentifier:run('run')
+                    PsiExpressionList
+                      PsiJavaToken:LPARENTH('(')
+                      PsiJavaToken:RPARENTH(')')
+                  PsiJavaToken:SEMICOLON(';')
+                PsiWhiteSpace('\n          ')
+                PsiJavaToken:RBRACE('}')
+            PsiWhiteSpace('\n        ')
+            PsiJavaToken:RBRACE('}')
+        PsiWhiteSpace('\n      ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/AnonymousErrors.java b/java/java-tests/testData/psi/parser-full/expressionParsing/AnonymousErrors.java
new file mode 100644
index 0000000..e488f4d
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/AnonymousErrors.java
@@ -0,0 +1,5 @@
+class Test {
+    void method() {
+        new a() { static <error> int i; };
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/AnonymousErrors.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/AnonymousErrors.txt
new file mode 100644
index 0000000..3e36753
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/AnonymousErrors.txt
@@ -0,0 +1,78 @@
+PsiJavaFile:AnonymousErrors.java
+  PsiImportList
+    <empty list>
+  PsiClass:Test
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Test('Test')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n    ')
+    PsiMethod:method
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:method('method')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n        ')
+        PsiExpressionStatement
+          PsiNewExpression:new a() { static <error> int i; }
+            PsiKeyword:new('new')
+            PsiReferenceParameterList
+              <empty list>
+            PsiWhiteSpace(' ')
+            PsiAnonymousClass
+              PsiJavaCodeReferenceElement:a
+                PsiIdentifier:a('a')
+                PsiReferenceParameterList
+                  <empty list>
+              PsiExpressionList
+                PsiJavaToken:LPARENTH('(')
+                PsiJavaToken:RPARENTH(')')
+              PsiWhiteSpace(' ')
+              PsiJavaToken:LBRACE('{')
+              PsiWhiteSpace(' ')
+              PsiField:i
+                PsiModifierList:static
+                  PsiKeyword:static('static')
+                PsiWhiteSpace(' ')
+                PsiErrorElement:Unexpected token
+                  PsiTypeParameterList
+                    PsiJavaToken:LT('<')
+                    PsiTypeParameter:error
+                      PsiIdentifier:error('error')
+                      PsiElement(EXTENDS_BOUND_LIST)
+                        <empty list>
+                    PsiJavaToken:GT('>')
+                PsiWhiteSpace(' ')
+                PsiTypeElement:int
+                  PsiKeyword:int('int')
+                PsiWhiteSpace(' ')
+                PsiIdentifier:i('i')
+                PsiJavaToken:SEMICOLON(';')
+              PsiWhiteSpace(' ')
+              PsiJavaToken:RBRACE('}')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n    ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/AnonymousErrors1.java b/java/java-tests/testData/psi/parser-full/expressionParsing/AnonymousErrors1.java
new file mode 100644
index 0000000..f738327
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/AnonymousErrors1.java
@@ -0,0 +1,29 @@
+public class a {
+  void f1() 
+  {
+    new a() {
+    <error descr="Inner classes cannot have static declarations">static</error>
+      int i;
+
+    // compile time constant is OK
+    static final int f1 = 3 < 4 ? (a.ix==5 ?  1 : 3) / 4 + 18 : 0;
+
+    // its not a compile time constant
+    <error descr="Inner classes cannot have static declarations">static</error>
+      final Object o = null;
+
+    <error descr="Inner classes cannot have static declarations">static</error>
+      final int f2 = x instanceof Integer ? 1 : 0;
+
+    <error descr="Inner classes cannot have static declarations">static</error>
+      class a_ic_c2 {}
+
+    <error descr="Inner classes cannot have static declarations">static</error>
+      int a_ic_m2(String s) { return 0; }
+    // static initializer
+    <error descr="Inner classes cannot have static declarations">static</error>
+    {}
+    };
+  }
+}
+
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/AnonymousErrors1.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/AnonymousErrors1.txt
new file mode 100644
index 0000000..1e1e343
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/AnonymousErrors1.txt
@@ -0,0 +1,559 @@
+PsiJavaFile:AnonymousErrors1.java
+  PsiImportList
+    <empty list>
+  PsiClass:a
+    PsiModifierList:public
+      PsiKeyword:public('public')
+    PsiWhiteSpace(' ')
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:a('a')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiMethod:f1
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:f1('f1')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' \n  ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiNewExpression:new a() {
+    <error descr="Inner classes cannot have static declarations">static</error>
+      int i;
+
+    // compile time constant is OK
+    static final int f1 = 3 < 4 ? (a.ix==5 ?  1 : 3) / 4 + 18 : 0;
+
+    // its not a compile time constant
+    <error descr="Inner classes cannot have static declarations">static</error>
+      final Object o = null;
+
+    <error descr="Inner classes cannot have static declarations">static</error>
+      final int f2 = x instanceof Integer ? 1 : 0;
+
+    <error descr="Inner classes cannot have static declarations">static</error>
+      class a_ic_c2 {}
+
+    <error descr="Inner classes cannot have static declarations">static</error>
+      int a_ic_m2(String s) { return 0; }
+    // static initializer
+    <error descr="Inner classes cannot have static declarations">static</error>
+    {}
+    }
+            PsiKeyword:new('new')
+            PsiReferenceParameterList
+              <empty list>
+            PsiWhiteSpace(' ')
+            PsiAnonymousClass
+              PsiJavaCodeReferenceElement:a
+                PsiIdentifier:a('a')
+                PsiReferenceParameterList
+                  <empty list>
+              PsiExpressionList
+                PsiJavaToken:LPARENTH('(')
+                PsiJavaToken:RPARENTH(')')
+              PsiWhiteSpace(' ')
+              PsiJavaToken:LBRACE('{')
+              PsiWhiteSpace('\n    ')
+              PsiModifierList:
+                <empty list>
+              PsiErrorElement:Unexpected token
+                PsiTypeParameterList
+                  PsiJavaToken:LT('<')
+                  PsiTypeParameter:error
+                    PsiIdentifier:error('error')
+                    PsiElement(EXTENDS_BOUND_LIST)
+                      <empty list>
+                  PsiErrorElement:'>' expected.
+                    <empty list>
+              PsiWhiteSpace(' ')
+              PsiTypeElement:descr
+                PsiJavaCodeReferenceElement:descr
+                  PsiIdentifier:descr('descr')
+                  PsiReferenceParameterList
+                    <empty list>
+              PsiErrorElement:Identifier expected
+                <empty list>
+              PsiErrorElement:Unexpected token
+                PsiJavaToken:EQ('=')
+                PsiJavaToken:STRING_LITERAL('"Inner classes cannot have static declarations"')
+                PsiJavaToken:GT('>')
+              PsiModifierList:static
+                PsiKeyword:static('static')
+              PsiErrorElement:Identifier or type expected
+                PsiTypeParameterList
+                  PsiJavaToken:LT('<')
+                  PsiErrorElement:Type parameter expected
+                    <empty list>
+                  PsiErrorElement:'>' expected.
+                    <empty list>
+              PsiErrorElement:Unexpected token
+                PsiJavaToken:DIV('/')
+              PsiModifierList:
+                <empty list>
+              PsiTypeElement:error
+                PsiJavaCodeReferenceElement:error
+                  PsiIdentifier:error('error')
+                  PsiReferenceParameterList
+                    <empty list>
+              PsiErrorElement:Identifier expected
+                <empty list>
+              PsiErrorElement:Unexpected token
+                PsiJavaToken:GT('>')
+              PsiWhiteSpace('\n      ')
+              PsiField:i
+                PsiModifierList:
+                  <empty list>
+                PsiTypeElement:int
+                  PsiKeyword:int('int')
+                PsiWhiteSpace(' ')
+                PsiIdentifier:i('i')
+                PsiJavaToken:SEMICOLON(';')
+              PsiWhiteSpace('\n\n    ')
+              PsiField:f1
+                PsiComment(END_OF_LINE_COMMENT)('// compile time constant is OK')
+                PsiWhiteSpace('\n    ')
+                PsiModifierList:static final
+                  PsiKeyword:static('static')
+                  PsiWhiteSpace(' ')
+                  PsiKeyword:final('final')
+                PsiWhiteSpace(' ')
+                PsiTypeElement:int
+                  PsiKeyword:int('int')
+                PsiWhiteSpace(' ')
+                PsiIdentifier:f1('f1')
+                PsiWhiteSpace(' ')
+                PsiJavaToken:EQ('=')
+                PsiWhiteSpace(' ')
+                PsiConditionalExpression:3 < 4 ? (a.ix==5 ?  1 : 3) / 4 + 18 : 0
+                  PsiBinaryExpression:3 < 4
+                    PsiLiteralExpression:3
+                      PsiJavaToken:INTEGER_LITERAL('3')
+                    PsiWhiteSpace(' ')
+                    PsiJavaToken:LT('<')
+                    PsiWhiteSpace(' ')
+                    PsiLiteralExpression:4
+                      PsiJavaToken:INTEGER_LITERAL('4')
+                  PsiWhiteSpace(' ')
+                  PsiJavaToken:QUEST('?')
+                  PsiWhiteSpace(' ')
+                  PsiBinaryExpression:(a.ix==5 ?  1 : 3) / 4 + 18
+                    PsiBinaryExpression:(a.ix==5 ?  1 : 3) / 4
+                      PsiParenthesizedExpression:(a.ix==5 ?  1 : 3)
+                        PsiJavaToken:LPARENTH('(')
+                        PsiConditionalExpression:a.ix==5 ?  1 : 3
+                          PsiBinaryExpression:a.ix==5
+                            PsiReferenceExpression:a.ix
+                              PsiReferenceExpression:a
+                                PsiReferenceParameterList
+                                  <empty list>
+                                PsiIdentifier:a('a')
+                              PsiJavaToken:DOT('.')
+                              PsiReferenceParameterList
+                                <empty list>
+                              PsiIdentifier:ix('ix')
+                            PsiJavaToken:EQEQ('==')
+                            PsiLiteralExpression:5
+                              PsiJavaToken:INTEGER_LITERAL('5')
+                          PsiWhiteSpace(' ')
+                          PsiJavaToken:QUEST('?')
+                          PsiWhiteSpace('  ')
+                          PsiLiteralExpression:1
+                            PsiJavaToken:INTEGER_LITERAL('1')
+                          PsiWhiteSpace(' ')
+                          PsiJavaToken:COLON(':')
+                          PsiWhiteSpace(' ')
+                          PsiLiteralExpression:3
+                            PsiJavaToken:INTEGER_LITERAL('3')
+                        PsiJavaToken:RPARENTH(')')
+                      PsiWhiteSpace(' ')
+                      PsiJavaToken:DIV('/')
+                      PsiWhiteSpace(' ')
+                      PsiLiteralExpression:4
+                        PsiJavaToken:INTEGER_LITERAL('4')
+                    PsiWhiteSpace(' ')
+                    PsiJavaToken:PLUS('+')
+                    PsiWhiteSpace(' ')
+                    PsiLiteralExpression:18
+                      PsiJavaToken:INTEGER_LITERAL('18')
+                  PsiWhiteSpace(' ')
+                  PsiJavaToken:COLON(':')
+                  PsiWhiteSpace(' ')
+                  PsiLiteralExpression:0
+                    PsiJavaToken:INTEGER_LITERAL('0')
+                PsiJavaToken:SEMICOLON(';')
+              PsiWhiteSpace('\n\n    ')
+              PsiComment(END_OF_LINE_COMMENT)('// its not a compile time constant')
+              PsiWhiteSpace('\n    ')
+              PsiModifierList:
+                <empty list>
+              PsiErrorElement:Unexpected token
+                PsiTypeParameterList
+                  PsiJavaToken:LT('<')
+                  PsiTypeParameter:error
+                    PsiIdentifier:error('error')
+                    PsiElement(EXTENDS_BOUND_LIST)
+                      <empty list>
+                  PsiErrorElement:'>' expected.
+                    <empty list>
+              PsiWhiteSpace(' ')
+              PsiTypeElement:descr
+                PsiJavaCodeReferenceElement:descr
+                  PsiIdentifier:descr('descr')
+                  PsiReferenceParameterList
+                    <empty list>
+              PsiErrorElement:Identifier expected
+                <empty list>
+              PsiErrorElement:Unexpected token
+                PsiJavaToken:EQ('=')
+                PsiJavaToken:STRING_LITERAL('"Inner classes cannot have static declarations"')
+                PsiJavaToken:GT('>')
+              PsiModifierList:static
+                PsiKeyword:static('static')
+              PsiErrorElement:Identifier or type expected
+                PsiTypeParameterList
+                  PsiJavaToken:LT('<')
+                  PsiErrorElement:Type parameter expected
+                    <empty list>
+                  PsiErrorElement:'>' expected.
+                    <empty list>
+              PsiErrorElement:Unexpected token
+                PsiJavaToken:DIV('/')
+              PsiModifierList:
+                <empty list>
+              PsiTypeElement:error
+                PsiJavaCodeReferenceElement:error
+                  PsiIdentifier:error('error')
+                  PsiReferenceParameterList
+                    <empty list>
+              PsiErrorElement:Identifier expected
+                <empty list>
+              PsiErrorElement:Unexpected token
+                PsiJavaToken:GT('>')
+              PsiWhiteSpace('\n      ')
+              PsiField:o
+                PsiModifierList:final
+                  PsiKeyword:final('final')
+                PsiWhiteSpace(' ')
+                PsiTypeElement:Object
+                  PsiJavaCodeReferenceElement:Object
+                    PsiIdentifier:Object('Object')
+                    PsiReferenceParameterList
+                      <empty list>
+                PsiWhiteSpace(' ')
+                PsiIdentifier:o('o')
+                PsiWhiteSpace(' ')
+                PsiJavaToken:EQ('=')
+                PsiWhiteSpace(' ')
+                PsiLiteralExpression:null
+                  PsiJavaToken:NULL_KEYWORD('null')
+                PsiJavaToken:SEMICOLON(';')
+              PsiWhiteSpace('\n\n    ')
+              PsiModifierList:
+                <empty list>
+              PsiErrorElement:Unexpected token
+                PsiTypeParameterList
+                  PsiJavaToken:LT('<')
+                  PsiTypeParameter:error
+                    PsiIdentifier:error('error')
+                    PsiElement(EXTENDS_BOUND_LIST)
+                      <empty list>
+                  PsiErrorElement:'>' expected.
+                    <empty list>
+              PsiWhiteSpace(' ')
+              PsiTypeElement:descr
+                PsiJavaCodeReferenceElement:descr
+                  PsiIdentifier:descr('descr')
+                  PsiReferenceParameterList
+                    <empty list>
+              PsiErrorElement:Identifier expected
+                <empty list>
+              PsiErrorElement:Unexpected token
+                PsiJavaToken:EQ('=')
+                PsiJavaToken:STRING_LITERAL('"Inner classes cannot have static declarations"')
+                PsiJavaToken:GT('>')
+              PsiModifierList:static
+                PsiKeyword:static('static')
+              PsiErrorElement:Identifier or type expected
+                PsiTypeParameterList
+                  PsiJavaToken:LT('<')
+                  PsiErrorElement:Type parameter expected
+                    <empty list>
+                  PsiErrorElement:'>' expected.
+                    <empty list>
+              PsiErrorElement:Unexpected token
+                PsiJavaToken:DIV('/')
+              PsiModifierList:
+                <empty list>
+              PsiTypeElement:error
+                PsiJavaCodeReferenceElement:error
+                  PsiIdentifier:error('error')
+                  PsiReferenceParameterList
+                    <empty list>
+              PsiErrorElement:Identifier expected
+                <empty list>
+              PsiErrorElement:Unexpected token
+                PsiJavaToken:GT('>')
+              PsiWhiteSpace('\n      ')
+              PsiField:f2
+                PsiModifierList:final
+                  PsiKeyword:final('final')
+                PsiWhiteSpace(' ')
+                PsiTypeElement:int
+                  PsiKeyword:int('int')
+                PsiWhiteSpace(' ')
+                PsiIdentifier:f2('f2')
+                PsiWhiteSpace(' ')
+                PsiJavaToken:EQ('=')
+                PsiWhiteSpace(' ')
+                PsiConditionalExpression:x instanceof Integer ? 1 : 0
+                  PsiInstanceofExpression:x instanceof Integer
+                    PsiReferenceExpression:x
+                      PsiReferenceParameterList
+                        <empty list>
+                      PsiIdentifier:x('x')
+                    PsiWhiteSpace(' ')
+                    PsiKeyword:instanceof('instanceof')
+                    PsiWhiteSpace(' ')
+                    PsiTypeElement:Integer
+                      PsiJavaCodeReferenceElement:Integer
+                        PsiIdentifier:Integer('Integer')
+                        PsiReferenceParameterList
+                          <empty list>
+                  PsiWhiteSpace(' ')
+                  PsiJavaToken:QUEST('?')
+                  PsiWhiteSpace(' ')
+                  PsiLiteralExpression:1
+                    PsiJavaToken:INTEGER_LITERAL('1')
+                  PsiWhiteSpace(' ')
+                  PsiJavaToken:COLON(':')
+                  PsiWhiteSpace(' ')
+                  PsiLiteralExpression:0
+                    PsiJavaToken:INTEGER_LITERAL('0')
+                PsiJavaToken:SEMICOLON(';')
+              PsiWhiteSpace('\n\n    ')
+              PsiModifierList:
+                <empty list>
+              PsiErrorElement:Unexpected token
+                PsiTypeParameterList
+                  PsiJavaToken:LT('<')
+                  PsiTypeParameter:error
+                    PsiIdentifier:error('error')
+                    PsiElement(EXTENDS_BOUND_LIST)
+                      <empty list>
+                  PsiErrorElement:'>' expected.
+                    <empty list>
+              PsiWhiteSpace(' ')
+              PsiTypeElement:descr
+                PsiJavaCodeReferenceElement:descr
+                  PsiIdentifier:descr('descr')
+                  PsiReferenceParameterList
+                    <empty list>
+              PsiErrorElement:Identifier expected
+                <empty list>
+              PsiErrorElement:Unexpected token
+                PsiJavaToken:EQ('=')
+                PsiJavaToken:STRING_LITERAL('"Inner classes cannot have static declarations"')
+                PsiJavaToken:GT('>')
+              PsiModifierList:static
+                PsiKeyword:static('static')
+              PsiErrorElement:Identifier or type expected
+                PsiTypeParameterList
+                  PsiJavaToken:LT('<')
+                  PsiErrorElement:Type parameter expected
+                    <empty list>
+                  PsiErrorElement:'>' expected.
+                    <empty list>
+              PsiErrorElement:Unexpected token
+                PsiJavaToken:DIV('/')
+              PsiModifierList:
+                <empty list>
+              PsiTypeElement:error
+                PsiJavaCodeReferenceElement:error
+                  PsiIdentifier:error('error')
+                  PsiReferenceParameterList
+                    <empty list>
+              PsiErrorElement:Identifier expected
+                <empty list>
+              PsiErrorElement:Unexpected token
+                PsiJavaToken:GT('>')
+              PsiWhiteSpace('\n      ')
+              PsiClass:a_ic_c2
+                PsiModifierList:
+                  <empty list>
+                PsiKeyword:class('class')
+                PsiWhiteSpace(' ')
+                PsiIdentifier:a_ic_c2('a_ic_c2')
+                PsiTypeParameterList
+                  <empty list>
+                PsiReferenceList
+                  <empty list>
+                PsiReferenceList
+                  <empty list>
+                PsiWhiteSpace(' ')
+                PsiJavaToken:LBRACE('{')
+                PsiJavaToken:RBRACE('}')
+              PsiWhiteSpace('\n\n    ')
+              PsiModifierList:
+                <empty list>
+              PsiErrorElement:Unexpected token
+                PsiTypeParameterList
+                  PsiJavaToken:LT('<')
+                  PsiTypeParameter:error
+                    PsiIdentifier:error('error')
+                    PsiElement(EXTENDS_BOUND_LIST)
+                      <empty list>
+                  PsiErrorElement:'>' expected.
+                    <empty list>
+              PsiWhiteSpace(' ')
+              PsiTypeElement:descr
+                PsiJavaCodeReferenceElement:descr
+                  PsiIdentifier:descr('descr')
+                  PsiReferenceParameterList
+                    <empty list>
+              PsiErrorElement:Identifier expected
+                <empty list>
+              PsiErrorElement:Unexpected token
+                PsiJavaToken:EQ('=')
+                PsiJavaToken:STRING_LITERAL('"Inner classes cannot have static declarations"')
+                PsiJavaToken:GT('>')
+              PsiModifierList:static
+                PsiKeyword:static('static')
+              PsiErrorElement:Identifier or type expected
+                PsiTypeParameterList
+                  PsiJavaToken:LT('<')
+                  PsiErrorElement:Type parameter expected
+                    <empty list>
+                  PsiErrorElement:'>' expected.
+                    <empty list>
+              PsiErrorElement:Unexpected token
+                PsiJavaToken:DIV('/')
+              PsiModifierList:
+                <empty list>
+              PsiTypeElement:error
+                PsiJavaCodeReferenceElement:error
+                  PsiIdentifier:error('error')
+                  PsiReferenceParameterList
+                    <empty list>
+              PsiErrorElement:Identifier expected
+                <empty list>
+              PsiErrorElement:Unexpected token
+                PsiJavaToken:GT('>')
+              PsiWhiteSpace('\n      ')
+              PsiMethod:a_ic_m2
+                PsiModifierList:
+                  <empty list>
+                PsiTypeParameterList
+                  <empty list>
+                PsiTypeElement:int
+                  PsiKeyword:int('int')
+                PsiWhiteSpace(' ')
+                PsiIdentifier:a_ic_m2('a_ic_m2')
+                PsiParameterList:(String s)
+                  PsiJavaToken:LPARENTH('(')
+                  PsiParameter:s
+                    PsiModifierList:
+                      <empty list>
+                    PsiTypeElement:String
+                      PsiJavaCodeReferenceElement:String
+                        PsiIdentifier:String('String')
+                        PsiReferenceParameterList
+                          <empty list>
+                    PsiWhiteSpace(' ')
+                    PsiIdentifier:s('s')
+                  PsiJavaToken:RPARENTH(')')
+                PsiReferenceList
+                  <empty list>
+                PsiWhiteSpace(' ')
+                PsiCodeBlock
+                  PsiJavaToken:LBRACE('{')
+                  PsiWhiteSpace(' ')
+                  PsiReturnStatement
+                    PsiKeyword:return('return')
+                    PsiWhiteSpace(' ')
+                    PsiLiteralExpression:0
+                      PsiJavaToken:INTEGER_LITERAL('0')
+                    PsiJavaToken:SEMICOLON(';')
+                  PsiWhiteSpace(' ')
+                  PsiJavaToken:RBRACE('}')
+              PsiWhiteSpace('\n    ')
+              PsiComment(END_OF_LINE_COMMENT)('// static initializer')
+              PsiWhiteSpace('\n    ')
+              PsiModifierList:
+                <empty list>
+              PsiErrorElement:Unexpected token
+                PsiTypeParameterList
+                  PsiJavaToken:LT('<')
+                  PsiTypeParameter:error
+                    PsiIdentifier:error('error')
+                    PsiElement(EXTENDS_BOUND_LIST)
+                      <empty list>
+                  PsiErrorElement:'>' expected.
+                    <empty list>
+              PsiWhiteSpace(' ')
+              PsiTypeElement:descr
+                PsiJavaCodeReferenceElement:descr
+                  PsiIdentifier:descr('descr')
+                  PsiReferenceParameterList
+                    <empty list>
+              PsiErrorElement:Identifier expected
+                <empty list>
+              PsiErrorElement:Unexpected token
+                PsiJavaToken:EQ('=')
+                PsiJavaToken:STRING_LITERAL('"Inner classes cannot have static declarations"')
+                PsiJavaToken:GT('>')
+              PsiModifierList:static
+                PsiKeyword:static('static')
+              PsiErrorElement:Identifier or type expected
+                PsiTypeParameterList
+                  PsiJavaToken:LT('<')
+                  PsiErrorElement:Type parameter expected
+                    <empty list>
+                  PsiErrorElement:'>' expected.
+                    <empty list>
+              PsiErrorElement:Unexpected token
+                PsiJavaToken:DIV('/')
+              PsiModifierList:
+                <empty list>
+              PsiTypeElement:error
+                PsiJavaCodeReferenceElement:error
+                  PsiIdentifier:error('error')
+                  PsiReferenceParameterList
+                    <empty list>
+              PsiErrorElement:Identifier expected
+                <empty list>
+              PsiErrorElement:Unexpected token
+                PsiJavaToken:GT('>')
+              PsiWhiteSpace('\n    ')
+              PsiClassInitializer
+                PsiModifierList:
+                  <empty list>
+                PsiCodeBlock
+                  PsiJavaToken:LBRACE('{')
+                  PsiJavaToken:RBRACE('}')
+              PsiWhiteSpace('\n    ')
+              PsiJavaToken:RBRACE('}')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/AnonymousWithTypeParams.java b/java/java-tests/testData/psi/parser-full/expressionParsing/AnonymousWithTypeParams.java
new file mode 100644
index 0000000..830f125
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/AnonymousWithTypeParams.java
@@ -0,0 +1,7 @@
+class Test {
+    void method() {
+        new a<T>() {
+          void a() {}
+        };
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/AnonymousWithTypeParams.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/AnonymousWithTypeParams.txt
new file mode 100644
index 0000000..c718dc0
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/AnonymousWithTypeParams.txt
@@ -0,0 +1,86 @@
+PsiJavaFile:AnonymousWithTypeParams.java
+  PsiImportList
+    <empty list>
+  PsiClass:Test
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Test('Test')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n    ')
+    PsiMethod:method
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:method('method')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n        ')
+        PsiExpressionStatement
+          PsiNewExpression:new a<T>() {
+          void a() {}
+        }
+            PsiKeyword:new('new')
+            PsiReferenceParameterList
+              <empty list>
+            PsiWhiteSpace(' ')
+            PsiAnonymousClass
+              PsiJavaCodeReferenceElement:a<T>
+                PsiIdentifier:a('a')
+                PsiReferenceParameterList
+                  PsiJavaToken:LT('<')
+                  PsiTypeElement:T
+                    PsiJavaCodeReferenceElement:T
+                      PsiIdentifier:T('T')
+                      PsiReferenceParameterList
+                        <empty list>
+                  PsiJavaToken:GT('>')
+              PsiExpressionList
+                PsiJavaToken:LPARENTH('(')
+                PsiJavaToken:RPARENTH(')')
+              PsiWhiteSpace(' ')
+              PsiJavaToken:LBRACE('{')
+              PsiWhiteSpace('\n          ')
+              PsiMethod:a
+                PsiModifierList:
+                  <empty list>
+                PsiTypeParameterList
+                  <empty list>
+                PsiTypeElement:void
+                  PsiKeyword:void('void')
+                PsiWhiteSpace(' ')
+                PsiIdentifier:a('a')
+                PsiParameterList:()
+                  PsiJavaToken:LPARENTH('(')
+                  PsiJavaToken:RPARENTH(')')
+                PsiReferenceList
+                  <empty list>
+                PsiWhiteSpace(' ')
+                PsiCodeBlock
+                  PsiJavaToken:LBRACE('{')
+                  PsiJavaToken:RBRACE('}')
+              PsiWhiteSpace('\n        ')
+              PsiJavaToken:RBRACE('}')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n    ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer0.java b/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer0.java
new file mode 100644
index 0000000..2cd326f
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer0.java
@@ -0,0 +1,3 @@
+class A{
+  int a = { };
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer0.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer0.txt
new file mode 100644
index 0000000..7f7b896
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer0.txt
@@ -0,0 +1,34 @@
+PsiJavaFile:ArrayInitializer0.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiField:a
+      PsiModifierList:
+        <empty list>
+      PsiTypeElement:int
+        PsiKeyword:int('int')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:a('a')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:EQ('=')
+      PsiWhiteSpace(' ')
+      PsiArrayInitializerExpression:{ }
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace(' ')
+        PsiJavaToken:RBRACE('}')
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer1.java b/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer1.java
new file mode 100644
index 0000000..de17beaa
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer1.java
@@ -0,0 +1,3 @@
+class A{
+  int a = { 1 };
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer1.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer1.txt
new file mode 100644
index 0000000..c716667
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer1.txt
@@ -0,0 +1,37 @@
+PsiJavaFile:ArrayInitializer1.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiField:a
+      PsiModifierList:
+        <empty list>
+      PsiTypeElement:int
+        PsiKeyword:int('int')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:a('a')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:EQ('=')
+      PsiWhiteSpace(' ')
+      PsiArrayInitializerExpression:{ 1 }
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace(' ')
+        PsiLiteralExpression:1
+          PsiJavaToken:INTEGER_LITERAL('1')
+        PsiWhiteSpace(' ')
+        PsiJavaToken:RBRACE('}')
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer2.java b/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer2.java
new file mode 100644
index 0000000..ff08db1
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer2.java
@@ -0,0 +1,3 @@
+class A{
+  int a = { 1, };
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer2.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer2.txt
new file mode 100644
index 0000000..fa6091f
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer2.txt
@@ -0,0 +1,38 @@
+PsiJavaFile:ArrayInitializer2.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiField:a
+      PsiModifierList:
+        <empty list>
+      PsiTypeElement:int
+        PsiKeyword:int('int')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:a('a')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:EQ('=')
+      PsiWhiteSpace(' ')
+      PsiArrayInitializerExpression:{ 1, }
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace(' ')
+        PsiLiteralExpression:1
+          PsiJavaToken:INTEGER_LITERAL('1')
+        PsiJavaToken:COMMA(',')
+        PsiWhiteSpace(' ')
+        PsiJavaToken:RBRACE('}')
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer3.java b/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer3.java
new file mode 100644
index 0000000..005b384
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer3.java
@@ -0,0 +1,3 @@
+class A{
+  int a = { 1,2 };
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer3.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer3.txt
new file mode 100644
index 0000000..edebfdc
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer3.txt
@@ -0,0 +1,40 @@
+PsiJavaFile:ArrayInitializer3.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiField:a
+      PsiModifierList:
+        <empty list>
+      PsiTypeElement:int
+        PsiKeyword:int('int')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:a('a')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:EQ('=')
+      PsiWhiteSpace(' ')
+      PsiArrayInitializerExpression:{ 1,2 }
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace(' ')
+        PsiLiteralExpression:1
+          PsiJavaToken:INTEGER_LITERAL('1')
+        PsiJavaToken:COMMA(',')
+        PsiLiteralExpression:2
+          PsiJavaToken:INTEGER_LITERAL('2')
+        PsiWhiteSpace(' ')
+        PsiJavaToken:RBRACE('}')
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer4.java b/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer4.java
new file mode 100644
index 0000000..0c727d6
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer4.java
@@ -0,0 +1,3 @@
+class A{
+  int a = { 1 2 };
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer4.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer4.txt
new file mode 100644
index 0000000..fdad5e8
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer4.txt
@@ -0,0 +1,42 @@
+PsiJavaFile:ArrayInitializer4.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiField:a
+      PsiModifierList:
+        <empty list>
+      PsiTypeElement:int
+        PsiKeyword:int('int')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:a('a')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:EQ('=')
+      PsiWhiteSpace(' ')
+      PsiArrayInitializerExpression:{ 1 2 }
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace(' ')
+        PsiLiteralExpression:1
+          PsiJavaToken:INTEGER_LITERAL('1')
+        PsiErrorElement:',' expected
+          <empty list>
+        PsiWhiteSpace(' ')
+        PsiLiteralExpression:2
+          PsiJavaToken:INTEGER_LITERAL('2')
+        PsiWhiteSpace(' ')
+        PsiJavaToken:RBRACE('}')
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer5.java b/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer5.java
new file mode 100644
index 0000000..8de74b2
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer5.java
@@ -0,0 +1,3 @@
+class A{
+  int a = { { };
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer5.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer5.txt
new file mode 100644
index 0000000..a73ffc7
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer5.txt
@@ -0,0 +1,41 @@
+PsiJavaFile:ArrayInitializer5.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiField:a
+      PsiModifierList:
+        <empty list>
+      PsiTypeElement:int
+        PsiKeyword:int('int')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:a('a')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:EQ('=')
+      PsiWhiteSpace(' ')
+      PsiArrayInitializerExpression:{ { }
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace(' ')
+        PsiArrayInitializerExpression:{ }
+          PsiJavaToken:LBRACE('{')
+          PsiWhiteSpace(' ')
+          PsiJavaToken:RBRACE('}')
+        PsiErrorElement:',' expected
+          <empty list>
+        PsiErrorElement:'}' expected
+          <empty list>
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer6.java b/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer6.java
new file mode 100644
index 0000000..e0cd64f
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer6.java
@@ -0,0 +1,3 @@
+class A{
+  int a = {  ,  };
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer6.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer6.txt
new file mode 100644
index 0000000..d55d73c
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer6.txt
@@ -0,0 +1,36 @@
+PsiJavaFile:ArrayInitializer6.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiField:a
+      PsiModifierList:
+        <empty list>
+      PsiTypeElement:int
+        PsiKeyword:int('int')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:a('a')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:EQ('=')
+      PsiWhiteSpace(' ')
+      PsiArrayInitializerExpression:{  ,  }
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('  ')
+        PsiJavaToken:COMMA(',')
+        PsiWhiteSpace('  ')
+        PsiJavaToken:RBRACE('}')
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer7.java b/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer7.java
new file mode 100644
index 0000000..d2cff81
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer7.java
@@ -0,0 +1,4 @@
+class A{
+  int a = {
+  ,  7};
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer7.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer7.txt
new file mode 100644
index 0000000..30c12fc
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/ArrayInitializer7.txt
@@ -0,0 +1,41 @@
+PsiJavaFile:ArrayInitializer7.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiField:a
+      PsiModifierList:
+        <empty list>
+      PsiTypeElement:int
+        PsiKeyword:int('int')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:a('a')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:EQ('=')
+      PsiWhiteSpace(' ')
+      PsiArrayInitializerExpression:{
+  ,  7}
+        PsiJavaToken:LBRACE('{')
+        PsiErrorElement:Expression expected
+          <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:COMMA(',')
+        PsiWhiteSpace('  ')
+        PsiLiteralExpression:7
+          PsiJavaToken:INTEGER_LITERAL('7')
+        PsiJavaToken:RBRACE('}')
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/Assignment0.java b/java/java-tests/testData/psi/parser-full/expressionParsing/Assignment0.java
new file mode 100644
index 0000000..db9c613
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/Assignment0.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    a = 0;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/Assignment0.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/Assignment0.txt
new file mode 100644
index 0000000..a288ed4
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/Assignment0.txt
@@ -0,0 +1,39 @@
+PsiJavaFile:Assignment0.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiAssignmentExpression:a = 0
+            PsiReferenceExpression:a
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:a('a')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:EQ('=')
+            PsiWhiteSpace(' ')
+            PsiLiteralExpression:0
+              PsiJavaToken:INTEGER_LITERAL('0')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/Assignment1.java b/java/java-tests/testData/psi/parser-full/expressionParsing/Assignment1.java
new file mode 100644
index 0000000..683557b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/Assignment1.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    a =
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/Assignment1.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/Assignment1.txt
new file mode 100644
index 0000000..50f81fac
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/Assignment1.txt
@@ -0,0 +1,39 @@
+PsiJavaFile:Assignment1.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiAssignmentExpression:a =
+            PsiReferenceExpression:a
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:a('a')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:EQ('=')
+            PsiErrorElement:Expression expected
+              <empty list>
+          PsiErrorElement:';' expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/Cast0.java b/java/java-tests/testData/psi/parser-full/expressionParsing/Cast0.java
new file mode 100644
index 0000000..ebd77b3
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/Cast0.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    return (Type)var;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/Cast0.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/Cast0.txt
new file mode 100644
index 0000000..71f9e86
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/Cast0.txt
@@ -0,0 +1,43 @@
+PsiJavaFile:Cast0.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiReturnStatement
+          PsiKeyword:return('return')
+          PsiWhiteSpace(' ')
+          PsiTypeCastExpression:(Type)var
+            PsiJavaToken:LPARENTH('(')
+            PsiTypeElement:Type
+              PsiJavaCodeReferenceElement:Type
+                PsiIdentifier:Type('Type')
+                PsiReferenceParameterList
+                  <empty list>
+            PsiJavaToken:RPARENTH(')')
+            PsiReferenceExpression:var
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:var('var')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/Cond0.java b/java/java-tests/testData/psi/parser-full/expressionParsing/Cond0.java
new file mode 100644
index 0000000..92cc9c6
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/Cond0.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    return cond ? true : false;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/Cond0.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/Cond0.txt
new file mode 100644
index 0000000..3008365
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/Cond0.txt
@@ -0,0 +1,46 @@
+PsiJavaFile:Cond0.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiReturnStatement
+          PsiKeyword:return('return')
+          PsiWhiteSpace(' ')
+          PsiConditionalExpression:cond ? true : false
+            PsiReferenceExpression:cond
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:cond('cond')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:QUEST('?')
+            PsiWhiteSpace(' ')
+            PsiLiteralExpression:true
+              PsiJavaToken:TRUE_KEYWORD('true')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:COLON(':')
+            PsiWhiteSpace(' ')
+            PsiLiteralExpression:false
+              PsiJavaToken:FALSE_KEYWORD('false')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/Cond1.java b/java/java-tests/testData/psi/parser-full/expressionParsing/Cond1.java
new file mode 100644
index 0000000..9798289
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/Cond1.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    return cond ?
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/Cond1.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/Cond1.txt
new file mode 100644
index 0000000..9240050
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/Cond1.txt
@@ -0,0 +1,41 @@
+PsiJavaFile:Cond1.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiReturnStatement
+          PsiKeyword:return('return')
+          PsiWhiteSpace(' ')
+          PsiConditionalExpression:cond ?
+            PsiReferenceExpression:cond
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:cond('cond')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:QUEST('?')
+            PsiErrorElement:Expression expected
+              <empty list>
+          PsiErrorElement:';' expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/Cond2.java b/java/java-tests/testData/psi/parser-full/expressionParsing/Cond2.java
new file mode 100644
index 0000000..2a97f08
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/Cond2.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    return cond ? true
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/Cond2.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/Cond2.txt
new file mode 100644
index 0000000..3b320e7
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/Cond2.txt
@@ -0,0 +1,44 @@
+PsiJavaFile:Cond2.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiReturnStatement
+          PsiKeyword:return('return')
+          PsiWhiteSpace(' ')
+          PsiConditionalExpression:cond ? true
+            PsiReferenceExpression:cond
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:cond('cond')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:QUEST('?')
+            PsiWhiteSpace(' ')
+            PsiLiteralExpression:true
+              PsiJavaToken:TRUE_KEYWORD('true')
+            PsiErrorElement:':' expected
+              <empty list>
+          PsiErrorElement:';' expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/Cond3.java b/java/java-tests/testData/psi/parser-full/expressionParsing/Cond3.java
new file mode 100644
index 0000000..7a5a439
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/Cond3.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    return cond ? true :
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/Cond3.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/Cond3.txt
new file mode 100644
index 0000000..38f72b9
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/Cond3.txt
@@ -0,0 +1,46 @@
+PsiJavaFile:Cond3.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiReturnStatement
+          PsiKeyword:return('return')
+          PsiWhiteSpace(' ')
+          PsiConditionalExpression:cond ? true :
+            PsiReferenceExpression:cond
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:cond('cond')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:QUEST('?')
+            PsiWhiteSpace(' ')
+            PsiLiteralExpression:true
+              PsiJavaToken:TRUE_KEYWORD('true')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:COLON(':')
+            PsiErrorElement:Expression expected
+              <empty list>
+          PsiErrorElement:';' expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/CondAnd0.java b/java/java-tests/testData/psi/parser-full/expressionParsing/CondAnd0.java
new file mode 100644
index 0000000..3d6b9d8
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/CondAnd0.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    return a && b && c;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/CondAnd0.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/CondAnd0.txt
new file mode 100644
index 0000000..383e710
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/CondAnd0.txt
@@ -0,0 +1,50 @@
+PsiJavaFile:CondAnd0.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiReturnStatement
+          PsiKeyword:return('return')
+          PsiWhiteSpace(' ')
+          PsiPolyadicExpression: a && b && c
+            PsiReferenceExpression:a
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:a('a')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:ANDAND('&&')
+            PsiWhiteSpace(' ')
+            PsiReferenceExpression:b
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:b('b')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:ANDAND('&&')
+            PsiWhiteSpace(' ')
+            PsiReferenceExpression:c
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:c('c')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/CondAnd1.java b/java/java-tests/testData/psi/parser-full/expressionParsing/CondAnd1.java
new file mode 100644
index 0000000..4f05893
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/CondAnd1.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+     a &&
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/CondAnd1.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/CondAnd1.txt
new file mode 100644
index 0000000..117355a
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/CondAnd1.txt
@@ -0,0 +1,39 @@
+PsiJavaFile:CondAnd1.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n     ')
+        PsiExpressionStatement
+          PsiBinaryExpression:a &&
+            PsiReferenceExpression:a
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:a('a')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:ANDAND('&&')
+            PsiErrorElement:Expression expected
+              <empty list>
+          PsiErrorElement:';' expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/CondOr0.java b/java/java-tests/testData/psi/parser-full/expressionParsing/CondOr0.java
new file mode 100644
index 0000000..c5adc68
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/CondOr0.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    return a || b || c;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/CondOr0.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/CondOr0.txt
new file mode 100644
index 0000000..926a8bf
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/CondOr0.txt
@@ -0,0 +1,50 @@
+PsiJavaFile:CondOr0.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiReturnStatement
+          PsiKeyword:return('return')
+          PsiWhiteSpace(' ')
+          PsiPolyadicExpression: a || b || c
+            PsiReferenceExpression:a
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:a('a')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:OROR('||')
+            PsiWhiteSpace(' ')
+            PsiReferenceExpression:b
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:b('b')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:OROR('||')
+            PsiWhiteSpace(' ')
+            PsiReferenceExpression:c
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:c('c')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/CondOr1.java b/java/java-tests/testData/psi/parser-full/expressionParsing/CondOr1.java
new file mode 100644
index 0000000..4ec72ce
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/CondOr1.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+     a ||
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/CondOr1.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/CondOr1.txt
new file mode 100644
index 0000000..286e4cd
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/CondOr1.txt
@@ -0,0 +1,39 @@
+PsiJavaFile:CondOr1.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n     ')
+        PsiExpressionStatement
+          PsiBinaryExpression:a ||
+            PsiReferenceExpression:a
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:a('a')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:OROR('||')
+            PsiErrorElement:Expression expected
+              <empty list>
+          PsiErrorElement:';' expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/ExprList0.java b/java/java-tests/testData/psi/parser-full/expressionParsing/ExprList0.java
new file mode 100644
index 0000000..b3869b4
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/ExprList0.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    f(1,2);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/ExprList0.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/ExprList0.txt
new file mode 100644
index 0000000..861821f
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/ExprList0.txt
@@ -0,0 +1,42 @@
+PsiJavaFile:ExprList0.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiMethodCallExpression:f(1,2)
+            PsiReferenceExpression:f
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:f('f')
+            PsiExpressionList
+              PsiJavaToken:LPARENTH('(')
+              PsiLiteralExpression:1
+                PsiJavaToken:INTEGER_LITERAL('1')
+              PsiJavaToken:COMMA(',')
+              PsiLiteralExpression:2
+                PsiJavaToken:INTEGER_LITERAL('2')
+              PsiJavaToken:RPARENTH(')')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/ExprList1.java b/java/java-tests/testData/psi/parser-full/expressionParsing/ExprList1.java
new file mode 100644
index 0000000..88f0b2e
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/ExprList1.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    f(
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/ExprList1.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/ExprList1.txt
new file mode 100644
index 0000000..f19c9f6
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/ExprList1.txt
@@ -0,0 +1,40 @@
+PsiJavaFile:ExprList1.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiMethodCallExpression:f(
+  
+            PsiReferenceExpression:f
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:f('f')
+            PsiExpressionList
+              PsiJavaToken:LPARENTH('(')
+              PsiErrorElement:')' expected
+                <empty list>
+              PsiWhiteSpace('\n  ')
+          PsiErrorElement:';' expected
+            <empty list>
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/ExprList2.java b/java/java-tests/testData/psi/parser-full/expressionParsing/ExprList2.java
new file mode 100644
index 0000000..aae7abb
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/ExprList2.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    f(1
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/ExprList2.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/ExprList2.txt
new file mode 100644
index 0000000..ef418aa
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/ExprList2.txt
@@ -0,0 +1,42 @@
+PsiJavaFile:ExprList2.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiMethodCallExpression:f(1
+  
+            PsiReferenceExpression:f
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:f('f')
+            PsiExpressionList
+              PsiJavaToken:LPARENTH('(')
+              PsiLiteralExpression:1
+                PsiJavaToken:INTEGER_LITERAL('1')
+              PsiErrorElement:')' expected
+                <empty list>
+              PsiWhiteSpace('\n  ')
+          PsiErrorElement:';' expected
+            <empty list>
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/ExprList3.java b/java/java-tests/testData/psi/parser-full/expressionParsing/ExprList3.java
new file mode 100644
index 0000000..bc2f969
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/ExprList3.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    f(1,
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/ExprList3.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/ExprList3.txt
new file mode 100644
index 0000000..d3aaf78
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/ExprList3.txt
@@ -0,0 +1,47 @@
+PsiJavaFile:ExprList3.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiMethodCallExpression:f(1,
+  
+            PsiReferenceExpression:f
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:f('f')
+            PsiExpressionList
+              PsiJavaToken:LPARENTH('(')
+              PsiLiteralExpression:1
+                PsiJavaToken:INTEGER_LITERAL('1')
+              PsiJavaToken:COMMA(',')
+              PsiErrorElement:Expression expected
+                <empty list>
+              PsiExpression(empty)
+                <empty list>
+              PsiErrorElement:')' expected
+                <empty list>
+              PsiWhiteSpace('\n  ')
+          PsiErrorElement:';' expected
+            <empty list>
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/ExprList4.java b/java/java-tests/testData/psi/parser-full/expressionParsing/ExprList4.java
new file mode 100644
index 0000000..314e6bd
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/ExprList4.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    f(1,);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/ExprList4.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/ExprList4.txt
new file mode 100644
index 0000000..f705a82
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/ExprList4.txt
@@ -0,0 +1,44 @@
+PsiJavaFile:ExprList4.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiMethodCallExpression:f(1,)
+            PsiReferenceExpression:f
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:f('f')
+            PsiExpressionList
+              PsiJavaToken:LPARENTH('(')
+              PsiLiteralExpression:1
+                PsiJavaToken:INTEGER_LITERAL('1')
+              PsiJavaToken:COMMA(',')
+              PsiErrorElement:Expression expected
+                <empty list>
+              PsiExpression(empty)
+                <empty list>
+              PsiJavaToken:RPARENTH(')')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/ExprList5.java b/java/java-tests/testData/psi/parser-full/expressionParsing/ExprList5.java
new file mode 100644
index 0000000..f2a032a
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/ExprList5.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    f(1,,2);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/ExprList5.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/ExprList5.txt
new file mode 100644
index 0000000..6ecb015
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/ExprList5.txt
@@ -0,0 +1,47 @@
+PsiJavaFile:ExprList5.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiMethodCallExpression:f(1,,2)
+            PsiReferenceExpression:f
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:f('f')
+            PsiExpressionList
+              PsiJavaToken:LPARENTH('(')
+              PsiLiteralExpression:1
+                PsiJavaToken:INTEGER_LITERAL('1')
+              PsiJavaToken:COMMA(',')
+              PsiErrorElement:Expression expected
+                <empty list>
+              PsiExpression(empty)
+                <empty list>
+              PsiJavaToken:COMMA(',')
+              PsiLiteralExpression:2
+                PsiJavaToken:INTEGER_LITERAL('2')
+              PsiJavaToken:RPARENTH(')')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/ExprList6.java b/java/java-tests/testData/psi/parser-full/expressionParsing/ExprList6.java
new file mode 100644
index 0000000..db6ba40
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/ExprList6.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    f(,2);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/ExprList6.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/ExprList6.txt
new file mode 100644
index 0000000..577fdb1
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/ExprList6.txt
@@ -0,0 +1,44 @@
+PsiJavaFile:ExprList6.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiMethodCallExpression:f(,2)
+            PsiReferenceExpression:f
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:f('f')
+            PsiExpressionList
+              PsiJavaToken:LPARENTH('(')
+              PsiErrorElement:Expression expected
+                <empty list>
+              PsiExpression(empty)
+                <empty list>
+              PsiJavaToken:COMMA(',')
+              PsiLiteralExpression:2
+                PsiJavaToken:INTEGER_LITERAL('2')
+              PsiJavaToken:RPARENTH(')')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/GE.java b/java/java-tests/testData/psi/parser-full/expressionParsing/GE.java
new file mode 100644
index 0000000..83e26f8
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/GE.java
@@ -0,0 +1,7 @@
+class Test {
+    boolean method() {
+        int x = 8;
+        x >>= 2;
+        return 1 >= 2;
+    }
+} 
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/GE.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/GE.txt
new file mode 100644
index 0000000..637bdc1
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/GE.txt
@@ -0,0 +1,80 @@
+PsiJavaFile:GE.java
+  PsiImportList
+    <empty list>
+  PsiClass:Test
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Test('Test')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n    ')
+    PsiMethod:method
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:boolean
+        PsiKeyword:boolean('boolean')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:method('method')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n        ')
+        PsiDeclarationStatement
+          PsiLocalVariable:x
+            PsiModifierList:
+              <empty list>
+            PsiTypeElement:int
+              PsiKeyword:int('int')
+            PsiWhiteSpace(' ')
+            PsiIdentifier:x('x')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:EQ('=')
+            PsiWhiteSpace(' ')
+            PsiLiteralExpression:8
+              PsiJavaToken:INTEGER_LITERAL('8')
+            PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n        ')
+        PsiExpressionStatement
+          PsiAssignmentExpression:x >>= 2
+            PsiReferenceExpression:x
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:x('x')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:GTGTEQ('>>=')
+            PsiWhiteSpace(' ')
+            PsiLiteralExpression:2
+              PsiJavaToken:INTEGER_LITERAL('2')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n        ')
+        PsiReturnStatement
+          PsiKeyword:return('return')
+          PsiWhiteSpace(' ')
+          PsiBinaryExpression:1 >= 2
+            PsiLiteralExpression:1
+              PsiJavaToken:INTEGER_LITERAL('1')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:GE('>=')
+            PsiWhiteSpace(' ')
+            PsiLiteralExpression:2
+              PsiJavaToken:INTEGER_LITERAL('2')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n    ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/IllegalWildcard.java b/java/java-tests/testData/psi/parser-full/expressionParsing/IllegalWildcard.java
new file mode 100644
index 0000000..cf4e0f6
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/IllegalWildcard.java
@@ -0,0 +1,5 @@
+class Foo {
+  {
+    this.<?>foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/IllegalWildcard.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/IllegalWildcard.txt
new file mode 100644
index 0000000..24e6d1e
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/IllegalWildcard.txt
@@ -0,0 +1,46 @@
+PsiJavaFile:IllegalWildcard.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiMethodCallExpression:this.<?>foo()
+            PsiReferenceExpression:this.<?>foo
+              PsiThisExpression:this
+                PsiReferenceParameterList
+                  <empty list>
+                PsiKeyword:this('this')
+              PsiJavaToken:DOT('.')
+              PsiReferenceParameterList
+                PsiJavaToken:LT('<')
+                PsiErrorElement:Unexpected wildcard
+                  PsiJavaToken:QUEST('?')
+                PsiJavaToken:GT('>')
+              PsiIdentifier:foo('foo')
+            PsiExpressionList
+              PsiJavaToken:LPARENTH('(')
+              PsiJavaToken:RPARENTH(')')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/IncompleteCast.java b/java/java-tests/testData/psi/parser-full/expressionParsing/IncompleteCast.java
new file mode 100644
index 0000000..eba7981
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/IncompleteCast.java
@@ -0,0 +1,5 @@
+class Test {
+    boolean method() {
+        f((ArrayList<String>) );
+    }
+} 
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/IncompleteCast.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/IncompleteCast.txt
new file mode 100644
index 0000000..0ef5b4a
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/IncompleteCast.txt
@@ -0,0 +1,67 @@
+PsiJavaFile:IncompleteCast.java
+  PsiImportList
+    <empty list>
+  PsiClass:Test
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Test('Test')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n    ')
+    PsiMethod:method
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:boolean
+        PsiKeyword:boolean('boolean')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:method('method')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n        ')
+        PsiExpressionStatement
+          PsiMethodCallExpression:f((ArrayList<String>) )
+            PsiReferenceExpression:f
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:f('f')
+            PsiExpressionList
+              PsiJavaToken:LPARENTH('(')
+              PsiTypeCastExpression:(ArrayList<String>)
+                PsiJavaToken:LPARENTH('(')
+                PsiTypeElement:ArrayList<String>
+                  PsiJavaCodeReferenceElement:ArrayList<String>
+                    PsiIdentifier:ArrayList('ArrayList')
+                    PsiReferenceParameterList
+                      PsiJavaToken:LT('<')
+                      PsiTypeElement:String
+                        PsiJavaCodeReferenceElement:String
+                          PsiIdentifier:String('String')
+                          PsiReferenceParameterList
+                            <empty list>
+                      PsiJavaToken:GT('>')
+                PsiJavaToken:RPARENTH(')')
+                PsiErrorElement:Expression expected
+                  <empty list>
+              PsiWhiteSpace(' ')
+              PsiJavaToken:RPARENTH(')')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n    ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/IncompleteDecl.java b/java/java-tests/testData/psi/parser-full/expressionParsing/IncompleteDecl.java
new file mode 100644
index 0000000..b6b70a3
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/IncompleteDecl.java
@@ -0,0 +1,5 @@
+class X {
+    void method() {
+        List<Integer>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/IncompleteDecl.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/IncompleteDecl.txt
new file mode 100644
index 0000000..46c9031
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/IncompleteDecl.txt
@@ -0,0 +1,54 @@
+PsiJavaFile:IncompleteDecl.java
+  PsiImportList
+    <empty list>
+  PsiClass:X
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:X('X')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n    ')
+    PsiMethod:method
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:method('method')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n        ')
+        PsiDeclarationStatement
+          PsiTypeElement:List<Integer>
+            PsiJavaCodeReferenceElement:List<Integer>
+              PsiIdentifier:List('List')
+              PsiReferenceParameterList
+                PsiJavaToken:LT('<')
+                PsiTypeElement:Integer
+                  PsiJavaCodeReferenceElement:Integer
+                    PsiIdentifier:Integer('Integer')
+                    PsiReferenceParameterList
+                      <empty list>
+                PsiJavaToken:GT('>')
+          PsiErrorElement:Identifier expected
+            <empty list>
+        PsiWhiteSpace('\n    ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/InstanceOf0.java b/java/java-tests/testData/psi/parser-full/expressionParsing/InstanceOf0.java
new file mode 100644
index 0000000..026c1e6
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/InstanceOf0.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    return a instanceof String;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/InstanceOf0.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/InstanceOf0.txt
new file mode 100644
index 0000000..453233d
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/InstanceOf0.txt
@@ -0,0 +1,44 @@
+PsiJavaFile:InstanceOf0.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiReturnStatement
+          PsiKeyword:return('return')
+          PsiWhiteSpace(' ')
+          PsiInstanceofExpression:a instanceof String
+            PsiReferenceExpression:a
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:a('a')
+            PsiWhiteSpace(' ')
+            PsiKeyword:instanceof('instanceof')
+            PsiWhiteSpace(' ')
+            PsiTypeElement:String
+              PsiJavaCodeReferenceElement:String
+                PsiIdentifier:String('String')
+                PsiReferenceParameterList
+                  <empty list>
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/InstanceOf1.java b/java/java-tests/testData/psi/parser-full/expressionParsing/InstanceOf1.java
new file mode 100644
index 0000000..9fbe462
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/InstanceOf1.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    return a instanceof
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/InstanceOf1.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/InstanceOf1.txt
new file mode 100644
index 0000000..4e25983
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/InstanceOf1.txt
@@ -0,0 +1,41 @@
+PsiJavaFile:InstanceOf1.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiReturnStatement
+          PsiKeyword:return('return')
+          PsiWhiteSpace(' ')
+          PsiInstanceofExpression:a instanceof
+            PsiReferenceExpression:a
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:a('a')
+            PsiWhiteSpace(' ')
+            PsiKeyword:instanceof('instanceof')
+            PsiErrorElement:Type expected
+              <empty list>
+          PsiErrorElement:';' expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/New0.java b/java/java-tests/testData/psi/parser-full/expressionParsing/New0.java
new file mode 100644
index 0000000..fd453c8
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/New0.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    new A();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/New0.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/New0.txt
new file mode 100644
index 0000000..9e5f5be
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/New0.txt
@@ -0,0 +1,41 @@
+PsiJavaFile:New0.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiNewExpression:new A()
+            PsiKeyword:new('new')
+            PsiReferenceParameterList
+              <empty list>
+            PsiWhiteSpace(' ')
+            PsiJavaCodeReferenceElement:A
+              PsiIdentifier:A('A')
+              PsiReferenceParameterList
+                <empty list>
+            PsiExpressionList
+              PsiJavaToken:LPARENTH('(')
+              PsiJavaToken:RPARENTH(')')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/New1.java b/java/java-tests/testData/psi/parser-full/expressionParsing/New1.java
new file mode 100644
index 0000000..b3e3100
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/New1.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    new A[1][];
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/New1.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/New1.txt
new file mode 100644
index 0000000..0d88474
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/New1.txt
@@ -0,0 +1,44 @@
+PsiJavaFile:New1.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiNewExpression:new A[1][]
+            PsiKeyword:new('new')
+            PsiReferenceParameterList
+              <empty list>
+            PsiWhiteSpace(' ')
+            PsiJavaCodeReferenceElement:A
+              PsiIdentifier:A('A')
+              PsiReferenceParameterList
+                <empty list>
+            PsiJavaToken:LBRACKET('[')
+            PsiLiteralExpression:1
+              PsiJavaToken:INTEGER_LITERAL('1')
+            PsiJavaToken:RBRACKET(']')
+            PsiJavaToken:LBRACKET('[')
+            PsiJavaToken:RBRACKET(']')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/New10.java b/java/java-tests/testData/psi/parser-full/expressionParsing/New10.java
new file mode 100644
index 0000000..8bdc034
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/New10.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    new int()
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/New10.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/New10.txt
new file mode 100644
index 0000000..145c065
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/New10.txt
@@ -0,0 +1,46 @@
+PsiJavaFile:New10.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiNewExpression:new int
+            PsiKeyword:new('new')
+            PsiReferenceParameterList
+              <empty list>
+            PsiWhiteSpace(' ')
+            PsiKeyword:int('int')
+            PsiErrorElement:'[' expected
+              <empty list>
+          PsiErrorElement:';' expected
+            <empty list>
+        PsiExpressionStatement
+          PsiParenthesizedExpression:()
+            PsiJavaToken:LPARENTH('(')
+            PsiErrorElement:Expression expected
+              <empty list>
+            PsiJavaToken:RPARENTH(')')
+          PsiErrorElement:';' expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/New11.java b/java/java-tests/testData/psi/parser-full/expressionParsing/New11.java
new file mode 100644
index 0000000..f00d237
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/New11.java
@@ -0,0 +1,5 @@
+class A{
+  {
+    return new String[0;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/New11.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/New11.txt
new file mode 100644
index 0000000..cc5bf92
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/New11.txt
@@ -0,0 +1,45 @@
+PsiJavaFile:New11.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiReturnStatement
+          PsiKeyword:return('return')
+          PsiWhiteSpace(' ')
+          PsiNewExpression:new String[0
+            PsiKeyword:new('new')
+            PsiReferenceParameterList
+              <empty list>
+            PsiWhiteSpace(' ')
+            PsiJavaCodeReferenceElement:String
+              PsiIdentifier:String('String')
+              PsiReferenceParameterList
+                <empty list>
+            PsiJavaToken:LBRACKET('[')
+            PsiLiteralExpression:0
+              PsiJavaToken:INTEGER_LITERAL('0')
+            PsiErrorElement:']' expected
+              <empty list>
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/New12.java b/java/java-tests/testData/psi/parser-full/expressionParsing/New12.java
new file mode 100644
index 0000000..ae12bbd
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/New12.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    new int[1][2];
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/New12.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/New12.txt
new file mode 100644
index 0000000..e6a8428
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/New12.txt
@@ -0,0 +1,43 @@
+PsiJavaFile:New12.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiNewExpression:new int[1][2]
+            PsiKeyword:new('new')
+            PsiReferenceParameterList
+              <empty list>
+            PsiWhiteSpace(' ')
+            PsiKeyword:int('int')
+            PsiJavaToken:LBRACKET('[')
+            PsiLiteralExpression:1
+              PsiJavaToken:INTEGER_LITERAL('1')
+            PsiJavaToken:RBRACKET(']')
+            PsiJavaToken:LBRACKET('[')
+            PsiLiteralExpression:2
+              PsiJavaToken:INTEGER_LITERAL('2')
+            PsiJavaToken:RBRACKET(']')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/New13.java b/java/java-tests/testData/psi/parser-full/expressionParsing/New13.java
new file mode 100644
index 0000000..6f8728f
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/New13.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    new int[1][][2];
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/New13.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/New13.txt
new file mode 100644
index 0000000..a86575e
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/New13.txt
@@ -0,0 +1,54 @@
+PsiJavaFile:New13.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiNewExpression:new int[1][][
+            PsiKeyword:new('new')
+            PsiReferenceParameterList
+              <empty list>
+            PsiWhiteSpace(' ')
+            PsiKeyword:int('int')
+            PsiJavaToken:LBRACKET('[')
+            PsiLiteralExpression:1
+              PsiJavaToken:INTEGER_LITERAL('1')
+            PsiJavaToken:RBRACKET(']')
+            PsiJavaToken:LBRACKET('[')
+            PsiJavaToken:RBRACKET(']')
+            PsiJavaToken:LBRACKET('[')
+            PsiErrorElement:']' expected
+              <empty list>
+          PsiErrorElement:';' expected
+            <empty list>
+        PsiExpressionStatement
+          PsiLiteralExpression:2
+            PsiJavaToken:INTEGER_LITERAL('2')
+          PsiErrorElement:';' expected
+            <empty list>
+        PsiErrorElement:Unexpected token
+          PsiJavaToken:RBRACKET(']')
+        PsiEmptyStatement
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/New14.java b/java/java-tests/testData/psi/parser-full/expressionParsing/New14.java
new file mode 100644
index 0000000..f1b6c3a
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/New14.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    Q.new A();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/New14.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/New14.txt
new file mode 100644
index 0000000..f31bef2
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/New14.txt
@@ -0,0 +1,46 @@
+PsiJavaFile:New14.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiNewExpression:Q.new A()
+            PsiReferenceExpression:Q
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:Q('Q')
+            PsiJavaToken:DOT('.')
+            PsiKeyword:new('new')
+            PsiReferenceParameterList
+              <empty list>
+            PsiWhiteSpace(' ')
+            PsiJavaCodeReferenceElement:A
+              PsiIdentifier:A('A')
+              PsiReferenceParameterList
+                <empty list>
+            PsiExpressionList
+              PsiJavaToken:LPARENTH('(')
+              PsiJavaToken:RPARENTH(')')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/New15.java b/java/java-tests/testData/psi/parser-full/expressionParsing/New15.java
new file mode 100644
index 0000000..17f3c59
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/New15.java
@@ -0,0 +1,5 @@
+class Foo {
+  {
+    new A<>();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/New15.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/New15.txt
new file mode 100644
index 0000000..dbcf30f8
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/New15.txt
@@ -0,0 +1,46 @@
+PsiJavaFile:New15.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiNewExpression:new A<>()
+            PsiKeyword:new('new')
+            PsiReferenceParameterList
+              <empty list>
+            PsiWhiteSpace(' ')
+            PsiJavaCodeReferenceElement:A<>
+              PsiIdentifier:A('A')
+              PsiReferenceParameterList
+                PsiJavaToken:LT('<')
+                PsiTypeElement:
+                  PsiTypeElement:DIAMOND
+                    <empty list>
+                PsiJavaToken:GT('>')
+            PsiExpressionList
+              PsiJavaToken:LPARENTH('(')
+              PsiJavaToken:RPARENTH(')')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/New2.java b/java/java-tests/testData/psi/parser-full/expressionParsing/New2.java
new file mode 100644
index 0000000..9390a87
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/New2.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    new A[];
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/New2.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/New2.txt
new file mode 100644
index 0000000..d7e60a7
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/New2.txt
@@ -0,0 +1,42 @@
+PsiJavaFile:New2.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiNewExpression:new A[]
+            PsiKeyword:new('new')
+            PsiReferenceParameterList
+              <empty list>
+            PsiWhiteSpace(' ')
+            PsiJavaCodeReferenceElement:A
+              PsiIdentifier:A('A')
+              PsiReferenceParameterList
+                <empty list>
+            PsiJavaToken:LBRACKET('[')
+            PsiJavaToken:RBRACKET(']')
+            PsiErrorElement:Array initializer expected
+              <empty list>
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/New3.java b/java/java-tests/testData/psi/parser-full/expressionParsing/New3.java
new file mode 100644
index 0000000..8d392a9
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/New3.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    new A[][1];
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/New3.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/New3.txt
new file mode 100644
index 0000000..353fe1e
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/New3.txt
@@ -0,0 +1,53 @@
+PsiJavaFile:New3.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiNewExpression:new A[][
+            PsiKeyword:new('new')
+            PsiReferenceParameterList
+              <empty list>
+            PsiWhiteSpace(' ')
+            PsiJavaCodeReferenceElement:A
+              PsiIdentifier:A('A')
+              PsiReferenceParameterList
+                <empty list>
+            PsiJavaToken:LBRACKET('[')
+            PsiJavaToken:RBRACKET(']')
+            PsiJavaToken:LBRACKET('[')
+            PsiErrorElement:']' expected
+              <empty list>
+          PsiErrorElement:';' expected
+            <empty list>
+        PsiExpressionStatement
+          PsiLiteralExpression:1
+            PsiJavaToken:INTEGER_LITERAL('1')
+          PsiErrorElement:';' expected
+            <empty list>
+        PsiErrorElement:Unexpected token
+          PsiJavaToken:RBRACKET(']')
+        PsiEmptyStatement
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/New4.java b/java/java-tests/testData/psi/parser-full/expressionParsing/New4.java
new file mode 100644
index 0000000..4867e7a
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/New4.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    new A[][]{null};
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/New4.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/New4.txt
new file mode 100644
index 0000000..86b1348
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/New4.txt
@@ -0,0 +1,47 @@
+PsiJavaFile:New4.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiNewExpression:new A[][]{null}
+            PsiKeyword:new('new')
+            PsiReferenceParameterList
+              <empty list>
+            PsiWhiteSpace(' ')
+            PsiJavaCodeReferenceElement:A
+              PsiIdentifier:A('A')
+              PsiReferenceParameterList
+                <empty list>
+            PsiJavaToken:LBRACKET('[')
+            PsiJavaToken:RBRACKET(']')
+            PsiJavaToken:LBRACKET('[')
+            PsiJavaToken:RBRACKET(']')
+            PsiArrayInitializerExpression:{null}
+              PsiJavaToken:LBRACE('{')
+              PsiLiteralExpression:null
+                PsiJavaToken:NULL_KEYWORD('null')
+              PsiJavaToken:RBRACE('}')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/New5.java b/java/java-tests/testData/psi/parser-full/expressionParsing/New5.java
new file mode 100644
index 0000000..594c944
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/New5.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    new A[1]{null};
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/New5.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/New5.txt
new file mode 100644
index 0000000..45a6ba1
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/New5.txt
@@ -0,0 +1,54 @@
+PsiJavaFile:New5.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiNewExpression:new A[1]
+            PsiKeyword:new('new')
+            PsiReferenceParameterList
+              <empty list>
+            PsiWhiteSpace(' ')
+            PsiJavaCodeReferenceElement:A
+              PsiIdentifier:A('A')
+              PsiReferenceParameterList
+                <empty list>
+            PsiJavaToken:LBRACKET('[')
+            PsiLiteralExpression:1
+              PsiJavaToken:INTEGER_LITERAL('1')
+            PsiJavaToken:RBRACKET(']')
+          PsiErrorElement:';' expected
+            <empty list>
+        PsiBlockStatement
+          PsiCodeBlock
+            PsiJavaToken:LBRACE('{')
+            PsiExpressionStatement
+              PsiLiteralExpression:null
+                PsiJavaToken:NULL_KEYWORD('null')
+              PsiErrorElement:';' expected
+                <empty list>
+            PsiJavaToken:RBRACE('}')
+        PsiEmptyStatement
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/New6.java b/java/java-tests/testData/psi/parser-full/expressionParsing/New6.java
new file mode 100644
index 0000000..2db026e
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/New6.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    new
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/New6.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/New6.txt
new file mode 100644
index 0000000..92fa500
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/New6.txt
@@ -0,0 +1,36 @@
+PsiJavaFile:New6.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiNewExpression:new
+            PsiKeyword:new('new')
+            PsiReferenceParameterList
+              <empty list>
+            PsiErrorElement:Identifier expected
+              <empty list>
+          PsiErrorElement:';' expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/New7.java b/java/java-tests/testData/psi/parser-full/expressionParsing/New7.java
new file mode 100644
index 0000000..c5bb6f5
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/New7.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    new A
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/New7.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/New7.txt
new file mode 100644
index 0000000..5f6ba19
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/New7.txt
@@ -0,0 +1,41 @@
+PsiJavaFile:New7.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiNewExpression:new A
+            PsiKeyword:new('new')
+            PsiReferenceParameterList
+              <empty list>
+            PsiWhiteSpace(' ')
+            PsiJavaCodeReferenceElement:A
+              PsiIdentifier:A('A')
+              PsiReferenceParameterList
+                <empty list>
+            PsiErrorElement:'(' or '[' expected
+              <empty list>
+          PsiErrorElement:';' expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/New8.java b/java/java-tests/testData/psi/parser-full/expressionParsing/New8.java
new file mode 100644
index 0000000..79e6120
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/New8.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    new A[
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/New8.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/New8.txt
new file mode 100644
index 0000000..1dd0543
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/New8.txt
@@ -0,0 +1,42 @@
+PsiJavaFile:New8.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiNewExpression:new A[
+            PsiKeyword:new('new')
+            PsiReferenceParameterList
+              <empty list>
+            PsiWhiteSpace(' ')
+            PsiJavaCodeReferenceElement:A
+              PsiIdentifier:A('A')
+              PsiReferenceParameterList
+                <empty list>
+            PsiJavaToken:LBRACKET('[')
+            PsiErrorElement:']' expected
+              <empty list>
+          PsiErrorElement:';' expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/New9.java b/java/java-tests/testData/psi/parser-full/expressionParsing/New9.java
new file mode 100644
index 0000000..24c75d0
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/New9.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    new int
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/New9.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/New9.txt
new file mode 100644
index 0000000..66924c8
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/New9.txt
@@ -0,0 +1,38 @@
+PsiJavaFile:New9.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiNewExpression:new int
+            PsiKeyword:new('new')
+            PsiReferenceParameterList
+              <empty list>
+            PsiWhiteSpace(' ')
+            PsiKeyword:int('int')
+            PsiErrorElement:'[' expected
+              <empty list>
+          PsiErrorElement:';' expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/NewInExprList.java b/java/java-tests/testData/psi/parser-full/expressionParsing/NewInExprList.java
new file mode 100644
index 0000000..d6dcd3a
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/NewInExprList.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    call(new );
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/NewInExprList.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/NewInExprList.txt
new file mode 100644
index 0000000..e2cdb68
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/NewInExprList.txt
@@ -0,0 +1,45 @@
+PsiJavaFile:NewInExprList.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiMethodCallExpression:call(new )
+            PsiReferenceExpression:call
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:call('call')
+            PsiExpressionList
+              PsiJavaToken:LPARENTH('(')
+              PsiNewExpression:new
+                PsiKeyword:new('new')
+                PsiReferenceParameterList
+                  <empty list>
+                PsiErrorElement:Identifier expected
+                  <empty list>
+              PsiWhiteSpace(' ')
+              PsiJavaToken:RPARENTH(')')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
+    
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/Not0.java b/java/java-tests/testData/psi/parser-full/expressionParsing/Not0.java
new file mode 100644
index 0000000..a9ee83e
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/Not0.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    return !!a;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/Not0.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/Not0.txt
new file mode 100644
index 0000000..0bb4190
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/Not0.txt
@@ -0,0 +1,39 @@
+PsiJavaFile:Not0.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiReturnStatement
+          PsiKeyword:return('return')
+          PsiWhiteSpace(' ')
+          PsiPrefixExpression:!!a
+            PsiJavaToken:EXCL('!')
+            PsiPrefixExpression:!a
+              PsiJavaToken:EXCL('!')
+              PsiReferenceExpression:a
+                PsiReferenceParameterList
+                  <empty list>
+                PsiIdentifier:a('a')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/Not1.java b/java/java-tests/testData/psi/parser-full/expressionParsing/Not1.java
new file mode 100644
index 0000000..b2df763
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/Not1.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    return !
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/Not1.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/Not1.txt
new file mode 100644
index 0000000..fecb186
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/Not1.txt
@@ -0,0 +1,36 @@
+PsiJavaFile:Not1.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiReturnStatement
+          PsiKeyword:return('return')
+          PsiWhiteSpace(' ')
+          PsiPrefixExpression:!
+            PsiJavaToken:EXCL('!')
+            PsiErrorElement:Expression expected
+              <empty list>
+          PsiErrorElement:';' expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/Or0.java b/java/java-tests/testData/psi/parser-full/expressionParsing/Or0.java
new file mode 100644
index 0000000..b28e186
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/Or0.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    return a | b | c;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/Or0.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/Or0.txt
new file mode 100644
index 0000000..d53ef8a
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/Or0.txt
@@ -0,0 +1,50 @@
+PsiJavaFile:Or0.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiReturnStatement
+          PsiKeyword:return('return')
+          PsiWhiteSpace(' ')
+          PsiPolyadicExpression: a | b | c
+            PsiReferenceExpression:a
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:a('a')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:OR('|')
+            PsiWhiteSpace(' ')
+            PsiReferenceExpression:b
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:b('b')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:OR('|')
+            PsiWhiteSpace(' ')
+            PsiReferenceExpression:c
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:c('c')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/Or1.java b/java/java-tests/testData/psi/parser-full/expressionParsing/Or1.java
new file mode 100644
index 0000000..9dc1532
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/Or1.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+     a |
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/Or1.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/Or1.txt
new file mode 100644
index 0000000..e0a573e
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/Or1.txt
@@ -0,0 +1,39 @@
+PsiJavaFile:Or1.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n     ')
+        PsiExpressionStatement
+          PsiBinaryExpression:a |
+            PsiReferenceExpression:a
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:a('a')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:OR('|')
+            PsiErrorElement:Expression expected
+              <empty list>
+          PsiErrorElement:';' expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/Parenth.java b/java/java-tests/testData/psi/parser-full/expressionParsing/Parenth.java
new file mode 100644
index 0000000..7a30107
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/Parenth.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    int h = (c);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/Parenth.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/Parenth.txt
new file mode 100644
index 0000000..aa3855a
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/Parenth.txt
@@ -0,0 +1,46 @@
+PsiJavaFile:Parenth.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiDeclarationStatement
+          PsiLocalVariable:h
+            PsiModifierList:
+              <empty list>
+            PsiTypeElement:int
+              PsiKeyword:int('int')
+            PsiWhiteSpace(' ')
+            PsiIdentifier:h('h')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:EQ('=')
+            PsiWhiteSpace(' ')
+            PsiParenthesizedExpression:(c)
+              PsiJavaToken:LPARENTH('(')
+              PsiReferenceExpression:c
+                PsiReferenceParameterList
+                  <empty list>
+                PsiIdentifier:c('c')
+              PsiJavaToken:RPARENTH(')')
+            PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/Parenth1.java b/java/java-tests/testData/psi/parser-full/expressionParsing/Parenth1.java
new file mode 100644
index 0000000..db91e65
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/Parenth1.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    (this).f--;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/Parenth1.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/Parenth1.txt
new file mode 100644
index 0000000..2ccbed6
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/Parenth1.txt
@@ -0,0 +1,43 @@
+PsiJavaFile:Parenth1.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiPostfixExpression:(this).f--
+            PsiReferenceExpression:(this).f
+              PsiParenthesizedExpression:(this)
+                PsiJavaToken:LPARENTH('(')
+                PsiThisExpression:this
+                  PsiReferenceParameterList
+                    <empty list>
+                  PsiKeyword:this('this')
+                PsiJavaToken:RPARENTH(')')
+              PsiJavaToken:DOT('.')
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:f('f')
+            PsiJavaToken:MINUSMINUS('--')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/PinesInReferenceExpression0.java b/java/java-tests/testData/psi/parser-full/expressionParsing/PinesInReferenceExpression0.java
new file mode 100644
index 0000000..57b5d18
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/PinesInReferenceExpression0.java
@@ -0,0 +1,5 @@
+class Foo {
+  {
+    Collections.<String>sort(null);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/PinesInReferenceExpression0.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/PinesInReferenceExpression0.txt
new file mode 100644
index 0000000..e629a32
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/PinesInReferenceExpression0.txt
@@ -0,0 +1,51 @@
+PsiJavaFile:PinesInReferenceExpression0.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiMethodCallExpression:Collections.<String>sort(null)
+            PsiReferenceExpression:Collections.<String>sort
+              PsiReferenceExpression:Collections
+                PsiReferenceParameterList
+                  <empty list>
+                PsiIdentifier:Collections('Collections')
+              PsiJavaToken:DOT('.')
+              PsiReferenceParameterList
+                PsiJavaToken:LT('<')
+                PsiTypeElement:String
+                  PsiJavaCodeReferenceElement:String
+                    PsiIdentifier:String('String')
+                    PsiReferenceParameterList
+                      <empty list>
+                PsiJavaToken:GT('>')
+              PsiIdentifier:sort('sort')
+            PsiExpressionList
+              PsiJavaToken:LPARENTH('(')
+              PsiLiteralExpression:null
+                PsiJavaToken:NULL_KEYWORD('null')
+              PsiJavaToken:RPARENTH(')')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/PinesInReferenceExpression1.java b/java/java-tests/testData/psi/parser-full/expressionParsing/PinesInReferenceExpression1.java
new file mode 100644
index 0000000..89d6f64
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/PinesInReferenceExpression1.java
@@ -0,0 +1,5 @@
+class Foo {
+  {
+    this.<String>sort(null);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/PinesInReferenceExpression1.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/PinesInReferenceExpression1.txt
new file mode 100644
index 0000000..03ae1c3
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/PinesInReferenceExpression1.txt
@@ -0,0 +1,52 @@
+PsiJavaFile:PinesInReferenceExpression1.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiMethodCallExpression:this.<String>sort(null)
+            PsiReferenceExpression:this.<String>sort
+              PsiThisExpression:this
+                PsiReferenceParameterList
+                  <empty list>
+                PsiKeyword:this('this')
+              PsiJavaToken:DOT('.')
+              PsiReferenceParameterList
+                PsiJavaToken:LT('<')
+                PsiTypeElement:String
+                  PsiJavaCodeReferenceElement:String
+                    PsiIdentifier:String('String')
+                    PsiReferenceParameterList
+                      <empty list>
+                PsiJavaToken:GT('>')
+              PsiIdentifier:sort('sort')
+            PsiExpressionList
+              PsiJavaToken:LPARENTH('(')
+              PsiLiteralExpression:null
+                PsiJavaToken:NULL_KEYWORD('null')
+              PsiJavaToken:RPARENTH(')')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
+    
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/PrimitiveArrayClassObjectAccessError.java b/java/java-tests/testData/psi/parser-full/expressionParsing/PrimitiveArrayClassObjectAccessError.java
new file mode 100644
index 0000000..1a46cf0
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/PrimitiveArrayClassObjectAccessError.java
@@ -0,0 +1,5 @@
+class C {
+  {
+    int[].cla;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/PrimitiveArrayClassObjectAccessError.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/PrimitiveArrayClassObjectAccessError.txt
new file mode 100644
index 0000000..5ce0dc6
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/PrimitiveArrayClassObjectAccessError.txt
@@ -0,0 +1,43 @@
+PsiJavaFile:PrimitiveArrayClassObjectAccessError.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiReferenceExpression:int[].cla
+            PsiClassObjectAccessExpression:int[]
+              PsiTypeElement:int[]
+                PsiTypeElement:int
+                  PsiKeyword:int('int')
+                PsiJavaToken:LBRACKET('[')
+                PsiJavaToken:RBRACKET(']')
+              PsiErrorElement:.class expected
+                <empty list>
+            PsiJavaToken:DOT('.')
+            PsiReferenceParameterList
+              <empty list>
+            PsiIdentifier:cla('cla')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/PrimitiveClassObjectAccess.java b/java/java-tests/testData/psi/parser-full/expressionParsing/PrimitiveClassObjectAccess.java
new file mode 100644
index 0000000..ad7dc83
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/PrimitiveClassObjectAccess.java
@@ -0,0 +1,5 @@
+class C {
+  {
+    int.class;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/PrimitiveClassObjectAccess.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/PrimitiveClassObjectAccess.txt
new file mode 100644
index 0000000..3664bb0
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/PrimitiveClassObjectAccess.txt
@@ -0,0 +1,35 @@
+PsiJavaFile:PrimitiveClassObjectAccess.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiClassObjectAccessExpression:int.class
+            PsiTypeElement:int
+              PsiKeyword:int('int')
+            PsiJavaToken:DOT('.')
+            PsiKeyword:class('class')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/PrimitiveClassObjectAccessError.java b/java/java-tests/testData/psi/parser-full/expressionParsing/PrimitiveClassObjectAccessError.java
new file mode 100644
index 0000000..196d587
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/PrimitiveClassObjectAccessError.java
@@ -0,0 +1,5 @@
+class C {
+  {
+    int.cla;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/PrimitiveClassObjectAccessError.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/PrimitiveClassObjectAccessError.txt
new file mode 100644
index 0000000..2c86be2
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/PrimitiveClassObjectAccessError.txt
@@ -0,0 +1,40 @@
+PsiJavaFile:PrimitiveClassObjectAccessError.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiReferenceExpression:int.cla
+            PsiClassObjectAccessExpression:int
+              PsiTypeElement:int
+                PsiKeyword:int('int')
+              PsiErrorElement:.class expected
+                <empty list>
+            PsiJavaToken:DOT('.')
+            PsiReferenceParameterList
+              <empty list>
+            PsiIdentifier:cla('cla')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/QualifiedSuperMethodCall.java b/java/java-tests/testData/psi/parser-full/expressionParsing/QualifiedSuperMethodCall.java
new file mode 100644
index 0000000..9713a7b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/QualifiedSuperMethodCall.java
@@ -0,0 +1,5 @@
+class C extends D.E {
+  C() {
+     new D().super(0);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/QualifiedSuperMethodCall.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/QualifiedSuperMethodCall.txt
new file mode 100644
index 0000000..02cb11f
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/QualifiedSuperMethodCall.txt
@@ -0,0 +1,71 @@
+PsiJavaFile:QualifiedSuperMethodCall.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiReferenceList
+      PsiKeyword:extends('extends')
+      PsiWhiteSpace(' ')
+      PsiJavaCodeReferenceElement:D.E
+        PsiJavaCodeReferenceElement:D
+          PsiIdentifier:D('D')
+          PsiReferenceParameterList
+            <empty list>
+        PsiJavaToken:DOT('.')
+        PsiIdentifier:E('E')
+        PsiReferenceParameterList
+          <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiMethod:C
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiIdentifier:C('C')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n     ')
+        PsiExpressionStatement
+          PsiMethodCallExpression:new D().super(0)
+            PsiReferenceExpression:new D().super
+              PsiNewExpression:new D()
+                PsiKeyword:new('new')
+                PsiReferenceParameterList
+                  <empty list>
+                PsiWhiteSpace(' ')
+                PsiJavaCodeReferenceElement:D
+                  PsiIdentifier:D('D')
+                  PsiReferenceParameterList
+                    <empty list>
+                PsiExpressionList
+                  PsiJavaToken:LPARENTH('(')
+                  PsiJavaToken:RPARENTH(')')
+              PsiJavaToken:DOT('.')
+              PsiKeyword:super('super')
+            PsiExpressionList
+              PsiJavaToken:LPARENTH('(')
+              PsiLiteralExpression:0
+                PsiJavaToken:INTEGER_LITERAL('0')
+              PsiJavaToken:RPARENTH(')')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/QualifiedSuperMethodCall1.java b/java/java-tests/testData/psi/parser-full/expressionParsing/QualifiedSuperMethodCall1.java
new file mode 100644
index 0000000..7553425
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/QualifiedSuperMethodCall1.java
@@ -0,0 +1,5 @@
+class C extends D.E {
+  C(D d) {
+     d.super(0);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/QualifiedSuperMethodCall1.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/QualifiedSuperMethodCall1.txt
new file mode 100644
index 0000000..faac0de
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/QualifiedSuperMethodCall1.txt
@@ -0,0 +1,73 @@
+PsiJavaFile:QualifiedSuperMethodCall1.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiReferenceList
+      PsiKeyword:extends('extends')
+      PsiWhiteSpace(' ')
+      PsiJavaCodeReferenceElement:D.E
+        PsiJavaCodeReferenceElement:D
+          PsiIdentifier:D('D')
+          PsiReferenceParameterList
+            <empty list>
+        PsiJavaToken:DOT('.')
+        PsiIdentifier:E('E')
+        PsiReferenceParameterList
+          <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiMethod:C
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiIdentifier:C('C')
+      PsiParameterList:(D d)
+        PsiJavaToken:LPARENTH('(')
+        PsiParameter:d
+          PsiModifierList:
+            <empty list>
+          PsiTypeElement:D
+            PsiJavaCodeReferenceElement:D
+              PsiIdentifier:D('D')
+              PsiReferenceParameterList
+                <empty list>
+          PsiWhiteSpace(' ')
+          PsiIdentifier:d('d')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n     ')
+        PsiExpressionStatement
+          PsiMethodCallExpression:d.super(0)
+            PsiReferenceExpression:d.super
+              PsiReferenceExpression:d
+                PsiReferenceParameterList
+                  <empty list>
+                PsiIdentifier:d('d')
+              PsiJavaToken:DOT('.')
+              PsiKeyword:super('super')
+            PsiExpressionList
+              PsiJavaToken:LPARENTH('(')
+              PsiLiteralExpression:0
+                PsiJavaToken:INTEGER_LITERAL('0')
+              PsiJavaToken:RPARENTH(')')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/ShiftRight.java b/java/java-tests/testData/psi/parser-full/expressionParsing/ShiftRight.java
new file mode 100644
index 0000000..393673b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/ShiftRight.java
@@ -0,0 +1,5 @@
+class Test {
+    boolean method() {
+        x >>= 2;
+    }
+} 
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/ShiftRight.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/ShiftRight.txt
new file mode 100644
index 0000000..a1df6f3
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/ShiftRight.txt
@@ -0,0 +1,52 @@
+PsiJavaFile:ShiftRight.java
+  PsiImportList
+    <empty list>
+  PsiClass:Test
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Test('Test')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n    ')
+    PsiMethod:method
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:boolean
+        PsiKeyword:boolean('boolean')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:method('method')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n        ')
+        PsiExpressionStatement
+          PsiAssignmentExpression:x >>= 2
+            PsiReferenceExpression:x
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:x('x')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:GTGTEQ('>>=')
+            PsiWhiteSpace(' ')
+            PsiLiteralExpression:2
+              PsiJavaToken:INTEGER_LITERAL('2')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n    ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/SuperMethodCallTypeParameterList.java b/java/java-tests/testData/psi/parser-full/expressionParsing/SuperMethodCallTypeParameterList.java
new file mode 100644
index 0000000..5c15dd4
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/SuperMethodCallTypeParameterList.java
@@ -0,0 +1,5 @@
+class E {
+    void fff() {
+        super();
+    }
+}
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/SuperMethodCallTypeParameterList.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/SuperMethodCallTypeParameterList.txt
new file mode 100644
index 0000000..7fdf96e9
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/SuperMethodCallTypeParameterList.txt
@@ -0,0 +1,50 @@
+PsiJavaFile:SuperMethodCallTypeParameterList.java
+  PsiImportList
+    <empty list>
+  PsiClass:E
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:E('E')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n    ')
+    PsiMethod:fff
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:fff('fff')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n        ')
+        PsiExpressionStatement
+          PsiMethodCallExpression:super()
+            PsiReferenceExpression:super
+              PsiReferenceParameterList
+                <empty list>
+              PsiKeyword:super('super')
+            PsiExpressionList
+              PsiJavaToken:LPARENTH('(')
+              PsiJavaToken:RPARENTH(')')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n    ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/Xor0.java b/java/java-tests/testData/psi/parser-full/expressionParsing/Xor0.java
new file mode 100644
index 0000000..1c72e2b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/Xor0.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    return a ^ b ^ c;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/Xor0.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/Xor0.txt
new file mode 100644
index 0000000..bd93036
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/Xor0.txt
@@ -0,0 +1,50 @@
+PsiJavaFile:Xor0.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiReturnStatement
+          PsiKeyword:return('return')
+          PsiWhiteSpace(' ')
+          PsiPolyadicExpression: a ^ b ^ c
+            PsiReferenceExpression:a
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:a('a')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:XOR('^')
+            PsiWhiteSpace(' ')
+            PsiReferenceExpression:b
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:b('b')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:XOR('^')
+            PsiWhiteSpace(' ')
+            PsiReferenceExpression:c
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:c('c')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/Xor1.java b/java/java-tests/testData/psi/parser-full/expressionParsing/Xor1.java
new file mode 100644
index 0000000..fed93a9
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/Xor1.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+     a ^
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/Xor1.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/Xor1.txt
new file mode 100644
index 0000000..fb68112
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/expressionParsing/Xor1.txt
@@ -0,0 +1,39 @@
+PsiJavaFile:Xor1.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n     ')
+        PsiExpressionStatement
+          PsiBinaryExpression:a ^
+            PsiReferenceExpression:a
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:a('a')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:XOR('^')
+            PsiErrorElement:Expression expected
+              <empty list>
+          PsiErrorElement:';' expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/importParsing/StaticImport.java b/java/java-tests/testData/psi/parser-full/importParsing/StaticImport.java
new file mode 100644
index 0000000..788beac
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/importParsing/StaticImport.java
@@ -0,0 +1 @@
+import static java.util.Arrays.*;
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/importParsing/StaticImport.txt b/java/java-tests/testData/psi/parser-full/importParsing/StaticImport.txt
new file mode 100644
index 0000000..9dc3862
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/importParsing/StaticImport.txt
@@ -0,0 +1,24 @@
+PsiJavaFile:StaticImport.java
+  PsiImportList
+    PsiImportStaticStatement
+      PsiKeyword:import('import')
+      PsiWhiteSpace(' ')
+      PsiKeyword:static('static')
+      PsiWhiteSpace(' ')
+      PsiJavaCodeReferenceElement:java.util.Arrays
+        PsiJavaCodeReferenceElement:java.util
+          PsiJavaCodeReferenceElement:java
+            PsiIdentifier:java('java')
+            PsiReferenceParameterList
+              <empty list>
+          PsiJavaToken:DOT('.')
+          PsiIdentifier:util('util')
+          PsiReferenceParameterList
+            <empty list>
+        PsiJavaToken:DOT('.')
+        PsiIdentifier:Arrays('Arrays')
+        PsiReferenceParameterList
+          <empty list>
+      PsiJavaToken:DOT('.')
+      PsiJavaToken:ASTERISK('*')
+      PsiJavaToken:SEMICOLON(';')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/importParsing/StaticImport1.java b/java/java-tests/testData/psi/parser-full/importParsing/StaticImport1.java
new file mode 100644
index 0000000..05a80a8
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/importParsing/StaticImport1.java
@@ -0,0 +1 @@
+import static java.util.Arrays.sort;
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/importParsing/StaticImport1.txt b/java/java-tests/testData/psi/parser-full/importParsing/StaticImport1.txt
new file mode 100644
index 0000000..8e5aee8
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/importParsing/StaticImport1.txt
@@ -0,0 +1,27 @@
+PsiJavaFile:StaticImport1.java
+  PsiImportList
+    PsiImportStaticStatement
+      PsiKeyword:import('import')
+      PsiWhiteSpace(' ')
+      PsiKeyword:static('static')
+      PsiWhiteSpace(' ')
+      PsiImportStaticReferenceElement:java.util.Arrays.sort
+        PsiJavaCodeReferenceElement:java.util.Arrays
+          PsiJavaCodeReferenceElement:java.util
+            PsiJavaCodeReferenceElement:java
+              PsiIdentifier:java('java')
+              PsiReferenceParameterList
+                <empty list>
+            PsiJavaToken:DOT('.')
+            PsiIdentifier:util('util')
+            PsiReferenceParameterList
+              <empty list>
+          PsiJavaToken:DOT('.')
+          PsiIdentifier:Arrays('Arrays')
+          PsiReferenceParameterList
+            <empty list>
+        PsiJavaToken:DOT('.')
+        PsiIdentifier:sort('sort')
+        PsiReferenceParameterList
+          <empty list>
+      PsiJavaToken:SEMICOLON(';')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/importParsing/Unclosed0.java b/java/java-tests/testData/psi/parser-full/importParsing/Unclosed0.java
new file mode 100644
index 0000000..efca996
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/importParsing/Unclosed0.java
@@ -0,0 +1 @@
+import
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/importParsing/Unclosed0.txt b/java/java-tests/testData/psi/parser-full/importParsing/Unclosed0.txt
new file mode 100644
index 0000000..9f9a427
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/importParsing/Unclosed0.txt
@@ -0,0 +1,6 @@
+PsiJavaFile:Unclosed0.java
+  PsiImportList
+    PsiImportStatement
+      PsiKeyword:import('import')
+      PsiErrorElement:Identifier expected
+        <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/importParsing/Unclosed1.java b/java/java-tests/testData/psi/parser-full/importParsing/Unclosed1.java
new file mode 100644
index 0000000..a45e3d1
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/importParsing/Unclosed1.java
@@ -0,0 +1 @@
+import java.awt.*
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/importParsing/Unclosed1.txt b/java/java-tests/testData/psi/parser-full/importParsing/Unclosed1.txt
new file mode 100644
index 0000000..ba32466
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/importParsing/Unclosed1.txt
@@ -0,0 +1,18 @@
+PsiJavaFile:Unclosed1.java
+  PsiImportList
+    PsiImportStatement
+      PsiKeyword:import('import')
+      PsiWhiteSpace(' ')
+      PsiJavaCodeReferenceElement:java.awt
+        PsiJavaCodeReferenceElement:java
+          PsiIdentifier:java('java')
+          PsiReferenceParameterList
+            <empty list>
+        PsiJavaToken:DOT('.')
+        PsiIdentifier:awt('awt')
+        PsiReferenceParameterList
+          <empty list>
+      PsiJavaToken:DOT('.')
+      PsiJavaToken:ASTERISK('*')
+      PsiErrorElement:';' expected
+        <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/importParsing/Unclosed2.java b/java/java-tests/testData/psi/parser-full/importParsing/Unclosed2.java
new file mode 100644
index 0000000..c3d2056
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/importParsing/Unclosed2.java
@@ -0,0 +1 @@
+import java.awt.
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/importParsing/Unclosed2.txt b/java/java-tests/testData/psi/parser-full/importParsing/Unclosed2.txt
new file mode 100644
index 0000000..550ea3e
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/importParsing/Unclosed2.txt
@@ -0,0 +1,17 @@
+PsiJavaFile:Unclosed2.java
+  PsiImportList
+    PsiImportStatement
+      PsiKeyword:import('import')
+      PsiWhiteSpace(' ')
+      PsiJavaCodeReferenceElement:java.awt
+        PsiJavaCodeReferenceElement:java
+          PsiIdentifier:java('java')
+          PsiReferenceParameterList
+            <empty list>
+        PsiJavaToken:DOT('.')
+        PsiIdentifier:awt('awt')
+        PsiReferenceParameterList
+          <empty list>
+      PsiJavaToken:DOT('.')
+      PsiErrorElement:Identifier or '*' expected
+        <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/Adjacent01.java b/java/java-tests/testData/psi/parser-full/javadocParsing/Adjacent01.java
new file mode 100644
index 0000000..e70a6f6
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/Adjacent01.java
@@ -0,0 +1,5 @@
+/**
+ * name{name} abc{}dfg
+ */
+class X{}
+ 
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/Adjacent01.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/Adjacent01.txt
new file mode 100644
index 0000000..0502322
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/Adjacent01.txt
@@ -0,0 +1,32 @@
+PsiJavaFile:Adjacent01.java
+  PsiImportList
+    <empty list>
+  PsiClass:X
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' name')
+      PsiDocToken:DOC_COMMENT_DATA('{')
+      PsiDocToken:DOC_COMMENT_DATA('name')
+      PsiDocToken:DOC_COMMENT_DATA('}')
+      PsiDocToken:DOC_COMMENT_DATA(' abc')
+      PsiDocToken:DOC_COMMENT_DATA('{')
+      PsiDocToken:DOC_COMMENT_DATA('}')
+      PsiDocToken:DOC_COMMENT_DATA('dfg')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:X('X')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/Exception0.java b/java/java-tests/testData/psi/parser-full/javadocParsing/Exception0.java
new file mode 100644
index 0000000..55caef7
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/Exception0.java
@@ -0,0 +1,6 @@
+class Test {
+    /**
+     *  @throws java.lang.Exception
+     */
+     public void foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/Exception0.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/Exception0.txt
new file mode 100644
index 0000000..b393566
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/Exception0.txt
@@ -0,0 +1,66 @@
+PsiJavaFile:Exception0.java
+  PsiImportList
+    <empty list>
+  PsiClass:Test
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Test('Test')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n    ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiWhiteSpace('\n     ')
+        PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+        PsiDocToken:DOC_COMMENT_DATA('  ')
+        PsiDocTag:@throws
+          PsiDocToken:DOC_TAG_NAME('@throws')
+          PsiWhiteSpace(' ')
+          PsiElement(DOC_TAG_VALUE_ELEMENT)
+            PsiElement(DOC_REFERENCE_HOLDER)
+              PsiJavaCodeReferenceElement:java.lang.Exception
+                PsiJavaCodeReferenceElement:java.lang
+                  PsiJavaCodeReferenceElement:java
+                    PsiIdentifier:java('java')
+                    PsiReferenceParameterList
+                      <empty list>
+                  PsiJavaToken:DOT('.')
+                  PsiIdentifier:lang('lang')
+                  PsiReferenceParameterList
+                    <empty list>
+                PsiJavaToken:DOT('.')
+                PsiIdentifier:Exception('Exception')
+                PsiReferenceParameterList
+                  <empty list>
+        PsiWhiteSpace('\n     ')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n     ')
+      PsiModifierList:public
+        PsiKeyword:public('public')
+      PsiTypeParameterList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/IDEADEV_41403.java b/java/java-tests/testData/psi/parser-full/javadocParsing/IDEADEV_41403.java
new file mode 100644
index 0000000..cf15763
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/IDEADEV_41403.java
@@ -0,0 +1,8 @@
+public class Bar {
+// Comment
+/**
+javadoc
+*/
+public class Foo {
+}
+}
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/IDEADEV_41403.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/IDEADEV_41403.txt
new file mode 100644
index 0000000..186ee11
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/IDEADEV_41403.txt
@@ -0,0 +1,47 @@
+PsiJavaFile:IDEADEV_41403.java
+  PsiImportList
+    <empty list>
+  PsiClass:Bar
+    PsiModifierList:public
+      PsiKeyword:public('public')
+    PsiWhiteSpace(' ')
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Bar('Bar')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n')
+    PsiComment(END_OF_LINE_COMMENT)('// Comment')
+    PsiWhiteSpace('\n')
+    PsiClass:Foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiWhiteSpace('\n')
+        PsiDocToken:DOC_COMMENT_DATA('javadoc')
+        PsiWhiteSpace('\n')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n')
+      PsiModifierList:public
+        PsiKeyword:public('public')
+      PsiWhiteSpace(' ')
+      PsiKeyword:class('class')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:Foo('Foo')
+      PsiTypeParameterList
+        <empty list>
+      PsiReferenceList
+        <empty list>
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiJavaToken:LBRACE('{')
+      PsiWhiteSpace('\n')
+      PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/InlineTag0.java b/java/java-tests/testData/psi/parser-full/javadocParsing/InlineTag0.java
new file mode 100644
index 0000000..95a90b2
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/InlineTag0.java
@@ -0,0 +1,4 @@
+/**
+ * Text Text {@link some tag}
+ */
+class C{}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/InlineTag0.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/InlineTag0.txt
new file mode 100644
index 0000000..ab1c90b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/InlineTag0.txt
@@ -0,0 +1,37 @@
+PsiJavaFile:InlineTag0.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' Text Text ')
+      PsiInlineDocTag:@link
+        PsiDocToken:DOC_INLINE_TAG_START('{')
+        PsiDocToken:DOC_TAG_NAME('@link')
+        PsiWhiteSpace(' ')
+        PsiElement(DOC_REFERENCE_HOLDER)
+          PsiJavaCodeReferenceElement:some
+            PsiIdentifier:some('some')
+            PsiReferenceParameterList
+              <empty list>
+        PsiWhiteSpace(' ')
+        PsiDocToken:DOC_COMMENT_DATA('tag')
+        PsiDocToken:DOC_INLINE_TAG_END('}')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/InlineTag1.java b/java/java-tests/testData/psi/parser-full/javadocParsing/InlineTag1.java
new file mode 100644
index 0000000..bb48f7f
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/InlineTag1.java
@@ -0,0 +1,5 @@
+/**
+ * Text Text {@link #somefunc(String,
+ * String, String)}
+ */
+class C{}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/InlineTag1.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/InlineTag1.txt
new file mode 100644
index 0000000..1975d6a
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/InlineTag1.txt
@@ -0,0 +1,60 @@
+PsiJavaFile:InlineTag1.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' Text Text ')
+      PsiInlineDocTag:@link
+        PsiDocToken:DOC_INLINE_TAG_START('{')
+        PsiDocToken:DOC_TAG_NAME('@link')
+        PsiWhiteSpace(' ')
+        PsiElement(DOC_METHOD_OR_FIELD_REF)
+          PsiDocToken:DOC_TAG_VALUE_SHARP_TOKEN('#')
+          PsiDocToken:DOC_TAG_VALUE_TOKEN('somefunc')
+          PsiDocToken:DOC_TAG_VALUE_LPAREN('(')
+          PsiElement(DOC_TAG_VALUE_ELEMENT)
+            PsiElement(DOC_TYPE_HOLDER)
+              PsiTypeElement:String
+                PsiJavaCodeReferenceElement:String
+                  PsiIdentifier:String('String')
+                  PsiReferenceParameterList
+                    <empty list>
+            PsiDocToken:DOC_TAG_VALUE_COMMA(',')
+            PsiWhiteSpace('\n ')
+            PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+            PsiWhiteSpace(' ')
+            PsiElement(DOC_TYPE_HOLDER)
+              PsiTypeElement:String
+                PsiJavaCodeReferenceElement:String
+                  PsiIdentifier:String('String')
+                  PsiReferenceParameterList
+                    <empty list>
+            PsiDocToken:DOC_TAG_VALUE_COMMA(',')
+            PsiWhiteSpace(' ')
+            PsiElement(DOC_TYPE_HOLDER)
+              PsiTypeElement:String
+                PsiJavaCodeReferenceElement:String
+                  PsiIdentifier:String('String')
+                  PsiReferenceParameterList
+                    <empty list>
+          PsiDocToken:DOC_TAG_VALUE_RPAREN(')')
+        PsiDocToken:DOC_INLINE_TAG_END('}')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/InlineTag2.java b/java/java-tests/testData/psi/parser-full/javadocParsing/InlineTag2.java
new file mode 100644
index 0000000..5715ea9
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/InlineTag2.java
@@ -0,0 +1,4 @@
+/**
+ * Text Text {@link #somefunc(String, String, String)}
+ */
+class C{}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/InlineTag2.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/InlineTag2.txt
new file mode 100644
index 0000000..9165b89
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/InlineTag2.txt
@@ -0,0 +1,58 @@
+PsiJavaFile:InlineTag2.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' Text Text ')
+      PsiInlineDocTag:@link
+        PsiDocToken:DOC_INLINE_TAG_START('{')
+        PsiDocToken:DOC_TAG_NAME('@link')
+        PsiWhiteSpace(' ')
+        PsiElement(DOC_METHOD_OR_FIELD_REF)
+          PsiDocToken:DOC_TAG_VALUE_SHARP_TOKEN('#')
+          PsiDocToken:DOC_TAG_VALUE_TOKEN('somefunc')
+          PsiDocToken:DOC_TAG_VALUE_LPAREN('(')
+          PsiElement(DOC_TAG_VALUE_ELEMENT)
+            PsiElement(DOC_TYPE_HOLDER)
+              PsiTypeElement:String
+                PsiJavaCodeReferenceElement:String
+                  PsiIdentifier:String('String')
+                  PsiReferenceParameterList
+                    <empty list>
+            PsiDocToken:DOC_TAG_VALUE_COMMA(',')
+            PsiWhiteSpace(' ')
+            PsiElement(DOC_TYPE_HOLDER)
+              PsiTypeElement:String
+                PsiJavaCodeReferenceElement:String
+                  PsiIdentifier:String('String')
+                  PsiReferenceParameterList
+                    <empty list>
+            PsiDocToken:DOC_TAG_VALUE_COMMA(',')
+            PsiWhiteSpace(' ')
+            PsiElement(DOC_TYPE_HOLDER)
+              PsiTypeElement:String
+                PsiJavaCodeReferenceElement:String
+                  PsiIdentifier:String('String')
+                  PsiReferenceParameterList
+                    <empty list>
+          PsiDocToken:DOC_TAG_VALUE_RPAREN(')')
+        PsiDocToken:DOC_INLINE_TAG_END('}')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/InlineTag3.java b/java/java-tests/testData/psi/parser-full/javadocParsing/InlineTag3.java
new file mode 100644
index 0000000..b03bef0
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/InlineTag3.java
@@ -0,0 +1,4 @@
+/**
+ * Text Text {@link #somefunc(String, String, String) {}{{{Inner braces}} }}
+ */
+class C{}
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/InlineTag3.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/InlineTag3.txt
new file mode 100644
index 0000000..fb591f4
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/InlineTag3.txt
@@ -0,0 +1,69 @@
+PsiJavaFile:InlineTag3.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' Text Text ')
+      PsiInlineDocTag:@link
+        PsiDocToken:DOC_INLINE_TAG_START('{')
+        PsiDocToken:DOC_TAG_NAME('@link')
+        PsiWhiteSpace(' ')
+        PsiElement(DOC_METHOD_OR_FIELD_REF)
+          PsiDocToken:DOC_TAG_VALUE_SHARP_TOKEN('#')
+          PsiDocToken:DOC_TAG_VALUE_TOKEN('somefunc')
+          PsiDocToken:DOC_TAG_VALUE_LPAREN('(')
+          PsiElement(DOC_TAG_VALUE_ELEMENT)
+            PsiElement(DOC_TYPE_HOLDER)
+              PsiTypeElement:String
+                PsiJavaCodeReferenceElement:String
+                  PsiIdentifier:String('String')
+                  PsiReferenceParameterList
+                    <empty list>
+            PsiDocToken:DOC_TAG_VALUE_COMMA(',')
+            PsiWhiteSpace(' ')
+            PsiElement(DOC_TYPE_HOLDER)
+              PsiTypeElement:String
+                PsiJavaCodeReferenceElement:String
+                  PsiIdentifier:String('String')
+                  PsiReferenceParameterList
+                    <empty list>
+            PsiDocToken:DOC_TAG_VALUE_COMMA(',')
+            PsiWhiteSpace(' ')
+            PsiElement(DOC_TYPE_HOLDER)
+              PsiTypeElement:String
+                PsiJavaCodeReferenceElement:String
+                  PsiIdentifier:String('String')
+                  PsiReferenceParameterList
+                    <empty list>
+          PsiDocToken:DOC_TAG_VALUE_RPAREN(')')
+        PsiWhiteSpace(' ')
+        PsiDocToken:DOC_COMMENT_DATA('{')
+        PsiDocToken:DOC_COMMENT_DATA('}')
+        PsiDocToken:DOC_COMMENT_DATA('{')
+        PsiDocToken:DOC_COMMENT_DATA('{')
+        PsiDocToken:DOC_COMMENT_DATA('{')
+        PsiDocToken:DOC_COMMENT_DATA('Inner braces')
+        PsiDocToken:DOC_COMMENT_DATA('}')
+        PsiDocToken:DOC_COMMENT_DATA('}')
+        PsiDocToken:DOC_COMMENT_DATA(' ')
+        PsiDocToken:DOC_COMMENT_DATA('}')
+        PsiDocToken:DOC_INLINE_TAG_END('}')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/Javadoc0.java b/java/java-tests/testData/psi/parser-full/javadocParsing/Javadoc0.java
new file mode 100644
index 0000000..14d03fa
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/Javadoc0.java
@@ -0,0 +1,4 @@
+/**
+ * Javadoc
+ */
+class C{}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/Javadoc0.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/Javadoc0.txt
new file mode 100644
index 0000000..d1bcdf0
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/Javadoc0.txt
@@ -0,0 +1,25 @@
+PsiJavaFile:Javadoc0.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' Javadoc')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/Javadoc1.java b/java/java-tests/testData/psi/parser-full/javadocParsing/Javadoc1.java
new file mode 100644
index 0000000..7068cde
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/Javadoc1.java
@@ -0,0 +1 @@
+/**/
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/Javadoc1.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/Javadoc1.txt
new file mode 100644
index 0000000..3c6b039
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/Javadoc1.txt
@@ -0,0 +1,4 @@
+PsiJavaFile:Javadoc1.java
+  PsiComment(C_STYLE_COMMENT)('/**/')
+  PsiImportList
+    <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/LinkPlainTag0.java b/java/java-tests/testData/psi/parser-full/javadocParsing/LinkPlainTag0.java
new file mode 100644
index 0000000..98dcfbe
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/LinkPlainTag0.java
@@ -0,0 +1,4 @@
+/**
+ * {@linkplain java.lang.String text}
+ */
+class C{}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/LinkPlainTag0.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/LinkPlainTag0.txt
new file mode 100644
index 0000000..1421d78
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/LinkPlainTag0.txt
@@ -0,0 +1,47 @@
+PsiJavaFile:LinkPlainTag0.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' ')
+      PsiInlineDocTag:@linkplain
+        PsiDocToken:DOC_INLINE_TAG_START('{')
+        PsiDocToken:DOC_TAG_NAME('@linkplain')
+        PsiWhiteSpace(' ')
+        PsiElement(DOC_REFERENCE_HOLDER)
+          PsiJavaCodeReferenceElement:java.lang.String
+            PsiJavaCodeReferenceElement:java.lang
+              PsiJavaCodeReferenceElement:java
+                PsiIdentifier:java('java')
+                PsiReferenceParameterList
+                  <empty list>
+              PsiJavaToken:DOT('.')
+              PsiIdentifier:lang('lang')
+              PsiReferenceParameterList
+                <empty list>
+            PsiJavaToken:DOT('.')
+            PsiIdentifier:String('String')
+            PsiReferenceParameterList
+              <empty list>
+        PsiWhiteSpace(' ')
+        PsiDocToken:DOC_COMMENT_DATA('text')
+        PsiDocToken:DOC_INLINE_TAG_END('}')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/LinkPlainTag1.java b/java/java-tests/testData/psi/parser-full/javadocParsing/LinkPlainTag1.java
new file mode 100644
index 0000000..1956494
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/LinkPlainTag1.java
@@ -0,0 +1,4 @@
+/**
+ * {@linkplain java.lang.String#equals(java.lang.Object) text}
+ */
+class C{}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/LinkPlainTag1.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/LinkPlainTag1.txt
new file mode 100644
index 0000000..d7f6a22
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/LinkPlainTag1.txt
@@ -0,0 +1,69 @@
+PsiJavaFile:LinkPlainTag1.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' ')
+      PsiInlineDocTag:@linkplain
+        PsiDocToken:DOC_INLINE_TAG_START('{')
+        PsiDocToken:DOC_TAG_NAME('@linkplain')
+        PsiWhiteSpace(' ')
+        PsiElement(DOC_METHOD_OR_FIELD_REF)
+          PsiElement(DOC_REFERENCE_HOLDER)
+            PsiJavaCodeReferenceElement:java.lang.String
+              PsiJavaCodeReferenceElement:java.lang
+                PsiJavaCodeReferenceElement:java
+                  PsiIdentifier:java('java')
+                  PsiReferenceParameterList
+                    <empty list>
+                PsiJavaToken:DOT('.')
+                PsiIdentifier:lang('lang')
+                PsiReferenceParameterList
+                  <empty list>
+              PsiJavaToken:DOT('.')
+              PsiIdentifier:String('String')
+              PsiReferenceParameterList
+                <empty list>
+          PsiDocToken:DOC_TAG_VALUE_SHARP_TOKEN('#')
+          PsiDocToken:DOC_TAG_VALUE_TOKEN('equals')
+          PsiDocToken:DOC_TAG_VALUE_LPAREN('(')
+          PsiElement(DOC_TAG_VALUE_ELEMENT)
+            PsiElement(DOC_TYPE_HOLDER)
+              PsiTypeElement:java.lang.Object
+                PsiJavaCodeReferenceElement:java.lang.Object
+                  PsiJavaCodeReferenceElement:java.lang
+                    PsiJavaCodeReferenceElement:java
+                      PsiIdentifier:java('java')
+                      PsiReferenceParameterList
+                        <empty list>
+                    PsiJavaToken:DOT('.')
+                    PsiIdentifier:lang('lang')
+                    PsiReferenceParameterList
+                      <empty list>
+                  PsiJavaToken:DOT('.')
+                  PsiIdentifier:Object('Object')
+                  PsiReferenceParameterList
+                    <empty list>
+          PsiDocToken:DOC_TAG_VALUE_RPAREN(')')
+        PsiWhiteSpace(' ')
+        PsiDocToken:DOC_COMMENT_DATA('text')
+        PsiDocToken:DOC_INLINE_TAG_END('}')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/LinkPlainTag2.java b/java/java-tests/testData/psi/parser-full/javadocParsing/LinkPlainTag2.java
new file mode 100644
index 0000000..552ea46
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/LinkPlainTag2.java
@@ -0,0 +1,4 @@
+/**
+ * @linkplain java.lang.String#equals(java.lang.Object) text
+ */
+class C{}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/LinkPlainTag2.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/LinkPlainTag2.txt
new file mode 100644
index 0000000..79e2ec3
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/LinkPlainTag2.txt
@@ -0,0 +1,37 @@
+PsiJavaFile:LinkPlainTag2.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' ')
+      PsiDocTag:@linkplain
+        PsiDocToken:DOC_TAG_NAME('@linkplain')
+        PsiWhiteSpace(' ')
+        PsiElement(DOC_TAG_VALUE_ELEMENT)
+          PsiDocToken:DOC_TAG_VALUE_TOKEN('java.lang.String')
+          PsiDocToken:DOC_TAG_VALUE_SHARP_TOKEN('#')
+          PsiDocToken:DOC_TAG_VALUE_TOKEN('equals')
+          PsiDocToken:DOC_TAG_VALUE_LPAREN('(')
+          PsiDocToken:DOC_TAG_VALUE_TOKEN('java.lang.Object')
+          PsiDocToken:DOC_TAG_VALUE_RPAREN(')')
+        PsiWhiteSpace(' ')
+        PsiDocToken:DOC_COMMENT_DATA('text')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/LinkTag0.java b/java/java-tests/testData/psi/parser-full/javadocParsing/LinkTag0.java
new file mode 100644
index 0000000..4837836f
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/LinkTag0.java
@@ -0,0 +1,4 @@
+/**
+ * {@link java.lang.String text}
+ */
+class C{}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/LinkTag0.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/LinkTag0.txt
new file mode 100644
index 0000000..866cf44
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/LinkTag0.txt
@@ -0,0 +1,47 @@
+PsiJavaFile:LinkTag0.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' ')
+      PsiInlineDocTag:@link
+        PsiDocToken:DOC_INLINE_TAG_START('{')
+        PsiDocToken:DOC_TAG_NAME('@link')
+        PsiWhiteSpace(' ')
+        PsiElement(DOC_REFERENCE_HOLDER)
+          PsiJavaCodeReferenceElement:java.lang.String
+            PsiJavaCodeReferenceElement:java.lang
+              PsiJavaCodeReferenceElement:java
+                PsiIdentifier:java('java')
+                PsiReferenceParameterList
+                  <empty list>
+              PsiJavaToken:DOT('.')
+              PsiIdentifier:lang('lang')
+              PsiReferenceParameterList
+                <empty list>
+            PsiJavaToken:DOT('.')
+            PsiIdentifier:String('String')
+            PsiReferenceParameterList
+              <empty list>
+        PsiWhiteSpace(' ')
+        PsiDocToken:DOC_COMMENT_DATA('text')
+        PsiDocToken:DOC_INLINE_TAG_END('}')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/LinkTag1.java b/java/java-tests/testData/psi/parser-full/javadocParsing/LinkTag1.java
new file mode 100644
index 0000000..a1c8ed9
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/LinkTag1.java
@@ -0,0 +1,4 @@
+/**
+ * {@link java.lang.String#equals(java.lang.Object) text}
+ */
+class C{}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/LinkTag1.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/LinkTag1.txt
new file mode 100644
index 0000000..f5fde4f
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/LinkTag1.txt
@@ -0,0 +1,69 @@
+PsiJavaFile:LinkTag1.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' ')
+      PsiInlineDocTag:@link
+        PsiDocToken:DOC_INLINE_TAG_START('{')
+        PsiDocToken:DOC_TAG_NAME('@link')
+        PsiWhiteSpace(' ')
+        PsiElement(DOC_METHOD_OR_FIELD_REF)
+          PsiElement(DOC_REFERENCE_HOLDER)
+            PsiJavaCodeReferenceElement:java.lang.String
+              PsiJavaCodeReferenceElement:java.lang
+                PsiJavaCodeReferenceElement:java
+                  PsiIdentifier:java('java')
+                  PsiReferenceParameterList
+                    <empty list>
+                PsiJavaToken:DOT('.')
+                PsiIdentifier:lang('lang')
+                PsiReferenceParameterList
+                  <empty list>
+              PsiJavaToken:DOT('.')
+              PsiIdentifier:String('String')
+              PsiReferenceParameterList
+                <empty list>
+          PsiDocToken:DOC_TAG_VALUE_SHARP_TOKEN('#')
+          PsiDocToken:DOC_TAG_VALUE_TOKEN('equals')
+          PsiDocToken:DOC_TAG_VALUE_LPAREN('(')
+          PsiElement(DOC_TAG_VALUE_ELEMENT)
+            PsiElement(DOC_TYPE_HOLDER)
+              PsiTypeElement:java.lang.Object
+                PsiJavaCodeReferenceElement:java.lang.Object
+                  PsiJavaCodeReferenceElement:java.lang
+                    PsiJavaCodeReferenceElement:java
+                      PsiIdentifier:java('java')
+                      PsiReferenceParameterList
+                        <empty list>
+                    PsiJavaToken:DOT('.')
+                    PsiIdentifier:lang('lang')
+                    PsiReferenceParameterList
+                      <empty list>
+                  PsiJavaToken:DOT('.')
+                  PsiIdentifier:Object('Object')
+                  PsiReferenceParameterList
+                    <empty list>
+          PsiDocToken:DOC_TAG_VALUE_RPAREN(')')
+        PsiWhiteSpace(' ')
+        PsiDocToken:DOC_COMMENT_DATA('text')
+        PsiDocToken:DOC_INLINE_TAG_END('}')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/LinkTag2.java b/java/java-tests/testData/psi/parser-full/javadocParsing/LinkTag2.java
new file mode 100644
index 0000000..0a1a2c2
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/LinkTag2.java
@@ -0,0 +1,4 @@
+/**
+ * @link java.lang.String#equals(java.lang.Object) text
+ */
+class C{}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/LinkTag2.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/LinkTag2.txt
new file mode 100644
index 0000000..af4cf7d
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/LinkTag2.txt
@@ -0,0 +1,37 @@
+PsiJavaFile:LinkTag2.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' ')
+      PsiDocTag:@link
+        PsiDocToken:DOC_TAG_NAME('@link')
+        PsiWhiteSpace(' ')
+        PsiElement(DOC_TAG_VALUE_ELEMENT)
+          PsiDocToken:DOC_TAG_VALUE_TOKEN('java.lang.String')
+          PsiDocToken:DOC_TAG_VALUE_SHARP_TOKEN('#')
+          PsiDocToken:DOC_TAG_VALUE_TOKEN('equals')
+          PsiDocToken:DOC_TAG_VALUE_LPAREN('(')
+          PsiDocToken:DOC_TAG_VALUE_TOKEN('java.lang.Object')
+          PsiDocToken:DOC_TAG_VALUE_RPAREN(')')
+        PsiWhiteSpace(' ')
+        PsiDocToken:DOC_COMMENT_DATA('text')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/LinkTag3.java b/java/java-tests/testData/psi/parser-full/javadocParsing/LinkTag3.java
new file mode 100644
index 0000000..eeb9dd4
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/LinkTag3.java
@@ -0,0 +1,7 @@
+/**
+ * Hello! {@link
+ * #foo()} text
+ */
+public class C{
+public void foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/LinkTag3.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/LinkTag3.txt
new file mode 100644
index 0000000..b1ea51c
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/LinkTag3.txt
@@ -0,0 +1,62 @@
+PsiJavaFile:LinkTag3.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' Hello! ')
+      PsiInlineDocTag:@link
+        PsiDocToken:DOC_INLINE_TAG_START('{')
+        PsiDocToken:DOC_TAG_NAME('@link')
+        PsiWhiteSpace('\n ')
+        PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+        PsiDocToken:DOC_COMMENT_DATA(' ')
+        PsiElement(DOC_METHOD_OR_FIELD_REF)
+          PsiDocToken:DOC_TAG_VALUE_SHARP_TOKEN('#')
+          PsiDocToken:DOC_TAG_VALUE_TOKEN('foo')
+          PsiDocToken:DOC_TAG_VALUE_LPAREN('(')
+          PsiElement(DOC_TAG_VALUE_ELEMENT)
+            <empty list>
+          PsiDocToken:DOC_TAG_VALUE_RPAREN(')')
+        PsiDocToken:DOC_INLINE_TAG_END('}')
+      PsiDocToken:DOC_COMMENT_DATA(' text')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n')
+    PsiModifierList:public
+      PsiKeyword:public('public')
+    PsiWhiteSpace(' ')
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n')
+    PsiMethod:foo
+      PsiModifierList:public
+        PsiKeyword:public('public')
+      PsiTypeParameterList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/LinkTag4.java b/java/java-tests/testData/psi/parser-full/javadocParsing/LinkTag4.java
new file mode 100644
index 0000000..a0aae0c
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/LinkTag4.java
@@ -0,0 +1,7 @@
+/**
+ * Hello! {@link
+ *#foo()} text
+ */
+public class C{
+public void foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/LinkTag4.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/LinkTag4.txt
new file mode 100644
index 0000000..a08d012
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/LinkTag4.txt
@@ -0,0 +1,61 @@
+PsiJavaFile:LinkTag4.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' Hello! ')
+      PsiInlineDocTag:@link
+        PsiDocToken:DOC_INLINE_TAG_START('{')
+        PsiDocToken:DOC_TAG_NAME('@link')
+        PsiWhiteSpace('\n ')
+        PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+        PsiElement(DOC_METHOD_OR_FIELD_REF)
+          PsiDocToken:DOC_TAG_VALUE_SHARP_TOKEN('#')
+          PsiDocToken:DOC_TAG_VALUE_TOKEN('foo')
+          PsiDocToken:DOC_TAG_VALUE_LPAREN('(')
+          PsiElement(DOC_TAG_VALUE_ELEMENT)
+            <empty list>
+          PsiDocToken:DOC_TAG_VALUE_RPAREN(')')
+        PsiDocToken:DOC_INLINE_TAG_END('}')
+      PsiDocToken:DOC_COMMENT_DATA(' text')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n')
+    PsiModifierList:public
+      PsiKeyword:public('public')
+    PsiWhiteSpace(' ')
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n')
+    PsiMethod:foo
+      PsiModifierList:public
+        PsiKeyword:public('public')
+      PsiTypeParameterList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/LinkTag5.java b/java/java-tests/testData/psi/parser-full/javadocParsing/LinkTag5.java
new file mode 100644
index 0000000..c90065a4
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/LinkTag5.java
@@ -0,0 +1,7 @@
+/**
+ * Hello! {@link
+ #foo()} text
+ */
+public class C{
+public void foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/LinkTag5.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/LinkTag5.txt
new file mode 100644
index 0000000..6aeebb1
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/LinkTag5.txt
@@ -0,0 +1,60 @@
+PsiJavaFile:LinkTag5.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' Hello! ')
+      PsiInlineDocTag:@link
+        PsiDocToken:DOC_INLINE_TAG_START('{')
+        PsiDocToken:DOC_TAG_NAME('@link')
+        PsiWhiteSpace('\n ')
+        PsiElement(DOC_METHOD_OR_FIELD_REF)
+          PsiDocToken:DOC_TAG_VALUE_SHARP_TOKEN('#')
+          PsiDocToken:DOC_TAG_VALUE_TOKEN('foo')
+          PsiDocToken:DOC_TAG_VALUE_LPAREN('(')
+          PsiElement(DOC_TAG_VALUE_ELEMENT)
+            <empty list>
+          PsiDocToken:DOC_TAG_VALUE_RPAREN(')')
+        PsiDocToken:DOC_INLINE_TAG_END('}')
+      PsiDocToken:DOC_COMMENT_DATA(' text')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n')
+    PsiModifierList:public
+      PsiKeyword:public('public')
+    PsiWhiteSpace(' ')
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n')
+    PsiMethod:foo
+      PsiModifierList:public
+        PsiKeyword:public('public')
+      PsiTypeParameterList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/LinkTag6.java b/java/java-tests/testData/psi/parser-full/javadocParsing/LinkTag6.java
new file mode 100644
index 0000000..f766797
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/LinkTag6.java
@@ -0,0 +1,7 @@
+/**
+ * Hello! {@link
+#foo()} text
+ */
+public class C{
+public void foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/LinkTag6.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/LinkTag6.txt
new file mode 100644
index 0000000..1cc1764
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/LinkTag6.txt
@@ -0,0 +1,60 @@
+PsiJavaFile:LinkTag6.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' Hello! ')
+      PsiInlineDocTag:@link
+        PsiDocToken:DOC_INLINE_TAG_START('{')
+        PsiDocToken:DOC_TAG_NAME('@link')
+        PsiWhiteSpace('\n')
+        PsiElement(DOC_METHOD_OR_FIELD_REF)
+          PsiDocToken:DOC_TAG_VALUE_SHARP_TOKEN('#')
+          PsiDocToken:DOC_TAG_VALUE_TOKEN('foo')
+          PsiDocToken:DOC_TAG_VALUE_LPAREN('(')
+          PsiElement(DOC_TAG_VALUE_ELEMENT)
+            <empty list>
+          PsiDocToken:DOC_TAG_VALUE_RPAREN(')')
+        PsiDocToken:DOC_INLINE_TAG_END('}')
+      PsiDocToken:DOC_COMMENT_DATA(' text')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n')
+    PsiModifierList:public
+      PsiKeyword:public('public')
+    PsiWhiteSpace(' ')
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n')
+    PsiMethod:foo
+      PsiModifierList:public
+        PsiKeyword:public('public')
+      PsiTypeParameterList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/ParamTag0.java b/java/java-tests/testData/psi/parser-full/javadocParsing/ParamTag0.java
new file mode 100644
index 0000000..de3eeb3
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/ParamTag0.java
@@ -0,0 +1,8 @@
+class C {
+  /**
+   * Javadoc
+   * @param p1
+   * @param p2
+   */
+  void m() { }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/ParamTag0.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/ParamTag0.txt
new file mode 100644
index 0000000..6042867
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/ParamTag0.txt
@@ -0,0 +1,63 @@
+PsiJavaFile:ParamTag0.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiMethod:m
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiWhiteSpace('\n   ')
+        PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+        PsiDocToken:DOC_COMMENT_DATA(' Javadoc')
+        PsiWhiteSpace('\n   ')
+        PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+        PsiDocToken:DOC_COMMENT_DATA(' ')
+        PsiDocTag:@param
+          PsiDocToken:DOC_TAG_NAME('@param')
+          PsiWhiteSpace(' ')
+          PsiElement(DOC_PARAMETER_REF)
+            PsiDocToken:DOC_TAG_VALUE_TOKEN('p1')
+          PsiWhiteSpace('\n   ')
+          PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+          PsiDocToken:DOC_COMMENT_DATA(' ')
+        PsiDocTag:@param
+          PsiDocToken:DOC_TAG_NAME('@param')
+          PsiWhiteSpace(' ')
+          PsiElement(DOC_PARAMETER_REF)
+            PsiDocToken:DOC_TAG_VALUE_TOKEN('p2')
+        PsiWhiteSpace('\n   ')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n  ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:m('m')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace(' ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/ParamTag1.java b/java/java-tests/testData/psi/parser-full/javadocParsing/ParamTag1.java
new file mode 100644
index 0000000..1c02d95
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/ParamTag1.java
@@ -0,0 +1,7 @@
+class Foo {
+    /**
+     *
+     * @param y
+     */
+     public void foo(String y) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/ParamTag1.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/ParamTag1.txt
new file mode 100644
index 0000000..70b81dc2
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/ParamTag1.txt
@@ -0,0 +1,64 @@
+PsiJavaFile:ParamTag1.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n    ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiWhiteSpace('\n     ')
+        PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+        PsiWhiteSpace('\n     ')
+        PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+        PsiDocToken:DOC_COMMENT_DATA(' ')
+        PsiDocTag:@param
+          PsiDocToken:DOC_TAG_NAME('@param')
+          PsiWhiteSpace(' ')
+          PsiElement(DOC_PARAMETER_REF)
+            PsiDocToken:DOC_TAG_VALUE_TOKEN('y')
+        PsiWhiteSpace('\n     ')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n     ')
+      PsiModifierList:public
+        PsiKeyword:public('public')
+      PsiTypeParameterList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:(String y)
+        PsiJavaToken:LPARENTH('(')
+        PsiParameter:y
+          PsiModifierList:
+            <empty list>
+          PsiTypeElement:String
+            PsiJavaCodeReferenceElement:String
+              PsiIdentifier:String('String')
+              PsiReferenceParameterList
+                <empty list>
+          PsiWhiteSpace(' ')
+          PsiIdentifier:y('y')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/ParameterlessTag.java b/java/java-tests/testData/psi/parser-full/javadocParsing/ParameterlessTag.java
new file mode 100644
index 0000000..9832a1e
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/ParameterlessTag.java
@@ -0,0 +1,5 @@
+/**
+ * @serial
+ * @see java.lang.String 
+ */
+class C{}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/ParameterlessTag.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/ParameterlessTag.txt
new file mode 100644
index 0000000..1dacee6
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/ParameterlessTag.txt
@@ -0,0 +1,48 @@
+PsiJavaFile:ParameterlessTag.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' ')
+      PsiDocTag:@serial
+        PsiDocToken:DOC_TAG_NAME('@serial')
+        PsiWhiteSpace('\n ')
+        PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+        PsiDocToken:DOC_COMMENT_DATA(' ')
+      PsiDocTag:@see
+        PsiDocToken:DOC_TAG_NAME('@see')
+        PsiWhiteSpace(' ')
+        PsiElement(DOC_REFERENCE_HOLDER)
+          PsiJavaCodeReferenceElement:java.lang.String
+            PsiJavaCodeReferenceElement:java.lang
+              PsiJavaCodeReferenceElement:java
+                PsiIdentifier:java('java')
+                PsiReferenceParameterList
+                  <empty list>
+              PsiJavaToken:DOT('.')
+              PsiIdentifier:lang('lang')
+              PsiReferenceParameterList
+                <empty list>
+            PsiJavaToken:DOT('.')
+            PsiIdentifier:String('String')
+            PsiReferenceParameterList
+              <empty list>
+      PsiWhiteSpace(' \n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag0.java b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag0.java
new file mode 100644
index 0000000..7bc9a5b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag0.java
@@ -0,0 +1,4 @@
+/**
+ * @see java.lang.String 
+ */
+class C{}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag0.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag0.txt
new file mode 100644
index 0000000..4a8a3c3
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag0.txt
@@ -0,0 +1,43 @@
+PsiJavaFile:SeeTag0.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' ')
+      PsiDocTag:@see
+        PsiDocToken:DOC_TAG_NAME('@see')
+        PsiWhiteSpace(' ')
+        PsiElement(DOC_REFERENCE_HOLDER)
+          PsiJavaCodeReferenceElement:java.lang.String
+            PsiJavaCodeReferenceElement:java.lang
+              PsiJavaCodeReferenceElement:java
+                PsiIdentifier:java('java')
+                PsiReferenceParameterList
+                  <empty list>
+              PsiJavaToken:DOT('.')
+              PsiIdentifier:lang('lang')
+              PsiReferenceParameterList
+                <empty list>
+            PsiJavaToken:DOT('.')
+            PsiIdentifier:String('String')
+            PsiReferenceParameterList
+              <empty list>
+      PsiWhiteSpace(' \n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag1.java b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag1.java
new file mode 100644
index 0000000..cc55c25
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag1.java
@@ -0,0 +1,4 @@
+/**
+ * @see java.lang.String The String class  
+ */
+class C{}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag1.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag1.txt
new file mode 100644
index 0000000..28630dd
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag1.txt
@@ -0,0 +1,45 @@
+PsiJavaFile:SeeTag1.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' ')
+      PsiDocTag:@see
+        PsiDocToken:DOC_TAG_NAME('@see')
+        PsiWhiteSpace(' ')
+        PsiElement(DOC_REFERENCE_HOLDER)
+          PsiJavaCodeReferenceElement:java.lang.String
+            PsiJavaCodeReferenceElement:java.lang
+              PsiJavaCodeReferenceElement:java
+                PsiIdentifier:java('java')
+                PsiReferenceParameterList
+                  <empty list>
+              PsiJavaToken:DOT('.')
+              PsiIdentifier:lang('lang')
+              PsiReferenceParameterList
+                <empty list>
+            PsiJavaToken:DOT('.')
+            PsiIdentifier:String('String')
+            PsiReferenceParameterList
+              <empty list>
+        PsiWhiteSpace(' ')
+        PsiDocToken:DOC_COMMENT_DATA('The String class  ')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag10.java b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag10.java
new file mode 100644
index 0000000..16d5a83
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag10.java
@@ -0,0 +1,4 @@
+/**
+ * @see com.foo.MyClass#equals(java.lang.Object, java.lang.Object)
+ */
+class C{}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag10.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag10.txt
new file mode 100644
index 0000000..95b2f7f
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag10.txt
@@ -0,0 +1,83 @@
+PsiJavaFile:SeeTag10.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' ')
+      PsiDocTag:@see
+        PsiDocToken:DOC_TAG_NAME('@see')
+        PsiWhiteSpace(' ')
+        PsiElement(DOC_METHOD_OR_FIELD_REF)
+          PsiElement(DOC_REFERENCE_HOLDER)
+            PsiJavaCodeReferenceElement:com.foo.MyClass
+              PsiJavaCodeReferenceElement:com.foo
+                PsiJavaCodeReferenceElement:com
+                  PsiIdentifier:com('com')
+                  PsiReferenceParameterList
+                    <empty list>
+                PsiJavaToken:DOT('.')
+                PsiIdentifier:foo('foo')
+                PsiReferenceParameterList
+                  <empty list>
+              PsiJavaToken:DOT('.')
+              PsiIdentifier:MyClass('MyClass')
+              PsiReferenceParameterList
+                <empty list>
+          PsiDocToken:DOC_TAG_VALUE_SHARP_TOKEN('#')
+          PsiDocToken:DOC_TAG_VALUE_TOKEN('equals')
+          PsiDocToken:DOC_TAG_VALUE_LPAREN('(')
+          PsiElement(DOC_TAG_VALUE_ELEMENT)
+            PsiElement(DOC_TYPE_HOLDER)
+              PsiTypeElement:java.lang.Object
+                PsiJavaCodeReferenceElement:java.lang.Object
+                  PsiJavaCodeReferenceElement:java.lang
+                    PsiJavaCodeReferenceElement:java
+                      PsiIdentifier:java('java')
+                      PsiReferenceParameterList
+                        <empty list>
+                    PsiJavaToken:DOT('.')
+                    PsiIdentifier:lang('lang')
+                    PsiReferenceParameterList
+                      <empty list>
+                  PsiJavaToken:DOT('.')
+                  PsiIdentifier:Object('Object')
+                  PsiReferenceParameterList
+                    <empty list>
+            PsiDocToken:DOC_TAG_VALUE_COMMA(',')
+            PsiWhiteSpace(' ')
+            PsiElement(DOC_TYPE_HOLDER)
+              PsiTypeElement:java.lang.Object
+                PsiJavaCodeReferenceElement:java.lang.Object
+                  PsiJavaCodeReferenceElement:java.lang
+                    PsiJavaCodeReferenceElement:java
+                      PsiIdentifier:java('java')
+                      PsiReferenceParameterList
+                        <empty list>
+                    PsiJavaToken:DOT('.')
+                    PsiIdentifier:lang('lang')
+                    PsiReferenceParameterList
+                      <empty list>
+                  PsiJavaToken:DOT('.')
+                  PsiIdentifier:Object('Object')
+                  PsiReferenceParameterList
+                    <empty list>
+          PsiDocToken:DOC_TAG_VALUE_RPAREN(')')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag11.java b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag11.java
new file mode 100644
index 0000000..513def2
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag11.java
@@ -0,0 +1,4 @@
+/**
+ * @see        java.lang.Object#wait()
+ */
+class C{}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag11.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag11.txt
new file mode 100644
index 0000000..f58d76b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag11.txt
@@ -0,0 +1,50 @@
+PsiJavaFile:SeeTag11.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' ')
+      PsiDocTag:@see
+        PsiDocToken:DOC_TAG_NAME('@see')
+        PsiWhiteSpace('        ')
+        PsiElement(DOC_METHOD_OR_FIELD_REF)
+          PsiElement(DOC_REFERENCE_HOLDER)
+            PsiJavaCodeReferenceElement:java.lang.Object
+              PsiJavaCodeReferenceElement:java.lang
+                PsiJavaCodeReferenceElement:java
+                  PsiIdentifier:java('java')
+                  PsiReferenceParameterList
+                    <empty list>
+                PsiJavaToken:DOT('.')
+                PsiIdentifier:lang('lang')
+                PsiReferenceParameterList
+                  <empty list>
+              PsiJavaToken:DOT('.')
+              PsiIdentifier:Object('Object')
+              PsiReferenceParameterList
+                <empty list>
+          PsiDocToken:DOC_TAG_VALUE_SHARP_TOKEN('#')
+          PsiDocToken:DOC_TAG_VALUE_TOKEN('wait')
+          PsiDocToken:DOC_TAG_VALUE_LPAREN('(')
+          PsiElement(DOC_TAG_VALUE_ELEMENT)
+            <empty list>
+          PsiDocToken:DOC_TAG_VALUE_RPAREN(')')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag12.java b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag12.java
new file mode 100644
index 0000000..728800b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag12.java
@@ -0,0 +1,4 @@
+/**
+ * @see #wait()
+ */
+class C{}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag12.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag12.txt
new file mode 100644
index 0000000..ac4dd62
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag12.txt
@@ -0,0 +1,35 @@
+PsiJavaFile:SeeTag12.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' ')
+      PsiDocTag:@see
+        PsiDocToken:DOC_TAG_NAME('@see')
+        PsiWhiteSpace(' ')
+        PsiElement(DOC_METHOD_OR_FIELD_REF)
+          PsiDocToken:DOC_TAG_VALUE_SHARP_TOKEN('#')
+          PsiDocToken:DOC_TAG_VALUE_TOKEN('wait')
+          PsiDocToken:DOC_TAG_VALUE_LPAREN('(')
+          PsiElement(DOC_TAG_VALUE_ELEMENT)
+            <empty list>
+          PsiDocToken:DOC_TAG_VALUE_RPAREN(')')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag13.java b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag13.java
new file mode 100644
index 0000000..dcdda1d
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag13.java
@@ -0,0 +1,4 @@
+/**
+ * @see <a href="package-summary.html#charenc">Character encodings</a>
+ */
+class C{}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag13.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag13.txt
new file mode 100644
index 0000000..5abfa7e
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag13.txt
@@ -0,0 +1,29 @@
+PsiJavaFile:SeeTag13.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' ')
+      PsiDocTag:@see
+        PsiDocToken:DOC_TAG_NAME('@see')
+        PsiWhiteSpace(' ')
+        PsiDocToken:DOC_COMMENT_DATA('<a href="package-summary.html#charenc">Character encodings</a>')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag14.java b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag14.java
new file mode 100644
index 0000000..cbf85a1
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag14.java
@@ -0,0 +1,4 @@
+/**
+ * @see java.lang.StringBuffer#append(char[])
+ */
+class C{}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag14.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag14.txt
new file mode 100644
index 0000000..08f9047
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag14.txt
@@ -0,0 +1,55 @@
+PsiJavaFile:SeeTag14.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' ')
+      PsiDocTag:@see
+        PsiDocToken:DOC_TAG_NAME('@see')
+        PsiWhiteSpace(' ')
+        PsiElement(DOC_METHOD_OR_FIELD_REF)
+          PsiElement(DOC_REFERENCE_HOLDER)
+            PsiJavaCodeReferenceElement:java.lang.StringBuffer
+              PsiJavaCodeReferenceElement:java.lang
+                PsiJavaCodeReferenceElement:java
+                  PsiIdentifier:java('java')
+                  PsiReferenceParameterList
+                    <empty list>
+                PsiJavaToken:DOT('.')
+                PsiIdentifier:lang('lang')
+                PsiReferenceParameterList
+                  <empty list>
+              PsiJavaToken:DOT('.')
+              PsiIdentifier:StringBuffer('StringBuffer')
+              PsiReferenceParameterList
+                <empty list>
+          PsiDocToken:DOC_TAG_VALUE_SHARP_TOKEN('#')
+          PsiDocToken:DOC_TAG_VALUE_TOKEN('append')
+          PsiDocToken:DOC_TAG_VALUE_LPAREN('(')
+          PsiElement(DOC_TAG_VALUE_ELEMENT)
+            PsiElement(DOC_TYPE_HOLDER)
+              PsiTypeElement:char[]
+                PsiTypeElement:char
+                  PsiKeyword:char('char')
+                PsiJavaToken:LBRACKET('[')
+                PsiJavaToken:RBRACKET(']')
+          PsiDocToken:DOC_TAG_VALUE_RPAREN(')')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag15.java b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag15.java
new file mode 100644
index 0000000..e15fd41
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag15.java
@@ -0,0 +1,4 @@
+/**
+ * @see java.lang.StringBuffer#append(java.lang.Object arg1, java.lang.String arg2)
+ */
+class C{}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag15.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag15.txt
new file mode 100644
index 0000000..fa79b85
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag15.txt
@@ -0,0 +1,87 @@
+PsiJavaFile:SeeTag15.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' ')
+      PsiDocTag:@see
+        PsiDocToken:DOC_TAG_NAME('@see')
+        PsiWhiteSpace(' ')
+        PsiElement(DOC_METHOD_OR_FIELD_REF)
+          PsiElement(DOC_REFERENCE_HOLDER)
+            PsiJavaCodeReferenceElement:java.lang.StringBuffer
+              PsiJavaCodeReferenceElement:java.lang
+                PsiJavaCodeReferenceElement:java
+                  PsiIdentifier:java('java')
+                  PsiReferenceParameterList
+                    <empty list>
+                PsiJavaToken:DOT('.')
+                PsiIdentifier:lang('lang')
+                PsiReferenceParameterList
+                  <empty list>
+              PsiJavaToken:DOT('.')
+              PsiIdentifier:StringBuffer('StringBuffer')
+              PsiReferenceParameterList
+                <empty list>
+          PsiDocToken:DOC_TAG_VALUE_SHARP_TOKEN('#')
+          PsiDocToken:DOC_TAG_VALUE_TOKEN('append')
+          PsiDocToken:DOC_TAG_VALUE_LPAREN('(')
+          PsiElement(DOC_TAG_VALUE_ELEMENT)
+            PsiElement(DOC_TYPE_HOLDER)
+              PsiTypeElement:java.lang.Object
+                PsiJavaCodeReferenceElement:java.lang.Object
+                  PsiJavaCodeReferenceElement:java.lang
+                    PsiJavaCodeReferenceElement:java
+                      PsiIdentifier:java('java')
+                      PsiReferenceParameterList
+                        <empty list>
+                    PsiJavaToken:DOT('.')
+                    PsiIdentifier:lang('lang')
+                    PsiReferenceParameterList
+                      <empty list>
+                  PsiJavaToken:DOT('.')
+                  PsiIdentifier:Object('Object')
+                  PsiReferenceParameterList
+                    <empty list>
+            PsiWhiteSpace(' ')
+            PsiDocToken:DOC_TAG_VALUE_TOKEN('arg1')
+            PsiDocToken:DOC_TAG_VALUE_COMMA(',')
+            PsiWhiteSpace(' ')
+            PsiElement(DOC_TYPE_HOLDER)
+              PsiTypeElement:java.lang.String
+                PsiJavaCodeReferenceElement:java.lang.String
+                  PsiJavaCodeReferenceElement:java.lang
+                    PsiJavaCodeReferenceElement:java
+                      PsiIdentifier:java('java')
+                      PsiReferenceParameterList
+                        <empty list>
+                    PsiJavaToken:DOT('.')
+                    PsiIdentifier:lang('lang')
+                    PsiReferenceParameterList
+                      <empty list>
+                  PsiJavaToken:DOT('.')
+                  PsiIdentifier:String('String')
+                  PsiReferenceParameterList
+                    <empty list>
+            PsiWhiteSpace(' ')
+            PsiDocToken:DOC_TAG_VALUE_TOKEN('arg2')
+          PsiDocToken:DOC_TAG_VALUE_RPAREN(')')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag16.java b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag16.java
new file mode 100644
index 0000000..6d748e6
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag16.java
@@ -0,0 +1,4 @@
+/**
+ * @see String#equals(int, int, byte[], int)
+ */
+class C{}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag16.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag16.txt
new file mode 100644
index 0000000..3d1fa26
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag16.txt
@@ -0,0 +1,60 @@
+PsiJavaFile:SeeTag16.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' ')
+      PsiDocTag:@see
+        PsiDocToken:DOC_TAG_NAME('@see')
+        PsiWhiteSpace(' ')
+        PsiElement(DOC_METHOD_OR_FIELD_REF)
+          PsiElement(DOC_REFERENCE_HOLDER)
+            PsiJavaCodeReferenceElement:String
+              PsiIdentifier:String('String')
+              PsiReferenceParameterList
+                <empty list>
+          PsiDocToken:DOC_TAG_VALUE_SHARP_TOKEN('#')
+          PsiDocToken:DOC_TAG_VALUE_TOKEN('equals')
+          PsiDocToken:DOC_TAG_VALUE_LPAREN('(')
+          PsiElement(DOC_TAG_VALUE_ELEMENT)
+            PsiElement(DOC_TYPE_HOLDER)
+              PsiTypeElement:int
+                PsiKeyword:int('int')
+            PsiDocToken:DOC_TAG_VALUE_COMMA(',')
+            PsiWhiteSpace(' ')
+            PsiElement(DOC_TYPE_HOLDER)
+              PsiTypeElement:int
+                PsiKeyword:int('int')
+            PsiDocToken:DOC_TAG_VALUE_COMMA(',')
+            PsiWhiteSpace(' ')
+            PsiElement(DOC_TYPE_HOLDER)
+              PsiTypeElement:byte[]
+                PsiTypeElement:byte
+                  PsiKeyword:byte('byte')
+                PsiJavaToken:LBRACKET('[')
+                PsiJavaToken:RBRACKET(']')
+            PsiDocToken:DOC_TAG_VALUE_COMMA(',')
+            PsiWhiteSpace(' ')
+            PsiElement(DOC_TYPE_HOLDER)
+              PsiTypeElement:int
+                PsiKeyword:int('int')
+          PsiDocToken:DOC_TAG_VALUE_RPAREN(')')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag2.java b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag2.java
new file mode 100644
index 0000000..9b78418
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag2.java
@@ -0,0 +1,4 @@
+/**
+ * @see String 
+ */
+class C{}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag2.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag2.txt
new file mode 100644
index 0000000..4f0f9f3
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag2.txt
@@ -0,0 +1,33 @@
+PsiJavaFile:SeeTag2.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' ')
+      PsiDocTag:@see
+        PsiDocToken:DOC_TAG_NAME('@see')
+        PsiWhiteSpace(' ')
+        PsiElement(DOC_REFERENCE_HOLDER)
+          PsiJavaCodeReferenceElement:String
+            PsiIdentifier:String('String')
+            PsiReferenceParameterList
+              <empty list>
+      PsiWhiteSpace(' \n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag3.java b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag3.java
new file mode 100644
index 0000000..fed4f07
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag3.java
@@ -0,0 +1,4 @@
+/**
+ * @see String#equals(Object)
+ */
+class C{}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag3.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag3.txt
new file mode 100644
index 0000000..f018c5a
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag3.txt
@@ -0,0 +1,45 @@
+PsiJavaFile:SeeTag3.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' ')
+      PsiDocTag:@see
+        PsiDocToken:DOC_TAG_NAME('@see')
+        PsiWhiteSpace(' ')
+        PsiElement(DOC_METHOD_OR_FIELD_REF)
+          PsiElement(DOC_REFERENCE_HOLDER)
+            PsiJavaCodeReferenceElement:String
+              PsiIdentifier:String('String')
+              PsiReferenceParameterList
+                <empty list>
+          PsiDocToken:DOC_TAG_VALUE_SHARP_TOKEN('#')
+          PsiDocToken:DOC_TAG_VALUE_TOKEN('equals')
+          PsiDocToken:DOC_TAG_VALUE_LPAREN('(')
+          PsiElement(DOC_TAG_VALUE_ELEMENT)
+            PsiElement(DOC_TYPE_HOLDER)
+              PsiTypeElement:Object
+                PsiJavaCodeReferenceElement:Object
+                  PsiIdentifier:Object('Object')
+                  PsiReferenceParameterList
+                    <empty list>
+          PsiDocToken:DOC_TAG_VALUE_RPAREN(')')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag4.java b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag4.java
new file mode 100644
index 0000000..c83eb47
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag4.java
@@ -0,0 +1,4 @@
+/**
+ * @see String#equals
+ */
+class C{}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag4.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag4.txt
new file mode 100644
index 0000000..b83ff16
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag4.txt
@@ -0,0 +1,36 @@
+PsiJavaFile:SeeTag4.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' ')
+      PsiDocTag:@see
+        PsiDocToken:DOC_TAG_NAME('@see')
+        PsiWhiteSpace(' ')
+        PsiElement(DOC_METHOD_OR_FIELD_REF)
+          PsiElement(DOC_REFERENCE_HOLDER)
+            PsiJavaCodeReferenceElement:String
+              PsiIdentifier:String('String')
+              PsiReferenceParameterList
+                <empty list>
+          PsiDocToken:DOC_TAG_VALUE_SHARP_TOKEN('#')
+          PsiDocToken:DOC_TAG_VALUE_TOKEN('equals')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag5.java b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag5.java
new file mode 100644
index 0000000..ac46fa2
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag5.java
@@ -0,0 +1,4 @@
+/**
+ * @see java.lang.Object#wait(long)
+ */
+class C{}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag5.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag5.txt
new file mode 100644
index 0000000..9903e7c
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag5.txt
@@ -0,0 +1,52 @@
+PsiJavaFile:SeeTag5.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' ')
+      PsiDocTag:@see
+        PsiDocToken:DOC_TAG_NAME('@see')
+        PsiWhiteSpace(' ')
+        PsiElement(DOC_METHOD_OR_FIELD_REF)
+          PsiElement(DOC_REFERENCE_HOLDER)
+            PsiJavaCodeReferenceElement:java.lang.Object
+              PsiJavaCodeReferenceElement:java.lang
+                PsiJavaCodeReferenceElement:java
+                  PsiIdentifier:java('java')
+                  PsiReferenceParameterList
+                    <empty list>
+                PsiJavaToken:DOT('.')
+                PsiIdentifier:lang('lang')
+                PsiReferenceParameterList
+                  <empty list>
+              PsiJavaToken:DOT('.')
+              PsiIdentifier:Object('Object')
+              PsiReferenceParameterList
+                <empty list>
+          PsiDocToken:DOC_TAG_VALUE_SHARP_TOKEN('#')
+          PsiDocToken:DOC_TAG_VALUE_TOKEN('wait')
+          PsiDocToken:DOC_TAG_VALUE_LPAREN('(')
+          PsiElement(DOC_TAG_VALUE_ELEMENT)
+            PsiElement(DOC_TYPE_HOLDER)
+              PsiTypeElement:long
+                PsiKeyword:long('long')
+          PsiDocToken:DOC_TAG_VALUE_RPAREN(')')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag6.java b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag6.java
new file mode 100644
index 0000000..0a66e09
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag6.java
@@ -0,0 +1,4 @@
+/**
+ * @see Character#MAX_RADIX
+ */
+class C{}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag6.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag6.txt
new file mode 100644
index 0000000..3ac3ae0
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag6.txt
@@ -0,0 +1,36 @@
+PsiJavaFile:SeeTag6.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' ')
+      PsiDocTag:@see
+        PsiDocToken:DOC_TAG_NAME('@see')
+        PsiWhiteSpace(' ')
+        PsiElement(DOC_METHOD_OR_FIELD_REF)
+          PsiElement(DOC_REFERENCE_HOLDER)
+            PsiJavaCodeReferenceElement:Character
+              PsiIdentifier:Character('Character')
+              PsiReferenceParameterList
+                <empty list>
+          PsiDocToken:DOC_TAG_VALUE_SHARP_TOKEN('#')
+          PsiDocToken:DOC_TAG_VALUE_TOKEN('MAX_RADIX')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag7.java b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag7.java
new file mode 100644
index 0000000..3aa097b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag7.java
@@ -0,0 +1,4 @@
+/**
+ * @see <a href="spec.html">Java Spec</a>
+ */
+class C{}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag7.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag7.txt
new file mode 100644
index 0000000..9cd218d
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag7.txt
@@ -0,0 +1,29 @@
+PsiJavaFile:SeeTag7.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' ')
+      PsiDocTag:@see
+        PsiDocToken:DOC_TAG_NAME('@see')
+        PsiWhiteSpace(' ')
+        PsiDocToken:DOC_COMMENT_DATA('<a href="spec.html">Java Spec</a>')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag8.java b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag8.java
new file mode 100644
index 0000000..8fd5171
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag8.java
@@ -0,0 +1,4 @@
+/**
+ * @see "The Java Programming Language" 
+ */
+class C{}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag8.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag8.txt
new file mode 100644
index 0000000..26175f5
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag8.txt
@@ -0,0 +1,29 @@
+PsiJavaFile:SeeTag8.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' ')
+      PsiDocTag:@see
+        PsiDocToken:DOC_TAG_NAME('@see')
+        PsiWhiteSpace(' ')
+        PsiDocToken:DOC_COMMENT_DATA('"The Java Programming Language" ')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag9.java b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag9.java
new file mode 100644
index 0000000..ede0302
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag9.java
@@ -0,0 +1,4 @@
+/**
+ * @see equals(long, long)
+ */
+class C{}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag9.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag9.txt
new file mode 100644
index 0000000..7b2b10a
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/SeeTag9.txt
@@ -0,0 +1,44 @@
+PsiJavaFile:SeeTag9.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' ')
+      PsiDocTag:@see
+        PsiDocToken:DOC_TAG_NAME('@see')
+        PsiWhiteSpace(' ')
+        PsiElement(DOC_REFERENCE_HOLDER)
+          PsiJavaCodeReferenceElement:equals
+            PsiIdentifier:equals('equals')
+            PsiReferenceParameterList
+              <empty list>
+        PsiElement(DOC_TAG_VALUE_ELEMENT)
+          PsiDocToken:DOC_TAG_VALUE_LPAREN('(')
+        PsiElement(DOC_REFERENCE_HOLDER)
+          PsiKeyword:long('long')
+        PsiElement(DOC_TAG_VALUE_ELEMENT)
+          PsiDocToken:DOC_TAG_VALUE_COMMA(',')
+        PsiWhiteSpace(' ')
+        PsiElement(DOC_REFERENCE_HOLDER)
+          PsiKeyword:long('long')
+        PsiElement(DOC_TAG_VALUE_ELEMENT)
+          PsiDocToken:DOC_TAG_VALUE_RPAREN(')')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/Separated01.java b/java/java-tests/testData/psi/parser-full/javadocParsing/Separated01.java
new file mode 100644
index 0000000..b01ea7b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/Separated01.java
@@ -0,0 +1,8 @@
+class X{
+  /**
+   * The method.
+   */
+  // Comment
+  /* Another comment */
+  void f(){}
+}
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/Separated01.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/Separated01.txt
new file mode 100644
index 0000000..553c800
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/Separated01.txt
@@ -0,0 +1,48 @@
+PsiJavaFile:Separated01.java
+  PsiImportList
+    <empty list>
+  PsiClass:X
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:X('X')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiMethod:f
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiWhiteSpace('\n   ')
+        PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+        PsiDocToken:DOC_COMMENT_DATA(' The method.')
+        PsiWhiteSpace('\n   ')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n  ')
+      PsiComment(END_OF_LINE_COMMENT)('// Comment')
+      PsiWhiteSpace('\n  ')
+      PsiComment(C_STYLE_COMMENT)('/* Another comment */')
+      PsiWhiteSpace('\n  ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:f('f')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/Symbols01.java b/java/java-tests/testData/psi/parser-full/javadocParsing/Symbols01.java
new file mode 100644
index 0000000..41757b0
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/Symbols01.java
@@ -0,0 +1,5 @@
+/**
+ * ~`!@#$%^&*()_+|\=-}{[]":;'?><,./
+ */
+
+class X{}
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/Symbols01.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/Symbols01.txt
new file mode 100644
index 0000000..661cc37
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/Symbols01.txt
@@ -0,0 +1,28 @@
+PsiJavaFile:Symbols01.java
+  PsiImportList
+    <empty list>
+  PsiClass:X
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' ~`!@#$%^&*()_+|\=-')
+      PsiDocToken:DOC_COMMENT_DATA('}')
+      PsiDocToken:DOC_COMMENT_DATA('{')
+      PsiDocToken:DOC_COMMENT_DATA('[]":;'?><,./')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:X('X')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/Symbols02.java b/java/java-tests/testData/psi/parser-full/javadocParsing/Symbols02.java
new file mode 100644
index 0000000..36a6d32
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/Symbols02.java
@@ -0,0 +1,5 @@
+/**
+ * @see Object ~`!@#$%^&*()_+|\=-}{[]":;'?><,./
+ */
+
+class X{}
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/Symbols02.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/Symbols02.txt
new file mode 100644
index 0000000..796f4f7
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/Symbols02.txt
@@ -0,0 +1,38 @@
+PsiJavaFile:Symbols02.java
+  PsiImportList
+    <empty list>
+  PsiClass:X
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' ')
+      PsiDocTag:@see
+        PsiDocToken:DOC_TAG_NAME('@see')
+        PsiWhiteSpace(' ')
+        PsiElement(DOC_REFERENCE_HOLDER)
+          PsiJavaCodeReferenceElement:Object
+            PsiIdentifier:Object('Object')
+            PsiReferenceParameterList
+              <empty list>
+        PsiWhiteSpace(' ')
+        PsiDocToken:DOC_COMMENT_DATA('~`!@#$%^&*()_+|\=-')
+        PsiDocToken:DOC_COMMENT_DATA('}')
+        PsiDocToken:DOC_COMMENT_DATA('{')
+        PsiDocToken:DOC_COMMENT_DATA('[]":;'?><,./')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:X('X')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/Symbols03.java b/java/java-tests/testData/psi/parser-full/javadocParsing/Symbols03.java
new file mode 100644
index 0000000..75c8c9a
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/Symbols03.java
@@ -0,0 +1,5 @@
+/**
+ * {@link Object ~`!@#$%^&*()_+|\=-}{[]":;'?><,./
+ */
+
+class X{}
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/Symbols03.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/Symbols03.txt
new file mode 100644
index 0000000..64eb066
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/Symbols03.txt
@@ -0,0 +1,39 @@
+PsiJavaFile:Symbols03.java
+  PsiImportList
+    <empty list>
+  PsiClass:X
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' ')
+      PsiInlineDocTag:@link
+        PsiDocToken:DOC_INLINE_TAG_START('{')
+        PsiDocToken:DOC_TAG_NAME('@link')
+        PsiWhiteSpace(' ')
+        PsiElement(DOC_REFERENCE_HOLDER)
+          PsiJavaCodeReferenceElement:Object
+            PsiIdentifier:Object('Object')
+            PsiReferenceParameterList
+              <empty list>
+        PsiWhiteSpace(' ')
+        PsiDocToken:DOC_COMMENT_DATA('~`!@#$%^&*()_+|\=-')
+        PsiDocToken:DOC_INLINE_TAG_END('}')
+      PsiDocToken:DOC_COMMENT_DATA('{')
+      PsiDocToken:DOC_COMMENT_DATA('[]":;'?><,./')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:X('X')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/Symbols04.java b/java/java-tests/testData/psi/parser-full/javadocParsing/Symbols04.java
new file mode 100644
index 0000000..6efc679
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/Symbols04.java
@@ -0,0 +1,5 @@
+/**
+ * {@link Object ~`!@#$%^&*()_+|\=-{}[]":;'?><,./
+ */
+
+class X{}
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/Symbols04.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/Symbols04.txt
new file mode 100644
index 0000000..675c403
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/Symbols04.txt
@@ -0,0 +1,39 @@
+PsiJavaFile:Symbols04.java
+  PsiImportList
+    <empty list>
+  PsiClass:X
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' ')
+      PsiInlineDocTag:@link
+        PsiDocToken:DOC_INLINE_TAG_START('{')
+        PsiDocToken:DOC_TAG_NAME('@link')
+        PsiWhiteSpace(' ')
+        PsiElement(DOC_REFERENCE_HOLDER)
+          PsiJavaCodeReferenceElement:Object
+            PsiIdentifier:Object('Object')
+            PsiReferenceParameterList
+              <empty list>
+        PsiWhiteSpace(' ')
+        PsiDocToken:DOC_COMMENT_DATA('~`!@#$%^&*()_+|\=-')
+        PsiDocToken:DOC_COMMENT_DATA('{')
+        PsiDocToken:DOC_COMMENT_DATA('}')
+        PsiDocToken:DOC_COMMENT_DATA('[]":;'?><,./')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:X('X')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/Symbols05.java b/java/java-tests/testData/psi/parser-full/javadocParsing/Symbols05.java
new file mode 100644
index 0000000..383e3667
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/Symbols05.java
@@ -0,0 +1,5 @@
+/**
+ * {@link Object ~`!@#$%^&*()_+|\=-{}[]":;'?><,./} Yes!
+ */
+
+class X{}
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/Symbols05.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/Symbols05.txt
new file mode 100644
index 0000000..959b9b6
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/Symbols05.txt
@@ -0,0 +1,41 @@
+PsiJavaFile:Symbols05.java
+  PsiImportList
+    <empty list>
+  PsiClass:X
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' ')
+      PsiInlineDocTag:@link
+        PsiDocToken:DOC_INLINE_TAG_START('{')
+        PsiDocToken:DOC_TAG_NAME('@link')
+        PsiWhiteSpace(' ')
+        PsiElement(DOC_REFERENCE_HOLDER)
+          PsiJavaCodeReferenceElement:Object
+            PsiIdentifier:Object('Object')
+            PsiReferenceParameterList
+              <empty list>
+        PsiWhiteSpace(' ')
+        PsiDocToken:DOC_COMMENT_DATA('~`!@#$%^&*()_+|\=-')
+        PsiDocToken:DOC_COMMENT_DATA('{')
+        PsiDocToken:DOC_COMMENT_DATA('}')
+        PsiDocToken:DOC_COMMENT_DATA('[]":;'?><,./')
+        PsiDocToken:DOC_INLINE_TAG_END('}')
+      PsiDocToken:DOC_COMMENT_DATA(' Yes!')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:X('X')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/Tag0.java b/java/java-tests/testData/psi/parser-full/javadocParsing/Tag0.java
new file mode 100644
index 0000000..05a6db9
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/Tag0.java
@@ -0,0 +1,4 @@
+/**
+ * @param param
+ */
+class C{}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/Tag0.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/Tag0.txt
new file mode 100644
index 0000000..af6a4b1
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/Tag0.txt
@@ -0,0 +1,30 @@
+PsiJavaFile:Tag0.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' ')
+      PsiDocTag:@param
+        PsiDocToken:DOC_TAG_NAME('@param')
+        PsiWhiteSpace(' ')
+        PsiElement(DOC_PARAMETER_REF)
+          PsiDocToken:DOC_TAG_VALUE_TOKEN('param')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/Tag1.java b/java/java-tests/testData/psi/parser-full/javadocParsing/Tag1.java
new file mode 100644
index 0000000..1c22b4e
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/Tag1.java
@@ -0,0 +1,4 @@
+/**
+ * @param
+ */
+class C{}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/Tag1.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/Tag1.txt
new file mode 100644
index 0000000..1051f2d
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/Tag1.txt
@@ -0,0 +1,27 @@
+PsiJavaFile:Tag1.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' ')
+      PsiDocTag:@param
+        PsiDocToken:DOC_TAG_NAME('@param')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/Tag2.java b/java/java-tests/testData/psi/parser-full/javadocParsing/Tag2.java
new file mode 100644
index 0000000..d781eeb
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/Tag2.java
@@ -0,0 +1,6 @@
+/**
+ * @param value value value
+ * 	value	value
+ * @return value value
+ */
+class C{}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/Tag2.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/Tag2.txt
new file mode 100644
index 0000000..83308bc
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/Tag2.txt
@@ -0,0 +1,45 @@
+PsiJavaFile:Tag2.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' ')
+      PsiDocTag:@param
+        PsiDocToken:DOC_TAG_NAME('@param')
+        PsiWhiteSpace(' ')
+        PsiElement(DOC_PARAMETER_REF)
+          PsiDocToken:DOC_TAG_VALUE_TOKEN('value')
+        PsiWhiteSpace(' ')
+        PsiDocToken:DOC_COMMENT_DATA('value value')
+        PsiWhiteSpace('\n ')
+        PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+        PsiDocToken:DOC_COMMENT_DATA(' \tvalue\tvalue')
+        PsiWhiteSpace('\n ')
+        PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+        PsiDocToken:DOC_COMMENT_DATA(' ')
+      PsiDocTag:@return
+        PsiDocToken:DOC_TAG_NAME('@return')
+        PsiWhiteSpace(' ')
+        PsiElement(DOC_TAG_VALUE_ELEMENT)
+          PsiDocToken:DOC_TAG_VALUE_TOKEN('value')
+        PsiWhiteSpace(' ')
+        PsiDocToken:DOC_COMMENT_DATA('value')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/Tag3.java b/java/java-tests/testData/psi/parser-full/javadocParsing/Tag3.java
new file mode 100644
index 0000000..dac94ad1
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/Tag3.java
@@ -0,0 +1,5 @@
+/**
+ * See {@link someLink}
+ * @param see {@link ...}
+ */
+class C{}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/Tag3.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/Tag3.txt
new file mode 100644
index 0000000..be1f551
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/Tag3.txt
@@ -0,0 +1,51 @@
+PsiJavaFile:Tag3.java
+  PsiImportList
+    <empty list>
+  PsiClass:C
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' See ')
+      PsiInlineDocTag:@link
+        PsiDocToken:DOC_INLINE_TAG_START('{')
+        PsiDocToken:DOC_TAG_NAME('@link')
+        PsiWhiteSpace(' ')
+        PsiElement(DOC_REFERENCE_HOLDER)
+          PsiJavaCodeReferenceElement:someLink
+            PsiIdentifier:someLink('someLink')
+            PsiReferenceParameterList
+              <empty list>
+        PsiDocToken:DOC_INLINE_TAG_END('}')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' ')
+      PsiDocTag:@param
+        PsiDocToken:DOC_TAG_NAME('@param')
+        PsiWhiteSpace(' ')
+        PsiElement(DOC_PARAMETER_REF)
+          PsiDocToken:DOC_TAG_VALUE_TOKEN('see')
+        PsiWhiteSpace(' ')
+        PsiInlineDocTag:@link
+          PsiDocToken:DOC_INLINE_TAG_START('{')
+          PsiDocToken:DOC_TAG_NAME('@link')
+          PsiWhiteSpace(' ')
+          PsiElement(DOC_REFERENCE_HOLDER)
+            PsiJavaToken:ELLIPSIS('...')
+          PsiDocToken:DOC_INLINE_TAG_END('}')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/Tag4.java b/java/java-tests/testData/psi/parser-full/javadocParsing/Tag4.java
new file mode 100644
index 0000000..6ca4093
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/Tag4.java
@@ -0,0 +1,7 @@
+class Test {
+    /**
+     *  @param param some param
+     */
+    public void foo(int param) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/Tag4.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/Tag4.txt
new file mode 100644
index 0000000..ea61aeb
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/Tag4.txt
@@ -0,0 +1,62 @@
+PsiJavaFile:Tag4.java
+  PsiImportList
+    <empty list>
+  PsiClass:Test
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Test('Test')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n    ')
+    PsiMethod:foo
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiWhiteSpace('\n     ')
+        PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+        PsiDocToken:DOC_COMMENT_DATA('  ')
+        PsiDocTag:@param
+          PsiDocToken:DOC_TAG_NAME('@param')
+          PsiWhiteSpace(' ')
+          PsiElement(DOC_PARAMETER_REF)
+            PsiDocToken:DOC_TAG_VALUE_TOKEN('param')
+          PsiWhiteSpace(' ')
+          PsiDocToken:DOC_COMMENT_DATA('some param')
+        PsiWhiteSpace('\n     ')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n    ')
+      PsiModifierList:public
+        PsiKeyword:public('public')
+      PsiTypeParameterList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:(int param)
+        PsiJavaToken:LPARENTH('(')
+        PsiParameter:param
+          PsiModifierList:
+            <empty list>
+          PsiTypeElement:int
+            PsiKeyword:int('int')
+          PsiWhiteSpace(' ')
+          PsiIdentifier:param('param')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/Tag5.java b/java/java-tests/testData/psi/parser-full/javadocParsing/Tag5.java
new file mode 100644
index 0000000..def791f
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/Tag5.java
@@ -0,0 +1,4 @@
+/**
+ *  @ejb:bean this is an EJB  
+ */
+class Test { }
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/Tag5.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/Tag5.txt
new file mode 100644
index 0000000..c6a9b80
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/Tag5.txt
@@ -0,0 +1,34 @@
+PsiJavaFile:Tag5.java
+  PsiImportList
+    <empty list>
+  PsiClass:Test
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA('  ')
+      PsiDocTag:@ejb:bean
+        PsiDocToken:DOC_TAG_NAME('@ejb:bean')
+        PsiWhiteSpace(' ')
+        PsiElement(DOC_TAG_VALUE_ELEMENT)
+          PsiDocToken:DOC_TAG_VALUE_TOKEN('this')
+        PsiWhiteSpace(' ')
+        PsiDocToken:DOC_COMMENT_DATA('is an EJB  ')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Test('Test')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/TypeParam.java b/java/java-tests/testData/psi/parser-full/javadocParsing/TypeParam.java
new file mode 100644
index 0000000..97dfa1d
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/TypeParam.java
@@ -0,0 +1,5 @@
+/**
+ * @param <V>
+ */
+public interface Future<V> {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/javadocParsing/TypeParam.txt b/java/java-tests/testData/psi/parser-full/javadocParsing/TypeParam.txt
new file mode 100644
index 0000000..cd0a4bfe
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/javadocParsing/TypeParam.txt
@@ -0,0 +1,40 @@
+PsiJavaFile:TypeParam.java
+  PsiImportList
+    <empty list>
+  PsiClass:Future
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
+      PsiDocToken:DOC_COMMENT_DATA(' ')
+      PsiDocTag:@param
+        PsiDocToken:DOC_TAG_NAME('@param')
+        PsiWhiteSpace(' ')
+        PsiElement(DOC_PARAMETER_REF)
+          PsiDocToken:DOC_TAG_VALUE_LT('<')
+          PsiDocToken:DOC_TAG_VALUE_TOKEN('V')
+          PsiDocToken:DOC_TAG_VALUE_GT('>')
+      PsiWhiteSpace('\n ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n')
+    PsiModifierList:public
+      PsiKeyword:public('public')
+    PsiWhiteSpace(' ')
+    PsiKeyword:interface('interface')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Future('Future')
+    PsiTypeParameterList
+      PsiJavaToken:LT('<')
+      PsiTypeParameter:V
+        PsiIdentifier:V('V')
+        PsiElement(EXTENDS_BOUND_LIST)
+          <empty list>
+      PsiJavaToken:GT('>')
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/assert/Normal1.java b/java/java-tests/testData/psi/parser-full/statementParsing/assert/Normal1.java
new file mode 100644
index 0000000..f310c9f
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/assert/Normal1.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    assert cond;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/assert/Normal1.txt b/java/java-tests/testData/psi/parser-full/statementParsing/assert/Normal1.txt
new file mode 100644
index 0000000..64057ff
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/assert/Normal1.txt
@@ -0,0 +1,35 @@
+PsiJavaFile:Normal1.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiAssertStatement
+          PsiKeyword:assert('assert')
+          PsiWhiteSpace(' ')
+          PsiReferenceExpression:cond
+            PsiReferenceParameterList
+              <empty list>
+            PsiIdentifier:cond('cond')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/assert/Normal2.java b/java/java-tests/testData/psi/parser-full/statementParsing/assert/Normal2.java
new file mode 100644
index 0000000..777f60e
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/assert/Normal2.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    assert cond : message;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/assert/Normal2.txt b/java/java-tests/testData/psi/parser-full/statementParsing/assert/Normal2.txt
new file mode 100644
index 0000000..c965f86
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/assert/Normal2.txt
@@ -0,0 +1,42 @@
+PsiJavaFile:Normal2.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiAssertStatement
+          PsiKeyword:assert('assert')
+          PsiWhiteSpace(' ')
+          PsiReferenceExpression:cond
+            PsiReferenceParameterList
+              <empty list>
+            PsiIdentifier:cond('cond')
+          PsiWhiteSpace(' ')
+          PsiJavaToken:COLON(':')
+          PsiWhiteSpace(' ')
+          PsiReferenceExpression:message
+            PsiReferenceParameterList
+              <empty list>
+            PsiIdentifier:message('message')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/assignment/Simple.java b/java/java-tests/testData/psi/parser-full/statementParsing/assignment/Simple.java
new file mode 100644
index 0000000..6bb0709
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/assignment/Simple.java
@@ -0,0 +1,6 @@
+class A{
+  {
+    int[] a;
+    a[0] = 0;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/assignment/Simple.txt b/java/java-tests/testData/psi/parser-full/statementParsing/assignment/Simple.txt
new file mode 100644
index 0000000..53366f8
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/assignment/Simple.txt
@@ -0,0 +1,57 @@
+PsiJavaFile:Simple.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiDeclarationStatement
+          PsiLocalVariable:a
+            PsiModifierList:
+              <empty list>
+            PsiTypeElement:int[]
+              PsiTypeElement:int
+                PsiKeyword:int('int')
+              PsiJavaToken:LBRACKET('[')
+              PsiJavaToken:RBRACKET(']')
+            PsiWhiteSpace(' ')
+            PsiIdentifier:a('a')
+            PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiAssignmentExpression:a[0] = 0
+            PsiArrayAccessExpression:a[0]
+              PsiReferenceExpression:a
+                PsiReferenceParameterList
+                  <empty list>
+                PsiIdentifier:a('a')
+              PsiJavaToken:LBRACKET('[')
+              PsiLiteralExpression:0
+                PsiJavaToken:INTEGER_LITERAL('0')
+              PsiJavaToken:RBRACKET(']')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:EQ('=')
+            PsiWhiteSpace(' ')
+            PsiLiteralExpression:0
+              PsiJavaToken:INTEGER_LITERAL('0')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/codeBlock/AnonymousInSmartCompletion.java b/java/java-tests/testData/psi/parser-full/statementParsing/codeBlock/AnonymousInSmartCompletion.java
new file mode 100644
index 0000000..73ab817
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/codeBlock/AnonymousInSmartCompletion.java
@@ -0,0 +1,16 @@
+import pkg.Foo;
+
+class Bar {
+
+  public void foo() {
+    new Foo(hash
+#) {};
+
+new Foo(hash
+#, bar) {};
+ 
+  new Foo(hash
+#x) {};
+
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/codeBlock/AnonymousInSmartCompletion.txt b/java/java-tests/testData/psi/parser-full/statementParsing/codeBlock/AnonymousInSmartCompletion.txt
new file mode 100644
index 0000000..c9a6450
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/codeBlock/AnonymousInSmartCompletion.txt
@@ -0,0 +1,157 @@
+PsiJavaFile:AnonymousInSmartCompletion.java
+  PsiImportList
+    PsiImportStatement
+      PsiKeyword:import('import')
+      PsiWhiteSpace(' ')
+      PsiJavaCodeReferenceElement:pkg.Foo
+        PsiJavaCodeReferenceElement:pkg
+          PsiIdentifier:pkg('pkg')
+          PsiReferenceParameterList
+            <empty list>
+        PsiJavaToken:DOT('.')
+        PsiIdentifier:Foo('Foo')
+        PsiReferenceParameterList
+          <empty list>
+      PsiJavaToken:SEMICOLON(';')
+  PsiWhiteSpace('\n\n')
+  PsiClass:Bar
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Bar('Bar')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n\n  ')
+    PsiMethod:foo
+      PsiModifierList:public
+        PsiKeyword:public('public')
+      PsiTypeParameterList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:foo('foo')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiNewExpression:new Foo(hash
+#) {}
+            PsiKeyword:new('new')
+            PsiReferenceParameterList
+              <empty list>
+            PsiWhiteSpace(' ')
+            PsiAnonymousClass
+              PsiJavaCodeReferenceElement:Foo
+                PsiIdentifier:Foo('Foo')
+                PsiReferenceParameterList
+                  <empty list>
+              PsiExpressionList
+                PsiJavaToken:LPARENTH('(')
+                PsiReferenceExpression:hash
+                  PsiReferenceParameterList
+                    <empty list>
+                  PsiIdentifier:hash('hash')
+                PsiErrorElement:',' or ')' expected
+                  <empty list>
+                PsiExpression(empty)
+                  <empty list>
+                PsiWhiteSpace('\n')
+                PsiElement(BAD_CHARACTER)('#')
+                PsiJavaToken:RPARENTH(')')
+              PsiWhiteSpace(' ')
+              PsiJavaToken:LBRACE('{')
+              PsiJavaToken:RBRACE('}')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n\n')
+        PsiExpressionStatement
+          PsiNewExpression:new Foo(hash
+#, bar) {}
+            PsiKeyword:new('new')
+            PsiReferenceParameterList
+              <empty list>
+            PsiWhiteSpace(' ')
+            PsiAnonymousClass
+              PsiJavaCodeReferenceElement:Foo
+                PsiIdentifier:Foo('Foo')
+                PsiReferenceParameterList
+                  <empty list>
+              PsiExpressionList
+                PsiJavaToken:LPARENTH('(')
+                PsiReferenceExpression:hash
+                  PsiReferenceParameterList
+                    <empty list>
+                  PsiIdentifier:hash('hash')
+                PsiErrorElement:',' or ')' expected
+                  <empty list>
+                PsiExpression(empty)
+                  <empty list>
+                PsiWhiteSpace('\n')
+                PsiElement(BAD_CHARACTER)('#')
+                PsiJavaToken:COMMA(',')
+                PsiWhiteSpace(' ')
+                PsiReferenceExpression:bar
+                  PsiReferenceParameterList
+                    <empty list>
+                  PsiIdentifier:bar('bar')
+                PsiJavaToken:RPARENTH(')')
+              PsiWhiteSpace(' ')
+              PsiJavaToken:LBRACE('{')
+              PsiJavaToken:RBRACE('}')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n \n  ')
+        PsiExpressionStatement
+          PsiNewExpression:new Foo(hash
+#x) {}
+            PsiKeyword:new('new')
+            PsiReferenceParameterList
+              <empty list>
+            PsiWhiteSpace(' ')
+            PsiAnonymousClass
+              PsiJavaCodeReferenceElement:Foo
+                PsiIdentifier:Foo('Foo')
+                PsiReferenceParameterList
+                  <empty list>
+              PsiExpressionList
+                PsiJavaToken:LPARENTH('(')
+                PsiReferenceExpression:hash
+                  PsiReferenceParameterList
+                    <empty list>
+                  PsiIdentifier:hash('hash')
+                PsiErrorElement:',' or ')' expected
+                  <empty list>
+                PsiExpression(empty)
+                  <empty list>
+                PsiWhiteSpace('\n')
+                PsiElement(BAD_CHARACTER)('#')
+                PsiErrorElement:',' or ')' expected
+                  <empty list>
+                PsiExpression(empty)
+                  <empty list>
+                PsiReferenceExpression:x
+                  PsiReferenceParameterList
+                    <empty list>
+                  PsiIdentifier:x('x')
+                PsiJavaToken:RPARENTH(')')
+              PsiWhiteSpace(' ')
+              PsiJavaToken:LBRACE('{')
+              PsiJavaToken:RBRACE('}')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n\n')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/codeBlock/Simple.java b/java/java-tests/testData/psi/parser-full/statementParsing/codeBlock/Simple.java
new file mode 100644
index 0000000..d5ec222
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/codeBlock/Simple.java
@@ -0,0 +1,4 @@
+class A{
+  {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/codeBlock/Simple.txt b/java/java-tests/testData/psi/parser-full/statementParsing/codeBlock/Simple.txt
new file mode 100644
index 0000000..14aff29
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/codeBlock/Simple.txt
@@ -0,0 +1,26 @@
+PsiJavaFile:Simple.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Normal.java b/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Normal.java
new file mode 100644
index 0000000..86ad051
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Normal.java
@@ -0,0 +1,5 @@
+class A{
+  {
+    do{}while(true);
+  }
+}
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Normal.txt b/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Normal.txt
new file mode 100644
index 0000000..7d09a67
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Normal.txt
@@ -0,0 +1,39 @@
+PsiJavaFile:Normal.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiDoWhileStatement
+          PsiKeyword:do('do')
+          PsiBlockStatement
+            PsiCodeBlock
+              PsiJavaToken:LBRACE('{')
+              PsiJavaToken:RBRACE('}')
+          PsiKeyword:while('while')
+          PsiJavaToken:LPARENTH('(')
+          PsiLiteralExpression:true
+            PsiJavaToken:TRUE_KEYWORD('true')
+          PsiJavaToken:RPARENTH(')')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Uncomplete1.java b/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Uncomplete1.java
new file mode 100644
index 0000000..303c999
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Uncomplete1.java
@@ -0,0 +1,5 @@
+class A{
+  {
+    do
+  }
+}
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Uncomplete1.txt b/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Uncomplete1.txt
new file mode 100644
index 0000000..e5cf3d4
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Uncomplete1.txt
@@ -0,0 +1,31 @@
+PsiJavaFile:Uncomplete1.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiDoWhileStatement
+          PsiKeyword:do('do')
+          PsiErrorElement:Statement expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Uncomplete2.java b/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Uncomplete2.java
new file mode 100644
index 0000000..a935d08
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Uncomplete2.java
@@ -0,0 +1,5 @@
+class A{
+  {
+    do foo();
+  }
+}
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Uncomplete2.txt b/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Uncomplete2.txt
new file mode 100644
index 0000000..5dc3663
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Uncomplete2.txt
@@ -0,0 +1,42 @@
+PsiJavaFile:Uncomplete2.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiDoWhileStatement
+          PsiKeyword:do('do')
+          PsiWhiteSpace(' ')
+          PsiExpressionStatement
+            PsiMethodCallExpression:foo()
+              PsiReferenceExpression:foo
+                PsiReferenceParameterList
+                  <empty list>
+                PsiIdentifier:foo('foo')
+              PsiExpressionList
+                PsiJavaToken:LPARENTH('(')
+                PsiJavaToken:RPARENTH(')')
+            PsiJavaToken:SEMICOLON(';')
+          PsiErrorElement:'while' expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Uncomplete3.java b/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Uncomplete3.java
new file mode 100644
index 0000000..dc5412a
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Uncomplete3.java
@@ -0,0 +1,5 @@
+class A{
+  {
+    do foo(); while
+  }
+}
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Uncomplete3.txt b/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Uncomplete3.txt
new file mode 100644
index 0000000..d22a484
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Uncomplete3.txt
@@ -0,0 +1,44 @@
+PsiJavaFile:Uncomplete3.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiDoWhileStatement
+          PsiKeyword:do('do')
+          PsiWhiteSpace(' ')
+          PsiExpressionStatement
+            PsiMethodCallExpression:foo()
+              PsiReferenceExpression:foo
+                PsiReferenceParameterList
+                  <empty list>
+                PsiIdentifier:foo('foo')
+              PsiExpressionList
+                PsiJavaToken:LPARENTH('(')
+                PsiJavaToken:RPARENTH(')')
+            PsiJavaToken:SEMICOLON(';')
+          PsiWhiteSpace(' ')
+          PsiKeyword:while('while')
+          PsiErrorElement:'(' expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Uncomplete4.java b/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Uncomplete4.java
new file mode 100644
index 0000000..ad9f02a
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Uncomplete4.java
@@ -0,0 +1,5 @@
+class A{
+  {
+    do foo(); while(
+  }
+}
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Uncomplete4.txt b/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Uncomplete4.txt
new file mode 100644
index 0000000..500a421
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Uncomplete4.txt
@@ -0,0 +1,45 @@
+PsiJavaFile:Uncomplete4.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiDoWhileStatement
+          PsiKeyword:do('do')
+          PsiWhiteSpace(' ')
+          PsiExpressionStatement
+            PsiMethodCallExpression:foo()
+              PsiReferenceExpression:foo
+                PsiReferenceParameterList
+                  <empty list>
+                PsiIdentifier:foo('foo')
+              PsiExpressionList
+                PsiJavaToken:LPARENTH('(')
+                PsiJavaToken:RPARENTH(')')
+            PsiJavaToken:SEMICOLON(';')
+          PsiWhiteSpace(' ')
+          PsiKeyword:while('while')
+          PsiJavaToken:LPARENTH('(')
+          PsiErrorElement:Expression expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Uncomplete5.java b/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Uncomplete5.java
new file mode 100644
index 0000000..69a2c9b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Uncomplete5.java
@@ -0,0 +1,5 @@
+class A{
+  {
+    do foo(); while();
+  }
+}
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Uncomplete5.txt b/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Uncomplete5.txt
new file mode 100644
index 0000000..79bd284
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Uncomplete5.txt
@@ -0,0 +1,47 @@
+PsiJavaFile:Uncomplete5.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiDoWhileStatement
+          PsiKeyword:do('do')
+          PsiWhiteSpace(' ')
+          PsiExpressionStatement
+            PsiMethodCallExpression:foo()
+              PsiReferenceExpression:foo
+                PsiReferenceParameterList
+                  <empty list>
+                PsiIdentifier:foo('foo')
+              PsiExpressionList
+                PsiJavaToken:LPARENTH('(')
+                PsiJavaToken:RPARENTH(')')
+            PsiJavaToken:SEMICOLON(';')
+          PsiWhiteSpace(' ')
+          PsiKeyword:while('while')
+          PsiJavaToken:LPARENTH('(')
+          PsiErrorElement:Expression expected
+            <empty list>
+          PsiJavaToken:RPARENTH(')')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Uncomplete6.java b/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Uncomplete6.java
new file mode 100644
index 0000000..4c19b76
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Uncomplete6.java
@@ -0,0 +1,6 @@
+class A{
+  {
+    do foo(); while(
+    g();
+  }
+}
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Uncomplete6.txt b/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Uncomplete6.txt
new file mode 100644
index 0000000..f9908c6
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Uncomplete6.txt
@@ -0,0 +1,56 @@
+PsiJavaFile:Uncomplete6.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiDoWhileStatement
+          PsiKeyword:do('do')
+          PsiWhiteSpace(' ')
+          PsiExpressionStatement
+            PsiMethodCallExpression:foo()
+              PsiReferenceExpression:foo
+                PsiReferenceParameterList
+                  <empty list>
+                PsiIdentifier:foo('foo')
+              PsiExpressionList
+                PsiJavaToken:LPARENTH('(')
+                PsiJavaToken:RPARENTH(')')
+            PsiJavaToken:SEMICOLON(';')
+          PsiWhiteSpace(' ')
+          PsiKeyword:while('while')
+          PsiJavaToken:LPARENTH('(')
+          PsiErrorElement:Expression expected
+            <empty list>
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiMethodCallExpression:g()
+            PsiReferenceExpression:g
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:g('g')
+            PsiExpressionList
+              PsiJavaToken:LPARENTH('(')
+              PsiJavaToken:RPARENTH(')')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Uncomplete7.java b/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Uncomplete7.java
new file mode 100644
index 0000000..8944453
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Uncomplete7.java
@@ -0,0 +1,5 @@
+class A{
+  {
+    do foo(); while(cond)
+  }
+}
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Uncomplete7.txt b/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Uncomplete7.txt
new file mode 100644
index 0000000..6707b9f
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/do-while/Uncomplete7.txt
@@ -0,0 +1,50 @@
+PsiJavaFile:Uncomplete7.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiDoWhileStatement
+          PsiKeyword:do('do')
+          PsiWhiteSpace(' ')
+          PsiExpressionStatement
+            PsiMethodCallExpression:foo()
+              PsiReferenceExpression:foo
+                PsiReferenceParameterList
+                  <empty list>
+                PsiIdentifier:foo('foo')
+              PsiExpressionList
+                PsiJavaToken:LPARENTH('(')
+                PsiJavaToken:RPARENTH(')')
+            PsiJavaToken:SEMICOLON(';')
+          PsiWhiteSpace(' ')
+          PsiKeyword:while('while')
+          PsiJavaToken:LPARENTH('(')
+          PsiReferenceExpression:cond
+            PsiReferenceParameterList
+              <empty list>
+            PsiIdentifier:cond('cond')
+          PsiJavaToken:RPARENTH(')')
+          PsiErrorElement:';' expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/for/ForEach1.java b/java/java-tests/testData/psi/parser-full/statementParsing/for/ForEach1.java
new file mode 100644
index 0000000..9214bfc
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/for/ForEach1.java
@@ -0,0 +1,5 @@
+class Foo {
+  {
+    for(Object o : map.entrySet()) ;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/for/ForEach1.txt b/java/java-tests/testData/psi/parser-full/statementParsing/for/ForEach1.txt
new file mode 100644
index 0000000..04dc330
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/for/ForEach1.txt
@@ -0,0 +1,61 @@
+PsiJavaFile:ForEach1.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiForeachStatement
+          PsiKeyword:for('for')
+          PsiJavaToken:LPARENTH('(')
+          PsiParameter:o
+            PsiModifierList:
+              <empty list>
+            PsiTypeElement:Object
+              PsiJavaCodeReferenceElement:Object
+                PsiIdentifier:Object('Object')
+                PsiReferenceParameterList
+                  <empty list>
+            PsiWhiteSpace(' ')
+            PsiIdentifier:o('o')
+          PsiWhiteSpace(' ')
+          PsiJavaToken:COLON(':')
+          PsiWhiteSpace(' ')
+          PsiMethodCallExpression:map.entrySet()
+            PsiReferenceExpression:map.entrySet
+              PsiReferenceExpression:map
+                PsiReferenceParameterList
+                  <empty list>
+                PsiIdentifier:map('map')
+              PsiJavaToken:DOT('.')
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:entrySet('entrySet')
+            PsiExpressionList
+              PsiJavaToken:LPARENTH('(')
+              PsiJavaToken:RPARENTH(')')
+          PsiJavaToken:RPARENTH(')')
+          PsiWhiteSpace(' ')
+          PsiEmptyStatement
+            PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/for/Normal1.java b/java/java-tests/testData/psi/parser-full/statementParsing/for/Normal1.java
new file mode 100644
index 0000000..8cb6f41
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/for/Normal1.java
@@ -0,0 +1,6 @@
+class Foo{
+  {
+    for(int i = 0; i < 10; i++)
+      ;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/for/Normal1.txt b/java/java-tests/testData/psi/parser-full/statementParsing/for/Normal1.txt
new file mode 100644
index 0000000..be9a2e5
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/for/Normal1.txt
@@ -0,0 +1,68 @@
+PsiJavaFile:Normal1.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiForStatement
+          PsiKeyword:for('for')
+          PsiJavaToken:LPARENTH('(')
+          PsiDeclarationStatement
+            PsiLocalVariable:i
+              PsiModifierList:
+                <empty list>
+              PsiTypeElement:int
+                PsiKeyword:int('int')
+              PsiWhiteSpace(' ')
+              PsiIdentifier:i('i')
+              PsiWhiteSpace(' ')
+              PsiJavaToken:EQ('=')
+              PsiWhiteSpace(' ')
+              PsiLiteralExpression:0
+                PsiJavaToken:INTEGER_LITERAL('0')
+              PsiJavaToken:SEMICOLON(';')
+          PsiWhiteSpace(' ')
+          PsiBinaryExpression:i < 10
+            PsiReferenceExpression:i
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:i('i')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:LT('<')
+            PsiWhiteSpace(' ')
+            PsiLiteralExpression:10
+              PsiJavaToken:INTEGER_LITERAL('10')
+          PsiJavaToken:SEMICOLON(';')
+          PsiWhiteSpace(' ')
+          PsiExpressionStatement
+            PsiPostfixExpression:i++
+              PsiReferenceExpression:i
+                PsiReferenceParameterList
+                  <empty list>
+                PsiIdentifier:i('i')
+              PsiJavaToken:PLUSPLUS('++')
+          PsiJavaToken:RPARENTH(')')
+          PsiWhiteSpace('\n      ')
+          PsiEmptyStatement
+            PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/for/Normal2.java b/java/java-tests/testData/psi/parser-full/statementParsing/for/Normal2.java
new file mode 100644
index 0000000..de48be6
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/for/Normal2.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    for( ; ; ) foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/for/Normal2.txt b/java/java-tests/testData/psi/parser-full/statementParsing/for/Normal2.txt
new file mode 100644
index 0000000..d24bd5d
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/for/Normal2.txt
@@ -0,0 +1,48 @@
+PsiJavaFile:Normal2.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiForStatement
+          PsiKeyword:for('for')
+          PsiJavaToken:LPARENTH('(')
+          PsiWhiteSpace(' ')
+          PsiEmptyStatement
+            PsiJavaToken:SEMICOLON(';')
+          PsiWhiteSpace(' ')
+          PsiJavaToken:SEMICOLON(';')
+          PsiWhiteSpace(' ')
+          PsiJavaToken:RPARENTH(')')
+          PsiWhiteSpace(' ')
+          PsiExpressionStatement
+            PsiMethodCallExpression:foo()
+              PsiReferenceExpression:foo
+                PsiReferenceParameterList
+                  <empty list>
+                PsiIdentifier:foo('foo')
+              PsiExpressionList
+                PsiJavaToken:LPARENTH('(')
+                PsiJavaToken:RPARENTH(')')
+            PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete1.java b/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete1.java
new file mode 100644
index 0000000..9fdd5ea
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete1.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    for
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete1.txt b/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete1.txt
new file mode 100644
index 0000000..e7a7fc4
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete1.txt
@@ -0,0 +1,31 @@
+PsiJavaFile:Uncomplete1.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiForStatement
+          PsiKeyword:for('for')
+          PsiErrorElement:'(' expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete10.java b/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete10.java
new file mode 100644
index 0000000..42eedb5
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete10.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    for(int i = 0; i < 0) foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete10.txt b/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete10.txt
new file mode 100644
index 0000000..829db09
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete10.txt
@@ -0,0 +1,69 @@
+PsiJavaFile:Uncomplete10.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiForStatement
+          PsiKeyword:for('for')
+          PsiJavaToken:LPARENTH('(')
+          PsiDeclarationStatement
+            PsiLocalVariable:i
+              PsiModifierList:
+                <empty list>
+              PsiTypeElement:int
+                PsiKeyword:int('int')
+              PsiWhiteSpace(' ')
+              PsiIdentifier:i('i')
+              PsiWhiteSpace(' ')
+              PsiJavaToken:EQ('=')
+              PsiWhiteSpace(' ')
+              PsiLiteralExpression:0
+                PsiJavaToken:INTEGER_LITERAL('0')
+              PsiJavaToken:SEMICOLON(';')
+          PsiWhiteSpace(' ')
+          PsiBinaryExpression:i < 0
+            PsiReferenceExpression:i
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:i('i')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:LT('<')
+            PsiWhiteSpace(' ')
+            PsiLiteralExpression:0
+              PsiJavaToken:INTEGER_LITERAL('0')
+          PsiErrorElement:';' expected
+            <empty list>
+          PsiJavaToken:RPARENTH(')')
+          PsiWhiteSpace(' ')
+          PsiExpressionStatement
+            PsiMethodCallExpression:foo()
+              PsiReferenceExpression:foo
+                PsiReferenceParameterList
+                  <empty list>
+                PsiIdentifier:foo('foo')
+              PsiExpressionList
+                PsiJavaToken:LPARENTH('(')
+                PsiJavaToken:RPARENTH(')')
+            PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete2.java b/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete2.java
new file mode 100644
index 0000000..bb44f31
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete2.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    for(
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete2.txt b/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete2.txt
new file mode 100644
index 0000000..aaa97df
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete2.txt
@@ -0,0 +1,32 @@
+PsiJavaFile:Uncomplete2.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiForStatement
+          PsiKeyword:for('for')
+          PsiJavaToken:LPARENTH('(')
+          PsiErrorElement:Statement expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete3.java b/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete3.java
new file mode 100644
index 0000000..76094dc
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete3.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    for(int i = 0;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete3.txt b/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete3.txt
new file mode 100644
index 0000000..4c20004
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete3.txt
@@ -0,0 +1,46 @@
+PsiJavaFile:Uncomplete3.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiForStatement
+          PsiKeyword:for('for')
+          PsiJavaToken:LPARENTH('(')
+          PsiDeclarationStatement
+            PsiLocalVariable:i
+              PsiModifierList:
+                <empty list>
+              PsiTypeElement:int
+                PsiKeyword:int('int')
+              PsiWhiteSpace(' ')
+              PsiIdentifier:i('i')
+              PsiWhiteSpace(' ')
+              PsiJavaToken:EQ('=')
+              PsiWhiteSpace(' ')
+              PsiLiteralExpression:0
+                PsiJavaToken:INTEGER_LITERAL('0')
+              PsiJavaToken:SEMICOLON(';')
+          PsiErrorElement:';' expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete4.java b/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete4.java
new file mode 100644
index 0000000..00cae20
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete4.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    for(int i = 0; i < 10
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete4.txt b/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete4.txt
new file mode 100644
index 0000000..895da40
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete4.txt
@@ -0,0 +1,57 @@
+PsiJavaFile:Uncomplete4.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiForStatement
+          PsiKeyword:for('for')
+          PsiJavaToken:LPARENTH('(')
+          PsiDeclarationStatement
+            PsiLocalVariable:i
+              PsiModifierList:
+                <empty list>
+              PsiTypeElement:int
+                PsiKeyword:int('int')
+              PsiWhiteSpace(' ')
+              PsiIdentifier:i('i')
+              PsiWhiteSpace(' ')
+              PsiJavaToken:EQ('=')
+              PsiWhiteSpace(' ')
+              PsiLiteralExpression:0
+                PsiJavaToken:INTEGER_LITERAL('0')
+              PsiJavaToken:SEMICOLON(';')
+          PsiWhiteSpace(' ')
+          PsiBinaryExpression:i < 10
+            PsiReferenceExpression:i
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:i('i')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:LT('<')
+            PsiWhiteSpace(' ')
+            PsiLiteralExpression:10
+              PsiJavaToken:INTEGER_LITERAL('10')
+          PsiErrorElement:';' expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete5.java b/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete5.java
new file mode 100644
index 0000000..07beb80
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete5.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    for(int i = 0; i < 10;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete5.txt b/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete5.txt
new file mode 100644
index 0000000..39eee08
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete5.txt
@@ -0,0 +1,58 @@
+PsiJavaFile:Uncomplete5.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiForStatement
+          PsiKeyword:for('for')
+          PsiJavaToken:LPARENTH('(')
+          PsiDeclarationStatement
+            PsiLocalVariable:i
+              PsiModifierList:
+                <empty list>
+              PsiTypeElement:int
+                PsiKeyword:int('int')
+              PsiWhiteSpace(' ')
+              PsiIdentifier:i('i')
+              PsiWhiteSpace(' ')
+              PsiJavaToken:EQ('=')
+              PsiWhiteSpace(' ')
+              PsiLiteralExpression:0
+                PsiJavaToken:INTEGER_LITERAL('0')
+              PsiJavaToken:SEMICOLON(';')
+          PsiWhiteSpace(' ')
+          PsiBinaryExpression:i < 10
+            PsiReferenceExpression:i
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:i('i')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:LT('<')
+            PsiWhiteSpace(' ')
+            PsiLiteralExpression:10
+              PsiJavaToken:INTEGER_LITERAL('10')
+          PsiJavaToken:SEMICOLON(';')
+          PsiErrorElement:')' expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete6.java b/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete6.java
new file mode 100644
index 0000000..1afeadb
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete6.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    for(int i = 0; i < 10; i++
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete6.txt b/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete6.txt
new file mode 100644
index 0000000..e9df232
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete6.txt
@@ -0,0 +1,66 @@
+PsiJavaFile:Uncomplete6.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiForStatement
+          PsiKeyword:for('for')
+          PsiJavaToken:LPARENTH('(')
+          PsiDeclarationStatement
+            PsiLocalVariable:i
+              PsiModifierList:
+                <empty list>
+              PsiTypeElement:int
+                PsiKeyword:int('int')
+              PsiWhiteSpace(' ')
+              PsiIdentifier:i('i')
+              PsiWhiteSpace(' ')
+              PsiJavaToken:EQ('=')
+              PsiWhiteSpace(' ')
+              PsiLiteralExpression:0
+                PsiJavaToken:INTEGER_LITERAL('0')
+              PsiJavaToken:SEMICOLON(';')
+          PsiWhiteSpace(' ')
+          PsiBinaryExpression:i < 10
+            PsiReferenceExpression:i
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:i('i')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:LT('<')
+            PsiWhiteSpace(' ')
+            PsiLiteralExpression:10
+              PsiJavaToken:INTEGER_LITERAL('10')
+          PsiJavaToken:SEMICOLON(';')
+          PsiWhiteSpace(' ')
+          PsiExpressionStatement
+            PsiPostfixExpression:i++
+              PsiReferenceExpression:i
+                PsiReferenceParameterList
+                  <empty list>
+                PsiIdentifier:i('i')
+              PsiJavaToken:PLUSPLUS('++')
+          PsiErrorElement:')' expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete7.java b/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete7.java
new file mode 100644
index 0000000..2849da1
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete7.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    for(int i = 0; i < 10; i++)
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete7.txt b/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete7.txt
new file mode 100644
index 0000000..fa1e9ac
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete7.txt
@@ -0,0 +1,67 @@
+PsiJavaFile:Uncomplete7.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiForStatement
+          PsiKeyword:for('for')
+          PsiJavaToken:LPARENTH('(')
+          PsiDeclarationStatement
+            PsiLocalVariable:i
+              PsiModifierList:
+                <empty list>
+              PsiTypeElement:int
+                PsiKeyword:int('int')
+              PsiWhiteSpace(' ')
+              PsiIdentifier:i('i')
+              PsiWhiteSpace(' ')
+              PsiJavaToken:EQ('=')
+              PsiWhiteSpace(' ')
+              PsiLiteralExpression:0
+                PsiJavaToken:INTEGER_LITERAL('0')
+              PsiJavaToken:SEMICOLON(';')
+          PsiWhiteSpace(' ')
+          PsiBinaryExpression:i < 10
+            PsiReferenceExpression:i
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:i('i')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:LT('<')
+            PsiWhiteSpace(' ')
+            PsiLiteralExpression:10
+              PsiJavaToken:INTEGER_LITERAL('10')
+          PsiJavaToken:SEMICOLON(';')
+          PsiWhiteSpace(' ')
+          PsiExpressionStatement
+            PsiPostfixExpression:i++
+              PsiReferenceExpression:i
+                PsiReferenceParameterList
+                  <empty list>
+                PsiIdentifier:i('i')
+              PsiJavaToken:PLUSPLUS('++')
+          PsiJavaToken:RPARENTH(')')
+          PsiErrorElement:Statement expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete8.java b/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete8.java
new file mode 100644
index 0000000..9211788
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete8.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    for() foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete8.txt b/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete8.txt
new file mode 100644
index 0000000..1370415
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete8.txt
@@ -0,0 +1,44 @@
+PsiJavaFile:Uncomplete8.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiForStatement
+          PsiKeyword:for('for')
+          PsiJavaToken:LPARENTH('(')
+          PsiErrorElement:Statement expected
+            <empty list>
+          PsiJavaToken:RPARENTH(')')
+          PsiWhiteSpace(' ')
+          PsiExpressionStatement
+            PsiMethodCallExpression:foo()
+              PsiReferenceExpression:foo
+                PsiReferenceParameterList
+                  <empty list>
+                PsiIdentifier:foo('foo')
+              PsiExpressionList
+                PsiJavaToken:LPARENTH('(')
+                PsiJavaToken:RPARENTH(')')
+            PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete9.java b/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete9.java
new file mode 100644
index 0000000..7ca7d2c
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete9.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    for(int i = 0;) foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete9.txt b/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete9.txt
new file mode 100644
index 0000000..cebc616
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/for/Uncomplete9.txt
@@ -0,0 +1,58 @@
+PsiJavaFile:Uncomplete9.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiForStatement
+          PsiKeyword:for('for')
+          PsiJavaToken:LPARENTH('(')
+          PsiDeclarationStatement
+            PsiLocalVariable:i
+              PsiModifierList:
+                <empty list>
+              PsiTypeElement:int
+                PsiKeyword:int('int')
+              PsiWhiteSpace(' ')
+              PsiIdentifier:i('i')
+              PsiWhiteSpace(' ')
+              PsiJavaToken:EQ('=')
+              PsiWhiteSpace(' ')
+              PsiLiteralExpression:0
+                PsiJavaToken:INTEGER_LITERAL('0')
+              PsiJavaToken:SEMICOLON(';')
+          PsiErrorElement:';' expected
+            <empty list>
+          PsiJavaToken:RPARENTH(')')
+          PsiWhiteSpace(' ')
+          PsiExpressionStatement
+            PsiMethodCallExpression:foo()
+              PsiReferenceExpression:foo
+                PsiReferenceParameterList
+                  <empty list>
+                PsiIdentifier:foo('foo')
+              PsiExpressionList
+                PsiJavaToken:LPARENTH('(')
+                PsiJavaToken:RPARENTH(')')
+            PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/genericsParsing/For.java b/java/java-tests/testData/psi/parser-full/statementParsing/genericsParsing/For.java
new file mode 100644
index 0000000..819c0cf
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/genericsParsing/For.java
@@ -0,0 +1,7 @@
+class Test {
+    void method() {
+        for(Iterator<String> it = null; it.hasNext();) {
+            String s = it.next();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/genericsParsing/For.txt b/java/java-tests/testData/psi/parser-full/statementParsing/genericsParsing/For.txt
new file mode 100644
index 0000000..a16dccc
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/genericsParsing/For.txt
@@ -0,0 +1,117 @@
+PsiJavaFile:For.java
+  PsiImportList
+    <empty list>
+  PsiClass:Test
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Test('Test')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n    ')
+    PsiMethod:method
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:method('method')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n        ')
+        PsiForStatement
+          PsiKeyword:for('for')
+          PsiJavaToken:LPARENTH('(')
+          PsiDeclarationStatement
+            PsiLocalVariable:it
+              PsiModifierList:
+                <empty list>
+              PsiTypeElement:Iterator<String>
+                PsiJavaCodeReferenceElement:Iterator<String>
+                  PsiIdentifier:Iterator('Iterator')
+                  PsiReferenceParameterList
+                    PsiJavaToken:LT('<')
+                    PsiTypeElement:String
+                      PsiJavaCodeReferenceElement:String
+                        PsiIdentifier:String('String')
+                        PsiReferenceParameterList
+                          <empty list>
+                    PsiJavaToken:GT('>')
+              PsiWhiteSpace(' ')
+              PsiIdentifier:it('it')
+              PsiWhiteSpace(' ')
+              PsiJavaToken:EQ('=')
+              PsiWhiteSpace(' ')
+              PsiLiteralExpression:null
+                PsiJavaToken:NULL_KEYWORD('null')
+              PsiJavaToken:SEMICOLON(';')
+          PsiWhiteSpace(' ')
+          PsiMethodCallExpression:it.hasNext()
+            PsiReferenceExpression:it.hasNext
+              PsiReferenceExpression:it
+                PsiReferenceParameterList
+                  <empty list>
+                PsiIdentifier:it('it')
+              PsiJavaToken:DOT('.')
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:hasNext('hasNext')
+            PsiExpressionList
+              PsiJavaToken:LPARENTH('(')
+              PsiJavaToken:RPARENTH(')')
+          PsiJavaToken:SEMICOLON(';')
+          PsiJavaToken:RPARENTH(')')
+          PsiWhiteSpace(' ')
+          PsiBlockStatement
+            PsiCodeBlock
+              PsiJavaToken:LBRACE('{')
+              PsiWhiteSpace('\n            ')
+              PsiDeclarationStatement
+                PsiLocalVariable:s
+                  PsiModifierList:
+                    <empty list>
+                  PsiTypeElement:String
+                    PsiJavaCodeReferenceElement:String
+                      PsiIdentifier:String('String')
+                      PsiReferenceParameterList
+                        <empty list>
+                  PsiWhiteSpace(' ')
+                  PsiIdentifier:s('s')
+                  PsiWhiteSpace(' ')
+                  PsiJavaToken:EQ('=')
+                  PsiWhiteSpace(' ')
+                  PsiMethodCallExpression:it.next()
+                    PsiReferenceExpression:it.next
+                      PsiReferenceExpression:it
+                        PsiReferenceParameterList
+                          <empty list>
+                        PsiIdentifier:it('it')
+                      PsiJavaToken:DOT('.')
+                      PsiReferenceParameterList
+                        <empty list>
+                      PsiIdentifier:next('next')
+                    PsiExpressionList
+                      PsiJavaToken:LPARENTH('(')
+                      PsiJavaToken:RPARENTH(')')
+                  PsiJavaToken:SEMICOLON(';')
+              PsiWhiteSpace('\n        ')
+              PsiJavaToken:RBRACE('}')
+        PsiWhiteSpace('\n    ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/genericsParsing/LocalVar.java b/java/java-tests/testData/psi/parser-full/statementParsing/genericsParsing/LocalVar.java
new file mode 100644
index 0000000..3003c5b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/genericsParsing/LocalVar.java
@@ -0,0 +1,5 @@
+class Test {
+    void method() {
+        List<Integer> list;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/genericsParsing/LocalVar.txt b/java/java-tests/testData/psi/parser-full/statementParsing/genericsParsing/LocalVar.txt
new file mode 100644
index 0000000..429db97
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/genericsParsing/LocalVar.txt
@@ -0,0 +1,58 @@
+PsiJavaFile:LocalVar.java
+  PsiImportList
+    <empty list>
+  PsiClass:Test
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Test('Test')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n    ')
+    PsiMethod:method
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:method('method')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n        ')
+        PsiDeclarationStatement
+          PsiLocalVariable:list
+            PsiModifierList:
+              <empty list>
+            PsiTypeElement:List<Integer>
+              PsiJavaCodeReferenceElement:List<Integer>
+                PsiIdentifier:List('List')
+                PsiReferenceParameterList
+                  PsiJavaToken:LT('<')
+                  PsiTypeElement:Integer
+                    PsiJavaCodeReferenceElement:Integer
+                      PsiIdentifier:Integer('Integer')
+                      PsiReferenceParameterList
+                        <empty list>
+                  PsiJavaToken:GT('>')
+            PsiWhiteSpace(' ')
+            PsiIdentifier:list('list')
+            PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n    ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/if/NormalNoElse.java b/java/java-tests/testData/psi/parser-full/statementParsing/if/NormalNoElse.java
new file mode 100644
index 0000000..945768b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/if/NormalNoElse.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    if (a) f1();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/if/NormalNoElse.txt b/java/java-tests/testData/psi/parser-full/statementParsing/if/NormalNoElse.txt
new file mode 100644
index 0000000..da2ece2
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/if/NormalNoElse.txt
@@ -0,0 +1,47 @@
+PsiJavaFile:NormalNoElse.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiIfStatement
+          PsiKeyword:if('if')
+          PsiWhiteSpace(' ')
+          PsiJavaToken:LPARENTH('(')
+          PsiReferenceExpression:a
+            PsiReferenceParameterList
+              <empty list>
+            PsiIdentifier:a('a')
+          PsiJavaToken:RPARENTH(')')
+          PsiWhiteSpace(' ')
+          PsiExpressionStatement
+            PsiMethodCallExpression:f1()
+              PsiReferenceExpression:f1
+                PsiReferenceParameterList
+                  <empty list>
+                PsiIdentifier:f1('f1')
+              PsiExpressionList
+                PsiJavaToken:LPARENTH('(')
+                PsiJavaToken:RPARENTH(')')
+            PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/if/NormalWithElse.java b/java/java-tests/testData/psi/parser-full/statementParsing/if/NormalWithElse.java
new file mode 100644
index 0000000..9873ead
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/if/NormalWithElse.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    if (a){ f1(); } else{ f2(); }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/if/NormalWithElse.txt b/java/java-tests/testData/psi/parser-full/statementParsing/if/NormalWithElse.txt
new file mode 100644
index 0000000..b5bf61c
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/if/NormalWithElse.txt
@@ -0,0 +1,70 @@
+PsiJavaFile:NormalWithElse.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiIfStatement
+          PsiKeyword:if('if')
+          PsiWhiteSpace(' ')
+          PsiJavaToken:LPARENTH('(')
+          PsiReferenceExpression:a
+            PsiReferenceParameterList
+              <empty list>
+            PsiIdentifier:a('a')
+          PsiJavaToken:RPARENTH(')')
+          PsiBlockStatement
+            PsiCodeBlock
+              PsiJavaToken:LBRACE('{')
+              PsiWhiteSpace(' ')
+              PsiExpressionStatement
+                PsiMethodCallExpression:f1()
+                  PsiReferenceExpression:f1
+                    PsiReferenceParameterList
+                      <empty list>
+                    PsiIdentifier:f1('f1')
+                  PsiExpressionList
+                    PsiJavaToken:LPARENTH('(')
+                    PsiJavaToken:RPARENTH(')')
+                PsiJavaToken:SEMICOLON(';')
+              PsiWhiteSpace(' ')
+              PsiJavaToken:RBRACE('}')
+          PsiWhiteSpace(' ')
+          PsiKeyword:else('else')
+          PsiBlockStatement
+            PsiCodeBlock
+              PsiJavaToken:LBRACE('{')
+              PsiWhiteSpace(' ')
+              PsiExpressionStatement
+                PsiMethodCallExpression:f2()
+                  PsiReferenceExpression:f2
+                    PsiReferenceParameterList
+                      <empty list>
+                    PsiIdentifier:f2('f2')
+                  PsiExpressionList
+                    PsiJavaToken:LPARENTH('(')
+                    PsiJavaToken:RPARENTH(')')
+                PsiJavaToken:SEMICOLON(';')
+              PsiWhiteSpace(' ')
+              PsiJavaToken:RBRACE('}')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/if/Uncomplete1.java b/java/java-tests/testData/psi/parser-full/statementParsing/if/Uncomplete1.java
new file mode 100644
index 0000000..b573b49
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/if/Uncomplete1.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    if
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/if/Uncomplete1.txt b/java/java-tests/testData/psi/parser-full/statementParsing/if/Uncomplete1.txt
new file mode 100644
index 0000000..26cc4fc
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/if/Uncomplete1.txt
@@ -0,0 +1,31 @@
+PsiJavaFile:Uncomplete1.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiIfStatement
+          PsiKeyword:if('if')
+          PsiErrorElement:'(' expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/if/Uncomplete2.java b/java/java-tests/testData/psi/parser-full/statementParsing/if/Uncomplete2.java
new file mode 100644
index 0000000..0d64ffe
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/if/Uncomplete2.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    if (
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/if/Uncomplete2.txt b/java/java-tests/testData/psi/parser-full/statementParsing/if/Uncomplete2.txt
new file mode 100644
index 0000000..d498340
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/if/Uncomplete2.txt
@@ -0,0 +1,33 @@
+PsiJavaFile:Uncomplete2.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiIfStatement
+          PsiKeyword:if('if')
+          PsiWhiteSpace(' ')
+          PsiJavaToken:LPARENTH('(')
+          PsiErrorElement:Expression expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/if/Uncomplete3.java b/java/java-tests/testData/psi/parser-full/statementParsing/if/Uncomplete3.java
new file mode 100644
index 0000000..bb8a282
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/if/Uncomplete3.java
@@ -0,0 +1,6 @@
+class Foo{
+  {
+    if (
+    foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/if/Uncomplete3.txt b/java/java-tests/testData/psi/parser-full/statementParsing/if/Uncomplete3.txt
new file mode 100644
index 0000000..29fab8e
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/if/Uncomplete3.txt
@@ -0,0 +1,44 @@
+PsiJavaFile:Uncomplete3.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiIfStatement
+          PsiKeyword:if('if')
+          PsiWhiteSpace(' ')
+          PsiJavaToken:LPARENTH('(')
+          PsiErrorElement:Expression expected
+            <empty list>
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiMethodCallExpression:foo()
+            PsiReferenceExpression:foo
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:foo('foo')
+            PsiExpressionList
+              PsiJavaToken:LPARENTH('(')
+              PsiJavaToken:RPARENTH(')')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/if/Uncomplete4.java b/java/java-tests/testData/psi/parser-full/statementParsing/if/Uncomplete4.java
new file mode 100644
index 0000000..79f9bb2
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/if/Uncomplete4.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    if (cond
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/if/Uncomplete4.txt b/java/java-tests/testData/psi/parser-full/statementParsing/if/Uncomplete4.txt
new file mode 100644
index 0000000..c519448
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/if/Uncomplete4.txt
@@ -0,0 +1,37 @@
+PsiJavaFile:Uncomplete4.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiIfStatement
+          PsiKeyword:if('if')
+          PsiWhiteSpace(' ')
+          PsiJavaToken:LPARENTH('(')
+          PsiReferenceExpression:cond
+            PsiReferenceParameterList
+              <empty list>
+            PsiIdentifier:cond('cond')
+          PsiErrorElement:')' expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/if/Uncomplete5.java b/java/java-tests/testData/psi/parser-full/statementParsing/if/Uncomplete5.java
new file mode 100644
index 0000000..119e601
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/if/Uncomplete5.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    if (cond)
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/if/Uncomplete5.txt b/java/java-tests/testData/psi/parser-full/statementParsing/if/Uncomplete5.txt
new file mode 100644
index 0000000..0aa924a
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/if/Uncomplete5.txt
@@ -0,0 +1,38 @@
+PsiJavaFile:Uncomplete5.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiIfStatement
+          PsiKeyword:if('if')
+          PsiWhiteSpace(' ')
+          PsiJavaToken:LPARENTH('(')
+          PsiReferenceExpression:cond
+            PsiReferenceParameterList
+              <empty list>
+            PsiIdentifier:cond('cond')
+          PsiJavaToken:RPARENTH(')')
+          PsiErrorElement:Statement expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/if/Uncomplete6.java b/java/java-tests/testData/psi/parser-full/statementParsing/if/Uncomplete6.java
new file mode 100644
index 0000000..f4a2781
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/if/Uncomplete6.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    if () foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/if/Uncomplete6.txt b/java/java-tests/testData/psi/parser-full/statementParsing/if/Uncomplete6.txt
new file mode 100644
index 0000000..d9369aa
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/if/Uncomplete6.txt
@@ -0,0 +1,45 @@
+PsiJavaFile:Uncomplete6.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiIfStatement
+          PsiKeyword:if('if')
+          PsiWhiteSpace(' ')
+          PsiJavaToken:LPARENTH('(')
+          PsiErrorElement:Expression expected
+            <empty list>
+          PsiJavaToken:RPARENTH(')')
+          PsiWhiteSpace(' ')
+          PsiExpressionStatement
+            PsiMethodCallExpression:foo()
+              PsiReferenceExpression:foo
+                PsiReferenceParameterList
+                  <empty list>
+                PsiIdentifier:foo('foo')
+              PsiExpressionList
+                PsiJavaToken:LPARENTH('(')
+                PsiJavaToken:RPARENTH(')')
+            PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/if/Uncomplete7.java b/java/java-tests/testData/psi/parser-full/statementParsing/if/Uncomplete7.java
new file mode 100644
index 0000000..0dddb84
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/if/Uncomplete7.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    if (cond) foo(); else
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/if/Uncomplete7.txt b/java/java-tests/testData/psi/parser-full/statementParsing/if/Uncomplete7.txt
new file mode 100644
index 0000000..042bf2e
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/if/Uncomplete7.txt
@@ -0,0 +1,51 @@
+PsiJavaFile:Uncomplete7.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiIfStatement
+          PsiKeyword:if('if')
+          PsiWhiteSpace(' ')
+          PsiJavaToken:LPARENTH('(')
+          PsiReferenceExpression:cond
+            PsiReferenceParameterList
+              <empty list>
+            PsiIdentifier:cond('cond')
+          PsiJavaToken:RPARENTH(')')
+          PsiWhiteSpace(' ')
+          PsiExpressionStatement
+            PsiMethodCallExpression:foo()
+              PsiReferenceExpression:foo
+                PsiReferenceParameterList
+                  <empty list>
+                PsiIdentifier:foo('foo')
+              PsiExpressionList
+                PsiJavaToken:LPARENTH('(')
+                PsiJavaToken:RPARENTH(')')
+            PsiJavaToken:SEMICOLON(';')
+          PsiWhiteSpace(' ')
+          PsiKeyword:else('else')
+          PsiErrorElement:Statement expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/label/Simple.java b/java/java-tests/testData/psi/parser-full/statementParsing/label/Simple.java
new file mode 100644
index 0000000..a2878da
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/label/Simple.java
@@ -0,0 +1,6 @@
+class A{
+  {
+Loop:
+  while(true) ;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/label/Simple.txt b/java/java-tests/testData/psi/parser-full/statementParsing/label/Simple.txt
new file mode 100644
index 0000000..98508d2
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/label/Simple.txt
@@ -0,0 +1,40 @@
+PsiJavaFile:Simple.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n')
+        PsiLabeledStatement
+          PsiIdentifier:Loop('Loop')
+          PsiJavaToken:COLON(':')
+          PsiWhiteSpace('\n  ')
+          PsiWhileStatement
+            PsiKeyword:while('while')
+            PsiJavaToken:LPARENTH('(')
+            PsiLiteralExpression:true
+              PsiJavaToken:TRUE_KEYWORD('true')
+            PsiJavaToken:RPARENTH(')')
+            PsiWhiteSpace(' ')
+            PsiEmptyStatement
+              PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/return/NormalNoResult.java b/java/java-tests/testData/psi/parser-full/statementParsing/return/NormalNoResult.java
new file mode 100644
index 0000000..d6cc2bb
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/return/NormalNoResult.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    return;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/return/NormalNoResult.txt b/java/java-tests/testData/psi/parser-full/statementParsing/return/NormalNoResult.txt
new file mode 100644
index 0000000..2f6db32e
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/return/NormalNoResult.txt
@@ -0,0 +1,30 @@
+PsiJavaFile:NormalNoResult.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiReturnStatement
+          PsiKeyword:return('return')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/return/NormalWithResult.java b/java/java-tests/testData/psi/parser-full/statementParsing/return/NormalWithResult.java
new file mode 100644
index 0000000..f76aaf4
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/return/NormalWithResult.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    return 10;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/return/NormalWithResult.txt b/java/java-tests/testData/psi/parser-full/statementParsing/return/NormalWithResult.txt
new file mode 100644
index 0000000..7131a44
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/return/NormalWithResult.txt
@@ -0,0 +1,33 @@
+PsiJavaFile:NormalWithResult.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiReturnStatement
+          PsiKeyword:return('return')
+          PsiWhiteSpace(' ')
+          PsiLiteralExpression:10
+            PsiJavaToken:INTEGER_LITERAL('10')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/return/Uncomplete1.java b/java/java-tests/testData/psi/parser-full/statementParsing/return/Uncomplete1.java
new file mode 100644
index 0000000..619bb18
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/return/Uncomplete1.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    return
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/return/Uncomplete1.txt b/java/java-tests/testData/psi/parser-full/statementParsing/return/Uncomplete1.txt
new file mode 100644
index 0000000..520b777
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/return/Uncomplete1.txt
@@ -0,0 +1,31 @@
+PsiJavaFile:Uncomplete1.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiReturnStatement
+          PsiKeyword:return('return')
+          PsiErrorElement:';' expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/return/Uncomplete2.java b/java/java-tests/testData/psi/parser-full/statementParsing/return/Uncomplete2.java
new file mode 100644
index 0000000..046e5ee
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/return/Uncomplete2.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    return a
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/return/Uncomplete2.txt b/java/java-tests/testData/psi/parser-full/statementParsing/return/Uncomplete2.txt
new file mode 100644
index 0000000..26acb09
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/return/Uncomplete2.txt
@@ -0,0 +1,36 @@
+PsiJavaFile:Uncomplete2.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiReturnStatement
+          PsiKeyword:return('return')
+          PsiWhiteSpace(' ')
+          PsiReferenceExpression:a
+            PsiReferenceParameterList
+              <empty list>
+            PsiIdentifier:a('a')
+          PsiErrorElement:';' expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/switch/Normal.java b/java/java-tests/testData/psi/parser-full/statementParsing/switch/Normal.java
new file mode 100644
index 0000000..ff024a5
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/switch/Normal.java
@@ -0,0 +1,5 @@
+class A{
+  {
+    switch(o){}
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/switch/Normal.txt b/java/java-tests/testData/psi/parser-full/statementParsing/switch/Normal.txt
new file mode 100644
index 0000000..6138ddc
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/switch/Normal.txt
@@ -0,0 +1,38 @@
+PsiJavaFile:Normal.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiSwitchStatement
+          PsiKeyword:switch('switch')
+          PsiJavaToken:LPARENTH('(')
+          PsiReferenceExpression:o
+            PsiReferenceParameterList
+              <empty list>
+            PsiIdentifier:o('o')
+          PsiJavaToken:RPARENTH(')')
+          PsiCodeBlock
+            PsiJavaToken:LBRACE('{')
+            PsiJavaToken:RBRACE('}')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/switch/Uncomplete1.java b/java/java-tests/testData/psi/parser-full/statementParsing/switch/Uncomplete1.java
new file mode 100644
index 0000000..4990716c
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/switch/Uncomplete1.java
@@ -0,0 +1,5 @@
+class A{
+  {
+    switch
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/switch/Uncomplete1.txt b/java/java-tests/testData/psi/parser-full/statementParsing/switch/Uncomplete1.txt
new file mode 100644
index 0000000..afdadf1
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/switch/Uncomplete1.txt
@@ -0,0 +1,31 @@
+PsiJavaFile:Uncomplete1.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiSwitchStatement
+          PsiKeyword:switch('switch')
+          PsiErrorElement:'(' expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/switch/Uncomplete2.java b/java/java-tests/testData/psi/parser-full/statementParsing/switch/Uncomplete2.java
new file mode 100644
index 0000000..a858385
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/switch/Uncomplete2.java
@@ -0,0 +1,5 @@
+class A{
+  {
+    switch(
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/switch/Uncomplete2.txt b/java/java-tests/testData/psi/parser-full/statementParsing/switch/Uncomplete2.txt
new file mode 100644
index 0000000..682af81
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/switch/Uncomplete2.txt
@@ -0,0 +1,32 @@
+PsiJavaFile:Uncomplete2.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiSwitchStatement
+          PsiKeyword:switch('switch')
+          PsiJavaToken:LPARENTH('(')
+          PsiErrorElement:Expression expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/switch/Uncomplete3.java b/java/java-tests/testData/psi/parser-full/statementParsing/switch/Uncomplete3.java
new file mode 100644
index 0000000..738b312
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/switch/Uncomplete3.java
@@ -0,0 +1,5 @@
+class A{
+  {
+    switch(o
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/switch/Uncomplete3.txt b/java/java-tests/testData/psi/parser-full/statementParsing/switch/Uncomplete3.txt
new file mode 100644
index 0000000..f532add
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/switch/Uncomplete3.txt
@@ -0,0 +1,36 @@
+PsiJavaFile:Uncomplete3.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiSwitchStatement
+          PsiKeyword:switch('switch')
+          PsiJavaToken:LPARENTH('(')
+          PsiReferenceExpression:o
+            PsiReferenceParameterList
+              <empty list>
+            PsiIdentifier:o('o')
+          PsiErrorElement:')' expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/switch/Uncomplete4.java b/java/java-tests/testData/psi/parser-full/statementParsing/switch/Uncomplete4.java
new file mode 100644
index 0000000..63052ee
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/switch/Uncomplete4.java
@@ -0,0 +1,5 @@
+class A{
+  {
+    switch(o)
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/switch/Uncomplete4.txt b/java/java-tests/testData/psi/parser-full/statementParsing/switch/Uncomplete4.txt
new file mode 100644
index 0000000..4031c8f
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/switch/Uncomplete4.txt
@@ -0,0 +1,37 @@
+PsiJavaFile:Uncomplete4.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiSwitchStatement
+          PsiKeyword:switch('switch')
+          PsiJavaToken:LPARENTH('(')
+          PsiReferenceExpression:o
+            PsiReferenceParameterList
+              <empty list>
+            PsiIdentifier:o('o')
+          PsiJavaToken:RPARENTH(')')
+          PsiErrorElement:'{' expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/switch/Uncomplete5.java b/java/java-tests/testData/psi/parser-full/statementParsing/switch/Uncomplete5.java
new file mode 100644
index 0000000..5adccc4
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/switch/Uncomplete5.java
@@ -0,0 +1,5 @@
+class A{
+  {
+    switch(){}
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/switch/Uncomplete5.txt b/java/java-tests/testData/psi/parser-full/statementParsing/switch/Uncomplete5.txt
new file mode 100644
index 0000000..cca346b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/switch/Uncomplete5.txt
@@ -0,0 +1,36 @@
+PsiJavaFile:Uncomplete5.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiSwitchStatement
+          PsiKeyword:switch('switch')
+          PsiJavaToken:LPARENTH('(')
+          PsiErrorElement:Expression expected
+            <empty list>
+          PsiJavaToken:RPARENTH(')')
+          PsiCodeBlock
+            PsiJavaToken:LBRACE('{')
+            PsiJavaToken:RBRACE('}')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/switch/Uncomplete6.java b/java/java-tests/testData/psi/parser-full/statementParsing/switch/Uncomplete6.java
new file mode 100644
index 0000000..d4067140
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/switch/Uncomplete6.java
@@ -0,0 +1,6 @@
+class A{
+  {
+    switch(
+    foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/switch/Uncomplete6.txt b/java/java-tests/testData/psi/parser-full/statementParsing/switch/Uncomplete6.txt
new file mode 100644
index 0000000..9f31f55
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/switch/Uncomplete6.txt
@@ -0,0 +1,43 @@
+PsiJavaFile:Uncomplete6.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiSwitchStatement
+          PsiKeyword:switch('switch')
+          PsiJavaToken:LPARENTH('(')
+          PsiErrorElement:Expression expected
+            <empty list>
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiMethodCallExpression:foo()
+            PsiReferenceExpression:foo
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:foo('foo')
+            PsiExpressionList
+              PsiJavaToken:LPARENTH('(')
+              PsiJavaToken:RPARENTH(')')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/synchronized/Normal.java b/java/java-tests/testData/psi/parser-full/statementParsing/synchronized/Normal.java
new file mode 100644
index 0000000..6a18972
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/synchronized/Normal.java
@@ -0,0 +1,5 @@
+class A{
+  {
+    synchronized(o){}
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/synchronized/Normal.txt b/java/java-tests/testData/psi/parser-full/statementParsing/synchronized/Normal.txt
new file mode 100644
index 0000000..6cb9098
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/synchronized/Normal.txt
@@ -0,0 +1,38 @@
+PsiJavaFile:Normal.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiSynchronizedStatement
+          PsiKeyword:synchronized('synchronized')
+          PsiJavaToken:LPARENTH('(')
+          PsiReferenceExpression:o
+            PsiReferenceParameterList
+              <empty list>
+            PsiIdentifier:o('o')
+          PsiJavaToken:RPARENTH(')')
+          PsiCodeBlock
+            PsiJavaToken:LBRACE('{')
+            PsiJavaToken:RBRACE('}')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/synchronized/Uncomplete1.java b/java/java-tests/testData/psi/parser-full/statementParsing/synchronized/Uncomplete1.java
new file mode 100644
index 0000000..01830bc
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/synchronized/Uncomplete1.java
@@ -0,0 +1,5 @@
+class A{
+  {
+    synchronized
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/synchronized/Uncomplete1.txt b/java/java-tests/testData/psi/parser-full/statementParsing/synchronized/Uncomplete1.txt
new file mode 100644
index 0000000..a1ce204
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/synchronized/Uncomplete1.txt
@@ -0,0 +1,31 @@
+PsiJavaFile:Uncomplete1.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiSynchronizedStatement
+          PsiKeyword:synchronized('synchronized')
+          PsiErrorElement:'(' expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/synchronized/Uncomplete2.java b/java/java-tests/testData/psi/parser-full/statementParsing/synchronized/Uncomplete2.java
new file mode 100644
index 0000000..310efc8
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/synchronized/Uncomplete2.java
@@ -0,0 +1,5 @@
+class A{
+  {
+    synchronized(
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/synchronized/Uncomplete2.txt b/java/java-tests/testData/psi/parser-full/statementParsing/synchronized/Uncomplete2.txt
new file mode 100644
index 0000000..0444e91
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/synchronized/Uncomplete2.txt
@@ -0,0 +1,32 @@
+PsiJavaFile:Uncomplete2.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiSynchronizedStatement
+          PsiKeyword:synchronized('synchronized')
+          PsiJavaToken:LPARENTH('(')
+          PsiErrorElement:Expression expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/synchronized/Uncomplete3.java b/java/java-tests/testData/psi/parser-full/statementParsing/synchronized/Uncomplete3.java
new file mode 100644
index 0000000..2c5cc9c
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/synchronized/Uncomplete3.java
@@ -0,0 +1,5 @@
+class A{
+  {
+    synchronized(o
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/synchronized/Uncomplete3.txt b/java/java-tests/testData/psi/parser-full/statementParsing/synchronized/Uncomplete3.txt
new file mode 100644
index 0000000..83e0ccd
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/synchronized/Uncomplete3.txt
@@ -0,0 +1,36 @@
+PsiJavaFile:Uncomplete3.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiSynchronizedStatement
+          PsiKeyword:synchronized('synchronized')
+          PsiJavaToken:LPARENTH('(')
+          PsiReferenceExpression:o
+            PsiReferenceParameterList
+              <empty list>
+            PsiIdentifier:o('o')
+          PsiErrorElement:')' expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/synchronized/Uncomplete4.java b/java/java-tests/testData/psi/parser-full/statementParsing/synchronized/Uncomplete4.java
new file mode 100644
index 0000000..26f2151
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/synchronized/Uncomplete4.java
@@ -0,0 +1,5 @@
+class A{
+  {
+    synchronized(o)
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/synchronized/Uncomplete4.txt b/java/java-tests/testData/psi/parser-full/statementParsing/synchronized/Uncomplete4.txt
new file mode 100644
index 0000000..c9edcad
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/synchronized/Uncomplete4.txt
@@ -0,0 +1,37 @@
+PsiJavaFile:Uncomplete4.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiSynchronizedStatement
+          PsiKeyword:synchronized('synchronized')
+          PsiJavaToken:LPARENTH('(')
+          PsiReferenceExpression:o
+            PsiReferenceParameterList
+              <empty list>
+            PsiIdentifier:o('o')
+          PsiJavaToken:RPARENTH(')')
+          PsiErrorElement:'{' expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/synchronized/Uncomplete5.java b/java/java-tests/testData/psi/parser-full/statementParsing/synchronized/Uncomplete5.java
new file mode 100644
index 0000000..35441ef
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/synchronized/Uncomplete5.java
@@ -0,0 +1,5 @@
+class A{
+  {
+    synchronized(){}
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/synchronized/Uncomplete5.txt b/java/java-tests/testData/psi/parser-full/statementParsing/synchronized/Uncomplete5.txt
new file mode 100644
index 0000000..5d8899c
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/synchronized/Uncomplete5.txt
@@ -0,0 +1,36 @@
+PsiJavaFile:Uncomplete5.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiSynchronizedStatement
+          PsiKeyword:synchronized('synchronized')
+          PsiJavaToken:LPARENTH('(')
+          PsiErrorElement:Expression expected
+            <empty list>
+          PsiJavaToken:RPARENTH(')')
+          PsiCodeBlock
+            PsiJavaToken:LBRACE('{')
+            PsiJavaToken:RBRACE('}')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/synchronized/Uncomplete6.java b/java/java-tests/testData/psi/parser-full/statementParsing/synchronized/Uncomplete6.java
new file mode 100644
index 0000000..a24f759
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/synchronized/Uncomplete6.java
@@ -0,0 +1,6 @@
+class A{
+  {
+    synchronized(
+    foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/synchronized/Uncomplete6.txt b/java/java-tests/testData/psi/parser-full/statementParsing/synchronized/Uncomplete6.txt
new file mode 100644
index 0000000..8dd631e
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/synchronized/Uncomplete6.txt
@@ -0,0 +1,43 @@
+PsiJavaFile:Uncomplete6.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiSynchronizedStatement
+          PsiKeyword:synchronized('synchronized')
+          PsiJavaToken:LPARENTH('(')
+          PsiErrorElement:Expression expected
+            <empty list>
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiMethodCallExpression:foo()
+            PsiReferenceExpression:foo
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:foo('foo')
+            PsiExpressionList
+              PsiJavaToken:LPARENTH('(')
+              PsiJavaToken:RPARENTH(')')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/throw/Normal.java b/java/java-tests/testData/psi/parser-full/statementParsing/throw/Normal.java
new file mode 100644
index 0000000..4a36837
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/throw/Normal.java
@@ -0,0 +1,5 @@
+class A{
+  {
+    throw e;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/throw/Normal.txt b/java/java-tests/testData/psi/parser-full/statementParsing/throw/Normal.txt
new file mode 100644
index 0000000..7f8f38c
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/throw/Normal.txt
@@ -0,0 +1,35 @@
+PsiJavaFile:Normal.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiThrowStatement
+          PsiKeyword:throw('throw')
+          PsiWhiteSpace(' ')
+          PsiReferenceExpression:e
+            PsiReferenceParameterList
+              <empty list>
+            PsiIdentifier:e('e')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/throw/Uncomplete1.java b/java/java-tests/testData/psi/parser-full/statementParsing/throw/Uncomplete1.java
new file mode 100644
index 0000000..46b51ec
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/throw/Uncomplete1.java
@@ -0,0 +1,5 @@
+class A{
+  {
+    throw
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/throw/Uncomplete1.txt b/java/java-tests/testData/psi/parser-full/statementParsing/throw/Uncomplete1.txt
new file mode 100644
index 0000000..c85b4ec
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/throw/Uncomplete1.txt
@@ -0,0 +1,31 @@
+PsiJavaFile:Uncomplete1.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiThrowStatement
+          PsiKeyword:throw('throw')
+          PsiErrorElement:Expression expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/throw/Uncomplete2.java b/java/java-tests/testData/psi/parser-full/statementParsing/throw/Uncomplete2.java
new file mode 100644
index 0000000..979619e
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/throw/Uncomplete2.java
@@ -0,0 +1,5 @@
+class A{
+  {
+    throw e
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/throw/Uncomplete2.txt b/java/java-tests/testData/psi/parser-full/statementParsing/throw/Uncomplete2.txt
new file mode 100644
index 0000000..09e3ca8
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/throw/Uncomplete2.txt
@@ -0,0 +1,36 @@
+PsiJavaFile:Uncomplete2.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiThrowStatement
+          PsiKeyword:throw('throw')
+          PsiWhiteSpace(' ')
+          PsiReferenceExpression:e
+            PsiReferenceParameterList
+              <empty list>
+            PsiIdentifier:e('e')
+          PsiErrorElement:';' expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete1.java b/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete1.java
new file mode 100644
index 0000000..3d8064b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete1.java
@@ -0,0 +1,5 @@
+class A{
+  {
+    try
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete1.txt b/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete1.txt
new file mode 100644
index 0000000..5bd14cf
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete1.txt
@@ -0,0 +1,31 @@
+PsiJavaFile:Incomplete1.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiTryStatement
+          PsiKeyword:try('try')
+          PsiErrorElement:'{' expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete2.java b/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete2.java
new file mode 100644
index 0000000..262bbdc
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete2.java
@@ -0,0 +1,5 @@
+class A{
+  {
+    try{}
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete2.txt b/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete2.txt
new file mode 100644
index 0000000..85c4c55
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete2.txt
@@ -0,0 +1,34 @@
+PsiJavaFile:Incomplete2.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiTryStatement
+          PsiKeyword:try('try')
+          PsiCodeBlock
+            PsiJavaToken:LBRACE('{')
+            PsiJavaToken:RBRACE('}')
+          PsiErrorElement:'catch' or 'finally' expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete3.java b/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete3.java
new file mode 100644
index 0000000..0e7f343
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete3.java
@@ -0,0 +1,5 @@
+class A{
+  {
+    try{}catch
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete3.txt b/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete3.txt
new file mode 100644
index 0000000..bd58dd6
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete3.txt
@@ -0,0 +1,36 @@
+PsiJavaFile:Incomplete3.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiTryStatement
+          PsiKeyword:try('try')
+          PsiCodeBlock
+            PsiJavaToken:LBRACE('{')
+            PsiJavaToken:RBRACE('}')
+          PsiCatchSection
+            PsiKeyword:catch('catch')
+            PsiErrorElement:'(' expected
+              <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete4.java b/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete4.java
new file mode 100644
index 0000000..3d83091
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete4.java
@@ -0,0 +1,5 @@
+class A{
+  {
+    try{}catch(
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete4.txt b/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete4.txt
new file mode 100644
index 0000000..e213a25
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete4.txt
@@ -0,0 +1,39 @@
+PsiJavaFile:Incomplete4.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiTryStatement
+          PsiKeyword:try('try')
+          PsiCodeBlock
+            PsiJavaToken:LBRACE('{')
+            PsiJavaToken:RBRACE('}')
+          PsiCatchSection
+            PsiKeyword:catch('catch')
+            PsiJavaToken:LPARENTH('(')
+            PsiErrorElement:Parameter expected
+              <empty list>
+            PsiErrorElement:')' expected
+              <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete5.java b/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete5.java
new file mode 100644
index 0000000..6018b1b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete5.java
@@ -0,0 +1,5 @@
+class A{
+  {
+    try{}catch(E
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete5.txt b/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete5.txt
new file mode 100644
index 0000000..fb13c73
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete5.txt
@@ -0,0 +1,46 @@
+PsiJavaFile:Incomplete5.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiTryStatement
+          PsiKeyword:try('try')
+          PsiCodeBlock
+            PsiJavaToken:LBRACE('{')
+            PsiJavaToken:RBRACE('}')
+          PsiCatchSection
+            PsiKeyword:catch('catch')
+            PsiJavaToken:LPARENTH('(')
+            PsiModifierList:
+              <empty list>
+            PsiTypeElement:E
+              PsiJavaCodeReferenceElement:E
+                PsiIdentifier:E('E')
+                PsiReferenceParameterList
+                  <empty list>
+            PsiErrorElement:Identifier expected
+              <empty list>
+            PsiErrorElement:')' expected
+              <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete6.java b/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete6.java
new file mode 100644
index 0000000..f52e100
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete6.java
@@ -0,0 +1,5 @@
+class A{
+  {
+    try{}catch(E e
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete6.txt b/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete6.txt
new file mode 100644
index 0000000..bfecb00
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete6.txt
@@ -0,0 +1,47 @@
+PsiJavaFile:Incomplete6.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiTryStatement
+          PsiKeyword:try('try')
+          PsiCodeBlock
+            PsiJavaToken:LBRACE('{')
+            PsiJavaToken:RBRACE('}')
+          PsiCatchSection
+            PsiKeyword:catch('catch')
+            PsiJavaToken:LPARENTH('(')
+            PsiParameter:e
+              PsiModifierList:
+                <empty list>
+              PsiTypeElement:E
+                PsiJavaCodeReferenceElement:E
+                  PsiIdentifier:E('E')
+                  PsiReferenceParameterList
+                    <empty list>
+              PsiWhiteSpace(' ')
+              PsiIdentifier:e('e')
+            PsiErrorElement:')' expected
+              <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete7.java b/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete7.java
new file mode 100644
index 0000000..853e37c
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete7.java
@@ -0,0 +1,5 @@
+class A{
+  {
+    try{}catch(E e)
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete7.txt b/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete7.txt
new file mode 100644
index 0000000..0a66872
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete7.txt
@@ -0,0 +1,48 @@
+PsiJavaFile:Incomplete7.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiTryStatement
+          PsiKeyword:try('try')
+          PsiCodeBlock
+            PsiJavaToken:LBRACE('{')
+            PsiJavaToken:RBRACE('}')
+          PsiCatchSection
+            PsiKeyword:catch('catch')
+            PsiJavaToken:LPARENTH('(')
+            PsiParameter:e
+              PsiModifierList:
+                <empty list>
+              PsiTypeElement:E
+                PsiJavaCodeReferenceElement:E
+                  PsiIdentifier:E('E')
+                  PsiReferenceParameterList
+                    <empty list>
+              PsiWhiteSpace(' ')
+              PsiIdentifier:e('e')
+            PsiJavaToken:RPARENTH(')')
+            PsiErrorElement:'{' expected
+              <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete8.java b/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete8.java
new file mode 100644
index 0000000..c441e73
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete8.java
@@ -0,0 +1,5 @@
+class A{
+  {
+    try{}finally
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete8.txt b/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete8.txt
new file mode 100644
index 0000000..a49ab3bc
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete8.txt
@@ -0,0 +1,35 @@
+PsiJavaFile:Incomplete8.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiTryStatement
+          PsiKeyword:try('try')
+          PsiCodeBlock
+            PsiJavaToken:LBRACE('{')
+            PsiJavaToken:RBRACE('}')
+          PsiKeyword:finally('finally')
+          PsiErrorElement:'{' expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete9.java b/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete9.java
new file mode 100644
index 0000000..3d923a9
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete9.java
@@ -0,0 +1,5 @@
+class A{
+  {
+    try{}catch(E| e){}
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete9.txt b/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete9.txt
new file mode 100644
index 0000000..fa90a28
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/try/Incomplete9.txt
@@ -0,0 +1,56 @@
+PsiJavaFile:Incomplete9.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiTryStatement
+          PsiKeyword:try('try')
+          PsiCodeBlock
+            PsiJavaToken:LBRACE('{')
+            PsiJavaToken:RBRACE('}')
+          PsiCatchSection
+            PsiKeyword:catch('catch')
+            PsiJavaToken:LPARENTH('(')
+            PsiModifierList:
+              <empty list>
+            PsiTypeElement:E| e
+              PsiTypeElement:E
+                PsiJavaCodeReferenceElement:E
+                  PsiIdentifier:E('E')
+                  PsiReferenceParameterList
+                    <empty list>
+              PsiJavaToken:OR('|')
+              PsiWhiteSpace(' ')
+              PsiTypeElement:e
+                PsiJavaCodeReferenceElement:e
+                  PsiIdentifier:e('e')
+                  PsiReferenceParameterList
+                    <empty list>
+            PsiErrorElement:Identifier expected
+              <empty list>
+            PsiJavaToken:RPARENTH(')')
+            PsiCodeBlock
+              PsiJavaToken:LBRACE('{')
+              PsiJavaToken:RBRACE('}')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/try/Normal1.java b/java/java-tests/testData/psi/parser-full/statementParsing/try/Normal1.java
new file mode 100644
index 0000000..b382032
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/try/Normal1.java
@@ -0,0 +1,5 @@
+class A{
+  {
+    try{}catch(E e){}
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/try/Normal1.txt b/java/java-tests/testData/psi/parser-full/statementParsing/try/Normal1.txt
new file mode 100644
index 0000000..986795fc
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/try/Normal1.txt
@@ -0,0 +1,49 @@
+PsiJavaFile:Normal1.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiTryStatement
+          PsiKeyword:try('try')
+          PsiCodeBlock
+            PsiJavaToken:LBRACE('{')
+            PsiJavaToken:RBRACE('}')
+          PsiCatchSection
+            PsiKeyword:catch('catch')
+            PsiJavaToken:LPARENTH('(')
+            PsiParameter:e
+              PsiModifierList:
+                <empty list>
+              PsiTypeElement:E
+                PsiJavaCodeReferenceElement:E
+                  PsiIdentifier:E('E')
+                  PsiReferenceParameterList
+                    <empty list>
+              PsiWhiteSpace(' ')
+              PsiIdentifier:e('e')
+            PsiJavaToken:RPARENTH(')')
+            PsiCodeBlock
+              PsiJavaToken:LBRACE('{')
+              PsiJavaToken:RBRACE('}')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/try/Normal2.java b/java/java-tests/testData/psi/parser-full/statementParsing/try/Normal2.java
new file mode 100644
index 0000000..0d5ebd8
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/try/Normal2.java
@@ -0,0 +1,5 @@
+class A{
+  {
+    try{}catch(E e){}finally{}
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/try/Normal2.txt b/java/java-tests/testData/psi/parser-full/statementParsing/try/Normal2.txt
new file mode 100644
index 0000000..71ee73d
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/try/Normal2.txt
@@ -0,0 +1,53 @@
+PsiJavaFile:Normal2.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiTryStatement
+          PsiKeyword:try('try')
+          PsiCodeBlock
+            PsiJavaToken:LBRACE('{')
+            PsiJavaToken:RBRACE('}')
+          PsiCatchSection
+            PsiKeyword:catch('catch')
+            PsiJavaToken:LPARENTH('(')
+            PsiParameter:e
+              PsiModifierList:
+                <empty list>
+              PsiTypeElement:E
+                PsiJavaCodeReferenceElement:E
+                  PsiIdentifier:E('E')
+                  PsiReferenceParameterList
+                    <empty list>
+              PsiWhiteSpace(' ')
+              PsiIdentifier:e('e')
+            PsiJavaToken:RPARENTH(')')
+            PsiCodeBlock
+              PsiJavaToken:LBRACE('{')
+              PsiJavaToken:RBRACE('}')
+          PsiKeyword:finally('finally')
+          PsiCodeBlock
+            PsiJavaToken:LBRACE('{')
+            PsiJavaToken:RBRACE('}')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/try/Normal3.java b/java/java-tests/testData/psi/parser-full/statementParsing/try/Normal3.java
new file mode 100644
index 0000000..8084c7f
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/try/Normal3.java
@@ -0,0 +1,5 @@
+class A{
+  {
+    try{}finally{}
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/try/Normal3.txt b/java/java-tests/testData/psi/parser-full/statementParsing/try/Normal3.txt
new file mode 100644
index 0000000..8907c26
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/try/Normal3.txt
@@ -0,0 +1,36 @@
+PsiJavaFile:Normal3.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiTryStatement
+          PsiKeyword:try('try')
+          PsiCodeBlock
+            PsiJavaToken:LBRACE('{')
+            PsiJavaToken:RBRACE('}')
+          PsiKeyword:finally('finally')
+          PsiCodeBlock
+            PsiJavaToken:LBRACE('{')
+            PsiJavaToken:RBRACE('}')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/try/Normal4.java b/java/java-tests/testData/psi/parser-full/statementParsing/try/Normal4.java
new file mode 100644
index 0000000..575a835
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/try/Normal4.java
@@ -0,0 +1,5 @@
+class A{
+  {
+    try{}catch(E1|E2 e){}
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/try/Normal4.txt b/java/java-tests/testData/psi/parser-full/statementParsing/try/Normal4.txt
new file mode 100644
index 0000000..31d5aa4
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/try/Normal4.txt
@@ -0,0 +1,56 @@
+PsiJavaFile:Normal4.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiTryStatement
+          PsiKeyword:try('try')
+          PsiCodeBlock
+            PsiJavaToken:LBRACE('{')
+            PsiJavaToken:RBRACE('}')
+          PsiCatchSection
+            PsiKeyword:catch('catch')
+            PsiJavaToken:LPARENTH('(')
+            PsiParameter:e
+              PsiModifierList:
+                <empty list>
+              PsiTypeElement:E1|E2
+                PsiTypeElement:E1
+                  PsiJavaCodeReferenceElement:E1
+                    PsiIdentifier:E1('E1')
+                    PsiReferenceParameterList
+                      <empty list>
+                PsiJavaToken:OR('|')
+                PsiTypeElement:E2
+                  PsiJavaCodeReferenceElement:E2
+                    PsiIdentifier:E2('E2')
+                    PsiReferenceParameterList
+                      <empty list>
+              PsiWhiteSpace(' ')
+              PsiIdentifier:e('e')
+            PsiJavaToken:RPARENTH(')')
+            PsiCodeBlock
+              PsiJavaToken:LBRACE('{')
+              PsiJavaToken:RBRACE('}')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/while/Normal.java b/java/java-tests/testData/psi/parser-full/statementParsing/while/Normal.java
new file mode 100644
index 0000000..3fc8f83
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/while/Normal.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    while (true) foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/while/Normal.txt b/java/java-tests/testData/psi/parser-full/statementParsing/while/Normal.txt
new file mode 100644
index 0000000..cc4bbcf
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/while/Normal.txt
@@ -0,0 +1,45 @@
+PsiJavaFile:Normal.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiWhileStatement
+          PsiKeyword:while('while')
+          PsiWhiteSpace(' ')
+          PsiJavaToken:LPARENTH('(')
+          PsiLiteralExpression:true
+            PsiJavaToken:TRUE_KEYWORD('true')
+          PsiJavaToken:RPARENTH(')')
+          PsiWhiteSpace(' ')
+          PsiExpressionStatement
+            PsiMethodCallExpression:foo()
+              PsiReferenceExpression:foo
+                PsiReferenceParameterList
+                  <empty list>
+                PsiIdentifier:foo('foo')
+              PsiExpressionList
+                PsiJavaToken:LPARENTH('(')
+                PsiJavaToken:RPARENTH(')')
+            PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/while/Uncomplete1.java b/java/java-tests/testData/psi/parser-full/statementParsing/while/Uncomplete1.java
new file mode 100644
index 0000000..655cd7d
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/while/Uncomplete1.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    while
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/while/Uncomplete1.txt b/java/java-tests/testData/psi/parser-full/statementParsing/while/Uncomplete1.txt
new file mode 100644
index 0000000..1bfcf02
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/while/Uncomplete1.txt
@@ -0,0 +1,31 @@
+PsiJavaFile:Uncomplete1.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiWhileStatement
+          PsiKeyword:while('while')
+          PsiErrorElement:'(' expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/while/Uncomplete2.java b/java/java-tests/testData/psi/parser-full/statementParsing/while/Uncomplete2.java
new file mode 100644
index 0000000..a37e76a
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/while/Uncomplete2.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    while (
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/while/Uncomplete2.txt b/java/java-tests/testData/psi/parser-full/statementParsing/while/Uncomplete2.txt
new file mode 100644
index 0000000..b48bdf1
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/while/Uncomplete2.txt
@@ -0,0 +1,33 @@
+PsiJavaFile:Uncomplete2.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiWhileStatement
+          PsiKeyword:while('while')
+          PsiWhiteSpace(' ')
+          PsiJavaToken:LPARENTH('(')
+          PsiErrorElement:Expression expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/while/Uncomplete3.java b/java/java-tests/testData/psi/parser-full/statementParsing/while/Uncomplete3.java
new file mode 100644
index 0000000..73d4e2e
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/while/Uncomplete3.java
@@ -0,0 +1,6 @@
+class Foo{
+  {
+    while(
+    foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/while/Uncomplete3.txt b/java/java-tests/testData/psi/parser-full/statementParsing/while/Uncomplete3.txt
new file mode 100644
index 0000000..72fbcd6
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/while/Uncomplete3.txt
@@ -0,0 +1,43 @@
+PsiJavaFile:Uncomplete3.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiWhileStatement
+          PsiKeyword:while('while')
+          PsiJavaToken:LPARENTH('(')
+          PsiErrorElement:Expression expected
+            <empty list>
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiMethodCallExpression:foo()
+            PsiReferenceExpression:foo
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:foo('foo')
+            PsiExpressionList
+              PsiJavaToken:LPARENTH('(')
+              PsiJavaToken:RPARENTH(')')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/while/Uncomplete4.java b/java/java-tests/testData/psi/parser-full/statementParsing/while/Uncomplete4.java
new file mode 100644
index 0000000..0fbe73f
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/while/Uncomplete4.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    while(cond
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/while/Uncomplete4.txt b/java/java-tests/testData/psi/parser-full/statementParsing/while/Uncomplete4.txt
new file mode 100644
index 0000000..0eb8418
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/while/Uncomplete4.txt
@@ -0,0 +1,36 @@
+PsiJavaFile:Uncomplete4.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiWhileStatement
+          PsiKeyword:while('while')
+          PsiJavaToken:LPARENTH('(')
+          PsiReferenceExpression:cond
+            PsiReferenceParameterList
+              <empty list>
+            PsiIdentifier:cond('cond')
+          PsiErrorElement:')' expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/while/Uncomplete5.java b/java/java-tests/testData/psi/parser-full/statementParsing/while/Uncomplete5.java
new file mode 100644
index 0000000..fe42be1
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/while/Uncomplete5.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    while(cond)
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/while/Uncomplete5.txt b/java/java-tests/testData/psi/parser-full/statementParsing/while/Uncomplete5.txt
new file mode 100644
index 0000000..f1d75f5
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/while/Uncomplete5.txt
@@ -0,0 +1,37 @@
+PsiJavaFile:Uncomplete5.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiWhileStatement
+          PsiKeyword:while('while')
+          PsiJavaToken:LPARENTH('(')
+          PsiReferenceExpression:cond
+            PsiReferenceParameterList
+              <empty list>
+            PsiIdentifier:cond('cond')
+          PsiJavaToken:RPARENTH(')')
+          PsiErrorElement:Statement expected
+            <empty list>
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/while/Uncomplete6.java b/java/java-tests/testData/psi/parser-full/statementParsing/while/Uncomplete6.java
new file mode 100644
index 0000000..c19813d
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/while/Uncomplete6.java
@@ -0,0 +1,5 @@
+class Foo{
+  {
+    while() foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/statementParsing/while/Uncomplete6.txt b/java/java-tests/testData/psi/parser-full/statementParsing/while/Uncomplete6.txt
new file mode 100644
index 0000000..ba7b3af
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/statementParsing/while/Uncomplete6.txt
@@ -0,0 +1,44 @@
+PsiJavaFile:Uncomplete6.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiWhileStatement
+          PsiKeyword:while('while')
+          PsiJavaToken:LPARENTH('(')
+          PsiErrorElement:Expression expected
+            <empty list>
+          PsiJavaToken:RPARENTH(')')
+          PsiWhiteSpace(' ')
+          PsiExpressionStatement
+            PsiMethodCallExpression:foo()
+              PsiReferenceExpression:foo
+                PsiReferenceParameterList
+                  <empty list>
+                PsiIdentifier:foo('foo')
+              PsiExpressionList
+                PsiJavaToken:LPARENTH('(')
+                PsiJavaToken:RPARENTH(')')
+            PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/annotations/Array.txt b/java/java-tests/testData/psi/parser-partial/annotations/Array.txt
new file mode 100644
index 0000000..5525213
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/annotations/Array.txt
@@ -0,0 +1,20 @@
+PsiJavaFile:Array.java
+  PsiAnnotation
+    PsiJavaToken:AT('@')
+    PsiJavaCodeReferenceElement:Endorsers
+      PsiIdentifier:Endorsers('Endorsers')
+      PsiReferenceParameterList
+        <empty list>
+    PsiAnnotationParameterList
+      PsiJavaToken:LPARENTH('(')
+      PsiNameValuePair
+        PsiArrayInitializerMemberValue:{"Children", "Unscrupulous dentists"}
+          PsiJavaToken:LBRACE('{')
+          PsiLiteralExpression:"Children"
+            PsiJavaToken:STRING_LITERAL('"Children"')
+          PsiJavaToken:COMMA(',')
+          PsiWhiteSpace(' ')
+          PsiLiteralExpression:"Unscrupulous dentists"
+            PsiJavaToken:STRING_LITERAL('"Unscrupulous dentists"')
+          PsiJavaToken:RBRACE('}')
+      PsiJavaToken:RPARENTH(')')
diff --git a/java/java-tests/testData/psi/parser-partial/annotations/Complex.txt b/java/java-tests/testData/psi/parser-partial/annotations/Complex.txt
new file mode 100644
index 0000000..5211c0a
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/annotations/Complex.txt
@@ -0,0 +1,22 @@
+PsiJavaFile:Complex.java
+  PsiAnnotation
+    PsiJavaToken:AT('@')
+    PsiJavaCodeReferenceElement:Author
+      PsiIdentifier:Author('Author')
+      PsiReferenceParameterList
+        <empty list>
+    PsiAnnotationParameterList
+      PsiJavaToken:LPARENTH('(')
+      PsiNameValuePair
+        PsiIdentifier:first('first')
+        PsiJavaToken:EQ('=')
+        PsiLiteralExpression:"Eugene"
+          PsiJavaToken:STRING_LITERAL('"Eugene"')
+      PsiJavaToken:COMMA(',')
+      PsiWhiteSpace(' ')
+      PsiNameValuePair
+        PsiIdentifier:second('second')
+        PsiJavaToken:EQ('=')
+        PsiLiteralExpression:"Wampirchik"
+          PsiJavaToken:STRING_LITERAL('"Wampirchik"')
+      PsiJavaToken:RPARENTH(')')
diff --git a/java/java-tests/testData/psi/parser-partial/annotations/ExtraCommaInList.txt b/java/java-tests/testData/psi/parser-partial/annotations/ExtraCommaInList.txt
new file mode 100644
index 0000000..c58fc19
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/annotations/ExtraCommaInList.txt
@@ -0,0 +1,21 @@
+PsiJavaFile:ExtraCommaInList.java
+  PsiAnnotation
+    PsiJavaToken:AT('@')
+    PsiJavaCodeReferenceElement:Anno
+      PsiIdentifier:Anno('Anno')
+      PsiReferenceParameterList
+        <empty list>
+    PsiAnnotationParameterList
+      PsiJavaToken:LPARENTH('(')
+      PsiNameValuePair
+        PsiArrayInitializerMemberValue:{0, 1,}
+          PsiJavaToken:LBRACE('{')
+          PsiLiteralExpression:0
+            PsiJavaToken:INTEGER_LITERAL('0')
+          PsiJavaToken:COMMA(',')
+          PsiWhiteSpace(' ')
+          PsiLiteralExpression:1
+            PsiJavaToken:INTEGER_LITERAL('1')
+          PsiJavaToken:COMMA(',')
+          PsiJavaToken:RBRACE('}')
+      PsiJavaToken:RPARENTH(')')
diff --git a/java/java-tests/testData/psi/parser-partial/annotations/FirstNameMissed.txt b/java/java-tests/testData/psi/parser-partial/annotations/FirstNameMissed.txt
new file mode 100644
index 0000000..711c2fa
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/annotations/FirstNameMissed.txt
@@ -0,0 +1,26 @@
+PsiJavaFile:FirstNameMissed.java
+  PsiAnnotation
+    PsiJavaToken:AT('@')
+    PsiJavaCodeReferenceElement:Anno
+      PsiIdentifier:Anno('Anno')
+      PsiReferenceParameterList
+        <empty list>
+    PsiAnnotationParameterList
+      PsiJavaToken:LPARENTH('(')
+      PsiNameValuePair
+        PsiReferenceExpression:value1
+          PsiReferenceParameterList
+            <empty list>
+          PsiIdentifier:value1('value1')
+      PsiErrorElement:Annotation attribute must be of the form 'name=value'
+        <empty list>
+      PsiJavaToken:COMMA(',')
+      PsiWhiteSpace(' ')
+      PsiNameValuePair
+        PsiIdentifier:param2('param2')
+        PsiJavaToken:EQ('=')
+        PsiReferenceExpression:value2
+          PsiReferenceParameterList
+            <empty list>
+          PsiIdentifier:value2('value2')
+      PsiJavaToken:RPARENTH(')')
diff --git a/java/java-tests/testData/psi/parser-partial/annotations/Marker.txt b/java/java-tests/testData/psi/parser-partial/annotations/Marker.txt
new file mode 100644
index 0000000..ca28bc4
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/annotations/Marker.txt
@@ -0,0 +1,9 @@
+PsiJavaFile:Marker.java
+  PsiAnnotation
+    PsiJavaToken:AT('@')
+    PsiJavaCodeReferenceElement:Preliminary
+      PsiIdentifier:Preliminary('Preliminary')
+      PsiReferenceParameterList
+        <empty list>
+    PsiAnnotationParameterList
+      <empty list>
diff --git a/java/java-tests/testData/psi/parser-partial/annotations/Multiple.txt b/java/java-tests/testData/psi/parser-partial/annotations/Multiple.txt
new file mode 100644
index 0000000..5ef2baf
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/annotations/Multiple.txt
@@ -0,0 +1,26 @@
+PsiJavaFile:Multiple.java
+  PsiAnnotation
+    PsiJavaToken:AT('@')
+    PsiJavaCodeReferenceElement:Preliminary
+      PsiIdentifier:Preliminary('Preliminary')
+      PsiReferenceParameterList
+        <empty list>
+    PsiAnnotationParameterList
+      <empty list>
+  PsiWhiteSpace(' ')
+  PsiAnnotation
+    PsiJavaToken:AT('@')
+    PsiJavaCodeReferenceElement:Other
+      PsiIdentifier:Other('Other')
+      PsiReferenceParameterList
+        <empty list>
+    PsiAnnotationParameterList
+      PsiJavaToken:LPARENTH('(')
+      PsiNameValuePair
+        PsiIdentifier:name('name')
+        PsiJavaToken:EQ('=')
+        PsiReferenceExpression:value
+          PsiReferenceParameterList
+            <empty list>
+          PsiIdentifier:value('value')
+      PsiJavaToken:RPARENTH(')')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/annotations/Nested.txt b/java/java-tests/testData/psi/parser-partial/annotations/Nested.txt
new file mode 100644
index 0000000..e8cfe44
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/annotations/Nested.txt
@@ -0,0 +1,32 @@
+PsiJavaFile:Nested.java
+  PsiAnnotation
+    PsiJavaToken:AT('@')
+    PsiJavaCodeReferenceElement:Author
+      PsiIdentifier:Author('Author')
+      PsiReferenceParameterList
+        <empty list>
+    PsiAnnotationParameterList
+      PsiJavaToken:LPARENTH('(')
+      PsiNameValuePair
+        PsiAnnotation
+          PsiJavaToken:AT('@')
+          PsiJavaCodeReferenceElement:Name
+            PsiIdentifier:Name('Name')
+            PsiReferenceParameterList
+              <empty list>
+          PsiAnnotationParameterList
+            PsiJavaToken:LPARENTH('(')
+            PsiNameValuePair
+              PsiIdentifier:first('first')
+              PsiJavaToken:EQ('=')
+              PsiLiteralExpression:"Eugene"
+                PsiJavaToken:STRING_LITERAL('"Eugene"')
+            PsiJavaToken:COMMA(',')
+            PsiWhiteSpace(' ')
+            PsiNameValuePair
+              PsiIdentifier:second('second')
+              PsiJavaToken:EQ('=')
+              PsiLiteralExpression:"Wampirchik"
+                PsiJavaToken:STRING_LITERAL('"Wampirchik"')
+            PsiJavaToken:RPARENTH(')')
+      PsiJavaToken:RPARENTH(')')
diff --git a/java/java-tests/testData/psi/parser-partial/annotations/ParameterizedAnnotation.txt b/java/java-tests/testData/psi/parser-partial/annotations/ParameterizedAnnotation.txt
new file mode 100644
index 0000000..a184313
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/annotations/ParameterizedAnnotation.txt
@@ -0,0 +1,13 @@
+PsiJavaFile:ParameterizedAnnotation.java
+  PsiAnnotation
+    PsiJavaToken:AT('@')
+    PsiJavaCodeReferenceElement:Nullable
+      PsiIdentifier:Nullable('Nullable')
+      PsiReferenceParameterList
+        <empty list>
+    PsiAnnotationParameterList
+      <empty list>
+  PsiErrorElement:Unparsed tokens
+    PsiJavaToken:LT('<')
+    PsiIdentifier:T('T')
+    PsiJavaToken:GT('>')
diff --git a/java/java-tests/testData/psi/parser-partial/annotations/QualifiedAnnotation.txt b/java/java-tests/testData/psi/parser-partial/annotations/QualifiedAnnotation.txt
new file mode 100644
index 0000000..d73ddfe
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/annotations/QualifiedAnnotation.txt
@@ -0,0 +1,24 @@
+PsiJavaFile:QualifiedAnnotation.java
+  PsiAnnotation
+    PsiJavaToken:AT('@')
+    PsiJavaCodeReferenceElement:org.jetbrains.annotations.Nullable
+      PsiJavaCodeReferenceElement:org.jetbrains.annotations
+        PsiJavaCodeReferenceElement:org.jetbrains
+          PsiJavaCodeReferenceElement:org
+            PsiIdentifier:org('org')
+            PsiReferenceParameterList
+              <empty list>
+          PsiJavaToken:DOT('.')
+          PsiIdentifier:jetbrains('jetbrains')
+          PsiReferenceParameterList
+            <empty list>
+        PsiJavaToken:DOT('.')
+        PsiIdentifier:annotations('annotations')
+        PsiReferenceParameterList
+          <empty list>
+      PsiJavaToken:DOT('.')
+      PsiIdentifier:Nullable('Nullable')
+      PsiReferenceParameterList
+        <empty list>
+    PsiAnnotationParameterList
+      <empty list>
diff --git a/java/java-tests/testData/psi/parser-partial/annotations/Simple0.txt b/java/java-tests/testData/psi/parser-partial/annotations/Simple0.txt
new file mode 100644
index 0000000..486549b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/annotations/Simple0.txt
@@ -0,0 +1,13 @@
+PsiJavaFile:Simple0.java
+  PsiAnnotation
+    PsiJavaToken:AT('@')
+    PsiJavaCodeReferenceElement:Copyright
+      PsiIdentifier:Copyright('Copyright')
+      PsiReferenceParameterList
+        <empty list>
+    PsiAnnotationParameterList
+      PsiJavaToken:LPARENTH('(')
+      PsiNameValuePair
+        PsiLiteralExpression:"bla-bla-bla"
+          PsiJavaToken:STRING_LITERAL('"bla-bla-bla"')
+      PsiJavaToken:RPARENTH(')')
diff --git a/java/java-tests/testData/psi/parser-partial/annotations/Simple1.txt b/java/java-tests/testData/psi/parser-partial/annotations/Simple1.txt
new file mode 100644
index 0000000..078d069
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/annotations/Simple1.txt
@@ -0,0 +1,15 @@
+PsiJavaFile:Simple1.java
+  PsiAnnotation
+    PsiJavaToken:AT('@')
+    PsiJavaCodeReferenceElement:Copyright
+      PsiIdentifier:Copyright('Copyright')
+      PsiReferenceParameterList
+        <empty list>
+    PsiAnnotationParameterList
+      PsiJavaToken:LPARENTH('(')
+      PsiNameValuePair
+        PsiReferenceExpression:treatedAsValue
+          PsiReferenceParameterList
+            <empty list>
+          PsiIdentifier:treatedAsValue('treatedAsValue')
+      PsiJavaToken:RPARENTH(')')
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/AnnoDeclaration.txt b/java/java-tests/testData/psi/parser-partial/declarations/AnnoDeclaration.txt
new file mode 100644
index 0000000..4876333
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/AnnoDeclaration.txt
@@ -0,0 +1,22 @@
+PsiJavaFile:AnnoDeclaration.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiClass:Annotation
+    PsiModifierList:public
+      PsiKeyword:public('public')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:AT('@')
+    PsiKeyword:interface('interface')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Annotation('Annotation')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/AnnoDefault.txt b/java/java-tests/testData/psi/parser-partial/declarations/AnnoDefault.txt
new file mode 100644
index 0000000..5d8e435
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/AnnoDefault.txt
@@ -0,0 +1,35 @@
+PsiJavaFile:AnnoDefault.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiAnnotationMethod:foo
+    PsiModifierList:
+      <empty list>
+    PsiTypeParameterList
+      <empty list>
+    PsiTypeElement:Class
+      PsiJavaCodeReferenceElement:Class
+        PsiIdentifier:Class('Class')
+        PsiReferenceParameterList
+          <empty list>
+    PsiWhiteSpace(' ')
+    PsiIdentifier:foo('foo')
+    PsiWhiteSpace(' ')
+    PsiParameterList:()
+      PsiJavaToken:LPARENTH('(')
+      PsiJavaToken:RPARENTH(')')
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiKeyword:default('default')
+    PsiWhiteSpace(' ')
+    PsiClassObjectAccessExpression:String.class
+      PsiTypeElement:String
+        PsiJavaCodeReferenceElement:String
+          PsiIdentifier:String('String')
+          PsiReferenceParameterList
+            <empty list>
+      PsiJavaToken:DOT('.')
+      PsiKeyword:class('class')
+    PsiJavaToken:SEMICOLON(';')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/AnnoInner.txt b/java/java-tests/testData/psi/parser-partial/declarations/AnnoInner.txt
new file mode 100644
index 0000000..65cd858
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/AnnoInner.txt
@@ -0,0 +1,44 @@
+PsiJavaFile:AnnoInner.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiClass:Inner
+    PsiModifierList:
+      <empty list>
+    PsiJavaToken:AT('@')
+    PsiKeyword:interface('interface')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Inner('Inner')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace(' ')
+    PsiAnnotationMethod:bar
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:double
+        PsiKeyword:double('double')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:bar('bar')
+      PsiWhiteSpace(' ')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiKeyword:default('default')
+      PsiWhiteSpace(' ')
+      PsiLiteralExpression:0.0
+        PsiJavaToken:DOUBLE_LITERAL('0.0')
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:RBRACE('}')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/AnnoNested.txt b/java/java-tests/testData/psi/parser-partial/declarations/AnnoNested.txt
new file mode 100644
index 0000000..d0aaba0
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/AnnoNested.txt
@@ -0,0 +1,47 @@
+PsiJavaFile:AnnoNested.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiClass:Inner
+    PsiModifierList:
+      <empty list>
+    PsiJavaToken:AT('@')
+    PsiKeyword:interface('interface')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Inner('Inner')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace(' ')
+    PsiAnnotationMethod:bar
+      PsiModifierList:
+        <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiTypeElement:String
+        PsiJavaCodeReferenceElement:String
+          PsiIdentifier:String('String')
+          PsiReferenceParameterList
+            <empty list>
+      PsiWhiteSpace(' ')
+      PsiIdentifier:bar('bar')
+      PsiWhiteSpace(' ')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiKeyword:default('default')
+      PsiWhiteSpace(' ')
+      PsiLiteralExpression:"<unspecified>"
+        PsiJavaToken:STRING_LITERAL('"<unspecified>"')
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:RBRACE('}')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/AnnoOtherMembers.txt b/java/java-tests/testData/psi/parser-partial/declarations/AnnoOtherMembers.txt
new file mode 100644
index 0000000..69eab6b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/AnnoOtherMembers.txt
@@ -0,0 +1,64 @@
+PsiJavaFile:AnnoOtherMembers.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiField:field
+    PsiModifierList:
+      <empty list>
+    PsiTypeElement:int
+      PsiKeyword:int('int')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:field('field')
+    PsiJavaToken:SEMICOLON(';')
+  PsiWhiteSpace('\n ')
+  PsiAnnotationMethod:m
+    PsiModifierList:
+      <empty list>
+    PsiTypeParameterList
+      <empty list>
+    PsiTypeElement:void
+      PsiKeyword:void('void')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:m('m')
+    PsiParameterList:()
+      PsiJavaToken:LPARENTH('(')
+      PsiJavaToken:RPARENTH(')')
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiCodeBlock
+      PsiJavaToken:LBRACE('{')
+      PsiJavaToken:RBRACE('}')
+  PsiWhiteSpace('\n ')
+  PsiClass:C
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
+  PsiWhiteSpace('\n ')
+  PsiClass:I
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:interface('interface')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:I('I')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/AnnoSimple.txt b/java/java-tests/testData/psi/parser-partial/declarations/AnnoSimple.txt
new file mode 100644
index 0000000..fbbe1ce
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/AnnoSimple.txt
@@ -0,0 +1,21 @@
+PsiJavaFile:AnnoSimple.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiAnnotationMethod:foo
+    PsiModifierList:
+      <empty list>
+    PsiTypeParameterList
+      <empty list>
+    PsiTypeElement:int
+      PsiKeyword:int('int')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:foo('foo')
+    PsiWhiteSpace(' ')
+    PsiParameterList:()
+      PsiJavaToken:LPARENTH('(')
+      PsiJavaToken:RPARENTH(')')
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:SEMICOLON(';')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/ClassInit.txt b/java/java-tests/testData/psi/parser-partial/declarations/ClassInit.txt
new file mode 100644
index 0000000..443a3f4
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/ClassInit.txt
@@ -0,0 +1,14 @@
+PsiJavaFile:ClassInit.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiClassInitializer
+    PsiModifierList:
+      <empty list>
+    PsiCodeBlock
+      PsiJavaToken:LBRACE('{')
+      PsiWhiteSpace(' ')
+      PsiComment(C_STYLE_COMMENT)('/*comment*/')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:RBRACE('}')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/CompletionHack0.txt b/java/java-tests/testData/psi/parser-partial/declarations/CompletionHack0.txt
new file mode 100644
index 0000000..7b9cfcc
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/CompletionHack0.txt
@@ -0,0 +1,33 @@
+PsiJavaFile:CompletionHack0.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiField:s
+    PsiModifierList:
+      <empty list>
+    PsiErrorElement:Unexpected token
+      PsiTypeParameterList
+        PsiJavaToken:LT('<')
+        PsiTypeParameter:X
+          PsiIdentifier:X('X')
+          PsiElement(EXTENDS_BOUND_LIST)
+            <empty list>
+        PsiWhiteSpace(' ')
+        PsiErrorElement:Unexpected identifier
+          PsiIdentifier:IntelliJIdeaRulezz('IntelliJIdeaRulezz')
+        PsiJavaToken:GT('>')
+    PsiWhiteSpace('\n ')
+    PsiTypeElement:String
+      PsiJavaCodeReferenceElement:String
+        PsiIdentifier:String('String')
+        PsiReferenceParameterList
+          <empty list>
+    PsiWhiteSpace(' ')
+    PsiIdentifier:s('s')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:EQ('=')
+    PsiWhiteSpace(' ')
+    PsiLiteralExpression:""
+      PsiJavaToken:STRING_LITERAL('""')
+    PsiJavaToken:SEMICOLON(';')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/CompletionHack1.txt b/java/java-tests/testData/psi/parser-partial/declarations/CompletionHack1.txt
new file mode 100644
index 0000000..1278277
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/CompletionHack1.txt
@@ -0,0 +1,31 @@
+PsiJavaFile:CompletionHack1.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiField:s
+    PsiModifierList:
+      <empty list>
+    PsiErrorElement:Unexpected token
+      PsiTypeParameterList
+        PsiJavaToken:LT('<')
+        PsiTypeParameter:X
+          PsiIdentifier:X('X')
+          PsiElement(EXTENDS_BOUND_LIST)
+            <empty list>
+        PsiErrorElement:'>' expected.
+          <empty list>
+    PsiWhiteSpace('\n ')
+    PsiTypeElement:String
+      PsiJavaCodeReferenceElement:String
+        PsiIdentifier:String('String')
+        PsiReferenceParameterList
+          <empty list>
+    PsiWhiteSpace(' ')
+    PsiIdentifier:s('s')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:EQ('=')
+    PsiWhiteSpace(' ')
+    PsiLiteralExpression:""
+      PsiJavaToken:STRING_LITERAL('""')
+    PsiJavaToken:SEMICOLON(';')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/CompletionHack2.txt b/java/java-tests/testData/psi/parser-partial/declarations/CompletionHack2.txt
new file mode 100644
index 0000000..9c43b6b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/CompletionHack2.txt
@@ -0,0 +1,25 @@
+PsiJavaFile:CompletionHack2.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiAnnotationMethod:foo
+    PsiModifierList:
+      <empty list>
+    PsiTypeParameterList
+      <empty list>
+    PsiTypeElement:String
+      PsiJavaCodeReferenceElement:String
+        PsiIdentifier:String('String')
+        PsiReferenceParameterList
+          <empty list>
+    PsiWhiteSpace(' ')
+    PsiIdentifier:foo('foo')
+    PsiParameterList:()
+      PsiJavaToken:LPARENTH('(')
+      PsiJavaToken:RPARENTH(')')
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiErrorElement:'{' or ';' expected
+      PsiIdentifier:def('def')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/ConstructorBrackets.txt b/java/java-tests/testData/psi/parser-partial/declarations/ConstructorBrackets.txt
new file mode 100644
index 0000000..69837ce
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/ConstructorBrackets.txt
@@ -0,0 +1,25 @@
+PsiJavaFile:ConstructorBrackets.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiMethod:A
+    PsiModifierList:
+      <empty list>
+    PsiTypeParameterList
+      <empty list>
+    PsiIdentifier:A('A')
+    PsiParameterList:()
+      PsiJavaToken:LPARENTH('(')
+      PsiJavaToken:RPARENTH(')')
+    PsiWhiteSpace(' ')
+    PsiErrorElement:';' expected
+      PsiJavaToken:LBRACKET('[')
+      PsiJavaToken:RBRACKET(']')
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiCodeBlock
+      PsiJavaToken:LBRACE('{')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:RBRACE('}')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/EmptyBody0.txt b/java/java-tests/testData/psi/parser-partial/declarations/EmptyBody0.txt
new file mode 100644
index 0000000..a8316693
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/EmptyBody0.txt
@@ -0,0 +1,4 @@
+PsiJavaFile:EmptyBody0.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/EmptyBody1.txt b/java/java-tests/testData/psi/parser-partial/declarations/EmptyBody1.txt
new file mode 100644
index 0000000..60988ad
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/EmptyBody1.txt
@@ -0,0 +1,5 @@
+PsiJavaFile:EmptyBody1.java
+  PsiJavaToken:LBRACE('{')
+  PsiErrorElement:'}' expected
+    <empty list>
+  PsiWhiteSpace(' ')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/EmptyBody2.txt b/java/java-tests/testData/psi/parser-partial/declarations/EmptyBody2.txt
new file mode 100644
index 0000000..63a6641
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/EmptyBody2.txt
@@ -0,0 +1,16 @@
+PsiJavaFile:EmptyBody2.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiModifierList:@Null
+    PsiAnnotation
+      PsiJavaToken:AT('@')
+      PsiJavaCodeReferenceElement:Null
+        PsiIdentifier:Null('Null')
+        PsiReferenceParameterList
+          <empty list>
+      PsiAnnotationParameterList
+        <empty list>
+  PsiErrorElement:Identifier or type expected
+    <empty list>
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/EnumBody0.txt b/java/java-tests/testData/psi/parser-partial/declarations/EnumBody0.txt
new file mode 100644
index 0000000..a221d65
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/EnumBody0.txt
@@ -0,0 +1,6 @@
+PsiJavaFile:EnumBody0.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:SEMICOLON(';')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/EnumBody1.txt b/java/java-tests/testData/psi/parser-partial/declarations/EnumBody1.txt
new file mode 100644
index 0000000..04b16bc
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/EnumBody1.txt
@@ -0,0 +1,28 @@
+PsiJavaFile:EnumBody1.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiEnumConstant:RED
+    PsiModifierList:
+      <empty list>
+    PsiIdentifier:RED('RED')
+    PsiExpressionList
+      <empty list>
+  PsiJavaToken:COMMA(',')
+  PsiWhiteSpace(' ')
+  PsiEnumConstant:GREEN
+    PsiModifierList:
+      <empty list>
+    PsiIdentifier:GREEN('GREEN')
+    PsiExpressionList
+      <empty list>
+  PsiJavaToken:COMMA(',')
+  PsiWhiteSpace(' ')
+  PsiEnumConstant:BLUE
+    PsiModifierList:
+      <empty list>
+    PsiIdentifier:BLUE('BLUE')
+    PsiExpressionList
+      <empty list>
+  PsiJavaToken:SEMICOLON(';')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/EnumBody2.txt b/java/java-tests/testData/psi/parser-partial/declarations/EnumBody2.txt
new file mode 100644
index 0000000..0e64713
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/EnumBody2.txt
@@ -0,0 +1,27 @@
+PsiJavaFile:EnumBody2.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiEnumConstant:RED
+    PsiModifierList:
+      <empty list>
+    PsiIdentifier:RED('RED')
+    PsiExpressionList
+      <empty list>
+  PsiJavaToken:COMMA(',')
+  PsiWhiteSpace(' ')
+  PsiEnumConstant:GREEN
+    PsiModifierList:
+      <empty list>
+    PsiIdentifier:GREEN('GREEN')
+    PsiExpressionList
+      <empty list>
+  PsiJavaToken:COMMA(',')
+  PsiWhiteSpace(' ')
+  PsiEnumConstant:BLUE
+    PsiModifierList:
+      <empty list>
+    PsiIdentifier:BLUE('BLUE')
+    PsiExpressionList
+      <empty list>
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/EnumBody3.txt b/java/java-tests/testData/psi/parser-partial/declarations/EnumBody3.txt
new file mode 100644
index 0000000..ea0d456
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/EnumBody3.txt
@@ -0,0 +1,28 @@
+PsiJavaFile:EnumBody3.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiEnumConstant:RED
+    PsiModifierList:
+      <empty list>
+    PsiIdentifier:RED('RED')
+    PsiExpressionList
+      <empty list>
+  PsiJavaToken:COMMA(',')
+  PsiWhiteSpace(' ')
+  PsiEnumConstant:GREEN
+    PsiModifierList:
+      <empty list>
+    PsiIdentifier:GREEN('GREEN')
+    PsiExpressionList
+      <empty list>
+  PsiJavaToken:COMMA(',')
+  PsiWhiteSpace(' ')
+  PsiEnumConstant:BLUE
+    PsiModifierList:
+      <empty list>
+    PsiIdentifier:BLUE('BLUE')
+    PsiExpressionList
+      <empty list>
+  PsiJavaToken:COMMA(',')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/EnumBody4.txt b/java/java-tests/testData/psi/parser-partial/declarations/EnumBody4.txt
new file mode 100644
index 0000000..f20ec90
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/EnumBody4.txt
@@ -0,0 +1,37 @@
+PsiJavaFile:EnumBody4.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiEnumConstant:RED
+    PsiModifierList:
+      <empty list>
+    PsiIdentifier:RED('RED')
+    PsiExpressionList
+      PsiJavaToken:LPARENTH('(')
+      PsiLiteralExpression:0
+        PsiJavaToken:INTEGER_LITERAL('0')
+      PsiJavaToken:RPARENTH(')')
+  PsiJavaToken:COMMA(',')
+  PsiWhiteSpace(' ')
+  PsiEnumConstant:GREEN
+    PsiModifierList:
+      <empty list>
+    PsiIdentifier:GREEN('GREEN')
+    PsiExpressionList
+      PsiJavaToken:LPARENTH('(')
+      PsiLiteralExpression:1
+        PsiJavaToken:INTEGER_LITERAL('1')
+      PsiJavaToken:RPARENTH(')')
+  PsiJavaToken:COMMA(',')
+  PsiWhiteSpace(' ')
+  PsiEnumConstant:BLUE
+    PsiModifierList:
+      <empty list>
+    PsiIdentifier:BLUE('BLUE')
+    PsiExpressionList
+      PsiJavaToken:LPARENTH('(')
+      PsiLiteralExpression:2
+        PsiJavaToken:INTEGER_LITERAL('2')
+      PsiJavaToken:RPARENTH(')')
+  PsiJavaToken:SEMICOLON(';')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/EnumBody5.txt b/java/java-tests/testData/psi/parser-partial/declarations/EnumBody5.txt
new file mode 100644
index 0000000..573f347
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/EnumBody5.txt
@@ -0,0 +1,22 @@
+PsiJavaFile:EnumBody5.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiEnumConstant:A
+    PsiModifierList:@ANNOTATION
+      PsiAnnotation
+        PsiJavaToken:AT('@')
+        PsiJavaCodeReferenceElement:ANNOTATION
+          PsiIdentifier:ANNOTATION('ANNOTATION')
+          PsiReferenceParameterList
+            <empty list>
+        PsiAnnotationParameterList
+          <empty list>
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiExpressionList
+      PsiJavaToken:LPARENTH('(')
+      PsiLiteralExpression:10
+        PsiJavaToken:INTEGER_LITERAL('10')
+      PsiJavaToken:RPARENTH(')')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/EnumBody6.txt b/java/java-tests/testData/psi/parser-partial/declarations/EnumBody6.txt
new file mode 100644
index 0000000..d0199d5
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/EnumBody6.txt
@@ -0,0 +1,45 @@
+PsiJavaFile:EnumBody6.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiEnumConstant:RED
+    PsiModifierList:
+      <empty list>
+    PsiIdentifier:RED('RED')
+    PsiExpressionList
+      <empty list>
+  PsiJavaToken:COMMA(',')
+  PsiWhiteSpace(' ')
+  PsiEnumConstant:GREEN
+    PsiModifierList:
+      <empty list>
+    PsiIdentifier:GREEN('GREEN')
+    PsiExpressionList
+      <empty list>
+  PsiJavaToken:COMMA(',')
+  PsiWhiteSpace(' ')
+  PsiEnumConstant:BLUE
+    PsiModifierList:
+      <empty list>
+    PsiIdentifier:BLUE('BLUE')
+    PsiExpressionList
+      <empty list>
+  PsiErrorElement:',' or ';' expected
+    <empty list>
+  PsiWhiteSpace('\n ')
+  PsiMethod:OurEnum
+    PsiModifierList:
+      <empty list>
+    PsiTypeParameterList
+      <empty list>
+    PsiIdentifier:OurEnum('OurEnum')
+    PsiParameterList:()
+      PsiJavaToken:LPARENTH('(')
+      PsiJavaToken:RPARENTH(')')
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiCodeBlock
+      PsiJavaToken:LBRACE('{')
+      PsiJavaToken:RBRACE('}')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/EnumSmartTypeCompletion.txt b/java/java-tests/testData/psi/parser-partial/declarations/EnumSmartTypeCompletion.txt
new file mode 100644
index 0000000..102f64d
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/EnumSmartTypeCompletion.txt
@@ -0,0 +1,143 @@
+PsiJavaFile:EnumSmartTypeCompletion.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiClass:TimeTravel
+    PsiModifierList:@Preliminary(A.B
+#) public
+      PsiAnnotation
+        PsiJavaToken:AT('@')
+        PsiJavaCodeReferenceElement:Preliminary
+          PsiIdentifier:Preliminary('Preliminary')
+          PsiReferenceParameterList
+            <empty list>
+        PsiAnnotationParameterList
+          PsiJavaToken:LPARENTH('(')
+          PsiNameValuePair
+            PsiReferenceExpression:A.B
+              PsiReferenceExpression:A
+                PsiReferenceParameterList
+                  <empty list>
+                PsiIdentifier:A('A')
+              PsiJavaToken:DOT('.')
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:B('B')
+          PsiErrorElement:',' or ')' expected
+            <empty list>
+          PsiWhiteSpace('\n')
+          PsiElement(BAD_CHARACTER)('#')
+          PsiJavaToken:RPARENTH(')')
+      PsiWhiteSpace(' ')
+      PsiKeyword:public('public')
+    PsiWhiteSpace(' ')
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:TimeTravel('TimeTravel')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
+  PsiWhiteSpace('\n  ')
+  PsiClass:TimeTravel
+    PsiModifierList:@Preliminary(a=A.B
+#) public
+      PsiAnnotation
+        PsiJavaToken:AT('@')
+        PsiJavaCodeReferenceElement:Preliminary
+          PsiIdentifier:Preliminary('Preliminary')
+          PsiReferenceParameterList
+            <empty list>
+        PsiAnnotationParameterList
+          PsiJavaToken:LPARENTH('(')
+          PsiNameValuePair
+            PsiIdentifier:a('a')
+            PsiJavaToken:EQ('=')
+            PsiReferenceExpression:A.B
+              PsiReferenceExpression:A
+                PsiReferenceParameterList
+                  <empty list>
+                PsiIdentifier:A('A')
+              PsiJavaToken:DOT('.')
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:B('B')
+          PsiErrorElement:',' or ')' expected
+            <empty list>
+          PsiWhiteSpace('\n')
+          PsiElement(BAD_CHARACTER)('#')
+          PsiJavaToken:RPARENTH(')')
+      PsiWhiteSpace(' ')
+      PsiKeyword:public('public')
+    PsiWhiteSpace(' ')
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:TimeTravel('TimeTravel')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
+  PsiWhiteSpace('\n  ')
+  PsiClass:TimeTravel
+    PsiModifierList:@Preliminary(a=A.B
+#, b=c) public
+      PsiAnnotation
+        PsiJavaToken:AT('@')
+        PsiJavaCodeReferenceElement:Preliminary
+          PsiIdentifier:Preliminary('Preliminary')
+          PsiReferenceParameterList
+            <empty list>
+        PsiAnnotationParameterList
+          PsiJavaToken:LPARENTH('(')
+          PsiNameValuePair
+            PsiIdentifier:a('a')
+            PsiJavaToken:EQ('=')
+            PsiReferenceExpression:A.B
+              PsiReferenceExpression:A
+                PsiReferenceParameterList
+                  <empty list>
+                PsiIdentifier:A('A')
+              PsiJavaToken:DOT('.')
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:B('B')
+          PsiErrorElement:',' or ')' expected
+            <empty list>
+          PsiWhiteSpace('\n')
+          PsiElement(BAD_CHARACTER)('#')
+          PsiJavaToken:COMMA(',')
+          PsiWhiteSpace(' ')
+          PsiNameValuePair
+            PsiIdentifier:b('b')
+            PsiJavaToken:EQ('=')
+            PsiReferenceExpression:c
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:c('c')
+          PsiJavaToken:RPARENTH(')')
+      PsiWhiteSpace(' ')
+      PsiKeyword:public('public')
+    PsiWhiteSpace(' ')
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:TimeTravel('TimeTravel')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:RBRACE('}')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/EnumWithInitializedConstants.txt b/java/java-tests/testData/psi/parser-partial/declarations/EnumWithInitializedConstants.txt
new file mode 100644
index 0000000..287b552
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/EnumWithInitializedConstants.txt
@@ -0,0 +1,51 @@
+PsiJavaFile:EnumWithInitializedConstants.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiEnumConstant:A
+    PsiModifierList:
+      <empty list>
+    PsiIdentifier:A('A')
+    PsiExpressionList
+      PsiJavaToken:LPARENTH('(')
+      PsiLiteralExpression:10
+        PsiJavaToken:INTEGER_LITERAL('10')
+      PsiJavaToken:RPARENTH(')')
+    PsiWhiteSpace(' ')
+    PsiAnonymousClass (PsiEnumConstantInitializerImpl)):
+      PsiJavaToken:LBRACE('{')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:RBRACE('}')
+  PsiJavaToken:COMMA(',')
+  PsiWhiteSpace('\n ')
+  PsiEnumConstant:B
+    PsiModifierList:
+      <empty list>
+    PsiIdentifier:B('B')
+    PsiExpressionList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiAnonymousClass (PsiEnumConstantInitializerImpl)):
+      PsiJavaToken:LBRACE('{')
+      PsiWhiteSpace(' ')
+      PsiMethod:method
+        PsiModifierList:
+          <empty list>
+        PsiTypeParameterList
+          <empty list>
+        PsiTypeElement:void
+          PsiKeyword:void('void')
+        PsiWhiteSpace(' ')
+        PsiIdentifier:method('method')
+        PsiParameterList:()
+          PsiJavaToken:LPARENTH('(')
+          PsiJavaToken:RPARENTH(')')
+        PsiReferenceList
+          <empty list>
+        PsiWhiteSpace(' ')
+        PsiCodeBlock
+          PsiJavaToken:LBRACE('{')
+          PsiJavaToken:RBRACE('}')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:RBRACE('}')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/EnumWithoutConstants.txt b/java/java-tests/testData/psi/parser-partial/declarations/EnumWithoutConstants.txt
new file mode 100644
index 0000000..75b0a66
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/EnumWithoutConstants.txt
@@ -0,0 +1,17 @@
+PsiJavaFile:EnumWithoutConstants.java
+  PsiJavaToken:LBRACE('{')
+  PsiErrorElement:';' expected
+    <empty list>
+  PsiWhiteSpace(' ')
+  PsiModifierList:private
+    PsiKeyword:private('private')
+  PsiWhiteSpace(' ')
+  PsiTypeElement:A
+    PsiJavaCodeReferenceElement:A
+      PsiIdentifier:A('A')
+      PsiReferenceParameterList
+        <empty list>
+  PsiErrorElement:Identifier expected
+    <empty list>
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/Errors.txt b/java/java-tests/testData/psi/parser-partial/declarations/Errors.txt
new file mode 100644
index 0000000..609379f
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/Errors.txt
@@ -0,0 +1,45 @@
+PsiJavaFile:Errors.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiModifierList:public static
+    PsiKeyword:public('public')
+    PsiWhiteSpace(' ')
+    PsiKeyword:static('static')
+  PsiWhiteSpace(' ')
+  PsiErrorElement:Unexpected token
+    PsiTypeParameterList
+      PsiJavaToken:LT('<')
+      PsiTypeParameter:error
+        PsiIdentifier:error('error')
+        PsiElement(EXTENDS_BOUND_LIST)
+          <empty list>
+      PsiErrorElement:'>' expected.
+        <empty list>
+  PsiWhiteSpace(' ')
+  PsiTypeElement:descr
+    PsiJavaCodeReferenceElement:descr
+      PsiIdentifier:descr('descr')
+      PsiReferenceParameterList
+        <empty list>
+  PsiErrorElement:Identifier expected
+    <empty list>
+  PsiErrorElement:Unexpected token
+    PsiJavaToken:EQ('=')
+    PsiJavaToken:STRING_LITERAL('"2"')
+    PsiJavaToken:GT('>')
+  PsiField:f1
+    PsiModifierList:protected
+      PsiKeyword:protected('protected')
+    PsiWhiteSpace(' ')
+    PsiTypeElement:int
+      PsiKeyword:int('int')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:f1('f1')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:EQ('=')
+    PsiWhiteSpace(' ')
+    PsiLiteralExpression:0
+      PsiJavaToken:INTEGER_LITERAL('0')
+    PsiJavaToken:SEMICOLON(';')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/Extension.txt b/java/java-tests/testData/psi/parser-partial/declarations/Extension.txt
new file mode 100644
index 0000000..8e876a4
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/Extension.txt
@@ -0,0 +1,39 @@
+PsiJavaFile:Extension.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiMethod:f
+    PsiModifierList:
+      <empty list>
+    PsiTypeParameterList
+      <empty list>
+    PsiTypeElement:int
+      PsiKeyword:int('int')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:f('f')
+    PsiParameterList:()
+      PsiJavaToken:LPARENTH('(')
+      PsiJavaToken:RPARENTH(')')
+    PsiWhiteSpace(' ')
+    PsiReferenceList
+      PsiKeyword:throws('throws')
+      PsiWhiteSpace(' ')
+      PsiJavaCodeReferenceElement:E
+        PsiIdentifier:E('E')
+        PsiReferenceParameterList
+          <empty list>
+    PsiWhiteSpace(' ')
+    PsiKeyword:default('default')
+    PsiWhiteSpace(' ')
+    PsiCodeBlock
+      PsiJavaToken:LBRACE('{')
+      PsiWhiteSpace(' ')
+      PsiReturnStatement
+        PsiKeyword:return('return')
+        PsiWhiteSpace(' ')
+        PsiLiteralExpression:42
+          PsiJavaToken:INTEGER_LITERAL('42')
+        PsiJavaToken:SEMICOLON(';')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:RBRACE('}')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/ExtraSemicolon.txt b/java/java-tests/testData/psi/parser-partial/declarations/ExtraSemicolon.txt
new file mode 100644
index 0000000..b444db5
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/ExtraSemicolon.txt
@@ -0,0 +1,22 @@
+PsiJavaFile:ExtraSemicolon.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiClass:C
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:RBRACE('}')
+  PsiJavaToken:SEMICOLON(';')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/FieldMulti.txt b/java/java-tests/testData/psi/parser-partial/declarations/FieldMulti.txt
new file mode 100644
index 0000000..22138d6
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/FieldMulti.txt
@@ -0,0 +1,22 @@
+PsiJavaFile:FieldMulti.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiField:field1
+    PsiModifierList:
+      <empty list>
+    PsiTypeElement:int
+      PsiKeyword:int('int')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:field1('field1')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:EQ('=')
+    PsiWhiteSpace(' ')
+    PsiLiteralExpression:0
+      PsiJavaToken:INTEGER_LITERAL('0')
+  PsiJavaToken:COMMA(',')
+  PsiWhiteSpace(' ')
+  PsiField:field2
+    PsiIdentifier:field2('field2')
+    PsiJavaToken:SEMICOLON(';')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/FieldSimple.txt b/java/java-tests/testData/psi/parser-partial/declarations/FieldSimple.txt
new file mode 100644
index 0000000..59dc28f
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/FieldSimple.txt
@@ -0,0 +1,18 @@
+PsiJavaFile:FieldSimple.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiField:field
+    PsiModifierList:
+      <empty list>
+    PsiTypeElement:int
+      PsiKeyword:int('int')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:field('field')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:EQ('=')
+    PsiWhiteSpace(' ')
+    PsiLiteralExpression:0
+      PsiJavaToken:INTEGER_LITERAL('0')
+    PsiJavaToken:SEMICOLON(';')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/GenericMethod.txt b/java/java-tests/testData/psi/parser-partial/declarations/GenericMethod.txt
new file mode 100644
index 0000000..7504f36
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/GenericMethod.txt
@@ -0,0 +1,91 @@
+PsiJavaFile:GenericMethod.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiMethod:test
+    PsiModifierList:public static
+      PsiKeyword:public('public')
+      PsiWhiteSpace(' ')
+      PsiKeyword:static('static')
+    PsiWhiteSpace(' ')
+    PsiTypeParameterList
+      PsiJavaToken:LT('<')
+      PsiTypeParameter:E
+        PsiIdentifier:E('E')
+        PsiElement(EXTENDS_BOUND_LIST)
+          <empty list>
+      PsiJavaToken:GT('>')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:test('test')
+    PsiParameterList:()
+      PsiJavaToken:LPARENTH('(')
+      PsiJavaToken:RPARENTH(')')
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:SEMICOLON(';')
+  PsiWhiteSpace('\n ')
+  PsiMethod:test1
+    PsiModifierList:
+      <empty list>
+    PsiTypeParameterList
+      PsiJavaToken:LT('<')
+      PsiTypeParameter:E
+        PsiIdentifier:E('E')
+        PsiElement(EXTENDS_BOUND_LIST)
+          <empty list>
+      PsiJavaToken:GT('>')
+    PsiWhiteSpace(' ')
+    PsiTypeElement:void
+      PsiKeyword:void('void')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:test1('test1')
+    PsiParameterList:()
+      PsiJavaToken:LPARENTH('(')
+      PsiJavaToken:RPARENTH(')')
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:SEMICOLON(';')
+  PsiWhiteSpace('\n ')
+  PsiMethod:test2
+    PsiModifierList:
+      <empty list>
+    PsiTypeParameterList
+      PsiJavaToken:LT('<')
+      PsiTypeParameter:E1
+        PsiIdentifier:E1('E1')
+        PsiWhiteSpace(' ')
+        PsiElement(EXTENDS_BOUND_LIST)
+          PsiKeyword:extends('extends')
+          PsiWhiteSpace(' ')
+          PsiJavaCodeReferenceElement:Integer
+            PsiIdentifier:Integer('Integer')
+            PsiReferenceParameterList
+              <empty list>
+      PsiJavaToken:COMMA(',')
+      PsiWhiteSpace(' ')
+      PsiTypeParameter:E2
+        PsiIdentifier:E2('E2')
+        PsiWhiteSpace(' ')
+        PsiElement(EXTENDS_BOUND_LIST)
+          PsiKeyword:extends('extends')
+          PsiWhiteSpace(' ')
+          PsiJavaCodeReferenceElement:Runnable
+            PsiIdentifier:Runnable('Runnable')
+            PsiReferenceParameterList
+              <empty list>
+      PsiJavaToken:GT('>')
+    PsiWhiteSpace(' ')
+    PsiTypeElement:String
+      PsiJavaCodeReferenceElement:String
+        PsiIdentifier:String('String')
+        PsiReferenceParameterList
+          <empty list>
+    PsiWhiteSpace(' ')
+    PsiIdentifier:test2('test2')
+    PsiParameterList:()
+      PsiJavaToken:LPARENTH('(')
+      PsiJavaToken:RPARENTH(')')
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:SEMICOLON(';')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/GenericMethodErrors.txt b/java/java-tests/testData/psi/parser-partial/declarations/GenericMethodErrors.txt
new file mode 100644
index 0000000..5be5047
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/GenericMethodErrors.txt
@@ -0,0 +1,43 @@
+PsiJavaFile:GenericMethodErrors.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiModifierList:
+    <empty list>
+  PsiErrorElement:Unexpected token
+    PsiTypeParameterList
+      PsiJavaToken:LT('<')
+      PsiTypeParameter:Error
+        PsiIdentifier:Error('Error')
+        PsiElement(EXTENDS_BOUND_LIST)
+          <empty list>
+      PsiErrorElement:'>' expected.
+        <empty list>
+  PsiWhiteSpace(' ')
+  PsiTypeElement:sss
+    PsiJavaCodeReferenceElement:sss
+      PsiIdentifier:sss('sss')
+      PsiReferenceParameterList
+        <empty list>
+  PsiErrorElement:Identifier expected
+    <empty list>
+  PsiWhiteSpace(' ')
+  PsiErrorElement:Unexpected token
+    PsiJavaToken:DIV('/')
+    PsiJavaToken:GT('>')
+    PsiWhiteSpace(' ')
+    PsiJavaCodeReferenceElement:test <error>
+      PsiIdentifier:test('test')
+      PsiWhiteSpace(' ')
+      PsiReferenceParameterList
+        PsiJavaToken:LT('<')
+        PsiTypeElement:error
+          PsiJavaCodeReferenceElement:error
+            PsiIdentifier:error('error')
+            PsiReferenceParameterList
+              <empty list>
+        PsiJavaToken:GT('>')
+    PsiJavaToken:LPARENTH('(')
+    PsiJavaToken:RPARENTH(')')
+  PsiJavaToken:SEMICOLON(';')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/IncompleteAnnotation.txt b/java/java-tests/testData/psi/parser-partial/declarations/IncompleteAnnotation.txt
new file mode 100644
index 0000000..4567aab
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/IncompleteAnnotation.txt
@@ -0,0 +1,51 @@
+PsiJavaFile:IncompleteAnnotation.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiClass:Foo
+    PsiModifierList:public
+      PsiKeyword:public('public')
+    PsiWhiteSpace(' ')
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace(' ')
+    PsiMethod:testSomething
+      PsiModifierList:public
+        PsiKeyword:public('public')
+      PsiTypeParameterList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiTypeElement:void
+        PsiKeyword:void('void')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:testSomething('testSomething')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiReferenceList
+        <empty list>
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace(' ')
+    PsiModifierList:@Null
+      PsiAnnotation
+        PsiJavaToken:AT('@')
+        PsiJavaCodeReferenceElement:Null
+          PsiIdentifier:Null('Null')
+          PsiReferenceParameterList
+            <empty list>
+        PsiAnnotationParameterList
+          <empty list>
+    PsiErrorElement:Identifier or type expected
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:RBRACE('}')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/MethodNormal0.txt b/java/java-tests/testData/psi/parser-partial/declarations/MethodNormal0.txt
new file mode 100644
index 0000000..c9f9ad5
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/MethodNormal0.txt
@@ -0,0 +1,23 @@
+PsiJavaFile:MethodNormal0.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiMethod:f
+    PsiModifierList:
+      <empty list>
+    PsiTypeParameterList
+      <empty list>
+    PsiTypeElement:void
+      PsiKeyword:void('void')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:f('f')
+    PsiParameterList:()
+      PsiJavaToken:LPARENTH('(')
+      PsiJavaToken:RPARENTH(')')
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiCodeBlock
+      PsiJavaToken:LBRACE('{')
+      PsiJavaToken:RBRACE('}')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/MethodNormal1.txt b/java/java-tests/testData/psi/parser-partial/declarations/MethodNormal1.txt
new file mode 100644
index 0000000..b146b9b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/MethodNormal1.txt
@@ -0,0 +1,20 @@
+PsiJavaFile:MethodNormal1.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiMethod:f
+    PsiModifierList:
+      <empty list>
+    PsiTypeParameterList
+      <empty list>
+    PsiTypeElement:void
+      PsiKeyword:void('void')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:f('f')
+    PsiParameterList:()
+      PsiJavaToken:LPARENTH('(')
+      PsiJavaToken:RPARENTH(')')
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:SEMICOLON(';')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/MethodNormal2.txt b/java/java-tests/testData/psi/parser-partial/declarations/MethodNormal2.txt
new file mode 100644
index 0000000..5a3ab48
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/MethodNormal2.txt
@@ -0,0 +1,27 @@
+PsiJavaFile:MethodNormal2.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiMethod:f
+    PsiModifierList:default public
+      PsiKeyword:default('default')
+      PsiWhiteSpace(' ')
+      PsiKeyword:public('public')
+    PsiTypeParameterList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiTypeElement:void
+      PsiKeyword:void('void')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:f('f')
+    PsiParameterList:()
+      PsiJavaToken:LPARENTH('(')
+      PsiJavaToken:RPARENTH(')')
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiCodeBlock
+      PsiJavaToken:LBRACE('{')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:RBRACE('}')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/MissingInitializer.txt b/java/java-tests/testData/psi/parser-partial/declarations/MissingInitializer.txt
new file mode 100644
index 0000000..ad9b3b2
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/MissingInitializer.txt
@@ -0,0 +1,16 @@
+PsiJavaFile:MissingInitializer.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiField:field
+    PsiModifierList:
+      <empty list>
+    PsiTypeElement:int
+      PsiKeyword:int('int')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:field('field')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:EQ('=')
+    PsiErrorElement:Expression expected
+      <empty list>
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/MissingInitializerExpression.txt b/java/java-tests/testData/psi/parser-partial/declarations/MissingInitializerExpression.txt
new file mode 100644
index 0000000..e7dac65
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/MissingInitializerExpression.txt
@@ -0,0 +1,16 @@
+PsiJavaFile:MissingInitializerExpression.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiField:field
+    PsiModifierList:
+      <empty list>
+    PsiTypeElement:int
+      PsiKeyword:int('int')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:field('field')
+    PsiJavaToken:EQ('=')
+    PsiErrorElement:Expression expected
+      <empty list>
+    PsiJavaToken:SEMICOLON(';')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/MultiLineUnclosed.txt b/java/java-tests/testData/psi/parser-partial/declarations/MultiLineUnclosed.txt
new file mode 100644
index 0000000..0f35986
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/MultiLineUnclosed.txt
@@ -0,0 +1,23 @@
+PsiJavaFile:MultiLineUnclosed.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiModifierList:
+    <empty list>
+  PsiTypeElement:int
+    PsiKeyword:int('int')
+  PsiErrorElement:Identifier expected
+    <empty list>
+  PsiWhiteSpace(' \n ')
+  PsiField:o
+    PsiModifierList:
+      <empty list>
+    PsiTypeElement:Object
+      PsiJavaCodeReferenceElement:Object
+        PsiIdentifier:Object('Object')
+        PsiReferenceParameterList
+          <empty list>
+    PsiWhiteSpace(' ')
+    PsiIdentifier:o('o')
+    PsiJavaToken:SEMICOLON(';')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/NoType.txt b/java/java-tests/testData/psi/parser-partial/declarations/NoType.txt
new file mode 100644
index 0000000..5507c36b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/NoType.txt
@@ -0,0 +1,20 @@
+PsiJavaFile:NoType.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiErrorElement:Unexpected token
+    PsiKeyword:new('new')
+  PsiWhiteSpace(' ')
+  PsiMethod:X
+    PsiModifierList:
+      <empty list>
+    PsiTypeParameterList
+      <empty list>
+    PsiIdentifier:X('X')
+    PsiParameterList:()
+      PsiJavaToken:LPARENTH('(')
+      PsiJavaToken:RPARENTH(')')
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:SEMICOLON(';')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/ParameterAnnotation.txt b/java/java-tests/testData/psi/parser-partial/declarations/ParameterAnnotation.txt
new file mode 100644
index 0000000..c283ca4
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/ParameterAnnotation.txt
@@ -0,0 +1,45 @@
+PsiJavaFile:ParameterAnnotation.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiMethod:foo
+    PsiModifierList:
+      <empty list>
+    PsiTypeParameterList
+      <empty list>
+    PsiTypeElement:void
+      PsiKeyword:void('void')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:foo('foo')
+    PsiWhiteSpace(' ')
+    PsiParameterList:(@Annotation(value=77) int param)
+      PsiJavaToken:LPARENTH('(')
+      PsiParameter:param
+        PsiModifierList:@Annotation(value=77)
+          PsiAnnotation
+            PsiJavaToken:AT('@')
+            PsiJavaCodeReferenceElement:Annotation
+              PsiIdentifier:Annotation('Annotation')
+              PsiReferenceParameterList
+                <empty list>
+            PsiAnnotationParameterList
+              PsiJavaToken:LPARENTH('(')
+              PsiNameValuePair
+                PsiIdentifier:value('value')
+                PsiJavaToken:EQ('=')
+                PsiLiteralExpression:77
+                  PsiJavaToken:INTEGER_LITERAL('77')
+              PsiJavaToken:RPARENTH(')')
+        PsiWhiteSpace(' ')
+        PsiTypeElement:int
+          PsiKeyword:int('int')
+        PsiWhiteSpace(' ')
+        PsiIdentifier:param('param')
+      PsiJavaToken:RPARENTH(')')
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiCodeBlock
+      PsiJavaToken:LBRACE('{')
+      PsiJavaToken:RBRACE('}')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/ParameterizedClass.txt b/java/java-tests/testData/psi/parser-partial/declarations/ParameterizedClass.txt
new file mode 100644
index 0000000..262c0c8
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/ParameterizedClass.txt
@@ -0,0 +1,44 @@
+PsiJavaFile:ParameterizedClass.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiClass:A
+    PsiModifierList:public
+      PsiKeyword:public('public')
+    PsiWhiteSpace(' ')
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiWhiteSpace(' ')
+    PsiTypeParameterList
+      PsiJavaToken:LT('<')
+      PsiTypeParameter:T
+        PsiIdentifier:T('T')
+        PsiWhiteSpace(' ')
+        PsiElement(EXTENDS_BOUND_LIST)
+          PsiKeyword:extends('extends')
+          PsiWhiteSpace(' ')
+          PsiJavaCodeReferenceElement:java.util.List
+            PsiJavaCodeReferenceElement:java.util
+              PsiJavaCodeReferenceElement:java
+                PsiIdentifier:java('java')
+                PsiReferenceParameterList
+                  <empty list>
+              PsiJavaToken:DOT('.')
+              PsiIdentifier:util('util')
+              PsiReferenceParameterList
+                <empty list>
+            PsiJavaToken:DOT('.')
+            PsiIdentifier:List('List')
+            PsiReferenceParameterList
+              <empty list>
+      PsiJavaToken:GT('>')
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:RBRACE('}')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/ParameterizedMethod.txt b/java/java-tests/testData/psi/parser-partial/declarations/ParameterizedMethod.txt
new file mode 100644
index 0000000..0128264
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/ParameterizedMethod.txt
@@ -0,0 +1,40 @@
+PsiJavaFile:ParameterizedMethod.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiMethod:bar
+    PsiModifierList:@Nullable
+      PsiAnnotation
+        PsiJavaToken:AT('@')
+        PsiJavaCodeReferenceElement:Nullable
+          PsiIdentifier:Nullable('Nullable')
+          PsiReferenceParameterList
+            <empty list>
+        PsiAnnotationParameterList
+          <empty list>
+    PsiWhiteSpace(' ')
+    PsiTypeParameterList
+      PsiJavaToken:LT('<')
+      PsiTypeParameter:T
+        PsiIdentifier:T('T')
+        PsiElement(EXTENDS_BOUND_LIST)
+          <empty list>
+      PsiJavaToken:GT('>')
+    PsiWhiteSpace(' ')
+    PsiTypeElement:T
+      PsiJavaCodeReferenceElement:T
+        PsiIdentifier:T('T')
+        PsiReferenceParameterList
+          <empty list>
+    PsiWhiteSpace(' ')
+    PsiIdentifier:bar('bar')
+    PsiParameterList:()
+      PsiJavaToken:LPARENTH('(')
+      PsiJavaToken:RPARENTH(')')
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiCodeBlock
+      PsiJavaToken:LBRACE('{')
+      PsiJavaToken:RBRACE('}')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/Pines.txt b/java/java-tests/testData/psi/parser-partial/declarations/Pines.txt
new file mode 100644
index 0000000..afbe40e
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/Pines.txt
@@ -0,0 +1,56 @@
+PsiJavaFile:Pines.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      PsiJavaToken:LT('<')
+      PsiTypeParameter:T
+        PsiIdentifier:T('T')
+        PsiWhiteSpace(' ')
+        PsiElement(EXTENDS_BOUND_LIST)
+          PsiKeyword:extends('extends')
+          PsiWhiteSpace(' ')
+          PsiJavaCodeReferenceElement:List<String>
+            PsiIdentifier:List('List')
+            PsiReferenceParameterList
+              PsiJavaToken:LT('<')
+              PsiTypeElement:String
+                PsiJavaCodeReferenceElement:String
+                  PsiIdentifier:String('String')
+                  PsiReferenceParameterList
+                    <empty list>
+              PsiJavaToken:GT('>')
+      PsiJavaToken:GT('>')
+    PsiWhiteSpace(' ')
+    PsiReferenceList
+      PsiKeyword:extends('extends')
+      PsiWhiteSpace(' ')
+      PsiJavaCodeReferenceElement:List<List<Integer>>
+        PsiIdentifier:List('List')
+        PsiReferenceParameterList
+          PsiJavaToken:LT('<')
+          PsiTypeElement:List<Integer>
+            PsiJavaCodeReferenceElement:List<Integer>
+              PsiIdentifier:List('List')
+              PsiReferenceParameterList
+                PsiJavaToken:LT('<')
+                PsiTypeElement:Integer
+                  PsiJavaCodeReferenceElement:Integer
+                    PsiIdentifier:Integer('Integer')
+                    PsiReferenceParameterList
+                      <empty list>
+                PsiJavaToken:GT('>')
+          PsiJavaToken:GT('>')
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:RBRACE('}')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/Semicolons.txt b/java/java-tests/testData/psi/parser-partial/declarations/Semicolons.txt
new file mode 100644
index 0000000..0327c01
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/Semicolons.txt
@@ -0,0 +1,44 @@
+PsiJavaFile:Semicolons.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiMethod:f
+    PsiModifierList:
+      <empty list>
+    PsiTypeParameterList
+      <empty list>
+    PsiTypeElement:void
+      PsiKeyword:void('void')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:f('f')
+    PsiParameterList:()
+      PsiJavaToken:LPARENTH('(')
+      PsiJavaToken:RPARENTH(')')
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiCodeBlock
+      PsiJavaToken:LBRACE('{')
+      PsiJavaToken:RBRACE('}')
+  PsiJavaToken:SEMICOLON(';')
+  PsiWhiteSpace(' ')
+  PsiMethod:g
+    PsiModifierList:
+      <empty list>
+    PsiTypeParameterList
+      <empty list>
+    PsiTypeElement:void
+      PsiKeyword:void('void')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:g('g')
+    PsiParameterList:()
+      PsiJavaToken:LPARENTH('(')
+      PsiJavaToken:RPARENTH(')')
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiCodeBlock
+      PsiJavaToken:LBRACE('{')
+      PsiJavaToken:RBRACE('}')
+  PsiJavaToken:SEMICOLON(';')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/TypeAnno.txt b/java/java-tests/testData/psi/parser-partial/declarations/TypeAnno.txt
new file mode 100644
index 0000000..b44cea7
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/TypeAnno.txt
@@ -0,0 +1,317 @@
+PsiJavaFile:TypeAnno.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiClass:C
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      PsiJavaToken:LT('<')
+      PsiTypeParameter:T
+        PsiAnnotation
+          PsiJavaToken:AT('@')
+          PsiJavaCodeReferenceElement:D
+            PsiIdentifier:D('D')
+            PsiReferenceParameterList
+              <empty list>
+          PsiAnnotationParameterList
+            <empty list>
+        PsiWhiteSpace(' ')
+        PsiIdentifier:T('T')
+        PsiWhiteSpace(' ')
+        PsiElement(EXTENDS_BOUND_LIST)
+          PsiKeyword:extends('extends')
+          PsiWhiteSpace(' ')
+          PsiJavaCodeReferenceElement:@F Object
+            PsiAnnotation
+              PsiJavaToken:AT('@')
+              PsiJavaCodeReferenceElement:F
+                PsiIdentifier:F('F')
+                PsiReferenceParameterList
+                  <empty list>
+              PsiAnnotationParameterList
+                <empty list>
+            PsiWhiteSpace(' ')
+            PsiIdentifier:Object('Object')
+            PsiReferenceParameterList
+              <empty list>
+      PsiJavaToken:GT('>')
+    PsiWhiteSpace(' ')
+    PsiReferenceList
+      PsiKeyword:extends('extends')
+      PsiWhiteSpace(' ')
+      PsiJavaCodeReferenceElement:@F Object
+        PsiAnnotation
+          PsiJavaToken:AT('@')
+          PsiJavaCodeReferenceElement:F
+            PsiIdentifier:F('F')
+            PsiReferenceParameterList
+              <empty list>
+          PsiAnnotationParameterList
+            <empty list>
+        PsiWhiteSpace(' ')
+        PsiIdentifier:Object('Object')
+        PsiReferenceParameterList
+          <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiMethod:method
+      PsiModifierList:@F
+        PsiAnnotation
+          PsiJavaToken:AT('@')
+          PsiJavaCodeReferenceElement:F
+            PsiIdentifier:F('F')
+            PsiReferenceParameterList
+              <empty list>
+          PsiAnnotationParameterList
+            <empty list>
+      PsiTypeParameterList
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiTypeElement:int @F[]
+        PsiTypeElement:int
+          PsiKeyword:int('int')
+        PsiWhiteSpace(' ')
+        PsiAnnotation
+          PsiJavaToken:AT('@')
+          PsiJavaCodeReferenceElement:F
+            PsiIdentifier:F('F')
+            PsiReferenceParameterList
+              <empty list>
+          PsiAnnotationParameterList
+            <empty list>
+        PsiJavaToken:LBRACKET('[')
+        PsiJavaToken:RBRACKET(']')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:method('method')
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiWhiteSpace(' ')
+      PsiReferenceList
+        PsiKeyword:throws('throws')
+        PsiWhiteSpace(' ')
+        PsiJavaCodeReferenceElement:@F Exception
+          PsiAnnotation
+            PsiJavaToken:AT('@')
+            PsiJavaCodeReferenceElement:F
+              PsiIdentifier:F('F')
+              PsiReferenceParameterList
+                <empty list>
+            PsiAnnotationParameterList
+              <empty list>
+          PsiWhiteSpace(' ')
+          PsiIdentifier:Exception('Exception')
+          PsiReferenceParameterList
+            <empty list>
+      PsiWhiteSpace(' ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiAssignmentExpression:a = this instanceof @F C
+            PsiReferenceExpression:a
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:a('a')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:EQ('=')
+            PsiWhiteSpace(' ')
+            PsiInstanceofExpression:this instanceof @F C
+              PsiThisExpression:this
+                PsiReferenceParameterList
+                  <empty list>
+                PsiKeyword:this('this')
+              PsiWhiteSpace(' ')
+              PsiKeyword:instanceof('instanceof')
+              PsiWhiteSpace(' ')
+              PsiTypeElement:@F C
+                PsiAnnotation
+                  PsiJavaToken:AT('@')
+                  PsiJavaCodeReferenceElement:F
+                    PsiIdentifier:F('F')
+                    PsiReferenceParameterList
+                      <empty list>
+                  PsiAnnotationParameterList
+                    <empty list>
+                PsiWhiteSpace(' ')
+                PsiJavaCodeReferenceElement:C
+                  PsiIdentifier:C('C')
+                  PsiReferenceParameterList
+                    <empty list>
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n    ')
+        PsiDeclarationStatement
+          PsiLocalVariable:c
+            PsiModifierList:
+              <empty list>
+            PsiTypeElement:C<@F @G C>
+              PsiJavaCodeReferenceElement:C<@F @G C>
+                PsiIdentifier:C('C')
+                PsiReferenceParameterList
+                  PsiJavaToken:LT('<')
+                  PsiTypeElement:@F @G C
+                    PsiAnnotation
+                      PsiJavaToken:AT('@')
+                      PsiJavaCodeReferenceElement:F
+                        PsiIdentifier:F('F')
+                        PsiReferenceParameterList
+                          <empty list>
+                      PsiAnnotationParameterList
+                        <empty list>
+                    PsiWhiteSpace(' ')
+                    PsiAnnotation
+                      PsiJavaToken:AT('@')
+                      PsiJavaCodeReferenceElement:G
+                        PsiIdentifier:G('G')
+                        PsiReferenceParameterList
+                          <empty list>
+                      PsiAnnotationParameterList
+                        <empty list>
+                    PsiWhiteSpace(' ')
+                    PsiJavaCodeReferenceElement:C
+                      PsiIdentifier:C('C')
+                      PsiReferenceParameterList
+                        <empty list>
+                  PsiJavaToken:GT('>')
+            PsiWhiteSpace(' ')
+            PsiIdentifier:c('c')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:EQ('=')
+            PsiWhiteSpace(' ')
+            PsiNewExpression:new @Q C<@F C>()
+              PsiKeyword:new('new')
+              PsiReferenceParameterList
+                <empty list>
+              PsiWhiteSpace(' ')
+              PsiJavaCodeReferenceElement:@Q C<@F C>
+                PsiAnnotation
+                  PsiJavaToken:AT('@')
+                  PsiJavaCodeReferenceElement:Q
+                    PsiIdentifier:Q('Q')
+                    PsiReferenceParameterList
+                      <empty list>
+                  PsiAnnotationParameterList
+                    <empty list>
+                PsiWhiteSpace(' ')
+                PsiIdentifier:C('C')
+                PsiReferenceParameterList
+                  PsiJavaToken:LT('<')
+                  PsiTypeElement:@F C
+                    PsiAnnotation
+                      PsiJavaToken:AT('@')
+                      PsiJavaCodeReferenceElement:F
+                        PsiIdentifier:F('F')
+                        PsiReferenceParameterList
+                          <empty list>
+                      PsiAnnotationParameterList
+                        <empty list>
+                    PsiWhiteSpace(' ')
+                    PsiJavaCodeReferenceElement:C
+                      PsiIdentifier:C('C')
+                      PsiReferenceParameterList
+                        <empty list>
+                  PsiJavaToken:GT('>')
+              PsiExpressionList
+                PsiJavaToken:LPARENTH('(')
+                PsiJavaToken:RPARENTH(')')
+            PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiAssignmentExpression:c = (@F Object)c
+            PsiReferenceExpression:c
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:c('c')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:EQ('=')
+            PsiWhiteSpace(' ')
+            PsiTypeCastExpression:(@F Object)c
+              PsiJavaToken:LPARENTH('(')
+              PsiTypeElement:@F Object
+                PsiAnnotation
+                  PsiJavaToken:AT('@')
+                  PsiJavaCodeReferenceElement:F
+                    PsiIdentifier:F('F')
+                    PsiReferenceParameterList
+                      <empty list>
+                  PsiAnnotationParameterList
+                    <empty list>
+                PsiWhiteSpace(' ')
+                PsiJavaCodeReferenceElement:Object
+                  PsiIdentifier:Object('Object')
+                  PsiReferenceParameterList
+                    <empty list>
+              PsiJavaToken:RPARENTH(')')
+              PsiReferenceExpression:c
+                PsiReferenceParameterList
+                  <empty list>
+                PsiIdentifier:c('c')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n    ')
+        PsiDeclarationStatement
+          PsiLocalVariable:c
+            PsiModifierList:
+              <empty list>
+            PsiTypeElement:Class
+              PsiJavaCodeReferenceElement:Class
+                PsiIdentifier:Class('Class')
+                PsiReferenceParameterList
+                  <empty list>
+            PsiWhiteSpace(' ')
+            PsiIdentifier:c('c')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:EQ('=')
+            PsiWhiteSpace(' ')
+            PsiClassObjectAccessExpression:@TA String.class
+              PsiTypeElement:@TA String
+                PsiAnnotation
+                  PsiJavaToken:AT('@')
+                  PsiJavaCodeReferenceElement:TA
+                    PsiIdentifier:TA('TA')
+                    PsiReferenceParameterList
+                      <empty list>
+                  PsiAnnotationParameterList
+                    <empty list>
+                PsiWhiteSpace(' ')
+                PsiJavaCodeReferenceElement:String
+                  PsiIdentifier:String('String')
+                  PsiReferenceParameterList
+                    <empty list>
+              PsiJavaToken:DOT('.')
+              PsiKeyword:class('class')
+            PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiPostfixExpression:@F C.field++
+            PsiReferenceExpression:@F C.field
+              PsiReferenceExpression:@F C
+                PsiReferenceParameterList
+                  <empty list>
+                PsiAnnotation
+                  PsiJavaToken:AT('@')
+                  PsiJavaCodeReferenceElement:F
+                    PsiIdentifier:F('F')
+                    PsiReferenceParameterList
+                      <empty list>
+                  PsiAnnotationParameterList
+                    <empty list>
+                PsiWhiteSpace(' ')
+                PsiIdentifier:C('C')
+              PsiJavaToken:DOT('.')
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:field('field')
+            PsiJavaToken:PLUSPLUS('++')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/Unclosed0.txt b/java/java-tests/testData/psi/parser-partial/declarations/Unclosed0.txt
new file mode 100644
index 0000000..9353f05
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/Unclosed0.txt
@@ -0,0 +1,21 @@
+PsiJavaFile:Unclosed0.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiMethod:f
+    PsiModifierList:
+      <empty list>
+    PsiTypeParameterList
+      <empty list>
+    PsiTypeElement:void
+      PsiKeyword:void('void')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:f('f')
+    PsiParameterList:()
+      PsiJavaToken:LPARENTH('(')
+      PsiJavaToken:RPARENTH(')')
+    PsiReferenceList
+      <empty list>
+    PsiErrorElement:'{' or ';' expected
+      <empty list>
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/Unclosed1.txt b/java/java-tests/testData/psi/parser-partial/declarations/Unclosed1.txt
new file mode 100644
index 0000000..c7b4159
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/Unclosed1.txt
@@ -0,0 +1,22 @@
+PsiJavaFile:Unclosed1.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiMethod:f
+    PsiModifierList:
+      <empty list>
+    PsiTypeParameterList
+      <empty list>
+    PsiTypeElement:void
+      PsiKeyword:void('void')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:f('f')
+    PsiParameterList:(
+      PsiJavaToken:LPARENTH('(')
+      PsiErrorElement:')' expected
+        <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiErrorElement:'{' or ';' expected
+      <empty list>
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/Unclosed2.txt b/java/java-tests/testData/psi/parser-partial/declarations/Unclosed2.txt
new file mode 100644
index 0000000..b2a0dfe
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/Unclosed2.txt
@@ -0,0 +1,37 @@
+PsiJavaFile:Unclosed2.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiMethod:f
+    PsiModifierList:
+      <empty list>
+    PsiTypeParameterList
+      <empty list>
+    PsiTypeElement:void
+      PsiKeyword:void('void')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:f('f')
+    PsiParameterList:()
+      PsiJavaToken:LPARENTH('(')
+      PsiJavaToken:RPARENTH(')')
+    PsiReferenceList
+      <empty list>
+    PsiErrorElement:'{' or ';' expected
+      <empty list>
+  PsiWhiteSpace('\n ')
+  PsiMethod:g
+    PsiModifierList:
+      <empty list>
+    PsiTypeParameterList
+      <empty list>
+    PsiTypeElement:void
+      PsiKeyword:void('void')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:g('g')
+    PsiParameterList:()
+      PsiJavaToken:LPARENTH('(')
+      PsiJavaToken:RPARENTH(')')
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:SEMICOLON(';')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/Unclosed3.txt b/java/java-tests/testData/psi/parser-partial/declarations/Unclosed3.txt
new file mode 100644
index 0000000..82caa1c
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/Unclosed3.txt
@@ -0,0 +1,29 @@
+PsiJavaFile:Unclosed3.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiMethod:f
+    PsiModifierList:
+      <empty list>
+    PsiTypeParameterList
+      <empty list>
+    PsiTypeElement:void
+      PsiKeyword:void('void')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:f('f')
+    PsiParameterList:(int a
+      PsiJavaToken:LPARENTH('(')
+      PsiParameter:a
+        PsiModifierList:
+          <empty list>
+        PsiTypeElement:int
+          PsiKeyword:int('int')
+        PsiWhiteSpace(' ')
+        PsiIdentifier:a('a')
+      PsiErrorElement:')' expected
+        <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiErrorElement:'{' or ';' expected
+      <empty list>
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/Unclosed4.txt b/java/java-tests/testData/psi/parser-partial/declarations/Unclosed4.txt
new file mode 100644
index 0000000..d7ffeea
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/Unclosed4.txt
@@ -0,0 +1,33 @@
+PsiJavaFile:Unclosed4.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiMethod:f
+    PsiModifierList:
+      <empty list>
+    PsiTypeParameterList
+      <empty list>
+    PsiTypeElement:void
+      PsiKeyword:void('void')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:f('f')
+    PsiParameterList:(int a,,
+      PsiJavaToken:LPARENTH('(')
+      PsiParameter:a
+        PsiModifierList:
+          <empty list>
+        PsiTypeElement:int
+          PsiKeyword:int('int')
+        PsiWhiteSpace(' ')
+        PsiIdentifier:a('a')
+      PsiJavaToken:COMMA(',')
+      PsiErrorElement:Parameter expected
+        <empty list>
+      PsiJavaToken:COMMA(',')
+      PsiErrorElement:Identifier or type expected
+        <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiErrorElement:'{' or ';' expected
+      <empty list>
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/Unclosed5.txt b/java/java-tests/testData/psi/parser-partial/declarations/Unclosed5.txt
new file mode 100644
index 0000000..a0166d8
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/Unclosed5.txt
@@ -0,0 +1,30 @@
+PsiJavaFile:Unclosed5.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiMethod:f
+    PsiModifierList:
+      <empty list>
+    PsiTypeParameterList
+      <empty list>
+    PsiTypeElement:void
+      PsiKeyword:void('void')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:f('f')
+    PsiParameterList:(int a,)
+      PsiJavaToken:LPARENTH('(')
+      PsiParameter:a
+        PsiModifierList:
+          <empty list>
+        PsiTypeElement:int
+          PsiKeyword:int('int')
+        PsiWhiteSpace(' ')
+        PsiIdentifier:a('a')
+      PsiJavaToken:COMMA(',')
+      PsiErrorElement:Identifier or type expected
+        <empty list>
+      PsiJavaToken:RPARENTH(')')
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:SEMICOLON(';')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/Unclosed6.txt b/java/java-tests/testData/psi/parser-partial/declarations/Unclosed6.txt
new file mode 100644
index 0000000..e1e1b65
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/Unclosed6.txt
@@ -0,0 +1,25 @@
+PsiJavaFile:Unclosed6.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiAnnotationMethod:f
+    PsiModifierList:
+      <empty list>
+    PsiTypeParameterList
+      <empty list>
+    PsiTypeElement:void
+      PsiKeyword:void('void')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:f('f')
+    PsiParameterList:()
+      PsiJavaToken:LPARENTH('(')
+      PsiJavaToken:RPARENTH(')')
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiKeyword:default('default')
+    PsiErrorElement:Value expected
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:SEMICOLON(';')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/Unclosed7.txt b/java/java-tests/testData/psi/parser-partial/declarations/Unclosed7.txt
new file mode 100644
index 0000000..128c071
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/Unclosed7.txt
@@ -0,0 +1,37 @@
+PsiJavaFile:Unclosed7.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiAnnotationMethod:f
+    PsiModifierList:
+      <empty list>
+    PsiTypeParameterList
+      <empty list>
+    PsiTypeElement:void
+      PsiKeyword:void('void')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:f('f')
+    PsiParameterList:()
+      PsiJavaToken:LPARENTH('(')
+      PsiJavaToken:RPARENTH(')')
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiKeyword:default('default')
+    PsiWhiteSpace(' ')
+    PsiArrayInitializerMemberValue:{
+      PsiJavaToken:LBRACE('{')
+      PsiErrorElement:Value expected
+        <empty list>
+      PsiErrorElement:'}' expected
+        <empty list>
+    PsiErrorElement:'{' or ';' expected
+      <empty list>
+  PsiErrorElement:Unexpected token
+    PsiKeyword:return('return')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:INTEGER_LITERAL('42')
+  PsiJavaToken:SEMICOLON(';')
+  PsiJavaToken:RBRACE('}')
+  PsiWhiteSpace(' ')
+  PsiErrorElement:Unparsed tokens
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/Unclosed8.txt b/java/java-tests/testData/psi/parser-partial/declarations/Unclosed8.txt
new file mode 100644
index 0000000..5505b83
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/Unclosed8.txt
@@ -0,0 +1,23 @@
+PsiJavaFile:Unclosed8.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiMethod:f
+    PsiModifierList:
+      <empty list>
+    PsiTypeParameterList
+      <empty list>
+    PsiTypeElement:void
+      PsiKeyword:void('void')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:f('f')
+    PsiParameterList:()
+      PsiJavaToken:LPARENTH('(')
+      PsiJavaToken:RPARENTH(')')
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiKeyword:default('default')
+    PsiErrorElement:'{' or ';' expected
+      <empty list>
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/Unclosed9.txt b/java/java-tests/testData/psi/parser-partial/declarations/Unclosed9.txt
new file mode 100644
index 0000000..e1df58f5
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/Unclosed9.txt
@@ -0,0 +1,25 @@
+PsiJavaFile:Unclosed9.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiMethod:f
+    PsiModifierList:
+      <empty list>
+    PsiTypeParameterList
+      <empty list>
+    PsiTypeElement:void
+      PsiKeyword:void('void')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:f('f')
+    PsiParameterList:()
+      PsiJavaToken:LPARENTH('(')
+      PsiJavaToken:RPARENTH(')')
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiKeyword:default('default')
+    PsiErrorElement:'{' expected
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:SEMICOLON(';')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/UnclosedBracket.txt b/java/java-tests/testData/psi/parser-partial/declarations/UnclosedBracket.txt
new file mode 100644
index 0000000..e17119c
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/UnclosedBracket.txt
@@ -0,0 +1,15 @@
+PsiJavaFile:UnclosedBracket.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiField:field
+    PsiModifierList:
+      <empty list>
+    PsiTypeElement:int
+      PsiKeyword:int('int')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:field('field')
+    PsiJavaToken:LBRACKET('[')
+    PsiErrorElement:']' expected
+      <empty list>
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/UnclosedComma.txt b/java/java-tests/testData/psi/parser-partial/declarations/UnclosedComma.txt
new file mode 100644
index 0000000..83f9e32
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/UnclosedComma.txt
@@ -0,0 +1,15 @@
+PsiJavaFile:UnclosedComma.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiField:field
+    PsiModifierList:
+      <empty list>
+    PsiTypeElement:int
+      PsiKeyword:int('int')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:field('field')
+  PsiJavaToken:COMMA(',')
+  PsiErrorElement:Identifier expected
+    <empty list>
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/UnclosedSemicolon.txt b/java/java-tests/testData/psi/parser-partial/declarations/UnclosedSemicolon.txt
new file mode 100644
index 0000000..f185e98
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/UnclosedSemicolon.txt
@@ -0,0 +1,14 @@
+PsiJavaFile:UnclosedSemicolon.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiField:field
+    PsiModifierList:
+      <empty list>
+    PsiTypeElement:int
+      PsiKeyword:int('int')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:field('field')
+    PsiErrorElement:';' expected
+      <empty list>
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/VarArgBrackets.txt b/java/java-tests/testData/psi/parser-partial/declarations/VarArgBrackets.txt
new file mode 100644
index 0000000..da11767
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/VarArgBrackets.txt
@@ -0,0 +1,32 @@
+PsiJavaFile:VarArgBrackets.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiMethod:foo
+    PsiModifierList:
+      <empty list>
+    PsiTypeParameterList
+      <empty list>
+    PsiTypeElement:void
+      PsiKeyword:void('void')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:foo('foo')
+    PsiParameterList:(int... x[])
+      PsiJavaToken:LPARENTH('(')
+      PsiParameter:x
+        PsiModifierList:
+          <empty list>
+        PsiTypeElement:int...
+          PsiTypeElement:int
+            PsiKeyword:int('int')
+          PsiJavaToken:ELLIPSIS('...')
+        PsiWhiteSpace(' ')
+        PsiIdentifier:x('x')
+        PsiErrorElement:')' expected
+          PsiJavaToken:LBRACKET('[')
+          PsiJavaToken:RBRACKET(']')
+      PsiJavaToken:RPARENTH(')')
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:SEMICOLON(';')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/declarations/WildcardParsing.txt b/java/java-tests/testData/psi/parser-partial/declarations/WildcardParsing.txt
new file mode 100644
index 0000000..b433896
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/declarations/WildcardParsing.txt
@@ -0,0 +1,55 @@
+PsiJavaFile:WildcardParsing.java
+  PsiJavaToken:LBRACE('{')
+  PsiWhiteSpace(' ')
+  PsiMethod:x
+    PsiModifierList:
+      <empty list>
+    PsiTypeParameterList
+      <empty list>
+    PsiTypeElement:List<? extends B>
+      PsiJavaCodeReferenceElement:List<? extends B>
+        PsiIdentifier:List('List')
+        PsiReferenceParameterList
+          PsiJavaToken:LT('<')
+          PsiTypeElement:? extends B
+            PsiJavaToken:QUEST('?')
+            PsiWhiteSpace(' ')
+            PsiKeyword:extends('extends')
+            PsiWhiteSpace(' ')
+            PsiTypeElement:B
+              PsiJavaCodeReferenceElement:B
+                PsiIdentifier:B('B')
+                PsiReferenceParameterList
+                  <empty list>
+          PsiJavaToken:GT('>')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:x('x')
+    PsiParameterList:(Collection<? super B> x)
+      PsiJavaToken:LPARENTH('(')
+      PsiParameter:x
+        PsiModifierList:
+          <empty list>
+        PsiTypeElement:Collection<? super B>
+          PsiJavaCodeReferenceElement:Collection<? super B>
+            PsiIdentifier:Collection('Collection')
+            PsiReferenceParameterList
+              PsiJavaToken:LT('<')
+              PsiTypeElement:? super B
+                PsiJavaToken:QUEST('?')
+                PsiWhiteSpace(' ')
+                PsiKeyword:super('super')
+                PsiWhiteSpace(' ')
+                PsiTypeElement:B
+                  PsiJavaCodeReferenceElement:B
+                    PsiIdentifier:B('B')
+                    PsiReferenceParameterList
+                      <empty list>
+              PsiJavaToken:GT('>')
+        PsiWhiteSpace(' ')
+        PsiIdentifier:x('x')
+      PsiJavaToken:RPARENTH(')')
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:SEMICOLON(';')
+  PsiWhiteSpace(' ')
+  PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/AmbiguousLambdaExpression.txt b/java/java-tests/testData/psi/parser-partial/expressions/AmbiguousLambdaExpression.txt
new file mode 100644
index 0000000..ed9dec7
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/AmbiguousLambdaExpression.txt
@@ -0,0 +1,52 @@
+PsiJavaFile:AmbiguousLambdaExpression.java
+  PsiMethodCallExpression:f( (x) < y , z > (w) -> v )
+    PsiReferenceExpression:f
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:f('f')
+    PsiExpressionList
+      PsiJavaToken:LPARENTH('(')
+      PsiWhiteSpace(' ')
+      PsiBinaryExpression:(x) < y
+        PsiParenthesizedExpression:(x)
+          PsiJavaToken:LPARENTH('(')
+          PsiReferenceExpression:x
+            PsiReferenceParameterList
+              <empty list>
+            PsiIdentifier:x('x')
+          PsiJavaToken:RPARENTH(')')
+        PsiWhiteSpace(' ')
+        PsiJavaToken:LT('<')
+        PsiWhiteSpace(' ')
+        PsiReferenceExpression:y
+          PsiReferenceParameterList
+            <empty list>
+          PsiIdentifier:y('y')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:COMMA(',')
+      PsiWhiteSpace(' ')
+      PsiBinaryExpression:z > (w) -> v
+        PsiReferenceExpression:z
+          PsiReferenceParameterList
+            <empty list>
+          PsiIdentifier:z('z')
+        PsiWhiteSpace(' ')
+        PsiJavaToken:GT('>')
+        PsiWhiteSpace(' ')
+        PsiLambdaExpression:(w) -> v
+          PsiParameterList:(w)
+            PsiJavaToken:LPARENTH('(')
+            PsiParameter:w
+              PsiModifierList:
+                <empty list>
+              PsiIdentifier:w('w')
+            PsiJavaToken:RPARENTH(')')
+          PsiWhiteSpace(' ')
+          PsiJavaToken:ARROW('->')
+          PsiWhiteSpace(' ')
+          PsiReferenceExpression:v
+            PsiReferenceParameterList
+              <empty list>
+            PsiIdentifier:v('v')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:RPARENTH(')')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/ArrayInitializer0.txt b/java/java-tests/testData/psi/parser-partial/expressions/ArrayInitializer0.txt
new file mode 100644
index 0000000..508d0da
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/ArrayInitializer0.txt
@@ -0,0 +1,5 @@
+PsiJavaFile:ArrayInitializer0.java
+  PsiArrayInitializerExpression:{ }
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/ArrayInitializer1.txt b/java/java-tests/testData/psi/parser-partial/expressions/ArrayInitializer1.txt
new file mode 100644
index 0000000..23a7143
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/ArrayInitializer1.txt
@@ -0,0 +1,8 @@
+PsiJavaFile:ArrayInitializer1.java
+  PsiArrayInitializerExpression:{ 1 }
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace(' ')
+    PsiLiteralExpression:1
+      PsiJavaToken:INTEGER_LITERAL('1')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/ArrayInitializer2.txt b/java/java-tests/testData/psi/parser-partial/expressions/ArrayInitializer2.txt
new file mode 100644
index 0000000..35a40ad
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/ArrayInitializer2.txt
@@ -0,0 +1,9 @@
+PsiJavaFile:ArrayInitializer2.java
+  PsiArrayInitializerExpression:{ 1, }
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace(' ')
+    PsiLiteralExpression:1
+      PsiJavaToken:INTEGER_LITERAL('1')
+    PsiJavaToken:COMMA(',')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/ArrayInitializer3.txt b/java/java-tests/testData/psi/parser-partial/expressions/ArrayInitializer3.txt
new file mode 100644
index 0000000..71af49d
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/ArrayInitializer3.txt
@@ -0,0 +1,11 @@
+PsiJavaFile:ArrayInitializer3.java
+  PsiArrayInitializerExpression:{ 1,2 }
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace(' ')
+    PsiLiteralExpression:1
+      PsiJavaToken:INTEGER_LITERAL('1')
+    PsiJavaToken:COMMA(',')
+    PsiLiteralExpression:2
+      PsiJavaToken:INTEGER_LITERAL('2')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/ArrayInitializer4.txt b/java/java-tests/testData/psi/parser-partial/expressions/ArrayInitializer4.txt
new file mode 100644
index 0000000..e8b34eb
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/ArrayInitializer4.txt
@@ -0,0 +1,13 @@
+PsiJavaFile:ArrayInitializer4.java
+  PsiArrayInitializerExpression:{ 1 2 }
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace(' ')
+    PsiLiteralExpression:1
+      PsiJavaToken:INTEGER_LITERAL('1')
+    PsiErrorElement:',' expected
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiLiteralExpression:2
+      PsiJavaToken:INTEGER_LITERAL('2')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/ArrayInitializer5.txt b/java/java-tests/testData/psi/parser-partial/expressions/ArrayInitializer5.txt
new file mode 100644
index 0000000..4613ecc
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/ArrayInitializer5.txt
@@ -0,0 +1,12 @@
+PsiJavaFile:ArrayInitializer5.java
+  PsiArrayInitializerExpression:{ { }
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace(' ')
+    PsiArrayInitializerExpression:{ }
+      PsiJavaToken:LBRACE('{')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:RBRACE('}')
+    PsiErrorElement:',' expected
+      <empty list>
+    PsiErrorElement:'}' expected
+      <empty list>
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/ArrayInitializer6.txt b/java/java-tests/testData/psi/parser-partial/expressions/ArrayInitializer6.txt
new file mode 100644
index 0000000..6dba1a6
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/ArrayInitializer6.txt
@@ -0,0 +1,7 @@
+PsiJavaFile:ArrayInitializer6.java
+  PsiArrayInitializerExpression:{  ,  }
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('  ')
+    PsiJavaToken:COMMA(',')
+    PsiWhiteSpace('  ')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/ArrayInitializer7.txt b/java/java-tests/testData/psi/parser-partial/expressions/ArrayInitializer7.txt
new file mode 100644
index 0000000..c33132b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/ArrayInitializer7.txt
@@ -0,0 +1,16 @@
+PsiJavaFile:ArrayInitializer7.java
+  PsiArrayInitializerExpression:{  ,  , 7 }
+    PsiJavaToken:LBRACE('{')
+    PsiErrorElement:Expression expected
+      <empty list>
+    PsiWhiteSpace('  ')
+    PsiJavaToken:COMMA(',')
+    PsiErrorElement:Expression expected
+      <empty list>
+    PsiWhiteSpace('  ')
+    PsiJavaToken:COMMA(',')
+    PsiWhiteSpace(' ')
+    PsiLiteralExpression:7
+      PsiJavaToken:INTEGER_LITERAL('7')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/Assignment0.txt b/java/java-tests/testData/psi/parser-partial/expressions/Assignment0.txt
new file mode 100644
index 0000000..92a8e70
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/Assignment0.txt
@@ -0,0 +1,11 @@
+PsiJavaFile:Assignment0.java
+  PsiAssignmentExpression:a = 0
+    PsiReferenceExpression:a
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:a('a')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:EQ('=')
+    PsiWhiteSpace(' ')
+    PsiLiteralExpression:0
+      PsiJavaToken:INTEGER_LITERAL('0')
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/Assignment1.txt b/java/java-tests/testData/psi/parser-partial/expressions/Assignment1.txt
new file mode 100644
index 0000000..be4001e
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/Assignment1.txt
@@ -0,0 +1,10 @@
+PsiJavaFile:Assignment1.java
+  PsiAssignmentExpression:a =
+    PsiReferenceExpression:a
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:a('a')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:EQ('=')
+    PsiErrorElement:Expression expected
+      <empty list>
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/Binary0.txt b/java/java-tests/testData/psi/parser-partial/expressions/Binary0.txt
new file mode 100644
index 0000000..b85f5e6
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/Binary0.txt
@@ -0,0 +1,13 @@
+PsiJavaFile:Binary0.java
+  PsiBinaryExpression:a + b
+    PsiReferenceExpression:a
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:a('a')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:PLUS('+')
+    PsiWhiteSpace(' ')
+    PsiReferenceExpression:b
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:b('b')
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/Binary1.txt b/java/java-tests/testData/psi/parser-partial/expressions/Binary1.txt
new file mode 100644
index 0000000..01bdccc
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/Binary1.txt
@@ -0,0 +1,13 @@
+PsiJavaFile:Binary1.java
+  PsiBinaryExpression:a < b
+    PsiReferenceExpression:a
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:a('a')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LT('<')
+    PsiWhiteSpace(' ')
+    PsiReferenceExpression:b
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:b('b')
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/Binary2.txt b/java/java-tests/testData/psi/parser-partial/expressions/Binary2.txt
new file mode 100644
index 0000000..f9e6038
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/Binary2.txt
@@ -0,0 +1,18 @@
+PsiJavaFile:Binary2.java
+  PsiAssignmentExpression:a > = b
+    PsiBinaryExpression:a >
+      PsiReferenceExpression:a
+        PsiReferenceParameterList
+          <empty list>
+        PsiIdentifier:a('a')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:GT('>')
+      PsiErrorElement:Expression expected
+        <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:EQ('=')
+    PsiWhiteSpace(' ')
+    PsiReferenceExpression:b
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:b('b')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/Binary3.txt b/java/java-tests/testData/psi/parser-partial/expressions/Binary3.txt
new file mode 100644
index 0000000..5e5a071
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/Binary3.txt
@@ -0,0 +1,18 @@
+PsiJavaFile:Binary3.java
+  PsiAssignmentExpression:a >/**/= b
+    PsiBinaryExpression:a >
+      PsiReferenceExpression:a
+        PsiReferenceParameterList
+          <empty list>
+        PsiIdentifier:a('a')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:GT('>')
+      PsiErrorElement:Expression expected
+        <empty list>
+    PsiComment(C_STYLE_COMMENT)('/**/')
+    PsiJavaToken:EQ('=')
+    PsiWhiteSpace(' ')
+    PsiReferenceExpression:b
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:b('b')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/Cast.txt b/java/java-tests/testData/psi/parser-partial/expressions/Cast.txt
new file mode 100644
index 0000000..8bcbe79
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/Cast.txt
@@ -0,0 +1,13 @@
+PsiJavaFile:Cast.java
+  PsiTypeCastExpression:(Type)var
+    PsiJavaToken:LPARENTH('(')
+    PsiTypeElement:Type
+      PsiJavaCodeReferenceElement:Type
+        PsiIdentifier:Type('Type')
+        PsiReferenceParameterList
+          <empty list>
+    PsiJavaToken:RPARENTH(')')
+    PsiReferenceExpression:var
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:var('var')
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/ChainedClassObjectAccess.txt b/java/java-tests/testData/psi/parser-partial/expressions/ChainedClassObjectAccess.txt
new file mode 100644
index 0000000..3fc7c2f
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/ChainedClassObjectAccess.txt
@@ -0,0 +1,19 @@
+PsiJavaFile:ChainedClassObjectAccess.java
+  PsiReferenceExpression:A.class.B
+    PsiClassObjectAccessExpression:A.class
+      PsiTypeElement:A
+        PsiJavaCodeReferenceElement:A
+          PsiIdentifier:A('A')
+          PsiReferenceParameterList
+            <empty list>
+      PsiJavaToken:DOT('.')
+      PsiKeyword:class('class')
+    PsiJavaToken:DOT('.')
+    PsiReferenceParameterList
+      <empty list>
+    PsiIdentifier:B('B')
+  PsiJavaToken:DOT('.')
+  PsiErrorElement:Identifier expected
+    <empty list>
+  PsiErrorElement:Unparsed tokens
+    PsiKeyword:class('class')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/ChainedThisObjectAccess.txt b/java/java-tests/testData/psi/parser-partial/expressions/ChainedThisObjectAccess.txt
new file mode 100644
index 0000000..bf6b560
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/ChainedThisObjectAccess.txt
@@ -0,0 +1,16 @@
+PsiJavaFile:ChainedThisObjectAccess.java
+  PsiReferenceExpression:A.this.B
+    PsiThisExpression:A.this
+      PsiJavaCodeReferenceElement:A
+        PsiIdentifier:A('A')
+        PsiReferenceParameterList
+          <empty list>
+      PsiJavaToken:DOT('.')
+      PsiKeyword:this('this')
+    PsiJavaToken:DOT('.')
+    PsiReferenceParameterList
+      <empty list>
+    PsiIdentifier:B('B')
+  PsiErrorElement:Unparsed tokens
+    PsiJavaToken:DOT('.')
+    PsiKeyword:this('this')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/Cond0.txt b/java/java-tests/testData/psi/parser-partial/expressions/Cond0.txt
new file mode 100644
index 0000000..291ac31
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/Cond0.txt
@@ -0,0 +1,16 @@
+PsiJavaFile:Cond0.java
+  PsiConditionalExpression:cond ? true : false
+    PsiReferenceExpression:cond
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:cond('cond')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:QUEST('?')
+    PsiWhiteSpace(' ')
+    PsiLiteralExpression:true
+      PsiJavaToken:TRUE_KEYWORD('true')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:COLON(':')
+    PsiWhiteSpace(' ')
+    PsiLiteralExpression:false
+      PsiJavaToken:FALSE_KEYWORD('false')
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/Cond1.txt b/java/java-tests/testData/psi/parser-partial/expressions/Cond1.txt
new file mode 100644
index 0000000..544ddce
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/Cond1.txt
@@ -0,0 +1,10 @@
+PsiJavaFile:Cond1.java
+  PsiConditionalExpression:cond ?
+    PsiReferenceExpression:cond
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:cond('cond')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:QUEST('?')
+    PsiErrorElement:Expression expected
+      <empty list>
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/Cond2.txt b/java/java-tests/testData/psi/parser-partial/expressions/Cond2.txt
new file mode 100644
index 0000000..95e7e68
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/Cond2.txt
@@ -0,0 +1,13 @@
+PsiJavaFile:Cond2.java
+  PsiConditionalExpression:cond ? true
+    PsiReferenceExpression:cond
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:cond('cond')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:QUEST('?')
+    PsiWhiteSpace(' ')
+    PsiLiteralExpression:true
+      PsiJavaToken:TRUE_KEYWORD('true')
+    PsiErrorElement:':' expected
+      <empty list>
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/Cond3.txt b/java/java-tests/testData/psi/parser-partial/expressions/Cond3.txt
new file mode 100644
index 0000000..50f9d82
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/Cond3.txt
@@ -0,0 +1,15 @@
+PsiJavaFile:Cond3.java
+  PsiConditionalExpression:cond ? true :
+    PsiReferenceExpression:cond
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:cond('cond')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:QUEST('?')
+    PsiWhiteSpace(' ')
+    PsiLiteralExpression:true
+      PsiJavaToken:TRUE_KEYWORD('true')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:COLON(':')
+    PsiErrorElement:Expression expected
+      <empty list>
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/CondOr0.txt b/java/java-tests/testData/psi/parser-partial/expressions/CondOr0.txt
new file mode 100644
index 0000000..45df89d
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/CondOr0.txt
@@ -0,0 +1,20 @@
+PsiJavaFile:CondOr0.java
+  PsiPolyadicExpression: a || b || c
+    PsiReferenceExpression:a
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:a('a')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:OROR('||')
+    PsiWhiteSpace(' ')
+    PsiReferenceExpression:b
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:b('b')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:OROR('||')
+    PsiWhiteSpace(' ')
+    PsiReferenceExpression:c
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:c('c')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/CondOr1.txt b/java/java-tests/testData/psi/parser-partial/expressions/CondOr1.txt
new file mode 100644
index 0000000..fd17bd9
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/CondOr1.txt
@@ -0,0 +1,10 @@
+PsiJavaFile:CondOr1.java
+  PsiBinaryExpression:a ||
+    PsiReferenceExpression:a
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:a('a')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:OROR('||')
+    PsiErrorElement:Expression expected
+      <empty list>
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/ExprList0.txt b/java/java-tests/testData/psi/parser-partial/expressions/ExprList0.txt
new file mode 100644
index 0000000..19dfe39
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/ExprList0.txt
@@ -0,0 +1,14 @@
+PsiJavaFile:ExprList0.java
+  PsiMethodCallExpression:f(1,2)
+    PsiReferenceExpression:f
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:f('f')
+    PsiExpressionList
+      PsiJavaToken:LPARENTH('(')
+      PsiLiteralExpression:1
+        PsiJavaToken:INTEGER_LITERAL('1')
+      PsiJavaToken:COMMA(',')
+      PsiLiteralExpression:2
+        PsiJavaToken:INTEGER_LITERAL('2')
+      PsiJavaToken:RPARENTH(')')
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/ExprList1.txt b/java/java-tests/testData/psi/parser-partial/expressions/ExprList1.txt
new file mode 100644
index 0000000..1b27165
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/ExprList1.txt
@@ -0,0 +1,10 @@
+PsiJavaFile:ExprList1.java
+  PsiMethodCallExpression:f(
+    PsiReferenceExpression:f
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:f('f')
+    PsiExpressionList
+      PsiJavaToken:LPARENTH('(')
+      PsiErrorElement:')' expected
+        <empty list>
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/ExprList2.txt b/java/java-tests/testData/psi/parser-partial/expressions/ExprList2.txt
new file mode 100644
index 0000000..ac5a13b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/ExprList2.txt
@@ -0,0 +1,12 @@
+PsiJavaFile:ExprList2.java
+  PsiMethodCallExpression:f(1
+    PsiReferenceExpression:f
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:f('f')
+    PsiExpressionList
+      PsiJavaToken:LPARENTH('(')
+      PsiLiteralExpression:1
+        PsiJavaToken:INTEGER_LITERAL('1')
+      PsiErrorElement:')' expected
+        <empty list>
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/ExprList3.txt b/java/java-tests/testData/psi/parser-partial/expressions/ExprList3.txt
new file mode 100644
index 0000000..8ab3cbd
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/ExprList3.txt
@@ -0,0 +1,17 @@
+PsiJavaFile:ExprList3.java
+  PsiMethodCallExpression:f(1,
+    PsiReferenceExpression:f
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:f('f')
+    PsiExpressionList
+      PsiJavaToken:LPARENTH('(')
+      PsiLiteralExpression:1
+        PsiJavaToken:INTEGER_LITERAL('1')
+      PsiJavaToken:COMMA(',')
+      PsiErrorElement:Expression expected
+        <empty list>
+      PsiExpression(empty)
+        <empty list>
+      PsiErrorElement:')' expected
+        <empty list>
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/ExprList4.txt b/java/java-tests/testData/psi/parser-partial/expressions/ExprList4.txt
new file mode 100644
index 0000000..0f1d533
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/ExprList4.txt
@@ -0,0 +1,16 @@
+PsiJavaFile:ExprList4.java
+  PsiMethodCallExpression:f(1,)
+    PsiReferenceExpression:f
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:f('f')
+    PsiExpressionList
+      PsiJavaToken:LPARENTH('(')
+      PsiLiteralExpression:1
+        PsiJavaToken:INTEGER_LITERAL('1')
+      PsiJavaToken:COMMA(',')
+      PsiErrorElement:Expression expected
+        <empty list>
+      PsiExpression(empty)
+        <empty list>
+      PsiJavaToken:RPARENTH(')')
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/ExprList5.txt b/java/java-tests/testData/psi/parser-partial/expressions/ExprList5.txt
new file mode 100644
index 0000000..79db76b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/ExprList5.txt
@@ -0,0 +1,19 @@
+PsiJavaFile:ExprList5.java
+  PsiMethodCallExpression:f(1,,2)
+    PsiReferenceExpression:f
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:f('f')
+    PsiExpressionList
+      PsiJavaToken:LPARENTH('(')
+      PsiLiteralExpression:1
+        PsiJavaToken:INTEGER_LITERAL('1')
+      PsiJavaToken:COMMA(',')
+      PsiErrorElement:Expression expected
+        <empty list>
+      PsiExpression(empty)
+        <empty list>
+      PsiJavaToken:COMMA(',')
+      PsiLiteralExpression:2
+        PsiJavaToken:INTEGER_LITERAL('2')
+      PsiJavaToken:RPARENTH(')')
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/ExprList6.txt b/java/java-tests/testData/psi/parser-partial/expressions/ExprList6.txt
new file mode 100644
index 0000000..4afa082
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/ExprList6.txt
@@ -0,0 +1,16 @@
+PsiJavaFile:ExprList6.java
+  PsiMethodCallExpression:f(,2)
+    PsiReferenceExpression:f
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:f('f')
+    PsiExpressionList
+      PsiJavaToken:LPARENTH('(')
+      PsiErrorElement:Expression expected
+        <empty list>
+      PsiExpression(empty)
+        <empty list>
+      PsiJavaToken:COMMA(',')
+      PsiLiteralExpression:2
+        PsiJavaToken:INTEGER_LITERAL('2')
+      PsiJavaToken:RPARENTH(')')
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/GE0.txt b/java/java-tests/testData/psi/parser-partial/expressions/GE0.txt
new file mode 100644
index 0000000..2445ed2
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/GE0.txt
@@ -0,0 +1,17 @@
+PsiJavaFile:GE0.java
+  PsiAssignmentExpression:x >>>= 8 >> 2
+    PsiReferenceExpression:x
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:x('x')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:GTGTGTEQ('>>>=')
+    PsiWhiteSpace(' ')
+    PsiBinaryExpression:8 >> 2
+      PsiLiteralExpression:8
+        PsiJavaToken:INTEGER_LITERAL('8')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:GTGT('>>')
+      PsiWhiteSpace(' ')
+      PsiLiteralExpression:2
+        PsiJavaToken:INTEGER_LITERAL('2')
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/GE1.txt b/java/java-tests/testData/psi/parser-partial/expressions/GE1.txt
new file mode 100644
index 0000000..f931b4e
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/GE1.txt
@@ -0,0 +1,11 @@
+PsiJavaFile:GE1.java
+  PsiBinaryExpression:x >= 2
+    PsiReferenceExpression:x
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:x('x')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:GE('>=')
+    PsiWhiteSpace(' ')
+    PsiLiteralExpression:2
+      PsiJavaToken:INTEGER_LITERAL('2')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/IllegalBound.txt b/java/java-tests/testData/psi/parser-partial/expressions/IllegalBound.txt
new file mode 100644
index 0000000..6799e37
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/IllegalBound.txt
@@ -0,0 +1,28 @@
+PsiJavaFile:IllegalBound.java
+  PsiMethodCallExpression:C.<T extends S>foo()
+    PsiReferenceExpression:C.<T extends S>foo
+      PsiReferenceExpression:C
+        PsiReferenceParameterList
+          <empty list>
+        PsiIdentifier:C('C')
+      PsiJavaToken:DOT('.')
+      PsiReferenceParameterList
+        PsiJavaToken:LT('<')
+        PsiTypeElement:T
+          PsiJavaCodeReferenceElement:T
+            PsiIdentifier:T('T')
+            PsiReferenceParameterList
+              <empty list>
+        PsiWhiteSpace(' ')
+        PsiErrorElement:Unexpected bound
+          PsiKeyword:extends('extends')
+          PsiWhiteSpace(' ')
+          PsiJavaCodeReferenceElement:S
+            PsiIdentifier:S('S')
+            PsiReferenceParameterList
+              <empty list>
+        PsiJavaToken:GT('>')
+      PsiIdentifier:foo('foo')
+    PsiExpressionList
+      PsiJavaToken:LPARENTH('(')
+      PsiJavaToken:RPARENTH(')')
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/IllegalWildcard.txt b/java/java-tests/testData/psi/parser-partial/expressions/IllegalWildcard.txt
new file mode 100644
index 0000000..6dc2207
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/IllegalWildcard.txt
@@ -0,0 +1,17 @@
+PsiJavaFile:IllegalWildcard.java
+  PsiMethodCallExpression:this.<?>foo()
+    PsiReferenceExpression:this.<?>foo
+      PsiThisExpression:this
+        PsiReferenceParameterList
+          <empty list>
+        PsiKeyword:this('this')
+      PsiJavaToken:DOT('.')
+      PsiReferenceParameterList
+        PsiJavaToken:LT('<')
+        PsiErrorElement:Unexpected wildcard
+          PsiJavaToken:QUEST('?')
+        PsiJavaToken:GT('>')
+      PsiIdentifier:foo('foo')
+    PsiExpressionList
+      PsiJavaToken:LPARENTH('(')
+      PsiJavaToken:RPARENTH(')')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/IncompleteCast.txt b/java/java-tests/testData/psi/parser-partial/expressions/IncompleteCast.txt
new file mode 100644
index 0000000..5346de1
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/IncompleteCast.txt
@@ -0,0 +1,26 @@
+PsiJavaFile:IncompleteCast.java
+  PsiMethodCallExpression:f((ArrayList<String>) )
+    PsiReferenceExpression:f
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:f('f')
+    PsiExpressionList
+      PsiJavaToken:LPARENTH('(')
+      PsiTypeCastExpression:(ArrayList<String>)
+        PsiJavaToken:LPARENTH('(')
+        PsiTypeElement:ArrayList<String>
+          PsiJavaCodeReferenceElement:ArrayList<String>
+            PsiIdentifier:ArrayList('ArrayList')
+            PsiReferenceParameterList
+              PsiJavaToken:LT('<')
+              PsiTypeElement:String
+                PsiJavaCodeReferenceElement:String
+                  PsiIdentifier:String('String')
+                  PsiReferenceParameterList
+                    <empty list>
+              PsiJavaToken:GT('>')
+        PsiJavaToken:RPARENTH(')')
+        PsiErrorElement:Expression expected
+          <empty list>
+      PsiWhiteSpace(' ')
+      PsiJavaToken:RPARENTH(')')
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/InstanceOf0.txt b/java/java-tests/testData/psi/parser-partial/expressions/InstanceOf0.txt
new file mode 100644
index 0000000..02bbba1
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/InstanceOf0.txt
@@ -0,0 +1,14 @@
+PsiJavaFile:InstanceOf0.java
+  PsiInstanceofExpression:a instanceof String
+    PsiReferenceExpression:a
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:a('a')
+    PsiWhiteSpace(' ')
+    PsiKeyword:instanceof('instanceof')
+    PsiWhiteSpace(' ')
+    PsiTypeElement:String
+      PsiJavaCodeReferenceElement:String
+        PsiIdentifier:String('String')
+        PsiReferenceParameterList
+          <empty list>
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/InstanceOf1.txt b/java/java-tests/testData/psi/parser-partial/expressions/InstanceOf1.txt
new file mode 100644
index 0000000..42ac3f1
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/InstanceOf1.txt
@@ -0,0 +1,10 @@
+PsiJavaFile:InstanceOf1.java
+  PsiInstanceofExpression:a instanceof
+    PsiReferenceExpression:a
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:a('a')
+    PsiWhiteSpace(' ')
+    PsiKeyword:instanceof('instanceof')
+    PsiErrorElement:Type expected
+      <empty list>
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression0.txt b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression0.txt
new file mode 100644
index 0000000..36d08ea
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression0.txt
@@ -0,0 +1,12 @@
+PsiJavaFile:LambdaExpression0.java
+  PsiLambdaExpression:p -> 42
+    PsiParameterList:p
+      PsiParameter:p
+        PsiModifierList:
+          <empty list>
+        PsiIdentifier:p('p')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:ARROW('->')
+    PsiWhiteSpace(' ')
+    PsiLiteralExpression:42
+      PsiJavaToken:INTEGER_LITERAL('42')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression1.txt b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression1.txt
new file mode 100644
index 0000000..8a7190f
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression1.txt
@@ -0,0 +1,12 @@
+PsiJavaFile:LambdaExpression1.java
+  PsiLambdaExpression:p ->
+    PsiParameterList:p
+      PsiParameter:p
+        PsiModifierList:
+          <empty list>
+        PsiIdentifier:p('p')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:ARROW('->')
+    PsiErrorElement:'{' expected
+      <empty list>
+  PsiWhiteSpace(' ')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression10.txt b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression10.txt
new file mode 100644
index 0000000..fd56370
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression10.txt
@@ -0,0 +1,23 @@
+PsiJavaFile:LambdaExpression10.java
+  PsiTypeCastExpression:(I)(p -> null)
+    PsiJavaToken:LPARENTH('(')
+    PsiTypeElement:I
+      PsiJavaCodeReferenceElement:I
+        PsiIdentifier:I('I')
+        PsiReferenceParameterList
+          <empty list>
+    PsiJavaToken:RPARENTH(')')
+    PsiParenthesizedExpression:(p -> null)
+      PsiJavaToken:LPARENTH('(')
+      PsiLambdaExpression:p -> null
+        PsiParameterList:p
+          PsiParameter:p
+            PsiModifierList:
+              <empty list>
+            PsiIdentifier:p('p')
+        PsiWhiteSpace(' ')
+        PsiJavaToken:ARROW('->')
+        PsiWhiteSpace(' ')
+        PsiLiteralExpression:null
+          PsiJavaToken:NULL_KEYWORD('null')
+      PsiJavaToken:RPARENTH(')')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression11.txt b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression11.txt
new file mode 100644
index 0000000..2aa1ced
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression11.txt
@@ -0,0 +1,12 @@
+PsiJavaFile:LambdaExpression11.java
+  PsiLambdaExpression:() -> { }
+    PsiParameterList:()
+      PsiJavaToken:LPARENTH('(')
+      PsiJavaToken:RPARENTH(')')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:ARROW('->')
+    PsiWhiteSpace(' ')
+    PsiCodeBlock
+      PsiJavaToken:LBRACE('{')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression12.txt b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression12.txt
new file mode 100644
index 0000000..8230bc7
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression12.txt
@@ -0,0 +1,28 @@
+PsiJavaFile:LambdaExpression12.java
+  PsiTypeCastExpression:(I1 & I2) () -> null
+    PsiJavaToken:LPARENTH('(')
+    PsiTypeElement:I1 & I2
+      PsiTypeElement:I1
+        PsiJavaCodeReferenceElement:I1
+          PsiIdentifier:I1('I1')
+          PsiReferenceParameterList
+            <empty list>
+      PsiWhiteSpace(' ')
+      PsiJavaToken:AND('&')
+      PsiWhiteSpace(' ')
+      PsiTypeElement:I2
+        PsiJavaCodeReferenceElement:I2
+          PsiIdentifier:I2('I2')
+          PsiReferenceParameterList
+            <empty list>
+    PsiJavaToken:RPARENTH(')')
+    PsiWhiteSpace(' ')
+    PsiLambdaExpression:() -> null
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:ARROW('->')
+      PsiWhiteSpace(' ')
+      PsiLiteralExpression:null
+        PsiJavaToken:NULL_KEYWORD('null')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression13.txt b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression13.txt
new file mode 100644
index 0000000..6d35749
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression13.txt
@@ -0,0 +1,29 @@
+PsiJavaFile:LambdaExpression13.java
+  PsiTypeCastExpression:(I1 & I2) () -> {}
+    PsiJavaToken:LPARENTH('(')
+    PsiTypeElement:I1 & I2
+      PsiTypeElement:I1
+        PsiJavaCodeReferenceElement:I1
+          PsiIdentifier:I1('I1')
+          PsiReferenceParameterList
+            <empty list>
+      PsiWhiteSpace(' ')
+      PsiJavaToken:AND('&')
+      PsiWhiteSpace(' ')
+      PsiTypeElement:I2
+        PsiJavaCodeReferenceElement:I2
+          PsiIdentifier:I2('I2')
+          PsiReferenceParameterList
+            <empty list>
+    PsiJavaToken:RPARENTH(')')
+    PsiWhiteSpace(' ')
+    PsiLambdaExpression:() -> {}
+      PsiParameterList:()
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:ARROW('->')
+      PsiWhiteSpace(' ')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression14.txt b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression14.txt
new file mode 100644
index 0000000..f93a01e
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression14.txt
@@ -0,0 +1,22 @@
+PsiJavaFile:LambdaExpression14.java
+  PsiLambdaExpression:(String t) -> t
+    PsiParameterList:(String t)
+      PsiJavaToken:LPARENTH('(')
+      PsiParameter:t
+        PsiModifierList:
+          <empty list>
+        PsiTypeElement:String
+          PsiJavaCodeReferenceElement:String
+            PsiIdentifier:String('String')
+            PsiReferenceParameterList
+              <empty list>
+        PsiWhiteSpace(' ')
+        PsiIdentifier:t('t')
+      PsiJavaToken:RPARENTH(')')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:ARROW('->')
+    PsiWhiteSpace(' ')
+    PsiReferenceExpression:t
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:t('t')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression15.txt b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression15.txt
new file mode 100644
index 0000000..2823066
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression15.txt
@@ -0,0 +1,36 @@
+PsiJavaFile:LambdaExpression15.java
+  PsiLambdaExpression:(int a, int b) -> a + b
+    PsiParameterList:(int a, int b)
+      PsiJavaToken:LPARENTH('(')
+      PsiParameter:a
+        PsiModifierList:
+          <empty list>
+        PsiTypeElement:int
+          PsiKeyword:int('int')
+        PsiWhiteSpace(' ')
+        PsiIdentifier:a('a')
+      PsiJavaToken:COMMA(',')
+      PsiWhiteSpace(' ')
+      PsiParameter:b
+        PsiModifierList:
+          <empty list>
+        PsiTypeElement:int
+          PsiKeyword:int('int')
+        PsiWhiteSpace(' ')
+        PsiIdentifier:b('b')
+      PsiJavaToken:RPARENTH(')')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:ARROW('->')
+    PsiWhiteSpace(' ')
+    PsiBinaryExpression:a + b
+      PsiReferenceExpression:a
+        PsiReferenceParameterList
+          <empty list>
+        PsiIdentifier:a('a')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:PLUS('+')
+      PsiWhiteSpace(' ')
+      PsiReferenceExpression:b
+        PsiReferenceParameterList
+          <empty list>
+        PsiIdentifier:b('b')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression16.txt b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression16.txt
new file mode 100644
index 0000000..e9b7461
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression16.txt
@@ -0,0 +1,20 @@
+PsiJavaFile:LambdaExpression16.java
+  PsiLambdaExpression:(final int x) -> x
+    PsiParameterList:(final int x)
+      PsiJavaToken:LPARENTH('(')
+      PsiParameter:x
+        PsiModifierList:final
+          PsiKeyword:final('final')
+        PsiWhiteSpace(' ')
+        PsiTypeElement:int
+          PsiKeyword:int('int')
+        PsiWhiteSpace(' ')
+        PsiIdentifier:x('x')
+      PsiJavaToken:RPARENTH(')')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:ARROW('->')
+    PsiWhiteSpace(' ')
+    PsiReferenceExpression:x
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:x('x')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression17.txt b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression17.txt
new file mode 100644
index 0000000..60be51f
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression17.txt
@@ -0,0 +1,23 @@
+PsiJavaFile:LambdaExpression17.java
+  PsiLambdaExpression:(String s -> s
+    PsiParameterList:(String s
+      PsiJavaToken:LPARENTH('(')
+      PsiParameter:s
+        PsiModifierList:
+          <empty list>
+        PsiTypeElement:String
+          PsiJavaCodeReferenceElement:String
+            PsiIdentifier:String('String')
+            PsiReferenceParameterList
+              <empty list>
+        PsiWhiteSpace(' ')
+        PsiIdentifier:s('s')
+      PsiErrorElement:')' expected
+        <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:ARROW('->')
+    PsiWhiteSpace(' ')
+    PsiReferenceExpression:s
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:s('s')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression18.txt b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression18.txt
new file mode 100644
index 0000000..596bf1b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression18.txt
@@ -0,0 +1,34 @@
+PsiJavaFile:LambdaExpression18.java
+  PsiLambdaExpression:(java.lang.String s, -> s
+    PsiParameterList:(java.lang.String s,
+      PsiJavaToken:LPARENTH('(')
+      PsiParameter:s
+        PsiModifierList:
+          <empty list>
+        PsiTypeElement:java.lang.String
+          PsiJavaCodeReferenceElement:java.lang.String
+            PsiJavaCodeReferenceElement:java.lang
+              PsiJavaCodeReferenceElement:java
+                PsiIdentifier:java('java')
+                PsiReferenceParameterList
+                  <empty list>
+              PsiJavaToken:DOT('.')
+              PsiIdentifier:lang('lang')
+              PsiReferenceParameterList
+                <empty list>
+            PsiJavaToken:DOT('.')
+            PsiIdentifier:String('String')
+            PsiReferenceParameterList
+              <empty list>
+        PsiWhiteSpace(' ')
+        PsiIdentifier:s('s')
+      PsiJavaToken:COMMA(',')
+      PsiErrorElement:Parameter expected
+        <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:ARROW('->')
+    PsiWhiteSpace(' ')
+    PsiReferenceExpression:s
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:s('s')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression19.txt b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression19.txt
new file mode 100644
index 0000000..d76c39b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression19.txt
@@ -0,0 +1,31 @@
+PsiJavaFile:LambdaExpression19.java
+  PsiLambdaExpression:(@A T t) -> (null)
+    PsiParameterList:(@A T t)
+      PsiJavaToken:LPARENTH('(')
+      PsiParameter:t
+        PsiModifierList:@A
+          PsiAnnotation
+            PsiJavaToken:AT('@')
+            PsiJavaCodeReferenceElement:A
+              PsiIdentifier:A('A')
+              PsiReferenceParameterList
+                <empty list>
+            PsiAnnotationParameterList
+              <empty list>
+        PsiWhiteSpace(' ')
+        PsiTypeElement:T
+          PsiJavaCodeReferenceElement:T
+            PsiIdentifier:T('T')
+            PsiReferenceParameterList
+              <empty list>
+        PsiWhiteSpace(' ')
+        PsiIdentifier:t('t')
+      PsiJavaToken:RPARENTH(')')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:ARROW('->')
+    PsiWhiteSpace(' ')
+    PsiParenthesizedExpression:(null)
+      PsiJavaToken:LPARENTH('(')
+      PsiLiteralExpression:null
+        PsiJavaToken:NULL_KEYWORD('null')
+      PsiJavaToken:RPARENTH(')')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression2.txt b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression2.txt
new file mode 100644
index 0000000..f4e8981
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression2.txt
@@ -0,0 +1,14 @@
+PsiJavaFile:LambdaExpression2.java
+  PsiLambdaExpression:p -> {
+    PsiParameterList:p
+      PsiParameter:p
+        PsiModifierList:
+          <empty list>
+        PsiIdentifier:p('p')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:ARROW('->')
+    PsiWhiteSpace(' ')
+    PsiCodeBlock
+      PsiJavaToken:LBRACE('{')
+      PsiErrorElement:'}' expected
+        <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression3.txt b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression3.txt
new file mode 100644
index 0000000..f03f0eec
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression3.txt
@@ -0,0 +1,16 @@
+PsiJavaFile:LambdaExpression3.java
+  PsiLambdaExpression:(p) -> { }
+    PsiParameterList:(p)
+      PsiJavaToken:LPARENTH('(')
+      PsiParameter:p
+        PsiModifierList:
+          <empty list>
+        PsiIdentifier:p('p')
+      PsiJavaToken:RPARENTH(')')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:ARROW('->')
+    PsiWhiteSpace(' ')
+    PsiCodeBlock
+      PsiJavaToken:LBRACE('{')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression4.txt b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression4.txt
new file mode 100644
index 0000000..6550b7e
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression4.txt
@@ -0,0 +1,20 @@
+PsiJavaFile:LambdaExpression4.java
+  PsiLambdaExpression:(p, v) -> null
+    PsiParameterList:(p, v)
+      PsiJavaToken:LPARENTH('(')
+      PsiParameter:p
+        PsiModifierList:
+          <empty list>
+        PsiIdentifier:p('p')
+      PsiJavaToken:COMMA(',')
+      PsiWhiteSpace(' ')
+      PsiParameter:v
+        PsiModifierList:
+          <empty list>
+        PsiIdentifier:v('v')
+      PsiJavaToken:RPARENTH(')')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:ARROW('->')
+    PsiWhiteSpace(' ')
+    PsiLiteralExpression:null
+      PsiJavaToken:NULL_KEYWORD('null')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression5.txt b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression5.txt
new file mode 100644
index 0000000..3df1648
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression5.txt
@@ -0,0 +1,21 @@
+PsiJavaFile:LambdaExpression5.java
+  PsiLambdaExpression:(p, v -> null
+    PsiParameterList:(p, v
+      PsiJavaToken:LPARENTH('(')
+      PsiParameter:p
+        PsiModifierList:
+          <empty list>
+        PsiIdentifier:p('p')
+      PsiJavaToken:COMMA(',')
+      PsiWhiteSpace(' ')
+      PsiParameter:v
+        PsiModifierList:
+          <empty list>
+        PsiIdentifier:v('v')
+      PsiErrorElement:')' expected
+        <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:ARROW('->')
+    PsiWhiteSpace(' ')
+    PsiLiteralExpression:null
+      PsiJavaToken:NULL_KEYWORD('null')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression6.txt b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression6.txt
new file mode 100644
index 0000000..ac3ac61
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression6.txt
@@ -0,0 +1,22 @@
+PsiJavaFile:LambdaExpression6.java
+  PsiLambdaExpression:(p, v, -> null
+    PsiParameterList:(p, v,
+      PsiJavaToken:LPARENTH('(')
+      PsiParameter:p
+        PsiModifierList:
+          <empty list>
+        PsiIdentifier:p('p')
+      PsiJavaToken:COMMA(',')
+      PsiWhiteSpace(' ')
+      PsiParameter:v
+        PsiModifierList:
+          <empty list>
+        PsiIdentifier:v('v')
+      PsiJavaToken:COMMA(',')
+      PsiErrorElement:Parameter expected
+        <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:ARROW('->')
+    PsiWhiteSpace(' ')
+    PsiLiteralExpression:null
+      PsiJavaToken:NULL_KEYWORD('null')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression7.txt b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression7.txt
new file mode 100644
index 0000000..96eb3ce
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression7.txt
@@ -0,0 +1,15 @@
+PsiJavaFile:LambdaExpression7.java
+  PsiParenthesizedExpression:(p -> null)
+    PsiJavaToken:LPARENTH('(')
+    PsiLambdaExpression:p -> null
+      PsiParameterList:p
+        PsiParameter:p
+          PsiModifierList:
+            <empty list>
+          PsiIdentifier:p('p')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:ARROW('->')
+      PsiWhiteSpace(' ')
+      PsiLiteralExpression:null
+        PsiJavaToken:NULL_KEYWORD('null')
+    PsiJavaToken:RPARENTH(')')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression8.txt b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression8.txt
new file mode 100644
index 0000000..daf6a02
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression8.txt
@@ -0,0 +1,22 @@
+PsiJavaFile:LambdaExpression8.java
+  PsiTypeCastExpression:(I)(p) -> null
+    PsiJavaToken:LPARENTH('(')
+    PsiTypeElement:I
+      PsiJavaCodeReferenceElement:I
+        PsiIdentifier:I('I')
+        PsiReferenceParameterList
+          <empty list>
+    PsiJavaToken:RPARENTH(')')
+    PsiLambdaExpression:(p) -> null
+      PsiParameterList:(p)
+        PsiJavaToken:LPARENTH('(')
+        PsiParameter:p
+          PsiModifierList:
+            <empty list>
+          PsiIdentifier:p('p')
+        PsiJavaToken:RPARENTH(')')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:ARROW('->')
+      PsiWhiteSpace(' ')
+      PsiLiteralExpression:null
+        PsiJavaToken:NULL_KEYWORD('null')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression9.txt b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression9.txt
new file mode 100644
index 0000000..10ac4a9
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression9.txt
@@ -0,0 +1,20 @@
+PsiJavaFile:LambdaExpression9.java
+  PsiTypeCastExpression:(I)p -> null
+    PsiJavaToken:LPARENTH('(')
+    PsiTypeElement:I
+      PsiJavaCodeReferenceElement:I
+        PsiIdentifier:I('I')
+        PsiReferenceParameterList
+          <empty list>
+    PsiJavaToken:RPARENTH(')')
+    PsiLambdaExpression:p -> null
+      PsiParameterList:p
+        PsiParameter:p
+          PsiModifierList:
+            <empty list>
+          PsiIdentifier:p('p')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:ARROW('->')
+      PsiWhiteSpace(' ')
+      PsiLiteralExpression:null
+        PsiJavaToken:NULL_KEYWORD('null')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/MethodRef0.txt b/java/java-tests/testData/psi/parser-partial/expressions/MethodRef0.txt
new file mode 100644
index 0000000..28d943e
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/MethodRef0.txt
@@ -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')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/MethodRef1.txt b/java/java-tests/testData/psi/parser-partial/expressions/MethodRef1.txt
new file mode 100644
index 0000000..16de47b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/MethodRef1.txt
@@ -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')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/MethodRef2.txt b/java/java-tests/testData/psi/parser-partial/expressions/MethodRef2.txt
new file mode 100644
index 0000000..3763aa5
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/MethodRef2.txt
@@ -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')
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/MethodRef3.txt b/java/java-tests/testData/psi/parser-partial/expressions/MethodRef3.txt
new file mode 100644
index 0000000..f13cc34
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/MethodRef3.txt
@@ -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')
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/MethodRef4.txt b/java/java-tests/testData/psi/parser-partial/expressions/MethodRef4.txt
new file mode 100644
index 0000000..31cf24b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/MethodRef4.txt
@@ -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')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/MethodRef5.txt b/java/java-tests/testData/psi/parser-partial/expressions/MethodRef5.txt
new file mode 100644
index 0000000..4a82070
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/MethodRef5.txt
@@ -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')
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/New0.txt b/java/java-tests/testData/psi/parser-partial/expressions/New0.txt
new file mode 100644
index 0000000..cef9e9c
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/New0.txt
@@ -0,0 +1,13 @@
+PsiJavaFile:New0.java
+  PsiNewExpression:new A()
+    PsiKeyword:new('new')
+    PsiReferenceParameterList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaCodeReferenceElement:A
+      PsiIdentifier:A('A')
+      PsiReferenceParameterList
+        <empty list>
+    PsiExpressionList
+      PsiJavaToken:LPARENTH('(')
+      PsiJavaToken:RPARENTH(')')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/New1.txt b/java/java-tests/testData/psi/parser-partial/expressions/New1.txt
new file mode 100644
index 0000000..76aa9b7
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/New1.txt
@@ -0,0 +1,16 @@
+PsiJavaFile:New1.java
+  PsiNewExpression:new A[1][]
+    PsiKeyword:new('new')
+    PsiReferenceParameterList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaCodeReferenceElement:A
+      PsiIdentifier:A('A')
+      PsiReferenceParameterList
+        <empty list>
+    PsiJavaToken:LBRACKET('[')
+    PsiLiteralExpression:1
+      PsiJavaToken:INTEGER_LITERAL('1')
+    PsiJavaToken:RBRACKET(']')
+    PsiJavaToken:LBRACKET('[')
+    PsiJavaToken:RBRACKET(']')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/New10.txt b/java/java-tests/testData/psi/parser-partial/expressions/New10.txt
new file mode 100644
index 0000000..b720658
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/New10.txt
@@ -0,0 +1,12 @@
+PsiJavaFile:New10.java
+  PsiNewExpression:new int
+    PsiKeyword:new('new')
+    PsiReferenceParameterList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiKeyword:int('int')
+    PsiErrorElement:'[' expected
+      <empty list>
+  PsiErrorElement:Unparsed tokens
+    PsiJavaToken:LPARENTH('(')
+    PsiJavaToken:RPARENTH(')')
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/New11.txt b/java/java-tests/testData/psi/parser-partial/expressions/New11.txt
new file mode 100644
index 0000000..59a4685b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/New11.txt
@@ -0,0 +1,15 @@
+PsiJavaFile:New11.java
+  PsiNewExpression:new String[0
+    PsiKeyword:new('new')
+    PsiReferenceParameterList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaCodeReferenceElement:String
+      PsiIdentifier:String('String')
+      PsiReferenceParameterList
+        <empty list>
+    PsiJavaToken:LBRACKET('[')
+    PsiLiteralExpression:0
+      PsiJavaToken:INTEGER_LITERAL('0')
+    PsiErrorElement:']' expected
+      <empty list>
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/New12.txt b/java/java-tests/testData/psi/parser-partial/expressions/New12.txt
new file mode 100644
index 0000000..b0e669ac
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/New12.txt
@@ -0,0 +1,15 @@
+PsiJavaFile:New12.java
+  PsiNewExpression:new int[1][2]
+    PsiKeyword:new('new')
+    PsiReferenceParameterList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiKeyword:int('int')
+    PsiJavaToken:LBRACKET('[')
+    PsiLiteralExpression:1
+      PsiJavaToken:INTEGER_LITERAL('1')
+    PsiJavaToken:RBRACKET(']')
+    PsiJavaToken:LBRACKET('[')
+    PsiLiteralExpression:2
+      PsiJavaToken:INTEGER_LITERAL('2')
+    PsiJavaToken:RBRACKET(']')
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/New13.txt b/java/java-tests/testData/psi/parser-partial/expressions/New13.txt
new file mode 100644
index 0000000..c00cca2
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/New13.txt
@@ -0,0 +1,19 @@
+PsiJavaFile:New13.java
+  PsiNewExpression:new int[1][][
+    PsiKeyword:new('new')
+    PsiReferenceParameterList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiKeyword:int('int')
+    PsiJavaToken:LBRACKET('[')
+    PsiLiteralExpression:1
+      PsiJavaToken:INTEGER_LITERAL('1')
+    PsiJavaToken:RBRACKET(']')
+    PsiJavaToken:LBRACKET('[')
+    PsiJavaToken:RBRACKET(']')
+    PsiJavaToken:LBRACKET('[')
+    PsiErrorElement:']' expected
+      <empty list>
+  PsiErrorElement:Unparsed tokens
+    PsiJavaToken:INTEGER_LITERAL('2')
+    PsiJavaToken:RBRACKET(']')
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/New14.txt b/java/java-tests/testData/psi/parser-partial/expressions/New14.txt
new file mode 100644
index 0000000..9761d79
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/New14.txt
@@ -0,0 +1,18 @@
+PsiJavaFile:New14.java
+  PsiNewExpression:Q.new A()
+    PsiReferenceExpression:Q
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:Q('Q')
+    PsiJavaToken:DOT('.')
+    PsiKeyword:new('new')
+    PsiReferenceParameterList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaCodeReferenceElement:A
+      PsiIdentifier:A('A')
+      PsiReferenceParameterList
+        <empty list>
+    PsiExpressionList
+      PsiJavaToken:LPARENTH('(')
+      PsiJavaToken:RPARENTH(')')
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/New15.txt b/java/java-tests/testData/psi/parser-partial/expressions/New15.txt
new file mode 100644
index 0000000..2a1cea3
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/New15.txt
@@ -0,0 +1,21 @@
+PsiJavaFile:New15.java
+  PsiNewExpression:new C<?>.B()
+    PsiKeyword:new('new')
+    PsiReferenceParameterList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaCodeReferenceElement:C<?>.B
+      PsiJavaCodeReferenceElement:C<?>
+        PsiIdentifier:C('C')
+        PsiReferenceParameterList
+          PsiJavaToken:LT('<')
+          PsiTypeElement:?
+            PsiJavaToken:QUEST('?')
+          PsiJavaToken:GT('>')
+      PsiJavaToken:DOT('.')
+      PsiIdentifier:B('B')
+      PsiReferenceParameterList
+        <empty list>
+    PsiExpressionList
+      PsiJavaToken:LPARENTH('(')
+      PsiJavaToken:RPARENTH(')')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/New16.txt b/java/java-tests/testData/psi/parser-partial/expressions/New16.txt
new file mode 100644
index 0000000..10be0b2
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/New16.txt
@@ -0,0 +1,17 @@
+PsiJavaFile:New16.java
+  PsiNewExpression:new C<>()
+    PsiKeyword:new('new')
+    PsiReferenceParameterList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaCodeReferenceElement:C<>
+      PsiIdentifier:C('C')
+      PsiReferenceParameterList
+        PsiJavaToken:LT('<')
+        PsiTypeElement:
+          PsiTypeElement:DIAMOND
+            <empty list>
+        PsiJavaToken:GT('>')
+    PsiExpressionList
+      PsiJavaToken:LPARENTH('(')
+      PsiJavaToken:RPARENTH(')')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/New2.txt b/java/java-tests/testData/psi/parser-partial/expressions/New2.txt
new file mode 100644
index 0000000..f5b075d
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/New2.txt
@@ -0,0 +1,14 @@
+PsiJavaFile:New2.java
+  PsiNewExpression:new A[]
+    PsiKeyword:new('new')
+    PsiReferenceParameterList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaCodeReferenceElement:A
+      PsiIdentifier:A('A')
+      PsiReferenceParameterList
+        <empty list>
+    PsiJavaToken:LBRACKET('[')
+    PsiJavaToken:RBRACKET(']')
+    PsiErrorElement:Array initializer expected
+      <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/New3.txt b/java/java-tests/testData/psi/parser-partial/expressions/New3.txt
new file mode 100644
index 0000000..e545cdb
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/New3.txt
@@ -0,0 +1,18 @@
+PsiJavaFile:New3.java
+  PsiNewExpression:new A[][
+    PsiKeyword:new('new')
+    PsiReferenceParameterList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaCodeReferenceElement:A
+      PsiIdentifier:A('A')
+      PsiReferenceParameterList
+        <empty list>
+    PsiJavaToken:LBRACKET('[')
+    PsiJavaToken:RBRACKET(']')
+    PsiJavaToken:LBRACKET('[')
+    PsiErrorElement:']' expected
+      <empty list>
+  PsiErrorElement:Unparsed tokens
+    PsiJavaToken:INTEGER_LITERAL('1')
+    PsiJavaToken:RBRACKET(']')
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/New4.txt b/java/java-tests/testData/psi/parser-partial/expressions/New4.txt
new file mode 100644
index 0000000..a2ff51e
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/New4.txt
@@ -0,0 +1,19 @@
+PsiJavaFile:New4.java
+  PsiNewExpression:new A[][]{null}
+    PsiKeyword:new('new')
+    PsiReferenceParameterList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaCodeReferenceElement:A
+      PsiIdentifier:A('A')
+      PsiReferenceParameterList
+        <empty list>
+    PsiJavaToken:LBRACKET('[')
+    PsiJavaToken:RBRACKET(']')
+    PsiJavaToken:LBRACKET('[')
+    PsiJavaToken:RBRACKET(']')
+    PsiArrayInitializerExpression:{null}
+      PsiJavaToken:LBRACE('{')
+      PsiLiteralExpression:null
+        PsiJavaToken:NULL_KEYWORD('null')
+      PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/New5.txt b/java/java-tests/testData/psi/parser-partial/expressions/New5.txt
new file mode 100644
index 0000000..3770613
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/New5.txt
@@ -0,0 +1,18 @@
+PsiJavaFile:New5.java
+  PsiNewExpression:new A[1]
+    PsiKeyword:new('new')
+    PsiReferenceParameterList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaCodeReferenceElement:A
+      PsiIdentifier:A('A')
+      PsiReferenceParameterList
+        <empty list>
+    PsiJavaToken:LBRACKET('[')
+    PsiLiteralExpression:1
+      PsiJavaToken:INTEGER_LITERAL('1')
+    PsiJavaToken:RBRACKET(']')
+  PsiErrorElement:Unparsed tokens
+    PsiJavaToken:LBRACE('{')
+    PsiJavaToken:NULL_KEYWORD('null')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/New6.txt b/java/java-tests/testData/psi/parser-partial/expressions/New6.txt
new file mode 100644
index 0000000..d767c90
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/New6.txt
@@ -0,0 +1,7 @@
+PsiJavaFile:New6.java
+  PsiNewExpression:new
+    PsiKeyword:new('new')
+    PsiReferenceParameterList
+      <empty list>
+    PsiErrorElement:Identifier expected
+      <empty list>
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/New7.txt b/java/java-tests/testData/psi/parser-partial/expressions/New7.txt
new file mode 100644
index 0000000..85e4bb3
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/New7.txt
@@ -0,0 +1,12 @@
+PsiJavaFile:New7.java
+  PsiNewExpression:new A
+    PsiKeyword:new('new')
+    PsiReferenceParameterList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaCodeReferenceElement:A
+      PsiIdentifier:A('A')
+      PsiReferenceParameterList
+        <empty list>
+    PsiErrorElement:'(' or '[' expected
+      <empty list>
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/New8.txt b/java/java-tests/testData/psi/parser-partial/expressions/New8.txt
new file mode 100644
index 0000000..2a02fd4
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/New8.txt
@@ -0,0 +1,13 @@
+PsiJavaFile:New8.java
+  PsiNewExpression:new A[
+    PsiKeyword:new('new')
+    PsiReferenceParameterList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaCodeReferenceElement:A
+      PsiIdentifier:A('A')
+      PsiReferenceParameterList
+        <empty list>
+    PsiJavaToken:LBRACKET('[')
+    PsiErrorElement:']' expected
+      <empty list>
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/New9.txt b/java/java-tests/testData/psi/parser-partial/expressions/New9.txt
new file mode 100644
index 0000000..58ede5b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/New9.txt
@@ -0,0 +1,9 @@
+PsiJavaFile:New9.java
+  PsiNewExpression:new int
+    PsiKeyword:new('new')
+    PsiReferenceParameterList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiKeyword:int('int')
+    PsiErrorElement:'[' expected
+      <empty list>
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/NewInExprList.txt b/java/java-tests/testData/psi/parser-partial/expressions/NewInExprList.txt
new file mode 100644
index 0000000..49b9fb6
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/NewInExprList.txt
@@ -0,0 +1,15 @@
+PsiJavaFile:NewInExprList.java
+  PsiMethodCallExpression:call(new)
+    PsiReferenceExpression:call
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:call('call')
+    PsiExpressionList
+      PsiJavaToken:LPARENTH('(')
+      PsiNewExpression:new
+        PsiKeyword:new('new')
+        PsiReferenceParameterList
+          <empty list>
+        PsiErrorElement:Identifier expected
+          <empty list>
+      PsiJavaToken:RPARENTH(')')
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/Not0.txt b/java/java-tests/testData/psi/parser-partial/expressions/Not0.txt
new file mode 100644
index 0000000..6c6b6ca
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/Not0.txt
@@ -0,0 +1,9 @@
+PsiJavaFile:Not0.java
+  PsiPrefixExpression:!!a
+    PsiJavaToken:EXCL('!')
+    PsiPrefixExpression:!a
+      PsiJavaToken:EXCL('!')
+      PsiReferenceExpression:a
+        PsiReferenceParameterList
+          <empty list>
+        PsiIdentifier:a('a')
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/Not1.txt b/java/java-tests/testData/psi/parser-partial/expressions/Not1.txt
new file mode 100644
index 0000000..cad5dba
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/Not1.txt
@@ -0,0 +1,5 @@
+PsiJavaFile:Not1.java
+  PsiPrefixExpression:!
+    PsiJavaToken:EXCL('!')
+    PsiErrorElement:Expression expected
+      <empty list>
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/Or0.txt b/java/java-tests/testData/psi/parser-partial/expressions/Or0.txt
new file mode 100644
index 0000000..56cf4e0
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/Or0.txt
@@ -0,0 +1,20 @@
+PsiJavaFile:Or0.java
+  PsiPolyadicExpression: a | b | c
+    PsiReferenceExpression:a
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:a('a')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:OR('|')
+    PsiWhiteSpace(' ')
+    PsiReferenceExpression:b
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:b('b')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:OR('|')
+    PsiWhiteSpace(' ')
+    PsiReferenceExpression:c
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:c('c')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/Or1.txt b/java/java-tests/testData/psi/parser-partial/expressions/Or1.txt
new file mode 100644
index 0000000..68894eaa
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/Or1.txt
@@ -0,0 +1,10 @@
+PsiJavaFile:Or1.java
+  PsiBinaryExpression:a |
+    PsiReferenceExpression:a
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:a('a')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:OR('|')
+    PsiErrorElement:Expression expected
+      <empty list>
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/Parenth0.txt b/java/java-tests/testData/psi/parser-partial/expressions/Parenth0.txt
new file mode 100644
index 0000000..33befc6
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/Parenth0.txt
@@ -0,0 +1,8 @@
+PsiJavaFile:Parenth0.java
+  PsiParenthesizedExpression:(c)
+    PsiJavaToken:LPARENTH('(')
+    PsiReferenceExpression:c
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:c('c')
+    PsiJavaToken:RPARENTH(')')
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/Parenth1.txt b/java/java-tests/testData/psi/parser-partial/expressions/Parenth1.txt
new file mode 100644
index 0000000..ceefc93
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/Parenth1.txt
@@ -0,0 +1,15 @@
+PsiJavaFile:Parenth1.java
+  PsiPostfixExpression:(this).f--
+    PsiReferenceExpression:(this).f
+      PsiParenthesizedExpression:(this)
+        PsiJavaToken:LPARENTH('(')
+        PsiThisExpression:this
+          PsiReferenceParameterList
+            <empty list>
+          PsiKeyword:this('this')
+        PsiJavaToken:RPARENTH(')')
+      PsiJavaToken:DOT('.')
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:f('f')
+    PsiJavaToken:MINUSMINUS('--')
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/Parenth2.txt b/java/java-tests/testData/psi/parser-partial/expressions/Parenth2.txt
new file mode 100644
index 0000000..9a1a35b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/Parenth2.txt
@@ -0,0 +1,5 @@
+PsiJavaFile:Parenth2.java
+  PsiParenthesizedExpression:(
+    PsiJavaToken:LPARENTH('(')
+    PsiErrorElement:Expression expected
+      <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/Parenth3.txt b/java/java-tests/testData/psi/parser-partial/expressions/Parenth3.txt
new file mode 100644
index 0000000..786cbee
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/Parenth3.txt
@@ -0,0 +1,16 @@
+PsiJavaFile:Parenth3.java
+  PsiParenthesizedExpression:(a < b)
+    PsiJavaToken:LPARENTH('(')
+    PsiBinaryExpression:a < b
+      PsiReferenceExpression:a
+        PsiReferenceParameterList
+          <empty list>
+        PsiIdentifier:a('a')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:LT('<')
+      PsiWhiteSpace(' ')
+      PsiReferenceExpression:b
+        PsiReferenceParameterList
+          <empty list>
+        PsiIdentifier:b('b')
+    PsiJavaToken:RPARENTH(')')
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/PinesInReferenceExpression0.txt b/java/java-tests/testData/psi/parser-partial/expressions/PinesInReferenceExpression0.txt
new file mode 100644
index 0000000..b824ee1
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/PinesInReferenceExpression0.txt
@@ -0,0 +1,22 @@
+PsiJavaFile:PinesInReferenceExpression0.java
+  PsiMethodCallExpression:Collections.<String>sort(null)
+    PsiReferenceExpression:Collections.<String>sort
+      PsiReferenceExpression:Collections
+        PsiReferenceParameterList
+          <empty list>
+        PsiIdentifier:Collections('Collections')
+      PsiJavaToken:DOT('.')
+      PsiReferenceParameterList
+        PsiJavaToken:LT('<')
+        PsiTypeElement:String
+          PsiJavaCodeReferenceElement:String
+            PsiIdentifier:String('String')
+            PsiReferenceParameterList
+              <empty list>
+        PsiJavaToken:GT('>')
+      PsiIdentifier:sort('sort')
+    PsiExpressionList
+      PsiJavaToken:LPARENTH('(')
+      PsiLiteralExpression:null
+        PsiJavaToken:NULL_KEYWORD('null')
+      PsiJavaToken:RPARENTH(')')
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/PinesInReferenceExpression1.txt b/java/java-tests/testData/psi/parser-partial/expressions/PinesInReferenceExpression1.txt
new file mode 100644
index 0000000..5b821fd
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/PinesInReferenceExpression1.txt
@@ -0,0 +1,22 @@
+PsiJavaFile:PinesInReferenceExpression1.java
+  PsiMethodCallExpression:this.<String>sort(null)
+    PsiReferenceExpression:this.<String>sort
+      PsiThisExpression:this
+        PsiReferenceParameterList
+          <empty list>
+        PsiKeyword:this('this')
+      PsiJavaToken:DOT('.')
+      PsiReferenceParameterList
+        PsiJavaToken:LT('<')
+        PsiTypeElement:String
+          PsiJavaCodeReferenceElement:String
+            PsiIdentifier:String('String')
+            PsiReferenceParameterList
+              <empty list>
+        PsiJavaToken:GT('>')
+      PsiIdentifier:sort('sort')
+    PsiExpressionList
+      PsiJavaToken:LPARENTH('(')
+      PsiLiteralExpression:null
+        PsiJavaToken:NULL_KEYWORD('null')
+      PsiJavaToken:RPARENTH(')')
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/PinesInReferenceExpression2.txt b/java/java-tests/testData/psi/parser-partial/expressions/PinesInReferenceExpression2.txt
new file mode 100644
index 0000000..52b37d3
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/PinesInReferenceExpression2.txt
@@ -0,0 +1,17 @@
+PsiJavaFile:PinesInReferenceExpression2.java
+  PsiMethodCallExpression:<String>super(null)
+    PsiReferenceExpression:<String>super
+      PsiReferenceParameterList
+        PsiJavaToken:LT('<')
+        PsiTypeElement:String
+          PsiJavaCodeReferenceElement:String
+            PsiIdentifier:String('String')
+            PsiReferenceParameterList
+              <empty list>
+        PsiJavaToken:GT('>')
+      PsiKeyword:super('super')
+    PsiExpressionList
+      PsiJavaToken:LPARENTH('(')
+      PsiLiteralExpression:null
+        PsiJavaToken:NULL_KEYWORD('null')
+      PsiJavaToken:RPARENTH(')')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/PrimitiveClassObjectAccess.txt b/java/java-tests/testData/psi/parser-partial/expressions/PrimitiveClassObjectAccess.txt
new file mode 100644
index 0000000..d8bdbaf
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/PrimitiveClassObjectAccess.txt
@@ -0,0 +1,6 @@
+PsiJavaFile:PrimitiveClassObjectAccess.java
+  PsiClassObjectAccessExpression:int.class
+    PsiTypeElement:int
+      PsiKeyword:int('int')
+    PsiJavaToken:DOT('.')
+    PsiKeyword:class('class')
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/PrimitiveFieldAccess.txt b/java/java-tests/testData/psi/parser-partial/expressions/PrimitiveFieldAccess.txt
new file mode 100644
index 0000000..13e35ab
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/PrimitiveFieldAccess.txt
@@ -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')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/QualifiedSuperMethodCall0.txt b/java/java-tests/testData/psi/parser-partial/expressions/QualifiedSuperMethodCall0.txt
new file mode 100644
index 0000000..6b22700
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/QualifiedSuperMethodCall0.txt
@@ -0,0 +1,22 @@
+PsiJavaFile:QualifiedSuperMethodCall0.java
+  PsiMethodCallExpression:new D().super(0)
+    PsiReferenceExpression:new D().super
+      PsiNewExpression:new D()
+        PsiKeyword:new('new')
+        PsiReferenceParameterList
+          <empty list>
+        PsiWhiteSpace(' ')
+        PsiJavaCodeReferenceElement:D
+          PsiIdentifier:D('D')
+          PsiReferenceParameterList
+            <empty list>
+        PsiExpressionList
+          PsiJavaToken:LPARENTH('(')
+          PsiJavaToken:RPARENTH(')')
+      PsiJavaToken:DOT('.')
+      PsiKeyword:super('super')
+    PsiExpressionList
+      PsiJavaToken:LPARENTH('(')
+      PsiLiteralExpression:0
+        PsiJavaToken:INTEGER_LITERAL('0')
+      PsiJavaToken:RPARENTH(')')
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/QualifiedSuperMethodCall1.txt b/java/java-tests/testData/psi/parser-partial/expressions/QualifiedSuperMethodCall1.txt
new file mode 100644
index 0000000..c08eb71c
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/QualifiedSuperMethodCall1.txt
@@ -0,0 +1,14 @@
+PsiJavaFile:QualifiedSuperMethodCall1.java
+  PsiMethodCallExpression:d.super(0)
+    PsiReferenceExpression:d.super
+      PsiReferenceExpression:d
+        PsiReferenceParameterList
+          <empty list>
+        PsiIdentifier:d('d')
+      PsiJavaToken:DOT('.')
+      PsiKeyword:super('super')
+    PsiExpressionList
+      PsiJavaToken:LPARENTH('(')
+      PsiLiteralExpression:0
+        PsiJavaToken:INTEGER_LITERAL('0')
+      PsiJavaToken:RPARENTH(')')
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/QualifiedSuperMethodCall2.txt b/java/java-tests/testData/psi/parser-partial/expressions/QualifiedSuperMethodCall2.txt
new file mode 100644
index 0000000..853ac3e
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/QualifiedSuperMethodCall2.txt
@@ -0,0 +1,31 @@
+PsiJavaFile:QualifiedSuperMethodCall2.java
+  PsiMethodCallExpression:(new O()).<T>super()
+    PsiReferenceExpression:(new O()).<T>super
+      PsiParenthesizedExpression:(new O())
+        PsiJavaToken:LPARENTH('(')
+        PsiNewExpression:new O()
+          PsiKeyword:new('new')
+          PsiReferenceParameterList
+            <empty list>
+          PsiWhiteSpace(' ')
+          PsiJavaCodeReferenceElement:O
+            PsiIdentifier:O('O')
+            PsiReferenceParameterList
+              <empty list>
+          PsiExpressionList
+            PsiJavaToken:LPARENTH('(')
+            PsiJavaToken:RPARENTH(')')
+        PsiJavaToken:RPARENTH(')')
+      PsiJavaToken:DOT('.')
+      PsiReferenceParameterList
+        PsiJavaToken:LT('<')
+        PsiTypeElement:T
+          PsiJavaCodeReferenceElement:T
+            PsiIdentifier:T('T')
+            PsiReferenceParameterList
+              <empty list>
+        PsiJavaToken:GT('>')
+      PsiKeyword:super('super')
+    PsiExpressionList
+      PsiJavaToken:LPARENTH('(')
+      PsiJavaToken:RPARENTH(')')
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/ShiftRight.txt b/java/java-tests/testData/psi/parser-partial/expressions/ShiftRight.txt
new file mode 100644
index 0000000..86d9fc68
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/ShiftRight.txt
@@ -0,0 +1,11 @@
+PsiJavaFile:ShiftRight.java
+  PsiAssignmentExpression:x >>= 2
+    PsiReferenceExpression:x
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:x('x')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:GTGTEQ('>>=')
+    PsiWhiteSpace(' ')
+    PsiLiteralExpression:2
+      PsiJavaToken:INTEGER_LITERAL('2')
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/SuperMethodCallTypeParameterList.txt b/java/java-tests/testData/psi/parser-partial/expressions/SuperMethodCallTypeParameterList.txt
new file mode 100644
index 0000000..b17a757
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/SuperMethodCallTypeParameterList.txt
@@ -0,0 +1,9 @@
+PsiJavaFile:SuperMethodCallTypeParameterList.java
+  PsiMethodCallExpression:super()
+    PsiReferenceExpression:super
+      PsiReferenceParameterList
+        <empty list>
+      PsiKeyword:super('super')
+    PsiExpressionList
+      PsiJavaToken:LPARENTH('(')
+      PsiJavaToken:RPARENTH(')')
diff --git a/java/java-tests/testData/psi/parser-partial/files/AnnotatedPackage.txt b/java/java-tests/testData/psi/parser-partial/files/AnnotatedPackage.txt
new file mode 100644
index 0000000..e60c2eb
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/files/AnnotatedPackage.txt
@@ -0,0 +1,31 @@
+PsiJavaFile:AnnotatedPackage.java
+  PsiPackageStatement:a.b.c
+    PsiModifierList:@Anno
+      PsiAnnotation
+        PsiJavaToken:AT('@')
+        PsiJavaCodeReferenceElement:Anno
+          PsiIdentifier:Anno('Anno')
+          PsiReferenceParameterList
+            <empty list>
+        PsiAnnotationParameterList
+          <empty list>
+    PsiWhiteSpace(' ')
+    PsiKeyword:package('package')
+    PsiWhiteSpace(' ')
+    PsiJavaCodeReferenceElement:a.b.c
+      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
+        <empty list>
+    PsiJavaToken:SEMICOLON(';')
+  PsiImportList
+    <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/files/BindBefore0.txt b/java/java-tests/testData/psi/parser-partial/files/BindBefore0.txt
new file mode 100644
index 0000000..734e49a
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/files/BindBefore0.txt
@@ -0,0 +1,29 @@
+PsiJavaFile:BindBefore0.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiField:field
+      PsiComment(END_OF_LINE_COMMENT)('// comment')
+      PsiWhiteSpace('\n  ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeElement:int
+        PsiKeyword:int('int')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:field('field')
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/files/BindBefore1.txt b/java/java-tests/testData/psi/parser-partial/files/BindBefore1.txt
new file mode 100644
index 0000000..2593670
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/files/BindBefore1.txt
@@ -0,0 +1,29 @@
+PsiJavaFile:BindBefore1.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiComment(END_OF_LINE_COMMENT)('// comment')
+    PsiWhiteSpace('\n\n  ')
+    PsiField:field
+      PsiModifierList:
+        <empty list>
+      PsiTypeElement:int
+        PsiKeyword:int('int')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:field('field')
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/files/BindBefore2.txt b/java/java-tests/testData/psi/parser-partial/files/BindBefore2.txt
new file mode 100644
index 0000000..0b6174c
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/files/BindBefore2.txt
@@ -0,0 +1,29 @@
+PsiJavaFile:BindBefore2.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace(' ')
+    PsiComment(END_OF_LINE_COMMENT)('// comment')
+    PsiWhiteSpace('\n  ')
+    PsiField:field
+      PsiModifierList:
+        <empty list>
+      PsiTypeElement:int
+        PsiKeyword:int('int')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:field('field')
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/files/BindBefore3.txt b/java/java-tests/testData/psi/parser-partial/files/BindBefore3.txt
new file mode 100644
index 0000000..1de2eff
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/files/BindBefore3.txt
@@ -0,0 +1,28 @@
+PsiJavaFile:BindBefore3.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiComment(END_OF_LINE_COMMENT)('// comment')
+    PsiWhiteSpace('\n  ')
+    PsiField:field
+      PsiModifierList:
+        <empty list>
+      PsiTypeElement:int
+        PsiKeyword:int('int')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:field('field')
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/files/BindBefore4.txt b/java/java-tests/testData/psi/parser-partial/files/BindBefore4.txt
new file mode 100644
index 0000000..117f263
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/files/BindBefore4.txt
@@ -0,0 +1,33 @@
+PsiJavaFile:BindBefore4.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiField:field
+      PsiComment(END_OF_LINE_COMMENT)('// comment 1')
+      PsiWhiteSpace('\n  ')
+      PsiComment(END_OF_LINE_COMMENT)('// comment 2')
+      PsiWhiteSpace('\n  ')
+      PsiComment(END_OF_LINE_COMMENT)('// comment 3')
+      PsiWhiteSpace('\n  ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeElement:int
+        PsiKeyword:int('int')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:field('field')
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/files/BindDocComment0.txt b/java/java-tests/testData/psi/parser-partial/files/BindDocComment0.txt
new file mode 100644
index 0000000..5b7bf58
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/files/BindDocComment0.txt
@@ -0,0 +1,25 @@
+PsiJavaFile:BindDocComment0.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiDocComment
+      PsiDocToken:DOC_COMMENT_START('/**')
+      PsiWhiteSpace(' ')
+      PsiDocToken:DOC_COMMENT_DATA('class comment ')
+      PsiDocToken:DOC_COMMENT_END('*/')
+    PsiWhiteSpace('\n')
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/files/BindDocComment1.txt b/java/java-tests/testData/psi/parser-partial/files/BindDocComment1.txt
new file mode 100644
index 0000000..44939ca
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/files/BindDocComment1.txt
@@ -0,0 +1,34 @@
+PsiJavaFile:BindDocComment1.java
+  PsiDocComment
+    PsiDocToken:DOC_COMMENT_START('/**')
+    PsiWhiteSpace(' ')
+    PsiDocToken:DOC_COMMENT_DATA('file comment ')
+    PsiDocToken:DOC_COMMENT_END('*/')
+  PsiWhiteSpace('\n')
+  PsiPackageStatement:a
+    PsiKeyword:package('package')
+    PsiWhiteSpace(' ')
+    PsiJavaCodeReferenceElement:a
+      PsiIdentifier:a('a')
+      PsiReferenceParameterList
+        <empty list>
+    PsiJavaToken:SEMICOLON(';')
+  PsiWhiteSpace('\n')
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/files/BindDocComment2.txt b/java/java-tests/testData/psi/parser-partial/files/BindDocComment2.txt
new file mode 100644
index 0000000..e1e81ce
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/files/BindDocComment2.txt
@@ -0,0 +1,33 @@
+PsiJavaFile:BindDocComment2.java
+  PsiDocComment
+    PsiDocToken:DOC_COMMENT_START('/**')
+    PsiWhiteSpace(' ')
+    PsiDocToken:DOC_COMMENT_DATA('file comment ')
+    PsiDocToken:DOC_COMMENT_END('*/')
+  PsiWhiteSpace('\n')
+  PsiImportList
+    PsiImportStatement
+      PsiKeyword:import('import')
+      PsiWhiteSpace(' ')
+      PsiJavaCodeReferenceElement:a
+        PsiIdentifier:a('a')
+        PsiReferenceParameterList
+          <empty list>
+      PsiJavaToken:SEMICOLON(';')
+  PsiWhiteSpace('\n')
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/files/BindDocComment3.txt b/java/java-tests/testData/psi/parser-partial/files/BindDocComment3.txt
new file mode 100644
index 0000000..8800962
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/files/BindDocComment3.txt
@@ -0,0 +1,34 @@
+PsiJavaFile:BindDocComment3.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n ')
+    PsiField:f
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiWhiteSpace(' ')
+        PsiDocToken:DOC_COMMENT_DATA('field comment ')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeElement:int
+        PsiKeyword:int('int')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:f('f')
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/files/BindDocComment4.txt b/java/java-tests/testData/psi/parser-partial/files/BindDocComment4.txt
new file mode 100644
index 0000000..1beefcc
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/files/BindDocComment4.txt
@@ -0,0 +1,36 @@
+PsiJavaFile:BindDocComment4.java
+  PsiImportList
+    <empty list>
+  PsiClass:A
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:A('A')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n ')
+    PsiField:f
+      PsiDocComment
+        PsiDocToken:DOC_COMMENT_START('/**')
+        PsiWhiteSpace(' ')
+        PsiDocToken:DOC_COMMENT_DATA('field comment ')
+        PsiDocToken:DOC_COMMENT_END('*/')
+      PsiWhiteSpace('\n')
+      PsiComment(END_OF_LINE_COMMENT)('// field comment')
+      PsiWhiteSpace('\n ')
+      PsiModifierList:
+        <empty list>
+      PsiTypeElement:int
+        PsiKeyword:int('int')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:f('f')
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/files/EmptyFile.txt b/java/java-tests/testData/psi/parser-partial/files/EmptyFile.txt
new file mode 100644
index 0000000..3034524
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/files/EmptyFile.txt
@@ -0,0 +1,3 @@
+PsiJavaFile:EmptyFile.java
+  PsiImportList
+    <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/files/FileWithClass.txt b/java/java-tests/testData/psi/parser-partial/files/FileWithClass.txt
new file mode 100644
index 0000000..3f71aea
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/files/FileWithClass.txt
@@ -0,0 +1,54 @@
+PsiJavaFile:FileWithClass.java
+  PsiPackageStatement:a
+    PsiKeyword:package('package')
+    PsiWhiteSpace(' ')
+    PsiJavaCodeReferenceElement:a
+      PsiIdentifier:a('a')
+      PsiReferenceParameterList
+        <empty list>
+    PsiJavaToken:SEMICOLON(';')
+  PsiWhiteSpace('\n')
+  PsiImportList
+    PsiImportStatement
+      PsiKeyword:import('import')
+      PsiWhiteSpace(' ')
+      PsiJavaCodeReferenceElement:b
+        PsiIdentifier:b('b')
+        PsiReferenceParameterList
+          <empty list>
+      PsiJavaToken:SEMICOLON(';')
+  PsiWhiteSpace('\n')
+  PsiClass:C
+    PsiModifierList:public
+      PsiKeyword:public('public')
+    PsiWhiteSpace(' ')
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:C('C')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:RBRACE('}')
+  PsiWhiteSpace('\n')
+  PsiClass:D
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:D('D')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/files/Import0.txt b/java/java-tests/testData/psi/parser-partial/files/Import0.txt
new file mode 100644
index 0000000..9433472
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/files/Import0.txt
@@ -0,0 +1,17 @@
+PsiJavaFile:Import0.java
+  PsiImportList
+    PsiImportStatement
+      PsiKeyword:import('import')
+      PsiWhiteSpace(' ')
+      PsiJavaCodeReferenceElement:java.util
+        PsiJavaCodeReferenceElement:java
+          PsiIdentifier:java('java')
+          PsiReferenceParameterList
+            <empty list>
+        PsiJavaToken:DOT('.')
+        PsiIdentifier:util('util')
+        PsiReferenceParameterList
+          <empty list>
+      PsiJavaToken:DOT('.')
+      PsiJavaToken:ASTERISK('*')
+      PsiJavaToken:SEMICOLON(';')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/files/Import1.txt b/java/java-tests/testData/psi/parser-partial/files/Import1.txt
new file mode 100644
index 0000000..1831107
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/files/Import1.txt
@@ -0,0 +1,20 @@
+PsiJavaFile:Import1.java
+  PsiImportList
+    PsiImportStatement
+      PsiKeyword:import('import')
+      PsiWhiteSpace(' ')
+      PsiJavaCodeReferenceElement:java.util.Arrays
+        PsiJavaCodeReferenceElement:java.util
+          PsiJavaCodeReferenceElement:java
+            PsiIdentifier:java('java')
+            PsiReferenceParameterList
+              <empty list>
+          PsiJavaToken:DOT('.')
+          PsiIdentifier:util('util')
+          PsiReferenceParameterList
+            <empty list>
+        PsiJavaToken:DOT('.')
+        PsiIdentifier:Arrays('Arrays')
+        PsiReferenceParameterList
+          <empty list>
+      PsiJavaToken:SEMICOLON(';')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/files/Package.txt b/java/java-tests/testData/psi/parser-partial/files/Package.txt
new file mode 100644
index 0000000..a3fedef
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/files/Package.txt
@@ -0,0 +1,21 @@
+PsiJavaFile:Package.java
+  PsiPackageStatement:a.b.c
+    PsiKeyword:package('package')
+    PsiWhiteSpace(' ')
+    PsiJavaCodeReferenceElement:a.b.c
+      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
+        <empty list>
+    PsiJavaToken:SEMICOLON(';')
+  PsiImportList
+    <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/files/StaticImport0.txt b/java/java-tests/testData/psi/parser-partial/files/StaticImport0.txt
new file mode 100644
index 0000000..114f1a9
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/files/StaticImport0.txt
@@ -0,0 +1,24 @@
+PsiJavaFile:StaticImport0.java
+  PsiImportList
+    PsiImportStaticStatement
+      PsiKeyword:import('import')
+      PsiWhiteSpace(' ')
+      PsiKeyword:static('static')
+      PsiWhiteSpace(' ')
+      PsiJavaCodeReferenceElement:java.util.Arrays
+        PsiJavaCodeReferenceElement:java.util
+          PsiJavaCodeReferenceElement:java
+            PsiIdentifier:java('java')
+            PsiReferenceParameterList
+              <empty list>
+          PsiJavaToken:DOT('.')
+          PsiIdentifier:util('util')
+          PsiReferenceParameterList
+            <empty list>
+        PsiJavaToken:DOT('.')
+        PsiIdentifier:Arrays('Arrays')
+        PsiReferenceParameterList
+          <empty list>
+      PsiJavaToken:DOT('.')
+      PsiJavaToken:ASTERISK('*')
+      PsiJavaToken:SEMICOLON(';')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/files/StaticImport1.txt b/java/java-tests/testData/psi/parser-partial/files/StaticImport1.txt
new file mode 100644
index 0000000..8e5aee8
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/files/StaticImport1.txt
@@ -0,0 +1,27 @@
+PsiJavaFile:StaticImport1.java
+  PsiImportList
+    PsiImportStaticStatement
+      PsiKeyword:import('import')
+      PsiWhiteSpace(' ')
+      PsiKeyword:static('static')
+      PsiWhiteSpace(' ')
+      PsiImportStaticReferenceElement:java.util.Arrays.sort
+        PsiJavaCodeReferenceElement:java.util.Arrays
+          PsiJavaCodeReferenceElement:java.util
+            PsiJavaCodeReferenceElement:java
+              PsiIdentifier:java('java')
+              PsiReferenceParameterList
+                <empty list>
+            PsiJavaToken:DOT('.')
+            PsiIdentifier:util('util')
+            PsiReferenceParameterList
+              <empty list>
+          PsiJavaToken:DOT('.')
+          PsiIdentifier:Arrays('Arrays')
+          PsiReferenceParameterList
+            <empty list>
+        PsiJavaToken:DOT('.')
+        PsiIdentifier:sort('sort')
+        PsiReferenceParameterList
+          <empty list>
+      PsiJavaToken:SEMICOLON(';')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/files/UnclosedImport0.txt b/java/java-tests/testData/psi/parser-partial/files/UnclosedImport0.txt
new file mode 100644
index 0000000..b30c120
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/files/UnclosedImport0.txt
@@ -0,0 +1,6 @@
+PsiJavaFile:UnclosedImport0.java
+  PsiImportList
+    PsiImportStatement
+      PsiKeyword:import('import')
+      PsiErrorElement:Identifier expected
+        <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/files/UnclosedImport1.txt b/java/java-tests/testData/psi/parser-partial/files/UnclosedImport1.txt
new file mode 100644
index 0000000..ff2b67f
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/files/UnclosedImport1.txt
@@ -0,0 +1,18 @@
+PsiJavaFile:UnclosedImport1.java
+  PsiImportList
+    PsiImportStatement
+      PsiKeyword:import('import')
+      PsiWhiteSpace(' ')
+      PsiJavaCodeReferenceElement:java.awt
+        PsiJavaCodeReferenceElement:java
+          PsiIdentifier:java('java')
+          PsiReferenceParameterList
+            <empty list>
+        PsiJavaToken:DOT('.')
+        PsiIdentifier:awt('awt')
+        PsiReferenceParameterList
+          <empty list>
+      PsiJavaToken:DOT('.')
+      PsiJavaToken:ASTERISK('*')
+      PsiErrorElement:';' expected
+        <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/files/UnclosedImport2.txt b/java/java-tests/testData/psi/parser-partial/files/UnclosedImport2.txt
new file mode 100644
index 0000000..1a49c92
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/files/UnclosedImport2.txt
@@ -0,0 +1,17 @@
+PsiJavaFile:UnclosedImport2.java
+  PsiImportList
+    PsiImportStatement
+      PsiKeyword:import('import')
+      PsiWhiteSpace(' ')
+      PsiJavaCodeReferenceElement:java.awt
+        PsiJavaCodeReferenceElement:java
+          PsiIdentifier:java('java')
+          PsiReferenceParameterList
+            <empty list>
+        PsiJavaToken:DOT('.')
+        PsiIdentifier:awt('awt')
+        PsiReferenceParameterList
+          <empty list>
+      PsiJavaToken:DOT('.')
+      PsiErrorElement:Identifier or '*' expected
+        <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/files/UnclosedImport3.txt b/java/java-tests/testData/psi/parser-partial/files/UnclosedImport3.txt
new file mode 100644
index 0000000..2715038
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/files/UnclosedImport3.txt
@@ -0,0 +1,13 @@
+PsiJavaFile:UnclosedImport3.java
+  PsiImportList
+    PsiImportStaticStatement
+      PsiKeyword:import('import')
+      PsiWhiteSpace(' ')
+      PsiKeyword:static('static')
+      PsiWhiteSpace(' ')
+      PsiImportStaticReferenceElement:a
+        PsiIdentifier:a('a')
+        PsiReferenceParameterList
+          <empty list>
+      PsiErrorElement:';' expected
+        <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/files/UnclosedPackage0.txt b/java/java-tests/testData/psi/parser-partial/files/UnclosedPackage0.txt
new file mode 100644
index 0000000..cc9866b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/files/UnclosedPackage0.txt
@@ -0,0 +1,5 @@
+PsiJavaFile:UnclosedPackage0.java
+  PsiImportList
+    <empty list>
+  PsiErrorElement:'class' or 'interface' expected
+    PsiKeyword:package('package')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/files/UnclosedPackage1.txt b/java/java-tests/testData/psi/parser-partial/files/UnclosedPackage1.txt
new file mode 100644
index 0000000..df363a6
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/files/UnclosedPackage1.txt
@@ -0,0 +1,18 @@
+PsiJavaFile:UnclosedPackage1.java
+  PsiPackageStatement:a.
+    PsiKeyword:package('package')
+    PsiWhiteSpace(' ')
+    PsiJavaCodeReferenceElement:a.
+      PsiJavaCodeReferenceElement:a
+        PsiIdentifier:a('a')
+        PsiReferenceParameterList
+          <empty list>
+      PsiJavaToken:DOT('.')
+      PsiErrorElement:Identifier expected
+        <empty list>
+      PsiReferenceParameterList
+        <empty list>
+    PsiErrorElement:';' expected
+      <empty list>
+  PsiImportList
+    <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/references/Reference0.txt b/java/java-tests/testData/psi/parser-partial/references/Reference0.txt
new file mode 100644
index 0000000..3768b9f
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/references/Reference0.txt
@@ -0,0 +1,5 @@
+PsiJavaFile:Reference0.java
+  PsiJavaCodeReferenceElement:a
+    PsiIdentifier:a('a')
+    PsiReferenceParameterList
+      <empty list>
diff --git a/java/java-tests/testData/psi/parser-partial/references/Reference1.txt b/java/java-tests/testData/psi/parser-partial/references/Reference1.txt
new file mode 100644
index 0000000..19be605
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/references/Reference1.txt
@@ -0,0 +1,11 @@
+PsiJavaFile:Reference1.java
+  PsiJavaCodeReferenceElement:a.
+    PsiJavaCodeReferenceElement:a
+      PsiIdentifier:a('a')
+      PsiReferenceParameterList
+        <empty list>
+    PsiJavaToken:DOT('.')
+    PsiErrorElement:Identifier expected
+      <empty list>
+    PsiReferenceParameterList
+      <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/references/Reference2.txt b/java/java-tests/testData/psi/parser-partial/references/Reference2.txt
new file mode 100644
index 0000000..d32c5bc
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/references/Reference2.txt
@@ -0,0 +1,10 @@
+PsiJavaFile:Reference2.java
+  PsiJavaCodeReferenceElement:a.b
+    PsiJavaCodeReferenceElement:a
+      PsiIdentifier:a('a')
+      PsiReferenceParameterList
+        <empty list>
+    PsiJavaToken:DOT('.')
+    PsiIdentifier:b('b')
+    PsiReferenceParameterList
+      <empty list>
diff --git a/java/java-tests/testData/psi/parser-partial/references/Type0.txt b/java/java-tests/testData/psi/parser-partial/references/Type0.txt
new file mode 100644
index 0000000..a9b9e8b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/references/Type0.txt
@@ -0,0 +1,3 @@
+PsiJavaFile:Type0.java
+  PsiTypeElement:int
+    PsiKeyword:int('int')
diff --git a/java/java-tests/testData/psi/parser-partial/references/Type1.txt b/java/java-tests/testData/psi/parser-partial/references/Type1.txt
new file mode 100644
index 0000000..286e9f1
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/references/Type1.txt
@@ -0,0 +1,11 @@
+PsiJavaFile:Type1.java
+  PsiTypeElement:a.b
+    PsiJavaCodeReferenceElement:a.b
+      PsiJavaCodeReferenceElement:a
+        PsiIdentifier:a('a')
+        PsiReferenceParameterList
+          <empty list>
+      PsiJavaToken:DOT('.')
+      PsiIdentifier:b('b')
+      PsiReferenceParameterList
+        <empty list>
diff --git a/java/java-tests/testData/psi/parser-partial/references/Type2.txt b/java/java-tests/testData/psi/parser-partial/references/Type2.txt
new file mode 100644
index 0000000..7234dbb
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/references/Type2.txt
@@ -0,0 +1,6 @@
+PsiJavaFile:Type2.java
+  PsiTypeElement:int[]
+    PsiTypeElement:int
+      PsiKeyword:int('int')
+    PsiJavaToken:LBRACKET('[')
+    PsiJavaToken:RBRACKET(']')
diff --git a/java/java-tests/testData/psi/parser-partial/references/Type3.txt b/java/java-tests/testData/psi/parser-partial/references/Type3.txt
new file mode 100644
index 0000000..2a9705d
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/references/Type3.txt
@@ -0,0 +1,8 @@
+PsiJavaFile:Type3.java
+  PsiTypeElement:int[]
+    PsiTypeElement:int
+      PsiKeyword:int('int')
+    PsiJavaToken:LBRACKET('[')
+    PsiJavaToken:RBRACKET(']')
+  PsiErrorElement:Unparsed tokens
+    PsiJavaToken:LBRACKET('[')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/references/Type4.txt b/java/java-tests/testData/psi/parser-partial/references/Type4.txt
new file mode 100644
index 0000000..5159f57
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/references/Type4.txt
@@ -0,0 +1,24 @@
+PsiJavaFile:Type4.java
+  PsiTypeElement:Map<String,List<String>>
+    PsiJavaCodeReferenceElement:Map<String,List<String>>
+      PsiIdentifier:Map('Map')
+      PsiReferenceParameterList
+        PsiJavaToken:LT('<')
+        PsiTypeElement:String
+          PsiJavaCodeReferenceElement:String
+            PsiIdentifier:String('String')
+            PsiReferenceParameterList
+              <empty list>
+        PsiJavaToken:COMMA(',')
+        PsiTypeElement:List<String>
+          PsiJavaCodeReferenceElement:List<String>
+            PsiIdentifier:List('List')
+            PsiReferenceParameterList
+              PsiJavaToken:LT('<')
+              PsiTypeElement:String
+                PsiJavaCodeReferenceElement:String
+                  PsiIdentifier:String('String')
+                  PsiReferenceParameterList
+                    <empty list>
+              PsiJavaToken:GT('>')
+        PsiJavaToken:GT('>')
diff --git a/java/java-tests/testData/psi/parser-partial/references/Type5.txt b/java/java-tests/testData/psi/parser-partial/references/Type5.txt
new file mode 100644
index 0000000..74a43fc
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/references/Type5.txt
@@ -0,0 +1,11 @@
+PsiJavaFile:Type5.java
+  PsiTypeElement:Object[]...
+    PsiTypeElement:Object[]
+      PsiTypeElement:Object
+        PsiJavaCodeReferenceElement:Object
+          PsiIdentifier:Object('Object')
+          PsiReferenceParameterList
+            <empty list>
+      PsiJavaToken:LBRACKET('[')
+      PsiJavaToken:RBRACKET(']')
+    PsiJavaToken:ELLIPSIS('...')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/references/Type6.txt b/java/java-tests/testData/psi/parser-partial/references/Type6.txt
new file mode 100644
index 0000000..3ced650b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/references/Type6.txt
@@ -0,0 +1,28 @@
+PsiJavaFile:Type6.java
+  PsiTypeElement:@English String @NonEmpty []
+    PsiTypeElement:@English String
+      PsiAnnotation
+        PsiJavaToken:AT('@')
+        PsiJavaCodeReferenceElement:English
+          PsiIdentifier:English('English')
+          PsiReferenceParameterList
+            <empty list>
+        PsiAnnotationParameterList
+          <empty list>
+      PsiWhiteSpace(' ')
+      PsiJavaCodeReferenceElement:String
+        PsiIdentifier:String('String')
+        PsiReferenceParameterList
+          <empty list>
+    PsiWhiteSpace(' ')
+    PsiAnnotation
+      PsiJavaToken:AT('@')
+      PsiJavaCodeReferenceElement:NonEmpty
+        PsiIdentifier:NonEmpty('NonEmpty')
+        PsiReferenceParameterList
+          <empty list>
+      PsiAnnotationParameterList
+        <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACKET('[')
+    PsiJavaToken:RBRACKET(']')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/references/Type7.txt b/java/java-tests/testData/psi/parser-partial/references/Type7.txt
new file mode 100644
index 0000000..6333941
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/references/Type7.txt
@@ -0,0 +1,10 @@
+PsiJavaFile:Type7.java
+  PsiTypeElement:Diamond<>
+    PsiJavaCodeReferenceElement:Diamond<>
+      PsiIdentifier:Diamond('Diamond')
+      PsiReferenceParameterList
+        PsiJavaToken:LT('<')
+        PsiTypeElement:
+          PsiTypeElement:DIAMOND
+            <empty list>
+        PsiJavaToken:GT('>')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/references/Type8.txt b/java/java-tests/testData/psi/parser-partial/references/Type8.txt
new file mode 100644
index 0000000..fc075ad
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/references/Type8.txt
@@ -0,0 +1,10 @@
+PsiJavaFile:Type8.java
+  PsiTypeElement:A|
+    PsiTypeElement:A
+      PsiJavaCodeReferenceElement:A
+        PsiIdentifier:A('A')
+        PsiReferenceParameterList
+          <empty list>
+    PsiJavaToken:OR('|')
+    PsiErrorElement:Identifier expected
+      <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/references/Type9.txt b/java/java-tests/testData/psi/parser-partial/references/Type9.txt
new file mode 100644
index 0000000..8390683
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/references/Type9.txt
@@ -0,0 +1,13 @@
+PsiJavaFile:Type9.java
+  PsiTypeElement:A|B
+    PsiTypeElement:A
+      PsiJavaCodeReferenceElement:A
+        PsiIdentifier:A('A')
+        PsiReferenceParameterList
+          <empty list>
+    PsiJavaToken:OR('|')
+    PsiTypeElement:B
+      PsiJavaCodeReferenceElement:B
+        PsiIdentifier:B('B')
+        PsiReferenceParameterList
+          <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/references/TypeParams0.txt b/java/java-tests/testData/psi/parser-partial/references/TypeParams0.txt
new file mode 100644
index 0000000..508d8cd
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/references/TypeParams0.txt
@@ -0,0 +1,8 @@
+PsiJavaFile:TypeParams0.java
+  PsiTypeParameterList
+    PsiJavaToken:LT('<')
+    PsiTypeParameter:T
+      PsiIdentifier:T('T')
+      PsiElement(EXTENDS_BOUND_LIST)
+        <empty list>
+    PsiJavaToken:GT('>')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/references/TypeParams1.txt b/java/java-tests/testData/psi/parser-partial/references/TypeParams1.txt
new file mode 100644
index 0000000..0dd4209d
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/references/TypeParams1.txt
@@ -0,0 +1,14 @@
+PsiJavaFile:TypeParams1.java
+  PsiTypeParameterList
+    PsiJavaToken:LT('<')
+    PsiTypeParameter:T
+      PsiIdentifier:T('T')
+      PsiElement(EXTENDS_BOUND_LIST)
+        <empty list>
+    PsiJavaToken:COMMA(',')
+    PsiWhiteSpace(' ')
+    PsiTypeParameter:U
+      PsiIdentifier:U('U')
+      PsiElement(EXTENDS_BOUND_LIST)
+        <empty list>
+    PsiJavaToken:GT('>')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/references/TypeParams2.txt b/java/java-tests/testData/psi/parser-partial/references/TypeParams2.txt
new file mode 100644
index 0000000..16ac8be
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/references/TypeParams2.txt
@@ -0,0 +1,9 @@
+PsiJavaFile:TypeParams2.java
+  PsiTypeParameterList
+    PsiJavaToken:LT('<')
+    PsiTypeParameter:T
+      PsiIdentifier:T('T')
+      PsiElement(EXTENDS_BOUND_LIST)
+        <empty list>
+    PsiErrorElement:'>' expected.
+      <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/references/TypeParams3.txt b/java/java-tests/testData/psi/parser-partial/references/TypeParams3.txt
new file mode 100644
index 0000000..b24e366
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/references/TypeParams3.txt
@@ -0,0 +1,11 @@
+PsiJavaFile:TypeParams3.java
+  PsiTypeParameterList
+    PsiJavaToken:LT('<')
+    PsiTypeParameter:T
+      PsiIdentifier:T('T')
+      PsiElement(EXTENDS_BOUND_LIST)
+        <empty list>
+    PsiWhiteSpace(' ')
+    PsiErrorElement:Unexpected identifier
+      PsiIdentifier:hack('hack')
+    PsiJavaToken:GT('>')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/references/TypeParams4.txt b/java/java-tests/testData/psi/parser-partial/references/TypeParams4.txt
new file mode 100644
index 0000000..3f60da4
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/references/TypeParams4.txt
@@ -0,0 +1,12 @@
+PsiJavaFile:TypeParams4.java
+  PsiTypeParameterList
+    PsiJavaToken:LT('<')
+    PsiTypeParameter:T
+      PsiIdentifier:T('T')
+      PsiElement(EXTENDS_BOUND_LIST)
+        <empty list>
+    PsiErrorElement:'>' expected.
+      <empty list>
+  PsiWhiteSpace(' ')
+  PsiErrorElement:Unparsed tokens
+    PsiIdentifier:hack('hack')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/references/TypeParams5.txt b/java/java-tests/testData/psi/parser-partial/references/TypeParams5.txt
new file mode 100644
index 0000000..a7329da
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/references/TypeParams5.txt
@@ -0,0 +1,27 @@
+PsiJavaFile:TypeParams5.java
+  PsiTypeParameterList
+    PsiJavaToken:LT('<')
+    PsiTypeParameter:T
+      PsiIdentifier:T('T')
+      PsiWhiteSpace(' ')
+      PsiElement(EXTENDS_BOUND_LIST)
+        PsiKeyword:extends('extends')
+        PsiWhiteSpace(' ')
+        PsiJavaCodeReferenceElement:X
+          PsiIdentifier:X('X')
+          PsiReferenceParameterList
+            <empty list>
+        PsiWhiteSpace(' ')
+        PsiJavaToken:AND('&')
+        PsiWhiteSpace(' ')
+        PsiJavaCodeReferenceElement:Y<Z>
+          PsiIdentifier:Y('Y')
+          PsiReferenceParameterList
+            PsiJavaToken:LT('<')
+            PsiTypeElement:Z
+              PsiJavaCodeReferenceElement:Z
+                PsiIdentifier:Z('Z')
+                PsiReferenceParameterList
+                  <empty list>
+            PsiJavaToken:GT('>')
+    PsiJavaToken:GT('>')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/references/TypeParams6.txt b/java/java-tests/testData/psi/parser-partial/references/TypeParams6.txt
new file mode 100644
index 0000000..a5b46b9
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/references/TypeParams6.txt
@@ -0,0 +1,15 @@
+PsiJavaFile:TypeParams6.java
+  PsiTypeParameterList
+    PsiJavaToken:LT('<')
+    PsiTypeParameter:T
+      PsiIdentifier:T('T')
+      PsiElement(EXTENDS_BOUND_LIST)
+        <empty list>
+    PsiErrorElement:'>' expected.
+      <empty list>
+  PsiWhiteSpace(' ')
+  PsiErrorElement:Unparsed tokens
+    PsiIdentifier:supers('supers')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:X('X')
+    PsiJavaToken:GT('>')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/references/TypeParams7.txt b/java/java-tests/testData/psi/parser-partial/references/TypeParams7.txt
new file mode 100644
index 0000000..aaea7b8
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/references/TypeParams7.txt
@@ -0,0 +1,20 @@
+PsiJavaFile:TypeParams7.java
+  PsiTypeParameterList
+    PsiJavaToken:LT('<')
+    PsiTypeParameter:T
+      PsiIdentifier:T('T')
+      PsiWhiteSpace(' ')
+      PsiElement(EXTENDS_BOUND_LIST)
+        PsiKeyword:extends('extends')
+        PsiWhiteSpace(' ')
+        PsiJavaCodeReferenceElement:X
+          PsiIdentifier:X('X')
+          PsiReferenceParameterList
+            <empty list>
+    PsiJavaToken:COMMA(',')
+    PsiWhiteSpace(' ')
+    PsiTypeParameter:Y
+      PsiIdentifier:Y('Y')
+      PsiElement(EXTENDS_BOUND_LIST)
+        <empty list>
+    PsiJavaToken:GT('>')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/references/TypeParams8.txt b/java/java-tests/testData/psi/parser-partial/references/TypeParams8.txt
new file mode 100644
index 0000000..9389898
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/references/TypeParams8.txt
@@ -0,0 +1,8 @@
+PsiJavaFile:TypeParams8.java
+  PsiTypeParameterList
+    PsiJavaToken:LT('<')
+    PsiErrorElement:Unexpected wildcard
+      PsiJavaToken:QUEST('?')
+      PsiElement(EXTENDS_BOUND_LIST)
+        <empty list>
+    PsiJavaToken:GT('>')
diff --git a/java/java-tests/testData/psi/parser-partial/statements/AnonymousInSmartCompletion.txt b/java/java-tests/testData/psi/parser-partial/statements/AnonymousInSmartCompletion.txt
new file mode 100644
index 0000000..73a8461
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/AnonymousInSmartCompletion.txt
@@ -0,0 +1,109 @@
+PsiJavaFile:AnonymousInSmartCompletion.java
+  PsiCodeBlock
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace(' ')
+    PsiExpressionStatement
+      PsiNewExpression:new Foo(hash
+#) {}
+        PsiKeyword:new('new')
+        PsiReferenceParameterList
+          <empty list>
+        PsiWhiteSpace(' ')
+        PsiAnonymousClass
+          PsiJavaCodeReferenceElement:Foo
+            PsiIdentifier:Foo('Foo')
+            PsiReferenceParameterList
+              <empty list>
+          PsiExpressionList
+            PsiJavaToken:LPARENTH('(')
+            PsiReferenceExpression:hash
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:hash('hash')
+            PsiErrorElement:',' or ')' expected
+              <empty list>
+            PsiExpression(empty)
+              <empty list>
+            PsiWhiteSpace('\n')
+            PsiElement(BAD_CHARACTER)('#')
+            PsiJavaToken:RPARENTH(')')
+          PsiWhiteSpace(' ')
+          PsiJavaToken:LBRACE('{')
+          PsiJavaToken:RBRACE('}')
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n ')
+    PsiExpressionStatement
+      PsiNewExpression:new Foo(hash
+#, bar) {}
+        PsiKeyword:new('new')
+        PsiReferenceParameterList
+          <empty list>
+        PsiWhiteSpace(' ')
+        PsiAnonymousClass
+          PsiJavaCodeReferenceElement:Foo
+            PsiIdentifier:Foo('Foo')
+            PsiReferenceParameterList
+              <empty list>
+          PsiExpressionList
+            PsiJavaToken:LPARENTH('(')
+            PsiReferenceExpression:hash
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:hash('hash')
+            PsiErrorElement:',' or ')' expected
+              <empty list>
+            PsiExpression(empty)
+              <empty list>
+            PsiWhiteSpace('\n')
+            PsiElement(BAD_CHARACTER)('#')
+            PsiJavaToken:COMMA(',')
+            PsiWhiteSpace(' ')
+            PsiReferenceExpression:bar
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:bar('bar')
+            PsiJavaToken:RPARENTH(')')
+          PsiWhiteSpace(' ')
+          PsiJavaToken:LBRACE('{')
+          PsiJavaToken:RBRACE('}')
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace('\n ')
+    PsiExpressionStatement
+      PsiNewExpression:new Foo(hash
+#x) {}
+        PsiKeyword:new('new')
+        PsiReferenceParameterList
+          <empty list>
+        PsiWhiteSpace(' ')
+        PsiAnonymousClass
+          PsiJavaCodeReferenceElement:Foo
+            PsiIdentifier:Foo('Foo')
+            PsiReferenceParameterList
+              <empty list>
+          PsiExpressionList
+            PsiJavaToken:LPARENTH('(')
+            PsiReferenceExpression:hash
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:hash('hash')
+            PsiErrorElement:',' or ')' expected
+              <empty list>
+            PsiExpression(empty)
+              <empty list>
+            PsiWhiteSpace('\n')
+            PsiElement(BAD_CHARACTER)('#')
+            PsiErrorElement:',' or ')' expected
+              <empty list>
+            PsiExpression(empty)
+              <empty list>
+            PsiReferenceExpression:x
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:x('x')
+            PsiJavaToken:RPARENTH(')')
+          PsiWhiteSpace(' ')
+          PsiJavaToken:LBRACE('{')
+          PsiJavaToken:RBRACE('}')
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/AssertNormal0.txt b/java/java-tests/testData/psi/parser-partial/statements/AssertNormal0.txt
new file mode 100644
index 0000000..230a7ac
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/AssertNormal0.txt
@@ -0,0 +1,9 @@
+PsiJavaFile:AssertNormal0.java
+  PsiAssertStatement
+    PsiKeyword:assert('assert')
+    PsiWhiteSpace(' ')
+    PsiReferenceExpression:cond
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:cond('cond')
+    PsiJavaToken:SEMICOLON(';')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/AssertNormal1.txt b/java/java-tests/testData/psi/parser-partial/statements/AssertNormal1.txt
new file mode 100644
index 0000000..3b86376
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/AssertNormal1.txt
@@ -0,0 +1,16 @@
+PsiJavaFile:AssertNormal1.java
+  PsiAssertStatement
+    PsiKeyword:assert('assert')
+    PsiWhiteSpace(' ')
+    PsiReferenceExpression:cond
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:cond('cond')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:COLON(':')
+    PsiWhiteSpace(' ')
+    PsiReferenceExpression:message
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:message('message')
+    PsiJavaToken:SEMICOLON(';')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/AssignmentSimple0.txt b/java/java-tests/testData/psi/parser-partial/statements/AssignmentSimple0.txt
new file mode 100644
index 0000000..3e37046
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/AssignmentSimple0.txt
@@ -0,0 +1,31 @@
+PsiJavaFile:AssignmentSimple0.java
+  PsiDeclarationStatement
+    PsiLocalVariable:a
+      PsiModifierList:
+        <empty list>
+      PsiTypeElement:int[]
+        PsiTypeElement:int
+          PsiKeyword:int('int')
+        PsiJavaToken:LBRACKET('[')
+        PsiJavaToken:RBRACKET(']')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:a('a')
+      PsiJavaToken:SEMICOLON(';')
+  PsiWhiteSpace('\n ')
+  PsiExpressionStatement
+    PsiAssignmentExpression:a[0] = 0
+      PsiArrayAccessExpression:a[0]
+        PsiReferenceExpression:a
+          PsiReferenceParameterList
+            <empty list>
+          PsiIdentifier:a('a')
+        PsiJavaToken:LBRACKET('[')
+        PsiLiteralExpression:0
+          PsiJavaToken:INTEGER_LITERAL('0')
+        PsiJavaToken:RBRACKET(']')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:EQ('=')
+      PsiWhiteSpace(' ')
+      PsiLiteralExpression:0
+        PsiJavaToken:INTEGER_LITERAL('0')
+    PsiJavaToken:SEMICOLON(';')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/AssignmentSimple1.txt b/java/java-tests/testData/psi/parser-partial/statements/AssignmentSimple1.txt
new file mode 100644
index 0000000..ced00db
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/AssignmentSimple1.txt
@@ -0,0 +1,24 @@
+PsiJavaFile:AssignmentSimple1.java
+  PsiExpressionStatement
+    PsiAssignmentExpression:a=1
+      PsiReferenceExpression:a
+        PsiReferenceParameterList
+          <empty list>
+        PsiIdentifier:a('a')
+      PsiJavaToken:EQ('=')
+      PsiLiteralExpression:1
+        PsiJavaToken:INTEGER_LITERAL('1')
+    PsiJavaToken:SEMICOLON(';')
+  PsiWhiteSpace(' ')
+  PsiDeclarationStatement
+    PsiLocalVariable:b
+      PsiModifierList:
+        <empty list>
+      PsiTypeElement:int
+        PsiKeyword:int('int')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:b('b')
+      PsiJavaToken:EQ('=')
+      PsiLiteralExpression:2
+        PsiJavaToken:INTEGER_LITERAL('2')
+      PsiJavaToken:SEMICOLON(';')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/BlockEmpty.txt b/java/java-tests/testData/psi/parser-partial/statements/BlockEmpty.txt
new file mode 100644
index 0000000..8c2a003
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/BlockEmpty.txt
@@ -0,0 +1,8 @@
+PsiJavaFile:BlockEmpty.java
+  PsiCodeBlock
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace(' ')
+    PsiEmptyStatement
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/statements/BlockIncomplete0.txt b/java/java-tests/testData/psi/parser-partial/statements/BlockIncomplete0.txt
new file mode 100644
index 0000000..2cdd906
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/BlockIncomplete0.txt
@@ -0,0 +1,7 @@
+PsiJavaFile:BlockIncomplete0.java
+  PsiCodeBlock
+    PsiJavaToken:LBRACE('{')
+    PsiErrorElement:'}' expected
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiComment(C_STYLE_COMMENT)('/*}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/BlockIncomplete1.txt b/java/java-tests/testData/psi/parser-partial/statements/BlockIncomplete1.txt
new file mode 100644
index 0000000..4ec20c6
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/BlockIncomplete1.txt
@@ -0,0 +1,11 @@
+PsiJavaFile:BlockIncomplete1.java
+  PsiCodeBlock
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace(' ')
+    PsiBlockStatement
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace(' ')
+        PsiJavaToken:RBRACE('}')
+    PsiErrorElement:'}' expected
+      <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/BlockIncomplete2.txt b/java/java-tests/testData/psi/parser-partial/statements/BlockIncomplete2.txt
new file mode 100644
index 0000000..27a2174
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/BlockIncomplete2.txt
@@ -0,0 +1,20 @@
+PsiJavaFile:BlockIncomplete2.java
+  PsiCodeBlock
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace(' ')
+    PsiErrorElement:'else' without 'if'
+      PsiKeyword:else('else')
+    PsiEmptyStatement
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace(' ')
+    PsiErrorElement:'catch' without 'try'
+      PsiKeyword:catch('catch')
+    PsiEmptyStatement
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace(' ')
+    PsiErrorElement:'finally' without 'try'
+      PsiKeyword:finally('finally')
+    PsiEmptyStatement
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/BlockSimple.txt b/java/java-tests/testData/psi/parser-partial/statements/BlockSimple.txt
new file mode 100644
index 0000000..6258d21
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/BlockSimple.txt
@@ -0,0 +1,10 @@
+PsiJavaFile:BlockSimple.java
+  PsiCodeBlock
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace(' ')
+    PsiBlockStatement
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/statements/BreakNormal0.txt b/java/java-tests/testData/psi/parser-partial/statements/BreakNormal0.txt
new file mode 100644
index 0000000..29d776e
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/BreakNormal0.txt
@@ -0,0 +1,4 @@
+PsiJavaFile:BreakNormal0.java
+  PsiBreakStatement
+    PsiKeyword:break('break')
+    PsiJavaToken:SEMICOLON(';')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/BreakNormal1.txt b/java/java-tests/testData/psi/parser-partial/statements/BreakNormal1.txt
new file mode 100644
index 0000000..2d59018
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/BreakNormal1.txt
@@ -0,0 +1,6 @@
+PsiJavaFile:BreakNormal1.java
+  PsiBreakStatement
+    PsiKeyword:break('break')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:LABEL('LABEL')
+    PsiJavaToken:SEMICOLON(';')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/ContinueNormal0.txt b/java/java-tests/testData/psi/parser-partial/statements/ContinueNormal0.txt
new file mode 100644
index 0000000..32f9c8a
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/ContinueNormal0.txt
@@ -0,0 +1,4 @@
+PsiJavaFile:ContinueNormal0.java
+  PsiContinueStatement
+    PsiKeyword:continue('continue')
+    PsiJavaToken:SEMICOLON(';')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/ContinueNormal1.txt b/java/java-tests/testData/psi/parser-partial/statements/ContinueNormal1.txt
new file mode 100644
index 0000000..b7124b3
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/ContinueNormal1.txt
@@ -0,0 +1,6 @@
+PsiJavaFile:ContinueNormal1.java
+  PsiContinueStatement
+    PsiKeyword:continue('continue')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:LABEL('LABEL')
+    PsiJavaToken:SEMICOLON(';')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/DoIncomplete0.txt b/java/java-tests/testData/psi/parser-partial/statements/DoIncomplete0.txt
new file mode 100644
index 0000000..92d2389
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/DoIncomplete0.txt
@@ -0,0 +1,5 @@
+PsiJavaFile:DoIncomplete0.java
+  PsiDoWhileStatement
+    PsiKeyword:do('do')
+    PsiErrorElement:Statement expected
+      <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/DoIncomplete1.txt b/java/java-tests/testData/psi/parser-partial/statements/DoIncomplete1.txt
new file mode 100644
index 0000000..c7ac080
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/DoIncomplete1.txt
@@ -0,0 +1,16 @@
+PsiJavaFile:DoIncomplete1.java
+  PsiDoWhileStatement
+    PsiKeyword:do('do')
+    PsiWhiteSpace(' ')
+    PsiExpressionStatement
+      PsiMethodCallExpression:foo()
+        PsiReferenceExpression:foo
+          PsiReferenceParameterList
+            <empty list>
+          PsiIdentifier:foo('foo')
+        PsiExpressionList
+          PsiJavaToken:LPARENTH('(')
+          PsiJavaToken:RPARENTH(')')
+      PsiJavaToken:SEMICOLON(';')
+    PsiErrorElement:'while' expected
+      <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/DoIncomplete2.txt b/java/java-tests/testData/psi/parser-partial/statements/DoIncomplete2.txt
new file mode 100644
index 0000000..a2265ec
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/DoIncomplete2.txt
@@ -0,0 +1,18 @@
+PsiJavaFile:DoIncomplete2.java
+  PsiDoWhileStatement
+    PsiKeyword:do('do')
+    PsiWhiteSpace(' ')
+    PsiExpressionStatement
+      PsiMethodCallExpression:foo()
+        PsiReferenceExpression:foo
+          PsiReferenceParameterList
+            <empty list>
+          PsiIdentifier:foo('foo')
+        PsiExpressionList
+          PsiJavaToken:LPARENTH('(')
+          PsiJavaToken:RPARENTH(')')
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace(' ')
+    PsiKeyword:while('while')
+    PsiErrorElement:'(' expected
+      <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/DoIncomplete3.txt b/java/java-tests/testData/psi/parser-partial/statements/DoIncomplete3.txt
new file mode 100644
index 0000000..0b31b16
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/DoIncomplete3.txt
@@ -0,0 +1,19 @@
+PsiJavaFile:DoIncomplete3.java
+  PsiDoWhileStatement
+    PsiKeyword:do('do')
+    PsiWhiteSpace(' ')
+    PsiExpressionStatement
+      PsiMethodCallExpression:foo()
+        PsiReferenceExpression:foo
+          PsiReferenceParameterList
+            <empty list>
+          PsiIdentifier:foo('foo')
+        PsiExpressionList
+          PsiJavaToken:LPARENTH('(')
+          PsiJavaToken:RPARENTH(')')
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace(' ')
+    PsiKeyword:while('while')
+    PsiJavaToken:LPARENTH('(')
+    PsiErrorElement:Expression expected
+      <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/DoIncomplete4.txt b/java/java-tests/testData/psi/parser-partial/statements/DoIncomplete4.txt
new file mode 100644
index 0000000..3e94e62
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/DoIncomplete4.txt
@@ -0,0 +1,21 @@
+PsiJavaFile:DoIncomplete4.java
+  PsiDoWhileStatement
+    PsiKeyword:do('do')
+    PsiWhiteSpace(' ')
+    PsiExpressionStatement
+      PsiMethodCallExpression:foo()
+        PsiReferenceExpression:foo
+          PsiReferenceParameterList
+            <empty list>
+          PsiIdentifier:foo('foo')
+        PsiExpressionList
+          PsiJavaToken:LPARENTH('(')
+          PsiJavaToken:RPARENTH(')')
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace(' ')
+    PsiKeyword:while('while')
+    PsiJavaToken:LPARENTH('(')
+    PsiErrorElement:Expression expected
+      <empty list>
+    PsiJavaToken:RPARENTH(')')
+    PsiJavaToken:SEMICOLON(';')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/DoIncomplete5.txt b/java/java-tests/testData/psi/parser-partial/statements/DoIncomplete5.txt
new file mode 100644
index 0000000..d12e6ae
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/DoIncomplete5.txt
@@ -0,0 +1,30 @@
+PsiJavaFile:DoIncomplete5.java
+  PsiDoWhileStatement
+    PsiKeyword:do('do')
+    PsiWhiteSpace(' ')
+    PsiExpressionStatement
+      PsiMethodCallExpression:foo()
+        PsiReferenceExpression:foo
+          PsiReferenceParameterList
+            <empty list>
+          PsiIdentifier:foo('foo')
+        PsiExpressionList
+          PsiJavaToken:LPARENTH('(')
+          PsiJavaToken:RPARENTH(')')
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace(' ')
+    PsiKeyword:while('while')
+    PsiJavaToken:LPARENTH('(')
+    PsiErrorElement:Expression expected
+      <empty list>
+  PsiWhiteSpace('\n ')
+  PsiExpressionStatement
+    PsiMethodCallExpression:g()
+      PsiReferenceExpression:g
+        PsiReferenceParameterList
+          <empty list>
+        PsiIdentifier:g('g')
+      PsiExpressionList
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+    PsiJavaToken:SEMICOLON(';')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/DoIncomplete6.txt b/java/java-tests/testData/psi/parser-partial/statements/DoIncomplete6.txt
new file mode 100644
index 0000000..7ebaedd
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/DoIncomplete6.txt
@@ -0,0 +1,24 @@
+PsiJavaFile:DoIncomplete6.java
+  PsiDoWhileStatement
+    PsiKeyword:do('do')
+    PsiWhiteSpace(' ')
+    PsiExpressionStatement
+      PsiMethodCallExpression:foo()
+        PsiReferenceExpression:foo
+          PsiReferenceParameterList
+            <empty list>
+          PsiIdentifier:foo('foo')
+        PsiExpressionList
+          PsiJavaToken:LPARENTH('(')
+          PsiJavaToken:RPARENTH(')')
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace(' ')
+    PsiKeyword:while('while')
+    PsiJavaToken:LPARENTH('(')
+    PsiReferenceExpression:cond
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:cond('cond')
+    PsiJavaToken:RPARENTH(')')
+    PsiErrorElement:';' expected
+      <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/DoNormal.txt b/java/java-tests/testData/psi/parser-partial/statements/DoNormal.txt
new file mode 100644
index 0000000..0231c07
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/DoNormal.txt
@@ -0,0 +1,13 @@
+PsiJavaFile:DoNormal.java
+  PsiDoWhileStatement
+    PsiKeyword:do('do')
+    PsiBlockStatement
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiKeyword:while('while')
+    PsiJavaToken:LPARENTH('(')
+    PsiLiteralExpression:true
+      PsiJavaToken:TRUE_KEYWORD('true')
+    PsiJavaToken:RPARENTH(')')
+    PsiJavaToken:SEMICOLON(';')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/For.txt b/java/java-tests/testData/psi/parser-partial/statements/For.txt
new file mode 100644
index 0000000..14d3148
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/For.txt
@@ -0,0 +1,78 @@
+PsiJavaFile:For.java
+  PsiForStatement
+    PsiKeyword:for('for')
+    PsiJavaToken:LPARENTH('(')
+    PsiDeclarationStatement
+      PsiLocalVariable:it
+        PsiModifierList:
+          <empty list>
+        PsiTypeElement:Iterator<String>
+          PsiJavaCodeReferenceElement:Iterator<String>
+            PsiIdentifier:Iterator('Iterator')
+            PsiReferenceParameterList
+              PsiJavaToken:LT('<')
+              PsiTypeElement:String
+                PsiJavaCodeReferenceElement:String
+                  PsiIdentifier:String('String')
+                  PsiReferenceParameterList
+                    <empty list>
+              PsiJavaToken:GT('>')
+        PsiWhiteSpace(' ')
+        PsiIdentifier:it('it')
+        PsiWhiteSpace(' ')
+        PsiJavaToken:EQ('=')
+        PsiWhiteSpace(' ')
+        PsiLiteralExpression:null
+          PsiJavaToken:NULL_KEYWORD('null')
+        PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace(' ')
+    PsiMethodCallExpression:it.hasNext()
+      PsiReferenceExpression:it.hasNext
+        PsiReferenceExpression:it
+          PsiReferenceParameterList
+            <empty list>
+          PsiIdentifier:it('it')
+        PsiJavaToken:DOT('.')
+        PsiReferenceParameterList
+          <empty list>
+        PsiIdentifier:hasNext('hasNext')
+      PsiExpressionList
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+    PsiJavaToken:SEMICOLON(';')
+    PsiJavaToken:RPARENTH(')')
+    PsiWhiteSpace(' ')
+    PsiBlockStatement
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace(' ')
+        PsiDeclarationStatement
+          PsiLocalVariable:s
+            PsiModifierList:
+              <empty list>
+            PsiTypeElement:String
+              PsiJavaCodeReferenceElement:String
+                PsiIdentifier:String('String')
+                PsiReferenceParameterList
+                  <empty list>
+            PsiWhiteSpace(' ')
+            PsiIdentifier:s('s')
+            PsiWhiteSpace(' ')
+            PsiJavaToken:EQ('=')
+            PsiWhiteSpace(' ')
+            PsiMethodCallExpression:it.next()
+              PsiReferenceExpression:it.next
+                PsiReferenceExpression:it
+                  PsiReferenceParameterList
+                    <empty list>
+                  PsiIdentifier:it('it')
+                PsiJavaToken:DOT('.')
+                PsiReferenceParameterList
+                  <empty list>
+                PsiIdentifier:next('next')
+              PsiExpressionList
+                PsiJavaToken:LPARENTH('(')
+                PsiJavaToken:RPARENTH(')')
+            PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace(' ')
+        PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/ForEach.txt b/java/java-tests/testData/psi/parser-partial/statements/ForEach.txt
new file mode 100644
index 0000000..ae3dfe4
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/ForEach.txt
@@ -0,0 +1,34 @@
+PsiJavaFile:ForEach.java
+  PsiForeachStatement
+    PsiKeyword:for('for')
+    PsiJavaToken:LPARENTH('(')
+    PsiParameter:o
+      PsiModifierList:
+        <empty list>
+      PsiTypeElement:Object
+        PsiJavaCodeReferenceElement:Object
+          PsiIdentifier:Object('Object')
+          PsiReferenceParameterList
+            <empty list>
+      PsiWhiteSpace(' ')
+      PsiIdentifier:o('o')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:COLON(':')
+    PsiWhiteSpace(' ')
+    PsiMethodCallExpression:map.entrySet()
+      PsiReferenceExpression:map.entrySet
+        PsiReferenceExpression:map
+          PsiReferenceParameterList
+            <empty list>
+          PsiIdentifier:map('map')
+        PsiJavaToken:DOT('.')
+        PsiReferenceParameterList
+          <empty list>
+        PsiIdentifier:entrySet('entrySet')
+      PsiExpressionList
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+    PsiJavaToken:RPARENTH(')')
+    PsiWhiteSpace(' ')
+    PsiEmptyStatement
+      PsiJavaToken:SEMICOLON(';')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/ForEachIncomplete0.txt b/java/java-tests/testData/psi/parser-partial/statements/ForEachIncomplete0.txt
new file mode 100644
index 0000000..d91ecaf
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/ForEachIncomplete0.txt
@@ -0,0 +1,22 @@
+PsiJavaFile:ForEachIncomplete0.java
+  PsiForStatement
+    PsiKeyword:for('for')
+    PsiJavaToken:LPARENTH('(')
+    PsiLabeledStatement
+      PsiIdentifier:Object('Object')
+      PsiWhiteSpace('  ')
+      PsiJavaToken:COLON(':')
+      PsiWhiteSpace(' ')
+      PsiExpressionStatement
+        PsiReferenceExpression:list
+          PsiReferenceParameterList
+            <empty list>
+          PsiIdentifier:list('list')
+        PsiErrorElement:';' expected
+          <empty list>
+    PsiErrorElement:';' expected
+      <empty list>
+    PsiJavaToken:RPARENTH(')')
+    PsiWhiteSpace(' ')
+    PsiEmptyStatement
+      PsiJavaToken:SEMICOLON(';')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/ForIncomplete0.txt b/java/java-tests/testData/psi/parser-partial/statements/ForIncomplete0.txt
new file mode 100644
index 0000000..870d061
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/ForIncomplete0.txt
@@ -0,0 +1,5 @@
+PsiJavaFile:ForIncomplete0.java
+  PsiForStatement
+    PsiKeyword:for('for')
+    PsiErrorElement:'(' expected
+      <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/ForIncomplete1.txt b/java/java-tests/testData/psi/parser-partial/statements/ForIncomplete1.txt
new file mode 100644
index 0000000..8fd545e
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/ForIncomplete1.txt
@@ -0,0 +1,6 @@
+PsiJavaFile:ForIncomplete1.java
+  PsiForStatement
+    PsiKeyword:for('for')
+    PsiJavaToken:LPARENTH('(')
+    PsiErrorElement:Statement expected
+      <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/ForIncomplete2.txt b/java/java-tests/testData/psi/parser-partial/statements/ForIncomplete2.txt
new file mode 100644
index 0000000..4b2d18f
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/ForIncomplete2.txt
@@ -0,0 +1,20 @@
+PsiJavaFile:ForIncomplete2.java
+  PsiForStatement
+    PsiKeyword:for('for')
+    PsiJavaToken:LPARENTH('(')
+    PsiDeclarationStatement
+      PsiLocalVariable:i
+        PsiModifierList:
+          <empty list>
+        PsiTypeElement:int
+          PsiKeyword:int('int')
+        PsiWhiteSpace(' ')
+        PsiIdentifier:i('i')
+        PsiWhiteSpace(' ')
+        PsiJavaToken:EQ('=')
+        PsiWhiteSpace(' ')
+        PsiLiteralExpression:0
+          PsiJavaToken:INTEGER_LITERAL('0')
+        PsiJavaToken:SEMICOLON(';')
+    PsiErrorElement:';' expected
+      <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/ForIncomplete3.txt b/java/java-tests/testData/psi/parser-partial/statements/ForIncomplete3.txt
new file mode 100644
index 0000000..da74a25
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/ForIncomplete3.txt
@@ -0,0 +1,31 @@
+PsiJavaFile:ForIncomplete3.java
+  PsiForStatement
+    PsiKeyword:for('for')
+    PsiJavaToken:LPARENTH('(')
+    PsiDeclarationStatement
+      PsiLocalVariable:i
+        PsiModifierList:
+          <empty list>
+        PsiTypeElement:int
+          PsiKeyword:int('int')
+        PsiWhiteSpace(' ')
+        PsiIdentifier:i('i')
+        PsiWhiteSpace(' ')
+        PsiJavaToken:EQ('=')
+        PsiWhiteSpace(' ')
+        PsiLiteralExpression:0
+          PsiJavaToken:INTEGER_LITERAL('0')
+        PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace(' ')
+    PsiBinaryExpression:i < 10
+      PsiReferenceExpression:i
+        PsiReferenceParameterList
+          <empty list>
+        PsiIdentifier:i('i')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:LT('<')
+      PsiWhiteSpace(' ')
+      PsiLiteralExpression:10
+        PsiJavaToken:INTEGER_LITERAL('10')
+    PsiErrorElement:';' expected
+      <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/ForIncomplete4.txt b/java/java-tests/testData/psi/parser-partial/statements/ForIncomplete4.txt
new file mode 100644
index 0000000..e2680cc
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/ForIncomplete4.txt
@@ -0,0 +1,32 @@
+PsiJavaFile:ForIncomplete4.java
+  PsiForStatement
+    PsiKeyword:for('for')
+    PsiJavaToken:LPARENTH('(')
+    PsiDeclarationStatement
+      PsiLocalVariable:i
+        PsiModifierList:
+          <empty list>
+        PsiTypeElement:int
+          PsiKeyword:int('int')
+        PsiWhiteSpace(' ')
+        PsiIdentifier:i('i')
+        PsiWhiteSpace(' ')
+        PsiJavaToken:EQ('=')
+        PsiWhiteSpace(' ')
+        PsiLiteralExpression:0
+          PsiJavaToken:INTEGER_LITERAL('0')
+        PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace(' ')
+    PsiBinaryExpression:i < 10
+      PsiReferenceExpression:i
+        PsiReferenceParameterList
+          <empty list>
+        PsiIdentifier:i('i')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:LT('<')
+      PsiWhiteSpace(' ')
+      PsiLiteralExpression:10
+        PsiJavaToken:INTEGER_LITERAL('10')
+    PsiJavaToken:SEMICOLON(';')
+    PsiErrorElement:')' expected
+      <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/ForIncomplete5.txt b/java/java-tests/testData/psi/parser-partial/statements/ForIncomplete5.txt
new file mode 100644
index 0000000..b0e84a6
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/ForIncomplete5.txt
@@ -0,0 +1,40 @@
+PsiJavaFile:ForIncomplete5.java
+  PsiForStatement
+    PsiKeyword:for('for')
+    PsiJavaToken:LPARENTH('(')
+    PsiDeclarationStatement
+      PsiLocalVariable:i
+        PsiModifierList:
+          <empty list>
+        PsiTypeElement:int
+          PsiKeyword:int('int')
+        PsiWhiteSpace(' ')
+        PsiIdentifier:i('i')
+        PsiWhiteSpace(' ')
+        PsiJavaToken:EQ('=')
+        PsiWhiteSpace(' ')
+        PsiLiteralExpression:0
+          PsiJavaToken:INTEGER_LITERAL('0')
+        PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace(' ')
+    PsiBinaryExpression:i < 10
+      PsiReferenceExpression:i
+        PsiReferenceParameterList
+          <empty list>
+        PsiIdentifier:i('i')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:LT('<')
+      PsiWhiteSpace(' ')
+      PsiLiteralExpression:10
+        PsiJavaToken:INTEGER_LITERAL('10')
+    PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace(' ')
+    PsiExpressionStatement
+      PsiPostfixExpression:i++
+        PsiReferenceExpression:i
+          PsiReferenceParameterList
+            <empty list>
+          PsiIdentifier:i('i')
+        PsiJavaToken:PLUSPLUS('++')
+    PsiErrorElement:')' expected
+      <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/ForIncomplete6.txt b/java/java-tests/testData/psi/parser-partial/statements/ForIncomplete6.txt
new file mode 100644
index 0000000..b10012e
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/ForIncomplete6.txt
@@ -0,0 +1,41 @@
+PsiJavaFile:ForIncomplete6.java
+  PsiForStatement
+    PsiKeyword:for('for')
+    PsiJavaToken:LPARENTH('(')
+    PsiDeclarationStatement
+      PsiLocalVariable:i
+        PsiModifierList:
+          <empty list>
+        PsiTypeElement:int
+          PsiKeyword:int('int')
+        PsiWhiteSpace(' ')
+        PsiIdentifier:i('i')
+        PsiWhiteSpace(' ')
+        PsiJavaToken:EQ('=')
+        PsiWhiteSpace(' ')
+        PsiLiteralExpression:0
+          PsiJavaToken:INTEGER_LITERAL('0')
+        PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace(' ')
+    PsiBinaryExpression:i < 10
+      PsiReferenceExpression:i
+        PsiReferenceParameterList
+          <empty list>
+        PsiIdentifier:i('i')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:LT('<')
+      PsiWhiteSpace(' ')
+      PsiLiteralExpression:10
+        PsiJavaToken:INTEGER_LITERAL('10')
+    PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace(' ')
+    PsiExpressionStatement
+      PsiPostfixExpression:i++
+        PsiReferenceExpression:i
+          PsiReferenceParameterList
+            <empty list>
+          PsiIdentifier:i('i')
+        PsiJavaToken:PLUSPLUS('++')
+    PsiJavaToken:RPARENTH(')')
+    PsiErrorElement:Statement expected
+      <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/ForIncomplete7.txt b/java/java-tests/testData/psi/parser-partial/statements/ForIncomplete7.txt
new file mode 100644
index 0000000..6f57b8c
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/ForIncomplete7.txt
@@ -0,0 +1,18 @@
+PsiJavaFile:ForIncomplete7.java
+  PsiForStatement
+    PsiKeyword:for('for')
+    PsiJavaToken:LPARENTH('(')
+    PsiErrorElement:Statement expected
+      <empty list>
+    PsiJavaToken:RPARENTH(')')
+    PsiWhiteSpace(' ')
+    PsiExpressionStatement
+      PsiMethodCallExpression:foo()
+        PsiReferenceExpression:foo
+          PsiReferenceParameterList
+            <empty list>
+          PsiIdentifier:foo('foo')
+        PsiExpressionList
+          PsiJavaToken:LPARENTH('(')
+          PsiJavaToken:RPARENTH(')')
+      PsiJavaToken:SEMICOLON(';')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/ForIncomplete8.txt b/java/java-tests/testData/psi/parser-partial/statements/ForIncomplete8.txt
new file mode 100644
index 0000000..684d816
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/ForIncomplete8.txt
@@ -0,0 +1,32 @@
+PsiJavaFile:ForIncomplete8.java
+  PsiForStatement
+    PsiKeyword:for('for')
+    PsiJavaToken:LPARENTH('(')
+    PsiDeclarationStatement
+      PsiLocalVariable:i
+        PsiModifierList:
+          <empty list>
+        PsiTypeElement:int
+          PsiKeyword:int('int')
+        PsiWhiteSpace(' ')
+        PsiIdentifier:i('i')
+        PsiWhiteSpace(' ')
+        PsiJavaToken:EQ('=')
+        PsiWhiteSpace(' ')
+        PsiLiteralExpression:0
+          PsiJavaToken:INTEGER_LITERAL('0')
+        PsiJavaToken:SEMICOLON(';')
+    PsiErrorElement:';' expected
+      <empty list>
+    PsiJavaToken:RPARENTH(')')
+    PsiWhiteSpace(' ')
+    PsiExpressionStatement
+      PsiMethodCallExpression:foo()
+        PsiReferenceExpression:foo
+          PsiReferenceParameterList
+            <empty list>
+          PsiIdentifier:foo('foo')
+        PsiExpressionList
+          PsiJavaToken:LPARENTH('(')
+          PsiJavaToken:RPARENTH(')')
+      PsiJavaToken:SEMICOLON(';')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/ForIncomplete9.txt b/java/java-tests/testData/psi/parser-partial/statements/ForIncomplete9.txt
new file mode 100644
index 0000000..994784c
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/ForIncomplete9.txt
@@ -0,0 +1,43 @@
+PsiJavaFile:ForIncomplete9.java
+  PsiForStatement
+    PsiKeyword:for('for')
+    PsiJavaToken:LPARENTH('(')
+    PsiDeclarationStatement
+      PsiLocalVariable:i
+        PsiModifierList:
+          <empty list>
+        PsiTypeElement:int
+          PsiKeyword:int('int')
+        PsiWhiteSpace(' ')
+        PsiIdentifier:i('i')
+        PsiWhiteSpace(' ')
+        PsiJavaToken:EQ('=')
+        PsiWhiteSpace(' ')
+        PsiLiteralExpression:0
+          PsiJavaToken:INTEGER_LITERAL('0')
+        PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace(' ')
+    PsiBinaryExpression:i < 0
+      PsiReferenceExpression:i
+        PsiReferenceParameterList
+          <empty list>
+        PsiIdentifier:i('i')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:LT('<')
+      PsiWhiteSpace(' ')
+      PsiLiteralExpression:0
+        PsiJavaToken:INTEGER_LITERAL('0')
+    PsiErrorElement:';' expected
+      <empty list>
+    PsiJavaToken:RPARENTH(')')
+    PsiWhiteSpace(' ')
+    PsiExpressionStatement
+      PsiMethodCallExpression:foo()
+        PsiReferenceExpression:foo
+          PsiReferenceParameterList
+            <empty list>
+          PsiIdentifier:foo('foo')
+        PsiExpressionList
+          PsiJavaToken:LPARENTH('(')
+          PsiJavaToken:RPARENTH(')')
+      PsiJavaToken:SEMICOLON(';')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/ForNormal0.txt b/java/java-tests/testData/psi/parser-partial/statements/ForNormal0.txt
new file mode 100644
index 0000000..385bf13
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/ForNormal0.txt
@@ -0,0 +1,42 @@
+PsiJavaFile:ForNormal0.java
+  PsiForStatement
+    PsiKeyword:for('for')
+    PsiJavaToken:LPARENTH('(')
+    PsiDeclarationStatement
+      PsiLocalVariable:i
+        PsiModifierList:
+          <empty list>
+        PsiTypeElement:int
+          PsiKeyword:int('int')
+        PsiWhiteSpace(' ')
+        PsiIdentifier:i('i')
+        PsiWhiteSpace(' ')
+        PsiJavaToken:EQ('=')
+        PsiWhiteSpace(' ')
+        PsiLiteralExpression:0
+          PsiJavaToken:INTEGER_LITERAL('0')
+        PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace(' ')
+    PsiBinaryExpression:i < 10
+      PsiReferenceExpression:i
+        PsiReferenceParameterList
+          <empty list>
+        PsiIdentifier:i('i')
+      PsiWhiteSpace(' ')
+      PsiJavaToken:LT('<')
+      PsiWhiteSpace(' ')
+      PsiLiteralExpression:10
+        PsiJavaToken:INTEGER_LITERAL('10')
+    PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace(' ')
+    PsiExpressionStatement
+      PsiPostfixExpression:i++
+        PsiReferenceExpression:i
+          PsiReferenceParameterList
+            <empty list>
+          PsiIdentifier:i('i')
+        PsiJavaToken:PLUSPLUS('++')
+    PsiJavaToken:RPARENTH(')')
+    PsiWhiteSpace('\n ')
+    PsiEmptyStatement
+      PsiJavaToken:SEMICOLON(';')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/ForNormal1.txt b/java/java-tests/testData/psi/parser-partial/statements/ForNormal1.txt
new file mode 100644
index 0000000..26c233b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/ForNormal1.txt
@@ -0,0 +1,22 @@
+PsiJavaFile:ForNormal1.java
+  PsiForStatement
+    PsiKeyword:for('for')
+    PsiJavaToken:LPARENTH('(')
+    PsiWhiteSpace(' ')
+    PsiEmptyStatement
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:RPARENTH(')')
+    PsiWhiteSpace(' ')
+    PsiExpressionStatement
+      PsiMethodCallExpression:foo()
+        PsiReferenceExpression:foo
+          PsiReferenceParameterList
+            <empty list>
+          PsiIdentifier:foo('foo')
+        PsiExpressionList
+          PsiJavaToken:LPARENTH('(')
+          PsiJavaToken:RPARENTH(')')
+      PsiJavaToken:SEMICOLON(';')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/IfIncomplete0.txt b/java/java-tests/testData/psi/parser-partial/statements/IfIncomplete0.txt
new file mode 100644
index 0000000..48bbf38
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/IfIncomplete0.txt
@@ -0,0 +1,5 @@
+PsiJavaFile:IfIncomplete0.java
+  PsiIfStatement
+    PsiKeyword:if('if')
+    PsiErrorElement:'(' expected
+      <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/IfIncomplete1.txt b/java/java-tests/testData/psi/parser-partial/statements/IfIncomplete1.txt
new file mode 100644
index 0000000..c0267db
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/IfIncomplete1.txt
@@ -0,0 +1,7 @@
+PsiJavaFile:IfIncomplete1.java
+  PsiIfStatement
+    PsiKeyword:if('if')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LPARENTH('(')
+    PsiErrorElement:Expression expected
+      <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/IfIncomplete2.txt b/java/java-tests/testData/psi/parser-partial/statements/IfIncomplete2.txt
new file mode 100644
index 0000000..ea62efc
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/IfIncomplete2.txt
@@ -0,0 +1,18 @@
+PsiJavaFile:IfIncomplete2.java
+  PsiIfStatement
+    PsiKeyword:if('if')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LPARENTH('(')
+    PsiErrorElement:Expression expected
+      <empty list>
+  PsiWhiteSpace('\n ')
+  PsiExpressionStatement
+    PsiMethodCallExpression:foo()
+      PsiReferenceExpression:foo
+        PsiReferenceParameterList
+          <empty list>
+        PsiIdentifier:foo('foo')
+      PsiExpressionList
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+    PsiJavaToken:SEMICOLON(';')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/IfIncomplete3.txt b/java/java-tests/testData/psi/parser-partial/statements/IfIncomplete3.txt
new file mode 100644
index 0000000..bd83906
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/IfIncomplete3.txt
@@ -0,0 +1,11 @@
+PsiJavaFile:IfIncomplete3.java
+  PsiIfStatement
+    PsiKeyword:if('if')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LPARENTH('(')
+    PsiReferenceExpression:cond
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:cond('cond')
+    PsiErrorElement:')' expected
+      <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/IfIncomplete4.txt b/java/java-tests/testData/psi/parser-partial/statements/IfIncomplete4.txt
new file mode 100644
index 0000000..bc0901d
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/IfIncomplete4.txt
@@ -0,0 +1,12 @@
+PsiJavaFile:IfIncomplete4.java
+  PsiIfStatement
+    PsiKeyword:if('if')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LPARENTH('(')
+    PsiReferenceExpression:cond
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:cond('cond')
+    PsiJavaToken:RPARENTH(')')
+    PsiErrorElement:Statement expected
+      <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/IfIncomplete5.txt b/java/java-tests/testData/psi/parser-partial/statements/IfIncomplete5.txt
new file mode 100644
index 0000000..ee6a4ae
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/IfIncomplete5.txt
@@ -0,0 +1,19 @@
+PsiJavaFile:IfIncomplete5.java
+  PsiIfStatement
+    PsiKeyword:if('if')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LPARENTH('(')
+    PsiErrorElement:Expression expected
+      <empty list>
+    PsiJavaToken:RPARENTH(')')
+    PsiWhiteSpace(' ')
+    PsiExpressionStatement
+      PsiMethodCallExpression:foo()
+        PsiReferenceExpression:foo
+          PsiReferenceParameterList
+            <empty list>
+          PsiIdentifier:foo('foo')
+        PsiExpressionList
+          PsiJavaToken:LPARENTH('(')
+          PsiJavaToken:RPARENTH(')')
+      PsiJavaToken:SEMICOLON(';')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/IfIncomplete6.txt b/java/java-tests/testData/psi/parser-partial/statements/IfIncomplete6.txt
new file mode 100644
index 0000000..65ab3d3
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/IfIncomplete6.txt
@@ -0,0 +1,25 @@
+PsiJavaFile:IfIncomplete6.java
+  PsiIfStatement
+    PsiKeyword:if('if')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LPARENTH('(')
+    PsiReferenceExpression:cond
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:cond('cond')
+    PsiJavaToken:RPARENTH(')')
+    PsiWhiteSpace(' ')
+    PsiExpressionStatement
+      PsiMethodCallExpression:foo()
+        PsiReferenceExpression:foo
+          PsiReferenceParameterList
+            <empty list>
+          PsiIdentifier:foo('foo')
+        PsiExpressionList
+          PsiJavaToken:LPARENTH('(')
+          PsiJavaToken:RPARENTH(')')
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace(' ')
+    PsiKeyword:else('else')
+    PsiErrorElement:Statement expected
+      <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/IfNormalNoElse.txt b/java/java-tests/testData/psi/parser-partial/statements/IfNormalNoElse.txt
new file mode 100644
index 0000000..5311bd0
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/IfNormalNoElse.txt
@@ -0,0 +1,21 @@
+PsiJavaFile:IfNormalNoElse.java
+  PsiIfStatement
+    PsiKeyword:if('if')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LPARENTH('(')
+    PsiReferenceExpression:a
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:a('a')
+    PsiJavaToken:RPARENTH(')')
+    PsiWhiteSpace(' ')
+    PsiExpressionStatement
+      PsiMethodCallExpression:f1()
+        PsiReferenceExpression:f1
+          PsiReferenceParameterList
+            <empty list>
+          PsiIdentifier:f1('f1')
+        PsiExpressionList
+          PsiJavaToken:LPARENTH('(')
+          PsiJavaToken:RPARENTH(')')
+      PsiJavaToken:SEMICOLON(';')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/IfNormalWithElse.txt b/java/java-tests/testData/psi/parser-partial/statements/IfNormalWithElse.txt
new file mode 100644
index 0000000..5212905
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/IfNormalWithElse.txt
@@ -0,0 +1,44 @@
+PsiJavaFile:IfNormalWithElse.java
+  PsiIfStatement
+    PsiKeyword:if('if')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LPARENTH('(')
+    PsiReferenceExpression:a
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:a('a')
+    PsiJavaToken:RPARENTH(')')
+    PsiBlockStatement
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace(' ')
+        PsiExpressionStatement
+          PsiMethodCallExpression:f1()
+            PsiReferenceExpression:f1
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:f1('f1')
+            PsiExpressionList
+              PsiJavaToken:LPARENTH('(')
+              PsiJavaToken:RPARENTH(')')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace(' ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace(' ')
+    PsiKeyword:else('else')
+    PsiBlockStatement
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace(' ')
+        PsiExpressionStatement
+          PsiMethodCallExpression:f2()
+            PsiReferenceExpression:f2
+              PsiReferenceParameterList
+                <empty list>
+              PsiIdentifier:f2('f2')
+            PsiExpressionList
+              PsiJavaToken:LPARENTH('(')
+              PsiJavaToken:RPARENTH(')')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace(' ')
+        PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/LabelSimple.txt b/java/java-tests/testData/psi/parser-partial/statements/LabelSimple.txt
new file mode 100644
index 0000000..1dacbac
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/LabelSimple.txt
@@ -0,0 +1,14 @@
+PsiJavaFile:LabelSimple.java
+  PsiLabeledStatement
+    PsiIdentifier:Loop('Loop')
+    PsiJavaToken:COLON(':')
+    PsiWhiteSpace('\n ')
+    PsiWhileStatement
+      PsiKeyword:while('while')
+      PsiJavaToken:LPARENTH('(')
+      PsiLiteralExpression:true
+        PsiJavaToken:TRUE_KEYWORD('true')
+      PsiJavaToken:RPARENTH(')')
+      PsiWhiteSpace(' ')
+      PsiEmptyStatement
+        PsiJavaToken:SEMICOLON(';')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/LocalVar.txt b/java/java-tests/testData/psi/parser-partial/statements/LocalVar.txt
new file mode 100644
index 0000000..e36614d
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/LocalVar.txt
@@ -0,0 +1,19 @@
+PsiJavaFile:LocalVar.java
+  PsiDeclarationStatement
+    PsiLocalVariable:list
+      PsiModifierList:
+        <empty list>
+      PsiTypeElement:List<Integer>
+        PsiJavaCodeReferenceElement:List<Integer>
+          PsiIdentifier:List('List')
+          PsiReferenceParameterList
+            PsiJavaToken:LT('<')
+            PsiTypeElement:Integer
+              PsiJavaCodeReferenceElement:Integer
+                PsiIdentifier:Integer('Integer')
+                PsiReferenceParameterList
+                  <empty list>
+            PsiJavaToken:GT('>')
+      PsiWhiteSpace(' ')
+      PsiIdentifier:list('list')
+      PsiJavaToken:SEMICOLON(';')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/ReturnIncomplete0.txt b/java/java-tests/testData/psi/parser-partial/statements/ReturnIncomplete0.txt
new file mode 100644
index 0000000..813c70f
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/ReturnIncomplete0.txt
@@ -0,0 +1,5 @@
+PsiJavaFile:ReturnIncomplete0.java
+  PsiReturnStatement
+    PsiKeyword:return('return')
+    PsiErrorElement:';' expected
+      <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/ReturnIncomplete1.txt b/java/java-tests/testData/psi/parser-partial/statements/ReturnIncomplete1.txt
new file mode 100644
index 0000000..f499787
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/ReturnIncomplete1.txt
@@ -0,0 +1,10 @@
+PsiJavaFile:ReturnIncomplete1.java
+  PsiReturnStatement
+    PsiKeyword:return('return')
+    PsiWhiteSpace(' ')
+    PsiReferenceExpression:a
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:a('a')
+    PsiErrorElement:';' expected
+      <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/ReturnNoResult.txt b/java/java-tests/testData/psi/parser-partial/statements/ReturnNoResult.txt
new file mode 100644
index 0000000..28c5267
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/ReturnNoResult.txt
@@ -0,0 +1,4 @@
+PsiJavaFile:ReturnNoResult.java
+  PsiReturnStatement
+    PsiKeyword:return('return')
+    PsiJavaToken:SEMICOLON(';')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/ReturnWithResult.txt b/java/java-tests/testData/psi/parser-partial/statements/ReturnWithResult.txt
new file mode 100644
index 0000000..65b7c19
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/ReturnWithResult.txt
@@ -0,0 +1,7 @@
+PsiJavaFile:ReturnWithResult.java
+  PsiReturnStatement
+    PsiKeyword:return('return')
+    PsiWhiteSpace(' ')
+    PsiLiteralExpression:10
+      PsiJavaToken:INTEGER_LITERAL('10')
+    PsiJavaToken:SEMICOLON(';')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/SCR5202.txt b/java/java-tests/testData/psi/parser-partial/statements/SCR5202.txt
new file mode 100644
index 0000000..3f897a1
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/SCR5202.txt
@@ -0,0 +1,35 @@
+PsiJavaFile:SCR5202.java
+  PsiCodeBlock
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace(' ')
+    PsiExpressionStatement
+      PsiReferenceExpression:String.class.
+ String
+        PsiClassObjectAccessExpression:String.class
+          PsiTypeElement:String
+            PsiJavaCodeReferenceElement:String
+              PsiIdentifier:String('String')
+              PsiReferenceParameterList
+                <empty list>
+          PsiJavaToken:DOT('.')
+          PsiKeyword:class('class')
+        PsiJavaToken:DOT('.')
+        PsiReferenceParameterList
+          <empty list>
+        PsiWhiteSpace('\n ')
+        PsiIdentifier:String('String')
+      PsiErrorElement:';' expected
+        <empty list>
+    PsiErrorElement:Unexpected token
+      PsiJavaToken:LBRACKET('[')
+    PsiErrorElement:Unexpected token
+      PsiJavaToken:RBRACKET(']')
+    PsiWhiteSpace(' ')
+    PsiExpressionStatement
+      PsiReferenceExpression:strings
+        PsiReferenceParameterList
+          <empty list>
+        PsiIdentifier:strings('strings')
+      PsiJavaToken:SEMICOLON(';')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/SwitchIncomplete0.txt b/java/java-tests/testData/psi/parser-partial/statements/SwitchIncomplete0.txt
new file mode 100644
index 0000000..b7027b6
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/SwitchIncomplete0.txt
@@ -0,0 +1,5 @@
+PsiJavaFile:SwitchIncomplete0.java
+  PsiSwitchStatement
+    PsiKeyword:switch('switch')
+    PsiErrorElement:'(' expected
+      <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/SwitchIncomplete1.txt b/java/java-tests/testData/psi/parser-partial/statements/SwitchIncomplete1.txt
new file mode 100644
index 0000000..7a961d9
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/SwitchIncomplete1.txt
@@ -0,0 +1,6 @@
+PsiJavaFile:SwitchIncomplete1.java
+  PsiSwitchStatement
+    PsiKeyword:switch('switch')
+    PsiJavaToken:LPARENTH('(')
+    PsiErrorElement:Expression expected
+      <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/SwitchIncomplete2.txt b/java/java-tests/testData/psi/parser-partial/statements/SwitchIncomplete2.txt
new file mode 100644
index 0000000..3822dca
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/SwitchIncomplete2.txt
@@ -0,0 +1,10 @@
+PsiJavaFile:SwitchIncomplete2.java
+  PsiSwitchStatement
+    PsiKeyword:switch('switch')
+    PsiJavaToken:LPARENTH('(')
+    PsiReferenceExpression:o
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:o('o')
+    PsiErrorElement:')' expected
+      <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/SwitchIncomplete3.txt b/java/java-tests/testData/psi/parser-partial/statements/SwitchIncomplete3.txt
new file mode 100644
index 0000000..747c912
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/SwitchIncomplete3.txt
@@ -0,0 +1,11 @@
+PsiJavaFile:SwitchIncomplete3.java
+  PsiSwitchStatement
+    PsiKeyword:switch('switch')
+    PsiJavaToken:LPARENTH('(')
+    PsiReferenceExpression:o
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:o('o')
+    PsiJavaToken:RPARENTH(')')
+    PsiErrorElement:'{' expected
+      <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/SwitchIncomplete4.txt b/java/java-tests/testData/psi/parser-partial/statements/SwitchIncomplete4.txt
new file mode 100644
index 0000000..bb797ce
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/SwitchIncomplete4.txt
@@ -0,0 +1,10 @@
+PsiJavaFile:SwitchIncomplete4.java
+  PsiSwitchStatement
+    PsiKeyword:switch('switch')
+    PsiJavaToken:LPARENTH('(')
+    PsiErrorElement:Expression expected
+      <empty list>
+    PsiJavaToken:RPARENTH(')')
+    PsiCodeBlock
+      PsiJavaToken:LBRACE('{')
+      PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/SwitchIncomplete5.txt b/java/java-tests/testData/psi/parser-partial/statements/SwitchIncomplete5.txt
new file mode 100644
index 0000000..ba90ef8
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/SwitchIncomplete5.txt
@@ -0,0 +1,17 @@
+PsiJavaFile:SwitchIncomplete5.java
+  PsiSwitchStatement
+    PsiKeyword:switch('switch')
+    PsiJavaToken:LPARENTH('(')
+    PsiErrorElement:Expression expected
+      <empty list>
+  PsiWhiteSpace('\n ')
+  PsiExpressionStatement
+    PsiMethodCallExpression:foo()
+      PsiReferenceExpression:foo
+        PsiReferenceParameterList
+          <empty list>
+        PsiIdentifier:foo('foo')
+      PsiExpressionList
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+    PsiJavaToken:SEMICOLON(';')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/SwitchLabelsIncomplete0.txt b/java/java-tests/testData/psi/parser-partial/statements/SwitchLabelsIncomplete0.txt
new file mode 100644
index 0000000..98d17d5
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/SwitchLabelsIncomplete0.txt
@@ -0,0 +1,3 @@
+PsiJavaFile:SwitchLabelsIncomplete0.java
+  PsiErrorElement:Unexpected token
+    PsiKeyword:case('case')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/SwitchLabelsIncomplete1.txt b/java/java-tests/testData/psi/parser-partial/statements/SwitchLabelsIncomplete1.txt
new file mode 100644
index 0000000..32e4e94
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/SwitchLabelsIncomplete1.txt
@@ -0,0 +1,8 @@
+PsiJavaFile:SwitchLabelsIncomplete1.java
+  PsiSwitchLabelStatement
+    PsiKeyword:case('case')
+    PsiWhiteSpace(' ')
+    PsiLiteralExpression:2
+      PsiJavaToken:INTEGER_LITERAL('2')
+    PsiErrorElement:':' expected
+      <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/SwitchLabelsIncomplete2.txt b/java/java-tests/testData/psi/parser-partial/statements/SwitchLabelsIncomplete2.txt
new file mode 100644
index 0000000..3a27abb
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/SwitchLabelsIncomplete2.txt
@@ -0,0 +1,5 @@
+PsiJavaFile:SwitchLabelsIncomplete2.java
+  PsiSwitchLabelStatement
+    PsiKeyword:default('default')
+    PsiErrorElement:':' expected
+      <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/SwitchLabelsIncomplete3.txt b/java/java-tests/testData/psi/parser-partial/statements/SwitchLabelsIncomplete3.txt
new file mode 100644
index 0000000..1560427
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/SwitchLabelsIncomplete3.txt
@@ -0,0 +1,13 @@
+PsiJavaFile:SwitchLabelsIncomplete3.java
+  PsiSwitchLabelStatement
+    PsiKeyword:default('default')
+    PsiErrorElement:':' expected
+      <empty list>
+  PsiWhiteSpace(' ')
+  PsiExpressionStatement
+    PsiLiteralExpression:3
+      PsiJavaToken:INTEGER_LITERAL('3')
+    PsiErrorElement:';' expected
+      <empty list>
+  PsiErrorElement:Unexpected token
+    PsiJavaToken:COLON(':')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/SwitchLabelsNormal.txt b/java/java-tests/testData/psi/parser-partial/statements/SwitchLabelsNormal.txt
new file mode 100644
index 0000000..0a50f18
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/SwitchLabelsNormal.txt
@@ -0,0 +1,19 @@
+PsiJavaFile:SwitchLabelsNormal.java
+  PsiSwitchLabelStatement
+    PsiKeyword:case('case')
+    PsiWhiteSpace(' ')
+    PsiLiteralExpression:1
+      PsiJavaToken:INTEGER_LITERAL('1')
+    PsiJavaToken:COLON(':')
+  PsiWhiteSpace(' ')
+  PsiBreakStatement
+    PsiKeyword:break('break')
+    PsiJavaToken:SEMICOLON(';')
+  PsiWhiteSpace(' ')
+  PsiSwitchLabelStatement
+    PsiKeyword:default('default')
+    PsiJavaToken:COLON(':')
+  PsiWhiteSpace(' ')
+  PsiBreakStatement
+    PsiKeyword:break('break')
+    PsiJavaToken:SEMICOLON(';')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/SwitchNormal.txt b/java/java-tests/testData/psi/parser-partial/statements/SwitchNormal.txt
new file mode 100644
index 0000000..c8c5271
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/SwitchNormal.txt
@@ -0,0 +1,12 @@
+PsiJavaFile:SwitchNormal.java
+  PsiSwitchStatement
+    PsiKeyword:switch('switch')
+    PsiJavaToken:LPARENTH('(')
+    PsiReferenceExpression:o
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:o('o')
+    PsiJavaToken:RPARENTH(')')
+    PsiCodeBlock
+      PsiJavaToken:LBRACE('{')
+      PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/SyncIncomplete0.txt b/java/java-tests/testData/psi/parser-partial/statements/SyncIncomplete0.txt
new file mode 100644
index 0000000..3d8eb77
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/SyncIncomplete0.txt
@@ -0,0 +1,5 @@
+PsiJavaFile:SyncIncomplete0.java
+  PsiSynchronizedStatement
+    PsiKeyword:synchronized('synchronized')
+    PsiErrorElement:'(' expected
+      <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/SyncIncomplete1.txt b/java/java-tests/testData/psi/parser-partial/statements/SyncIncomplete1.txt
new file mode 100644
index 0000000..f91ec18
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/SyncIncomplete1.txt
@@ -0,0 +1,6 @@
+PsiJavaFile:SyncIncomplete1.java
+  PsiSynchronizedStatement
+    PsiKeyword:synchronized('synchronized')
+    PsiJavaToken:LPARENTH('(')
+    PsiErrorElement:Expression expected
+      <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/SyncIncomplete2.txt b/java/java-tests/testData/psi/parser-partial/statements/SyncIncomplete2.txt
new file mode 100644
index 0000000..43f7474
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/SyncIncomplete2.txt
@@ -0,0 +1,10 @@
+PsiJavaFile:SyncIncomplete2.java
+  PsiSynchronizedStatement
+    PsiKeyword:synchronized('synchronized')
+    PsiJavaToken:LPARENTH('(')
+    PsiReferenceExpression:o
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:o('o')
+    PsiErrorElement:')' expected
+      <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/SyncIncomplete3.txt b/java/java-tests/testData/psi/parser-partial/statements/SyncIncomplete3.txt
new file mode 100644
index 0000000..0dedd23
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/SyncIncomplete3.txt
@@ -0,0 +1,11 @@
+PsiJavaFile:SyncIncomplete3.java
+  PsiSynchronizedStatement
+    PsiKeyword:synchronized('synchronized')
+    PsiJavaToken:LPARENTH('(')
+    PsiReferenceExpression:o
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:o('o')
+    PsiJavaToken:RPARENTH(')')
+    PsiErrorElement:'{' expected
+      <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/SyncIncomplete4.txt b/java/java-tests/testData/psi/parser-partial/statements/SyncIncomplete4.txt
new file mode 100644
index 0000000..62f42f8
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/SyncIncomplete4.txt
@@ -0,0 +1,10 @@
+PsiJavaFile:SyncIncomplete4.java
+  PsiSynchronizedStatement
+    PsiKeyword:synchronized('synchronized')
+    PsiJavaToken:LPARENTH('(')
+    PsiErrorElement:Expression expected
+      <empty list>
+    PsiJavaToken:RPARENTH(')')
+    PsiCodeBlock
+      PsiJavaToken:LBRACE('{')
+      PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/SyncIncomplete5.txt b/java/java-tests/testData/psi/parser-partial/statements/SyncIncomplete5.txt
new file mode 100644
index 0000000..571997d
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/SyncIncomplete5.txt
@@ -0,0 +1,17 @@
+PsiJavaFile:SyncIncomplete5.java
+  PsiSynchronizedStatement
+    PsiKeyword:synchronized('synchronized')
+    PsiJavaToken:LPARENTH('(')
+    PsiErrorElement:Expression expected
+      <empty list>
+  PsiWhiteSpace('\n ')
+  PsiExpressionStatement
+    PsiMethodCallExpression:foo()
+      PsiReferenceExpression:foo
+        PsiReferenceParameterList
+          <empty list>
+        PsiIdentifier:foo('foo')
+      PsiExpressionList
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+    PsiJavaToken:SEMICOLON(';')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/SyncNormal.txt b/java/java-tests/testData/psi/parser-partial/statements/SyncNormal.txt
new file mode 100644
index 0000000..56f82ab
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/SyncNormal.txt
@@ -0,0 +1,12 @@
+PsiJavaFile:SyncNormal.java
+  PsiSynchronizedStatement
+    PsiKeyword:synchronized('synchronized')
+    PsiJavaToken:LPARENTH('(')
+    PsiReferenceExpression:o
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:o('o')
+    PsiJavaToken:RPARENTH(')')
+    PsiCodeBlock
+      PsiJavaToken:LBRACE('{')
+      PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/ThrowIncomplete0.txt b/java/java-tests/testData/psi/parser-partial/statements/ThrowIncomplete0.txt
new file mode 100644
index 0000000..11bfb4a
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/ThrowIncomplete0.txt
@@ -0,0 +1,5 @@
+PsiJavaFile:ThrowIncomplete0.java
+  PsiThrowStatement
+    PsiKeyword:throw('throw')
+    PsiErrorElement:Expression expected
+      <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/ThrowIncomplete1.txt b/java/java-tests/testData/psi/parser-partial/statements/ThrowIncomplete1.txt
new file mode 100644
index 0000000..9d22912
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/ThrowIncomplete1.txt
@@ -0,0 +1,10 @@
+PsiJavaFile:ThrowIncomplete1.java
+  PsiThrowStatement
+    PsiKeyword:throw('throw')
+    PsiWhiteSpace(' ')
+    PsiReferenceExpression:e
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:e('e')
+    PsiErrorElement:';' expected
+      <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/ThrowNormal.txt b/java/java-tests/testData/psi/parser-partial/statements/ThrowNormal.txt
new file mode 100644
index 0000000..8ee9d6b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/ThrowNormal.txt
@@ -0,0 +1,9 @@
+PsiJavaFile:ThrowNormal.java
+  PsiThrowStatement
+    PsiKeyword:throw('throw')
+    PsiWhiteSpace(' ')
+    PsiReferenceExpression:e
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:e('e')
+    PsiJavaToken:SEMICOLON(';')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete0.txt b/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete0.txt
new file mode 100644
index 0000000..3086811
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete0.txt
@@ -0,0 +1,5 @@
+PsiJavaFile:TryIncomplete0.java
+  PsiTryStatement
+    PsiKeyword:try('try')
+    PsiErrorElement:'{' expected
+      <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete1.txt b/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete1.txt
new file mode 100644
index 0000000..b11623f
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete1.txt
@@ -0,0 +1,8 @@
+PsiJavaFile:TryIncomplete1.java
+  PsiTryStatement
+    PsiKeyword:try('try')
+    PsiCodeBlock
+      PsiJavaToken:LBRACE('{')
+      PsiJavaToken:RBRACE('}')
+    PsiErrorElement:'catch' or 'finally' expected
+      <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete10.txt b/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete10.txt
new file mode 100644
index 0000000..07461ff
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete10.txt
@@ -0,0 +1,12 @@
+PsiJavaFile:TryIncomplete10.java
+  PsiTryStatement
+    PsiKeyword:try('try')
+    PsiResourceList:(
+      PsiJavaToken:LPARENTH('(')
+      PsiErrorElement:Identifier or type expected
+        <empty list>
+      PsiErrorElement:')' expected
+        <empty list>
+    PsiCodeBlock
+      PsiJavaToken:LBRACE('{')
+      PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete11.txt b/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete11.txt
new file mode 100644
index 0000000..fda6eb4
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete11.txt
@@ -0,0 +1,11 @@
+PsiJavaFile:TryIncomplete11.java
+  PsiTryStatement
+    PsiKeyword:try('try')
+    PsiResourceList:()
+      PsiJavaToken:LPARENTH('(')
+      PsiErrorElement:Identifier or type expected
+        <empty list>
+      PsiJavaToken:RPARENTH(')')
+    PsiCodeBlock
+      PsiJavaToken:LBRACE('{')
+      PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete12.txt b/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete12.txt
new file mode 100644
index 0000000..f37c59d
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete12.txt
@@ -0,0 +1,12 @@
+PsiJavaFile:TryIncomplete12.java
+  PsiTryStatement
+    PsiKeyword:try('try')
+    PsiResourceList:(;)
+      PsiJavaToken:LPARENTH('(')
+      PsiErrorElement:Resource definition expected
+        <empty list>
+      PsiJavaToken:SEMICOLON(';')
+      PsiJavaToken:RPARENTH(')')
+    PsiCodeBlock
+      PsiJavaToken:LBRACE('{')
+      PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete13.txt b/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete13.txt
new file mode 100644
index 0000000..b4301f6
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete13.txt
@@ -0,0 +1,18 @@
+PsiJavaFile:TryIncomplete13.java
+  PsiTryStatement
+    PsiKeyword:try('try')
+    PsiResourceList:(final )
+      PsiJavaToken:LPARENTH('(')
+      PsiModifierList:final
+        PsiKeyword:final('final')
+      PsiErrorElement:Type expected
+        <empty list>
+      PsiWhiteSpace(' ')
+      PsiTypeElement:
+        <empty list>
+      PsiErrorElement:Identifier expected
+        <empty list>
+      PsiJavaToken:RPARENTH(')')
+    PsiCodeBlock
+      PsiJavaToken:LBRACE('{')
+      PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete14.txt b/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete14.txt
new file mode 100644
index 0000000..97482c5
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete14.txt
@@ -0,0 +1,15 @@
+PsiJavaFile:TryIncomplete14.java
+  PsiTryStatement
+    PsiKeyword:try('try')
+    PsiResourceList:(int)
+      PsiJavaToken:LPARENTH('(')
+      PsiModifierList:
+        <empty list>
+      PsiTypeElement:int
+        PsiKeyword:int('int')
+      PsiErrorElement:Identifier expected
+        <empty list>
+      PsiJavaToken:RPARENTH(')')
+    PsiCodeBlock
+      PsiJavaToken:LBRACE('{')
+      PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete15.txt b/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete15.txt
new file mode 100644
index 0000000..2da2c5a
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete15.txt
@@ -0,0 +1,21 @@
+PsiJavaFile:TryIncomplete15.java
+  PsiTryStatement
+    PsiKeyword:try('try')
+    PsiResourceList:(R r)
+      PsiJavaToken:LPARENTH('(')
+      PsiResourceVariable:r
+        PsiModifierList:
+          <empty list>
+        PsiTypeElement:R
+          PsiJavaCodeReferenceElement:R
+            PsiIdentifier:R('R')
+            PsiReferenceParameterList
+              <empty list>
+        PsiWhiteSpace(' ')
+        PsiIdentifier:r('r')
+        PsiErrorElement:'=' expected
+          <empty list>
+      PsiJavaToken:RPARENTH(')')
+    PsiCodeBlock
+      PsiJavaToken:LBRACE('{')
+      PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete16.txt b/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete16.txt
new file mode 100644
index 0000000..837e354
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete16.txt
@@ -0,0 +1,23 @@
+PsiJavaFile:TryIncomplete16.java
+  PsiTryStatement
+    PsiKeyword:try('try')
+    PsiResourceList:(R r =)
+      PsiJavaToken:LPARENTH('(')
+      PsiResourceVariable:r
+        PsiModifierList:
+          <empty list>
+        PsiTypeElement:R
+          PsiJavaCodeReferenceElement:R
+            PsiIdentifier:R('R')
+            PsiReferenceParameterList
+              <empty list>
+        PsiWhiteSpace(' ')
+        PsiIdentifier:r('r')
+        PsiWhiteSpace(' ')
+        PsiJavaToken:EQ('=')
+        PsiErrorElement:Expression expected
+          <empty list>
+      PsiJavaToken:RPARENTH(')')
+    PsiCodeBlock
+      PsiJavaToken:LBRACE('{')
+      PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete17.txt b/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete17.txt
new file mode 100644
index 0000000..cf19d8c
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete17.txt
@@ -0,0 +1,28 @@
+PsiJavaFile:TryIncomplete17.java
+  PsiTryStatement
+    PsiKeyword:try('try')
+    PsiResourceList:(R r = 0;;)
+      PsiJavaToken:LPARENTH('(')
+      PsiResourceVariable:r
+        PsiModifierList:
+          <empty list>
+        PsiTypeElement:R
+          PsiJavaCodeReferenceElement:R
+            PsiIdentifier:R('R')
+            PsiReferenceParameterList
+              <empty list>
+        PsiWhiteSpace(' ')
+        PsiIdentifier:r('r')
+        PsiWhiteSpace(' ')
+        PsiJavaToken:EQ('=')
+        PsiWhiteSpace(' ')
+        PsiLiteralExpression:0
+          PsiJavaToken:INTEGER_LITERAL('0')
+      PsiJavaToken:SEMICOLON(';')
+      PsiErrorElement:Resource definition expected
+        <empty list>
+      PsiJavaToken:SEMICOLON(';')
+      PsiJavaToken:RPARENTH(')')
+    PsiCodeBlock
+      PsiJavaToken:LBRACE('{')
+      PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete2.txt b/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete2.txt
new file mode 100644
index 0000000..5c6aba0
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete2.txt
@@ -0,0 +1,10 @@
+PsiJavaFile:TryIncomplete2.java
+  PsiTryStatement
+    PsiKeyword:try('try')
+    PsiCodeBlock
+      PsiJavaToken:LBRACE('{')
+      PsiJavaToken:RBRACE('}')
+    PsiCatchSection
+      PsiKeyword:catch('catch')
+      PsiErrorElement:'(' expected
+        <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete3.txt b/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete3.txt
new file mode 100644
index 0000000..a5ad7b9
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete3.txt
@@ -0,0 +1,13 @@
+PsiJavaFile:TryIncomplete3.java
+  PsiTryStatement
+    PsiKeyword:try('try')
+    PsiCodeBlock
+      PsiJavaToken:LBRACE('{')
+      PsiJavaToken:RBRACE('}')
+    PsiCatchSection
+      PsiKeyword:catch('catch')
+      PsiJavaToken:LPARENTH('(')
+      PsiErrorElement:Parameter expected
+        <empty list>
+      PsiErrorElement:')' expected
+        <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete4.txt b/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete4.txt
new file mode 100644
index 0000000..161397b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete4.txt
@@ -0,0 +1,20 @@
+PsiJavaFile:TryIncomplete4.java
+  PsiTryStatement
+    PsiKeyword:try('try')
+    PsiCodeBlock
+      PsiJavaToken:LBRACE('{')
+      PsiJavaToken:RBRACE('}')
+    PsiCatchSection
+      PsiKeyword:catch('catch')
+      PsiJavaToken:LPARENTH('(')
+      PsiModifierList:
+        <empty list>
+      PsiTypeElement:E
+        PsiJavaCodeReferenceElement:E
+          PsiIdentifier:E('E')
+          PsiReferenceParameterList
+            <empty list>
+      PsiErrorElement:Identifier expected
+        <empty list>
+      PsiErrorElement:')' expected
+        <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete5.txt b/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete5.txt
new file mode 100644
index 0000000..c5605a8
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete5.txt
@@ -0,0 +1,21 @@
+PsiJavaFile:TryIncomplete5.java
+  PsiTryStatement
+    PsiKeyword:try('try')
+    PsiCodeBlock
+      PsiJavaToken:LBRACE('{')
+      PsiJavaToken:RBRACE('}')
+    PsiCatchSection
+      PsiKeyword:catch('catch')
+      PsiJavaToken:LPARENTH('(')
+      PsiParameter:e
+        PsiModifierList:
+          <empty list>
+        PsiTypeElement:E
+          PsiJavaCodeReferenceElement:E
+            PsiIdentifier:E('E')
+            PsiReferenceParameterList
+              <empty list>
+        PsiWhiteSpace(' ')
+        PsiIdentifier:e('e')
+      PsiErrorElement:')' expected
+        <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete6.txt b/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete6.txt
new file mode 100644
index 0000000..283a4f9
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete6.txt
@@ -0,0 +1,22 @@
+PsiJavaFile:TryIncomplete6.java
+  PsiTryStatement
+    PsiKeyword:try('try')
+    PsiCodeBlock
+      PsiJavaToken:LBRACE('{')
+      PsiJavaToken:RBRACE('}')
+    PsiCatchSection
+      PsiKeyword:catch('catch')
+      PsiJavaToken:LPARENTH('(')
+      PsiParameter:e
+        PsiModifierList:
+          <empty list>
+        PsiTypeElement:E
+          PsiJavaCodeReferenceElement:E
+            PsiIdentifier:E('E')
+            PsiReferenceParameterList
+              <empty list>
+        PsiWhiteSpace(' ')
+        PsiIdentifier:e('e')
+      PsiJavaToken:RPARENTH(')')
+      PsiErrorElement:'{' expected
+        <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete7.txt b/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete7.txt
new file mode 100644
index 0000000..d28b1a6
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete7.txt
@@ -0,0 +1,9 @@
+PsiJavaFile:TryIncomplete7.java
+  PsiTryStatement
+    PsiKeyword:try('try')
+    PsiCodeBlock
+      PsiJavaToken:LBRACE('{')
+      PsiJavaToken:RBRACE('}')
+    PsiKeyword:finally('finally')
+    PsiErrorElement:'{' expected
+      <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete8.txt b/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete8.txt
new file mode 100644
index 0000000..da0b1f4
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete8.txt
@@ -0,0 +1,25 @@
+PsiJavaFile:TryIncomplete8.java
+  PsiTryStatement
+    PsiKeyword:try('try')
+    PsiCodeBlock
+      PsiJavaToken:LBRACE('{')
+      PsiJavaToken:RBRACE('}')
+    PsiCatchSection
+      PsiKeyword:catch('catch')
+      PsiJavaToken:LPARENTH('(')
+      PsiModifierList:
+        <empty list>
+      PsiTypeElement:A|
+        PsiTypeElement:A
+          PsiJavaCodeReferenceElement:A
+            PsiIdentifier:A('A')
+            PsiReferenceParameterList
+              <empty list>
+        PsiJavaToken:OR('|')
+        PsiErrorElement:Identifier expected
+          <empty list>
+      PsiErrorElement:Identifier expected
+        <empty list>
+      PsiJavaToken:RPARENTH(')')
+      PsiErrorElement:'{' expected
+        <empty list>
diff --git a/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete9.txt b/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete9.txt
new file mode 100644
index 0000000..8ca57aa
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/TryIncomplete9.txt
@@ -0,0 +1,28 @@
+PsiJavaFile:TryIncomplete9.java
+  PsiTryStatement
+    PsiKeyword:try('try')
+    PsiCodeBlock
+      PsiJavaToken:LBRACE('{')
+      PsiJavaToken:RBRACE('}')
+    PsiCatchSection
+      PsiKeyword:catch('catch')
+      PsiJavaToken:LPARENTH('(')
+      PsiModifierList:
+        <empty list>
+      PsiTypeElement:A|B
+        PsiTypeElement:A
+          PsiJavaCodeReferenceElement:A
+            PsiIdentifier:A('A')
+            PsiReferenceParameterList
+              <empty list>
+        PsiJavaToken:OR('|')
+        PsiTypeElement:B
+          PsiJavaCodeReferenceElement:B
+            PsiIdentifier:B('B')
+            PsiReferenceParameterList
+              <empty list>
+      PsiErrorElement:Identifier expected
+        <empty list>
+      PsiJavaToken:RPARENTH(')')
+      PsiErrorElement:'{' expected
+        <empty list>
diff --git a/java/java-tests/testData/psi/parser-partial/statements/TryNormal0.txt b/java/java-tests/testData/psi/parser-partial/statements/TryNormal0.txt
new file mode 100644
index 0000000..a3d15e8
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/TryNormal0.txt
@@ -0,0 +1,23 @@
+PsiJavaFile:TryNormal0.java
+  PsiTryStatement
+    PsiKeyword:try('try')
+    PsiCodeBlock
+      PsiJavaToken:LBRACE('{')
+      PsiJavaToken:RBRACE('}')
+    PsiCatchSection
+      PsiKeyword:catch('catch')
+      PsiJavaToken:LPARENTH('(')
+      PsiParameter:e
+        PsiModifierList:
+          <empty list>
+        PsiTypeElement:E
+          PsiJavaCodeReferenceElement:E
+            PsiIdentifier:E('E')
+            PsiReferenceParameterList
+              <empty list>
+        PsiWhiteSpace(' ')
+        PsiIdentifier:e('e')
+      PsiJavaToken:RPARENTH(')')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/TryNormal1.txt b/java/java-tests/testData/psi/parser-partial/statements/TryNormal1.txt
new file mode 100644
index 0000000..9bf4dc6
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/TryNormal1.txt
@@ -0,0 +1,28 @@
+PsiJavaFile:TryNormal1.java
+  PsiTryStatement
+    PsiKeyword:try('try')
+    PsiCodeBlock
+      PsiJavaToken:LBRACE('{')
+      PsiJavaToken:RBRACE('}')
+    PsiCatchSection
+      PsiKeyword:catch('catch')
+      PsiJavaToken:LPARENTH('(')
+      PsiParameter:e
+        PsiModifierList:final
+          PsiKeyword:final('final')
+        PsiWhiteSpace(' ')
+        PsiTypeElement:E
+          PsiJavaCodeReferenceElement:E
+            PsiIdentifier:E('E')
+            PsiReferenceParameterList
+              <empty list>
+        PsiWhiteSpace(' ')
+        PsiIdentifier:e('e')
+      PsiJavaToken:RPARENTH(')')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
+    PsiKeyword:finally('finally')
+    PsiCodeBlock
+      PsiJavaToken:LBRACE('{')
+      PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/statements/TryNormal2.txt b/java/java-tests/testData/psi/parser-partial/statements/TryNormal2.txt
new file mode 100644
index 0000000..1ab8372
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/TryNormal2.txt
@@ -0,0 +1,10 @@
+PsiJavaFile:TryNormal2.java
+  PsiTryStatement
+    PsiKeyword:try('try')
+    PsiCodeBlock
+      PsiJavaToken:LBRACE('{')
+      PsiJavaToken:RBRACE('}')
+    PsiKeyword:finally('finally')
+    PsiCodeBlock
+      PsiJavaToken:LBRACE('{')
+      PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/TryNormal3.txt b/java/java-tests/testData/psi/parser-partial/statements/TryNormal3.txt
new file mode 100644
index 0000000..96a06ad
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/TryNormal3.txt
@@ -0,0 +1,30 @@
+PsiJavaFile:TryNormal3.java
+  PsiTryStatement
+    PsiKeyword:try('try')
+    PsiCodeBlock
+      PsiJavaToken:LBRACE('{')
+      PsiJavaToken:RBRACE('}')
+    PsiCatchSection
+      PsiKeyword:catch('catch')
+      PsiJavaToken:LPARENTH('(')
+      PsiParameter:e
+        PsiModifierList:
+          <empty list>
+        PsiTypeElement:A|B
+          PsiTypeElement:A
+            PsiJavaCodeReferenceElement:A
+              PsiIdentifier:A('A')
+              PsiReferenceParameterList
+                <empty list>
+          PsiJavaToken:OR('|')
+          PsiTypeElement:B
+            PsiJavaCodeReferenceElement:B
+              PsiIdentifier:B('B')
+              PsiReferenceParameterList
+                <empty list>
+        PsiWhiteSpace(' ')
+        PsiIdentifier:e('e')
+      PsiJavaToken:RPARENTH(')')
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/statements/TryNormal4.txt b/java/java-tests/testData/psi/parser-partial/statements/TryNormal4.txt
new file mode 100644
index 0000000..35a8f5f
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/TryNormal4.txt
@@ -0,0 +1,24 @@
+PsiJavaFile:TryNormal4.java
+  PsiTryStatement
+    PsiKeyword:try('try')
+    PsiResourceList:(R r = 0)
+      PsiJavaToken:LPARENTH('(')
+      PsiResourceVariable:r
+        PsiModifierList:
+          <empty list>
+        PsiTypeElement:R
+          PsiJavaCodeReferenceElement:R
+            PsiIdentifier:R('R')
+            PsiReferenceParameterList
+              <empty list>
+        PsiWhiteSpace(' ')
+        PsiIdentifier:r('r')
+        PsiWhiteSpace(' ')
+        PsiJavaToken:EQ('=')
+        PsiWhiteSpace(' ')
+        PsiLiteralExpression:0
+          PsiJavaToken:INTEGER_LITERAL('0')
+      PsiJavaToken:RPARENTH(')')
+    PsiCodeBlock
+      PsiJavaToken:LBRACE('{')
+      PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/statements/TryNormal5.txt b/java/java-tests/testData/psi/parser-partial/statements/TryNormal5.txt
new file mode 100644
index 0000000..7a09f71
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/TryNormal5.txt
@@ -0,0 +1,41 @@
+PsiJavaFile:TryNormal5.java
+  PsiTryStatement
+    PsiKeyword:try('try')
+    PsiResourceList:(R1 r1 = 1; R2 r2 = 2)
+      PsiJavaToken:LPARENTH('(')
+      PsiResourceVariable:r1
+        PsiModifierList:
+          <empty list>
+        PsiTypeElement:R1
+          PsiJavaCodeReferenceElement:R1
+            PsiIdentifier:R1('R1')
+            PsiReferenceParameterList
+              <empty list>
+        PsiWhiteSpace(' ')
+        PsiIdentifier:r1('r1')
+        PsiWhiteSpace(' ')
+        PsiJavaToken:EQ('=')
+        PsiWhiteSpace(' ')
+        PsiLiteralExpression:1
+          PsiJavaToken:INTEGER_LITERAL('1')
+      PsiJavaToken:SEMICOLON(';')
+      PsiWhiteSpace(' ')
+      PsiResourceVariable:r2
+        PsiModifierList:
+          <empty list>
+        PsiTypeElement:R2
+          PsiJavaCodeReferenceElement:R2
+            PsiIdentifier:R2('R2')
+            PsiReferenceParameterList
+              <empty list>
+        PsiWhiteSpace(' ')
+        PsiIdentifier:r2('r2')
+        PsiWhiteSpace(' ')
+        PsiJavaToken:EQ('=')
+        PsiWhiteSpace(' ')
+        PsiLiteralExpression:2
+          PsiJavaToken:INTEGER_LITERAL('2')
+      PsiJavaToken:RPARENTH(')')
+    PsiCodeBlock
+      PsiJavaToken:LBRACE('{')
+      PsiJavaToken:RBRACE('}')
diff --git a/java/java-tests/testData/psi/parser-partial/statements/TryNormal6.txt b/java/java-tests/testData/psi/parser-partial/statements/TryNormal6.txt
new file mode 100644
index 0000000..272652e
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/TryNormal6.txt
@@ -0,0 +1,25 @@
+PsiJavaFile:TryNormal6.java
+  PsiTryStatement
+    PsiKeyword:try('try')
+    PsiResourceList:(R r = 0;)
+      PsiJavaToken:LPARENTH('(')
+      PsiResourceVariable:r
+        PsiModifierList:
+          <empty list>
+        PsiTypeElement:R
+          PsiJavaCodeReferenceElement:R
+            PsiIdentifier:R('R')
+            PsiReferenceParameterList
+              <empty list>
+        PsiWhiteSpace(' ')
+        PsiIdentifier:r('r')
+        PsiWhiteSpace(' ')
+        PsiJavaToken:EQ('=')
+        PsiWhiteSpace(' ')
+        PsiLiteralExpression:0
+          PsiJavaToken:INTEGER_LITERAL('0')
+      PsiJavaToken:SEMICOLON(';')
+      PsiJavaToken:RPARENTH(')')
+    PsiCodeBlock
+      PsiJavaToken:LBRACE('{')
+      PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/WhileIncomplete0.txt b/java/java-tests/testData/psi/parser-partial/statements/WhileIncomplete0.txt
new file mode 100644
index 0000000..a5d03be
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/WhileIncomplete0.txt
@@ -0,0 +1,5 @@
+PsiJavaFile:WhileIncomplete0.java
+  PsiWhileStatement
+    PsiKeyword:while('while')
+    PsiErrorElement:'(' expected
+      <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/WhileIncomplete1.txt b/java/java-tests/testData/psi/parser-partial/statements/WhileIncomplete1.txt
new file mode 100644
index 0000000..c772c61
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/WhileIncomplete1.txt
@@ -0,0 +1,7 @@
+PsiJavaFile:WhileIncomplete1.java
+  PsiWhileStatement
+    PsiKeyword:while('while')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LPARENTH('(')
+    PsiErrorElement:Expression expected
+      <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/WhileIncomplete2.txt b/java/java-tests/testData/psi/parser-partial/statements/WhileIncomplete2.txt
new file mode 100644
index 0000000..16047d9
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/WhileIncomplete2.txt
@@ -0,0 +1,17 @@
+PsiJavaFile:WhileIncomplete2.java
+  PsiWhileStatement
+    PsiKeyword:while('while')
+    PsiJavaToken:LPARENTH('(')
+    PsiErrorElement:Expression expected
+      <empty list>
+  PsiWhiteSpace('\n ')
+  PsiExpressionStatement
+    PsiMethodCallExpression:foo()
+      PsiReferenceExpression:foo
+        PsiReferenceParameterList
+          <empty list>
+        PsiIdentifier:foo('foo')
+      PsiExpressionList
+        PsiJavaToken:LPARENTH('(')
+        PsiJavaToken:RPARENTH(')')
+    PsiJavaToken:SEMICOLON(';')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/WhileIncomplete3.txt b/java/java-tests/testData/psi/parser-partial/statements/WhileIncomplete3.txt
new file mode 100644
index 0000000..02e595b
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/WhileIncomplete3.txt
@@ -0,0 +1,10 @@
+PsiJavaFile:WhileIncomplete3.java
+  PsiWhileStatement
+    PsiKeyword:while('while')
+    PsiJavaToken:LPARENTH('(')
+    PsiReferenceExpression:cond
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:cond('cond')
+    PsiErrorElement:')' expected
+      <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/WhileIncomplete4.txt b/java/java-tests/testData/psi/parser-partial/statements/WhileIncomplete4.txt
new file mode 100644
index 0000000..ac12f72
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/WhileIncomplete4.txt
@@ -0,0 +1,11 @@
+PsiJavaFile:WhileIncomplete4.java
+  PsiWhileStatement
+    PsiKeyword:while('while')
+    PsiJavaToken:LPARENTH('(')
+    PsiReferenceExpression:cond
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:cond('cond')
+    PsiJavaToken:RPARENTH(')')
+    PsiErrorElement:Statement expected
+      <empty list>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/WhileIncomplete5.txt b/java/java-tests/testData/psi/parser-partial/statements/WhileIncomplete5.txt
new file mode 100644
index 0000000..5265462
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/WhileIncomplete5.txt
@@ -0,0 +1,18 @@
+PsiJavaFile:WhileIncomplete5.java
+  PsiWhileStatement
+    PsiKeyword:while('while')
+    PsiJavaToken:LPARENTH('(')
+    PsiErrorElement:Expression expected
+      <empty list>
+    PsiJavaToken:RPARENTH(')')
+    PsiWhiteSpace(' ')
+    PsiExpressionStatement
+      PsiMethodCallExpression:foo()
+        PsiReferenceExpression:foo
+          PsiReferenceParameterList
+            <empty list>
+          PsiIdentifier:foo('foo')
+        PsiExpressionList
+          PsiJavaToken:LPARENTH('(')
+          PsiJavaToken:RPARENTH(')')
+      PsiJavaToken:SEMICOLON(';')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/WhileNormal.txt b/java/java-tests/testData/psi/parser-partial/statements/WhileNormal.txt
new file mode 100644
index 0000000..30aeabc
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/statements/WhileNormal.txt
@@ -0,0 +1,19 @@
+PsiJavaFile:WhileNormal.java
+  PsiWhileStatement
+    PsiKeyword:while('while')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LPARENTH('(')
+    PsiLiteralExpression:true
+      PsiJavaToken:TRUE_KEYWORD('true')
+    PsiJavaToken:RPARENTH(')')
+    PsiWhiteSpace(' ')
+    PsiExpressionStatement
+      PsiMethodCallExpression:foo()
+        PsiReferenceExpression:foo
+          PsiReferenceParameterList
+            <empty list>
+          PsiIdentifier:foo('foo')
+        PsiExpressionList
+          PsiJavaToken:LPARENTH('(')
+          PsiJavaToken:RPARENTH(')')
+      PsiJavaToken:SEMICOLON(';')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Boolean.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Boolean.class
new file mode 100644
index 0000000..05d27b0
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Boolean.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Byte.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Byte.class
new file mode 100644
index 0000000..2a30d25
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Byte.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Character$Subset.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Character$Subset.class
new file mode 100644
index 0000000..b4c0310
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Character$Subset.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Character$UnicodeBlock.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Character$UnicodeBlock.class
new file mode 100644
index 0000000..7de10ce
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Character$UnicodeBlock.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Character.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Character.class
new file mode 100644
index 0000000..155067c
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Character.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Class.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Class.class
new file mode 100644
index 0000000..b5d94ad
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Class.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/ClassLoader.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/ClassLoader.class
new file mode 100644
index 0000000..a063243
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/ClassLoader.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Comparable.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Comparable.class
new file mode 100644
index 0000000..18539ec
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Comparable.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Double.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Double.class
new file mode 100644
index 0000000..9e1ecbe
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Double.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Enum.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Enum.class
new file mode 100644
index 0000000..cc85236
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Enum.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Float.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Float.class
new file mode 100644
index 0000000..3819020
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Float.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Integer.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Integer.class
new file mode 100644
index 0000000..081442c
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Integer.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Iterable.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Iterable.class
new file mode 100644
index 0000000..5fa7be4
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Iterable.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Long.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Long.class
new file mode 100644
index 0000000..e3cfd99
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Long.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Object.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Object.class
new file mode 100644
index 0000000..ef00916
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Object.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Short.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Short.class
new file mode 100644
index 0000000..afb2d9d
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Short.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/SimpleIterator.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/SimpleIterator.class
new file mode 100644
index 0000000..ca7ad3d
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/SimpleIterator.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/String.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/String.class
new file mode 100644
index 0000000..08bd0d3
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/String.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/ThreadLocal.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/ThreadLocal.class
new file mode 100644
index 0000000..9ec8fc4
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/ThreadLocal.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Void.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Void.class
new file mode 100644
index 0000000..389a83e
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Void.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/ref/PhantomReference.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/ref/PhantomReference.class
new file mode 100644
index 0000000..33abd12
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/ref/PhantomReference.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/ref/Reference.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/ref/Reference.class
new file mode 100644
index 0000000..97ff097
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/ref/Reference.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/ref/ReferenceQueue.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/ref/ReferenceQueue.class
new file mode 100644
index 0000000..03e42b9
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/ref/ReferenceQueue.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/ref/SoftReference.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/ref/SoftReference.class
new file mode 100644
index 0000000..087ec24
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/ref/SoftReference.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/ref/WeakReference.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/ref/WeakReference.class
new file mode 100644
index 0000000..dab0fe9
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/ref/WeakReference.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/AccessibleObject.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/AccessibleObject.class
new file mode 100644
index 0000000..47de323
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/AccessibleObject.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/Array.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/Array.class
new file mode 100644
index 0000000..d24ca71
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/Array.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/Constructor.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/Constructor.class
new file mode 100644
index 0000000..0e661eb
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/Constructor.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/Field.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/Field.class
new file mode 100644
index 0000000..34e96ce
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/Field.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/InvocationHandler.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/InvocationHandler.class
new file mode 100644
index 0000000..4627691
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/InvocationHandler.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/InvocationTargetException.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/InvocationTargetException.class
new file mode 100644
index 0000000..a0cd1bd
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/InvocationTargetException.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/Member.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/Member.class
new file mode 100644
index 0000000..b249a39
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/Member.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/Method.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/Method.class
new file mode 100644
index 0000000..23f464d
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/Method.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/Modifier.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/Modifier.class
new file mode 100644
index 0000000..44e0fa0
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/Modifier.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/Proxy.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/Proxy.class
new file mode 100644
index 0000000..171a669
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/Proxy.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/ReflectPermission.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/ReflectPermission.class
new file mode 100644
index 0000000..478d0fe1
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/ReflectPermission.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/UndeclaredThrowableException.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/UndeclaredThrowableException.class
new file mode 100644
index 0000000..6b394d3
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/UndeclaredThrowableException.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/text/MessageFormat$Field.class b/java/java-tests/testData/psi/repositoryUse/cls/java/text/MessageFormat$Field.class
new file mode 100644
index 0000000..fa8c4f2
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/text/MessageFormat$Field.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/text/MessageFormat.class b/java/java-tests/testData/psi/repositoryUse/cls/java/text/MessageFormat.class
new file mode 100644
index 0000000..c331e6d
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/text/MessageFormat.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/AbstractCollection.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/AbstractCollection.class
new file mode 100644
index 0000000..65329f1
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/util/AbstractCollection.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/AbstractList.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/AbstractList.class
new file mode 100644
index 0000000..efe5b38
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/util/AbstractList.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/AbstractMap.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/AbstractMap.class
new file mode 100644
index 0000000..ac508ab
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/util/AbstractMap.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/AbstractSequentialList.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/AbstractSequentialList.class
new file mode 100644
index 0000000..aae94b1
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/util/AbstractSequentialList.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/AbstractSet.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/AbstractSet.class
new file mode 100644
index 0000000..734959c
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/util/AbstractSet.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/ArrayList.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/ArrayList.class
new file mode 100644
index 0000000..16fd89d
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/util/ArrayList.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/Arrays.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/Arrays.class
new file mode 100644
index 0000000..c89a7a3
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/util/Arrays.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/Collection.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/Collection.class
new file mode 100644
index 0000000..4765624
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/util/Collection.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/Collections.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/Collections.class
new file mode 100644
index 0000000..462b354
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/util/Collections.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/Comparator.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/Comparator.class
new file mode 100644
index 0000000..9f03b7b
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/util/Comparator.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/Dictionary.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/Dictionary.class
new file mode 100644
index 0000000..2defd43e
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/util/Dictionary.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/Enumeration.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/Enumeration.class
new file mode 100644
index 0000000..c85438b
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/util/Enumeration.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/HashMap.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/HashMap.class
new file mode 100644
index 0000000..aed7f35
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/util/HashMap.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/HashSet.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/HashSet.class
new file mode 100644
index 0000000..679c44b
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/util/HashSet.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/Hashtable.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/Hashtable.class
new file mode 100644
index 0000000..b3ac022
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/util/Hashtable.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/IdentityHashMap.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/IdentityHashMap.class
new file mode 100644
index 0000000..cc3e4d0
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/util/IdentityHashMap.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/Iterator.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/Iterator.class
new file mode 100644
index 0000000..fae0b96
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/util/Iterator.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/LinkedHashMap.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/LinkedHashMap.class
new file mode 100644
index 0000000..27d17d8
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/util/LinkedHashMap.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/LinkedHashSet.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/LinkedHashSet.class
new file mode 100644
index 0000000..6aaaaf1
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/util/LinkedHashSet.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/LinkedList.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/LinkedList.class
new file mode 100644
index 0000000..39f1235
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/util/LinkedList.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/List.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/List.class
new file mode 100644
index 0000000..ca92bf5
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/util/List.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/ListIterator.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/ListIterator.class
new file mode 100644
index 0000000..e916842
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/util/ListIterator.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/Map$Entry.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/Map$Entry.class
new file mode 100644
index 0000000..d91b310
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/util/Map$Entry.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/Map.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/Map.class
new file mode 100644
index 0000000..49c2bfc
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/util/Map.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/Set.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/Set.class
new file mode 100644
index 0000000..f7bbb04
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/util/Set.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/SortedMap.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/SortedMap.class
new file mode 100644
index 0000000..e673c68
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/util/SortedMap.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/SortedSet.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/SortedSet.class
new file mode 100644
index 0000000..bdde4bc
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/util/SortedSet.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/Stack.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/Stack.class
new file mode 100644
index 0000000..16c1fbe
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/util/Stack.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/TreeMap.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/TreeMap.class
new file mode 100644
index 0000000..826beb3
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/util/TreeMap.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/TreeSet.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/TreeSet.class
new file mode 100644
index 0000000..f64d855
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/util/TreeSet.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/Vector.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/Vector.class
new file mode 100644
index 0000000..d41286f
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/util/Vector.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/WeakHashMap.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/WeakHashMap.class
new file mode 100644
index 0000000..85846f8
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/util/WeakHashMap.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/jar/JarFile.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/jar/JarFile.class
new file mode 100644
index 0000000..0309fce
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/util/jar/JarFile.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/logging/LogManager.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/logging/LogManager.class
new file mode 100644
index 0000000..749bc62
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/java/util/logging/LogManager.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/pack/Annotated.class b/java/java-tests/testData/psi/repositoryUse/cls/pack/Annotated.class
new file mode 100644
index 0000000..f20ef97
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/pack/Annotated.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/pack/Annotation.class b/java/java-tests/testData/psi/repositoryUse/cls/pack/Annotation.class
new file mode 100644
index 0000000..5acbd9a
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/pack/Annotation.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/pack/Annotation2.class b/java/java-tests/testData/psi/repositoryUse/cls/pack/Annotation2.class
new file mode 100644
index 0000000..a2e23d6
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/pack/Annotation2.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/pack/Modifiers.class b/java/java-tests/testData/psi/repositoryUse/cls/pack/Modifiers.class
new file mode 100644
index 0000000..0ea8794
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/pack/Modifiers.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/pack/MyClass$Inner.class b/java/java-tests/testData/psi/repositoryUse/cls/pack/MyClass$Inner.class
new file mode 100644
index 0000000..d75b87c
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/pack/MyClass$Inner.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/pack/MyClass.class b/java/java-tests/testData/psi/repositoryUse/cls/pack/MyClass.class
new file mode 100644
index 0000000..c94f833
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/pack/MyClass.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/pack/MyEnum.class b/java/java-tests/testData/psi/repositoryUse/cls/pack/MyEnum.class
new file mode 100644
index 0000000..c211288
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/pack/MyEnum.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/pack/Parametrized.class b/java/java-tests/testData/psi/repositoryUse/cls/pack/Parametrized.class
new file mode 100644
index 0000000..4dfded0
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/pack/Parametrized.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/pack/Variance.class b/java/java-tests/testData/psi/repositoryUse/cls/pack/Variance.class
new file mode 100644
index 0000000..5d36935
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/pack/Variance.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/src/pack/Annotation2.java b/java/java-tests/testData/psi/repositoryUse/cls/src/pack/Annotation2.java
new file mode 100644
index 0000000..fca1dcb
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/src/pack/Annotation2.java
@@ -0,0 +1,11 @@
+package pack;
+
+public @interface Annotation2 {
+  float f1() default Float.NEGATIVE_INFINITY;
+  float f2() default Float.NaN;
+  float f3() default Float.POSITIVE_INFINITY;
+
+  double d1() default Double.NEGATIVE_INFINITY;
+  double d2() default Double.NaN;
+  double d3() default Double.POSITIVE_INFINITY;
+}
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/src/pack/MyClass.java b/java/java-tests/testData/psi/repositoryUse/cls/src/pack/MyClass.java
new file mode 100644
index 0000000..d116704
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/src/pack/MyClass.java
@@ -0,0 +1,23 @@
+package pack;
+
+import java.util.ArrayList;
+
+public class MyClass extends ArrayList implements Cloneable{
+  /**
+   * @deprecated
+   */
+  static final int field1 = 123;
+
+  Object[] field2;
+
+  void method1(int[] p1, Object p2) throws Exception, java.io.IOException{
+  }
+
+  Integer method2()[]{
+    return null;
+  }
+
+  MyClass(){}
+
+  static class Inner{}
+}
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/src/pack/Parametrized.java b/java/java-tests/testData/psi/repositoryUse/cls/src/pack/Parametrized.java
new file mode 100644
index 0000000..0ac009e
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/src/pack/Parametrized.java
@@ -0,0 +1,7 @@
+package pack;
+
+/**
+ * @author dsl
+ */
+public class Parametrized<T> {
+}
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/src/pack/Variance.java b/java/java-tests/testData/psi/repositoryUse/cls/src/pack/Variance.java
new file mode 100644
index 0000000..76eaae7
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/src/pack/Variance.java
@@ -0,0 +1,12 @@
+package pack;
+
+import java.util.List;
+
+/**
+ * @author dsl
+ */
+public class Variance<T> {
+  public Parametrized<? extends T> method() { return null; }
+  public <V> Parametrized<? extends V>methodWithTypeParameter() { return null; };
+  public void removeAll(Variance<?> parameter) {} ; 
+}
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/sun/reflect/LangReflectAccess.class b/java/java-tests/testData/psi/repositoryUse/cls/sun/reflect/LangReflectAccess.class
new file mode 100644
index 0000000..f72ea5c
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/sun/reflect/LangReflectAccess.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/cls/sun/security/util/SecurityConstants.class b/java/java-tests/testData/psi/repositoryUse/cls/sun/security/util/SecurityConstants.class
new file mode 100644
index 0000000..3ded87f
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/cls/sun/security/util/SecurityConstants.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/innerClassesScanner/ClassWithGenericParameters.java b/java/java-tests/testData/psi/repositoryUse/innerClassesScanner/ClassWithGenericParameters.java
new file mode 100644
index 0000000..07a3da1
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/innerClassesScanner/ClassWithGenericParameters.java
@@ -0,0 +1,6 @@
+class X {
+  public void method() {
+    Object o = new Computable<String[]>() {
+    }
+  }
+}
diff --git a/java/java-tests/testData/psi/repositoryUse/innerClassesScanner/NewInsideNew.java b/java/java-tests/testData/psi/repositoryUse/innerClassesScanner/NewInsideNew.java
new file mode 100644
index 0000000..726b2336
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/innerClassesScanner/NewInsideNew.java
@@ -0,0 +1,6 @@
+class X {
+  public void method() {
+    Object o = new Computable(new List<String>()) {
+    }
+  }
+}
diff --git a/java/java-tests/testData/psi/repositoryUse/modifyAnnotations/Test.java b/java/java-tests/testData/psi/repositoryUse/modifyAnnotations/Test.java
new file mode 100644
index 0000000..50c2b17
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/modifyAnnotations/Test.java
@@ -0,0 +1 @@
+@A class Test {}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/repositoryUse/scr17094/classes/a/a/a/a/e/f/i.class b/java/java-tests/testData/psi/repositoryUse/scr17094/classes/a/a/a/a/e/f/i.class
new file mode 100644
index 0000000..3b64eb8
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/scr17094/classes/a/a/a/a/e/f/i.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/scr17094/classes1/com/intellij/util/d/bw.class b/java/java-tests/testData/psi/repositoryUse/scr17094/classes1/com/intellij/util/d/bw.class
new file mode 100644
index 0000000..46b8238
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/scr17094/classes1/com/intellij/util/d/bw.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/scr17094/classes2/com/intellij/internal/a/b/a/i.class b/java/java-tests/testData/psi/repositoryUse/scr17094/classes2/com/intellij/internal/a/b/a/i.class
new file mode 100644
index 0000000..26bf433
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/scr17094/classes2/com/intellij/internal/a/b/a/i.class
Binary files differ
diff --git a/java/java-tests/testData/psi/repositoryUse/src/MyClass1.java b/java/java-tests/testData/psi/repositoryUse/src/MyClass1.java
new file mode 100644
index 0000000..9d96a45
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/src/MyClass1.java
@@ -0,0 +1,21 @@
+import a . b;
+import c.*;
+import
+
+class MyClass1{
+  {
+    class Local{
+      public void foo(){
+        new Runnable(runLogName, goldenRunLogName, this){
+          public void run(){
+            new Throwable(){
+            };
+          }.run();
+        }
+      }
+    };
+  }
+}
+
+class Class2<A extends String, B>{
+}
diff --git a/java/java-tests/testData/psi/repositoryUse/src/StressClass.java b/java/java-tests/testData/psi/repositoryUse/src/StressClass.java
new file mode 100644
index 0000000..8c1130f
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/src/StressClass.java
@@ -0,0 +1,2789 @@
+/*
+ * @(#)String.java	1.189 05/10/21
+ *
+ * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+import java.io.ObjectStreamClass;
+import java.io.ObjectStreamField;
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.Formatter;
+import java.util.Locale;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.regex.PatternSyntaxException;
+
+
+/**
+ * The <code>String</code> class represents character strings. All
+ * string literals in Java programs, such as <code>"abc"</code>, are
+ * implemented as instances of this class.
+ * <p>
+ * Strings are constant; their values cannot be changed after they
+ * are created. String buffers support mutable strings.
+ * Because String objects are immutable they can be shared. For example:
+ * <p><blockquote><pre>
+ *     String str = "abc";
+ * </pre></blockquote><p>
+ * is equivalent to:
+ * <p><blockquote><pre>
+ *     char data[] = {'a', 'b', 'c'};
+ *     String str = new String(data);
+ * </pre></blockquote><p>
+ * Here are some more examples of how strings can be used:
+ * <p><blockquote><pre>
+ *     System.out.println("abc");
+ *     String cde = "cde";
+ *     System.out.println("abc" + cde);
+ *     String c = "abc".substring(2,3);
+ *     String d = cde.substring(1, 2);
+ * </pre></blockquote>
+ * <p>
+ * The class <code>String</code> includes methods for examining
+ * individual characters of the sequence, for comparing strings, for
+ * searching strings, for extracting substrings, and for creating a
+ * copy of a string with all characters translated to uppercase or to
+ * lowercase. Case mapping is based on the Unicode Standard version
+ * specified by the {@link java.lang.Character Character} class.
+ * <p>
+ * The Java language provides special support for the string
+ * concatenation operator (&nbsp;+&nbsp;), and for conversion of
+ * other objects to strings. String concatenation is implemented
+ * through the <code>StringBuilder</code>(or <code>StringBuffer</code>)
+ * class and its <code>append</code> method.
+ * String conversions are implemented through the method
+ * <code>toString</code>, defined by <code>Object</code> and
+ * inherited by all classes in Java. For additional information on
+ * string concatenation and conversion, see Gosling, Joy, and Steele,
+ * <i>The Java Language Specification</i>.
+ *
+ * <p> Unless otherwise noted, passing a <tt>null</tt> argument to a constructor
+ * or method in this class will cause a {@link NullPointerException} to be
+ * thrown.
+ *
+ * <p>A <code>String</code> represents a string in the UTF-16 format
+ * in which <em>supplementary characters</em> are represented by <em>surrogate
+ * pairs</em> (see the section <a href="Character.html#unicode">Unicode
+ * Character Representations</a> in the <code>Character</code> class for
+ * more information).
+ * Index values refer to <code>char</code> code units, so a supplementary
+ * character uses two positions in a <code>String</code>.
+ * <p>The <code>String</code> class provides methods for dealing with
+ * Unicode code points (i.e., characters), in addition to those for
+ * dealing with Unicode code units (i.e., <code>char</code> values).
+ *
+ * @author  Lee Boynton
+ * @author  Arthur van Hoff
+ * @version 1.189, 10/21/05
+ * @see     java.lang.Object#toString()
+ * @see     java.lang.StringBuffer
+ * @see     java.lang.StringBuilder
+ * @see     java.nio.charset.Charset
+ * @since   JDK1.0
+ */
+
+public final class StressClass
+    implements java.io.Serializable, Comparable<String>, CharSequence
+{
+    /** The value is used for character storage. */
+    private final char value[];
+
+    /** The offset is the first index of the storage that is used. */
+    private final int offset;
+
+    /** The count is the number of characters in the String. */
+    private final int count;
+
+    /** Cache the hash code for the string */
+    private int hash; // Default to 0
+
+    /** use serialVersionUID from JDK 1.0.2 for interoperability */
+    private static final long serialVersionUID = -6849794470754667710L;
+
+    /**
+     * Class String is special cased within the Serialization Stream Protocol.
+     *
+     * A String instance is written initially into an ObjectOutputStream in the
+     * following format:
+     * <pre>
+     *      <code>TC_STRING</code> (utf String)
+     * </pre>
+     * The String is written by method <code>DataOutput.writeUTF</code>.
+     * A new handle is generated to  refer to all future references to the
+     * string instance within the stream.
+     */
+    private static final ObjectStreamField[] serialPersistentFields =
+        new ObjectStreamField[0];
+
+    /**
+     * Initializes a newly created <code>String</code> object so that it
+     * represents an empty character sequence.  Note that use of this
+     * constructor is unnecessary since Strings are immutable.
+     */
+    public String() {
+	this.offset = 0;
+	this.count = 0;
+	this.value = new char[0];
+    }
+
+    /**
+     * Initializes a newly created <code>String</code> object so that it
+     * represents the same sequence of characters as the argument; in other
+     * words, the newly created string is a copy of the argument string. Unless
+     * an explicit copy of <code>original</code> is needed, use of this
+     * constructor is unnecessary since Strings are immutable.
+     *
+     * @param   original   a <code>String</code>.
+     */
+    public String(String original) {
+	int size = original.count;
+	char[] originalValue = original.value;
+	char[] v;
+  	if (originalValue.length > size) {
+ 	    // The array representing the String is bigger than the new
+ 	    // String itself.  Perhaps this constructor is being called
+ 	    // in order to trim the baggage, so make a copy of the array.
+	    v = new char[size];
+ 	    System.arraycopy(originalValue, original.offset, v, 0, size);
+ 	} else {
+ 	    // The array representing the String is the same
+ 	    // size as the String, so no point in making a copy.
+	    v = originalValue;
+ 	}
+	this.offset = 0;
+	this.count = size;
+	this.value = v;
+    }
+
+    /**
+     * Allocates a new <code>String</code> so that it represents the
+     * sequence of characters currently contained in the character array
+     * argument. The contents of the character array are copied; subsequent
+     * modification of the character array does not affect the newly created
+     * string.
+     *
+     * @param  value   the initial value of the string.
+     */
+    public String(char value[]) {
+	int size = value.length;
+	char[] v = new char[size];
+	System.arraycopy(value, 0, v, 0, size);
+	this.offset = 0;
+	this.count = size;
+	this.value = v;
+    }
+
+    /**
+     * Allocates a new <code>String</code> that contains characters from
+     * a subarray of the character array argument. The <code>offset</code>
+     * argument is the index of the first character of the subarray and
+     * the <code>count</code> argument specifies the length of the
+     * subarray. The contents of the subarray are copied; subsequent
+     * modification of the character array does not affect the newly
+     * created string.
+     *
+     * @param      value    array that is the source of characters.
+     * @param      offset   the initial offset.
+     * @param      count    the length.
+     * @exception  IndexOutOfBoundsException  if the <code>offset</code>
+     *               and <code>count</code> arguments index characters outside
+     *               the bounds of the <code>value</code> array.
+     */
+    public String(char value[], int offset, int count) {
+        if (offset < 0) {
+            throw new StringIndexOutOfBoundsException(offset);
+        }
+        if (count < 0) {
+            throw new StringIndexOutOfBoundsException(count);
+        }
+        // Note: offset or count might be near -1>>>1.
+        if (offset > value.length - count) {
+            throw new StringIndexOutOfBoundsException(offset + count);
+        }
+        char[] v = new char[count];
+        System.arraycopy(value, offset, v, 0, count);
+        this.offset = 0;
+        this.count = count;
+        this.value = v;
+    }
+
+    /**
+     * Allocates a new <code>String</code> that contains characters
+     * from a subarray of the Unicode code point array argument. The
+     * <code>offset</code> argument is the index of the first code
+     * point of the subarray and the <code>count</code> argument
+     * specifies the length of the subarray. The contents of the
+     * subarray are converted to <code>char</code>s; subsequent
+     * modification of the <code>int</code> array does not affect the
+     * newly created string.
+     *
+     * @param codePoints array that is the source of Unicode code points.
+     * @param offset     the initial offset.
+     * @param count      the length.
+     * @exception IllegalArgumentException if any invalid Unicode code point
+     * is found in <code>codePoints</code>
+     * @exception  IndexOutOfBoundsException  if the <code>offset</code>
+     *               and <code>count</code> arguments index characters outside
+     *               the bounds of the <code>codePoints</code> array.
+     * @since 1.5
+     */
+    public String(int[] codePoints, int offset, int count) {
+        if (offset < 0) {
+            throw new StringIndexOutOfBoundsException(offset);
+        }
+        if (count < 0) {
+            throw new StringIndexOutOfBoundsException(count);
+        }
+        // Note: offset or count might be near -1>>>1.
+        if (offset > codePoints.length - count) {
+            throw new StringIndexOutOfBoundsException(offset + count);
+        }
+
+	int expansion = 0;
+	int margin = 1;
+	char[] v = new char[count + margin];
+	int x = offset;
+	int j = 0;
+	for (int i = 0; i < count; i++) {
+	    int c = codePoints[x++];
+	    if (c < 0) {
+		throw new IllegalArgumentException();
+	    }
+	    if (margin <= 0 && (j+1) >= v.length) {
+		if (expansion == 0) {
+		    expansion = (((-margin + 1) * count) << 10) / i;
+		    expansion >>= 10;
+		    if (expansion <= 0) {
+			expansion = 1;
+		    }
+		} else {
+		    expansion *= 2;
+		}
+		char[] tmp = new char[Math.min(v.length+expansion, count*2)];
+		margin = (tmp.length - v.length) - (count - i);
+		System.arraycopy(v, 0, tmp, 0, j);
+		v = tmp;
+	    }
+	    if (c < Character.MIN_SUPPLEMENTARY_CODE_POINT) {
+		v[j++] = (char) c;
+	    } else if (c <= Character.MAX_CODE_POINT) {
+		Character.toSurrogates(c, v, j);
+		j += 2;
+		margin--;
+	    } else {
+		throw new IllegalArgumentException();
+	    }
+	}
+	this.offset = 0;
+	this.value = v;
+	this.count = j;
+    }
+
+    /**
+     * Allocates a new <code>String</code> constructed from a subarray
+     * of an array of 8-bit integer values.
+     * <p>
+     * The <code>offset</code> argument is the index of the first byte
+     * of the subarray, and the <code>count</code> argument specifies the
+     * length of the subarray.
+     * <p>
+     * Each <code>byte</code> in the subarray is converted to a
+     * <code>char</code> as specified in the method above.
+     *
+     * @deprecated This method does not properly convert bytes into characters.
+     * As of JDK&nbsp;1.1, the preferred way to do this is via the
+     * <code>String</code> constructors that take a charset name or that use
+     * the platform's default charset.
+     *
+     * @param      ascii     the bytes to be converted to characters.
+     * @param      hibyte    the top 8 bits of each 16-bit Unicode character.
+     * @param      offset    the initial offset.
+     * @param      count     the length.
+     * @exception  IndexOutOfBoundsException  if the <code>offset</code>
+     *               or <code>count</code> argument is invalid.
+     * @see        java.lang.String#String(byte[], int)
+     * @see        java.lang.String#String(byte[], int, int, java.lang.String)
+     * @see        java.lang.String#String(byte[], int, int)
+     * @see        java.lang.String#String(byte[], java.lang.String)
+     * @see        java.lang.String#String(byte[])
+     */
+    @Deprecated
+    public String(byte ascii[], int hibyte, int offset, int count) {
+	checkBounds(ascii, offset, count);
+        char value[] = new char[count];
+
+        if (hibyte == 0) {
+            for (int i = count ; i-- > 0 ;) {
+                value[i] = (char) (ascii[i + offset] & 0xff);
+            }
+        } else {
+            hibyte <<= 8;
+            for (int i = count ; i-- > 0 ;) {
+                value[i] = (char) (hibyte | (ascii[i + offset] & 0xff));
+            }
+        }
+	this.offset = 0;
+	this.count = count;
+	this.value = value;
+    }
+
+    /**
+     * Allocates a new <code>String</code> containing characters
+     * constructed from an array of 8-bit integer values. Each character
+     * <i>c</i>in the resulting string is constructed from the
+     * corresponding component <i>b</i> in the byte array such that:
+     * <p><blockquote><pre>
+     *     <b><i>c</i></b> == (char)(((hibyte &amp; 0xff) &lt;&lt; 8)
+     *                         | (<b><i>b</i></b> &amp; 0xff))
+     * </pre></blockquote>
+     *
+     * @deprecated This method does not properly convert bytes into characters.
+     * As of JDK&nbsp;1.1, the preferred way to do this is via the
+     * <code>String</code> constructors that take a charset name or
+     * that use the platform's default charset.
+     *
+     * @param      ascii    the bytes to be converted to characters.
+     * @param      hibyte   the top 8 bits of each 16-bit Unicode character.
+     * @see        java.lang.String#String(byte[], int, int, java.lang.String)
+     * @see        java.lang.String#String(byte[], int, int)
+     * @see        java.lang.String#String(byte[], java.lang.String)
+     * @see        java.lang.String#String(byte[])
+     */
+    @Deprecated
+    public String(byte ascii[], int hibyte) {
+        this(ascii, hibyte, 0, ascii.length);
+    }
+
+    /* Common private utility method used to bounds check the byte array
+     * and requested offset & length values used by the String(byte[],..)
+     * constructors.
+     */
+    private static void checkBounds(byte[] bytes, int offset, int length) {
+	if (length < 0)
+	    throw new StringIndexOutOfBoundsException(length);
+	if (offset < 0)
+	    throw new StringIndexOutOfBoundsException(offset);
+	if (offset > bytes.length - length)
+	    throw new StringIndexOutOfBoundsException(offset + length);
+    }
+
+    /**
+     * Constructs a new <tt>String</tt> by decoding the specified subarray of
+     * bytes using the specified charset.  The length of the new
+     * <tt>String</tt> is a function of the charset, and hence may not be equal
+     * to the length of the subarray.
+     *
+     * <p> The behavior of this constructor when the given bytes are not valid
+     * in the given charset is unspecified.  The {@link
+     * java.nio.charset.CharsetDecoder} class should be used when more control
+     * over the decoding process is required.
+     *
+     * @param  bytes   the bytes to be decoded into characters
+     * @param  offset  the index of the first byte to decode
+     * @param  length  the number of bytes to decode
+     * @param  charsetName  the name of a supported
+     *                 {@link java.nio.charset.Charset </code>charset<code>}
+     * @throws  UnsupportedEncodingException
+     *          if the named charset is not supported
+     * @throws  IndexOutOfBoundsException
+     *          if the <tt>offset</tt> and <tt>length</tt> arguments
+     *          index characters outside the bounds of the <tt>bytes</tt>
+     *          array
+     * @since JDK1.1
+     */
+    public String(byte bytes[], int offset, int length, String charsetName)
+	throws UnsupportedEncodingException
+    {
+	if (charsetName == null)
+	    throw new NullPointerException("charsetName");
+	checkBounds(bytes, offset, length);
+	char[] v = StringCoding.decode(charsetName, bytes, offset, length);
+	this.offset = 0;
+	this.count = v.length;
+	this.value = v;
+    }
+
+    /**
+     * Constructs a new <tt>String</tt> by decoding the specified array of
+     * bytes using the specified charset.  The length of the new
+     * <tt>String</tt> is a function of the charset, and hence may not be equal
+     * to the length of the byte array.
+     *
+     * <p> The behavior of this constructor when the given bytes are not valid
+     * in the given charset is unspecified.  The {@link
+     * java.nio.charset.CharsetDecoder} class should be used when more control
+     * over the decoding process is required.
+     *
+     * @param  bytes   the bytes to be decoded into characters
+     * @param  charsetName  the name of a supported
+     *                 {@link java.nio.charset.Charset </code>charset<code>}
+     *
+     * @exception  UnsupportedEncodingException
+     *             If the named charset is not supported
+     * @since      JDK1.1
+     */
+    public String(byte bytes[], String charsetName)
+	throws UnsupportedEncodingException
+    {
+	this(bytes, 0, bytes.length, charsetName);
+    }
+
+    /**
+     * Constructs a new <tt>String</tt> by decoding the specified subarray of
+     * bytes using the platform's default charset.  The length of the new
+     * <tt>String</tt> is a function of the charset, and hence may not be equal
+     * to the length of the subarray.
+     *
+     * <p> The behavior of this constructor when the given bytes are not valid
+     * in the default charset is unspecified.  The {@link
+     * java.nio.charset.CharsetDecoder} class should be used when more control
+     * over the decoding process is required.
+     *
+     * @param  bytes   the bytes to be decoded into characters
+     * @param  offset  the index of the first byte to decode
+     * @param  length  the number of bytes to decode
+     * @throws IndexOutOfBoundsException
+     *         if the <code>offset</code> and the <code>length</code>
+     *         arguments index characters outside the bounds of the
+     *         <code>bytes</code> array
+     * @since  JDK1.1
+     */
+    public String(byte bytes[], int offset, int length) {
+	checkBounds(bytes, offset, length);
+	char[] v  = StringCoding.decode(bytes, offset, length);
+	this.offset = 0;
+	this.count = v.length;
+	this.value = v;
+    }
+
+    /**
+     * Constructs a new <tt>String</tt> by decoding the specified array of
+     * bytes using the platform's default charset.  The length of the new
+     * <tt>String</tt> is a function of the charset, and hence may not be equal
+     * to the length of the byte array.
+     *
+     * <p> The behavior of this constructor when the given bytes are not valid
+     * in the default charset is unspecified.  The {@link
+     * java.nio.charset.CharsetDecoder} class should be used when more control
+     * over the decoding process is required.
+     *
+     * @param  bytes   the bytes to be decoded into characters
+     * @since  JDK1.1
+     */
+    public String(byte bytes[]) {
+	this(bytes, 0, bytes.length);
+    }
+
+    /**
+     * Allocates a new string that contains the sequence of characters
+     * currently contained in the string buffer argument. The contents of
+     * the string buffer are copied; subsequent modification of the string
+     * buffer does not affect the newly created string.
+     *
+     * @param   buffer   a <code>StringBuffer</code>.
+     */
+    public String(StringBuffer buffer) {
+        String result = buffer.toString();
+        this.value = result.value;
+        this.count = result.count;
+        this.offset = result.offset;
+    }
+
+    /**
+     * Allocates a new string that contains the sequence of characters
+     * currently contained in the string builder argument. The contents of
+     * the string builder are copied; subsequent modification of the string
+     * builder does not affect the newly created string.
+     *
+     * <p>This constructor is provided to ease migration to
+     * <code>StringBuilder</code>. Obtaining a string from a string builder
+     * via the <code>toString</code> method is likely to run faster and is
+     * generally preferred.
+     *
+     * @param   builder   a <code>StringBuilder</code>
+     * @since 1.5
+     */
+    public String(StringBuilder builder) {
+        String result = builder.toString();
+        this.value = result.value;
+        this.count = result.count;
+        this.offset = result.offset;
+    }
+
+
+    // Package private constructor which shares value array for speed.
+    String(int offset, int count, char value[]) {
+	this.value = value;
+	this.offset = offset;
+	this.count = count;
+    }
+
+    /**
+     * Returns the length of this string.
+     * The length is equal to the number of 16-bit
+     * Unicode characters in the string.
+     *
+     * @return  the length of the sequence of characters represented by this
+     *          object.
+     */
+    public int length() {
+        return count;
+    }
+
+    /**
+     * Returns the <code>char</code> value at the
+     * specified index. An index ranges from <code>0</code> to
+     * <code>length() - 1</code>. The first <code>char</code> value of the sequence
+     * is at index <code>0</code>, the next at index <code>1</code>,
+     * and so on, as for array indexing.
+     *
+     * <p>If the <code>char</code> value specified by the index is a
+     * <a href="Character.html#unicode">surrogate</a>, the surrogate
+     * value is returned.
+     *
+     * @param      index   the index of the <code>char</code> value.
+     * @return     the <code>char</code> value at the specified index of this string.
+     *             The first <code>char</code> value is at index <code>0</code>.
+     * @exception  IndexOutOfBoundsException  if the <code>index</code>
+     *             argument is negative or not less than the length of this
+     *             string.
+     */
+    public char charAt(int index) {
+        if ((index < 0) || (index >= count)) {
+            throw new StringIndexOutOfBoundsException(index);
+        }
+        return value[index + offset];
+    }
+
+    /**
+     * Returns the character (Unicode code point) at the specified
+     * index. The index refers to <code>char</code> values
+     * (Unicode code units) and ranges from <code>0</code> to
+     * {@link #length()}<code> - 1</code>.
+     *
+     * <p> If the <code>char</code> value specified at the given index
+     * is in the high-surrogate range, the following index is less
+     * than the length of this <code>String</code>, and the
+     * <code>char</code> value at the following index is in the
+     * low-surrogate range, then the supplementary code point
+     * corresponding to this surrogate pair is returned. Otherwise,
+     * the <code>char</code> value at the given index is returned.
+     *
+     * @param      index the index to the <code>char</code> values
+     * @return     the code point value of the character at the
+     *             <code>index</code>
+     * @exception  IndexOutOfBoundsException  if the <code>index</code>
+     *             argument is negative or not less than the length of this
+     *             string.
+     * @since      1.5
+     */
+    public int codePointAt(int index) {
+        if ((index < 0) || (index >= count)) {
+            throw new StringIndexOutOfBoundsException(index);
+        }
+        return Character.codePointAtImpl(value, offset + index, offset + count);
+    }
+
+    /**
+     * Returns the character (Unicode code point) before the specified
+     * index. The index refers to <code>char</code> values
+     * (Unicode code units) and ranges from <code>1</code> to {@link
+     * CharSequence#length() length}.
+     *
+     * <p> If the <code>char</code> value at <code>(index - 1)</code>
+     * is in the low-surrogate range, <code>(index - 2)</code> is not
+     * negative, and the <code>char</code> value at <code>(index -
+     * 2)</code> is in the high-surrogate range, then the
+     * supplementary code point value of the surrogate pair is
+     * returned. If the <code>char</code> value at <code>index -
+     * 1</code> is an unpaired low-surrogate or a high-surrogate, the
+     * surrogate value is returned.
+     *
+     * @param     index the index following the code point that should be returned
+     * @return    the Unicode code point value before the given index.
+     * @exception IndexOutOfBoundsException if the <code>index</code>
+     *            argument is less than 1 or greater than the length
+     *            of this string.
+     * @since     1.5
+     */
+    public int codePointBefore(int index) {
+	int i = index - 1;
+        if ((i < 0) || (i >= count)) {
+            throw new StringIndexOutOfBoundsException(index);
+        }
+        return Character.codePointBeforeImpl(value, offset + index, offset);
+    }
+
+    /**
+     * Returns the number of Unicode code points in the specified text
+     * range of this <code>String</code>. The text range begins at the
+     * specified <code>beginIndex</code> and extends to the
+     * <code>char</code> at index <code>endIndex - 1</code>. Thus the
+     * length (in <code>char</code>s) of the text range is
+     * <code>endIndex-beginIndex</code>. Unpaired surrogates within
+     * the text range count as one code point each.
+     *
+     * @param beginIndex the index to the first <code>char</code> of
+     * the text range.
+     * @param endIndex the index after the last <code>char</code> of
+     * the text range.
+     * @return the number of Unicode code points in the specified text
+     * range
+     * @exception IndexOutOfBoundsException if the
+     * <code>beginIndex</code> is negative, or <code>endIndex</code>
+     * is larger than the length of this <code>String</code>, or
+     * <code>beginIndex</code> is larger than <code>endIndex</code>.
+     * @since  1.5
+     */
+    public int codePointCount(int beginIndex, int endIndex) {
+	if (beginIndex < 0 || endIndex > count || beginIndex > endIndex) {
+	    throw new IndexOutOfBoundsException();
+	}
+	return Character.codePointCountImpl(value, offset+beginIndex, endIndex-beginIndex);
+    }
+
+    /**
+     * Returns the index within this <code>String</code> that is
+     * offset from the given <code>index</code> by
+     * <code>codePointOffset</code> code points. Unpaired surrogates
+     * within the text range given by <code>index</code> and
+     * <code>codePointOffset</code> count as one code point each.
+     *
+     * @param index the index to be offset
+     * @param codePointOffset the offset in code points
+     * @return the index within this <code>String</code>
+     * @exception IndexOutOfBoundsException if <code>index</code>
+     *   is negative or larger then the length of this
+     *   <code>String</code>, or if <code>codePointOffset</code> is positive
+     *   and the substring starting with <code>index</code> has fewer
+     *   than <code>codePointOffset</code> code points,
+     *   or if <code>codePointOffset</code> is negative and the substring
+     *   before <code>index</code> has fewer than the absolute value
+     *   of <code>codePointOffset</code> code points.
+     * @since 1.5
+     */
+    public int offsetByCodePoints(int index, int codePointOffset) {
+	if (index < 0 || index > count) {
+	    throw new IndexOutOfBoundsException();
+	}
+	return Character.offsetByCodePointsImpl(value, offset, count,
+						offset+index, codePointOffset);
+    }
+
+    /**
+     * Copy characters from this string into dst starting at dstBegin.
+     * This method doesn't perform any range checking.
+     */
+    void getChars(char dst[], int dstBegin) {
+        System.arraycopy(value, offset, dst, dstBegin, count);
+    }
+
+    /**
+     * Copies characters from this string into the destination character
+     * array.
+     * <p>
+     * The first character to be copied is at index <code>srcBegin</code>;
+     * the last character to be copied is at index <code>srcEnd-1</code>
+     * (thus the total number of characters to be copied is
+     * <code>srcEnd-srcBegin</code>). The characters are copied into the
+     * subarray of <code>dst</code> starting at index <code>dstBegin</code>
+     * and ending at index:
+     * <p><blockquote><pre>
+     *     dstbegin + (srcEnd-srcBegin) - 1
+     * </pre></blockquote>
+     *
+     * @param      srcBegin   index of the first character in the string
+     *                        to copy.
+     * @param      srcEnd     index after the last character in the string
+     *                        to copy.
+     * @param      dst        the destination array.
+     * @param      dstBegin   the start offset in the destination array.
+     * @exception IndexOutOfBoundsException If any of the following
+     *            is true:
+     *            <ul><li><code>srcBegin</code> is negative.
+     *            <li><code>srcBegin</code> is greater than <code>srcEnd</code>
+     *            <li><code>srcEnd</code> is greater than the length of this
+     *                string
+     *            <li><code>dstBegin</code> is negative
+     *            <li><code>dstBegin+(srcEnd-srcBegin)</code> is larger than
+     *                <code>dst.length</code></ul>
+     */
+    public void getChars(int srcBegin, int srcEnd, char dst[], int dstBegin) {
+        if (srcBegin < 0) {
+            throw new StringIndexOutOfBoundsException(srcBegin);
+        }
+        if (srcEnd > count) {
+            throw new StringIndexOutOfBoundsException(srcEnd);
+        }
+        if (srcBegin > srcEnd) {
+            throw new StringIndexOutOfBoundsException(srcEnd - srcBegin);
+        }
+        System.arraycopy(value, offset + srcBegin, dst, dstBegin,
+             srcEnd - srcBegin);
+    }
+
+    /**
+     * Copies characters from this string into the destination byte
+     * array. Each byte receives the 8 low-order bits of the
+     * corresponding character. The eight high-order bits of each character
+     * are not copied and do not participate in the transfer in any way.
+     * <p>
+     * The first character to be copied is at index <code>srcBegin</code>;
+     * the last character to be copied is at index <code>srcEnd-1</code>.
+     * The total number of characters to be copied is
+     * <code>srcEnd-srcBegin</code>. The characters, converted to bytes,
+     * are copied into the subarray of <code>dst</code> starting at index
+     * <code>dstBegin</code> and ending at index:
+     * <p><blockquote><pre>
+     *     dstbegin + (srcEnd-srcBegin) - 1
+     * </pre></blockquote>
+     *
+     * @deprecated This method does not properly convert characters into bytes.
+     * As of JDK&nbsp;1.1, the preferred way to do this is via the
+     * <code>getBytes()</code> method, which uses the platform's default
+     * charset.
+     *
+     * @param      srcBegin   index of the first character in the string
+     *                        to copy.
+     * @param      srcEnd     index after the last character in the string
+     *                        to copy.
+     * @param      dst        the destination array.
+     * @param      dstBegin   the start offset in the destination array.
+     * @exception IndexOutOfBoundsException if any of the following
+     *            is true:
+     *           <ul><li><code>srcBegin</code> is negative
+     *           <li><code>srcBegin</code> is greater than <code>srcEnd</code>
+     *           <li><code>srcEnd</code> is greater than the length of this
+     *            String
+     *           <li><code>dstBegin</code> is negative
+     *           <li><code>dstBegin+(srcEnd-srcBegin)</code> is larger than
+     *            <code>dst.length</code></ul>
+     */
+    @Deprecated
+    public void getBytes(int srcBegin, int srcEnd, byte dst[], int dstBegin) {
+        if (srcBegin < 0) {
+            throw new StringIndexOutOfBoundsException(srcBegin);
+        }
+        if (srcEnd > count) {
+            throw new StringIndexOutOfBoundsException(srcEnd);
+        }
+        if (srcBegin > srcEnd) {
+            throw new StringIndexOutOfBoundsException(srcEnd - srcBegin);
+        }
+        int j = dstBegin;
+        int n = offset + srcEnd;
+        int i = offset + srcBegin;
+        char[] val = value;   /* avoid getfield opcode */
+
+        while (i < n) {
+            dst[j++] = (byte)val[i++];
+        }
+    }
+
+    /**
+     * Encodes this <tt>String</tt> into a sequence of bytes using the
+     * named charset, storing the result into a new byte array.
+     *
+     * <p> The behavior of this method when this string cannot be encoded in
+     * the given charset is unspecified.  The {@link
+     * java.nio.charset.CharsetEncoder} class should be used when more control
+     * over the encoding process is required.
+     *
+     * @param  charsetName
+     *         the name of a supported
+     *         {@link java.nio.charset.Charset </code>charset<code>}
+     *
+     * @return  The resultant byte array
+     *
+     * @exception  UnsupportedEncodingException
+     *             If the named charset is not supported
+     *
+     * @since      JDK1.1
+     */
+    public byte[] getBytes(String charsetName)
+	throws UnsupportedEncodingException
+    {
+	if (charsetName == null) throw new NullPointerException();
+	return StringCoding.encode(charsetName, value, offset, count);
+    }
+
+    /**
+     * Encodes this <tt>String</tt> into a sequence of bytes using the
+     * platform's default charset, storing the result into a new byte array.
+     *
+     * <p> The behavior of this method when this string cannot be encoded in
+     * the default charset is unspecified.  The {@link
+     * java.nio.charset.CharsetEncoder} class should be used when more control
+     * over the encoding process is required.
+     *
+     * @return  The resultant byte array
+     *
+     * @since      JDK1.1
+     */
+    public byte[] getBytes() {
+	return StringCoding.encode(value, offset, count);
+    }
+
+    /**
+     * Compares this string to the specified object.
+     * The result is <code>true</code> if and only if the argument is not
+     * <code>null</code> and is a <code>String</code> object that represents
+     * the same sequence of characters as this object.
+     *
+     * @param   anObject   the object to compare this <code>String</code>
+     *                     against.
+     * @return  <code>true</code> if the <code>String </code>are equal;
+     *          <code>false</code> otherwise.
+     * @see     java.lang.String#compareTo(java.lang.String)
+     * @see     java.lang.String#equalsIgnoreCase(java.lang.String)
+     */
+    public boolean equals(Object anObject) {
+	if (this == anObject) {
+	    return true;
+	}
+	if (anObject instanceof String) {
+	    String anotherString = (String)anObject;
+	    int n = count;
+	    if (n == anotherString.count) {
+		char v1[] = value;
+		char v2[] = anotherString.value;
+		int i = offset;
+		int j = anotherString.offset;
+		while (n-- != 0) {
+		    if (v1[i++] != v2[j++])
+			return false;
+		}
+		return true;
+	    }
+	}
+	return false;
+    }
+
+    /**
+     * Returns <tt>true</tt> if and only if this <tt>String</tt> represents
+     * the same sequence of characters as the specified <tt>StringBuffer</tt>.
+     *
+     * @param   sb         the <tt>StringBuffer</tt> to compare to.
+     * @return  <tt>true</tt> if and only if this <tt>String</tt> represents
+     *          the same sequence of characters as the specified
+     *          <tt>StringBuffer</tt>, otherwise <tt>false</tt>.
+     * @throws NullPointerException if <code>sb</code> is <code>null</code>
+     * @since 1.4
+     */
+    public boolean contentEquals(StringBuffer sb) {
+        synchronized(sb) {
+            return contentEquals((CharSequence)sb);
+        }
+    }
+
+    /**
+     * Returns <tt>true</tt> if and only if this <tt>String</tt> represents
+     * the same sequence of char values as the specified sequence.
+     *
+     * @param   cs         the sequence to compare to.
+     * @return  <tt>true</tt> if and only if this <tt>String</tt> represents
+     *          the same sequence of char values as the specified
+     *          sequence, otherwise <tt>false</tt>.
+     * @throws NullPointerException if <code>cs</code> is <code>null</code>
+     * @since 1.5
+     */
+    public boolean contentEquals(CharSequence cs) {
+        if (count != cs.length())
+            return false;
+        // Argument is a StringBuffer, StringBuilder
+        if (cs instanceof AbstractStringBuilder) {
+            char v1[] = value;
+            char v2[] = ((AbstractStringBuilder)cs).getValue();
+            int i = offset;
+            int j = 0;
+            int n = count;
+            while (n-- != 0) {
+                if (v1[i++] != v2[j++])
+                    return false;
+            }
+        }
+        // Argument is a String
+        if (cs.equals(this))
+            return true;
+        // Argument is a generic CharSequence
+        char v1[] = value;
+        int i = offset;
+        int j = 0;
+        int n = count;
+        while (n-- != 0) {
+            if (v1[i++] != cs.charAt(j++))
+                return false;
+        }
+        return true;
+    }
+
+    /**
+     * Compares this <code>String</code> to another <code>String</code>,
+     * ignoring case considerations.  Two strings are considered equal
+     * ignoring case if they are of the same length, and corresponding
+     * characters in the two strings are equal ignoring case.
+     * <p>
+     * Two characters <code>c1</code> and <code>c2</code> are considered
+     * the same, ignoring case if at least one of the following is true:
+     * <ul><li>The two characters are the same (as compared by the
+     * <code>==</code> operator).
+     * <li>Applying the method {@link java.lang.Character#toUpperCase(char)}
+     * to each character produces the same result.
+     * <li>Applying the method {@link java.lang.Character#toLowerCase(char)}
+     * to each character produces the same result.</ul>
+     *
+     * @param   anotherString   the <code>String</code> to compare this
+     *                          <code>String</code> against.
+     * @return  <code>true</code> if the argument is not <code>null</code>
+     *          and the <code>String</code>s are equal,
+     *          ignoring case; <code>false</code> otherwise.
+     * @see     #equals(Object)
+     * @see     java.lang.Character#toLowerCase(char)
+     * @see java.lang.Character#toUpperCase(char)
+     */
+    public boolean equalsIgnoreCase(String anotherString) {
+        return (this == anotherString) ? true :
+               (anotherString != null) && (anotherString.count == count) &&
+	       regionMatches(true, 0, anotherString, 0, count);
+    }
+
+    /**
+     * Compares two strings lexicographically.
+     * The comparison is based on the Unicode value of each character in
+     * the strings. The character sequence represented by this
+     * <code>String</code> object is compared lexicographically to the
+     * character sequence represented by the argument string. The result is
+     * a negative integer if this <code>String</code> object
+     * lexicographically precedes the argument string. The result is a
+     * positive integer if this <code>String</code> object lexicographically
+     * follows the argument string. The result is zero if the strings
+     * are equal; <code>compareTo</code> returns <code>0</code> exactly when
+     * the {@link #equals(Object)} method would return <code>true</code>.
+     * <p>
+     * This is the definition of lexicographic ordering. If two strings are
+     * different, then either they have different characters at some index
+     * that is a valid index for both strings, or their lengths are different,
+     * or both. If they have different characters at one or more index
+     * positions, let <i>k</i> be the smallest such index; then the string
+     * whose character at position <i>k</i> has the smaller value, as
+     * determined by using the &lt; operator, lexicographically precedes the
+     * other string. In this case, <code>compareTo</code> returns the
+     * difference of the two character values at position <code>k</code> in
+     * the two string -- that is, the value:
+     * <blockquote><pre>
+     * this.charAt(k)-anotherString.charAt(k)
+     * </pre></blockquote>
+     * If there is no index position at which they differ, then the shorter
+     * string lexicographically precedes the longer string. In this case,
+     * <code>compareTo</code> returns the difference of the lengths of the
+     * strings -- that is, the value:
+     * <blockquote><pre>
+     * this.length()-anotherString.length()
+     * </pre></blockquote>
+     *
+     * @param   anotherString   the <code>String</code> to be compared.
+     * @return  the value <code>0</code> if the argument string is equal to
+     *          this string; a value less than <code>0</code> if this string
+     *          is lexicographically less than the string argument; and a
+     *          value greater than <code>0</code> if this string is
+     *          lexicographically greater than the string argument.
+     */
+    public int compareTo(String anotherString) {
+	int len1 = count;
+	int len2 = anotherString.count;
+	int n = Math.min(len1, len2);
+	char v1[] = value;
+	char v2[] = anotherString.value;
+	int i = offset;
+	int j = anotherString.offset;
+
+	if (i == j) {
+	    int k = i;
+	    int lim = n + i;
+	    while (k < lim) {
+		char c1 = v1[k];
+		char c2 = v2[k];
+		if (c1 != c2) {
+		    return c1 - c2;
+		}
+		k++;
+	    }
+	} else {
+	    while (n-- != 0) {
+		char c1 = v1[i++];
+		char c2 = v2[j++];
+		if (c1 != c2) {
+		    return c1 - c2;
+		}
+	    }
+	}
+	return len1 - len2;
+    }
+
+    /**
+     * A Comparator that orders <code>String</code> objects as by
+     * <code>compareToIgnoreCase</code>. This comparator is serializable.
+     * <p>
+     * Note that this Comparator does <em>not</em> take locale into account,
+     * and will result in an unsatisfactory ordering for certain locales.
+     * The java.text package provides <em>Collators</em> to allow
+     * locale-sensitive ordering.
+     *
+     * @see     java.text.Collator#compare(String, String)
+     * @since   1.2
+     */
+    public static final Comparator<String> CASE_INSENSITIVE_ORDER
+                                         = new CaseInsensitiveComparator();
+    private static class CaseInsensitiveComparator
+                         implements Comparator<String>, java.io.Serializable {
+	// use serialVersionUID from JDK 1.2.2 for interoperability
+	private static final long serialVersionUID = 8575799808933029326L;
+
+        public int compare(String s1, String s2) {
+            int n1=s1.length(), n2=s2.length();
+            for (int i1=0, i2=0; i1<n1 && i2<n2; i1++, i2++) {
+                char c1 = s1.charAt(i1);
+                char c2 = s2.charAt(i2);
+                if (c1 != c2) {
+                    c1 = Character.toUpperCase(c1);
+                    c2 = Character.toUpperCase(c2);
+                    if (c1 != c2) {
+                        c1 = Character.toLowerCase(c1);
+                        c2 = Character.toLowerCase(c2);
+                        if (c1 != c2) {
+                            return c1 - c2;
+                        }
+                    }
+                }
+            }
+            return n1 - n2;
+        }
+    }
+
+    /**
+     * Compares two strings lexicographically, ignoring case
+     * differences. This method returns an integer whose sign is that of
+     * calling <code>compareTo</code> with normalized versions of the strings
+     * where case differences have been eliminated by calling
+     * <code>Character.toLowerCase(Character.toUpperCase(character))</code> on
+     * each character.
+     * <p>
+     * Note that this method does <em>not</em> take locale into account,
+     * and will result in an unsatisfactory ordering for certain locales.
+     * The java.text package provides <em>collators</em> to allow
+     * locale-sensitive ordering.
+     *
+     * @param   str   the <code>String</code> to be compared.
+     * @return  a negative integer, zero, or a positive integer as the
+     *		specified String is greater than, equal to, or less
+     *		than this String, ignoring case considerations.
+     * @see     java.text.Collator#compare(String, String)
+     * @since   1.2
+     */
+    public int compareToIgnoreCase(String str) {
+        return CASE_INSENSITIVE_ORDER.compare(this, str);
+    }
+
+    /**
+     * Tests if two string regions are equal.
+     * <p>
+     * A substring of this <tt>String</tt> object is compared to a substring
+     * of the argument other. The result is true if these substrings
+     * represent identical character sequences. The substring of this
+     * <tt>String</tt> object to be compared begins at index <tt>toffset</tt>
+     * and has length <tt>len</tt>. The substring of other to be compared
+     * begins at index <tt>ooffset</tt> and has length <tt>len</tt>. The
+     * result is <tt>false</tt> if and only if at least one of the following
+     * is true:
+     * <ul><li><tt>toffset</tt> is negative.
+     * <li><tt>ooffset</tt> is negative.
+     * <li><tt>toffset+len</tt> is greater than the length of this
+     * <tt>String</tt> object.
+     * <li><tt>ooffset+len</tt> is greater than the length of the other
+     * argument.
+     * <li>There is some nonnegative integer <i>k</i> less than <tt>len</tt>
+     * such that:
+     * <tt>this.charAt(toffset+<i>k</i>)&nbsp;!=&nbsp;other.charAt(ooffset+<i>k</i>)</tt>
+     * </ul>
+     *
+     * @param   toffset   the starting offset of the subregion in this string.
+     * @param   other     the string argument.
+     * @param   ooffset   the starting offset of the subregion in the string
+     *                    argument.
+     * @param   len       the number of characters to compare.
+     * @return  <code>true</code> if the specified subregion of this string
+     *          exactly matches the specified subregion of the string argument;
+     *          <code>false</code> otherwise.
+     */
+    public boolean regionMatches(int toffset, String other, int ooffset,
+				 int len) {
+	char ta[] = value;
+	int to = offset + toffset;
+	char pa[] = other.value;
+	int po = other.offset + ooffset;
+	// Note: toffset, ooffset, or len might be near -1>>>1.
+	if ((ooffset < 0) || (toffset < 0) || (toffset > (long)count - len)
+	    || (ooffset > (long)other.count - len)) {
+	    return false;
+	}
+	while (len-- > 0) {
+	    if (ta[to++] != pa[po++]) {
+	        return false;
+	    }
+	}
+	return true;
+    }
+
+    /**
+     * Tests if two string regions are equal.
+     * <p>
+     * A substring of this <tt>String</tt> object is compared to a substring
+     * of the argument <tt>other</tt>. The result is <tt>true</tt> if these
+     * substrings represent character sequences that are the same, ignoring
+     * case if and only if <tt>ignoreCase</tt> is true. The substring of
+     * this <tt>String</tt> object to be compared begins at index
+     * <tt>toffset</tt> and has length <tt>len</tt>. The substring of
+     * <tt>other</tt> to be compared begins at index <tt>ooffset</tt> and
+     * has length <tt>len</tt>. The result is <tt>false</tt> if and only if
+     * at least one of the following is true:
+     * <ul><li><tt>toffset</tt> is negative.
+     * <li><tt>ooffset</tt> is negative.
+     * <li><tt>toffset+len</tt> is greater than the length of this
+     * <tt>String</tt> object.
+     * <li><tt>ooffset+len</tt> is greater than the length of the other
+     * argument.
+     * <li><tt>ignoreCase</tt> is <tt>false</tt> and there is some nonnegative
+     * integer <i>k</i> less than <tt>len</tt> such that:
+     * <blockquote><pre>
+     * this.charAt(toffset+k) != other.charAt(ooffset+k)
+     * </pre></blockquote>
+     * <li><tt>ignoreCase</tt> is <tt>true</tt> and there is some nonnegative
+     * integer <i>k</i> less than <tt>len</tt> such that:
+     * <blockquote><pre>
+     * Character.toLowerCase(this.charAt(toffset+k)) !=
+               Character.toLowerCase(other.charAt(ooffset+k))
+     * </pre></blockquote>
+     * and:
+     * <blockquote><pre>
+     * Character.toUpperCase(this.charAt(toffset+k)) !=
+     *         Character.toUpperCase(other.charAt(ooffset+k))
+     * </pre></blockquote>
+     * </ul>
+     *
+     * @param   ignoreCase   if <code>true</code>, ignore case when comparing
+     *                       characters.
+     * @param   toffset      the starting offset of the subregion in this
+     *                       string.
+     * @param   other        the string argument.
+     * @param   ooffset      the starting offset of the subregion in the string
+     *                       argument.
+     * @param   len          the number of characters to compare.
+     * @return  <code>true</code> if the specified subregion of this string
+     *          matches the specified subregion of the string argument;
+     *          <code>false</code> otherwise. Whether the matching is exact
+     *          or case insensitive depends on the <code>ignoreCase</code>
+     *          argument.
+     */
+    public boolean regionMatches(boolean ignoreCase, int toffset,
+                           String other, int ooffset, int len) {
+        char ta[] = value;
+        int to = offset + toffset;
+        char pa[] = other.value;
+        int po = other.offset + ooffset;
+        // Note: toffset, ooffset, or len might be near -1>>>1.
+        if ((ooffset < 0) || (toffset < 0) || (toffset > (long)count - len) ||
+                (ooffset > (long)other.count - len)) {
+            return false;
+        }
+        while (len-- > 0) {
+            char c1 = ta[to++];
+            char c2 = pa[po++];
+            if (c1 == c2) {
+                continue;
+            }
+            if (ignoreCase) {
+                // If characters don't match but case may be ignored,
+                // try converting both characters to uppercase.
+                // If the results match, then the comparison scan should
+                // continue.
+                char u1 = Character.toUpperCase(c1);
+                char u2 = Character.toUpperCase(c2);
+                if (u1 == u2) {
+                    continue;
+                }
+                // Unfortunately, conversion to uppercase does not work properly
+                // for the Georgian alphabet, which has strange rules about case
+                // conversion.  So we need to make one last check before
+                // exiting.
+                if (Character.toLowerCase(u1) == Character.toLowerCase(u2)) {
+                    continue;
+                }
+            }
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * Tests if this string starts with the specified prefix beginning
+     * a specified index.
+     *
+     * @param   prefix    the prefix.
+     * @param   toffset   where to begin looking in the string.
+     * @return  <code>true</code> if the character sequence represented by the
+     *          argument is a prefix of the substring of this object starting
+     *          at index <code>toffset</code>; <code>false</code> otherwise.
+     *          The result is <code>false</code> if <code>toffset</code> is
+     *          negative or greater than the length of this
+     *          <code>String</code> object; otherwise the result is the same
+     *          as the result of the expression
+     *          <pre>
+     *          this.substring(toffset).startsWith(prefix)
+     *          </pre>
+     */
+    public boolean startsWith(String prefix, int toffset) {
+	char ta[] = value;
+	int to = offset + toffset;
+	char pa[] = prefix.value;
+	int po = prefix.offset;
+	int pc = prefix.count;
+	// Note: toffset might be near -1>>>1.
+	if ((toffset < 0) || (toffset > count - pc)) {
+	    return false;
+	}
+	while (--pc >= 0) {
+	    if (ta[to++] != pa[po++]) {
+	        return false;
+	    }
+	}
+	return true;
+    }
+
+    /**
+     * Tests if this string starts with the specified prefix.
+     *
+     * @param   prefix   the prefix.
+     * @return  <code>true</code> if the character sequence represented by the
+     *          argument is a prefix of the character sequence represented by
+     *          this string; <code>false</code> otherwise.
+     *          Note also that <code>true</code> will be returned if the
+     *          argument is an empty string or is equal to this
+     *          <code>String</code> object as determined by the
+     *          {@link #equals(Object)} method.
+     * @since   1. 0
+     */
+    public boolean startsWith(String prefix) {
+	return startsWith(prefix, 0);
+    }
+
+    /**
+     * Tests if this string ends with the specified suffix.
+     *
+     * @param   suffix   the suffix.
+     * @return  <code>true</code> if the character sequence represented by the
+     *          argument is a suffix of the character sequence represented by
+     *          this object; <code>false</code> otherwise. Note that the
+     *          result will be <code>true</code> if the argument is the
+     *          empty string or is equal to this <code>String</code> object
+     *          as determined by the {@link #equals(Object)} method.
+     */
+    public boolean endsWith(String suffix) {
+	return startsWith(suffix, count - suffix.count);
+    }
+
+    /**
+     * Returns a hash code for this string. The hash code for a
+     * <code>String</code> object is computed as
+     * <blockquote><pre>
+     * s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
+     * </pre></blockquote>
+     * using <code>int</code> arithmetic, where <code>s[i]</code> is the
+     * <i>i</i>th character of the string, <code>n</code> is the length of
+     * the string, and <code>^</code> indicates exponentiation.
+     * (The hash value of the empty string is zero.)
+     *
+     * @return  a hash code value for this object.
+     */
+    public int hashCode() {
+	int h = hash;
+	if (h == 0) {
+	    int off = offset;
+	    char val[] = value;
+	    int len = count;
+
+            for (int i = 0; i < len; i++) {
+                h = 31*h + val[off++];
+            }
+            hash = h;
+        }
+        return h;
+    }
+
+    /**
+     * Returns the index within this string of the first occurrence of
+     * the specified character. If a character with value
+     * <code>ch</code> occurs in the character sequence represented by
+     * this <code>String</code> object, then the index (in Unicode
+     * code units) of the first such occurrence is returned. For
+     * values of <code>ch</code> in the range from 0 to 0xFFFF
+     * (inclusive), this is the smallest value <i>k</i> such that:
+     * <blockquote><pre>
+     * this.charAt(<i>k</i>) == ch
+     * </pre></blockquote>
+     * is true. For other values of <code>ch</code>, it is the
+     * smallest value <i>k</i> such that:
+     * <blockquote><pre>
+     * this.codePointAt(<i>k</i>) == ch
+     * </pre></blockquote>
+     * is true. In either case, if no such character occurs in this
+     * string, then <code>-1</code> is returned.
+     *
+     * @param   ch   a character (Unicode code point).
+     * @return  the index of the first occurrence of the character in the
+     *          character sequence represented by this object, or
+     *          <code>-1</code> if the character does not occur.
+     */
+    public int indexOf(int ch) {
+	return indexOf(ch, 0);
+    }
+
+    /**
+     * Returns the index within this string of the first occurrence of the
+     * specified character, starting the search at the specified index.
+     * <p>
+     * If a character with value <code>ch</code> occurs in the
+     * character sequence represented by this <code>String</code>
+     * object at an index no smaller than <code>fromIndex</code>, then
+     * the index of the first such occurrence is returned. For values
+     * of <code>ch</code> in the range from 0 to 0xFFFF (inclusive),
+     * this is the smallest value <i>k</i> such that:
+     * <blockquote><pre>
+     * (this.charAt(<i>k</i>) == ch) && (<i>k</i> &gt;= fromIndex)
+     * </pre></blockquote>
+     * is true. For other values of <code>ch</code>, it is the
+     * smallest value <i>k</i> such that:
+     * <blockquote><pre>
+     * (this.codePointAt(<i>k</i>) == ch) && (<i>k</i> &gt;= fromIndex)
+     * </pre></blockquote>
+     * is true. In either case, if no such character occurs in this
+     * string at or after position <code>fromIndex</code>, then
+     * <code>-1</code> is returned.
+     *
+     * <p>
+     * There is no restriction on the value of <code>fromIndex</code>. If it
+     * is negative, it has the same effect as if it were zero: this entire
+     * string may be searched. If it is greater than the length of this
+     * string, it has the same effect as if it were equal to the length of
+     * this string: <code>-1</code> is returned.
+     *
+     * <p>All indices are specified in <code>char</code> values
+     * (Unicode code units).
+     *
+     * @param   ch          a character (Unicode code point).
+     * @param   fromIndex   the index to start the search from.
+     * @return  the index of the first occurrence of the character in the
+     *          character sequence represented by this object that is greater
+     *          than or equal to <code>fromIndex</code>, or <code>-1</code>
+     *          if the character does not occur.
+     */
+    public int indexOf(int ch, int fromIndex) {
+	int max = offset + count;
+	char v[] = value;
+
+	if (fromIndex < 0) {
+	    fromIndex = 0;
+	} else if (fromIndex >= count) {
+	    // Note: fromIndex might be near -1>>>1.
+	    return -1;
+	}
+
+	int i = offset + fromIndex;
+	if (ch < Character.MIN_SUPPLEMENTARY_CODE_POINT) {
+	    // handle most cases here (ch is a BMP code point or a
+	    // negative value (invalid code point))
+	    for (; i < max ; i++) {
+		if (v[i] == ch) {
+		    return i - offset;
+		}
+	    }
+	    return -1;
+	}
+
+	if (ch <= Character.MAX_CODE_POINT) {
+	    // handle supplementary characters here
+	    char[] surrogates = Character.toChars(ch);
+	    for (; i < max; i++) {
+		if (v[i] == surrogates[0]) {
+		    if (i + 1 == max) {
+			break;
+		    }
+		    if (v[i+1] == surrogates[1]) {
+			return i - offset;
+		    }
+		}
+	    }
+	}
+	return -1;
+    }
+
+    /**
+     * Returns the index within this string of the last occurrence of
+     * the specified character. For values of <code>ch</code> in the
+     * range from 0 to 0xFFFF (inclusive), the index (in Unicode code
+     * units) returned is the largest value <i>k</i> such that:
+     * <blockquote><pre>
+     * this.charAt(<i>k</i>) == ch
+     * </pre></blockquote>
+     * is true. For other values of <code>ch</code>, it is the
+     * largest value <i>k</i> such that:
+     * <blockquote><pre>
+     * this.codePointAt(<i>k</i>) == ch
+     * </pre></blockquote>
+     * is true.  In either case, if no such character occurs in this
+     * string, then <code>-1</code> is returned.  The
+     * <code>String</code> is searched backwards starting at the last
+     * character.
+     *
+     * @param   ch   a character (Unicode code point).
+     * @return  the index of the last occurrence of the character in the
+     *          character sequence represented by this object, or
+     *          <code>-1</code> if the character does not occur.
+     */
+    public int lastIndexOf(int ch) {
+	return lastIndexOf(ch, count - 1);
+    }
+
+    /**
+     * Returns the index within this string of the last occurrence of
+     * the specified character, searching backward starting at the
+     * specified index. For values of <code>ch</code> in the range
+     * from 0 to 0xFFFF (inclusive), the index returned is the largest
+     * value <i>k</i> such that:
+     * <blockquote><pre>
+     * (this.charAt(<i>k</i>) == ch) && (<i>k</i> &lt;= fromIndex)
+     * </pre></blockquote>
+     * is true. For other values of <code>ch</code>, it is the
+     * largest value <i>k</i> such that:
+     * <blockquote><pre>
+     * (this.codePointAt(<i>k</i>) == ch) && (<i>k</i> &lt;= fromIndex)
+     * </pre></blockquote>
+     * is true. In either case, if no such character occurs in this
+     * string at or before position <code>fromIndex</code>, then
+     * <code>-1</code> is returned.
+     *
+     * <p>All indices are specified in <code>char</code> values
+     * (Unicode code units).
+     *
+     * @param   ch          a character (Unicode code point).
+     * @param   fromIndex   the index to start the search from. There is no
+     *          restriction on the value of <code>fromIndex</code>. If it is
+     *          greater than or equal to the length of this string, it has
+     *          the same effect as if it were equal to one less than the
+     *          length of this string: this entire string may be searched.
+     *          If it is negative, it has the same effect as if it were -1:
+     *          -1 is returned.
+     * @return  the index of the last occurrence of the character in the
+     *          character sequence represented by this object that is less
+     *          than or equal to <code>fromIndex</code>, or <code>-1</code>
+     *          if the character does not occur before that point.
+     */
+    public int lastIndexOf(int ch, int fromIndex) {
+	int min = offset;
+	char v[] = value;
+
+	int i = offset + ((fromIndex >= count) ? count - 1 : fromIndex);
+
+	if (ch < Character.MIN_SUPPLEMENTARY_CODE_POINT) {
+	    // handle most cases here (ch is a BMP code point or a
+	    // negative value (invalid code point))
+	    for (; i >= min ; i--) {
+		if (v[i] == ch) {
+		    return i - offset;
+		}
+	    }
+	    return -1;
+	}
+
+	int max = offset + count;
+	if (ch <= Character.MAX_CODE_POINT) {
+	    // handle supplementary characters here
+	    char[] surrogates = Character.toChars(ch);
+	    for (; i >= min; i--) {
+		if (v[i] == surrogates[0]) {
+		    if (i + 1 == max) {
+			break;
+		    }
+		    if (v[i+1] == surrogates[1]) {
+			return i - offset;
+		    }
+		}
+	    }
+	}
+	return -1;
+    }
+
+    /**
+     * Returns the index within this string of the first occurrence of the
+     * specified substring. The integer returned is the smallest value
+     * <i>k</i> such that:
+     * <blockquote><pre>
+     * this.startsWith(str, <i>k</i>)
+     * </pre></blockquote>
+     * is <code>true</code>.
+     *
+     * @param   str   any string.
+     * @return  if the string argument occurs as a substring within this
+     *          object, then the index of the first character of the first
+     *          such substring is returned; if it does not occur as a
+     *          substring, <code>-1</code> is returned.
+     */
+    public int indexOf(String str) {
+	return indexOf(str, 0);
+    }
+
+    /**
+     * Returns the index within this string of the first occurrence of the
+     * specified substring, starting at the specified index.  The integer
+     * returned is the smallest value <tt>k</tt> for which:
+     * <blockquote><pre>
+     *     k &gt;= Math.min(fromIndex, str.length()) && this.startsWith(str, k)
+     * </pre></blockquote>
+     * If no such value of <i>k</i> exists, then -1 is returned.
+     *
+     * @param   str         the substring for which to search.
+     * @param   fromIndex   the index from which to start the search.
+     * @return  the index within this string of the first occurrence of the
+     *          specified substring, starting at the specified index.
+     */
+    public int indexOf(String str, int fromIndex) {
+        return indexOf(value, offset, count,
+                       str.value, str.offset, str.count, fromIndex);
+    }
+
+    /**
+     * Code shared by String and StringBuffer to do searches. The
+     * source is the character array being searched, and the target
+     * is the string being searched for.
+     *
+     * @param   source       the characters being searched.
+     * @param   sourceOffset offset of the source string.
+     * @param   sourceCount  count of the source string.
+     * @param   target       the characters being searched for.
+     * @param   targetOffset offset of the target string.
+     * @param   targetCount  count of the target string.
+     * @param   fromIndex    the index to begin searching from.
+     */
+    static int indexOf(char[] source, int sourceOffset, int sourceCount,
+                       char[] target, int targetOffset, int targetCount,
+                       int fromIndex) {
+	if (fromIndex >= sourceCount) {
+            return (targetCount == 0 ? sourceCount : -1);
+	}
+    	if (fromIndex < 0) {
+    	    fromIndex = 0;
+    	}
+	if (targetCount == 0) {
+	    return fromIndex;
+	}
+
+        char first  = target[targetOffset];
+        int max = sourceOffset + (sourceCount - targetCount);
+
+        for (int i = sourceOffset + fromIndex; i <= max; i++) {
+            /* Look for first character. */
+            if (source[i] != first) {
+                while (++i <= max && source[i] != first);
+            }
+
+            /* Found first character, now look at the rest of v2 */
+            if (i <= max) {
+                int j = i + 1;
+                int end = j + targetCount - 1;
+                for (int k = targetOffset + 1; j < end && source[j] ==
+                         target[k]; j++, k++);
+
+                if (j == end) {
+                    /* Found whole string. */
+                    return i - sourceOffset;
+                }
+            }
+        }
+        return -1;
+    }
+
+    /**
+     * Returns the index within this string of the rightmost occurrence
+     * of the specified substring.  The rightmost empty string "" is
+     * considered to occur at the index value <code>this.length()</code>.
+     * The returned index is the largest value <i>k</i> such that
+     * <blockquote><pre>
+     * this.startsWith(str, k)
+     * </pre></blockquote>
+     * is true.
+     *
+     * @param   str   the substring to search for.
+     * @return  if the string argument occurs one or more times as a substring
+     *          within this object, then the index of the first character of
+     *          the last such substring is returned. If it does not occur as
+     *          a substring, <code>-1</code> is returned.
+     */
+    public int lastIndexOf(String str) {
+	return lastIndexOf(str, count);
+    }
+
+    /**
+     * Returns the index within this string of the last occurrence of the
+     * specified substring, searching backward starting at the specified index.
+     * The integer returned is the largest value <i>k</i> such that:
+     * <blockquote><pre>
+     *     k &lt;= Math.min(fromIndex, str.length()) && this.startsWith(str, k)
+     * </pre></blockquote>
+     * If no such value of <i>k</i> exists, then -1 is returned.
+     *
+     * @param   str         the substring to search for.
+     * @param   fromIndex   the index to start the search from.
+     * @return  the index within this string of the last occurrence of the
+     *          specified substring.
+     */
+    public int lastIndexOf(String str, int fromIndex) {
+        return lastIndexOf(value, offset, count,
+                           str.value, str.offset, str.count, fromIndex);
+    }
+
+    /**
+     * Code shared by String and StringBuffer to do searches. The
+     * source is the character array being searched, and the target
+     * is the string being searched for.
+     *
+     * @param   source       the characters being searched.
+     * @param   sourceOffset offset of the source string.
+     * @param   sourceCount  count of the source string.
+     * @param   target       the characters being searched for.
+     * @param   targetOffset offset of the target string.
+     * @param   targetCount  count of the target string.
+     * @param   fromIndex    the index to begin searching from.
+     */
+    static int lastIndexOf(char[] source, int sourceOffset, int sourceCount,
+                           char[] target, int targetOffset, int targetCount,
+                           int fromIndex) {
+        /*
+	 * Check arguments; return immediately where possible. For
+	 * consistency, don't check for null str.
+	 */
+        int rightIndex = sourceCount - targetCount;
+	if (fromIndex < 0) {
+	    return -1;
+	}
+	if (fromIndex > rightIndex) {
+	    fromIndex = rightIndex;
+	}
+	/* Empty string always matches. */
+	if (targetCount == 0) {
+	    return fromIndex;
+	}
+
+        int strLastIndex = targetOffset + targetCount - 1;
+	char strLastChar = target[strLastIndex];
+	int min = sourceOffset + targetCount - 1;
+	int i = min + fromIndex;
+
+    startSearchForLastChar:
+	while (true) {
+	    while (i >= min && source[i] != strLastChar) {
+		i--;
+	    }
+	    if (i < min) {
+		return -1;
+	    }
+	    int j = i - 1;
+	    int start = j - (targetCount - 1);
+	    int k = strLastIndex - 1;
+
+	    while (j > start) {
+	        if (source[j--] != target[k--]) {
+		    i--;
+		    continue startSearchForLastChar;
+		}
+	    }
+	    return start - sourceOffset + 1;
+	}
+    }
+
+    /**
+     * Returns a new string that is a substring of this string. The
+     * substring begins with the character at the specified index and
+     * extends to the end of this string. <p>
+     * Examples:
+     * <blockquote><pre>
+     * "unhappy".substring(2) returns "happy"
+     * "Harbison".substring(3) returns "bison"
+     * "emptiness".substring(9) returns "" (an empty string)
+     * </pre></blockquote>
+     *
+     * @param      beginIndex   the beginning index, inclusive.
+     * @return     the specified substring.
+     * @exception  IndexOutOfBoundsException  if
+     *             <code>beginIndex</code> is negative or larger than the
+     *             length of this <code>String</code> object.
+     */
+    public String substring(int beginIndex) {
+	return substring(beginIndex, count);
+    }
+
+    /**
+     * Returns a new string that is a substring of this string. The
+     * substring begins at the specified <code>beginIndex</code> and
+     * extends to the character at index <code>endIndex - 1</code>.
+     * Thus the length of the substring is <code>endIndex-beginIndex</code>.
+     * <p>
+     * Examples:
+     * <blockquote><pre>
+     * "hamburger".substring(4, 8) returns "urge"
+     * "smiles".substring(1, 5) returns "mile"
+     * </pre></blockquote>
+     *
+     * @param      beginIndex   the beginning index, inclusive.
+     * @param      endIndex     the ending index, exclusive.
+     * @return     the specified substring.
+     * @exception  IndexOutOfBoundsException  if the
+     *             <code>beginIndex</code> is negative, or
+     *             <code>endIndex</code> is larger than the length of
+     *             this <code>String</code> object, or
+     *             <code>beginIndex</code> is larger than
+     *             <code>endIndex</code>.
+     */
+    public String substring(int beginIndex, int endIndex) {
+	if (beginIndex < 0) {
+	    throw new StringIndexOutOfBoundsException(beginIndex);
+	}
+	if (endIndex > count) {
+	    throw new StringIndexOutOfBoundsException(endIndex);
+	}
+	if (beginIndex > endIndex) {
+	    throw new StringIndexOutOfBoundsException(endIndex - beginIndex);
+	}
+	return ((beginIndex == 0) && (endIndex == count)) ? this :
+	    new String(offset + beginIndex, endIndex - beginIndex, value);
+    }
+
+    /**
+     * Returns a new character sequence that is a subsequence of this sequence.
+     *
+     * <p> An invocation of this method of the form
+     *
+     * <blockquote><pre>
+     * str.subSequence(begin,&nbsp;end)</pre></blockquote>
+     *
+     * behaves in exactly the same way as the invocation
+     *
+     * <blockquote><pre>
+     * str.substring(begin,&nbsp;end)</pre></blockquote>
+     *
+     * This method is defined so that the <tt>String</tt> class can implement
+     * the {@link CharSequence} interface. </p>
+     *
+     * @param      beginIndex   the begin index, inclusive.
+     * @param      endIndex     the end index, exclusive.
+     * @return     the specified subsequence.
+     *
+     * @throws  IndexOutOfBoundsException
+     *          if <tt>beginIndex</tt> or <tt>endIndex</tt> are negative,
+     *          if <tt>endIndex</tt> is greater than <tt>length()</tt>,
+     *          or if <tt>beginIndex</tt> is greater than <tt>startIndex</tt>
+     *
+     * @since 1.4
+     * @spec JSR-51
+     */
+    public CharSequence subSequence(int beginIndex, int endIndex) {
+        return this.substring(beginIndex, endIndex);
+    }
+
+    /**
+     * Concatenates the specified string to the end of this string.
+     * <p>
+     * If the length of the argument string is <code>0</code>, then this
+     * <code>String</code> object is returned. Otherwise, a new
+     * <code>String</code> object is created, representing a character
+     * sequence that is the concatenation of the character sequence
+     * represented by this <code>String</code> object and the character
+     * sequence represented by the argument string.<p>
+     * Examples:
+     * <blockquote><pre>
+     * "cares".concat("s") returns "caress"
+     * "to".concat("get").concat("her") returns "together"
+     * </pre></blockquote>
+     *
+     * @param   str   the <code>String</code> that is concatenated to the end
+     *                of this <code>String</code>.
+     * @return  a string that represents the concatenation of this object's
+     *          characters followed by the string argument's characters.
+     */
+    public String concat(String str) {
+	int otherLen = str.length();
+	if (otherLen == 0) {
+	    return this;
+	}
+	char buf[] = new char[count + otherLen];
+	getChars(0, count, buf, 0);
+	str.getChars(0, otherLen, buf, count);
+	return new String(0, count + otherLen, buf);
+    }
+
+    /**
+     * Returns a new string resulting from replacing all occurrences of
+     * <code>oldChar</code> in this string with <code>newChar</code>.
+     * <p>
+     * If the character <code>oldChar</code> does not occur in the
+     * character sequence represented by this <code>String</code> object,
+     * then a reference to this <code>String</code> object is returned.
+     * Otherwise, a new <code>String</code> object is created that
+     * represents a character sequence identical to the character sequence
+     * represented by this <code>String</code> object, except that every
+     * occurrence of <code>oldChar</code> is replaced by an occurrence
+     * of <code>newChar</code>.
+     * <p>
+     * Examples:
+     * <blockquote><pre>
+     * "mesquite in your cellar".replace('e', 'o')
+     *         returns "mosquito in your collar"
+     * "the war of baronets".replace('r', 'y')
+     *         returns "the way of bayonets"
+     * "sparring with a purple porpoise".replace('p', 't')
+     *         returns "starring with a turtle tortoise"
+     * "JonL".replace('q', 'x') returns "JonL" (no change)
+     * </pre></blockquote>
+     *
+     * @param   oldChar   the old character.
+     * @param   newChar   the new character.
+     * @return  a string derived from this string by replacing every
+     *          occurrence of <code>oldChar</code> with <code>newChar</code>.
+     */
+    public String replace(char oldChar, char newChar) {
+	if (oldChar != newChar) {
+	    int len = count;
+	    int i = -1;
+	    char[] val = value; /* avoid getfield opcode */
+	    int off = offset;   /* avoid getfield opcode */
+
+	    while (++i < len) {
+		if (val[off + i] == oldChar) {
+		    break;
+		}
+	    }
+	    if (i < len) {
+		char buf[] = new char[len];
+		for (int j = 0 ; j < i ; j++) {
+		    buf[j] = val[off+j];
+		}
+		while (i < len) {
+		    char c = val[off + i];
+		    buf[i] = (c == oldChar) ? newChar : c;
+		    i++;
+		}
+		return new String(0, len, buf);
+	    }
+	}
+	return this;
+    }
+
+    /**
+     * Tells whether or not this string matches the given <a
+     * href="../util/regex/Pattern.html#sum">regular expression</a>.
+     *
+     * <p> An invocation of this method of the form
+     * <i>str</i><tt>.matches(</tt><i>regex</i><tt>)</tt> yields exactly the
+     * same result as the expression
+     *
+     * <blockquote><tt> {@link java.util.regex.Pattern}.{@link
+     * java.util.regex.Pattern#matches(String,CharSequence)
+     * matches}(</tt><i>regex</i><tt>,</tt> <i>str</i><tt>)</tt></blockquote>
+     *
+     * @param   regex
+     *          the regular expression to which this string is to be matched
+     *
+     * @return  <tt>true</tt> if, and only if, this string matches the
+     *          given regular expression
+     *
+     * @throws  PatternSyntaxException
+     *          if the regular expression's syntax is invalid
+     *
+     * @see java.util.regex.Pattern
+     *
+     * @since 1.4
+     * @spec JSR-51
+     */
+    public boolean matches(String regex) {
+        return Pattern.matches(regex, this);
+    }
+
+    /**
+     * Returns true if and only if this string contains the specified
+     * sequence of char values.
+     *
+     * @param s the sequence to search for
+     * @return true if this string contains <code>s</code>, false otherwise
+     * @throws NullPointerException if <code>s</code> is <code>null</code>
+     * @since 1.5
+     */
+    public boolean contains(CharSequence s) {
+        return indexOf(s.toString()) > -1;
+    }
+
+    /**
+     * Replaces the first substring of this string that matches the given <a
+     * href="../util/regex/Pattern.html#sum">regular expression</a> with the
+     * given replacement.
+     *
+     * <p> An invocation of this method of the form
+     * <i>str</i><tt>.replaceFirst(</tt><i>regex</i><tt>,</tt> <i>repl</i><tt>)</tt>
+     * yields exactly the same result as the expression
+     *
+     * <blockquote><tt>
+     * {@link java.util.regex.Pattern}.{@link java.util.regex.Pattern#compile
+     * compile}(</tt><i>regex</i><tt>).{@link
+     * java.util.regex.Pattern#matcher(java.lang.CharSequence)
+     * matcher}(</tt><i>str</i><tt>).{@link java.util.regex.Matcher#replaceFirst
+     * replaceFirst}(</tt><i>repl</i><tt>)</tt></blockquote>
+     *
+     * @param   regex
+     *          the regular expression to which this string is to be matched
+     *
+     * @return  The resulting <tt>String</tt>
+     *
+     * @throws  PatternSyntaxException
+     *          if the regular expression's syntax is invalid
+     *
+     * @see java.util.regex.Pattern
+     *
+     * @since 1.4
+     * @spec JSR-51
+     */
+    public String replaceFirst(String regex, String replacement) {
+	return Pattern.compile(regex).matcher(this).replaceFirst(replacement);
+    }
+
+    /**
+     * Replaces each substring of this string that matches the given <a
+     * href="../util/regex/Pattern.html#sum">regular expression</a> with the
+     * given replacement.
+     *
+     * <p> An invocation of this method of the form
+     * <i>str</i><tt>.replaceAll(</tt><i>regex</i><tt>,</tt> <i>repl</i><tt>)</tt>
+     * yields exactly the same result as the expression
+     *
+     * <blockquote><tt>
+     * {@link java.util.regex.Pattern}.{@link java.util.regex.Pattern#compile
+     * compile}(</tt><i>regex</i><tt>).{@link
+     * java.util.regex.Pattern#matcher(java.lang.CharSequence)
+     * matcher}(</tt><i>str</i><tt>).{@link java.util.regex.Matcher#replaceAll
+     * replaceAll}(</tt><i>repl</i><tt>)</tt></blockquote>
+     *
+     * @param   regex
+     *          the regular expression to which this string is to be matched
+     *
+     * @return  The resulting <tt>String</tt>
+     *
+     * @throws  PatternSyntaxException
+     *          if the regular expression's syntax is invalid
+     *
+     * @see java.util.regex.Pattern
+     *
+     * @since 1.4
+     * @spec JSR-51
+     */
+    public String replaceAll(String regex, String replacement) {
+	return Pattern.compile(regex).matcher(this).replaceAll(replacement);
+    }
+
+    /**
+     * Replaces each substring of this string that matches the literal target
+     * sequence with the specified literal replacement sequence. The
+     * replacement proceeds from the beginning of the string to the end, for
+     * example, replacing "aa" with "b" in the string "aaa" will result in
+     * "ba" rather than "ab".
+     *
+     * @param  target The sequence of char values to be replaced
+     * @param  replacement The replacement sequence of char values
+     * @return  The resulting string
+     * @throws NullPointerException if <code>target</code> or
+     *         <code>replacement</code> is <code>null</code>.
+     * @since 1.5
+     */
+    public String replace(CharSequence target, CharSequence replacement) {
+        return Pattern.compile(target.toString(), Pattern.LITERAL).matcher(
+            this).replaceAll(Matcher.quoteReplacement(replacement.toString()));
+    }
+
+    /**
+     * Splits this string around matches of the given
+     * <a href="../util/regex/Pattern.html#sum">regular expression</a>.
+     *
+     * <p> The array returned by this method contains each substring of this
+     * string that is terminated by another substring that matches the given
+     * expression or is terminated by the end of the string.  The substrings in
+     * the array are in the order in which they occur in this string.  If the
+     * expression does not match any part of the input then the resulting array
+     * has just one element, namely this string.
+     *
+     * <p> The <tt>limit</tt> parameter controls the number of times the
+     * pattern is applied and therefore affects the length of the resulting
+     * array.  If the limit <i>n</i> is greater than zero then the pattern
+     * will be applied at most <i>n</i>&nbsp;-&nbsp;1 times, the array's
+     * length will be no greater than <i>n</i>, and the array's last entry
+     * will contain all input beyond the last matched delimiter.  If <i>n</i>
+     * is non-positive then the pattern will be applied as many times as
+     * possible and the array can have any length.  If <i>n</i> is zero then
+     * the pattern will be applied as many times as possible, the array can
+     * have any length, and trailing empty strings will be discarded.
+     *
+     * <p> The string <tt>"boo:and:foo"</tt>, for example, yields the
+     * following results with these parameters:
+     *
+     * <blockquote><table cellpadding=1 cellspacing=0 summary="Split example showing regex, limit, and result">
+     * <tr>
+     *     <th>Regex</th>
+     *     <th>Limit</th>
+     *     <th>Result</th>
+     * </tr>
+     * <tr><td align=center>:</td>
+     *     <td align=center>2</td>
+     *     <td><tt>{ "boo", "and:foo" }</tt></td></tr>
+     * <tr><td align=center>:</td>
+     *     <td align=center>5</td>
+     *     <td><tt>{ "boo", "and", "foo" }</tt></td></tr>
+     * <tr><td align=center>:</td>
+     *     <td align=center>-2</td>
+     *     <td><tt>{ "boo", "and", "foo" }</tt></td></tr>
+     * <tr><td align=center>o</td>
+     *     <td align=center>5</td>
+     *     <td><tt>{ "b", "", ":and:f", "", "" }</tt></td></tr>
+     * <tr><td align=center>o</td>
+     *     <td align=center>-2</td>
+     *     <td><tt>{ "b", "", ":and:f", "", "" }</tt></td></tr>
+     * <tr><td align=center>o</td>
+     *     <td align=center>0</td>
+     *     <td><tt>{ "b", "", ":and:f" }</tt></td></tr>
+     * </table></blockquote>
+     *
+     * <p> An invocation of this method of the form
+     * <i>str.</i><tt>split(</tt><i>regex</i><tt>,</tt>&nbsp;<i>n</i><tt>)</tt>
+     * yields the same result as the expression
+     *
+     * <blockquote>
+     * {@link java.util.regex.Pattern}.{@link java.util.regex.Pattern#compile
+     * compile}<tt>(</tt><i>regex</i><tt>)</tt>.{@link
+     * java.util.regex.Pattern#split(java.lang.CharSequence,int)
+     * split}<tt>(</tt><i>str</i><tt>,</tt>&nbsp;<i>n</i><tt>)</tt>
+     * </blockquote>
+     *
+     *
+     * @param  regex
+     *         the delimiting regular expression
+     *
+     * @param  limit
+     *         the result threshold, as described above
+     *
+     * @return  the array of strings computed by splitting this string
+     *          around matches of the given regular expression
+     *
+     * @throws  PatternSyntaxException
+     *          if the regular expression's syntax is invalid
+     *
+     * @see java.util.regex.Pattern
+     *
+     * @since 1.4
+     * @spec JSR-51
+     */
+    public String[] split(String regex, int limit) {
+	return Pattern.compile(regex).split(this, limit);
+    }
+
+    /**
+     * Splits this string around matches of the given
+     * {@linkplain java.util.regex.Pattern#sum regular expression}.
+     *
+     * <p> This method works as if by invoking the two-argument {@link
+     * #split(String, int) split} method with the given expression and a limit
+     * argument of zero.  Trailing empty strings are therefore not included in
+     * the resulting array.
+     *
+     * <p> The string <tt>"boo:and:foo"</tt>, for example, yields the following
+     * results with these expressions:
+     *
+     * <blockquote><table cellpadding=1 cellspacing=0 summary="Split examples showing regex and result">
+     * <tr>
+     *  <th>Regex</th>
+     *  <th>Result</th>
+     * </tr>
+     * <tr><td align=center>:</td>
+     *     <td><tt>{ "boo", "and", "foo" }</tt></td></tr>
+     * <tr><td align=center>o</td>
+     *     <td><tt>{ "b", "", ":and:f" }</tt></td></tr>
+     * </table></blockquote>
+     *
+     *
+     * @param  regex
+     *         the delimiting regular expression
+     *
+     * @return  the array of strings computed by splitting this string
+     *          around matches of the given regular expression
+     *
+     * @throws  PatternSyntaxException
+     *          if the regular expression's syntax is invalid
+     *
+     * @see java.util.regex.Pattern
+     *
+     * @since 1.4
+     * @spec JSR-51
+     */
+    public String[] split(String regex) {
+        return split(regex, 0);
+    }
+
+    /**
+     * Converts all of the characters in this <code>String</code> to lower
+     * case using the rules of the given <code>Locale</code>.  Case mapping is based
+     * on the Unicode Standard version specified by the {@link java.lang.Character Character}
+     * class. Since case mappings are not always 1:1 char mappings, the resulting
+     * <code>String</code> may be a different length than the original <code>String</code>.
+     * <p>
+     * Examples of lowercase  mappings are in the following table:
+     * <table border="1" summary="Lowercase mapping examples showing language code of locale, upper case, lower case, and description">
+     * <tr>
+     *   <th>Language Code of Locale</th>
+     *   <th>Upper Case</th>
+     *   <th>Lower Case</th>
+     *   <th>Description</th>
+     * </tr>
+     * <tr>
+     *   <td>tr (Turkish)</td>
+     *   <td>&#92;u0130</td>
+     *   <td>&#92;u0069</td>
+     *   <td>capital letter I with dot above -&gt; small letter i</td>
+     * </tr>
+     * <tr>
+     *   <td>tr (Turkish)</td>
+     *   <td>&#92;u0049</td>
+     *   <td>&#92;u0131</td>
+     *   <td>capital letter I -&gt; small letter dotless i </td>
+     * </tr>
+     * <tr>
+     *   <td>(all)</td>
+     *   <td>French Fries</td>
+     *   <td>french fries</td>
+     *   <td>lowercased all chars in String</td>
+     * </tr>
+     * <tr>
+     *   <td>(all)</td>
+     *   <td><img src="doc-files/capiota.gif" alt="capiota"><img src="doc-files/capchi.gif" alt="capchi">
+     *       <img src="doc-files/captheta.gif" alt="captheta"><img src="doc-files/capupsil.gif" alt="capupsil">
+     *       <img src="doc-files/capsigma.gif" alt="capsigma"></td>
+     *   <td><img src="doc-files/iota.gif" alt="iota"><img src="doc-files/chi.gif" alt="chi">
+     *       <img src="doc-files/theta.gif" alt="theta"><img src="doc-files/upsilon.gif" alt="upsilon">
+     *       <img src="doc-files/sigma1.gif" alt="sigma"></td>
+     *   <td>lowercased all chars in String</td>
+     * </tr>
+     * </table>
+     *
+     * @param locale use the case transformation rules for this locale
+     * @return the <code>String</code>, converted to lowercase.
+     * @see     java.lang.String#toLowerCase()
+     * @see     java.lang.String#toUpperCase()
+     * @see     java.lang.String#toUpperCase(Locale)
+     * @since   1.1
+     */
+    public String toLowerCase(Locale locale) {
+	if (locale == null) {
+	    throw new NullPointerException();
+        }
+
+        int     firstUpper;
+
+	/* Now check if there are any characters that need to be changed. */
+	scan: {
+	    for (firstUpper = 0 ; firstUpper < count; ) {
+		char c = value[offset+firstUpper];
+		if ((c >= Character.MIN_HIGH_SURROGATE) &&
+		    (c <= Character.MAX_HIGH_SURROGATE)) {
+		    int supplChar = codePointAt(firstUpper);
+		    if (supplChar != Character.toLowerCase(supplChar)) {
+		        break scan;
+		    }
+		    firstUpper += Character.charCount(supplChar);
+		} else {
+		    if (c != Character.toLowerCase(c)) {
+		        break scan;
+		    }
+		    firstUpper++;
+		}
+	    }
+	    return this;
+	}
+
+        char[]  result = new char[count];
+	int     resultOffset = 0;  /* result may grow, so i+resultOffset
+				    * is the write location in result */
+
+        /* Just copy the first few lowerCase characters. */
+        System.arraycopy(value, offset, result, 0, firstUpper);
+
+	String lang = locale.getLanguage();
+	boolean localeDependent =
+            (lang == "tr" || lang == "az" || lang == "lt");
+        char[] lowerCharArray;
+        int lowerChar;
+        int srcChar;
+        int srcCount;
+        for (int i = firstUpper; i < count; i += srcCount) {
+	    srcChar = (int)value[offset+i];
+	    if ((char)srcChar >= Character.MIN_HIGH_SURROGATE &&
+	        (char)srcChar <= Character.MAX_HIGH_SURROGATE) {
+		srcChar = codePointAt(i);
+		srcCount = Character.charCount(srcChar);
+	    } else {
+	        srcCount = 1;
+	    }
+            if (localeDependent || srcChar == '\u03A3') { // GREEK CAPITAL LETTER SIGMA
+                lowerChar = ConditionalSpecialCasing.toLowerCaseEx(this, i, locale);
+            } else {
+                lowerChar = Character.toLowerCase(srcChar);
+            }
+            if ((lowerChar == Character.ERROR) ||
+                (lowerChar >= Character.MIN_SUPPLEMENTARY_CODE_POINT)) {
+                if (lowerChar == Character.ERROR) {
+                    lowerCharArray =
+                        ConditionalSpecialCasing.toLowerCaseCharArray(this, i, locale);
+                } else if (srcCount == 2) {
+		    resultOffset += Character.toChars(lowerChar, result, i + resultOffset) - srcCount;
+		    continue;
+                } else {
+		    lowerCharArray = Character.toChars(lowerChar);
+		}
+
+                /* Grow result if needed */
+                int mapLen = lowerCharArray.length;
+		if (mapLen > srcCount) {
+                    char[] result2 = new char[result.length + mapLen - srcCount];
+                    System.arraycopy(result, 0, result2, 0,
+                        i + resultOffset);
+                    result = result2;
+		}
+                for (int x=0; x<mapLen; ++x) {
+                    result[i+resultOffset+x] = lowerCharArray[x];
+                }
+                resultOffset += (mapLen - srcCount);
+            } else {
+                result[i+resultOffset] = (char)lowerChar;
+            }
+        }
+        return new String(0, count+resultOffset, result);
+    }
+
+    /**
+     * Converts all of the characters in this <code>String</code> to lower
+     * case using the rules of the default locale. This is equivalent to calling
+     * <code>toLowerCase(Locale.getDefault())</code>.
+     * <p>
+     * @return  the <code>String</code>, converted to lowercase.
+     * @see     java.lang.String#toLowerCase(Locale)
+     */
+    public String toLowerCase() {
+        return toLowerCase(Locale.getDefault());
+    }
+
+    /**
+     * Converts all of the characters in this <code>String</code> to upper
+     * case using the rules of the given <code>Locale</code>. Case mapping is based
+     * on the Unicode Standard version specified by the {@link java.lang.Character Character}
+     * class. Since case mappings are not always 1:1 char mappings, the resulting
+     * <code>String</code> may be a different length than the original <code>String</code>.
+     * <p>
+     * Examples of locale-sensitive and 1:M case mappings are in the following table.
+     * <p>
+     * <table border="1" summary="Examples of locale-sensitive and 1:M case mappings. Shows Language code of locale, lower case, upper case, and description.">
+     * <tr>
+     *   <th>Language Code of Locale</th>
+     *   <th>Lower Case</th>
+     *   <th>Upper Case</th>
+     *   <th>Description</th>
+     * </tr>
+     * <tr>
+     *   <td>tr (Turkish)</td>
+     *   <td>&#92;u0069</td>
+     *   <td>&#92;u0130</td>
+     *   <td>small letter i -&gt; capital letter I with dot above</td>
+     * </tr>
+     * <tr>
+     *   <td>tr (Turkish)</td>
+     *   <td>&#92;u0131</td>
+     *   <td>&#92;u0049</td>
+     *   <td>small letter dotless i -&gt; capital letter I</td>
+     * </tr>
+     * <tr>
+     *   <td>(all)</td>
+     *   <td>&#92;u00df</td>
+     *   <td>&#92;u0053 &#92;u0053</td>
+     *   <td>small letter sharp s -&gt; two letters: SS</td>
+     * </tr>
+     * <tr>
+     *   <td>(all)</td>
+     *   <td>Fahrvergn&uuml;gen</td>
+     *   <td>FAHRVERGN&Uuml;GEN</td>
+     *   <td></td>
+     * </tr>
+     * </table>
+     * @param locale use the case transformation rules for this locale
+     * @return the <code>String</code>, converted to uppercase.
+     * @see     java.lang.String#toUpperCase()
+     * @see     java.lang.String#toLowerCase()
+     * @see     java.lang.String#toLowerCase(Locale)
+     * @since   1.1
+     */
+    public String toUpperCase(Locale locale) {
+	if (locale == null) {
+	    throw new NullPointerException();
+        }
+
+        int     firstLower;
+
+	/* Now check if there are any characters that need to be changed. */
+	scan: {
+	    for (firstLower = 0 ; firstLower < count; ) {
+		int c = (int)value[offset+firstLower];
+		int srcCount;
+		if ((c >= Character.MIN_HIGH_SURROGATE) &&
+		    (c <= Character.MAX_HIGH_SURROGATE)) {
+		    c = codePointAt(firstLower);
+		    srcCount = Character.charCount(c);
+		} else {
+		    srcCount = 1;
+		}
+		int upperCaseChar = Character.toUpperCaseEx(c);
+		if ((upperCaseChar == Character.ERROR) ||
+		    (c != upperCaseChar)) {
+		    break scan;
+		}
+		firstLower += srcCount;
+	    }
+	    return this;
+	}
+
+        char[]  result       = new char[count]; /* may grow */
+	int     resultOffset = 0;  /* result may grow, so i+resultOffset
+				    * is the write location in result */
+
+	/* Just copy the first few upperCase characters. */
+	System.arraycopy(value, offset, result, 0, firstLower);
+
+	String lang = locale.getLanguage();
+	boolean localeDependent =
+            (lang == "tr" || lang == "az" || lang == "lt");
+        char[] upperCharArray;
+        int upperChar;
+        int srcChar;
+        int srcCount;
+        for (int i = firstLower; i < count; i += srcCount) {
+	    srcChar = (int)value[offset+i];
+	    if ((char)srcChar >= Character.MIN_HIGH_SURROGATE &&
+	        (char)srcChar <= Character.MAX_HIGH_SURROGATE) {
+		srcChar = codePointAt(i);
+		srcCount = Character.charCount(srcChar);
+	    } else {
+	        srcCount = 1;
+	    }
+            if (localeDependent) {
+                upperChar = ConditionalSpecialCasing.toUpperCaseEx(this, i, locale);
+            } else {
+                upperChar = Character.toUpperCaseEx(srcChar);
+            }
+            if ((upperChar == Character.ERROR) ||
+                (upperChar >= Character.MIN_SUPPLEMENTARY_CODE_POINT)) {
+                if (upperChar == Character.ERROR) {
+                    if (localeDependent) {
+                        upperCharArray =
+                            ConditionalSpecialCasing.toUpperCaseCharArray(this, i, locale);
+                    } else {
+                        upperCharArray = Character.toUpperCaseCharArray(srcChar);
+                    }
+                } else if (srcCount == 2) {
+		    resultOffset += Character.toChars(upperChar, result, i + resultOffset) - srcCount;
+		    continue;
+                } else {
+                    upperCharArray = Character.toChars(upperChar);
+		}
+
+                /* Grow result if needed */
+                int mapLen = upperCharArray.length;
+		if (mapLen > srcCount) {
+                    char[] result2 = new char[result.length + mapLen - srcCount];
+                    System.arraycopy(result, 0, result2, 0,
+                        i + resultOffset);
+                    result = result2;
+		}
+                for (int x=0; x<mapLen; ++x) {
+                    result[i+resultOffset+x] = upperCharArray[x];
+                }
+                resultOffset += (mapLen - srcCount);
+            } else {
+                result[i+resultOffset] = (char)upperChar;
+            }
+        }
+        return new String(0, count+resultOffset, result);
+    }
+
+    /**
+     * Converts all of the characters in this <code>String</code> to upper
+     * case using the rules of the default locale. This method is equivalent to
+     * <code>toUpperCase(Locale.getDefault())</code>.
+     * <p>
+     * @return  the <code>String</code>, converted to uppercase.
+     * @see     java.lang.String#toUpperCase(Locale)
+     */
+    public String toUpperCase() {
+        return toUpperCase(Locale.getDefault());
+    }
+
+    /**
+     * Returns a copy of the string, with leading and trailing whitespace
+     * omitted.
+     * <p>
+     * If this <code>String</code> object represents an empty character
+     * sequence, or the first and last characters of character sequence
+     * represented by this <code>String</code> object both have codes
+     * greater than <code>'&#92;u0020'</code> (the space character), then a
+     * reference to this <code>String</code> object is returned.
+     * <p>
+     * Otherwise, if there is no character with a code greater than
+     * <code>'&#92;u0020'</code> in the string, then a new
+     * <code>String</code> object representing an empty string is created
+     * and returned.
+     * <p>
+     * Otherwise, let <i>k</i> be the index of the first character in the
+     * string whose code is greater than <code>'&#92;u0020'</code>, and let
+     * <i>m</i> be the index of the last character in the string whose code
+     * is greater than <code>'&#92;u0020'</code>. A new <code>String</code>
+     * object is created, representing the substring of this string that
+     * begins with the character at index <i>k</i> and ends with the
+     * character at index <i>m</i>-that is, the result of
+     * <code>this.substring(<i>k</i>,&nbsp;<i>m</i>+1)</code>.
+     * <p>
+     * This method may be used to trim whitespace (as defined above) from
+     * the beginning and end of a string.
+     *
+     * @return  A copy of this string with leading and trailing white
+     *          space removed, or this string if it has no leading or
+     *          trailing white space.
+     */
+    public String trim() {
+	int len = count;
+	int st = 0;
+	int off = offset;      /* avoid getfield opcode */
+	char[] val = value;    /* avoid getfield opcode */
+
+	while ((st < len) && (val[off + st] <= ' ')) {
+	    st++;
+	}
+	while ((st < len) && (val[off + len - 1] <= ' ')) {
+	    len--;
+	}
+	return ((st > 0) || (len < count)) ? substring(st, len) : this;
+    }
+
+    /**
+     * This object (which is already a string!) is itself returned.
+     *
+     * @return  the string itself.
+     */
+    public String toString() {
+	return this;
+    }
+
+    /**
+     * Converts this string to a new character array.
+     *
+     * @return  a newly allocated character array whose length is the length
+     *          of this string and whose contents are initialized to contain
+     *          the character sequence represented by this string.
+     */
+    public char[] toCharArray() {
+	char result[] = new char[count];
+	getChars(0, count, result, 0);
+	return result;
+    }
+
+    /**
+     * Returns a formatted string using the specified format string and
+     * arguments.
+     *
+     * <p> The locale always used is the one returned by {@link
+     * java.util.Locale#getDefault() Locale.getDefault()}.
+     *
+     * @param  format
+     *         A <a href="../util/Formatter.html#syntax">format string</a>
+     *
+     * @param  args
+     *         Arguments referenced by the format specifiers in the format
+     *         string.  If there are more arguments than format specifiers, the
+     *         extra arguments are ignored.  The number of arguments is
+     *         variable and may be zero.  The maximum number of arguments is
+     *         limited by the maximum dimension of a Java array as defined by
+     *         the <a href="http://java.sun.com/docs/books/vmspec/">Java
+     *         Virtual Machine Specification</a>.  The behaviour on a
+     *         <tt>null</tt> argument depends on the <a
+     *         href="../util/Formatter.html#syntax">conversion</a>.
+     *
+     * @throws  IllegalFormatException
+     *          If a format string contains an illegal syntax, a format
+     *          specifier that is incompatible with the given arguments,
+     *          insufficient arguments given the format string, or other
+     *          illegal conditions.  For specification of all possible
+     *          formatting errors, see the <a
+     *          href="../util/Formatter.html#detail">Details</a> section of the
+     *          formatter class specification.
+     *
+     * @throws  NullPointerException
+     *          If the <tt>format</tt> is <tt>null</tt>
+     *
+     * @return  A formatted string
+     *
+     * @see  java.util.Formatter
+     * @since  1.5
+     */
+    public static String format(String format, Object ... args) {
+	return new Formatter().format(format, args).toString();
+    }
+
+    /**
+     * Returns a formatted string using the specified locale, format string,
+     * and arguments.
+     *
+     * @param  l
+     *         The {@linkplain java.util.Locale locale} to apply during
+     *         formatting.  If <tt>l</tt> is <tt>null</tt> then no localization
+     *         is applied.
+     *
+     * @param  format
+     *         A <a href="../util/Formatter.html#syntax">format string</a>
+     *
+     * @param  args
+     *         Arguments referenced by the format specifiers in the format
+     *         string.  If there are more arguments than format specifiers, the
+     *         extra arguments are ignored.  The number of arguments is
+     *         variable and may be zero.  The maximum number of arguments is
+     *         limited by the maximum dimension of a Java array as defined by
+     *         the <a href="http://java.sun.com/docs/books/vmspec/">Java
+     *         Virtual Machine Specification</a>.  The behaviour on a
+     *         <tt>null</tt> argument depends on the <a
+     *         href="../util/Formatter.html#syntax">conversion</a>.
+     *
+     * @throws  IllegalFormatException
+     *          If a format string contains an illegal syntax, a format
+     *          specifier that is incompatible with the given arguments,
+     *          insufficient arguments given the format string, or other
+     *          illegal conditions.  For specification of all possible
+     *          formatting errors, see the <a
+     *          href="../util/Formatter.html#detail">Details</a> section of the
+     *          formatter class specification
+     *
+     * @throws  NullPointerException
+     *          If the <tt>format</tt> is <tt>null</tt>
+     *
+     * @return  A formatted string
+     *
+     * @see  java.util.Formatter
+     * @since  1.5
+     */
+    public static String format(Locale l, String format, Object ... args) {
+	return new Formatter(l).format(format, args).toString();
+    }
+
+    /**
+     * Returns the string representation of the <code>Object</code> argument.
+     *
+     * @param   obj   an <code>Object</code>.
+     * @return  if the argument is <code>null</code>, then a string equal to
+     *          <code>"null"</code>; otherwise, the value of
+     *          <code>obj.toString()</code> is returned.
+     * @see     java.lang.Object#toString()
+     */
+    public static String valueOf(Object obj) {
+	return (obj == null) ? "null" : obj.toString();
+    }
+
+    /**
+     * Returns the string representation of the <code>char</code> array
+     * argument. The contents of the character array are copied; subsequent
+     * modification of the character array does not affect the newly
+     * created string.
+     *
+     * @param   data   a <code>char</code> array.
+     * @return  a newly allocated string representing the same sequence of
+     *          characters contained in the character array argument.
+     */
+    public static String valueOf(char data[]) {
+	return new String(data);
+    }
+
+    /**
+     * Returns the string representation of a specific subarray of the
+     * <code>char</code> array argument.
+     * <p>
+     * The <code>offset</code> argument is the index of the first
+     * character of the subarray. The <code>count</code> argument
+     * specifies the length of the subarray. The contents of the subarray
+     * are copied; subsequent modification of the character array does not
+     * affect the newly created string.
+     *
+     * @param   data     the character array.
+     * @param   offset   the initial offset into the value of the
+     *                  <code>String</code>.
+     * @param   count    the length of the value of the <code>String</code>.
+     * @return  a string representing the sequence of characters contained
+     *          in the subarray of the character array argument.
+     * @exception IndexOutOfBoundsException if <code>offset</code> is
+     *          negative, or <code>count</code> is negative, or
+     *          <code>offset+count</code> is larger than
+     *          <code>data.length</code>.
+     */
+    public static String valueOf(char data[], int offset, int count) {
+	return new String(data, offset, count);
+    }
+
+    /**
+     * Returns a String that represents the character sequence in the
+     * array specified.
+     *
+     * @param   data     the character array.
+     * @param   offset   initial offset of the subarray.
+     * @param   count    length of the subarray.
+     * @return  a <code>String</code> that contains the characters of the
+     *          specified subarray of the character array.
+     */
+    public static String copyValueOf(char data[], int offset, int count) {
+	// All public String constructors now copy the data.
+	return new String(data, offset, count);
+    }
+
+    /**
+     * Returns a String that represents the character sequence in the
+     * array specified.
+     *
+     * @param   data   the character array.
+     * @return  a <code>String</code> that contains the characters of the
+     *          character array.
+     */
+    public static String copyValueOf(char data[]) {
+	return copyValueOf(data, 0, data.length);
+    }
+
+    /**
+     * Returns the string representation of the <code>boolean</code> argument.
+     *
+     * @param   b   a <code>boolean</code>.
+     * @return  if the argument is <code>true</code>, a string equal to
+     *          <code>"true"</code> is returned; otherwise, a string equal to
+     *          <code>"false"</code> is returned.
+     */
+    public static String valueOf(boolean b) {
+	return b ? "true" : "false";
+    }
+
+    /**
+     * Returns the string representation of the <code>char</code>
+     * argument.
+     *
+     * @param   c   a <code>char</code>.
+     * @return  a string of length <code>1</code> containing
+     *          as its single character the argument <code>c</code>.
+     */
+    public static String valueOf(char c) {
+	char data[] = {c};
+	return new String(0, 1, data);
+    }
+
+    /**
+     * Returns the string representation of the <code>int</code> argument.
+     * <p>
+     * The representation is exactly the one returned by the
+     * <code>Integer.toString</code> method of one argument.
+     *
+     * @param   i   an <code>int</code>.
+     * @return  a string representation of the <code>int</code> argument.
+     * @see     java.lang.Integer#toString(int, int)
+     */
+    public static String valueOf(int i) {
+        return Integer.toString(i, 10);
+    }
+
+    /**
+     * Returns the string representation of the <code>long</code> argument.
+     * <p>
+     * The representation is exactly the one returned by the
+     * <code>Long.toString</code> method of one argument.
+     *
+     * @param   l   a <code>long</code>.
+     * @return  a string representation of the <code>long</code> argument.
+     * @see     java.lang.Long#toString(long)
+     */
+    public static String valueOf(long l) {
+        return Long.toString(l, 10);
+    }
+
+    /**
+     * Returns the string representation of the <code>float</code> argument.
+     * <p>
+     * The representation is exactly the one returned by the
+     * <code>Float.toString</code> method of one argument.
+     *
+     * @param   f   a <code>float</code>.
+     * @return  a string representation of the <code>float</code> argument.
+     * @see     java.lang.Float#toString(float)
+     */
+    public static String valueOf(float f) {
+	return Float.toString(f);
+    }
+
+    /**
+     * Returns the string representation of the <code>double</code> argument.
+     * <p>
+     * The representation is exactly the one returned by the
+     * <code>Double.toString</code> method of one argument.
+     *
+     * @param   d   a <code>double</code>.
+     * @return  a  string representation of the <code>double</code> argument.
+     * @see     java.lang.Double#toString(double)
+     */
+    public static String valueOf(double d) {
+	return Double.toString(d);
+    }
+
+    /**
+     * Returns a canonical representation for the string object.
+     * <p>
+     * A pool of strings, initially empty, is maintained privately by the
+     * class <code>String</code>.
+     * <p>
+     * When the intern method is invoked, if the pool already contains a
+     * string equal to this <code>String</code> object as determined by
+     * the {@link #equals(Object)} method, then the string from the pool is
+     * returned. Otherwise, this <code>String</code> object is added to the
+     * pool and a reference to this <code>String</code> object is returned.
+     * <p>
+     * It follows that for any two strings <code>s</code> and <code>t</code>,
+     * <code>s.intern()&nbsp;==&nbsp;t.intern()</code> is <code>true</code>
+     * if and only if <code>s.equals(t)</code> is <code>true</code>.
+     * <p>
+     * All literal strings and string-valued constant expressions are
+     * interned. String literals are defined in &sect;3.10.5 of the
+     * <a href="http://java.sun.com/docs/books/jls/html/">Java Language
+     * Specification</a>
+     *
+     * @return  a string that has the same contents as this string, but is
+     *          guaranteed to be from a pool of unique strings.
+     */
+    public native String intern();
+
+}
diff --git a/java/java-tests/testData/psi/repositoryUse/src/pack/AssertParentId.java b/java/java-tests/testData/psi/repositoryUse/src/pack/AssertParentId.java
new file mode 100644
index 0000000..ede95fa
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/src/pack/AssertParentId.java
@@ -0,0 +1,10 @@
+package pack;
+
+import javax.swing.*;
+
+public class AssertParentId extends JPanel{
+  int foo(){}
+
+  Object TEST = new JPanel(){  };
+}
+
diff --git a/java/java-tests/testData/psi/repositoryUse/src/pack/MyClass2.java b/java/java-tests/testData/psi/repositoryUse/src/pack/MyClass2.java
new file mode 100644
index 0000000..2eb4bcb
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/src/pack/MyClass2.java
@@ -0,0 +1,29 @@
+package pack;
+
+public class MyClass2 extends String implements Runnable{
+  /**
+   * @deprecated
+   */
+  int field1 = 0;
+
+  Object field2[];
+
+  java.lang.Object[] field3;
+
+  void method1(int[] p1, Object p2, pack . AAA p3,
+	pack . /* comment */ AAA p4,
+	pack . // comment
+	AAA p5
+	) throws Exception, java.io. IOException{
+  }
+
+  Integer method2()[]{
+    new Cloneable(){
+    };
+    class Local implements Cloneable{}
+  }
+
+  MyClass2(){}
+
+  static class Inner{}
+}
diff --git a/java/java-tests/testData/psi/repositoryUse/src/pack/MyInterface1.java b/java/java-tests/testData/psi/repositoryUse/src/pack/MyInterface1.java
new file mode 100644
index 0000000..d65d560
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/src/pack/MyInterface1.java
@@ -0,0 +1,6 @@
+package pack;
+
+import javax.swing.*;
+
+public interface MyInterface1{
+}
diff --git a/java/java-tests/testData/psi/repositoryUse/src15/annotated/AnnotatedClass.java b/java/java-tests/testData/psi/repositoryUse/src15/annotated/AnnotatedClass.java
new file mode 100644
index 0000000..b7c8524
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/src15/annotated/AnnotatedClass.java
@@ -0,0 +1,9 @@
+package annotated;
+
+import annotations.*;
+
[email protected]
+public class AnnotatedClass {
+   @AnnotationType("<") public void correctMethod() {}
+   @wrongpkg.AnnotationType public void wrongMethod() {}
+}
diff --git a/java/java-tests/testData/psi/repositoryUse/src15/annotated/package-info.java b/java/java-tests/testData/psi/repositoryUse/src15/annotated/package-info.java
new file mode 100644
index 0000000..d1bb067
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/src15/annotated/package-info.java
@@ -0,0 +1,4 @@
+@AnnotationType
+package annotated;
+
+import annotations.*;
diff --git a/java/java-tests/testData/psi/repositoryUse/src15/annotations/AnnotationType.java b/java/java-tests/testData/psi/repositoryUse/src15/annotations/AnnotationType.java
new file mode 100644
index 0000000..34bff9a
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/src15/annotations/AnnotationType.java
@@ -0,0 +1,3 @@
+package annotations;
+public @interface AnnotationType {
+}
diff --git a/java/java-tests/testData/psi/repositoryUse/src15/annotations/DeprecatedAnnotation.java b/java/java-tests/testData/psi/repositoryUse/src15/annotations/DeprecatedAnnotation.java
new file mode 100644
index 0000000..0fa37dc
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/src15/annotations/DeprecatedAnnotation.java
@@ -0,0 +1,5 @@
+package annotations;
+@Deprecated class DeprecatedAnnotation {
+  @Deprecated void foo() {}
+  @Deprecated int i;
+}
diff --git a/java/java-tests/testData/psi/repositoryUse/src15/enumImplements/MyEnum.java b/java/java-tests/testData/psi/repositoryUse/src15/enumImplements/MyEnum.java
new file mode 100644
index 0000000..165834e
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/src15/enumImplements/MyEnum.java
@@ -0,0 +1,5 @@
+package enumImplements;
+
+interface I {}
+
+enum MyEnum implements I {}
diff --git a/java/java-tests/testData/psi/repositoryUse/src15/enums/OurBaseInterface.java b/java/java-tests/testData/psi/repositoryUse/src15/enums/OurBaseInterface.java
new file mode 100644
index 0000000..5cdd2ff
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/src15/enums/OurBaseInterface.java
@@ -0,0 +1,4 @@
+package enums;
+
+interface OurBaseInterface {
+}
diff --git a/java/java-tests/testData/psi/repositoryUse/src15/enums/OurEnum.java b/java/java-tests/testData/psi/repositoryUse/src15/enums/OurEnum.java
new file mode 100644
index 0000000..da45bcd
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/src15/enums/OurEnum.java
@@ -0,0 +1,4 @@
+package enums;
+
+enum OurEnum {
+}
diff --git a/java/java-tests/testData/psi/repositoryUse/src15/enums/OurEnumWithConstants.java b/java/java-tests/testData/psi/repositoryUse/src15/enums/OurEnumWithConstants.java
new file mode 100644
index 0000000..ae54e1d
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/src15/enums/OurEnumWithConstants.java
@@ -0,0 +1,5 @@
+package enums;
+
+public enum OurEnumWithConstants {
+  A, B, C;
+}
diff --git a/java/java-tests/testData/psi/repositoryUse/src15/enums/OurEnumWithConstantsAndStaticFields.java b/java/java-tests/testData/psi/repositoryUse/src15/enums/OurEnumWithConstantsAndStaticFields.java
new file mode 100644
index 0000000..2b3de3d
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/src15/enums/OurEnumWithConstantsAndStaticFields.java
@@ -0,0 +1,7 @@
+package enums;
+
+enum OurEnumWithConstantsAndStaticFields {
+  A, B, C;
+
+  public static final int A1 = 1;
+}
diff --git a/java/java-tests/testData/psi/repositoryUse/src15/enums/OurEnumWithConstantsAndStaticFields2.java b/java/java-tests/testData/psi/repositoryUse/src15/enums/OurEnumWithConstantsAndStaticFields2.java
new file mode 100644
index 0000000..f411f7f
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/src15/enums/OurEnumWithConstantsAndStaticFields2.java
@@ -0,0 +1,39 @@
+package enums;
+
+public abstract enum OurEnumWithConstantsAndStaticFields2 {
+    A {
+        void foo() {
+            //To change body of implemented methods use File | Settings | File Templates.
+        }
+    },
+    B {
+        void foo() {
+            //To change body of implemented methods use File | Settings | File Templates.
+        }
+
+    },
+    C(10)
+    ;
+
+    public static final int A1 = 10;
+    void foo() {}
+
+    public OurEnum() {
+
+    }
+    {
+        Enum<OurEnum> a = A;
+        OurEnum value = A;
+        switch(value) {
+            case A:
+                break;
+            case
+        }
+
+        int i = 10;
+        switch(i) {
+            case A1
+        }
+    }
+}
+}
diff --git a/java/java-tests/testData/psi/repositoryUse/src15/enums/OurEnumWithInitializedConstants.java b/java/java-tests/testData/psi/repositoryUse/src15/enums/OurEnumWithInitializedConstants.java
new file mode 100644
index 0000000..2fe43ab
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/src15/enums/OurEnumWithInitializedConstants.java
@@ -0,0 +1,12 @@
+package enums;
+
+public enum OurEnumWithInitializedConstants {
+  A(0) {
+  },
+  B(1) {
+     void foo (){}
+  },
+  C(new OurBaseInterface() {}) {
+     void foo () {}
+  }
+}
diff --git a/java/java-tests/testData/psi/repositoryUse/src15/staticImports/StaticImports.java b/java/java-tests/testData/psi/repositoryUse/src15/staticImports/StaticImports.java
new file mode 100644
index 0000000..7077269
--- /dev/null
+++ b/java/java-tests/testData/psi/repositoryUse/src15/staticImports/StaticImports.java
@@ -0,0 +1,20 @@
+package staticImports;
+
+import java.util.Arrays;
+import static java.util.Collections.*;
+import java.util.Collections;
+import static java.util.Arrays.*;
+import static java.util.Collections.sort;
+import static java.util.Arrays.sort;
+
+public class StaticImports {
+  {
+    sort(new List());
+    sort(new List<String>());
+    sort(new int[256]);
+    Integer[] v = new Integer[256];
+    sort(v)
+    sort(asList(v));
+  }
+}
+
diff --git a/java/java-tests/testData/psi/resolve/class/ClassExtendsItsInner.java b/java/java-tests/testData/psi/resolve/class/ClassExtendsItsInner.java
new file mode 100644
index 0000000..439c559
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/class/ClassExtendsItsInner.java
@@ -0,0 +1,7 @@
+class A extends A.<ref>Foo, B{
+}
+
+interface B{
+  static class Foo{
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/class/ClassExtendsItsInner1.java b/java/java-tests/testData/psi/resolve/class/ClassExtendsItsInner1.java
new file mode 100644
index 0000000..c5e0f4f
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/class/ClassExtendsItsInner1.java
@@ -0,0 +1,7 @@
+class A extends B.<ref>Foo implements B{
+}
+
+interface B{
+  static class Foo{
+  }
+}
diff --git a/java/java-tests/testData/psi/resolve/class/ClassExtendsItsInner2.java b/java/java-tests/testData/psi/resolve/class/ClassExtendsItsInner2.java
new file mode 100644
index 0000000..0252403
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/class/ClassExtendsItsInner2.java
@@ -0,0 +1,3 @@
+public class TTT implements <ref>Bar{
+  static interface Bar{}
+}
diff --git a/java/java-tests/testData/psi/resolve/class/FQName.java b/java/java-tests/testData/psi/resolve/class/FQName.java
new file mode 100644
index 0000000..ba3bc1d
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/class/FQName.java
@@ -0,0 +1,3 @@
+class Test{
+  void foo() throws java.io.<ref>IOException{}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/class/ImportConflict1.java b/java/java-tests/testData/psi/resolve/class/ImportConflict1.java
new file mode 100644
index 0000000..73ea67d4
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/class/ImportConflict1.java
@@ -0,0 +1,8 @@
+import java.sql.*;
+import java.util.*;
+
+public class ImpmortConflict1{
+    public static void main(String[] args){
+        <ref>Date d = new Date();
+    }
+}
diff --git a/java/java-tests/testData/psi/resolve/class/ImportConflict2.java b/java/java-tests/testData/psi/resolve/class/ImportConflict2.java
new file mode 100644
index 0000000..653cf13
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/class/ImportConflict2.java
@@ -0,0 +1,8 @@
+import java.sql.*;
+import java.util.Date;
+
+public class ImportConflict2{
+    public static void main(String[] args){
+        <ref>Date d = new Date();
+    }
+}
diff --git a/java/java-tests/testData/psi/resolve/class/InnerPrivateMember1.java b/java/java-tests/testData/psi/resolve/class/InnerPrivateMember1.java
new file mode 100644
index 0000000..8d87281
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/class/InnerPrivateMember1.java
@@ -0,0 +1,8 @@
+class C{
+  void foo(){
+    class A{
+      <ref>B b = null;
+      private class B{};
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/class/Locals1.java b/java/java-tests/testData/psi/resolve/class/Locals1.java
new file mode 100644
index 0000000..53f53d5
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/class/Locals1.java
@@ -0,0 +1,7 @@
+class A{
+ {
+  class B{}
+
+  new <ref>B();
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/class/Locals2.java b/java/java-tests/testData/psi/resolve/class/Locals2.java
new file mode 100644
index 0000000..e300f31
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/class/Locals2.java
@@ -0,0 +1,9 @@
+class A{
+ {
+  class B{
+    <ref>B b;
+  }
+
+  new B();
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/class/ModuleSourceAsLibraryClasses.java b/java/java-tests/testData/psi/resolve/class/ModuleSourceAsLibraryClasses.java
new file mode 100644
index 0000000..8c379ae
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/class/ModuleSourceAsLibraryClasses.java
@@ -0,0 +1,3 @@
+public class ModuleSourceAsLibraryClasses {
+  <ref>ModuleSourceAsLibraryClassesDep field;
+}
diff --git a/java/java-tests/testData/psi/resolve/class/ModuleSourceAsLibraryClassesDep.java b/java/java-tests/testData/psi/resolve/class/ModuleSourceAsLibraryClassesDep.java
new file mode 100644
index 0000000..bf6b0ca
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/class/ModuleSourceAsLibraryClassesDep.java
@@ -0,0 +1,16 @@
+/*
+ * 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.
+ */
+public class ModuleSourceAsLibraryClassesDep {}
diff --git a/java/java-tests/testData/psi/resolve/class/ModuleSourceAsLibrarySource.java b/java/java-tests/testData/psi/resolve/class/ModuleSourceAsLibrarySource.java
new file mode 100644
index 0000000..ae7482c
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/class/ModuleSourceAsLibrarySource.java
@@ -0,0 +1,3 @@
+public class ModuleSourceAsLibrarySource {
+  <ref>ModuleSourceAsLibrarySourceDep field;
+}
diff --git a/java/java-tests/testData/psi/resolve/class/ModuleSourceAsLibrarySourceDep.java b/java/java-tests/testData/psi/resolve/class/ModuleSourceAsLibrarySourceDep.java
new file mode 100644
index 0000000..78a8b08
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/class/ModuleSourceAsLibrarySourceDep.java
@@ -0,0 +1 @@
+public class ModuleSourceAsLibrarySourceDep {}
diff --git a/java/java-tests/testData/psi/resolve/class/PrivateInExtends.java b/java/java-tests/testData/psi/resolve/class/PrivateInExtends.java
new file mode 100644
index 0000000..1a9e868
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/class/PrivateInExtends.java
@@ -0,0 +1,5 @@
+class A{
+private static class B{}
+}
+
+class C extends A.<ref>B{}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/class/QNew1.java b/java/java-tests/testData/psi/resolve/class/QNew1.java
new file mode 100644
index 0000000..c79784a
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/class/QNew1.java
@@ -0,0 +1,10 @@
+class A {
+  {
+    Outer outer;
+    outer.new <ref>Inner();
+  }
+}
+
+class Outer{
+  class Inner{}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/class/QNew2.java b/java/java-tests/testData/psi/resolve/class/QNew2.java
new file mode 100644
index 0000000..537bc12
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/class/QNew2.java
@@ -0,0 +1,10 @@
+class A {
+  {
+    Outer outer;
+    outer.new <ref>Inner(){};
+  }
+}
+
+class Outer{
+  class Inner{}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/class/SCR40332.java b/java/java-tests/testData/psi/resolve/class/SCR40332.java
new file mode 100644
index 0000000..034275b
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/class/SCR40332.java
@@ -0,0 +1,4 @@
+class C<T> {}
+class CC extends C<<ref>Inner> {
+    static class Inner { }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/class/Shadowing.java b/java/java-tests/testData/psi/resolve/class/Shadowing.java
new file mode 100644
index 0000000..831de20
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/class/Shadowing.java
@@ -0,0 +1,13 @@
+interface A {
+   class Entry {}
+}
+
+class B implements A {
+    private class Entry {}
+}
+
+
+class C extends B {
+    static void foo(<ref>Entry e){
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/class/StaticImportInTheSameClass.java b/java/java-tests/testData/psi/resolve/class/StaticImportInTheSameClass.java
new file mode 100644
index 0000000..ab40d7d
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/class/StaticImportInTheSameClass.java
@@ -0,0 +1,5 @@
+import static Foo.*;
+
+class Foo implements <ref>Bar1, Bar2, Bar3, Bar4, Bar5, Bar6, Bar7, Bar8, Bar9, Bar10, Bar11, Bar12, Bar13, Bar14 {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/class/StaticImportNetwork.java b/java/java-tests/testData/psi/resolve/class/StaticImportNetwork.java
new file mode 100644
index 0000000..719bf83
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/class/StaticImportNetwork.java
@@ -0,0 +1,6 @@
+import static Foo1.*;
+import static Foo0.*;
+import static Foo3.*;
+import static Foo.*;
+
+class Foo extends <ref>Bar {}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/class/StaticImportVsImplicit.java b/java/java-tests/testData/psi/resolve/class/StaticImportVsImplicit.java
new file mode 100644
index 0000000..52aacf1
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/class/StaticImportVsImplicit.java
@@ -0,0 +1,12 @@
+import static Outer.Double;
+
+class Outer {
+    static class Double {
+    }
+}
+
+class StaticImportTest {
+    public static void main(String[] args) {
+        <ref>Double d;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/class/TwoModules.java b/java/java-tests/testData/psi/resolve/class/TwoModules.java
new file mode 100644
index 0000000..7742512
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/class/TwoModules.java
@@ -0,0 +1,4 @@
+class TwoModules {
+
+  <ref>Src src;
+}
diff --git a/java/java-tests/testData/psi/resolve/class/TwoModules2.java b/java/java-tests/testData/psi/resolve/class/TwoModules2.java
new file mode 100644
index 0000000..a1d2ed1
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/class/TwoModules2.java
@@ -0,0 +1,4 @@
+class TwoModules2 {
+
+  <ref>Test test;
+}
diff --git a/java/java-tests/testData/psi/resolve/class/VarInNew.java b/java/java-tests/testData/psi/resolve/class/VarInNew.java
new file mode 100644
index 0000000..97e57a4
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/class/VarInNew.java
@@ -0,0 +1,5 @@
+class s {
+  public static final repeat REPEAT = new <ref>repeat();
+  boolean repeat = false;
+  static class repeat {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/class/VarInNew1.java b/java/java-tests/testData/psi/resolve/class/VarInNew1.java
new file mode 100644
index 0000000..03d4582
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/class/VarInNew1.java
@@ -0,0 +1,5 @@
+class s {
+  public static final repeat REPEAT = new <ref>repeat(){};
+  boolean repeat = false;
+  static class repeat {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/class/dependentModule/src/Src.java b/java/java-tests/testData/psi/resolve/class/dependentModule/src/Src.java
new file mode 100644
index 0000000..8e0b48e
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/class/dependentModule/src/Src.java
@@ -0,0 +1 @@
+class Src {}
diff --git a/java/java-tests/testData/psi/resolve/class/dependentModule/test/Test.java b/java/java-tests/testData/psi/resolve/class/dependentModule/test/Test.java
new file mode 100644
index 0000000..ef22a69
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/class/dependentModule/test/Test.java
@@ -0,0 +1 @@
+class Test {}
diff --git a/java/java-tests/testData/psi/resolve/codeFragment/LocalVariable.java b/java/java-tests/testData/psi/resolve/codeFragment/LocalVariable.java
new file mode 100644
index 0000000..12ee72b
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/codeFragment/LocalVariable.java
@@ -0,0 +1,6 @@
+public class Test {
+  public void foo() {
+    int i = 0;
+    System.out.println(<ref>i);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/filePath/C.java b/java/java-tests/testData/psi/resolve/filePath/C.java
new file mode 100644
index 0000000..f92974d
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/filePath/C.java
@@ -0,0 +1,3 @@
+class C {
+  String s = "/x/y/MyClass.java<caret>";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/filePath/C2.java b/java/java-tests/testData/psi/resolve/filePath/C2.java
new file mode 100644
index 0000000..6840ddc
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/filePath/C2.java
@@ -0,0 +1,3 @@
+class C {
+  String s = "x/<caret>MyFile.txt";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/filePath/x/MyFile.txt b/java/java-tests/testData/psi/resolve/filePath/x/MyFile.txt
new file mode 100644
index 0000000..fdd2f73
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/filePath/x/MyFile.txt
@@ -0,0 +1 @@
+xxxxxxxxxxxxx
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/filePath/x/y/MyClass.java b/java/java-tests/testData/psi/resolve/filePath/x/y/MyClass.java
new file mode 100644
index 0000000..a2d3a61
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/filePath/x/y/MyClass.java
@@ -0,0 +1 @@
+//xxxxxxxxx
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/inference/BoundComposition.java b/java/java-tests/testData/psi/resolve/inference/BoundComposition.java
new file mode 100644
index 0000000..ab504e5
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/inference/BoundComposition.java
@@ -0,0 +1,7 @@
+
+class Test  {
+ private static void p( Class<? extends Object> cl )
+ {
+    cl.<ref>getSuperclass();
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/inference/InferAutoboxed.java b/java/java-tests/testData/psi/resolve/inference/InferAutoboxed.java
new file mode 100644
index 0000000..9ec0914
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/inference/InferAutoboxed.java
@@ -0,0 +1,9 @@
+class C {
+  <V> V m(V v) {
+      return null;
+  }
+
+    void n () {
+       <ref>m(10);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/inference/InferInAssign1.java b/java/java-tests/testData/psi/resolve/inference/InferInAssign1.java
new file mode 100644
index 0000000..31da41a
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/inference/InferInAssign1.java
@@ -0,0 +1,18 @@
+public class Seq<T> {
+    public Seq() {}
+
+    public Seq(T x, Seq<T> xs) {
+    }
+
+    static <T> Seq<T> nil () {
+        return new Seq<T> ();
+    }
+
+    static <V> Seq<V> cons (V x, Seq<V> xs) {
+        return new Seq<V> (x, xs);
+    }
+
+    static void foo() {
+        Seq<String> n = <ref>nil();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/inference/InferInAssign2.java b/java/java-tests/testData/psi/resolve/inference/InferInAssign2.java
new file mode 100644
index 0000000..c4bc740
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/inference/InferInAssign2.java
@@ -0,0 +1,18 @@
+public class Seq<T> {
+    public Seq() {}
+
+    public Seq(T x, Seq<T> xs) {
+    }
+
+    static <T> Seq<T> nil () {
+        return new Seq<T> ();
+    }
+
+    static <V> Seq<V> cons (V x, Seq<V> xs) {
+        return new Seq<V> (x, xs);
+    }
+
+    static void foo() {
+        Seq<String> s = <ref>cons("abc", nil());
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/inference/InferInCall1.java b/java/java-tests/testData/psi/resolve/inference/InferInCall1.java
new file mode 100644
index 0000000..8ee070f
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/inference/InferInCall1.java
@@ -0,0 +1,20 @@
+public class Seq<T> {
+    public Seq() {}
+
+    public Seq(T x, Seq<T> xs) {
+    }
+
+    static <T> Seq<T> nil () {
+        return new Seq<T> ();
+    }
+
+    static <V> Seq<V> cons (V x, Seq<V> xs) {
+        return new Seq<V> (x, xs);
+    }
+
+    static void foo (Seq<String> seq) {}
+
+    static void foo() {
+        foo(<ref>nil());
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/inference/InferInCast.java b/java/java-tests/testData/psi/resolve/inference/InferInCast.java
new file mode 100644
index 0000000..50f770c
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/inference/InferInCast.java
@@ -0,0 +1,18 @@
+public class Seq<T> {
+    public Seq() {}
+
+    public Seq(T x, Seq<T> xs) {
+    }
+
+    static <T> Seq<T> nil () {
+        return new Seq<T> ();
+    }
+
+    static <V> Seq<V> cons (V x, Seq<V> xs) {
+        return new Seq<V> (x, xs);
+    }
+
+    static void foo() {
+        (Seq<String>)<ref>nil();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/inference/InferInParamsOnly.java b/java/java-tests/testData/psi/resolve/inference/InferInParamsOnly.java
new file mode 100644
index 0000000..dc2dda3
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/inference/InferInParamsOnly.java
@@ -0,0 +1,11 @@
+class C {
+    class I {}
+    class A extends I {}
+    class B extends I {}
+
+    <T> T f(T t1, T t2) {return null;}
+
+    void foo () {
+        Object o = <ref>f (new A(), new B ());
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/inference/InferInReturn.java b/java/java-tests/testData/psi/resolve/inference/InferInReturn.java
new file mode 100644
index 0000000..da9098d
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/inference/InferInReturn.java
@@ -0,0 +1,9 @@
+public class C <T> {
+  <T> T foo () {return null;}
+
+  class Sub {
+    T foo () {
+      return C.this.<ref>foo();
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/inference/InferInSuperAssignment.java b/java/java-tests/testData/psi/resolve/inference/InferInSuperAssignment.java
new file mode 100644
index 0000000..c79bc77
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/inference/InferInSuperAssignment.java
@@ -0,0 +1,10 @@
+class A<T> {}
+class B<T> extends A<T> {}
+
+class C {
+    <T> B<T> f() {return null;}
+
+    void bar () {
+        A<String> a = <ref>f();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/inference/InferNotNull.java b/java/java-tests/testData/psi/resolve/inference/InferNotNull.java
new file mode 100644
index 0000000..4e4cbae
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/inference/InferNotNull.java
@@ -0,0 +1,13 @@
+import java.util.*;
+
+
+class SortedList<E extends Comparable> extends ArrayList<E>
+{
+  public static <T> T binarySearch(List<? extends Comparable<? super T>> list, T key) {
+    return null;
+  }
+
+  public boolean add(E e){
+      <ref>binarySearch(this,e); //infer E
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/inference/InferPrimitiveArray.java b/java/java-tests/testData/psi/resolve/inference/InferPrimitiveArray.java
new file mode 100644
index 0000000..2c2fc66
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/inference/InferPrimitiveArray.java
@@ -0,0 +1,12 @@
+class List<T> {}
+
+class Test {
+    <T> T extract(List<T> l) {
+        return null;
+    }
+    
+    void foo (List<double[]> l) {
+       <ref>extract(l);
+    }
+}
+
diff --git a/java/java-tests/testData/psi/resolve/inference/InferRawType.java b/java/java-tests/testData/psi/resolve/inference/InferRawType.java
new file mode 100644
index 0000000..3252e81
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/inference/InferRawType.java
@@ -0,0 +1,10 @@
+class G<T> {}
+
+public class C {
+
+    <T> T f (G<T> l) { return null;}
+
+    void foo (G l) {
+        String s = <ref>f(l);
+    }
+}
diff --git a/java/java-tests/testData/psi/resolve/inference/InferUnchecked.java b/java/java-tests/testData/psi/resolve/inference/InferUnchecked.java
new file mode 100644
index 0000000..613fba5
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/inference/InferUnchecked.java
@@ -0,0 +1,14 @@
+class List<T> {}
+class ArrayList<T> extends List<T> {}
+class Comparator<T> {}
+
+public class TokenStreamRewriteEngine {
+    public static <T> T binarySearch(List<? extends T> list, T key, Comparator<? super T> c) {
+        return null;
+    }
+
+    protected void addToSortedRewriteList(String programName, String op, Comparator comparator) {
+        List rewrites = new ArrayList();
+        <ref>binarySearch(rewrites, op, comparator);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/inference/InferWithBounds.java b/java/java-tests/testData/psi/resolve/inference/InferWithBounds.java
new file mode 100644
index 0000000..86c70b4
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/inference/InferWithBounds.java
@@ -0,0 +1,8 @@
+class C {
+    class Inner {}
+    <T extends Inner> T f() {return null;}
+
+    void bar () {
+        Object o = <ref>f();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/inference/InferWithBounds1.java b/java/java-tests/testData/psi/resolve/inference/InferWithBounds1.java
new file mode 100644
index 0000000..8a18221
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/inference/InferWithBounds1.java
@@ -0,0 +1,9 @@
+class Test {
+     <T extends String> int getValue() {
+          return 3;
+     }
+
+     void cc() {
+          <ref>getValue();
+     }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/inference/InferWithVarargs1.java b/java/java-tests/testData/psi/resolve/inference/InferWithVarargs1.java
new file mode 100644
index 0000000..f6a45fc
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/inference/InferWithVarargs1.java
@@ -0,0 +1,10 @@
+class C1 {}
+class C2 extends C1 {}
+
+class C {
+  <T> T foo (T... ts) { return null; }
+
+  void bar () {
+    <ref>foo(new C2());
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/inference/InferWithVarargs2.java b/java/java-tests/testData/psi/resolve/inference/InferWithVarargs2.java
new file mode 100644
index 0000000..04fb22e
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/inference/InferWithVarargs2.java
@@ -0,0 +1,10 @@
+class C1 {}
+class C2 extends C1 {}
+
+class C {
+  <T> T foo (T... ts) { return null; }
+
+  void bar () {
+    <ref>foo(new C2(), new C1());
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/inference/InferWithVarargs3.java b/java/java-tests/testData/psi/resolve/inference/InferWithVarargs3.java
new file mode 100644
index 0000000..1e77a7d
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/inference/InferWithVarargs3.java
@@ -0,0 +1,10 @@
+class List<T> {}
+
+class Test {
+    <T> List<T> asList(T... ts) {
+        return null;
+    }
+    void foo () {
+        <ref>asList(new int[0]);
+    }
+}
diff --git a/java/java-tests/testData/psi/resolve/inference/InferWithVarargs4.java b/java/java-tests/testData/psi/resolve/inference/InferWithVarargs4.java
new file mode 100644
index 0000000..fb144b6
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/inference/InferWithVarargs4.java
@@ -0,0 +1,10 @@
+class List<T> {}
+
+class Test {
+    <T> List<T> asList(T... ts) {
+        return null;
+    }
+    void foo () {
+        <ref>asList(new int[0], new int[0]);
+    }
+}
diff --git a/java/java-tests/testData/psi/resolve/inference/InferWithVarargs5.java b/java/java-tests/testData/psi/resolve/inference/InferWithVarargs5.java
new file mode 100644
index 0000000..2a801d7
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/inference/InferWithVarargs5.java
@@ -0,0 +1,10 @@
+class List<T> {}
+
+class Test {
+    <T> List<T> asList(T... ts) {
+        return null;
+    }
+    void foo () {
+        <ref>asList(new Integer[0]);
+    }
+}
diff --git a/java/java-tests/testData/psi/resolve/inference/InferWithVarargs6.java b/java/java-tests/testData/psi/resolve/inference/InferWithVarargs6.java
new file mode 100644
index 0000000..8eed10a
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/inference/InferWithVarargs6.java
@@ -0,0 +1,10 @@
+class List<T> {}
+
+class Test {
+    <T> List<T> asList(T... ts) {
+        return null;
+    }
+    void foo () {
+        <ref>asList(new Integer[0], new Integer[0]);
+    }
+}
diff --git a/java/java-tests/testData/psi/resolve/inference/InferWithWildcards.java b/java/java-tests/testData/psi/resolve/inference/InferWithWildcards.java
new file mode 100644
index 0000000..bbc8f8f
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/inference/InferWithWildcards.java
@@ -0,0 +1,17 @@
+class Collection<T> {}
+class Comparator<T> {}
+
+public class Collections {
+    public static <T> T min(Collection<? extends T> coll, Comparator<? super T> comp) {
+        if (comp==null)
+             return (T)<ref>min((Collection<SelfComparable>) (Collection) coll);
+
+        return null;
+    }
+
+    public static <T extends Object & Comparable<? super T>> T min(Collection<? extends T> coll) {
+        return null;
+    }
+
+    private interface SelfComparable extends Comparable<SelfComparable> {}
+}
diff --git a/java/java-tests/testData/psi/resolve/inference/InferWithWildcards1.java b/java/java-tests/testData/psi/resolve/inference/InferWithWildcards1.java
new file mode 100644
index 0000000..e13f6ca
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/inference/InferWithWildcards1.java
@@ -0,0 +1,7 @@
+class C<T> {
+   <T> T foo (C<? extends T> c) {return null;}
+
+   void bar (C<? extends String> c) {
+     <ref>foo(c);
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/inference/InferWithWildcards2.java b/java/java-tests/testData/psi/resolve/inference/InferWithWildcards2.java
new file mode 100644
index 0000000..8e316f0
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/inference/InferWithWildcards2.java
@@ -0,0 +1,25 @@
+class Collection<T> {}
+
+interface Bar {}
+
+class BarImpl implements Bar {}
+
+interface Foo<E extends Bar> {
+  Collection<E> getElements();
+}
+
+class FooImpl implements Foo<BarImpl> {
+  public Collection<BarImpl> getElements() {
+    return null;
+  }
+}
+
+public class Bazz {
+  public static <E extends Bar> Collection<E> getElements(Collection<? extends Foo<E>> foos) {
+    return null;
+  }
+
+  public static void failure(final Collection<FooImpl> foos) {
+    <ref>getElements(foos);
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/inference/InferWithWildcards3.java b/java/java-tests/testData/psi/resolve/inference/InferWithWildcards3.java
new file mode 100644
index 0000000..b163814
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/inference/InferWithWildcards3.java
@@ -0,0 +1,15 @@
+class X {
+    static class Y<T> {
+    }
+
+    static <T> Y<T> x(Y<? super T> y) {
+        return null;
+    }
+
+
+    {
+      Y<Long> y1 = null;
+      X.<ref>x(y1);
+    }
+}
+}
diff --git a/java/java-tests/testData/psi/resolve/inference/InferWithWildcards4.java b/java/java-tests/testData/psi/resolve/inference/InferWithWildcards4.java
new file mode 100644
index 0000000..9691d67
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/inference/InferWithWildcards4.java
@@ -0,0 +1,15 @@
+class X {
+    static class Y<T> {
+    }
+
+    static <T> Y<T> x(Y<? super T[]> y) {
+        return null;
+    }
+
+
+    {
+      Y<Long[]> y1 = null;
+      X.<ref>x(y1);
+    }
+}
+}
diff --git a/java/java-tests/testData/psi/resolve/inference/InferWithWildcards5.java b/java/java-tests/testData/psi/resolve/inference/InferWithWildcards5.java
new file mode 100644
index 0000000..c4b6760
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/inference/InferWithWildcards5.java
@@ -0,0 +1,15 @@
+class X {
+    static class Y<T> {
+    }
+
+    static <T> Y<T> x(Y<? super Y<T>> y) {
+        return null;
+    }
+
+
+    {
+      Y<Y<Long>> y1 = null;
+      X.<ref>x(y1);
+    }
+}
+}
diff --git a/java/java-tests/testData/psi/resolve/inference/SCR41031.java b/java/java-tests/testData/psi/resolve/inference/SCR41031.java
new file mode 100644
index 0000000..13ec923
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/inference/SCR41031.java
@@ -0,0 +1,15 @@
+class List<T>{
+    T get () {return null;}
+}
+
+class CaptureTest <T> {
+    private List<? extends List<T>> listOfSets;
+
+    private void foo() {
+        <ref>doGenericThing(listOfSets.get(0));
+    }
+
+    public <U> List<U> doGenericThing(List<U> set) {
+        return null;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/AnonymousSuper1.java b/java/java-tests/testData/psi/resolve/method/AnonymousSuper1.java
new file mode 100644
index 0000000..4daef9f
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/AnonymousSuper1.java
@@ -0,0 +1,20 @@
+/**
+ * Created by IntelliJ IDEA.
+ * User: ik
+ * Date: 22.01.2003
+ * Time: 11:15:19
+ * To change this template use Options | File Templates.
+ */
+public class Test1 {
+    public static class A{
+        protected void foo(){}
+    }
+
+    public static void main(String[] args){
+        new A(){
+            protected void foo(){
+                super.<ref>foo();
+            }
+        };
+    }
+}
diff --git a/java/java-tests/testData/psi/resolve/method/Array1.java b/java/java-tests/testData/psi/resolve/method/Array1.java
new file mode 100644
index 0000000..a7e8289
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/Array1.java
@@ -0,0 +1,6 @@
+class Array{
+ void foo(){
+  int[] array;
+  array.<ref>clone();
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/Bug7968.java b/java/java-tests/testData/psi/resolve/method/Bug7968.java
new file mode 100644
index 0000000..ce2af8a
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/Bug7968.java
@@ -0,0 +1,21 @@
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: ik
+ * Date: 22.01.2003
+ * Time: 14:46:09
+ * To change this template use Options | File Templates.
+ */
+public class Bug7968 {
+    public static void foo (String s, String s1, String s2, Object[] oa)
+    {
+        Bar.<ref>bar (s, s1, s2, oa);
+    }
+    class Bar
+    {
+        public static void bar (Object o, String s1, String s2, Object[] ao) {}
+        public static void bar (String s, String s1, String s2, Object   o)  {}
+        public static void bar (String s, String s1, String s2, Object[] ao) {}
+    }
+
+}
diff --git a/java/java-tests/testData/psi/resolve/method/Clone.java b/java/java-tests/testData/psi/resolve/method/Clone.java
new file mode 100644
index 0000000..6f77c23
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/Clone.java
@@ -0,0 +1,17 @@
+class Z{
+  public interface A { Object clone(); }
+
+  interface B extends A { }
+
+
+
+
+  class C implements B {
+    Object clone() {
+      C c = new C();
+      ((A) c).clone();
+      ((B) c).<ref>clone();
+      return c.clone();
+    }
+  }
+}
diff --git a/java/java-tests/testData/psi/resolve/method/Cycle1.java b/java/java-tests/testData/psi/resolve/method/Cycle1.java
new file mode 100644
index 0000000..aaa54e1
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/Cycle1.java
@@ -0,0 +1,23 @@
+public class Cycle1{
+    public interface A{
+        void foo();
+    }
+
+    public interface B{
+        void foo();
+    }
+
+    public static class C
+        implements A{
+        void foo(){}
+    }
+
+    public static class D extends C
+        implements B{
+        void foo(int ggg){}
+        
+        void foo1(){
+            <ref>foo();
+        }
+    }
+}
diff --git a/java/java-tests/testData/psi/resolve/method/EmptyConstructor.java b/java/java-tests/testData/psi/resolve/method/EmptyConstructor.java
new file mode 100644
index 0000000..652070ee
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/EmptyConstructor.java
@@ -0,0 +1,5 @@
+class A{
+ A(){
+  <ref>super();
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/ImplementOrder.java b/java/java-tests/testData/psi/resolve/method/ImplementOrder.java
new file mode 100644
index 0000000..5d61f06
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/ImplementOrder.java
@@ -0,0 +1,11 @@
+abstract public class YYY implements I,II{
+    private void f(YYY y) {
+        II i = y.<ref>foo();
+    }
+}
+interface I {
+    I foo();
+}
+interface II extends I {
+    II foo();
+}
diff --git a/java/java-tests/testData/psi/resolve/method/IndexOf.java b/java/java-tests/testData/psi/resolve/method/IndexOf.java
new file mode 100644
index 0000000..7b095df
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/IndexOf.java
@@ -0,0 +1,5 @@
+class A{
+  {
+    "aaa".<ref>indexOf('a');
+  }
+}
diff --git a/java/java-tests/testData/psi/resolve/method/InheranceWithExtendsConflict.java b/java/java-tests/testData/psi/resolve/method/InheranceWithExtendsConflict.java
new file mode 100644
index 0000000..d3bd0d4
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/InheranceWithExtendsConflict.java
@@ -0,0 +1,24 @@
+/**
+ * Created by IntelliJ IDEA.
+ * User: ik
+ * Date: 23.01.2003
+ * Time: 18:44:34
+ * To change this template use Options | File Templates.
+ */
+public class Inner1 {
+    private int a(){
+        return 0;
+    }
+
+    private class A extends B{
+        {
+            int j = <ref>a();
+        }
+    }
+}
+
+class B {
+    public int a(){
+        return 0;
+    }
+}
diff --git a/java/java-tests/testData/psi/resolve/method/Inherit1.java b/java/java-tests/testData/psi/resolve/method/Inherit1.java
new file mode 100644
index 0000000..168db98
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/Inherit1.java
@@ -0,0 +1,17 @@
+class A{
+ public int askdh(){
+  return 1;
+ }
+}
+
+class B extends A{
+ public void askdh(){
+  return 2;
+ }
+}
+
+class Super1 extends B{
+ {
+  super.<ref>askdh();
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/InnerClass.java b/java/java-tests/testData/psi/resolve/method/InnerClass.java
new file mode 100644
index 0000000..5846ded
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/InnerClass.java
@@ -0,0 +1,12 @@
+public class InnerClass {
+    void foo() {}
+
+    class Inner {
+        void foo(int i) {}
+
+        void bar() {
+            <ref>foo();
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/MethodConflict1.java b/java/java-tests/testData/psi/resolve/method/MethodConflict1.java
new file mode 100644
index 0000000..07eaeca
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/MethodConflict1.java
@@ -0,0 +1,12 @@
+class A{
+	interface A{}
+	interface B{}
+
+	class C implements A, B{
+		void foo(A a){}
+		void foo(B b){}
+	}
+	{
+		new C().<ref>foo(new C())
+	}
+}
diff --git a/java/java-tests/testData/psi/resolve/method/MethodFromAnonBase.java b/java/java-tests/testData/psi/resolve/method/MethodFromAnonBase.java
new file mode 100644
index 0000000..9ab99d5
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/MethodFromAnonBase.java
@@ -0,0 +1,9 @@
+class Test{
+  {
+    new Runnable(){
+      {
+        <ref>run();
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/MultipleInheritancePathsToMethod.java b/java/java-tests/testData/psi/resolve/method/MultipleInheritancePathsToMethod.java
new file mode 100644
index 0000000..3fea76f
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/MultipleInheritancePathsToMethod.java
@@ -0,0 +1,20 @@
+interface N1 {
+  String getName();
+}
+interface N2 {
+  String getName();
+}
+interface NN extends N1 {}
+
+interface N3 {
+    String getName();
+}
+interface VeryNamed extends NN, N2, N3, N1 {}
+
+class MyClass {
+
+  void foo(VeryNamed f) {
+    f.getNa<ref>me();
+  }
+
+}
diff --git a/java/java-tests/testData/psi/resolve/method/NextMethod.java b/java/java-tests/testData/psi/resolve/method/NextMethod.java
new file mode 100644
index 0000000..65711f2
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/NextMethod.java
@@ -0,0 +1,11 @@
+class A{
+ void foo(Object a, String b){
+ }
+
+ void foo(){
+  <ref>foo("aaa", true);
+ }
+
+ void foo(String a, boolean b){
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/NotAccessibleAccessClass.java b/java/java-tests/testData/psi/resolve/method/NotAccessibleAccessClass.java
new file mode 100644
index 0000000..c47e519
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/NotAccessibleAccessClass.java
@@ -0,0 +1,17 @@
+class A {
+  B b1;
+  static B b2;
+  public class Z extends B{
+    public void akshdkjasdh(){}
+  }
+  private class B{
+    public void f() {}
+  }
+}
+
+
+class C extends A {
+  {
+    b1.<ref>f();
+  }
+  }
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/ObjectVsInterface.java b/java/java-tests/testData/psi/resolve/method/ObjectVsInterface.java
new file mode 100644
index 0000000..da5d26b
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/ObjectVsInterface.java
@@ -0,0 +1,11 @@
+import java.io.Serializable;
+
+interface PublicCloneable {
+	Object clone();
+}
+interface Extension extends Serializable, PublicCloneable {}
+class Test {
+	void foo(Extension bar) {
+		bar.<ref>clone();
+	}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/PartlyImplement1.java b/java/java-tests/testData/psi/resolve/method/PartlyImplement1.java
new file mode 100644
index 0000000..4dc6209
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/PartlyImplement1.java
@@ -0,0 +1,13 @@
+class A{
+public abstract class IntegerPredicateBase implements Predicate{
+ public boolean applies(Object obj){
+  return <ref>applies((Integer)obj);  
+ }
+}
+public interface Predicate{
+ boolean applies(Object obj);
+ boolean applies(Integer myObj);
+}
+ 
+}
+
diff --git a/java/java-tests/testData/psi/resolve/method/PreferPublic.java b/java/java-tests/testData/psi/resolve/method/PreferPublic.java
new file mode 100644
index 0000000..3408dcf
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/PreferPublic.java
@@ -0,0 +1,10 @@
+class A{
+  private void foo(String s){}
+  public void foo(Object o){}
+}
+
+class B{
+  {
+    new A().<ref>foo("a");
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/PrivateInSuperInner.java b/java/java-tests/testData/psi/resolve/method/PrivateInSuperInner.java
new file mode 100644
index 0000000..839af0c
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/PrivateInSuperInner.java
@@ -0,0 +1,10 @@
+class Outer {
+    private void foo() {}
+
+    static class Inner extends Outer {
+        void bar() {
+            <ref>foo();
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/PrivateInSuperInner1.java b/java/java-tests/testData/psi/resolve/method/PrivateInSuperInner1.java
new file mode 100644
index 0000000..6c0fd5e
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/PrivateInSuperInner1.java
@@ -0,0 +1,10 @@
+class Outer {
+    private void foo() {}
+
+    class Inner extends Outer {
+        void bar() {
+            <ref>foo();
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/ProtectedM.java b/java/java-tests/testData/psi/resolve/method/ProtectedM.java
new file mode 100644
index 0000000..b95f2ac
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/ProtectedM.java
@@ -0,0 +1,10 @@
+import javax.swing.*;
+import java.awt.*;
+
+class Xc extends JComponent {
+    JComponent component;
+
+    protected void paintComponent(final Graphics g) {
+        component.<ref>paintComponent(g);
+    }
+}
diff --git a/java/java-tests/testData/psi/resolve/method/Remove1.java b/java/java-tests/testData/psi/resolve/method/Remove1.java
new file mode 100644
index 0000000..246ae13
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/Remove1.java
@@ -0,0 +1,14 @@
+public class Remove1{
+  void foo(Object o){}
+  void foo(String o){}
+  public static class A extends Remove{
+   void foo(Object o){
+   }
+   void foo(String o){
+   }
+  }
+
+  public static void main(){
+    new A().<ref>foo("aaa");
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/Remove2.java b/java/java-tests/testData/psi/resolve/method/Remove2.java
new file mode 100644
index 0000000..4aca68e
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/Remove2.java
@@ -0,0 +1,7 @@
+import java.util.ArrayList;
+public class Remove2{
+  private static ArrayList lst = new ArrayList();
+  public static void main(){
+    lst.<ref>remove("aaa");
+  }
+}
diff --git a/java/java-tests/testData/psi/resolve/method/Remove3.java b/java/java-tests/testData/psi/resolve/method/Remove3.java
new file mode 100644
index 0000000..442bcf7
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/Remove3.java
@@ -0,0 +1,18 @@
+package psi.resolve.method;
+
+import com.intellij.util.containers.trove.THashMap;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: ik
+ * Date: 17.01.2003
+ * Time: 15:08:26
+ * To change this template use Options | File Templates.
+ */
+public class Remove3{
+    THashMap map = new THashMap();
+    
+    void foo(){
+        map.<ref>size();
+    }
+}
diff --git a/java/java-tests/testData/psi/resolve/method/Remove4.java b/java/java-tests/testData/psi/resolve/method/Remove4.java
new file mode 100644
index 0000000..6981c7f
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/Remove4.java
@@ -0,0 +1,11 @@
+package ;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: ik
+ * Date: 17.01.2003
+ * Time: 19:11:56
+ * To change this template use Options | File Templates.
+ */
+public class Remove4 {
+}
diff --git a/java/java-tests/testData/psi/resolve/method/SCR5134.java b/java/java-tests/testData/psi/resolve/method/SCR5134.java
new file mode 100644
index 0000000..b180b6e
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/SCR5134.java
@@ -0,0 +1,11 @@
+interface I {
+  boolean foo(Object obj);
+
+  boolean foo(Integer myObj);
+}
+
+abstract class C implements I {
+  public boolean foo(Object obj) {
+    return <ref>foo((Integer)obj);
+  }
+}
diff --git a/java/java-tests/testData/psi/resolve/method/SCR5859.java b/java/java-tests/testData/psi/resolve/method/SCR5859.java
new file mode 100644
index 0000000..3fe506e
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/SCR5859.java
@@ -0,0 +1,27 @@
+
+class Base {
+}
+
+class Derived extends Base {
+}
+
+class Server {
+  static Base sub(Base p1, Base p2) {
+  }
+
+  static Derived sub(Derived p1, Base p2) {
+  }
+
+  static Derived sub(Base p1, Derived p2) {
+  }
+
+  static Derived sub(Derived p1, Derived p2) {
+  }
+}
+
+class Client {
+  {
+    Derived arg = null;
+    Server.<ref>sub(arg, arg);
+  }
+}
diff --git a/java/java-tests/testData/psi/resolve/method/ShortVsInt.java b/java/java-tests/testData/psi/resolve/method/ShortVsInt.java
new file mode 100644
index 0000000..1abf64b
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/ShortVsInt.java
@@ -0,0 +1,8 @@
+class A{
+  String toHex(int i) {} 
+  String toHex(short i) {}
+
+  void f(){
+    <ref>toHex('i');
+  }
+}
diff --git a/java/java-tests/testData/psi/resolve/method/Simple.java b/java/java-tests/testData/psi/resolve/method/Simple.java
new file mode 100644
index 0000000..8109ff9
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/Simple.java
@@ -0,0 +1,9 @@
+public class Simple {
+    public void method(String s) {
+    }
+
+    static {
+        Simple a = new Simple();
+        a.<ref>method("blah");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/Sout.java b/java/java-tests/testData/psi/resolve/method/Sout.java
new file mode 100644
index 0000000..e9f8799
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/Sout.java
@@ -0,0 +1,5 @@
+class Sout {
+    static {
+        System.out.<ref>println();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/StaticVSNonStatic.java b/java/java-tests/testData/psi/resolve/method/StaticVSNonStatic.java
new file mode 100644
index 0000000..55c966d
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/StaticVSNonStatic.java
@@ -0,0 +1,11 @@
+ public class Foo {
+  public void foo() {}
+
+  public static void foo(char c){}
+}
+
+class A{
+  {
+    Foo.<ref>foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/Super1.java b/java/java-tests/testData/psi/resolve/method/Super1.java
new file mode 100644
index 0000000..9ea317a
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/Super1.java
@@ -0,0 +1,10 @@
+class A{
+ public void askdh(){
+ }
+}
+
+class Super1 extends A{
+ {
+  super.<ref>askdh();
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/SuperOfObject.java b/java/java-tests/testData/psi/resolve/method/SuperOfObject.java
new file mode 100644
index 0000000..3793a9b
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/SuperOfObject.java
@@ -0,0 +1,15 @@
+interface I {
+    Object clone();
+}
+
+interface J extends I {
+}
+
+class CBase implements I {
+}
+
+class C extends CBase implements J {
+    {
+        super.<ref>clone();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/TestOverloading1.java b/java/java-tests/testData/psi/resolve/method/TestOverloading1.java
new file mode 100644
index 0000000..8590407
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/TestOverloading1.java
@@ -0,0 +1,20 @@
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: ik
+ * Date: 28.05.2003
+ * Time: 16:24:03
+ * To change this template use Options | File Templates.
+ */
+public class TestOverloading1 {
+    class A{
+        void foo(){}
+    }
+    class B extends A{
+        void foo(){}
+    }
+
+    {
+        new B().<ref>foo(1);
+    }
+}
diff --git a/java/java-tests/testData/psi/resolve/method/ThrowWithoutNew.java b/java/java-tests/testData/psi/resolve/method/ThrowWithoutNew.java
new file mode 100644
index 0000000..71baf79
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/ThrowWithoutNew.java
@@ -0,0 +1,5 @@
+class A{
+ void foo() throws Exception{
+  throw <ref>Exception();
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/ThrowWithoutNew2.java b/java/java-tests/testData/psi/resolve/method/ThrowWithoutNew2.java
new file mode 100644
index 0000000..71baf79
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/ThrowWithoutNew2.java
@@ -0,0 +1,5 @@
+class A{
+ void foo() throws Exception{
+  throw <ref>Exception();
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/ValueOf.java b/java/java-tests/testData/psi/resolve/method/ValueOf.java
new file mode 100644
index 0000000..0292b58
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/ValueOf.java
@@ -0,0 +1,5 @@
+class A{
+ void foo(){
+  String.<ref>valueOf(1);
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/generics/AmbiguousBoxing.java b/java/java-tests/testData/psi/resolve/method/generics/AmbiguousBoxing.java
new file mode 100644
index 0000000..2b565f7
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/AmbiguousBoxing.java
@@ -0,0 +1,9 @@
+public class Ambiguous {
+    void f(Object o1, Object o2) {}
+    void f(int o1, int o2) {}
+
+    void g(Integer i)
+    {
+        <ref>f(1, i);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/generics/AutoboxingAndWidening.java b/java/java-tests/testData/psi/resolve/method/generics/AutoboxingAndWidening.java
new file mode 100644
index 0000000..bd0fd5e
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/AutoboxingAndWidening.java
@@ -0,0 +1,11 @@
+public class Foo {
+
+    public void foo(Comparable c) {
+    }
+
+
+    {
+       <ref>foo(1L);
+    }
+
+}
diff --git a/java/java-tests/testData/psi/resolve/method/generics/ConstructorExplicitParams.java b/java/java-tests/testData/psi/resolve/method/generics/ConstructorExplicitParams.java
new file mode 100644
index 0000000..6de8185
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/ConstructorExplicitParams.java
@@ -0,0 +1,9 @@
+class Foo {
+    <T> Foo(T t) {
+
+    }
+
+    static {
+        Foo f = <String>new <ref>Foo();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/generics/CovariantReturnTypes.java b/java/java-tests/testData/psi/resolve/method/generics/CovariantReturnTypes.java
new file mode 100644
index 0000000..095f908
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/CovariantReturnTypes.java
@@ -0,0 +1,13 @@
+interface F {
+    Object o();
+}
+interface E extends F {
+    String o();
+}
+interface B extends E,F { }
+
+class User {
+    void x(B a) {
+        String o  = a.<ref>o();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/generics/DependingParams1.java b/java/java-tests/testData/psi/resolve/method/generics/DependingParams1.java
new file mode 100644
index 0000000..df0475c
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/DependingParams1.java
@@ -0,0 +1,6 @@
+ class X<T> {
+  class XX extends X<X> {}
+  void <T> f(X<T> x, T t) {
+      f(new XX(), new X());
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/generics/DependingParams2.java b/java/java-tests/testData/psi/resolve/method/generics/DependingParams2.java
new file mode 100644
index 0000000..ccff1ff4
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/DependingParams2.java
@@ -0,0 +1,14 @@
+interface Runnable{}
+interface Class<T>{}
+
+public class Foo implements Runnable{
+  static <T> void foo(Class<T> aClass, T t) { }
+
+  Class<Foo> getC(){ return new Class<Foo>(){};}
+  public void run() {
+  }
+
+  {
+    <ref>foo(new Class<Runnable>(){}, this);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/generics/ExplicitParams1.java b/java/java-tests/testData/psi/resolve/method/generics/ExplicitParams1.java
new file mode 100644
index 0000000..f9c022eb
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/ExplicitParams1.java
@@ -0,0 +1,8 @@
+class Foo {
+    <T> T f() {
+    }
+
+    {
+      this.<String><ref>f();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/generics/ExplicitParams2.java b/java/java-tests/testData/psi/resolve/method/generics/ExplicitParams2.java
new file mode 100644
index 0000000..33a9cf6
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/ExplicitParams2.java
@@ -0,0 +1,8 @@
+class Foo {
+    <T> Foo<T> f() {
+    }
+
+    static {
+      new Foo().<Integer><ref>f();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/generics/Extends1.java b/java/java-tests/testData/psi/resolve/method/generics/Extends1.java
new file mode 100644
index 0000000..ddf45a8
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/Extends1.java
@@ -0,0 +1,14 @@
+
+class Test{
+    interface Map<K, V>{
+        K put(K k, V v);
+    }
+
+    class HashMap implements Map<Integer, Integer>{
+    }
+
+    {
+        HashMap map = new HashMap();
+        map.put(new Integer(1), new Integer(1)).<ref>byteValue();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/generics/FilterBoxing1.java b/java/java-tests/testData/psi/resolve/method/generics/FilterBoxing1.java
new file mode 100644
index 0000000..cb4517f
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/FilterBoxing1.java
@@ -0,0 +1,14 @@
+class Test1 {
+    public static void method(Object o, boolean b) {
+        System.out.println("Object");
+    }
+
+    public static void method(String s, Object o) {
+        System.out.println("String");
+    }
+
+    public static void main(String[] args) {
+        <ref>method("Hello, World", false);
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/generics/FilterFixedVsVarargs1.java b/java/java-tests/testData/psi/resolve/method/generics/FilterFixedVsVarargs1.java
new file mode 100644
index 0000000..e875b2e
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/FilterFixedVsVarargs1.java
@@ -0,0 +1,14 @@
+ class Cast {
+    public void f(Object o1, String ... o) {
+
+    }
+
+    public void f(String s, Integer o) {
+
+    }
+
+    public void g() {
+// Code is green - but we need a cast here
+        <ref>f(null, null);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/generics/FilterFixedVsVarargs2.java b/java/java-tests/testData/psi/resolve/method/generics/FilterFixedVsVarargs2.java
new file mode 100644
index 0000000..eb38a09
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/FilterFixedVsVarargs2.java
@@ -0,0 +1,14 @@
+ class Cast {
+    public void f(String ... o) {
+
+    }
+
+    public void f(Integer o) {
+
+    }
+
+    public void g() {
+// Code is green - but we need a cast here
+        <ref>f(null);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/generics/FilterFixedVsVarargs3.java b/java/java-tests/testData/psi/resolve/method/generics/FilterFixedVsVarargs3.java
new file mode 100644
index 0000000..5156f69
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/FilterFixedVsVarargs3.java
@@ -0,0 +1,16 @@
+class A {}
+class B extends A{}
+class Cast {
+    public void f(A... o) {
+
+    }
+
+    public void f(A o) {
+
+    }
+
+    public void g() {
+// Code is green - but we need a cast here
+        <ref>f(null);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/generics/FilterFixedVsVarargs4.java b/java/java-tests/testData/psi/resolve/method/generics/FilterFixedVsVarargs4.java
new file mode 100644
index 0000000..87d51f0
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/FilterFixedVsVarargs4.java
@@ -0,0 +1,16 @@
+class A {}
+class B extends A{}
+class Cast {
+    public void f(A... o) {
+
+    }
+
+    public void f(A o) {
+
+    }
+
+    public void g() {
+// Casts ensures correct candidates filtering
+        <ref>f((A) null);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/generics/FilterFixedVsVarargs5.java b/java/java-tests/testData/psi/resolve/method/generics/FilterFixedVsVarargs5.java
new file mode 100644
index 0000000..ccb839d
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/FilterFixedVsVarargs5.java
@@ -0,0 +1,18 @@
+import java.util.List;
+
+class A {
+    static List<String> listOf(String... elements) {
+        System.out.println("in varargs");
+        return null;
+    }
+
+    static List<String> listOf(Object elements) {
+        System.out.println("in nonvarargs");
+        return null;
+    }
+
+    public static void main(String[] args) {
+        //resolves to nonvarargs method
+        List<String> uhoh =   <ref>listOf("");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/generics/FilterFixedVsVarargs6.java b/java/java-tests/testData/psi/resolve/method/generics/FilterFixedVsVarargs6.java
new file mode 100644
index 0000000..8d0eb4f
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/FilterFixedVsVarargs6.java
@@ -0,0 +1,19 @@
+import java.util.List;
+
+class A {
+    static <T> List<T> listOf(T... elements) {
+        System.out.println("in varargs");
+        return null;
+    }
+
+    static <T> List<T> listOf(T elements) {
+        System.out.println("in nonvarargs");
+        return null;
+    }
+
+    public static void main(String[] args) {
+        String[] array = {"foo", "bar"};
+        //resolves to varargs method
+        List<String> uhoh =   <ref>listOf(array);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/generics/FilterFixedVsVarargs7.java b/java/java-tests/testData/psi/resolve/method/generics/FilterFixedVsVarargs7.java
new file mode 100644
index 0000000..3492c46
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/FilterFixedVsVarargs7.java
@@ -0,0 +1,19 @@
+import java.util.List;
+
+ class A {
+     static <T> List<T[]> listOf(T[]... elements) {
+         System.out.println("in multiple");
+         return Arrays.asList(elements);
+     }
+
+     static <T> List<T[]> listOf(T[] elements) {
+         System.out.println("in single");
+         return Collections.singletonList(elements);
+     }
+
+     public static void main(String[] args) {
+         String[] array = {"foo", "bar"};
+         //resolves to nonvarargs method
+         List<String[]> listOfString =  <ref>listOf(array);
+     }
+ }
diff --git a/java/java-tests/testData/psi/resolve/method/generics/FilterFixedVsVarargs8.java b/java/java-tests/testData/psi/resolve/method/generics/FilterFixedVsVarargs8.java
new file mode 100644
index 0000000..509e6fd
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/FilterFixedVsVarargs8.java
@@ -0,0 +1,8 @@
+class HH {
+    HH(Object o1, Object o2) {
+        <ref>this(o1, o2);
+    }
+
+
+    HH(Object... os) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/generics/FilterFixedVsVarargs9.java b/java/java-tests/testData/psi/resolve/method/generics/FilterFixedVsVarargs9.java
new file mode 100644
index 0000000..90d83fa
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/FilterFixedVsVarargs9.java
@@ -0,0 +1,14 @@
+ class ParentOf {
+     public static <T extends PsiElement> T getParentOfType(PsiElement element, Class<T> aClass, boolean strict) {
+       return null;
+     }
+     public static <T extends PsiElement> T getParentOfType(PsiElement element, Class<? extends T>... classes) {
+       return null;
+     }
+
+     void f(PsiElement e) {
+         <ref>getParentOfType(e, PsiElement.class, PsiElement.class);
+     }
+
+     static class PsiElement {}
+ }
diff --git a/java/java-tests/testData/psi/resolve/method/generics/FilterVarargsVsVarargs1.java b/java/java-tests/testData/psi/resolve/method/generics/FilterVarargsVsVarargs1.java
new file mode 100644
index 0000000..67c854b
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/FilterVarargsVsVarargs1.java
@@ -0,0 +1,15 @@
+class XY {
+    public static Object getLocalizedObject(Object... objects) {
+        System.out.println("in first");
+        return null;
+    }
+
+    public static Object getLocalizedObject(Integer i, String string, Object... objects) {
+        System.out.println("in second");
+        return null;
+    }
+
+    public static void main(String[] args) {
+            <ref>getLocalizedObject(null,   "");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/generics/FilterVarargsVsVarargs2.java b/java/java-tests/testData/psi/resolve/method/generics/FilterVarargsVsVarargs2.java
new file mode 100644
index 0000000..0c19a2a
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/FilterVarargsVsVarargs2.java
@@ -0,0 +1,9 @@
+class XY {
+    private void f(byte... bs) {}
+
+    private void f(int... is) {}
+
+    public static void main(String[] args) {
+            <ref>f((byte)0, (byte)1);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/generics/FilterVarargsVsVarargs3.java b/java/java-tests/testData/psi/resolve/method/generics/FilterVarargsVsVarargs3.java
new file mode 100644
index 0000000..e3066fb
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/FilterVarargsVsVarargs3.java
@@ -0,0 +1,9 @@
+class XY {
+    private void f(Object... bs) {}
+
+    private void f(int... is) {}
+
+    public static void main(String[] args) {
+            <ref>f();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/generics/FilterVarargsVsVarargs4.java b/java/java-tests/testData/psi/resolve/method/generics/FilterVarargsVsVarargs4.java
new file mode 100644
index 0000000..600fb3d
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/FilterVarargsVsVarargs4.java
@@ -0,0 +1,9 @@
+class XY {
+    private void f(String... bs) {}
+
+    private void f(int... is) {}
+
+    public static void main(String[] args) {
+            <ref>f();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/generics/GenericClass1.java b/java/java-tests/testData/psi/resolve/method/generics/GenericClass1.java
new file mode 100644
index 0000000..d21803b
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/GenericClass1.java
@@ -0,0 +1,9 @@
+interface Foo extends Comparable {
+    void compareTo(Foo foo);
+}
+
+class User {
+    void foo (Foo foo) {
+        foo.<ref>compareTo(foo);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/generics/GenericClass2.java b/java/java-tests/testData/psi/resolve/method/generics/GenericClass2.java
new file mode 100644
index 0000000..2297787
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/GenericClass2.java
@@ -0,0 +1,12 @@
+import java.util.*;
+
+class Foo<T> {
+    void f(ArrayList<T> t) {}
+    <V> void f(List<V> t) {}
+}
+
+class User {
+    void foo (Foo<String> foo) {
+       foo.<ref>f(new ArrayList<String>());
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/generics/GenericMethods1.java b/java/java-tests/testData/psi/resolve/method/generics/GenericMethods1.java
new file mode 100644
index 0000000..232c243
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/GenericMethods1.java
@@ -0,0 +1,13 @@
+import java.util.*;
+
+public class AAA {
+    <T> void f(java.util.List<T> t) {
+    }
+
+    void f(Collection<String> s) {
+    }
+
+    void y(List<String> strings) {
+        <ref>f(strings);
+    }
+}
diff --git a/java/java-tests/testData/psi/resolve/method/generics/GenericMethods2.java b/java/java-tests/testData/psi/resolve/method/generics/GenericMethods2.java
new file mode 100644
index 0000000..8393aa1
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/GenericMethods2.java
@@ -0,0 +1,13 @@
+import java.util.*;
+
+public class AAA {
+    <T> void f(Collection<T> t) {
+    }
+
+    void f(java.util.List<String> s) {
+    }
+
+    void y(List<String> strings) {
+        <ref>f(strings);
+    }
+}
diff --git a/java/java-tests/testData/psi/resolve/method/generics/GenericMethods3.java b/java/java-tests/testData/psi/resolve/method/generics/GenericMethods3.java
new file mode 100644
index 0000000..fef0102
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/GenericMethods3.java
@@ -0,0 +1,11 @@
+public class AAA {
+    <T> void g(T t) {
+    }
+
+    void g(String s) {
+    }
+
+    {
+        <ref>g("");
+    }
+}
diff --git a/java/java-tests/testData/psi/resolve/method/generics/GenericMethods4.java b/java/java-tests/testData/psi/resolve/method/generics/GenericMethods4.java
new file mode 100644
index 0000000..4ee6cbf
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/GenericMethods4.java
@@ -0,0 +1,11 @@
+public class AAA {
+    <T> void g(T... t) {
+    }
+
+    void g(String... s) {
+    }
+
+    {
+        <ref>g("");
+    }
+}
diff --git a/java/java-tests/testData/psi/resolve/method/generics/GenericMethods5.java b/java/java-tests/testData/psi/resolve/method/generics/GenericMethods5.java
new file mode 100644
index 0000000..bec86be
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/GenericMethods5.java
@@ -0,0 +1,19 @@
+class Key<T> { T t; }
+
+class WKey<W, T> extends Key<T> { W w; }
+
+class Items {
+    <T> void addItem(Key<T> key, T value) {}
+
+    <T, W> void addItem(WKey<W, T> key, T value) {}
+}
+
+class IBug {
+    public IBug() {
+        Items items = new Items();
+
+        WKey<Object, String> sk = new WKey<Object, String>();
+
+        items.<ref>addItem(sk,  "");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/generics/GenericMethods6.java b/java/java-tests/testData/psi/resolve/method/generics/GenericMethods6.java
new file mode 100644
index 0000000..cb97bc8
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/GenericMethods6.java
@@ -0,0 +1,18 @@
+class ContainerUtil {
+    interface Condition<T> {
+        boolean value(T object);
+    }
+
+    public static <T> T find(Iterable<? extends T> iterable, final T equalTo) {
+        return <ref>find(iterable, new Condition<T>() {
+            public boolean value(final T object) {
+                return equalTo == object || equalTo.equals(object);
+            }
+        });
+    }
+
+    public static <T> T find(Iterable<? extends T> iterable, Condition<T> condition) {
+        return null;
+    }
+
+}
diff --git a/java/java-tests/testData/psi/resolve/method/generics/GenericsAndVarargsNoConflict.java b/java/java-tests/testData/psi/resolve/method/generics/GenericsAndVarargsNoConflict.java
new file mode 100644
index 0000000..9513d38
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/GenericsAndVarargsNoConflict.java
@@ -0,0 +1,12 @@
+class Test {
+
+    public static void main(String[] args) {
+       <ref>method("a", "b", "c");
+    }
+
+    public static <T> T method(T... a) {
+        return null;
+    }
+
+    public static void method(String... a) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/generics/GetClass.java b/java/java-tests/testData/psi/resolve/method/generics/GetClass.java
new file mode 100644
index 0000000..301849469
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/GetClass.java
@@ -0,0 +1,5 @@
+class Test {
+     public static void main(String[] args) {
+        "sss".<ref>getClass();
+     }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/generics/HidingSuperPrivate.java b/java/java-tests/testData/psi/resolve/method/generics/HidingSuperPrivate.java
new file mode 100644
index 0000000..9e3aa1f
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/HidingSuperPrivate.java
@@ -0,0 +1,18 @@
+ public abstract class BaseTest
+ {
+     private Object f() {
+         return null;
+     }
+
+ }
+ class S {
+     private Object f() {
+         new BaseTest() {
+             {
+                 <ref>f(); 
+             }
+         };
+
+         return null;
+     }
+ }
diff --git a/java/java-tests/testData/psi/resolve/method/generics/Inheritance1.java b/java/java-tests/testData/psi/resolve/method/generics/Inheritance1.java
new file mode 100644
index 0000000..35b4e4b
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/Inheritance1.java
@@ -0,0 +1,16 @@
+
+class Test{
+
+    class A <T>{
+        B<T> x;
+        class B <Z>{
+            public void put(T x, Z y){}
+            public Z getZ(){}
+            public T getT(){}
+        }
+    }
+
+    {
+        new A<Integer>().x.getT().<ref>byteValue();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/generics/Inheritance2.java b/java/java-tests/testData/psi/resolve/method/generics/Inheritance2.java
new file mode 100644
index 0000000..574b1fd
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/Inheritance2.java
@@ -0,0 +1,16 @@
+
+class Test{
+
+    class A <T>{
+        B x;
+        class B <Z>{
+            public void put(T x, Z y){}
+            public Z getZ(){}
+            public T getT(){}
+        }
+    }
+
+    {
+        new A<Integer>().new B<Boolean>().getZ().<ref>booleanValue();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/generics/Inheritance3.java b/java/java-tests/testData/psi/resolve/method/generics/Inheritance3.java
new file mode 100644
index 0000000..08ac65f
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/Inheritance3.java
@@ -0,0 +1,16 @@
+
+class Test{
+
+    class A <T>{
+        B x;
+        class B <Z>{
+            public void put(T x, Z y){}
+            public Z getZ(){}
+            public T getT(){}
+        }
+    }
+
+    {
+        new A<Integer>().new B<Boolean>().getT().<ref>byteValue();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/generics/Inheritance4.java b/java/java-tests/testData/psi/resolve/method/generics/Inheritance4.java
new file mode 100644
index 0000000..0b81ca9
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/Inheritance4.java
@@ -0,0 +1,18 @@
+
+class Test{
+
+    class A <T>{
+        B x;
+        class B <Z>{
+            public void put(T x, Z y){}
+            public Z getZ(){}
+            public T getT(){}
+        }
+    }
+
+    class C extends A<Integer>{}
+
+    {
+        new C().new B<Boolean>().getT().<ref>byteValue();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/generics/Merge1.java b/java/java-tests/testData/psi/resolve/method/generics/Merge1.java
new file mode 100644
index 0000000..5029c30
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/Merge1.java
@@ -0,0 +1,14 @@
+class Test <T>{
+    {
+        Test<Test<Test>> test = new Test<Test>();
+        {
+             test.put("");
+            {
+                test.get().get().get().<ref>get();
+            }
+        }
+    }
+
+    T get(){ return null; }
+    void put(T x){}
+}
diff --git a/java/java-tests/testData/psi/resolve/method/generics/MoreSpecificSameErasure.java b/java/java-tests/testData/psi/resolve/method/generics/MoreSpecificSameErasure.java
new file mode 100644
index 0000000..71694b1
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/MoreSpecificSameErasure.java
@@ -0,0 +1,20 @@
+import java.util.*;
+
+class SSS {
+    public <T> void x(List<T> matcher) {
+        System.out.println("<T>");
+    }
+
+    public int x(List<Long> matcher) {
+        System.out.println("long");
+        return 0;
+    }
+
+    public static <T> List<T> any(Class<T> type) {
+        return null;
+    }
+    void f() {
+        <ref>x(any(Long.class));
+    }
+
+}
diff --git a/java/java-tests/testData/psi/resolve/method/generics/NestedTypeParams.java b/java/java-tests/testData/psi/resolve/method/generics/NestedTypeParams.java
new file mode 100644
index 0000000..27ec7bd
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/NestedTypeParams.java
@@ -0,0 +1,22 @@
+interface TestInterface {
+
+    <E extends Enum<E>> void doStuff(E thing);
+}
+
+class  TestImpl implements TestInterface {
+    @Override
+    public <I extends Enum<I>> void doStuff(I thing){
+
+    }
+}
+
+enum TestEnum {
+    THING
+}
+
+class Testx {
+    public void doTest(){
+        TestImpl impl = new TestImpl();
+        impl.<ref>doStuff(TestEnum.THING);
+    }
+}
diff --git a/java/java-tests/testData/psi/resolve/method/generics/PreferArrayTypeToObject.java b/java/java-tests/testData/psi/resolve/method/generics/PreferArrayTypeToObject.java
new file mode 100644
index 0000000..74a844f
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/PreferArrayTypeToObject.java
@@ -0,0 +1,21 @@
+import java.util.Arrays;
+
+public class MyClass
+{
+  public static <T> void process(T obj)
+  {
+    System.out.println("Processing object: " + obj);
+  }
+
+  public static <T> void process(T[] arr)
+  {
+    System.out.println("Processing array: " + Arrays.toString(arr));
+  }
+
+  public static void main(String[] args)
+  {
+    String[] myArray = new String[] { "a", "b", "c" };
+
+    proc<ref>ess(myArray);  // Ctr-Left-Click on "process" takes me to the wrong method!!!
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/generics/RawInheritanceConflict.java b/java/java-tests/testData/psi/resolve/method/generics/RawInheritanceConflict.java
new file mode 100644
index 0000000..8a6de04
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/RawInheritanceConflict.java
@@ -0,0 +1,10 @@
+class XX {
+  public static String foo(Properties p, String s, boolean b){return null;}
+  public static String foo(Map p, String s, boolean b){return null;}
+}
+class UU {
+  void bar() {
+      Properties p = new Properties();
+      XX.fo<ref>o(p, "xxx", false);
+  }
+}
diff --git a/java/java-tests/testData/psi/resolve/method/generics/RawMethod1.java b/java/java-tests/testData/psi/resolve/method/generics/RawMethod1.java
new file mode 100644
index 0000000..621b537
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/RawMethod1.java
@@ -0,0 +1,8 @@
+class A{
+ class B<T>{}
+ <T> void foo(T a, B<T> b){}
+
+ {
+  <ref>foo("", new B());
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/generics/RawVsGenericConflict.java b/java/java-tests/testData/psi/resolve/method/generics/RawVsGenericConflict.java
new file mode 100644
index 0000000..c39659e
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/RawVsGenericConflict.java
@@ -0,0 +1,16 @@
+class TestClassT {
+    static {
+        B.<ref>foo(TestClassT.class);
+    }
+
+    public static class A {
+        public static A foo(Class<?> type) {
+            return new A();
+        }
+    }
+    public static class B extends A {
+        public static B foo(Class type) {
+            return new B();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/generics/RawVsGenericConflictInCaseOfOverride.java b/java/java-tests/testData/psi/resolve/method/generics/RawVsGenericConflictInCaseOfOverride.java
new file mode 100644
index 0000000..47eed87
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/RawVsGenericConflictInCaseOfOverride.java
@@ -0,0 +1,17 @@
+class TestClassT {
+    static {
+        new B().<ref>foo(TestClassT.class);
+    }
+
+    public static class A {
+        public A foo(Class<?> type) {
+            return new A();
+        }
+    }
+    public static class B extends A {
+      @Override
+        public B foo(Class type) {
+            return new B();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/generics/RawVsGenericConflictInCaseOfOverride2.java b/java/java-tests/testData/psi/resolve/method/generics/RawVsGenericConflictInCaseOfOverride2.java
new file mode 100644
index 0000000..d92ab9a
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/RawVsGenericConflictInCaseOfOverride2.java
@@ -0,0 +1,21 @@
+import java.util.*;
+
+class C {
+  public static interface GenericAgnosticProcessor {
+    void processMap(Map map);
+  }
+
+  public static interface GenericAwareProcessor {
+    void processMap(Map<String, String> map);
+  }
+
+  public static class TestProcessor implements GenericAwareProcessor, GenericAgnosticProcessor {
+    @Override
+    public void processMap(Map map) { }
+  }
+
+  public static void main(String[] args) {
+    final TestProcessor testProcessor = new TestProcessor();
+    testProcessor.<ref>processMap(new HashMap());
+  }
+}
diff --git a/java/java-tests/testData/psi/resolve/method/generics/SOE.java b/java/java-tests/testData/psi/resolve/method/generics/SOE.java
new file mode 100644
index 0000000..ed304ff
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/SOE.java
@@ -0,0 +1,6 @@
+import java.util.Comparator;
+
+abstract class Z<T extends Z.NameRef> implements Comparator<T> {
+   static abstract class NameRef implements java.lang.Comparable<T.<ref>NameRef> {
+   }
+}
diff --git a/java/java-tests/testData/psi/resolve/method/generics/StaticImportConflict.java b/java/java-tests/testData/psi/resolve/method/generics/StaticImportConflict.java
new file mode 100644
index 0000000..d3d87cb
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/StaticImportConflict.java
@@ -0,0 +1,9 @@
+import static java.util.Arrays.*;
+import static java.util.Collections.sort;
+
+class C {
+  {
+    int[] array = null;
+    <ref>sort(array);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/generics/StaticImportConflict1.java b/java/java-tests/testData/psi/resolve/method/generics/StaticImportConflict1.java
new file mode 100644
index 0000000..e76994e
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/StaticImportConflict1.java
@@ -0,0 +1,21 @@
+import static java.lang.Integer.parseInt;
+
+public class X {
+
+    private String str;
+
+    public X(String str) {
+        this.str = str;
+    }
+
+    public int parseInt(){
+        //The following line is rejected by the compiler but not by IntelliJ.
+        return <ref>parseInt(str);
+    }
+
+    public static void main(String[] args) {
+        X x=new X("123");
+        int i=x.parseInt();
+        System.out.println(i);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/generics/StaticImportConflict3.java b/java/java-tests/testData/psi/resolve/method/generics/StaticImportConflict3.java
new file mode 100644
index 0000000..2c08d15
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/StaticImportConflict3.java
@@ -0,0 +1,23 @@
+package p;
+
+import static p.ToImportX.fff;
+import static p.ToImportX2.fff;
+
+//IDEA-64926
+public class AppTest {
+    public static void main(String[] args) {
+        <ref>fff();
+    }
+}
+
+class ToImportX {
+    public static void fff() {
+        System.out.println("ToImport");
+    }
+}
+
+class ToImportX2 extends ToImportX {
+    public static void fff() {
+        System.out.println("ToImport2");
+    }
+}
diff --git a/java/java-tests/testData/psi/resolve/method/generics/StaticImportDirect.java b/java/java-tests/testData/psi/resolve/method/generics/StaticImportDirect.java
new file mode 100644
index 0000000..8c7db21
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/StaticImportDirect.java
@@ -0,0 +1,8 @@
+import static java.util.Arrays.asList;
+import java.util.*;
+
+class C {
+  {
+    List<String> s = <ref>asList(new String[0]);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/generics/StaticImportHidden.java b/java/java-tests/testData/psi/resolve/method/generics/StaticImportHidden.java
new file mode 100644
index 0000000..bb88280
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/StaticImportHidden.java
@@ -0,0 +1,11 @@
+import static java.util.Arrays.toString;
+
+class ImportDuty {
+    public static void main(String[] args) {
+        new ImportDuty().printArgs(1, 2, 3, 4, 5);
+    }
+
+    void printArgs(Object... args) {
+        System.out.println(<ref>toString(args));
+    }
+}
diff --git a/java/java-tests/testData/psi/resolve/method/generics/StaticImportOnDemand.java b/java/java-tests/testData/psi/resolve/method/generics/StaticImportOnDemand.java
new file mode 100644
index 0000000..2dcc100
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/StaticImportOnDemand.java
@@ -0,0 +1,8 @@
+import static java.util.Arrays.*;
+import java.util.*;
+
+class C {
+  {
+    List<String> s = <ref>asList(new String[0]);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/generics/StaticMethodInSubclass.java b/java/java-tests/testData/psi/resolve/method/generics/StaticMethodInSubclass.java
new file mode 100644
index 0000000..1252950
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/StaticMethodInSubclass.java
@@ -0,0 +1,23 @@
+import java.util.Collection;
+
+public class SomeClass {
+    public static Object find(Collection collection, Object criteria) {
+        return criteria;
+    }
+    static class SomeSubClass extends SomeClass {
+        public static <T> T find(Collection<T> collection, Object criteria) {
+            return null;
+        }
+    }
+
+
+    <T>void f()
+    {
+        Collection<T> c = null;
+        Object criteria = null;
+
+// IntelliJ finds the find(Collection, Object) method, and reports a non-existent compile error.
+        T someInstance = SomeSubClass.<ref>find(c, criteria);
+    }
+
+}
diff --git a/java/java-tests/testData/psi/resolve/method/generics/TestGenericMethodOverloading1.java b/java/java-tests/testData/psi/resolve/method/generics/TestGenericMethodOverloading1.java
new file mode 100644
index 0000000..e93c677
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/TestGenericMethodOverloading1.java
@@ -0,0 +1,20 @@
+
+import java.util.List;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: ik
+ * Date: 28.05.2003
+ * Time: 16:50:51
+ * To change this template use Options | File Templates.
+ */
+public class TestGenericMethodOverloading1 {
+    class A<T extends List>{
+        public boolean equals(T t){
+            return false;
+        }
+    }
+    {
+        new A().<ref>equals(new Object());
+    }
+}
diff --git a/java/java-tests/testData/psi/resolve/method/generics/TestGenericMethodOverloading2.java b/java/java-tests/testData/psi/resolve/method/generics/TestGenericMethodOverloading2.java
new file mode 100644
index 0000000..8978b81
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/TestGenericMethodOverloading2.java
@@ -0,0 +1,17 @@
+/**
+ * Created by IntelliJ IDEA.
+ * User: ik
+ * Date: 28.05.2003
+ * Time: 16:50:51
+ * To change this template use Options | File Templates.
+ */
+public class TestGenericMethodOverloading2 {
+    class A<T>{
+        public boolean equals(T t){
+            return false;
+        }
+    }
+    {
+        new A().<ref>equals(new Object());
+    }
+}
diff --git a/java/java-tests/testData/psi/resolve/method/generics/TestGenericMethodOverloading3.java b/java/java-tests/testData/psi/resolve/method/generics/TestGenericMethodOverloading3.java
new file mode 100644
index 0000000..3b01806
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/TestGenericMethodOverloading3.java
@@ -0,0 +1,17 @@
+/**
+ * Created by IntelliJ IDEA.
+ * User: ik
+ * Date: 28.05.2003
+ * Time: 16:50:51
+ * To change this template use Options | File Templates.
+ */
+public class TestGenericMethodOverloading3 {
+    class A<T>{
+        public boolean equals(T t){
+            return false;
+        }
+    }
+    {
+        new A<String>().<ref>equals(new Object());
+    }
+}
diff --git a/java/java-tests/testData/psi/resolve/method/generics/TestGenericMethodOverloading4.java b/java/java-tests/testData/psi/resolve/method/generics/TestGenericMethodOverloading4.java
new file mode 100644
index 0000000..0e9bc7a
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/TestGenericMethodOverloading4.java
@@ -0,0 +1,17 @@
+/**
+ * Created by IntelliJ IDEA.
+ * User: ik
+ * Date: 28.05.2003
+ * Time: 16:50:51
+ * To change this template use Options | File Templates.
+ */
+public class TestGenericMethodOverloading4 {
+    class A<T>{
+        public boolean equals(T t){
+            return false;
+        }
+    }
+    {
+        new A<String>().<ref>equals(new String());
+    }
+}
diff --git a/java/java-tests/testData/psi/resolve/method/generics/TestReturnType1.java b/java/java-tests/testData/psi/resolve/method/generics/TestReturnType1.java
new file mode 100644
index 0000000..ba870b0
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/TestReturnType1.java
@@ -0,0 +1,17 @@
+/**
+ * Created by IntelliJ IDEA.
+ * User: ik
+ * Date: 28.05.2003
+ * Time: 16:50:51
+ * To change this template use Options | File Templates.
+ */
+public class TestReturnType1 {
+    class A<T extends Runnable>{
+        public T foo(T t){
+            return null;
+        }
+    }
+    {
+        new A<String>().foo(new String()).<ref>toCharArray();
+    }
+}
diff --git a/java/java-tests/testData/psi/resolve/method/generics/TestReturnType2.java b/java/java-tests/testData/psi/resolve/method/generics/TestReturnType2.java
new file mode 100644
index 0000000..b81bce1
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/TestReturnType2.java
@@ -0,0 +1,17 @@
+/**
+ * Created by IntelliJ IDEA.
+ * User: ik
+ * Date: 28.05.2003
+ * Time: 16:50:51
+ * To change this template use Options | File Templates.
+ */
+public class TestReturnType2 {
+    class A<T extends Runnable>{
+        public T foo(T t){
+            return null;
+        }
+    }
+    {
+        new A().foo(new String()).<ref>toCharArray();
+    }
+}
diff --git a/java/java-tests/testData/psi/resolve/method/generics/TestThisExpression.java b/java/java-tests/testData/psi/resolve/method/generics/TestThisExpression.java
new file mode 100644
index 0000000..8ae922a
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/TestThisExpression.java
@@ -0,0 +1,12 @@
+public class WithInner<T> {
+    T foo () {
+        return null;
+    }
+
+    class Inner {
+        T foo () {
+            return  <ref>WithInner.this.foo();
+        }
+    }
+
+}
diff --git a/java/java-tests/testData/psi/resolve/method/generics/TypeInference1.java b/java/java-tests/testData/psi/resolve/method/generics/TypeInference1.java
new file mode 100644
index 0000000..603959d
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/TypeInference1.java
@@ -0,0 +1,25 @@
+class B{
+ void b(){};
+}
+
+interface E{
+ void e();
+}
+
+class C extends B{
+ void c(){}
+}
+
+class D extends B implements E{
+ void d(){}
+ void e(){}
+}
+
+
+class A<Z>{
+ <T> T foo(T t, A<T> a){ return null; }
+
+ {
+  foo(new C(), new A<D>()).<ref>b();
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/method/generics/TypeParamBoundConflict.java b/java/java-tests/testData/psi/resolve/method/generics/TypeParamBoundConflict.java
new file mode 100644
index 0000000..53577e9
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/generics/TypeParamBoundConflict.java
@@ -0,0 +1,22 @@
+import java.util.*;
+
+class Thing {
+}
+class Testergen {
+    <T extends Thing> T x(T thing) {
+        return null;
+    }
+
+    <T extends Thing> T x(Collection<T> thing) {
+        return null;
+    }
+}
+class TestergenUser {
+    public void context(Testergen test) {
+        // the error is shown when x is called:
+        Collection<Thing> t = null;
+        test.<ref>x(t);
+    }
+
+}
+
diff --git a/java/java-tests/testData/psi/resolve/method/varargs/ObjectObject.java b/java/java-tests/testData/psi/resolve/method/varargs/ObjectObject.java
new file mode 100644
index 0000000..85d6f56
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/varargs/ObjectObject.java
@@ -0,0 +1,8 @@
+class XY {
+    public static void foo(Object... x) { }
+    public static void foo(Object a, Object... x) { }
+
+    public static void main(String[] args) {
+        <ref>foo("a");
+    }
+}
diff --git a/java/java-tests/testData/psi/resolve/method/varargs/ObjectObjectObject.java b/java/java-tests/testData/psi/resolve/method/varargs/ObjectObjectObject.java
new file mode 100644
index 0000000..7a4aeb7
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/varargs/ObjectObjectObject.java
@@ -0,0 +1,8 @@
+class XY {
+    public static void foo(Object... x) { }
+    public static void foo(Object a, Object o, Object... x) { }
+
+    public static void main(String[] args) {
+        <ref>foo("a", "b");
+    }
+}
diff --git a/java/java-tests/testData/psi/resolve/method/varargs/PrimitiveObject.java b/java/java-tests/testData/psi/resolve/method/varargs/PrimitiveObject.java
new file mode 100644
index 0000000..025f6a7
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/varargs/PrimitiveObject.java
@@ -0,0 +1,9 @@
+class XY {
+    private void f(Object... bs) {}
+
+    private void f(int... is) {}
+
+    public static void main(String[] args) {
+            <ref>f();
+    }
+}
diff --git a/java/java-tests/testData/psi/resolve/method/varargs/PrimitiveString.java b/java/java-tests/testData/psi/resolve/method/varargs/PrimitiveString.java
new file mode 100644
index 0000000..3a74b80
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/varargs/PrimitiveString.java
@@ -0,0 +1,9 @@
+class XY {
+    private void f(String... bs) {}
+
+    private void f(int... is) {}
+
+    public static void main(String[] args) {
+            <ref>f();
+    }
+}
diff --git a/java/java-tests/testData/psi/resolve/method/varargs/StringObject.java b/java/java-tests/testData/psi/resolve/method/varargs/StringObject.java
new file mode 100644
index 0000000..91c0930
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/varargs/StringObject.java
@@ -0,0 +1,9 @@
+
+class XY {
+    public static void foo(String... x) { }
+    public static void foo(Object a, Object... x) { }
+
+    public static void main(String[] args) {
+        <ref>foo("a");
+    }
+}
diff --git a/java/java-tests/testData/psi/resolve/method/varargs/StringObjectString.java b/java/java-tests/testData/psi/resolve/method/varargs/StringObjectString.java
new file mode 100644
index 0000000..fc802d9
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/varargs/StringObjectString.java
@@ -0,0 +1,8 @@
+class XY {
+    public static void foo(String... x) { }
+    public static void foo(Object a, String... x) { }
+
+    public static void main(String[] args) {
+        <ref>foo("a");
+    }
+}
diff --git a/java/java-tests/testData/psi/resolve/method/varargs/StringStringString.java b/java/java-tests/testData/psi/resolve/method/varargs/StringStringString.java
new file mode 100644
index 0000000..300ec69
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/method/varargs/StringStringString.java
@@ -0,0 +1,8 @@
+class XY {
+    public static void foo(String... x) { }
+    public static void foo(String a, String... x) { }
+
+    public static void main(String[] args) {
+        <ref>foo("a");
+    }
+}
diff --git a/java/java-tests/testData/psi/resolve/var/AnonymousConstructorArg.java b/java/java-tests/testData/psi/resolve/var/AnonymousConstructorArg.java
new file mode 100644
index 0000000..f5a325f
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/var/AnonymousConstructorArg.java
@@ -0,0 +1,10 @@
+class Test {
+  static Test createTest(int value) {
+    return new Test(<ref>value) {};
+  }
+
+  int value;
+
+  Test(int value) {
+  }
+}
diff --git a/java/java-tests/testData/psi/resolve/var/Array1.java b/java/java-tests/testData/psi/resolve/var/Array1.java
new file mode 100644
index 0000000..6acbad6
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/var/Array1.java
@@ -0,0 +1,6 @@
+public class Array1 {
+  void foo(){
+    int value[] = {};
+    int val = value.<ref>length;
+  }
+}
diff --git a/java/java-tests/testData/psi/resolve/var/Bug7869.java b/java/java-tests/testData/psi/resolve/var/Bug7869.java
new file mode 100644
index 0000000..db0cf99
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/var/Bug7869.java
@@ -0,0 +1,12 @@
+/**
+ * Created by IntelliJ IDEA.
+ * User: ik
+ * Date: 22.01.2003
+ * Time: 14:50:35
+ * To change this template use Options | File Templates.
+ */
+public class Bug7869 {
+  public static void main(String[] args){
+    String str = (<ref>str = String.valueOf(123.456d)) != null ? str : "default";
+  }
+}
diff --git a/java/java-tests/testData/psi/resolve/var/FieldConflict.java b/java/java-tests/testData/psi/resolve/var/FieldConflict.java
new file mode 100644
index 0000000..de9f28a
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/var/FieldConflict.java
@@ -0,0 +1,16 @@
+interface Base {
+  Base[] EMPTY_ARRAY = new Base[0];
+}
+
+interface Derived1 extends Base {}
+
+interface Derived2 extends Base {
+  Derived2[] EMPTY_ARRAY = new Derived2[0];
+}
+
+class Implementor implements Derived1, Derived2 {
+  //Implementor[] EMPTY_ARRAY = new Implementor[0];
+  Derived2[] f()  {
+    return <ref>EMPTY_ARRAY;  //conflict
+  }
+}
diff --git a/java/java-tests/testData/psi/resolve/var/FieldFromInterface.java b/java/java-tests/testData/psi/resolve/var/FieldFromInterface.java
new file mode 100644
index 0000000..91589f5
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/var/FieldFromInterface.java
@@ -0,0 +1,12 @@
+class Client {
+  int foo(){
+    return A.<ref>FIELD;
+  }
+}
+
+class A implements I{
+}
+
+interface I {
+  public static final int FIELD = 1;
+}
diff --git a/java/java-tests/testData/psi/resolve/var/FieldsAndLocals.java b/java/java-tests/testData/psi/resolve/var/FieldsAndLocals.java
new file mode 100644
index 0000000..68abcf2
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/var/FieldsAndLocals.java
@@ -0,0 +1,23 @@
+/**
+ * Created by IntelliJ IDEA.
+ * User: ik
+ * Date: 23.01.2003
+ * Time: 17:59:45
+ * To change this template use Options | File Templates.
+ */
+public class FieldsAndLocals {
+    private int a = 0;
+    {
+        int a = -1;
+        new B(){
+            public void run(){
+                int b = <ref>a
+            }
+        }
+    }
+}
+
+abstract class B implements Runnable {
+    private int a = 0;
+}
+
diff --git a/java/java-tests/testData/psi/resolve/var/ForeachParameter.java b/java/java-tests/testData/psi/resolve/var/ForeachParameter.java
new file mode 100644
index 0000000..197dfb5
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/var/ForeachParameter.java
@@ -0,0 +1,7 @@
+class Foo {
+  {
+    for(Object o : collection) {
+      System.out.println(<ref>o);
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/var/InheritedOuter.java b/java/java-tests/testData/psi/resolve/var/InheritedOuter.java
new file mode 100644
index 0000000..e18dea3
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/var/InheritedOuter.java
@@ -0,0 +1,9 @@
+class Outer {
+  private String string;
+
+  class Inner extends Outer {
+    void test() {
+      System.out.println(<ref>string); 
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/var/Inner1.java b/java/java-tests/testData/psi/resolve/var/Inner1.java
new file mode 100644
index 0000000..648c6f7
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/var/Inner1.java
@@ -0,0 +1,20 @@
+/**
+ * Created by IntelliJ IDEA.
+ * User: ik
+ * Date: 23.01.2003
+ * Time: 17:59:45
+ * To change this template use Options | File Templates.
+ */
+public class Inner1 {
+    private int a = 0;
+    private class A extends B{
+        {
+            int j = <ref>a;
+        }
+    }
+}
+
+class B {
+    private int a = 0;
+}
+
diff --git a/java/java-tests/testData/psi/resolve/var/InnerPrivates1.java b/java/java-tests/testData/psi/resolve/var/InnerPrivates1.java
new file mode 100644
index 0000000..500b5ee
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/var/InnerPrivates1.java
@@ -0,0 +1,9 @@
+class A{
+ {
+  new B().<ref>b = 0;
+ }
+
+ class B{
+  private int b;
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/var/InterfaceConflict1.java b/java/java-tests/testData/psi/resolve/var/InterfaceConflict1.java
new file mode 100644
index 0000000..23e2fd3
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/var/InterfaceConflict1.java
@@ -0,0 +1,16 @@
+public class InterfaceConflict1{
+  public interface A{
+    int a = 0;
+  }
+
+  public interface B{
+    int a = 0;
+  }
+
+  public static class C
+  implements A, B{
+    static{
+      System.out.println("" + <ref>a);
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/var/InterfaceConflict10.java b/java/java-tests/testData/psi/resolve/var/InterfaceConflict10.java
new file mode 100644
index 0000000..4c3e6a3
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/var/InterfaceConflict10.java
@@ -0,0 +1,20 @@
+public class InterfaceConflict10{
+  public interface A{
+    int a = 0;
+  }
+
+  public static class B
+  implements A{
+  }
+
+  public interface C{
+    int a = 0;
+  }
+
+  public static class D extends A
+  implements A, C{
+    void foo(){
+      System.out.println("" + <ref>a);
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/var/InterfaceConflict11.java b/java/java-tests/testData/psi/resolve/var/InterfaceConflict11.java
new file mode 100644
index 0000000..99b0a02
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/var/InterfaceConflict11.java
@@ -0,0 +1,15 @@
+public class InterfaceConflict11{
+  public static class A{
+    static int a = 0;
+  }
+
+  public static class B extends A{
+    int a = 0;
+  }
+
+  public static class C extends B{
+    static void foo(){
+      System.out.println("" + <ref>a);
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/var/InterfaceConflict2.java b/java/java-tests/testData/psi/resolve/var/InterfaceConflict2.java
new file mode 100644
index 0000000..7b978c1
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/var/InterfaceConflict2.java
@@ -0,0 +1,19 @@
+public class InterfaceConflict2{
+  public interface A{
+    int a = 0;
+  }
+
+  public interface B{
+    int a = 0;
+  }
+
+  public interface E extends A{
+  }
+
+  public static class C
+  implements E, B{
+    static{
+      System.out.println("" + <ref>a);
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/var/InterfaceConflict3.java b/java/java-tests/testData/psi/resolve/var/InterfaceConflict3.java
new file mode 100644
index 0000000..2a56e3e
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/var/InterfaceConflict3.java
@@ -0,0 +1,19 @@
+public class InterfaceConflict3{
+  public interface A{
+    int a = 0;
+  }
+
+  public interface B{
+    int a = 0;
+  }
+
+  public class E implements A{
+  }
+
+  public static class C extends E
+  implements B{
+    static{
+      System.out.println("" + <ref>a);
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/var/InterfaceConflict4.java b/java/java-tests/testData/psi/resolve/var/InterfaceConflict4.java
new file mode 100644
index 0000000..c3392b3
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/var/InterfaceConflict4.java
@@ -0,0 +1,17 @@
+public class InterfaceConflict4{
+  public interface A{
+    int a = 0;
+  }
+
+
+  public class B{
+    public static final int a = 0;
+  }
+
+  public static class C extends B
+  implements A{
+    static{
+      System.out.println("" + <ref>a);
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/var/InterfaceConflict5.java b/java/java-tests/testData/psi/resolve/var/InterfaceConflict5.java
new file mode 100644
index 0000000..17b39e8
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/var/InterfaceConflict5.java
@@ -0,0 +1,17 @@
+public class InterfaceConflict5{
+  public interface A{
+    int a = 0;
+  }
+
+
+  public class B implements A{
+    public int a = 0;
+  }
+
+  public static class C extends B
+  implements A{
+    void foo(){
+      System.out.println("" + <ref>a);
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/var/InterfaceConflict6.java b/java/java-tests/testData/psi/resolve/var/InterfaceConflict6.java
new file mode 100644
index 0000000..eaec8f9
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/var/InterfaceConflict6.java
@@ -0,0 +1,17 @@
+public class InterfaceConflict6{
+  public interface A{
+    int a = 0;
+  }
+
+
+  public class B{
+    public int a = 0;
+  }
+
+  public static class C extends B
+  implements A{
+    void foo(){
+      System.out.println("" + <ref>a);
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/var/InterfaceConflict7.java b/java/java-tests/testData/psi/resolve/var/InterfaceConflict7.java
new file mode 100644
index 0000000..74a1676
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/var/InterfaceConflict7.java
@@ -0,0 +1,16 @@
+public class InterfaceConflict7{
+  public interface A{
+    int a = 0;
+  }
+
+
+  public class B implements A{
+    public int a = 0;
+  }
+
+  public static class C extends B{
+    void foo(){
+      System.out.println("" + <ref>a);
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/var/InterfaceConflict8.java b/java/java-tests/testData/psi/resolve/var/InterfaceConflict8.java
new file mode 100644
index 0000000..70051c7
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/var/InterfaceConflict8.java
@@ -0,0 +1,16 @@
+public class InterfaceConflict8{
+  public interface A{
+    int a = 0;
+  }
+
+
+  public static class B implements A{
+  }
+
+  public static class C extends B
+  implements A{
+    void foo(){
+      System.out.println("" + <ref>a);
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/var/InterfaceConflict9.java b/java/java-tests/testData/psi/resolve/var/InterfaceConflict9.java
new file mode 100644
index 0000000..17d2df5
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/var/InterfaceConflict9.java
@@ -0,0 +1,20 @@
+public class InterfaceConflict9{
+  public interface A{
+    int a = 0;
+  }
+
+  public interface B{
+    int a = 0;
+  }
+
+  public interface C{
+    int a = 0;
+  }
+
+  public static class D
+  implements A, B, C{
+    void foo(){
+      System.out.println("" + <ref>a);
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/var/LocalVariable1.java b/java/java-tests/testData/psi/resolve/var/LocalVariable1.java
new file mode 100644
index 0000000..fcc1f3b
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/var/LocalVariable1.java
@@ -0,0 +1,6 @@
+class Test {
+  void foo(){
+    int value;
+    int val1 = <ref>value;
+  }
+}
diff --git a/java/java-tests/testData/psi/resolve/var/PrivateOverloading.java b/java/java-tests/testData/psi/resolve/var/PrivateOverloading.java
new file mode 100644
index 0000000..7b6612a
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/var/PrivateOverloading.java
@@ -0,0 +1,20 @@
+class A {
+    int i;
+
+    public void method() {
+    }
+  }
+
+  class B extends A {
+    private int i;
+
+    public void method() {
+    }
+  }
+
+  class C extends B {
+
+    public void method() {
+      <ref>i = 10;
+    }
+  }
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/var/Qualified1.java b/java/java-tests/testData/psi/resolve/var/Qualified1.java
new file mode 100644
index 0000000..48920fa
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/var/Qualified1.java
@@ -0,0 +1,10 @@
+public class Test{
+  int a = 0;
+}
+
+class Test1 {
+  static Test test = new Test();
+  static {
+    System.out.println("" + test.<ref>a);
+  }
+}
diff --git a/java/java-tests/testData/psi/resolve/var/Qualified2.java b/java/java-tests/testData/psi/resolve/var/Qualified2.java
new file mode 100644
index 0000000..898b933
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/var/Qualified2.java
@@ -0,0 +1,7 @@
+public class Test{
+  static int a = 0;
+
+  public int foo(){
+    return Test.<ref>a;
+  }
+}
diff --git a/java/java-tests/testData/psi/resolve/var/Qualified3.java b/java/java-tests/testData/psi/resolve/var/Qualified3.java
new file mode 100644
index 0000000..b2fe726
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/var/Qualified3.java
@@ -0,0 +1,7 @@
+public class Test{
+  static int a = 0;
+
+  public int foo(){
+    return new Test().<ref>a;
+  }
+}
diff --git a/java/java-tests/testData/psi/resolve/var/Qualified4.java b/java/java-tests/testData/psi/resolve/var/Qualified4.java
new file mode 100644
index 0000000..6fa0a32
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/var/Qualified4.java
@@ -0,0 +1,9 @@
+class A{
+	static class B{
+		static int a = 0;
+	}
+
+	{
+		System.out.println("" + A.B.<ref>a);
+	}
+}
diff --git a/java/java-tests/testData/psi/resolve/var/RefInOuter.java b/java/java-tests/testData/psi/resolve/var/RefInOuter.java
new file mode 100644
index 0000000..24029c5
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/var/RefInOuter.java
@@ -0,0 +1,8 @@
+class Outer {
+  int i;
+  class Inner {
+    {
+      int j = <ref>i;
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/var/RefInSuper.java b/java/java-tests/testData/psi/resolve/var/RefInSuper.java
new file mode 100644
index 0000000..1f7ce65
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/var/RefInSuper.java
@@ -0,0 +1,8 @@
+class Outer {
+  int i;
+  class Inner extends Outer {
+    {
+      int j = <ref>i;
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/var/ShadowFieldsInHierarchy.java b/java/java-tests/testData/psi/resolve/var/ShadowFieldsInHierarchy.java
new file mode 100644
index 0000000..d77f4da
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/var/ShadowFieldsInHierarchy.java
@@ -0,0 +1,20 @@
+class TestPage extends WWW {
+    private static final Object log = null;
+
+    static class B extends W3 {
+        public B() {
+            <ref>log.hashCode();
+        }
+    }
+}
+
+class WWW extends W3{
+    private static final Object log = new Object();
+    protected void run(Object runnable){}
+}
+class W3 extends W4 {
+    private static final Object log = new Object();
+}
+class W4 {
+    private static final Object log = new Object();
+}
diff --git a/java/java-tests/testData/psi/resolve/var/ShadowFieldsInHierarchy2.java b/java/java-tests/testData/psi/resolve/var/ShadowFieldsInHierarchy2.java
new file mode 100644
index 0000000..123cf09
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/var/ShadowFieldsInHierarchy2.java
@@ -0,0 +1,18 @@
+
+interface Base {
+    public static final int EXIT_ON_CLOSE = 3;
+
+}
+class E implements Base {
+   public static final int EXIT_ON_CLOSE = 3;
+   void show(){}
+}
+class S {
+    private void h() {
+        new E() {
+            {
+                int o = <ref>EXIT_ON_CLOSE;
+            }
+        }.show();
+    }
+}
diff --git a/java/java-tests/testData/psi/resolve/var/Unresolved1.java b/java/java-tests/testData/psi/resolve/var/Unresolved1.java
new file mode 100644
index 0000000..5b1f0ef
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/var/Unresolved1.java
@@ -0,0 +1,5 @@
+public class Test{
+  public static void foo() {}
+  int a = 0;
+  int b = <ref>foo;
+}
diff --git a/java/java-tests/testData/psi/resolve/var/Visibility1.java b/java/java-tests/testData/psi/resolve/var/Visibility1.java
new file mode 100644
index 0000000..fa8646f
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/var/Visibility1.java
@@ -0,0 +1,9 @@
+class Test {
+  static int variable = 1;
+  static class Inner{
+    int variable = 0;
+    static void foo(){
+      int val1 = <ref>variable;
+    }
+  }
+}
diff --git a/java/java-tests/testData/psi/resolve/var/Visibility2.java b/java/java-tests/testData/psi/resolve/var/Visibility2.java
new file mode 100644
index 0000000..f25e2c7
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/var/Visibility2.java
@@ -0,0 +1,3 @@
+class Test {
+  int a = 1 + <ref>a;
+}
diff --git a/java/java-tests/testData/psi/resolve/var/Visibility3.java b/java/java-tests/testData/psi/resolve/var/Visibility3.java
new file mode 100644
index 0000000..d9b85ba
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/var/Visibility3.java
@@ -0,0 +1,12 @@
+class Test {
+  static class ABC{
+    public int i = 0;
+  }
+  static {
+    System.out.println("" + getABC().<ref>i);
+  }
+
+  static ABC getABC(){
+    return new ABC();
+  }
+}
diff --git a/java/java-tests/testData/psi/resolve/var/Visibility4.java b/java/java-tests/testData/psi/resolve/var/Visibility4.java
new file mode 100644
index 0000000..958a628
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/var/Visibility4.java
@@ -0,0 +1,5 @@
+class Test {
+  static {
+    int a = 1 + <ref>a;
+  }
+}
diff --git a/java/java-tests/testData/psi/resolve/var/Visibility5.java b/java/java-tests/testData/psi/resolve/var/Visibility5.java
new file mode 100644
index 0000000..958a628
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/var/Visibility5.java
@@ -0,0 +1,5 @@
+class Test {
+  static {
+    int a = 1 + <ref>a;
+  }
+}
diff --git a/java/java-tests/testData/psi/resolve/var/Visibility6.java b/java/java-tests/testData/psi/resolve/var/Visibility6.java
new file mode 100644
index 0000000..b2ed7a5
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/var/Visibility6.java
@@ -0,0 +1,11 @@
+  class Foo {
+      private void f() {
+          Bar bar=null;
+          bar.<ref>f();
+      }
+      void g() {
+          f();
+      }
+  }
+  class Bar extends Foo {
+  }
diff --git a/java/java-tests/testData/psi/resolve/var15/DuplicateStaticImport.java b/java/java-tests/testData/psi/resolve/var15/DuplicateStaticImport.java
new file mode 100644
index 0000000..6c74005
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/var15/DuplicateStaticImport.java
@@ -0,0 +1,8 @@
+import static java.lang.System.out;
+import static java.lang.System.out;
+
+class DuplicateStaticImport {
+    public static void main(String[] args) {
+        <ref>out.println(""); // cannot resolve symbol 'out'
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/resolve/var15/RhombExtending.java b/java/java-tests/testData/psi/resolve/var15/RhombExtending.java
new file mode 100644
index 0000000..7a1d499
--- /dev/null
+++ b/java/java-tests/testData/psi/resolve/var15/RhombExtending.java
@@ -0,0 +1,15 @@
+/** @noinspection UnusedDeclaration*/
+interface I<T> {
+    String SSS = "SSS";
+}
+
+interface II<T> extends I<T> {}
+
+class A implements I {}
+
+/** @noinspection UnusedDeclaration*/
+class AA extends A implements II {
+    public static void f() {
+        String s = <ref>SSS;  //this is not ambigous reference
+    }
+}
diff --git a/java/java-tests/testData/psi/search/findUsages/fieldInJavadoc/A.java b/java/java-tests/testData/psi/search/findUsages/fieldInJavadoc/A.java
new file mode 100644
index 0000000..2587d22
--- /dev/null
+++ b/java/java-tests/testData/psi/search/findUsages/fieldInJavadoc/A.java
@@ -0,0 +1,8 @@
+class A{
+  static int FIELD;
+
+  /**
+   * @see #FIELD
+   */
+  void foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/search/findUsages/implicitConstructorUsage/A.java b/java/java-tests/testData/psi/search/findUsages/implicitConstructorUsage/A.java
new file mode 100644
index 0000000..7d9db80
--- /dev/null
+++ b/java/java-tests/testData/psi/search/findUsages/implicitConstructorUsage/A.java
@@ -0,0 +1,13 @@
+class Foo {
+	public <caret>Foo() {
+	}
+
+	public Foo(String text) {
+	}
+}
+class Bar extends Foo {
+
+	public Bar() {
+		super("hello");
+	}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/search/findUsages/libraryClassUsageFromDecompiledSource/Usage.java b/java/java-tests/testData/psi/search/findUsages/libraryClassUsageFromDecompiledSource/Usage.java
new file mode 100644
index 0000000..d0440bf
--- /dev/null
+++ b/java/java-tests/testData/psi/search/findUsages/libraryClassUsageFromDecompiledSource/Usage.java
@@ -0,0 +1,5 @@
+import javax.swing.JLabel;
+
+public class Usage {
+  JLabel s;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/search/findUsages/nonCodeClassUsages/com/Foo.java b/java/java-tests/testData/psi/search/findUsages/nonCodeClassUsages/com/Foo.java
new file mode 100644
index 0000000..8571c7f
--- /dev/null
+++ b/java/java-tests/testData/psi/search/findUsages/nonCodeClassUsages/com/Foo.java
@@ -0,0 +1,4 @@
+package com;
+public class Foo {
+  public static class Bar {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/search/findUsages/overloadConstructors/A.java b/java/java-tests/testData/psi/search/findUsages/overloadConstructors/A.java
new file mode 100644
index 0000000..3e64e62
--- /dev/null
+++ b/java/java-tests/testData/psi/search/findUsages/overloadConstructors/A.java
@@ -0,0 +1,9 @@
+public class A {
+  A () {}
+  A (int i) {
+    this ();
+  }
+  A (String s) {
+    this (0);
+  }
+}
diff --git a/java/java-tests/testData/psi/search/findUsages/overloadConstructors/B.java b/java/java-tests/testData/psi/search/findUsages/overloadConstructors/B.java
new file mode 100644
index 0000000..0ec6235
--- /dev/null
+++ b/java/java-tests/testData/psi/search/findUsages/overloadConstructors/B.java
@@ -0,0 +1,8 @@
+public class B extends A {
+  B () {
+   super (1);
+  }
+  void foo () {
+   A a = new A ("");
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/search/findUsages/protectedMethodInPackageLocalClass/bar/Bar.java b/java/java-tests/testData/psi/search/findUsages/protectedMethodInPackageLocalClass/bar/Bar.java
new file mode 100644
index 0000000..d37d296
--- /dev/null
+++ b/java/java-tests/testData/psi/search/findUsages/protectedMethodInPackageLocalClass/bar/Bar.java
@@ -0,0 +1,11 @@
+import foo.*;
+
+class Bar extends Foo {
+  protected void foo();
+}
+
+class Goo extends Foo {
+  {
+    foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/search/findUsages/protectedMethodInPackageLocalClass/foo/Foo.java b/java/java-tests/testData/psi/search/findUsages/protectedMethodInPackageLocalClass/foo/Foo.java
new file mode 100644
index 0000000..72ee6e5
--- /dev/null
+++ b/java/java-tests/testData/psi/search/findUsages/protectedMethodInPackageLocalClass/foo/Foo.java
@@ -0,0 +1,7 @@
+package foo;
+
+class PackageLocal {
+  protected void foo() {}
+}
+
+public class Foo extends PackageLocal {}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/search/findUsages/siblingImplement/A.java b/java/java-tests/testData/psi/search/findUsages/siblingImplement/A.java
new file mode 100644
index 0000000..f964427
--- /dev/null
+++ b/java/java-tests/testData/psi/search/findUsages/siblingImplement/A.java
@@ -0,0 +1,12 @@
+class A {
+    public void foo(Object o) {
+    }
+
+    interface I {
+         public void foo(Object o);  //This should be consideredd implemented in A
+    }
+
+}
+
+class B extends A implements A.I {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/search/findUsages/xml/Test.xml b/java/java-tests/testData/psi/search/findUsages/xml/Test.xml
new file mode 100644
index 0000000..136aa9f
--- /dev/null
+++ b/java/java-tests/testData/psi/search/findUsages/xml/Test.xml
@@ -0,0 +1,3 @@
+<document>
+  <action class="com.Foo" />
+</document>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/search/findUsages/xml/com/Foo.java b/java/java-tests/testData/psi/search/findUsages/xml/com/Foo.java
new file mode 100644
index 0000000..9689077
--- /dev/null
+++ b/java/java-tests/testData/psi/search/findUsages/xml/com/Foo.java
@@ -0,0 +1,2 @@
+package com;
+public class Foo {}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/search/findUsages15/enumConstructor/pack/OurEnum.java b/java/java-tests/testData/psi/search/findUsages15/enumConstructor/pack/OurEnum.java
new file mode 100644
index 0000000..bbd25e7
--- /dev/null
+++ b/java/java-tests/testData/psi/search/findUsages15/enumConstructor/pack/OurEnum.java
@@ -0,0 +1,7 @@
+package pack;
+enum OurEnum {
+  A(10), B, C(27);
+
+  OurEnum(int i) {}
+  OurEnum() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/search/findUsages15/findRawOverriddenUsages/pack/RawOverridden.java b/java/java-tests/testData/psi/search/findUsages15/findRawOverriddenUsages/pack/RawOverridden.java
new file mode 100644
index 0000000..ca6fc7e
--- /dev/null
+++ b/java/java-tests/testData/psi/search/findUsages15/findRawOverriddenUsages/pack/RawOverridden.java
@@ -0,0 +1,10 @@
+package pack;
+
+class Base {
+    void foo(List<String> l) {}
+}
+
+class Derived extends Base {
+    void foo(List l) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/search/findUsages15/genericMethodOverriderUsages/pack/GenericClass.java b/java/java-tests/testData/psi/search/findUsages15/genericMethodOverriderUsages/pack/GenericClass.java
new file mode 100644
index 0000000..0d5e198
--- /dev/null
+++ b/java/java-tests/testData/psi/search/findUsages15/genericMethodOverriderUsages/pack/GenericClass.java
@@ -0,0 +1,13 @@
+package pack;
+
+class GenericClass<T> {
+  void foo (T t) {}
+}
+
+class GenericClassDerived extends GenericClass<String> {
+  void foo (String s) {}
+
+  void bar () {
+    foo ("");
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/search/findUsages15/genericOverride/pack/Gen.java b/java/java-tests/testData/psi/search/findUsages15/genericOverride/pack/Gen.java
new file mode 100644
index 0000000..b93c64e
--- /dev/null
+++ b/java/java-tests/testData/psi/search/findUsages15/genericOverride/pack/Gen.java
@@ -0,0 +1,18 @@
+package pack;
+import java.util.Map;
+
+class BeforeRunTask {}
+class RunConfiguration{}
+class Key<T> {}
+public abstract class Gen {
+    public abstract <T extends BeforeRunTask> Map<Key<T>, BeforeRunTask> getBeforeRunTasks(RunConfiguration settings);
+}
+
+class X2 extends Gen {
+    Object o = getBeforeRunTasks(null);
+
+    public Map<Key<? extends BeforeRunTask>, BeforeRunTask> getBeforeRunTasks(RunConfiguration settings) {
+
+        return null;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/search/inheritors/noScanJdk/empty.txt b/java/java-tests/testData/psi/search/inheritors/noScanJdk/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/psi/search/inheritors/noScanJdk/empty.txt
diff --git a/java/java-tests/testData/psi/search/inheritors/sameNamedClasses/x/Test.java b/java/java-tests/testData/psi/search/inheritors/sameNamedClasses/x/Test.java
new file mode 100644
index 0000000..2c4691f
--- /dev/null
+++ b/java/java-tests/testData/psi/search/inheritors/sameNamedClasses/x/Test.java
@@ -0,0 +1,18 @@
+package x;
+
+public class Test<T> {
+  public void foo(T t) {
+      //Tracked f;
+  }
+}
+
+class Goo<T> extends Test<T> {
+    public void foo(T t) {}
+}
+class Goo  {
+
+}
+
+class Zoo extends Goo {
+    public void foo(Object t) {}
+}
diff --git a/java/java-tests/testData/psi/search/inheritors/scope/Derived2.java b/java/java-tests/testData/psi/search/inheritors/scope/Derived2.java
new file mode 100644
index 0000000..443181b
--- /dev/null
+++ b/java/java-tests/testData/psi/search/inheritors/scope/Derived2.java
@@ -0,0 +1,6 @@
+
+import pack1.Derived1;
+import pack1.Base;
+
+public class Derived2 extends Base{
+}
diff --git a/java/java-tests/testData/psi/search/inheritors/scope/pack1/Base.java b/java/java-tests/testData/psi/search/inheritors/scope/pack1/Base.java
new file mode 100644
index 0000000..10104fc
--- /dev/null
+++ b/java/java-tests/testData/psi/search/inheritors/scope/pack1/Base.java
@@ -0,0 +1,4 @@
+package pack1;
+
+public class Base {
+}
diff --git a/java/java-tests/testData/psi/search/inheritors/scope/pack1/Derived1.java b/java/java-tests/testData/psi/search/inheritors/scope/pack1/Derived1.java
new file mode 100644
index 0000000..205a3d9
--- /dev/null
+++ b/java/java-tests/testData/psi/search/inheritors/scope/pack1/Derived1.java
@@ -0,0 +1,4 @@
+package pack1;
+
+public class Derived1 extends Base{
+}
diff --git a/java/java-tests/testData/psi/search/inheritors/scope/pack1/Derived3.java b/java/java-tests/testData/psi/search/inheritors/scope/pack1/Derived3.java
new file mode 100644
index 0000000..51c2170
--- /dev/null
+++ b/java/java-tests/testData/psi/search/inheritors/scope/pack1/Derived3.java
@@ -0,0 +1,6 @@
+package pack1;
+
+import Derived2;
+
+public class Derived3 extends Derived2{
+}
diff --git a/java/java-tests/testData/psi/search/plainTextUsages/simple/Test.txt b/java/java-tests/testData/psi/search/plainTextUsages/simple/Test.txt
new file mode 100644
index 0000000..0b33aa0
--- /dev/null
+++ b/java/java-tests/testData/psi/search/plainTextUsages/simple/Test.txt
@@ -0,0 +1,3 @@
+aaa com.Foo bbb
+aaacom.Foo
+aaa com.Foobbb
diff --git a/java/java-tests/testData/psi/search/plainTextUsages/xmlOutOfScope/com/Foo.java b/java/java-tests/testData/psi/search/plainTextUsages/xmlOutOfScope/com/Foo.java
new file mode 100644
index 0000000..ad0c3f4
--- /dev/null
+++ b/java/java-tests/testData/psi/search/plainTextUsages/xmlOutOfScope/com/Foo.java
@@ -0,0 +1,3 @@
+package com;
+
+public class Foo {}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/search/plainTextUsages/xmlOutOfScope/resources/Test.xml b/java/java-tests/testData/psi/search/plainTextUsages/xmlOutOfScope/resources/Test.xml
new file mode 100644
index 0000000..136aa9f
--- /dev/null
+++ b/java/java-tests/testData/psi/search/plainTextUsages/xmlOutOfScope/resources/Test.xml
@@ -0,0 +1,3 @@
+<document>
+  <action class="com.Foo" />
+</document>
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/search/searchInLibs/lib/classes/LibraryClass1.class b/java/java-tests/testData/psi/search/searchInLibs/lib/classes/LibraryClass1.class
new file mode 100644
index 0000000..c1148b0
--- /dev/null
+++ b/java/java-tests/testData/psi/search/searchInLibs/lib/classes/LibraryClass1.class
Binary files differ
diff --git a/java/java-tests/testData/psi/search/searchInLibs/lib/classes/LibraryClass2.class b/java/java-tests/testData/psi/search/searchInLibs/lib/classes/LibraryClass2.class
new file mode 100644
index 0000000..6bf93d0
--- /dev/null
+++ b/java/java-tests/testData/psi/search/searchInLibs/lib/classes/LibraryClass2.class
Binary files differ
diff --git a/java/java-tests/testData/psi/search/searchInLibs/lib/src/LibraryClass1.java b/java/java-tests/testData/psi/search/searchInLibs/lib/src/LibraryClass1.java
new file mode 100644
index 0000000..b2bb5f3
--- /dev/null
+++ b/java/java-tests/testData/psi/search/searchInLibs/lib/src/LibraryClass1.java
@@ -0,0 +1,4 @@
+class LibraryClass1{
+  LibraryClass2 libClass2;
+  ProjectClass projectClass; // should not find this!
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/search/searchInLibs/lib/src/LibraryClass2.java b/java/java-tests/testData/psi/search/searchInLibs/lib/src/LibraryClass2.java
new file mode 100644
index 0000000..2136ef2
--- /dev/null
+++ b/java/java-tests/testData/psi/search/searchInLibs/lib/src/LibraryClass2.java
@@ -0,0 +1,3 @@
+class LibraryClass2{
+  LibraryClass1 libClass1;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/search/searchInLibs/project/ProjectClass.java b/java/java-tests/testData/psi/search/searchInLibs/project/ProjectClass.java
new file mode 100644
index 0000000..4e8e07e
--- /dev/null
+++ b/java/java-tests/testData/psi/search/searchInLibs/project/ProjectClass.java
@@ -0,0 +1,4 @@
+class ProjectClass{
+  ProjectClass aClass;
+  LibraryClass1 libClass1;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/search/searchInLibs/project/src2/ProjectClass2.java b/java/java-tests/testData/psi/search/searchInLibs/project/src2/ProjectClass2.java
new file mode 100644
index 0000000..b7a9285
--- /dev/null
+++ b/java/java-tests/testData/psi/search/searchInLibs/project/src2/ProjectClass2.java
@@ -0,0 +1,3 @@
+class ProjectClass2{
+  ProjectClass2 aClass;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/search/updateCache/1.java b/java/java-tests/testData/psi/search/updateCache/1.java
new file mode 100644
index 0000000..6ea2061
--- /dev/null
+++ b/java/java-tests/testData/psi/search/updateCache/1.java
@@ -0,0 +1,4 @@
+class Class1{
+  Exception e;
+  String s; //newtodo
+}
diff --git a/java/java-tests/testData/psi/search/updateCache/aDir/2.java b/java/java-tests/testData/psi/search/updateCache/aDir/2.java
new file mode 100644
index 0000000..df23af2
--- /dev/null
+++ b/java/java-tests/testData/psi/search/updateCache/aDir/2.java
@@ -0,0 +1,4 @@
+class B{
+  Exception e;
+  Thread thread; //todo
+}
diff --git a/java/java-tests/testData/psi/shortenClassRefs/SCR22368.java b/java/java-tests/testData/psi/shortenClassRefs/SCR22368.java
new file mode 100644
index 0000000..e25a3d7
--- /dev/null
+++ b/java/java-tests/testData/psi/shortenClassRefs/SCR22368.java
@@ -0,0 +1,5 @@
+class X {
+  void method() {
+    java.util.List<
+  }
+}
diff --git a/java/java-tests/testData/psi/shortenClassRefs/SCR22368_after.java b/java/java-tests/testData/psi/shortenClassRefs/SCR22368_after.java
new file mode 100644
index 0000000..f3e6338
--- /dev/null
+++ b/java/java-tests/testData/psi/shortenClassRefs/SCR22368_after.java
@@ -0,0 +1,7 @@
+import java.util.List;
+
+class X {
+  void method() {
+    List<
+  }
+}
diff --git a/java/java-tests/testData/psi/shortenClassRefs/SCR37254.java b/java/java-tests/testData/psi/shortenClassRefs/SCR37254.java
new file mode 100644
index 0000000..4a49297
--- /dev/null
+++ b/java/java-tests/testData/psi/shortenClassRefs/SCR37254.java
@@ -0,0 +1,18 @@
+class Parent{
+
+    protected Child createChild() {
+        return null;
+    }
+
+    static class Child {
+    }
+}
+
+class SubClass extends Parent {
+     //Do not shorten Parent.Child to Child
+     protected Parent.Child createChild() {
+          return null;
+     }
+
+    class Child extends Parent.Child {}
+}
diff --git a/java/java-tests/testData/psi/shortenClassRefs/SCR37254_after.java b/java/java-tests/testData/psi/shortenClassRefs/SCR37254_after.java
new file mode 100644
index 0000000..4a49297
--- /dev/null
+++ b/java/java-tests/testData/psi/shortenClassRefs/SCR37254_after.java
@@ -0,0 +1,18 @@
+class Parent{
+
+    protected Child createChild() {
+        return null;
+    }
+
+    static class Child {
+    }
+}
+
+class SubClass extends Parent {
+     //Do not shorten Parent.Child to Child
+     protected Parent.Child createChild() {
+          return null;
+     }
+
+    class Child extends Parent.Child {}
+}
diff --git a/java/java-tests/testData/psi/stub/StubPerformanceTest.java b/java/java-tests/testData/psi/stub/StubPerformanceTest.java
new file mode 100644
index 0000000..0fd87e8
--- /dev/null
+++ b/java/java-tests/testData/psi/stub/StubPerformanceTest.java
@@ -0,0 +1,577 @@
+// GENERATED AUTOMATICALLY. DO NOT ALTER PLEASE
+public class Level2NewGeneration {
+   public static class Node { }
+   public static class NodeLevel1_0000 extends Node{ }
+   public static class NodeLevel1_0001 extends Node{ }
+   public static class NodeLevel1_0010 extends Node{ }
+   public static class NodeLevel1_0011 extends Node{ }
+   public static class NodeLevel1_0100 extends Node{ }
+   public static class NodeLevel1_0101 extends Node{ }
+   public static class NodeLevel1_0110 extends Node{ }
+   public static class NodeLevel1_0111 extends Node{ }
+   public static class NodeLevel1_1000 extends Node{ }
+   public static class NodeLevel1_1001 extends Node{ }
+   public static class NodeLevel1_1010 extends Node{ }
+   public static class NodeLevel1_1011 extends Node{ }
+   public static class NodeLevel1_1100 extends Node{ }
+   public static class NodeLevel1_1101 extends Node{ }
+   public static class NodeLevel1_1110 extends Node{ }
+   public static class NodeLevel1_1111 extends Node{ }
+
+   public static int getNumeric(Node aNode) {
+            if (aNode instanceof NodeLevel1_0000) return 0;
+       else if (aNode instanceof NodeLevel1_0001) return 1;
+       else if (aNode instanceof NodeLevel1_0010) return 2;
+       else if (aNode instanceof NodeLevel1_0011) return 3;
+       else if (aNode instanceof NodeLevel1_0100) return 4;
+       else if (aNode instanceof NodeLevel1_0101) return 5;
+       else if (aNode instanceof NodeLevel1_0110) return 6;
+       else if (aNode instanceof NodeLevel1_0111) return 7;
+       else if (aNode instanceof NodeLevel1_1000) return 8;
+       else if (aNode instanceof NodeLevel1_1001) return 9;
+       else if (aNode instanceof NodeLevel1_1010) return 10;
+       else if (aNode instanceof NodeLevel1_1011) return 11;
+       else if (aNode instanceof NodeLevel1_1100) return 12;
+       else if (aNode instanceof NodeLevel1_1101) return 13;
+       else if (aNode instanceof NodeLevel1_1110) return 14;
+       else if (aNode instanceof NodeLevel1_1111) return 15;
+       else return -1;
+   }
+
+   private static final Node _0 = new NodeLevel1_0000();
+   private static final Node _1 = new NodeLevel1_0001();
+   private static final Node _2 = new NodeLevel1_0010();
+   private static final Node _3 = new NodeLevel1_0011();
+   private static final Node _4 = new NodeLevel1_0100();
+   private static final Node _5 = new NodeLevel1_0101();
+   private static final Node _6 = new NodeLevel1_0110();
+   private static final Node _7 = new NodeLevel1_0111();
+   private static final Node _8 = new NodeLevel1_1000();
+   private static final Node _9 = new NodeLevel1_1001();
+   private static final Node _a = new NodeLevel1_1010();
+   private static final Node _b = new NodeLevel1_1011();
+   private static final Node _c = new NodeLevel1_1100();
+   private static final Node _d = new NodeLevel1_1101();
+   private static final Node _e = new NodeLevel1_1110();
+   private static final Node _f = new NodeLevel1_1111();
+
+   private static final Node[] PRECALCULATED = {
+      _0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_1,_1,_1,_0,_0,_0,_0,_0,_2,_0,_3,_0,_0,_0,_1,_0,_3,_1,_3,_0,_0,_0,_1,_0,_3,_1,_3,_0,_1,_1,_0,_1,_3,_1,_2,_0,_2,_0,_3,_2,_1,_3,_1,_0,_3,_1,_2,_3,_1,_3,_0,_0,_0,_0,_0,_0,_2,_0,_3,_0,_0,_0,_1,_0,_3,_1,_3,_0,_2,_0,_2,_2,_0,_2,_1,_0,_2,_0,_3,_2,_1,_3,_1,_0,_2,_0,_3,_2,_1,_3,_1,_0,_3,_1,_2,_3,_1,_3,_0,_2,_0,_2,_1,_0,_1,_1,_1,_2,_1,_3,_0,_1,_1,_1,_0,
+      _0,_0,_0,_1,_0,_3,_1,_3,_0,_1,_1,_0,_9,_b,_9,_a,_0,_2,_0,_3,_2,_3,_3,_3,_0,_3,_1,_2,_b,_b,_b,_a,_0,_3,_1,_2,_3,_3,_3,_2,_1,_2,_0,_2,_b,_a,_a,_a,_2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_b,_8,_a,_8,_0,_2,_0,_3,_6,_7,_7,_7,_0,_3,_1,_2,_f,_f,_f,_e,_2,_2,_2,_3,_6,_5,_7,_5,_2,_3,_3,_2,_f,_d,_f,_c,_2,_3,_3,_2,_7,_5,_7,_4,_3,_2,_2,_2,_f,_c,_e,_c,_2,_1,_3,_0,_5,_5,_5,_4,_3,_0,_2,_0,_d,_c,_c,_c,
+      _0,_0,_0,_0,_0,_2,_0,_3,_0,_0,_0,_1,_0,_3,_1,_3,_0,_2,_0,_2,_2,_0,_2,_1,_0,_2,_0,_3,_2,_1,_3,_1,_0,_2,_0,_3,_2,_1,_3,_1,_0,_3,_1,_2,_3,_1,_3,_0,_2,_0,_2,_1,_0,_1,_1,_1,_2,_1,_3,_0,_1,_1,_1,_0,_0,_2,_0,_2,_6,_4,_6,_5,_0,_2,_0,_3,_6,_5,_7,_5,_2,_0,_2,_0,_4,_4,_4,_5,_2,_0,_2,_1,_4,_5,_5,_5,_2,_0,_2,_1,_4,_5,_5,_5,_2,_1,_3,_0,_5,_5,_5,_4,_0,_0,_0,_1,_4,_5,_5,_5,_0,_1,_1,_0,_5,_5,_5,_4,
+      _0,_2,_0,_3,_6,_7,_7,_7,_0,_3,_1,_2,_f,_f,_f,_e,_2,_2,_2,_3,_6,_5,_7,_5,_2,_3,_3,_2,_f,_d,_f,_c,_2,_3,_3,_2,_7,_5,_7,_4,_3,_2,_2,_2,_f,_c,_e,_c,_2,_1,_3,_0,_5,_5,_5,_4,_3,_0,_2,_0,_d,_c,_c,_c,_6,_6,_6,_7,_2,_1,_3,_1,_6,_7,_7,_6,_b,_9,_b,_8,_6,_4,_6,_5,_0,_1,_1,_1,_6,_5,_7,_4,_9,_9,_9,_8,_6,_5,_7,_4,_1,_1,_1,_0,_7,_4,_6,_4,_9,_8,_8,_8,_4,_5,_5,_4,_1,_1,_1,_0,_5,_4,_4,_4,_9,_8,_8,_8,
+      _0,_0,_0,_1,_0,_3,_1,_3,_0,_1,_1,_0,_9,_b,_9,_a,_0,_2,_0,_3,_2,_1,_3,_1,_0,_3,_1,_2,_b,_9,_b,_8,_0,_3,_1,_2,_3,_1,_3,_0,_1,_2,_0,_2,_b,_8,_a,_8,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_9,_8,_8,_8,_0,_2,_0,_3,_6,_5,_7,_5,_0,_3,_1,_2,_f,_d,_f,_c,_2,_0,_2,_1,_4,_5,_5,_5,_2,_1,_3,_0,_d,_d,_d,_c,_2,_1,_3,_0,_5,_5,_5,_4,_3,_0,_2,_0,_d,_c,_c,_c,_0,_1,_1,_0,_5,_5,_5,_4,_1,_0,_0,_0,_d,_c,_c,_c,
+      _0,_3,_1,_2,_f,_f,_f,_e,_9,_a,_8,_a,_7,_6,_6,_6,_2,_3,_3,_2,_f,_d,_f,_c,_b,_a,_a,_a,_7,_4,_6,_4,_3,_2,_2,_2,_f,_c,_e,_c,_a,_a,_a,_a,_6,_4,_6,_4,_3,_0,_2,_0,_d,_c,_c,_c,_a,_8,_a,_8,_4,_4,_4,_4,_6,_7,_7,_6,_f,_d,_f,_c,_f,_e,_e,_e,_7,_4,_6,_4,_6,_5,_7,_4,_d,_d,_d,_c,_f,_c,_e,_c,_5,_4,_4,_4,_7,_4,_6,_4,_d,_c,_c,_c,_e,_c,_e,_c,_4,_4,_4,_4,_5,_4,_4,_4,_d,_c,_c,_c,_c,_c,_c,_c,_4,_4,_4,_4,
+      _0,_2,_0,_3,_6,_5,_7,_5,_0,_3,_1,_2,_f,_d,_f,_c,_2,_0,_2,_1,_4,_5,_5,_5,_2,_1,_3,_0,_d,_d,_d,_c,_2,_1,_3,_0,_5,_5,_5,_4,_3,_0,_2,_0,_d,_c,_c,_c,_0,_1,_1,_0,_5,_5,_5,_4,_1,_0,_0,_0,_d,_c,_c,_c,_6,_4,_6,_5,_4,_5,_5,_5,_6,_5,_7,_4,_d,_d,_d,_c,_4,_4,_4,_5,_4,_5,_5,_5,_4,_5,_5,_4,_d,_d,_d,_c,_4,_5,_5,_4,_5,_5,_5,_4,_5,_4,_4,_4,_d,_c,_c,_c,_4,_5,_5,_4,_5,_5,_5,_4,_5,_4,_4,_4,_d,_c,_c,_c,
+      _6,_7,_7,_6,_f,_d,_f,_c,_f,_e,_e,_e,_7,_4,_6,_4,_6,_5,_7,_4,_d,_d,_d,_c,_f,_c,_e,_c,_5,_4,_4,_4,_7,_4,_6,_4,_d,_c,_c,_c,_e,_c,_e,_c,_4,_4,_4,_4,_5,_4,_4,_4,_d,_c,_c,_c,_c,_c,_c,_c,_4,_4,_4,_4,_6,_5,_7,_4,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,_4,_5,_5,_4,_9,_9,_9,_8,_d,_c,_c,_c,_1,_0,_0,_0,_5,_4,_4,_4,_9,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,_5,_4,_4,_4,_9,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,
+      _0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_1,_1,_1,_0,_0,_0,_0,_0,_2,_0,_3,_0,_0,_0,_1,_0,_3,_1,_3,_0,_0,_0,_1,_0,_3,_1,_3,_0,_1,_1,_0,_1,_3,_1,_2,_0,_2,_0,_3,_2,_1,_3,_1,_0,_3,_1,_2,_3,_1,_3,_0,_0,_0,_0,_0,_4,_6,_4,_7,_0,_0,_0,_1,_4,_7,_5,_7,_0,_2,_0,_2,_6,_4,_6,_5,_0,_2,_0,_3,_6,_5,_7,_5,_0,_2,_0,_3,_6,_5,_7,_5,_0,_3,_1,_2,_7,_5,_7,_4,_2,_0,_2,_1,_4,_5,_5,_5,_2,_1,_3,_0,_5,_5,_5,_4,
+      _0,_0,_0,_1,_4,_7,_5,_7,_0,_1,_1,_0,_d,_f,_d,_e,_0,_2,_0,_3,_6,_7,_7,_7,_0,_3,_1,_2,_f,_f,_f,_e,_0,_3,_1,_2,_7,_7,_7,_6,_1,_2,_0,_2,_f,_e,_e,_e,_2,_3,_3,_2,_7,_5,_7,_4,_3,_2,_2,_2,_f,_c,_e,_c,_4,_6,_4,_7,_2,_3,_3,_3,_4,_7,_5,_6,_b,_b,_b,_a,_6,_6,_6,_7,_2,_1,_3,_1,_6,_7,_7,_6,_b,_9,_b,_8,_6,_7,_7,_6,_3,_1,_3,_0,_7,_6,_6,_6,_b,_8,_a,_8,_6,_5,_7,_4,_1,_1,_1,_0,_7,_4,_6,_4,_9,_8,_8,_8,
+      _0,_0,_0,_0,_4,_6,_4,_7,_0,_0,_0,_1,_4,_7,_5,_7,_0,_2,_0,_2,_6,_4,_6,_5,_0,_2,_0,_3,_6,_5,_7,_5,_0,_2,_0,_3,_6,_5,_7,_5,_0,_3,_1,_2,_7,_5,_7,_4,_2,_0,_2,_1,_4,_5,_5,_5,_2,_1,_3,_0,_5,_5,_5,_4,_4,_6,_4,_6,_2,_0,_2,_1,_4,_6,_4,_7,_2,_1,_3,_1,_6,_4,_6,_4,_0,_0,_0,_1,_6,_4,_6,_5,_0,_1,_1,_1,_6,_4,_6,_5,_0,_1,_1,_1,_6,_5,_7,_4,_1,_1,_1,_0,_4,_4,_4,_5,_0,_1,_1,_1,_4,_5,_5,_4,_1,_1,_1,_0,
+      _4,_6,_4,_7,_2,_3,_3,_3,_4,_7,_5,_6,_b,_b,_b,_a,_6,_6,_6,_7,_2,_1,_3,_1,_6,_7,_7,_6,_b,_9,_b,_8,_6,_7,_7,_6,_3,_1,_3,_0,_7,_6,_6,_6,_b,_8,_a,_8,_6,_5,_7,_4,_1,_1,_1,_0,_7,_4,_6,_4,_9,_8,_8,_8,_2,_2,_2,_3,_2,_1,_3,_1,_2,_3,_3,_2,_b,_9,_b,_8,_2,_0,_2,_1,_0,_1,_1,_1,_2,_1,_3,_0,_9,_9,_9,_8,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_9,_8,_8,_8,_0,_1,_1,_0,_1,_1,_1,_0,_1,_0,_0,_0,_9,_8,_8,_8,
+      _0,_0,_0,_1,_4,_7,_5,_7,_0,_1,_1,_0,_d,_f,_d,_e,_0,_2,_0,_3,_6,_5,_7,_5,_0,_3,_1,_2,_f,_d,_f,_c,_0,_3,_1,_2,_7,_5,_7,_4,_1,_2,_0,_2,_f,_c,_e,_c,_2,_1,_3,_0,_5,_5,_5,_4,_3,_0,_2,_0,_d,_c,_c,_c,_4,_6,_4,_7,_6,_5,_7,_5,_4,_7,_5,_6,_f,_d,_f,_c,_6,_4,_6,_5,_4,_5,_5,_5,_6,_5,_7,_4,_d,_d,_d,_c,_6,_5,_7,_4,_5,_5,_5,_4,_7,_4,_6,_4,_d,_c,_c,_c,_4,_5,_5,_4,_5,_5,_5,_4,_5,_4,_4,_4,_d,_c,_c,_c,
+      _4,_7,_5,_6,_f,_f,_f,_e,_d,_e,_c,_e,_7,_6,_6,_6,_6,_7,_7,_6,_f,_d,_f,_c,_f,_e,_e,_e,_7,_4,_6,_4,_7,_6,_6,_6,_f,_c,_e,_c,_e,_e,_e,_e,_6,_4,_6,_4,_7,_4,_6,_4,_d,_c,_c,_c,_e,_c,_e,_c,_4,_4,_4,_4,_6,_7,_7,_6,_b,_9,_b,_8,_f,_e,_e,_e,_3,_0,_2,_0,_6,_5,_7,_4,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,_7,_4,_6,_4,_9,_8,_8,_8,_e,_c,_e,_c,_0,_0,_0,_0,_5,_4,_4,_4,_9,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,
+      _4,_6,_4,_7,_6,_5,_7,_5,_4,_7,_5,_6,_f,_d,_f,_c,_6,_4,_6,_5,_4,_5,_5,_5,_6,_5,_7,_4,_d,_d,_d,_c,_6,_5,_7,_4,_5,_5,_5,_4,_7,_4,_6,_4,_d,_c,_c,_c,_4,_5,_5,_4,_5,_5,_5,_4,_5,_4,_4,_4,_d,_c,_c,_c,_6,_4,_6,_5,_0,_1,_1,_1,_6,_5,_7,_4,_9,_9,_9,_8,_4,_4,_4,_5,_0,_1,_1,_1,_4,_5,_5,_4,_9,_9,_9,_8,_4,_5,_5,_4,_1,_1,_1,_0,_5,_4,_4,_4,_9,_8,_8,_8,_4,_5,_5,_4,_1,_1,_1,_0,_5,_4,_4,_4,_9,_8,_8,_8,
+      _6,_7,_7,_6,_b,_9,_b,_8,_f,_e,_e,_e,_3,_0,_2,_0,_6,_5,_7,_4,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,_7,_4,_6,_4,_9,_8,_8,_8,_e,_c,_e,_c,_0,_0,_0,_0,_5,_4,_4,_4,_9,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,_2,_1,_3,_0,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_0,_1,_1,_0,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,_1,_0,_0,_0,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_1,_0,_0,_0,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,
+      _0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_8,_9,_9,_9,_0,_0,_0,_0,_0,_2,_0,_3,_0,_0,_0,_1,_8,_b,_9,_b,_0,_0,_0,_1,_0,_3,_1,_3,_0,_1,_1,_0,_9,_b,_9,_a,_0,_2,_0,_3,_2,_1,_3,_1,_0,_3,_1,_2,_b,_9,_b,_8,_0,_0,_0,_0,_4,_6,_4,_7,_0,_0,_0,_1,_c,_f,_d,_f,_0,_2,_0,_2,_6,_4,_6,_5,_0,_2,_0,_3,_e,_d,_f,_d,_0,_2,_0,_3,_6,_5,_7,_5,_0,_3,_1,_2,_f,_d,_f,_c,_2,_0,_2,_1,_4,_5,_5,_5,_2,_1,_3,_0,_d,_d,_d,_c,
+      _0,_0,_0,_1,_c,_f,_d,_f,_8,_9,_9,_8,_5,_7,_5,_6,_0,_2,_0,_3,_e,_f,_f,_f,_8,_b,_9,_a,_7,_7,_7,_6,_0,_3,_1,_2,_f,_f,_f,_e,_9,_a,_8,_a,_7,_6,_6,_6,_2,_3,_3,_2,_f,_d,_f,_c,_b,_a,_a,_a,_7,_4,_6,_4,_4,_6,_4,_7,_a,_b,_b,_b,_c,_f,_d,_e,_3,_3,_3,_2,_6,_6,_6,_7,_a,_9,_b,_9,_e,_f,_f,_e,_3,_1,_3,_0,_6,_7,_7,_6,_b,_9,_b,_8,_f,_e,_e,_e,_3,_0,_2,_0,_6,_5,_7,_4,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,
+      _0,_0,_0,_0,_4,_6,_4,_7,_0,_0,_0,_1,_c,_f,_d,_f,_0,_2,_0,_2,_6,_4,_6,_5,_0,_2,_0,_3,_e,_d,_f,_d,_0,_2,_0,_3,_6,_5,_7,_5,_0,_3,_1,_2,_f,_d,_f,_c,_2,_0,_2,_1,_4,_5,_5,_5,_2,_1,_3,_0,_d,_d,_d,_c,_4,_6,_4,_6,_2,_0,_2,_1,_4,_6,_4,_7,_a,_9,_b,_9,_6,_4,_6,_4,_0,_0,_0,_1,_6,_4,_6,_5,_8,_9,_9,_9,_6,_4,_6,_5,_0,_1,_1,_1,_6,_5,_7,_4,_9,_9,_9,_8,_4,_4,_4,_5,_0,_1,_1,_1,_4,_5,_5,_4,_9,_9,_9,_8,
+      _4,_6,_4,_7,_a,_b,_b,_b,_c,_f,_d,_e,_3,_3,_3,_2,_6,_6,_6,_7,_a,_9,_b,_9,_e,_f,_f,_e,_3,_1,_3,_0,_6,_7,_7,_6,_b,_9,_b,_8,_f,_e,_e,_e,_3,_0,_2,_0,_6,_5,_7,_4,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,_2,_2,_2,_3,_a,_9,_b,_9,_a,_b,_b,_a,_3,_1,_3,_0,_2,_0,_2,_1,_8,_9,_9,_9,_a,_9,_b,_8,_1,_1,_1,_0,_2,_1,_3,_0,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_0,_1,_1,_0,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,
+      _0,_0,_0,_1,_c,_f,_d,_f,_8,_9,_9,_8,_5,_7,_5,_6,_0,_2,_0,_3,_e,_d,_f,_d,_8,_b,_9,_a,_7,_5,_7,_4,_0,_3,_1,_2,_f,_d,_f,_c,_9,_a,_8,_a,_7,_4,_6,_4,_2,_1,_3,_0,_d,_d,_d,_c,_b,_8,_a,_8,_5,_4,_4,_4,_4,_6,_4,_7,_e,_d,_f,_d,_c,_f,_d,_e,_7,_5,_7,_4,_6,_4,_6,_5,_c,_d,_d,_d,_e,_d,_f,_c,_5,_5,_5,_4,_6,_5,_7,_4,_d,_d,_d,_c,_f,_c,_e,_c,_5,_4,_4,_4,_4,_5,_5,_4,_d,_d,_d,_c,_d,_c,_c,_c,_5,_4,_4,_4,
+      _c,_f,_d,_e,_7,_7,_7,_6,_5,_6,_4,_6,_7,_6,_6,_6,_e,_f,_f,_e,_7,_5,_7,_4,_7,_6,_6,_6,_7,_4,_6,_4,_f,_e,_e,_e,_7,_4,_6,_4,_6,_6,_6,_6,_6,_4,_6,_4,_f,_c,_e,_c,_5,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_e,_f,_f,_e,_3,_1,_3,_0,_7,_6,_6,_6,_3,_0,_2,_0,_e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,
+      _4,_6,_4,_7,_e,_d,_f,_d,_c,_f,_d,_e,_7,_5,_7,_4,_6,_4,_6,_5,_c,_d,_d,_d,_e,_d,_f,_c,_5,_5,_5,_4,_6,_5,_7,_4,_d,_d,_d,_c,_f,_c,_e,_c,_5,_4,_4,_4,_4,_5,_5,_4,_d,_d,_d,_c,_d,_c,_c,_c,_5,_4,_4,_4,_6,_4,_6,_5,_8,_9,_9,_9,_e,_d,_f,_c,_1,_1,_1,_0,_4,_4,_4,_5,_8,_9,_9,_9,_c,_d,_d,_c,_1,_1,_1,_0,_4,_5,_5,_4,_9,_9,_9,_8,_d,_c,_c,_c,_1,_0,_0,_0,_4,_5,_5,_4,_9,_9,_9,_8,_d,_c,_c,_c,_1,_0,_0,_0,
+      _e,_f,_f,_e,_3,_1,_3,_0,_7,_6,_6,_6,_3,_0,_2,_0,_e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _0,_0,_0,_0,_4,_4,_4,_5,_0,_0,_0,_1,_c,_d,_d,_d,_0,_0,_0,_0,_4,_6,_4,_7,_0,_0,_0,_1,_c,_f,_d,_f,_0,_0,_0,_1,_4,_7,_5,_7,_0,_1,_1,_0,_d,_f,_d,_e,_0,_2,_0,_3,_6,_5,_7,_5,_0,_3,_1,_2,_f,_d,_f,_c,_4,_4,_4,_4,_0,_2,_0,_3,_4,_4,_4,_5,_8,_b,_9,_b,_4,_6,_4,_6,_2,_0,_2,_1,_4,_6,_4,_7,_a,_9,_b,_9,_4,_6,_4,_7,_2,_1,_3,_1,_4,_7,_5,_6,_b,_9,_b,_8,_6,_4,_6,_5,_0,_1,_1,_1,_6,_5,_7,_4,_9,_9,_9,_8,
+      _4,_4,_4,_5,_8,_b,_9,_b,_c,_d,_d,_c,_1,_3,_1,_2,_4,_6,_4,_7,_a,_b,_b,_b,_c,_f,_d,_e,_3,_3,_3,_2,_4,_7,_5,_6,_b,_b,_b,_a,_d,_e,_c,_e,_3,_2,_2,_2,_6,_7,_7,_6,_b,_9,_b,_8,_f,_e,_e,_e,_3,_0,_2,_0,_0,_2,_0,_3,_a,_b,_b,_b,_8,_b,_9,_a,_3,_3,_3,_2,_2,_2,_2,_3,_a,_9,_b,_9,_a,_b,_b,_a,_3,_1,_3,_0,_2,_3,_3,_2,_b,_9,_b,_8,_b,_a,_a,_a,_3,_0,_2,_0,_2,_1,_3,_0,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,
+      _4,_4,_4,_4,_0,_2,_0,_3,_4,_4,_4,_5,_8,_b,_9,_b,_4,_6,_4,_6,_2,_0,_2,_1,_4,_6,_4,_7,_a,_9,_b,_9,_4,_6,_4,_7,_2,_1,_3,_1,_4,_7,_5,_6,_b,_9,_b,_8,_6,_4,_6,_5,_0,_1,_1,_1,_6,_5,_7,_4,_9,_9,_9,_8,_0,_2,_0,_2,_2,_0,_2,_1,_0,_2,_0,_3,_a,_9,_b,_9,_2,_0,_2,_0,_0,_0,_0,_1,_2,_0,_2,_1,_8,_9,_9,_9,_2,_0,_2,_1,_0,_1,_1,_1,_2,_1,_3,_0,_9,_9,_9,_8,_0,_0,_0,_1,_0,_1,_1,_1,_0,_1,_1,_0,_9,_9,_9,_8,
+      _0,_2,_0,_3,_a,_b,_b,_b,_8,_b,_9,_a,_3,_3,_3,_2,_2,_2,_2,_3,_a,_9,_b,_9,_a,_b,_b,_a,_3,_1,_3,_0,_2,_3,_3,_2,_b,_9,_b,_8,_b,_a,_a,_a,_3,_0,_2,_0,_2,_1,_3,_0,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_2,_2,_2,_3,_a,_9,_b,_9,_a,_b,_b,_a,_3,_1,_3,_0,_2,_0,_2,_1,_8,_9,_9,_9,_a,_9,_b,_8,_1,_1,_1,_0,_2,_1,_3,_0,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_0,_1,_1,_0,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,
+      _4,_4,_4,_5,_c,_f,_d,_f,_c,_d,_d,_c,_5,_7,_5,_6,_4,_6,_4,_7,_e,_d,_f,_d,_c,_f,_d,_e,_7,_5,_7,_4,_4,_7,_5,_6,_f,_d,_f,_c,_d,_e,_c,_e,_7,_4,_6,_4,_6,_5,_7,_4,_d,_d,_d,_c,_f,_c,_e,_c,_5,_4,_4,_4,_4,_6,_4,_7,_a,_9,_b,_9,_c,_f,_d,_e,_3,_1,_3,_0,_6,_4,_6,_5,_8,_9,_9,_9,_e,_d,_f,_c,_1,_1,_1,_0,_6,_5,_7,_4,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,_4,_5,_5,_4,_9,_9,_9,_8,_d,_c,_c,_c,_1,_0,_0,_0,
+      _c,_f,_d,_e,_3,_3,_3,_2,_5,_6,_4,_6,_3,_2,_2,_2,_e,_f,_f,_e,_3,_1,_3,_0,_7,_6,_6,_6,_3,_0,_2,_0,_f,_e,_e,_e,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_a,_b,_b,_a,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _4,_6,_4,_7,_a,_9,_b,_9,_c,_f,_d,_e,_3,_1,_3,_0,_6,_4,_6,_5,_8,_9,_9,_9,_e,_d,_f,_c,_1,_1,_1,_0,_6,_5,_7,_4,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,_4,_5,_5,_4,_9,_9,_9,_8,_d,_c,_c,_c,_1,_0,_0,_0,_2,_0,_2,_1,_8,_9,_9,_9,_a,_9,_b,_8,_1,_1,_1,_0,_0,_0,_0,_1,_8,_9,_9,_9,_8,_9,_9,_8,_1,_1,_1,_0,_0,_1,_1,_0,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,_0,_1,_1,_0,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,
+      _a,_b,_b,_a,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _0,_0,_0,_1,_0,_3,_1,_3,_0,_1,_1,_0,_9,_b,_9,_a,_0,_2,_0,_3,_2,_1,_3,_1,_0,_3,_1,_2,_b,_9,_b,_8,_0,_3,_1,_2,_3,_1,_3,_0,_1,_2,_0,_2,_b,_8,_a,_8,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_9,_8,_8,_8,_0,_2,_0,_3,_6,_5,_7,_5,_0,_3,_1,_2,_f,_d,_f,_c,_2,_0,_2,_1,_4,_5,_5,_5,_2,_1,_3,_0,_d,_d,_d,_c,_2,_1,_3,_0,_5,_5,_5,_4,_3,_0,_2,_0,_d,_c,_c,_c,_0,_1,_1,_0,_5,_5,_5,_4,_1,_0,_0,_0,_d,_c,_c,_c,
+      _0,_3,_1,_2,_f,_f,_f,_e,_9,_a,_8,_a,_f,_e,_e,_e,_2,_3,_3,_2,_f,_d,_f,_c,_b,_a,_a,_a,_f,_c,_e,_c,_3,_2,_2,_2,_f,_c,_e,_c,_a,_a,_a,_a,_e,_c,_e,_c,_3,_0,_2,_0,_d,_c,_c,_c,_a,_8,_a,_8,_c,_c,_c,_c,_6,_7,_7,_6,_b,_9,_b,_8,_f,_e,_e,_e,_b,_8,_a,_8,_6,_5,_7,_4,_9,_9,_9,_8,_f,_c,_e,_c,_9,_8,_8,_8,_7,_4,_6,_4,_9,_8,_8,_8,_e,_c,_e,_c,_8,_8,_8,_8,_5,_4,_4,_4,_9,_8,_8,_8,_c,_c,_c,_c,_8,_8,_8,_8,
+      _0,_2,_0,_3,_6,_5,_7,_5,_0,_3,_1,_2,_f,_d,_f,_c,_2,_0,_2,_1,_4,_5,_5,_5,_2,_1,_3,_0,_d,_d,_d,_c,_2,_1,_3,_0,_5,_5,_5,_4,_3,_0,_2,_0,_d,_c,_c,_c,_0,_1,_1,_0,_5,_5,_5,_4,_1,_0,_0,_0,_d,_c,_c,_c,_6,_4,_6,_5,_0,_1,_1,_1,_6,_5,_7,_4,_9,_9,_9,_8,_4,_4,_4,_5,_0,_1,_1,_1,_4,_5,_5,_4,_9,_9,_9,_8,_4,_5,_5,_4,_1,_1,_1,_0,_5,_4,_4,_4,_9,_8,_8,_8,_4,_5,_5,_4,_1,_1,_1,_0,_5,_4,_4,_4,_9,_8,_8,_8,
+      _6,_7,_7,_6,_b,_9,_b,_8,_f,_e,_e,_e,_b,_8,_a,_8,_6,_5,_7,_4,_9,_9,_9,_8,_f,_c,_e,_c,_9,_8,_8,_8,_7,_4,_6,_4,_9,_8,_8,_8,_e,_c,_e,_c,_8,_8,_8,_8,_5,_4,_4,_4,_9,_8,_8,_8,_c,_c,_c,_c,_8,_8,_8,_8,_2,_1,_3,_0,_9,_9,_9,_8,_b,_8,_a,_8,_9,_8,_8,_8,_0,_1,_1,_0,_9,_9,_9,_8,_9,_8,_8,_8,_9,_8,_8,_8,_1,_0,_0,_0,_9,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_1,_0,_0,_0,_9,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,
+      _0,_3,_1,_2,_f,_d,_f,_c,_9,_a,_8,_a,_f,_c,_e,_c,_2,_1,_3,_0,_d,_d,_d,_c,_b,_8,_a,_8,_d,_c,_c,_c,_3,_0,_2,_0,_d,_c,_c,_c,_a,_8,_a,_8,_c,_c,_c,_c,_1,_0,_0,_0,_d,_c,_c,_c,_8,_8,_8,_8,_c,_c,_c,_c,_6,_5,_7,_4,_d,_d,_d,_c,_f,_c,_e,_c,_d,_c,_c,_c,_4,_5,_5,_4,_d,_d,_d,_c,_d,_c,_c,_c,_d,_c,_c,_c,_5,_4,_4,_4,_d,_c,_c,_c,_c,_c,_c,_c,_c,_c,_c,_c,_5,_4,_4,_4,_d,_c,_c,_c,_c,_c,_c,_c,_c,_c,_c,_c,
+      _f,_e,_e,_e,_f,_c,_e,_c,_e,_e,_e,_e,_6,_4,_6,_4,_f,_c,_e,_c,_d,_c,_c,_c,_e,_c,_e,_c,_4,_4,_4,_4,_e,_c,_e,_c,_c,_c,_c,_c,_e,_c,_e,_c,_4,_4,_4,_4,_c,_c,_c,_c,_c,_c,_c,_c,_c,_c,_c,_c,_4,_4,_4,_4,_f,_c,_e,_c,_9,_8,_8,_8,_e,_c,_e,_c,_0,_0,_0,_0,_d,_c,_c,_c,_9,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,_c,_c,_c,_c,_8,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,_c,_c,_c,_c,_8,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,
+      _6,_5,_7,_4,_d,_d,_d,_c,_f,_c,_e,_c,_d,_c,_c,_c,_4,_5,_5,_4,_d,_d,_d,_c,_d,_c,_c,_c,_d,_c,_c,_c,_5,_4,_4,_4,_d,_c,_c,_c,_c,_c,_c,_c,_c,_c,_c,_c,_5,_4,_4,_4,_d,_c,_c,_c,_c,_c,_c,_c,_c,_c,_c,_c,_4,_5,_5,_4,_9,_9,_9,_8,_d,_c,_c,_c,_9,_8,_8,_8,_4,_5,_5,_4,_9,_9,_9,_8,_d,_c,_c,_c,_9,_8,_8,_8,_5,_4,_4,_4,_9,_8,_8,_8,_c,_c,_c,_c,_8,_8,_8,_8,_5,_4,_4,_4,_9,_8,_8,_8,_c,_c,_c,_c,_8,_8,_8,_8,
+      _f,_c,_e,_c,_9,_8,_8,_8,_e,_c,_e,_c,_0,_0,_0,_0,_d,_c,_c,_c,_9,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,_c,_c,_c,_c,_8,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,_c,_c,_c,_c,_8,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,
+      _0,_0,_0,_1,_4,_7,_5,_7,_0,_1,_1,_0,_d,_f,_d,_e,_0,_2,_0,_3,_6,_5,_7,_5,_0,_3,_1,_2,_f,_d,_f,_c,_0,_3,_1,_2,_7,_5,_7,_4,_1,_2,_0,_2,_f,_c,_e,_c,_2,_1,_3,_0,_5,_5,_5,_4,_3,_0,_2,_0,_d,_c,_c,_c,_4,_6,_4,_7,_2,_1,_3,_1,_4,_7,_5,_6,_b,_9,_b,_8,_6,_4,_6,_5,_0,_1,_1,_1,_6,_5,_7,_4,_9,_9,_9,_8,_6,_5,_7,_4,_1,_1,_1,_0,_7,_4,_6,_4,_9,_8,_8,_8,_4,_5,_5,_4,_1,_1,_1,_0,_5,_4,_4,_4,_9,_8,_8,_8,
+      _4,_7,_5,_6,_b,_b,_b,_a,_d,_e,_c,_e,_b,_a,_a,_a,_6,_7,_7,_6,_b,_9,_b,_8,_f,_e,_e,_e,_b,_8,_a,_8,_7,_6,_6,_6,_b,_8,_a,_8,_e,_e,_e,_e,_a,_8,_a,_8,_7,_4,_6,_4,_9,_8,_8,_8,_e,_c,_e,_c,_8,_8,_8,_8,_2,_3,_3,_2,_b,_9,_b,_8,_b,_a,_a,_a,_b,_8,_a,_8,_2,_1,_3,_0,_9,_9,_9,_8,_b,_8,_a,_8,_9,_8,_8,_8,_3,_0,_2,_0,_9,_8,_8,_8,_a,_8,_a,_8,_8,_8,_8,_8,_1,_0,_0,_0,_9,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,
+      _4,_6,_4,_7,_2,_1,_3,_1,_4,_7,_5,_6,_b,_9,_b,_8,_6,_4,_6,_5,_0,_1,_1,_1,_6,_5,_7,_4,_9,_9,_9,_8,_6,_5,_7,_4,_1,_1,_1,_0,_7,_4,_6,_4,_9,_8,_8,_8,_4,_5,_5,_4,_1,_1,_1,_0,_5,_4,_4,_4,_9,_8,_8,_8,_2,_0,_2,_1,_0,_1,_1,_1,_2,_1,_3,_0,_9,_9,_9,_8,_0,_0,_0,_1,_0,_1,_1,_1,_0,_1,_1,_0,_9,_9,_9,_8,_0,_1,_1,_0,_1,_1,_1,_0,_1,_0,_0,_0,_9,_8,_8,_8,_0,_1,_1,_0,_1,_1,_1,_0,_1,_0,_0,_0,_9,_8,_8,_8,
+      _2,_3,_3,_2,_b,_9,_b,_8,_b,_a,_a,_a,_b,_8,_a,_8,_2,_1,_3,_0,_9,_9,_9,_8,_b,_8,_a,_8,_9,_8,_8,_8,_3,_0,_2,_0,_9,_8,_8,_8,_a,_8,_a,_8,_8,_8,_8,_8,_1,_0,_0,_0,_9,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_2,_1,_3,_0,_9,_9,_9,_8,_b,_8,_a,_8,_9,_8,_8,_8,_0,_1,_1,_0,_9,_9,_9,_8,_9,_8,_8,_8,_9,_8,_8,_8,_1,_0,_0,_0,_9,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_1,_0,_0,_0,_9,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,
+      _4,_7,_5,_6,_f,_d,_f,_c,_d,_e,_c,_e,_f,_c,_e,_c,_6,_5,_7,_4,_d,_d,_d,_c,_f,_c,_e,_c,_d,_c,_c,_c,_7,_4,_6,_4,_d,_c,_c,_c,_e,_c,_e,_c,_c,_c,_c,_c,_5,_4,_4,_4,_d,_c,_c,_c,_c,_c,_c,_c,_c,_c,_c,_c,_6,_5,_7,_4,_9,_9,_9,_8,_f,_c,_e,_c,_9,_8,_8,_8,_4,_5,_5,_4,_9,_9,_9,_8,_d,_c,_c,_c,_9,_8,_8,_8,_5,_4,_4,_4,_9,_8,_8,_8,_c,_c,_c,_c,_8,_8,_8,_8,_5,_4,_4,_4,_9,_8,_8,_8,_c,_c,_c,_c,_8,_8,_8,_8,
+      _f,_e,_e,_e,_b,_8,_a,_8,_e,_e,_e,_e,_2,_0,_2,_0,_f,_c,_e,_c,_9,_8,_8,_8,_e,_c,_e,_c,_0,_0,_0,_0,_e,_c,_e,_c,_8,_8,_8,_8,_e,_c,_e,_c,_0,_0,_0,_0,_c,_c,_c,_c,_8,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,_b,_8,_a,_8,_9,_8,_8,_8,_a,_8,_a,_8,_0,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,
+      _6,_5,_7,_4,_9,_9,_9,_8,_f,_c,_e,_c,_9,_8,_8,_8,_4,_5,_5,_4,_9,_9,_9,_8,_d,_c,_c,_c,_9,_8,_8,_8,_5,_4,_4,_4,_9,_8,_8,_8,_c,_c,_c,_c,_8,_8,_8,_8,_5,_4,_4,_4,_9,_8,_8,_8,_c,_c,_c,_c,_8,_8,_8,_8,_0,_1,_1,_0,_9,_9,_9,_8,_9,_8,_8,_8,_9,_8,_8,_8,_0,_1,_1,_0,_9,_9,_9,_8,_9,_8,_8,_8,_9,_8,_8,_8,_1,_0,_0,_0,_9,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_1,_0,_0,_0,_9,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,
+      _b,_8,_a,_8,_9,_8,_8,_8,_a,_8,_a,_8,_0,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,
+      _0,_0,_0,_1,_c,_f,_d,_f,_8,_9,_9,_8,_d,_f,_d,_e,_0,_2,_0,_3,_e,_d,_f,_d,_8,_b,_9,_a,_f,_d,_f,_c,_0,_3,_1,_2,_f,_d,_f,_c,_9,_a,_8,_a,_f,_c,_e,_c,_2,_1,_3,_0,_d,_d,_d,_c,_b,_8,_a,_8,_d,_c,_c,_c,_4,_6,_4,_7,_a,_9,_b,_9,_c,_f,_d,_e,_b,_9,_b,_8,_6,_4,_6,_5,_8,_9,_9,_9,_e,_d,_f,_c,_9,_9,_9,_8,_6,_5,_7,_4,_9,_9,_9,_8,_f,_c,_e,_c,_9,_8,_8,_8,_4,_5,_5,_4,_9,_9,_9,_8,_d,_c,_c,_c,_9,_8,_8,_8,
+      _c,_f,_d,_e,_b,_b,_b,_a,_d,_e,_c,_e,_3,_2,_2,_2,_e,_f,_f,_e,_b,_9,_b,_8,_f,_e,_e,_e,_3,_0,_2,_0,_f,_e,_e,_e,_b,_8,_a,_8,_e,_e,_e,_e,_2,_0,_2,_0,_f,_c,_e,_c,_9,_8,_8,_8,_e,_c,_e,_c,_0,_0,_0,_0,_a,_b,_b,_a,_b,_9,_b,_8,_b,_a,_a,_a,_3,_0,_2,_0,_a,_9,_b,_8,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_b,_8,_a,_8,_9,_8,_8,_8,_a,_8,_a,_8,_0,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,
+      _4,_6,_4,_7,_a,_9,_b,_9,_c,_f,_d,_e,_b,_9,_b,_8,_6,_4,_6,_5,_8,_9,_9,_9,_e,_d,_f,_c,_9,_9,_9,_8,_6,_5,_7,_4,_9,_9,_9,_8,_f,_c,_e,_c,_9,_8,_8,_8,_4,_5,_5,_4,_9,_9,_9,_8,_d,_c,_c,_c,_9,_8,_8,_8,_2,_0,_2,_1,_8,_9,_9,_9,_a,_9,_b,_8,_9,_9,_9,_8,_0,_0,_0,_1,_8,_9,_9,_9,_8,_9,_9,_8,_9,_9,_9,_8,_0,_1,_1,_0,_9,_9,_9,_8,_9,_8,_8,_8,_9,_8,_8,_8,_0,_1,_1,_0,_9,_9,_9,_8,_9,_8,_8,_8,_9,_8,_8,_8,
+      _a,_b,_b,_a,_b,_9,_b,_8,_b,_a,_a,_a,_3,_0,_2,_0,_a,_9,_b,_8,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_b,_8,_a,_8,_9,_8,_8,_8,_a,_8,_a,_8,_0,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_a,_9,_b,_8,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,
+      _c,_f,_d,_e,_f,_d,_f,_c,_d,_e,_c,_e,_7,_4,_6,_4,_e,_d,_f,_c,_d,_d,_d,_c,_f,_c,_e,_c,_5,_4,_4,_4,_f,_c,_e,_c,_d,_c,_c,_c,_e,_c,_e,_c,_4,_4,_4,_4,_d,_c,_c,_c,_d,_c,_c,_c,_c,_c,_c,_c,_4,_4,_4,_4,_e,_d,_f,_c,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,_c,_d,_d,_c,_9,_9,_9,_8,_d,_c,_c,_c,_1,_0,_0,_0,_d,_c,_c,_c,_9,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,_d,_c,_c,_c,_9,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,
+      _f,_e,_e,_e,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_e,_c,_e,_c,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_c,_c,_c,_c,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _e,_d,_f,_c,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,_c,_d,_d,_c,_9,_9,_9,_8,_d,_c,_c,_c,_1,_0,_0,_0,_d,_c,_c,_c,_9,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,_d,_c,_c,_c,_9,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,
+      _b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _4,_4,_4,_5,_8,_b,_9,_b,_c,_d,_d,_c,_9,_b,_9,_a,_4,_6,_4,_7,_a,_9,_b,_9,_c,_f,_d,_e,_b,_9,_b,_8,_4,_7,_5,_6,_b,_9,_b,_8,_d,_e,_c,_e,_b,_8,_a,_8,_6,_5,_7,_4,_9,_9,_9,_8,_f,_c,_e,_c,_9,_8,_8,_8,_0,_2,_0,_3,_a,_9,_b,_9,_8,_b,_9,_a,_b,_9,_b,_8,_2,_0,_2,_1,_8,_9,_9,_9,_a,_9,_b,_8,_9,_9,_9,_8,_2,_1,_3,_0,_9,_9,_9,_8,_b,_8,_a,_8,_9,_8,_8,_8,_0,_1,_1,_0,_9,_9,_9,_8,_9,_8,_8,_8,_9,_8,_8,_8,
+      _8,_b,_9,_a,_b,_b,_b,_a,_9,_a,_8,_a,_3,_2,_2,_2,_a,_b,_b,_a,_b,_9,_b,_8,_b,_a,_a,_a,_3,_0,_2,_0,_b,_a,_a,_a,_b,_8,_a,_8,_a,_a,_a,_a,_2,_0,_2,_0,_b,_8,_a,_8,_9,_8,_8,_8,_a,_8,_a,_8,_0,_0,_0,_0,_a,_b,_b,_a,_b,_9,_b,_8,_b,_a,_a,_a,_3,_0,_2,_0,_a,_9,_b,_8,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_b,_8,_a,_8,_9,_8,_8,_8,_a,_8,_a,_8,_0,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,
+      _0,_2,_0,_3,_a,_9,_b,_9,_8,_b,_9,_a,_b,_9,_b,_8,_2,_0,_2,_1,_8,_9,_9,_9,_a,_9,_b,_8,_9,_9,_9,_8,_2,_1,_3,_0,_9,_9,_9,_8,_b,_8,_a,_8,_9,_8,_8,_8,_0,_1,_1,_0,_9,_9,_9,_8,_9,_8,_8,_8,_9,_8,_8,_8,_2,_0,_2,_1,_8,_9,_9,_9,_a,_9,_b,_8,_9,_9,_9,_8,_0,_0,_0,_1,_8,_9,_9,_9,_8,_9,_9,_8,_9,_9,_9,_8,_0,_1,_1,_0,_9,_9,_9,_8,_9,_8,_8,_8,_9,_8,_8,_8,_0,_1,_1,_0,_9,_9,_9,_8,_9,_8,_8,_8,_9,_8,_8,_8,
+      _a,_b,_b,_a,_b,_9,_b,_8,_b,_a,_a,_a,_3,_0,_2,_0,_a,_9,_b,_8,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_b,_8,_a,_8,_9,_8,_8,_8,_a,_8,_a,_8,_0,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_a,_9,_b,_8,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,
+      _c,_f,_d,_e,_b,_9,_b,_8,_d,_e,_c,_e,_3,_0,_2,_0,_e,_d,_f,_c,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,_f,_c,_e,_c,_9,_8,_8,_8,_e,_c,_e,_c,_0,_0,_0,_0,_d,_c,_c,_c,_9,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,_a,_9,_b,_8,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,
+      _b,_a,_a,_a,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_a,_8,_a,_8,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _a,_9,_b,_8,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,
+      _b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _0,_0,_0,_1,_0,_1,_1,_1,_0,_1,_1,_0,_9,_9,_9,_8,_0,_0,_0,_1,_0,_3,_1,_3,_0,_1,_1,_0,_9,_b,_9,_a,_0,_1,_1,_0,_1,_3,_1,_2,_1,_0,_0,_0,_9,_a,_8,_a,_0,_3,_1,_2,_3,_1,_3,_0,_1,_2,_0,_2,_b,_8,_a,_8,_0,_0,_0,_1,_0,_3,_1,_3,_0,_1,_1,_0,_9,_b,_9,_a,_0,_2,_0,_3,_2,_1,_3,_1,_0,_3,_1,_2,_b,_9,_b,_8,_0,_3,_1,_2,_3,_1,_3,_0,_1,_2,_0,_2,_b,_8,_a,_8,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_9,_8,_8,_8,
+      _0,_1,_1,_0,_9,_b,_9,_a,_9,_8,_8,_8,_1,_2,_0,_2,_0,_3,_1,_2,_b,_b,_b,_a,_9,_a,_8,_a,_3,_2,_2,_2,_1,_2,_0,_2,_b,_a,_a,_a,_8,_a,_8,_a,_2,_2,_2,_2,_3,_2,_2,_2,_b,_8,_a,_8,_a,_a,_a,_a,_2,_0,_2,_0,_0,_3,_1,_2,_f,_f,_f,_e,_9,_a,_8,_a,_7,_6,_6,_6,_2,_3,_3,_2,_f,_d,_f,_c,_b,_a,_a,_a,_7,_4,_6,_4,_3,_2,_2,_2,_f,_c,_e,_c,_a,_a,_a,_a,_6,_4,_6,_4,_3,_0,_2,_0,_d,_c,_c,_c,_a,_8,_a,_8,_4,_4,_4,_4,
+      _0,_0,_0,_1,_0,_3,_1,_3,_0,_1,_1,_0,_9,_b,_9,_a,_0,_2,_0,_3,_2,_1,_3,_1,_0,_3,_1,_2,_b,_9,_b,_8,_0,_3,_1,_2,_3,_1,_3,_0,_1,_2,_0,_2,_b,_8,_a,_8,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_9,_8,_8,_8,_0,_2,_0,_3,_6,_5,_7,_5,_0,_3,_1,_2,_f,_d,_f,_c,_2,_0,_2,_1,_4,_5,_5,_5,_2,_1,_3,_0,_d,_d,_d,_c,_2,_1,_3,_0,_5,_5,_5,_4,_3,_0,_2,_0,_d,_c,_c,_c,_0,_1,_1,_0,_5,_5,_5,_4,_1,_0,_0,_0,_d,_c,_c,_c,
+      _0,_3,_1,_2,_f,_f,_f,_e,_9,_a,_8,_a,_7,_6,_6,_6,_2,_3,_3,_2,_f,_d,_f,_c,_b,_a,_a,_a,_7,_4,_6,_4,_3,_2,_2,_2,_f,_c,_e,_c,_a,_a,_a,_a,_6,_4,_6,_4,_3,_0,_2,_0,_d,_c,_c,_c,_a,_8,_a,_8,_4,_4,_4,_4,_6,_7,_7,_6,_b,_9,_b,_8,_f,_e,_e,_e,_3,_0,_2,_0,_6,_5,_7,_4,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,_7,_4,_6,_4,_9,_8,_8,_8,_e,_c,_e,_c,_0,_0,_0,_0,_5,_4,_4,_4,_9,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,
+      _0,_1,_1,_0,_9,_b,_9,_a,_9,_8,_8,_8,_1,_2,_0,_2,_0,_3,_1,_2,_b,_9,_b,_8,_9,_a,_8,_a,_3,_0,_2,_0,_1,_2,_0,_2,_b,_8,_a,_8,_8,_a,_8,_a,_2,_0,_2,_0,_3,_0,_2,_0,_9,_8,_8,_8,_a,_8,_a,_8,_0,_0,_0,_0,_0,_3,_1,_2,_f,_d,_f,_c,_9,_a,_8,_a,_7,_4,_6,_4,_2,_1,_3,_0,_d,_d,_d,_c,_b,_8,_a,_8,_5,_4,_4,_4,_3,_0,_2,_0,_d,_c,_c,_c,_a,_8,_a,_8,_4,_4,_4,_4,_1,_0,_0,_0,_d,_c,_c,_c,_8,_8,_8,_8,_4,_4,_4,_4,
+      _9,_a,_8,_a,_7,_6,_6,_6,_0,_2,_0,_2,_6,_6,_6,_6,_b,_a,_a,_a,_7,_4,_6,_4,_2,_2,_2,_2,_6,_4,_6,_4,_a,_a,_a,_a,_6,_4,_6,_4,_2,_2,_2,_2,_6,_4,_6,_4,_a,_8,_a,_8,_4,_4,_4,_4,_2,_0,_2,_0,_4,_4,_4,_4,_f,_e,_e,_e,_7,_4,_6,_4,_6,_6,_6,_6,_6,_4,_6,_4,_f,_c,_e,_c,_5,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_e,_c,_e,_c,_4,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_c,_c,_c,_c,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,
+      _0,_3,_1,_2,_f,_d,_f,_c,_9,_a,_8,_a,_7,_4,_6,_4,_2,_1,_3,_0,_d,_d,_d,_c,_b,_8,_a,_8,_5,_4,_4,_4,_3,_0,_2,_0,_d,_c,_c,_c,_a,_8,_a,_8,_4,_4,_4,_4,_1,_0,_0,_0,_d,_c,_c,_c,_8,_8,_8,_8,_4,_4,_4,_4,_6,_5,_7,_4,_d,_d,_d,_c,_f,_c,_e,_c,_5,_4,_4,_4,_4,_5,_5,_4,_d,_d,_d,_c,_d,_c,_c,_c,_5,_4,_4,_4,_5,_4,_4,_4,_d,_c,_c,_c,_c,_c,_c,_c,_4,_4,_4,_4,_5,_4,_4,_4,_d,_c,_c,_c,_c,_c,_c,_c,_4,_4,_4,_4,
+      _f,_e,_e,_e,_7,_4,_6,_4,_6,_6,_6,_6,_6,_4,_6,_4,_f,_c,_e,_c,_5,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_e,_c,_e,_c,_4,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_c,_c,_c,_c,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_c,_c,_c,_c,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_c,_c,_c,_c,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,
+      _0,_0,_0,_1,_0,_1,_1,_1,_0,_1,_1,_0,_9,_9,_9,_8,_0,_0,_0,_1,_0,_3,_1,_3,_0,_1,_1,_0,_9,_b,_9,_a,_0,_1,_1,_0,_1,_3,_1,_2,_1,_0,_0,_0,_9,_a,_8,_a,_0,_3,_1,_2,_3,_1,_3,_0,_1,_2,_0,_2,_b,_8,_a,_8,_0,_0,_0,_1,_4,_7,_5,_7,_0,_1,_1,_0,_d,_f,_d,_e,_0,_2,_0,_3,_6,_5,_7,_5,_0,_3,_1,_2,_f,_d,_f,_c,_0,_3,_1,_2,_7,_5,_7,_4,_1,_2,_0,_2,_f,_c,_e,_c,_2,_1,_3,_0,_5,_5,_5,_4,_3,_0,_2,_0,_d,_c,_c,_c,
+      _0,_1,_1,_0,_d,_f,_d,_e,_9,_8,_8,_8,_5,_6,_4,_6,_0,_3,_1,_2,_f,_f,_f,_e,_9,_a,_8,_a,_7,_6,_6,_6,_1,_2,_0,_2,_f,_e,_e,_e,_8,_a,_8,_a,_6,_6,_6,_6,_3,_2,_2,_2,_f,_c,_e,_c,_a,_a,_a,_a,_6,_4,_6,_4,_4,_7,_5,_6,_b,_b,_b,_a,_d,_e,_c,_e,_3,_2,_2,_2,_6,_7,_7,_6,_b,_9,_b,_8,_f,_e,_e,_e,_3,_0,_2,_0,_7,_6,_6,_6,_b,_8,_a,_8,_e,_e,_e,_e,_2,_0,_2,_0,_7,_4,_6,_4,_9,_8,_8,_8,_e,_c,_e,_c,_0,_0,_0,_0,
+      _0,_0,_0,_1,_4,_7,_5,_7,_0,_1,_1,_0,_d,_f,_d,_e,_0,_2,_0,_3,_6,_5,_7,_5,_0,_3,_1,_2,_f,_d,_f,_c,_0,_3,_1,_2,_7,_5,_7,_4,_1,_2,_0,_2,_f,_c,_e,_c,_2,_1,_3,_0,_5,_5,_5,_4,_3,_0,_2,_0,_d,_c,_c,_c,_4,_6,_4,_7,_2,_1,_3,_1,_4,_7,_5,_6,_b,_9,_b,_8,_6,_4,_6,_5,_0,_1,_1,_1,_6,_5,_7,_4,_9,_9,_9,_8,_6,_5,_7,_4,_1,_1,_1,_0,_7,_4,_6,_4,_9,_8,_8,_8,_4,_5,_5,_4,_1,_1,_1,_0,_5,_4,_4,_4,_9,_8,_8,_8,
+      _4,_7,_5,_6,_b,_b,_b,_a,_d,_e,_c,_e,_3,_2,_2,_2,_6,_7,_7,_6,_b,_9,_b,_8,_f,_e,_e,_e,_3,_0,_2,_0,_7,_6,_6,_6,_b,_8,_a,_8,_e,_e,_e,_e,_2,_0,_2,_0,_7,_4,_6,_4,_9,_8,_8,_8,_e,_c,_e,_c,_0,_0,_0,_0,_2,_3,_3,_2,_b,_9,_b,_8,_b,_a,_a,_a,_3,_0,_2,_0,_2,_1,_3,_0,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_3,_0,_2,_0,_9,_8,_8,_8,_a,_8,_a,_8,_0,_0,_0,_0,_1,_0,_0,_0,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,
+      _0,_1,_1,_0,_d,_f,_d,_e,_9,_8,_8,_8,_5,_6,_4,_6,_0,_3,_1,_2,_f,_d,_f,_c,_9,_a,_8,_a,_7,_4,_6,_4,_1,_2,_0,_2,_f,_c,_e,_c,_8,_a,_8,_a,_6,_4,_6,_4,_3,_0,_2,_0,_d,_c,_c,_c,_a,_8,_a,_8,_4,_4,_4,_4,_4,_7,_5,_6,_f,_d,_f,_c,_d,_e,_c,_e,_7,_4,_6,_4,_6,_5,_7,_4,_d,_d,_d,_c,_f,_c,_e,_c,_5,_4,_4,_4,_7,_4,_6,_4,_d,_c,_c,_c,_e,_c,_e,_c,_4,_4,_4,_4,_5,_4,_4,_4,_d,_c,_c,_c,_c,_c,_c,_c,_4,_4,_4,_4,
+      _d,_e,_c,_e,_7,_6,_6,_6,_4,_6,_4,_6,_6,_6,_6,_6,_f,_e,_e,_e,_7,_4,_6,_4,_6,_6,_6,_6,_6,_4,_6,_4,_e,_e,_e,_e,_6,_4,_6,_4,_6,_6,_6,_6,_6,_4,_6,_4,_e,_c,_e,_c,_4,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_f,_e,_e,_e,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_e,_c,_e,_c,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_c,_c,_c,_c,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,
+      _4,_7,_5,_6,_f,_d,_f,_c,_d,_e,_c,_e,_7,_4,_6,_4,_6,_5,_7,_4,_d,_d,_d,_c,_f,_c,_e,_c,_5,_4,_4,_4,_7,_4,_6,_4,_d,_c,_c,_c,_e,_c,_e,_c,_4,_4,_4,_4,_5,_4,_4,_4,_d,_c,_c,_c,_c,_c,_c,_c,_4,_4,_4,_4,_6,_5,_7,_4,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,_4,_5,_5,_4,_9,_9,_9,_8,_d,_c,_c,_c,_1,_0,_0,_0,_5,_4,_4,_4,_9,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,_5,_4,_4,_4,_9,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,
+      _f,_e,_e,_e,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_e,_c,_e,_c,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_c,_c,_c,_c,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _0,_0,_0,_1,_8,_9,_9,_9,_8,_9,_9,_8,_1,_1,_1,_0,_0,_0,_0,_1,_8,_b,_9,_b,_8,_9,_9,_8,_1,_3,_1,_2,_0,_1,_1,_0,_9,_b,_9,_a,_9,_8,_8,_8,_1,_2,_0,_2,_0,_3,_1,_2,_b,_9,_b,_8,_9,_a,_8,_a,_3,_0,_2,_0,_0,_0,_0,_1,_c,_f,_d,_f,_8,_9,_9,_8,_5,_7,_5,_6,_0,_2,_0,_3,_e,_d,_f,_d,_8,_b,_9,_a,_7,_5,_7,_4,_0,_3,_1,_2,_f,_d,_f,_c,_9,_a,_8,_a,_7,_4,_6,_4,_2,_1,_3,_0,_d,_d,_d,_c,_b,_8,_a,_8,_5,_4,_4,_4,
+      _8,_9,_9,_8,_5,_7,_5,_6,_1,_0,_0,_0,_5,_6,_4,_6,_8,_b,_9,_a,_7,_7,_7,_6,_1,_2,_0,_2,_7,_6,_6,_6,_9,_a,_8,_a,_7,_6,_6,_6,_0,_2,_0,_2,_6,_6,_6,_6,_b,_a,_a,_a,_7,_4,_6,_4,_2,_2,_2,_2,_6,_4,_6,_4,_c,_f,_d,_e,_3,_3,_3,_2,_5,_6,_4,_6,_3,_2,_2,_2,_e,_f,_f,_e,_3,_1,_3,_0,_7,_6,_6,_6,_3,_0,_2,_0,_f,_e,_e,_e,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,
+      _0,_0,_0,_1,_c,_f,_d,_f,_8,_9,_9,_8,_5,_7,_5,_6,_0,_2,_0,_3,_e,_d,_f,_d,_8,_b,_9,_a,_7,_5,_7,_4,_0,_3,_1,_2,_f,_d,_f,_c,_9,_a,_8,_a,_7,_4,_6,_4,_2,_1,_3,_0,_d,_d,_d,_c,_b,_8,_a,_8,_5,_4,_4,_4,_4,_6,_4,_7,_a,_9,_b,_9,_c,_f,_d,_e,_3,_1,_3,_0,_6,_4,_6,_5,_8,_9,_9,_9,_e,_d,_f,_c,_1,_1,_1,_0,_6,_5,_7,_4,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,_4,_5,_5,_4,_9,_9,_9,_8,_d,_c,_c,_c,_1,_0,_0,_0,
+      _c,_f,_d,_e,_3,_3,_3,_2,_5,_6,_4,_6,_3,_2,_2,_2,_e,_f,_f,_e,_3,_1,_3,_0,_7,_6,_6,_6,_3,_0,_2,_0,_f,_e,_e,_e,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_a,_b,_b,_a,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _8,_9,_9,_8,_5,_7,_5,_6,_1,_0,_0,_0,_5,_6,_4,_6,_8,_b,_9,_a,_7,_5,_7,_4,_1,_2,_0,_2,_7,_4,_6,_4,_9,_a,_8,_a,_7,_4,_6,_4,_0,_2,_0,_2,_6,_4,_6,_4,_b,_8,_a,_8,_5,_4,_4,_4,_2,_0,_2,_0,_4,_4,_4,_4,_c,_f,_d,_e,_7,_5,_7,_4,_5,_6,_4,_6,_7,_4,_6,_4,_e,_d,_f,_c,_5,_5,_5,_4,_7,_4,_6,_4,_5,_4,_4,_4,_f,_c,_e,_c,_5,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_d,_c,_c,_c,_5,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,
+      _5,_6,_4,_6,_7,_6,_6,_6,_4,_6,_4,_6,_6,_6,_6,_6,_7,_6,_6,_6,_7,_4,_6,_4,_6,_6,_6,_6,_6,_4,_6,_4,_6,_6,_6,_6,_6,_4,_6,_4,_6,_6,_6,_6,_6,_4,_6,_4,_6,_4,_6,_4,_4,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_7,_6,_6,_6,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,
+      _c,_f,_d,_e,_7,_5,_7,_4,_5,_6,_4,_6,_7,_4,_6,_4,_e,_d,_f,_c,_5,_5,_5,_4,_7,_4,_6,_4,_5,_4,_4,_4,_f,_c,_e,_c,_5,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_d,_c,_c,_c,_5,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_c,_d,_d,_c,_1,_1,_1,_0,_5,_4,_4,_4,_1,_0,_0,_0,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,
+      _7,_6,_6,_6,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _0,_0,_0,_1,_c,_d,_d,_d,_8,_9,_9,_8,_5,_5,_5,_4,_0,_0,_0,_1,_c,_f,_d,_f,_8,_9,_9,_8,_5,_7,_5,_6,_0,_1,_1,_0,_d,_f,_d,_e,_9,_8,_8,_8,_5,_6,_4,_6,_0,_3,_1,_2,_f,_d,_f,_c,_9,_a,_8,_a,_7,_4,_6,_4,_4,_4,_4,_5,_8,_b,_9,_b,_c,_d,_d,_c,_1,_3,_1,_2,_4,_6,_4,_7,_a,_9,_b,_9,_c,_f,_d,_e,_3,_1,_3,_0,_4,_7,_5,_6,_b,_9,_b,_8,_d,_e,_c,_e,_3,_0,_2,_0,_6,_5,_7,_4,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,
+      _c,_d,_d,_c,_1,_3,_1,_2,_5,_4,_4,_4,_1,_2,_0,_2,_c,_f,_d,_e,_3,_3,_3,_2,_5,_6,_4,_6,_3,_2,_2,_2,_d,_e,_c,_e,_3,_2,_2,_2,_4,_6,_4,_6,_2,_2,_2,_2,_f,_e,_e,_e,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_8,_b,_9,_a,_3,_3,_3,_2,_1,_2,_0,_2,_3,_2,_2,_2,_a,_b,_b,_a,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_b,_a,_a,_a,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,
+      _4,_4,_4,_5,_8,_b,_9,_b,_c,_d,_d,_c,_1,_3,_1,_2,_4,_6,_4,_7,_a,_9,_b,_9,_c,_f,_d,_e,_3,_1,_3,_0,_4,_7,_5,_6,_b,_9,_b,_8,_d,_e,_c,_e,_3,_0,_2,_0,_6,_5,_7,_4,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,_0,_2,_0,_3,_a,_9,_b,_9,_8,_b,_9,_a,_3,_1,_3,_0,_2,_0,_2,_1,_8,_9,_9,_9,_a,_9,_b,_8,_1,_1,_1,_0,_2,_1,_3,_0,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_0,_1,_1,_0,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,
+      _8,_b,_9,_a,_3,_3,_3,_2,_1,_2,_0,_2,_3,_2,_2,_2,_a,_b,_b,_a,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_b,_a,_a,_a,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_a,_b,_b,_a,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _c,_d,_d,_c,_5,_7,_5,_6,_5,_4,_4,_4,_5,_6,_4,_6,_c,_f,_d,_e,_7,_5,_7,_4,_5,_6,_4,_6,_7,_4,_6,_4,_d,_e,_c,_e,_7,_4,_6,_4,_4,_6,_4,_6,_6,_4,_6,_4,_f,_c,_e,_c,_5,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_c,_f,_d,_e,_3,_1,_3,_0,_5,_6,_4,_6,_3,_0,_2,_0,_e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,
+      _5,_6,_4,_6,_3,_2,_2,_2,_4,_6,_4,_6,_2,_2,_2,_2,_7,_6,_6,_6,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _c,_f,_d,_e,_3,_1,_3,_0,_5,_6,_4,_6,_3,_0,_2,_0,_e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _0,_1,_1,_0,_9,_b,_9,_a,_9,_8,_8,_8,_9,_a,_8,_a,_0,_3,_1,_2,_b,_9,_b,_8,_9,_a,_8,_a,_b,_8,_a,_8,_1,_2,_0,_2,_b,_8,_a,_8,_8,_a,_8,_a,_a,_8,_a,_8,_3,_0,_2,_0,_9,_8,_8,_8,_a,_8,_a,_8,_8,_8,_8,_8,_0,_3,_1,_2,_f,_d,_f,_c,_9,_a,_8,_a,_f,_c,_e,_c,_2,_1,_3,_0,_d,_d,_d,_c,_b,_8,_a,_8,_d,_c,_c,_c,_3,_0,_2,_0,_d,_c,_c,_c,_a,_8,_a,_8,_c,_c,_c,_c,_1,_0,_0,_0,_d,_c,_c,_c,_8,_8,_8,_8,_c,_c,_c,_c,
+      _9,_a,_8,_a,_f,_e,_e,_e,_8,_a,_8,_a,_6,_6,_6,_6,_b,_a,_a,_a,_f,_c,_e,_c,_a,_a,_a,_a,_6,_4,_6,_4,_a,_a,_a,_a,_e,_c,_e,_c,_a,_a,_a,_a,_6,_4,_6,_4,_a,_8,_a,_8,_c,_c,_c,_c,_a,_8,_a,_8,_4,_4,_4,_4,_f,_e,_e,_e,_b,_8,_a,_8,_e,_e,_e,_e,_2,_0,_2,_0,_f,_c,_e,_c,_9,_8,_8,_8,_e,_c,_e,_c,_0,_0,_0,_0,_e,_c,_e,_c,_8,_8,_8,_8,_e,_c,_e,_c,_0,_0,_0,_0,_c,_c,_c,_c,_8,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,
+      _0,_3,_1,_2,_f,_d,_f,_c,_9,_a,_8,_a,_f,_c,_e,_c,_2,_1,_3,_0,_d,_d,_d,_c,_b,_8,_a,_8,_d,_c,_c,_c,_3,_0,_2,_0,_d,_c,_c,_c,_a,_8,_a,_8,_c,_c,_c,_c,_1,_0,_0,_0,_d,_c,_c,_c,_8,_8,_8,_8,_c,_c,_c,_c,_6,_5,_7,_4,_9,_9,_9,_8,_f,_c,_e,_c,_9,_8,_8,_8,_4,_5,_5,_4,_9,_9,_9,_8,_d,_c,_c,_c,_9,_8,_8,_8,_5,_4,_4,_4,_9,_8,_8,_8,_c,_c,_c,_c,_8,_8,_8,_8,_5,_4,_4,_4,_9,_8,_8,_8,_c,_c,_c,_c,_8,_8,_8,_8,
+      _f,_e,_e,_e,_b,_8,_a,_8,_e,_e,_e,_e,_2,_0,_2,_0,_f,_c,_e,_c,_9,_8,_8,_8,_e,_c,_e,_c,_0,_0,_0,_0,_e,_c,_e,_c,_8,_8,_8,_8,_e,_c,_e,_c,_0,_0,_0,_0,_c,_c,_c,_c,_8,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,_b,_8,_a,_8,_9,_8,_8,_8,_a,_8,_a,_8,_0,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,
+      _9,_a,_8,_a,_f,_c,_e,_c,_8,_a,_8,_a,_6,_4,_6,_4,_b,_8,_a,_8,_d,_c,_c,_c,_a,_8,_a,_8,_4,_4,_4,_4,_a,_8,_a,_8,_c,_c,_c,_c,_a,_8,_a,_8,_4,_4,_4,_4,_8,_8,_8,_8,_c,_c,_c,_c,_8,_8,_8,_8,_4,_4,_4,_4,_f,_c,_e,_c,_d,_c,_c,_c,_e,_c,_e,_c,_4,_4,_4,_4,_d,_c,_c,_c,_d,_c,_c,_c,_c,_c,_c,_c,_4,_4,_4,_4,_c,_c,_c,_c,_c,_c,_c,_c,_c,_c,_c,_c,_4,_4,_4,_4,_c,_c,_c,_c,_c,_c,_c,_c,_c,_c,_c,_c,_4,_4,_4,_4,
+      _e,_e,_e,_e,_6,_4,_6,_4,_6,_6,_6,_6,_6,_4,_6,_4,_e,_c,_e,_c,_4,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_e,_c,_e,_c,_4,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_c,_c,_c,_c,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_e,_c,_e,_c,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_c,_c,_c,_c,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_c,_c,_c,_c,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_c,_c,_c,_c,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,
+      _f,_c,_e,_c,_d,_c,_c,_c,_e,_c,_e,_c,_4,_4,_4,_4,_d,_c,_c,_c,_d,_c,_c,_c,_c,_c,_c,_c,_4,_4,_4,_4,_c,_c,_c,_c,_c,_c,_c,_c,_c,_c,_c,_c,_4,_4,_4,_4,_c,_c,_c,_c,_c,_c,_c,_c,_c,_c,_c,_c,_4,_4,_4,_4,_d,_c,_c,_c,_9,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,_d,_c,_c,_c,_9,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,_c,_c,_c,_c,_8,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,_c,_c,_c,_c,_8,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,
+      _e,_c,_e,_c,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_c,_c,_c,_c,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_c,_c,_c,_c,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_c,_c,_c,_c,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _0,_1,_1,_0,_d,_f,_d,_e,_9,_8,_8,_8,_d,_e,_c,_e,_0,_3,_1,_2,_f,_d,_f,_c,_9,_a,_8,_a,_f,_c,_e,_c,_1,_2,_0,_2,_f,_c,_e,_c,_8,_a,_8,_a,_e,_c,_e,_c,_3,_0,_2,_0,_d,_c,_c,_c,_a,_8,_a,_8,_c,_c,_c,_c,_4,_7,_5,_6,_b,_9,_b,_8,_d,_e,_c,_e,_b,_8,_a,_8,_6,_5,_7,_4,_9,_9,_9,_8,_f,_c,_e,_c,_9,_8,_8,_8,_7,_4,_6,_4,_9,_8,_8,_8,_e,_c,_e,_c,_8,_8,_8,_8,_5,_4,_4,_4,_9,_8,_8,_8,_c,_c,_c,_c,_8,_8,_8,_8,
+      _d,_e,_c,_e,_b,_a,_a,_a,_c,_e,_c,_e,_2,_2,_2,_2,_f,_e,_e,_e,_b,_8,_a,_8,_e,_e,_e,_e,_2,_0,_2,_0,_e,_e,_e,_e,_a,_8,_a,_8,_e,_e,_e,_e,_2,_0,_2,_0,_e,_c,_e,_c,_8,_8,_8,_8,_e,_c,_e,_c,_0,_0,_0,_0,_b,_a,_a,_a,_b,_8,_a,_8,_a,_a,_a,_a,_2,_0,_2,_0,_b,_8,_a,_8,_9,_8,_8,_8,_a,_8,_a,_8,_0,_0,_0,_0,_a,_8,_a,_8,_8,_8,_8,_8,_a,_8,_a,_8,_0,_0,_0,_0,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,
+      _4,_7,_5,_6,_b,_9,_b,_8,_d,_e,_c,_e,_b,_8,_a,_8,_6,_5,_7,_4,_9,_9,_9,_8,_f,_c,_e,_c,_9,_8,_8,_8,_7,_4,_6,_4,_9,_8,_8,_8,_e,_c,_e,_c,_8,_8,_8,_8,_5,_4,_4,_4,_9,_8,_8,_8,_c,_c,_c,_c,_8,_8,_8,_8,_2,_1,_3,_0,_9,_9,_9,_8,_b,_8,_a,_8,_9,_8,_8,_8,_0,_1,_1,_0,_9,_9,_9,_8,_9,_8,_8,_8,_9,_8,_8,_8,_1,_0,_0,_0,_9,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_1,_0,_0,_0,_9,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,
+      _b,_a,_a,_a,_b,_8,_a,_8,_a,_a,_a,_a,_2,_0,_2,_0,_b,_8,_a,_8,_9,_8,_8,_8,_a,_8,_a,_8,_0,_0,_0,_0,_a,_8,_a,_8,_8,_8,_8,_8,_a,_8,_a,_8,_0,_0,_0,_0,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_b,_8,_a,_8,_9,_8,_8,_8,_a,_8,_a,_8,_0,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,
+      _d,_e,_c,_e,_f,_c,_e,_c,_c,_e,_c,_e,_6,_4,_6,_4,_f,_c,_e,_c,_d,_c,_c,_c,_e,_c,_e,_c,_4,_4,_4,_4,_e,_c,_e,_c,_c,_c,_c,_c,_e,_c,_e,_c,_4,_4,_4,_4,_c,_c,_c,_c,_c,_c,_c,_c,_c,_c,_c,_c,_4,_4,_4,_4,_f,_c,_e,_c,_9,_8,_8,_8,_e,_c,_e,_c,_0,_0,_0,_0,_d,_c,_c,_c,_9,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,_c,_c,_c,_c,_8,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,_c,_c,_c,_c,_8,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,
+      _e,_e,_e,_e,_2,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_e,_c,_e,_c,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_e,_c,_e,_c,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_c,_c,_c,_c,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_a,_8,_a,_8,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _f,_c,_e,_c,_9,_8,_8,_8,_e,_c,_e,_c,_0,_0,_0,_0,_d,_c,_c,_c,_9,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,_c,_c,_c,_c,_8,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,_c,_c,_c,_c,_8,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,
+      _a,_8,_a,_8,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _8,_9,_9,_8,_d,_f,_d,_e,_9,_8,_8,_8,_5,_6,_4,_6,_8,_b,_9,_a,_f,_d,_f,_c,_9,_a,_8,_a,_7,_4,_6,_4,_9,_a,_8,_a,_f,_c,_e,_c,_8,_a,_8,_a,_6,_4,_6,_4,_b,_8,_a,_8,_d,_c,_c,_c,_a,_8,_a,_8,_4,_4,_4,_4,_c,_f,_d,_e,_b,_9,_b,_8,_d,_e,_c,_e,_3,_0,_2,_0,_e,_d,_f,_c,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,_f,_c,_e,_c,_9,_8,_8,_8,_e,_c,_e,_c,_0,_0,_0,_0,_d,_c,_c,_c,_9,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,
+      _d,_e,_c,_e,_3,_2,_2,_2,_4,_6,_4,_6,_2,_2,_2,_2,_f,_e,_e,_e,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_e,_e,_e,_e,_2,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_e,_c,_e,_c,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_b,_a,_a,_a,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_a,_8,_a,_8,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _c,_f,_d,_e,_b,_9,_b,_8,_d,_e,_c,_e,_3,_0,_2,_0,_e,_d,_f,_c,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,_f,_c,_e,_c,_9,_8,_8,_8,_e,_c,_e,_c,_0,_0,_0,_0,_d,_c,_c,_c,_9,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,_a,_9,_b,_8,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,
+      _b,_a,_a,_a,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_a,_8,_a,_8,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _d,_e,_c,_e,_7,_4,_6,_4,_4,_6,_4,_6,_6,_4,_6,_4,_f,_c,_e,_c,_5,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_e,_c,_e,_c,_4,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_c,_c,_c,_c,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_c,_c,_c,_c,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_c,_c,_c,_c,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,
+      _6,_6,_6,_6,_2,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_c,_c,_c,_c,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_c,_c,_c,_c,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _c,_d,_d,_c,_9,_b,_9,_a,_d,_c,_c,_c,_1,_2,_0,_2,_c,_f,_d,_e,_b,_9,_b,_8,_d,_e,_c,_e,_3,_0,_2,_0,_d,_e,_c,_e,_b,_8,_a,_8,_c,_e,_c,_e,_2,_0,_2,_0,_f,_c,_e,_c,_9,_8,_8,_8,_e,_c,_e,_c,_0,_0,_0,_0,_8,_b,_9,_a,_b,_9,_b,_8,_9,_a,_8,_a,_3,_0,_2,_0,_a,_9,_b,_8,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_b,_8,_a,_8,_9,_8,_8,_8,_a,_8,_a,_8,_0,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,
+      _9,_a,_8,_a,_3,_2,_2,_2,_0,_2,_0,_2,_2,_2,_2,_2,_b,_a,_a,_a,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_a,_a,_a,_a,_2,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_a,_8,_a,_8,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_b,_a,_a,_a,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_a,_8,_a,_8,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _8,_b,_9,_a,_b,_9,_b,_8,_9,_a,_8,_a,_3,_0,_2,_0,_a,_9,_b,_8,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_b,_8,_a,_8,_9,_8,_8,_8,_a,_8,_a,_8,_0,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_a,_9,_b,_8,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,
+      _b,_a,_a,_a,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_a,_8,_a,_8,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _d,_e,_c,_e,_3,_0,_2,_0,_4,_6,_4,_6,_2,_0,_2,_0,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_e,_c,_e,_c,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_c,_c,_c,_c,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _2,_2,_2,_2,_2,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_8,_9,_9,_9,_0,_0,_0,_0,_0,_2,_0,_3,_0,_0,_0,_1,_8,_b,_9,_b,_0,_0,_0,_1,_0,_3,_1,_3,_0,_1,_1,_0,_9,_b,_9,_a,_0,_2,_0,_3,_2,_1,_3,_1,_0,_3,_1,_2,_b,_9,_b,_8,_0,_0,_0,_0,_4,_6,_4,_7,_0,_0,_0,_1,_c,_f,_d,_f,_0,_2,_0,_2,_6,_4,_6,_5,_0,_2,_0,_3,_e,_d,_f,_d,_0,_2,_0,_3,_6,_5,_7,_5,_0,_3,_1,_2,_f,_d,_f,_c,_2,_0,_2,_1,_4,_5,_5,_5,_2,_1,_3,_0,_d,_d,_d,_c,
+      _0,_0,_0,_1,_c,_f,_d,_f,_8,_9,_9,_8,_5,_7,_5,_6,_0,_2,_0,_3,_e,_f,_f,_f,_8,_b,_9,_a,_7,_7,_7,_6,_0,_3,_1,_2,_f,_f,_f,_e,_9,_a,_8,_a,_7,_6,_6,_6,_2,_3,_3,_2,_f,_d,_f,_c,_b,_a,_a,_a,_7,_4,_6,_4,_4,_6,_4,_7,_a,_b,_b,_b,_c,_f,_d,_e,_3,_3,_3,_2,_6,_6,_6,_7,_a,_9,_b,_9,_e,_f,_f,_e,_3,_1,_3,_0,_6,_7,_7,_6,_b,_9,_b,_8,_f,_e,_e,_e,_3,_0,_2,_0,_6,_5,_7,_4,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,
+      _0,_0,_0,_0,_4,_6,_4,_7,_0,_0,_0,_1,_c,_f,_d,_f,_0,_2,_0,_2,_6,_4,_6,_5,_0,_2,_0,_3,_e,_d,_f,_d,_0,_2,_0,_3,_6,_5,_7,_5,_0,_3,_1,_2,_f,_d,_f,_c,_2,_0,_2,_1,_4,_5,_5,_5,_2,_1,_3,_0,_d,_d,_d,_c,_4,_6,_4,_6,_2,_0,_2,_1,_4,_6,_4,_7,_a,_9,_b,_9,_6,_4,_6,_4,_0,_0,_0,_1,_6,_4,_6,_5,_8,_9,_9,_9,_6,_4,_6,_5,_0,_1,_1,_1,_6,_5,_7,_4,_9,_9,_9,_8,_4,_4,_4,_5,_0,_1,_1,_1,_4,_5,_5,_4,_9,_9,_9,_8,
+      _4,_6,_4,_7,_a,_b,_b,_b,_c,_f,_d,_e,_3,_3,_3,_2,_6,_6,_6,_7,_a,_9,_b,_9,_e,_f,_f,_e,_3,_1,_3,_0,_6,_7,_7,_6,_b,_9,_b,_8,_f,_e,_e,_e,_3,_0,_2,_0,_6,_5,_7,_4,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,_2,_2,_2,_3,_a,_9,_b,_9,_a,_b,_b,_a,_3,_1,_3,_0,_2,_0,_2,_1,_8,_9,_9,_9,_a,_9,_b,_8,_1,_1,_1,_0,_2,_1,_3,_0,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_0,_1,_1,_0,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,
+      _0,_0,_0,_1,_c,_f,_d,_f,_8,_9,_9,_8,_5,_7,_5,_6,_0,_2,_0,_3,_e,_d,_f,_d,_8,_b,_9,_a,_7,_5,_7,_4,_0,_3,_1,_2,_f,_d,_f,_c,_9,_a,_8,_a,_7,_4,_6,_4,_2,_1,_3,_0,_d,_d,_d,_c,_b,_8,_a,_8,_5,_4,_4,_4,_4,_6,_4,_7,_e,_d,_f,_d,_c,_f,_d,_e,_7,_5,_7,_4,_6,_4,_6,_5,_c,_d,_d,_d,_e,_d,_f,_c,_5,_5,_5,_4,_6,_5,_7,_4,_d,_d,_d,_c,_f,_c,_e,_c,_5,_4,_4,_4,_4,_5,_5,_4,_d,_d,_d,_c,_d,_c,_c,_c,_5,_4,_4,_4,
+      _c,_f,_d,_e,_7,_7,_7,_6,_5,_6,_4,_6,_7,_6,_6,_6,_e,_f,_f,_e,_7,_5,_7,_4,_7,_6,_6,_6,_7,_4,_6,_4,_f,_e,_e,_e,_7,_4,_6,_4,_6,_6,_6,_6,_6,_4,_6,_4,_f,_c,_e,_c,_5,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_e,_f,_f,_e,_3,_1,_3,_0,_7,_6,_6,_6,_3,_0,_2,_0,_e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,
+      _4,_6,_4,_7,_e,_d,_f,_d,_c,_f,_d,_e,_7,_5,_7,_4,_6,_4,_6,_5,_c,_d,_d,_d,_e,_d,_f,_c,_5,_5,_5,_4,_6,_5,_7,_4,_d,_d,_d,_c,_f,_c,_e,_c,_5,_4,_4,_4,_4,_5,_5,_4,_d,_d,_d,_c,_d,_c,_c,_c,_5,_4,_4,_4,_6,_4,_6,_5,_8,_9,_9,_9,_e,_d,_f,_c,_1,_1,_1,_0,_4,_4,_4,_5,_8,_9,_9,_9,_c,_d,_d,_c,_1,_1,_1,_0,_4,_5,_5,_4,_9,_9,_9,_8,_d,_c,_c,_c,_1,_0,_0,_0,_4,_5,_5,_4,_9,_9,_9,_8,_d,_c,_c,_c,_1,_0,_0,_0,
+      _e,_f,_f,_e,_3,_1,_3,_0,_7,_6,_6,_6,_3,_0,_2,_0,_e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _0,_0,_0,_0,_4,_4,_4,_5,_0,_0,_0,_1,_c,_d,_d,_d,_0,_0,_0,_0,_4,_6,_4,_7,_0,_0,_0,_1,_c,_f,_d,_f,_0,_0,_0,_1,_4,_7,_5,_7,_0,_1,_1,_0,_d,_f,_d,_e,_0,_2,_0,_3,_6,_5,_7,_5,_0,_3,_1,_2,_f,_d,_f,_c,_4,_4,_4,_4,_0,_2,_0,_3,_4,_4,_4,_5,_8,_b,_9,_b,_4,_6,_4,_6,_2,_0,_2,_1,_4,_6,_4,_7,_a,_9,_b,_9,_4,_6,_4,_7,_2,_1,_3,_1,_4,_7,_5,_6,_b,_9,_b,_8,_6,_4,_6,_5,_0,_1,_1,_1,_6,_5,_7,_4,_9,_9,_9,_8,
+      _4,_4,_4,_5,_8,_b,_9,_b,_c,_d,_d,_c,_1,_3,_1,_2,_4,_6,_4,_7,_a,_b,_b,_b,_c,_f,_d,_e,_3,_3,_3,_2,_4,_7,_5,_6,_b,_b,_b,_a,_d,_e,_c,_e,_3,_2,_2,_2,_6,_7,_7,_6,_b,_9,_b,_8,_f,_e,_e,_e,_3,_0,_2,_0,_0,_2,_0,_3,_a,_b,_b,_b,_8,_b,_9,_a,_3,_3,_3,_2,_2,_2,_2,_3,_a,_9,_b,_9,_a,_b,_b,_a,_3,_1,_3,_0,_2,_3,_3,_2,_b,_9,_b,_8,_b,_a,_a,_a,_3,_0,_2,_0,_2,_1,_3,_0,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,
+      _4,_4,_4,_4,_0,_2,_0,_3,_4,_4,_4,_5,_8,_b,_9,_b,_4,_6,_4,_6,_2,_0,_2,_1,_4,_6,_4,_7,_a,_9,_b,_9,_4,_6,_4,_7,_2,_1,_3,_1,_4,_7,_5,_6,_b,_9,_b,_8,_6,_4,_6,_5,_0,_1,_1,_1,_6,_5,_7,_4,_9,_9,_9,_8,_0,_2,_0,_2,_2,_0,_2,_1,_0,_2,_0,_3,_a,_9,_b,_9,_2,_0,_2,_0,_0,_0,_0,_1,_2,_0,_2,_1,_8,_9,_9,_9,_2,_0,_2,_1,_0,_1,_1,_1,_2,_1,_3,_0,_9,_9,_9,_8,_0,_0,_0,_1,_0,_1,_1,_1,_0,_1,_1,_0,_9,_9,_9,_8,
+      _0,_2,_0,_3,_a,_b,_b,_b,_8,_b,_9,_a,_3,_3,_3,_2,_2,_2,_2,_3,_a,_9,_b,_9,_a,_b,_b,_a,_3,_1,_3,_0,_2,_3,_3,_2,_b,_9,_b,_8,_b,_a,_a,_a,_3,_0,_2,_0,_2,_1,_3,_0,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_2,_2,_2,_3,_a,_9,_b,_9,_a,_b,_b,_a,_3,_1,_3,_0,_2,_0,_2,_1,_8,_9,_9,_9,_a,_9,_b,_8,_1,_1,_1,_0,_2,_1,_3,_0,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_0,_1,_1,_0,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,
+      _4,_4,_4,_5,_c,_f,_d,_f,_c,_d,_d,_c,_5,_7,_5,_6,_4,_6,_4,_7,_e,_d,_f,_d,_c,_f,_d,_e,_7,_5,_7,_4,_4,_7,_5,_6,_f,_d,_f,_c,_d,_e,_c,_e,_7,_4,_6,_4,_6,_5,_7,_4,_d,_d,_d,_c,_f,_c,_e,_c,_5,_4,_4,_4,_4,_6,_4,_7,_a,_9,_b,_9,_c,_f,_d,_e,_3,_1,_3,_0,_6,_4,_6,_5,_8,_9,_9,_9,_e,_d,_f,_c,_1,_1,_1,_0,_6,_5,_7,_4,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,_4,_5,_5,_4,_9,_9,_9,_8,_d,_c,_c,_c,_1,_0,_0,_0,
+      _c,_f,_d,_e,_3,_3,_3,_2,_5,_6,_4,_6,_3,_2,_2,_2,_e,_f,_f,_e,_3,_1,_3,_0,_7,_6,_6,_6,_3,_0,_2,_0,_f,_e,_e,_e,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_a,_b,_b,_a,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _4,_6,_4,_7,_a,_9,_b,_9,_c,_f,_d,_e,_3,_1,_3,_0,_6,_4,_6,_5,_8,_9,_9,_9,_e,_d,_f,_c,_1,_1,_1,_0,_6,_5,_7,_4,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,_4,_5,_5,_4,_9,_9,_9,_8,_d,_c,_c,_c,_1,_0,_0,_0,_2,_0,_2,_1,_8,_9,_9,_9,_a,_9,_b,_8,_1,_1,_1,_0,_0,_0,_0,_1,_8,_9,_9,_9,_8,_9,_9,_8,_1,_1,_1,_0,_0,_1,_1,_0,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,_0,_1,_1,_0,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,
+      _a,_b,_b,_a,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _0,_0,_0,_0,_c,_c,_c,_d,_8,_8,_8,_9,_4,_5,_5,_5,_0,_0,_0,_0,_c,_e,_c,_f,_8,_8,_8,_9,_4,_7,_5,_7,_0,_0,_0,_1,_c,_f,_d,_f,_8,_9,_9,_8,_5,_7,_5,_6,_0,_2,_0,_3,_e,_d,_f,_d,_8,_b,_9,_a,_7,_5,_7,_4,_4,_4,_4,_4,_8,_a,_8,_b,_c,_c,_c,_d,_0,_3,_1,_3,_4,_6,_4,_6,_a,_8,_a,_9,_c,_e,_c,_f,_2,_1,_3,_1,_4,_6,_4,_7,_a,_9,_b,_9,_c,_f,_d,_e,_3,_1,_3,_0,_6,_4,_6,_5,_8,_9,_9,_9,_e,_d,_f,_c,_1,_1,_1,_0,
+      _c,_c,_c,_d,_0,_3,_1,_3,_4,_5,_5,_4,_1,_3,_1,_2,_c,_e,_c,_f,_2,_3,_3,_3,_4,_7,_5,_6,_3,_3,_3,_2,_c,_f,_d,_e,_3,_3,_3,_2,_5,_6,_4,_6,_3,_2,_2,_2,_e,_f,_f,_e,_3,_1,_3,_0,_7,_6,_6,_6,_3,_0,_2,_0,_8,_a,_8,_b,_2,_3,_3,_3,_0,_3,_1,_2,_3,_3,_3,_2,_a,_a,_a,_b,_2,_1,_3,_1,_2,_3,_3,_2,_3,_1,_3,_0,_a,_b,_b,_a,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,
+      _4,_4,_4,_4,_8,_a,_8,_b,_c,_c,_c,_d,_0,_3,_1,_3,_4,_6,_4,_6,_a,_8,_a,_9,_c,_e,_c,_f,_2,_1,_3,_1,_4,_6,_4,_7,_a,_9,_b,_9,_c,_f,_d,_e,_3,_1,_3,_0,_6,_4,_6,_5,_8,_9,_9,_9,_e,_d,_f,_c,_1,_1,_1,_0,_0,_2,_0,_2,_a,_8,_a,_9,_8,_a,_8,_b,_2,_1,_3,_1,_2,_0,_2,_0,_8,_8,_8,_9,_a,_8,_a,_9,_0,_1,_1,_1,_2,_0,_2,_1,_8,_9,_9,_9,_a,_9,_b,_8,_1,_1,_1,_0,_0,_0,_0,_1,_8,_9,_9,_9,_8,_9,_9,_8,_1,_1,_1,_0,
+      _8,_a,_8,_b,_2,_3,_3,_3,_0,_3,_1,_2,_3,_3,_3,_2,_a,_a,_a,_b,_2,_1,_3,_1,_2,_3,_3,_2,_3,_1,_3,_0,_a,_b,_b,_a,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_a,_a,_a,_b,_2,_1,_3,_1,_2,_3,_3,_2,_3,_1,_3,_0,_a,_8,_a,_9,_0,_1,_1,_1,_2,_1,_3,_0,_1,_1,_1,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,
+      _c,_c,_c,_d,_4,_7,_5,_7,_4,_5,_5,_4,_5,_7,_5,_6,_c,_e,_c,_f,_6,_5,_7,_5,_4,_7,_5,_6,_7,_5,_7,_4,_c,_f,_d,_e,_7,_5,_7,_4,_5,_6,_4,_6,_7,_4,_6,_4,_e,_d,_f,_c,_5,_5,_5,_4,_7,_4,_6,_4,_5,_4,_4,_4,_c,_e,_c,_f,_2,_1,_3,_1,_4,_7,_5,_6,_3,_1,_3,_0,_e,_c,_e,_d,_0,_1,_1,_1,_6,_5,_7,_4,_1,_1,_1,_0,_e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_c,_d,_d,_c,_1,_1,_1,_0,_5,_4,_4,_4,_1,_0,_0,_0,
+      _4,_7,_5,_6,_3,_3,_3,_2,_5,_6,_4,_6,_3,_2,_2,_2,_6,_7,_7,_6,_3,_1,_3,_0,_7,_6,_6,_6,_3,_0,_2,_0,_7,_6,_6,_6,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _c,_e,_c,_f,_2,_1,_3,_1,_4,_7,_5,_6,_3,_1,_3,_0,_e,_c,_e,_d,_0,_1,_1,_1,_6,_5,_7,_4,_1,_1,_1,_0,_e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_c,_d,_d,_c,_1,_1,_1,_0,_5,_4,_4,_4,_1,_0,_0,_0,_a,_8,_a,_9,_0,_1,_1,_1,_2,_1,_3,_0,_1,_1,_1,_0,_8,_8,_8,_9,_0,_1,_1,_1,_0,_1,_1,_0,_1,_1,_1,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,
+      _2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_0,_1,_1,_0,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _4,_4,_4,_4,_8,_8,_8,_9,_c,_c,_c,_d,_0,_1,_1,_1,_4,_4,_4,_4,_8,_a,_8,_b,_c,_c,_c,_d,_0,_3,_1,_3,_4,_4,_4,_5,_8,_b,_9,_b,_c,_d,_d,_c,_1,_3,_1,_2,_4,_6,_4,_7,_a,_9,_b,_9,_c,_f,_d,_e,_3,_1,_3,_0,_0,_0,_0,_0,_8,_a,_8,_b,_8,_8,_8,_9,_0,_3,_1,_3,_0,_2,_0,_2,_a,_8,_a,_9,_8,_a,_8,_b,_2,_1,_3,_1,_0,_2,_0,_3,_a,_9,_b,_9,_8,_b,_9,_a,_3,_1,_3,_0,_2,_0,_2,_1,_8,_9,_9,_9,_a,_9,_b,_8,_1,_1,_1,_0,
+      _8,_8,_8,_9,_0,_3,_1,_3,_0,_1,_1,_0,_1,_3,_1,_2,_8,_a,_8,_b,_2,_3,_3,_3,_0,_3,_1,_2,_3,_3,_3,_2,_8,_b,_9,_a,_3,_3,_3,_2,_1,_2,_0,_2,_3,_2,_2,_2,_a,_b,_b,_a,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_8,_a,_8,_b,_2,_3,_3,_3,_0,_3,_1,_2,_3,_3,_3,_2,_a,_a,_a,_b,_2,_1,_3,_1,_2,_3,_3,_2,_3,_1,_3,_0,_a,_b,_b,_a,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,
+      _0,_0,_0,_0,_8,_a,_8,_b,_8,_8,_8,_9,_0,_3,_1,_3,_0,_2,_0,_2,_a,_8,_a,_9,_8,_a,_8,_b,_2,_1,_3,_1,_0,_2,_0,_3,_a,_9,_b,_9,_8,_b,_9,_a,_3,_1,_3,_0,_2,_0,_2,_1,_8,_9,_9,_9,_a,_9,_b,_8,_1,_1,_1,_0,_0,_2,_0,_2,_a,_8,_a,_9,_8,_a,_8,_b,_2,_1,_3,_1,_2,_0,_2,_0,_8,_8,_8,_9,_a,_8,_a,_9,_0,_1,_1,_1,_2,_0,_2,_1,_8,_9,_9,_9,_a,_9,_b,_8,_1,_1,_1,_0,_0,_0,_0,_1,_8,_9,_9,_9,_8,_9,_9,_8,_1,_1,_1,_0,
+      _8,_a,_8,_b,_2,_3,_3,_3,_0,_3,_1,_2,_3,_3,_3,_2,_a,_a,_a,_b,_2,_1,_3,_1,_2,_3,_3,_2,_3,_1,_3,_0,_a,_b,_b,_a,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_a,_a,_a,_b,_2,_1,_3,_1,_2,_3,_3,_2,_3,_1,_3,_0,_a,_8,_a,_9,_0,_1,_1,_1,_2,_1,_3,_0,_1,_1,_1,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,
+      _c,_c,_c,_d,_0,_3,_1,_3,_4,_5,_5,_4,_1,_3,_1,_2,_c,_e,_c,_f,_2,_1,_3,_1,_4,_7,_5,_6,_3,_1,_3,_0,_c,_f,_d,_e,_3,_1,_3,_0,_5,_6,_4,_6,_3,_0,_2,_0,_e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_8,_a,_8,_b,_2,_1,_3,_1,_0,_3,_1,_2,_3,_1,_3,_0,_a,_8,_a,_9,_0,_1,_1,_1,_2,_1,_3,_0,_1,_1,_1,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,
+      _0,_3,_1,_2,_3,_3,_3,_2,_1,_2,_0,_2,_3,_2,_2,_2,_2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _8,_a,_8,_b,_2,_1,_3,_1,_0,_3,_1,_2,_3,_1,_3,_0,_a,_8,_a,_9,_0,_1,_1,_1,_2,_1,_3,_0,_1,_1,_1,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_a,_8,_a,_9,_0,_1,_1,_1,_2,_1,_3,_0,_1,_1,_1,_0,_8,_8,_8,_9,_0,_1,_1,_1,_0,_1,_1,_0,_1,_1,_1,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,
+      _2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_0,_1,_1,_0,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _0,_0,_0,_1,_c,_f,_d,_f,_8,_9,_9,_8,_d,_f,_d,_e,_0,_2,_0,_3,_e,_d,_f,_d,_8,_b,_9,_a,_f,_d,_f,_c,_0,_3,_1,_2,_f,_d,_f,_c,_9,_a,_8,_a,_f,_c,_e,_c,_2,_1,_3,_0,_d,_d,_d,_c,_b,_8,_a,_8,_d,_c,_c,_c,_4,_6,_4,_7,_a,_9,_b,_9,_c,_f,_d,_e,_b,_9,_b,_8,_6,_4,_6,_5,_8,_9,_9,_9,_e,_d,_f,_c,_9,_9,_9,_8,_6,_5,_7,_4,_9,_9,_9,_8,_f,_c,_e,_c,_9,_8,_8,_8,_4,_5,_5,_4,_9,_9,_9,_8,_d,_c,_c,_c,_9,_8,_8,_8,
+      _c,_f,_d,_e,_b,_b,_b,_a,_d,_e,_c,_e,_3,_2,_2,_2,_e,_f,_f,_e,_b,_9,_b,_8,_f,_e,_e,_e,_3,_0,_2,_0,_f,_e,_e,_e,_b,_8,_a,_8,_e,_e,_e,_e,_2,_0,_2,_0,_f,_c,_e,_c,_9,_8,_8,_8,_e,_c,_e,_c,_0,_0,_0,_0,_a,_b,_b,_a,_b,_9,_b,_8,_b,_a,_a,_a,_3,_0,_2,_0,_a,_9,_b,_8,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_b,_8,_a,_8,_9,_8,_8,_8,_a,_8,_a,_8,_0,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,
+      _4,_6,_4,_7,_a,_9,_b,_9,_c,_f,_d,_e,_b,_9,_b,_8,_6,_4,_6,_5,_8,_9,_9,_9,_e,_d,_f,_c,_9,_9,_9,_8,_6,_5,_7,_4,_9,_9,_9,_8,_f,_c,_e,_c,_9,_8,_8,_8,_4,_5,_5,_4,_9,_9,_9,_8,_d,_c,_c,_c,_9,_8,_8,_8,_2,_0,_2,_1,_8,_9,_9,_9,_a,_9,_b,_8,_9,_9,_9,_8,_0,_0,_0,_1,_8,_9,_9,_9,_8,_9,_9,_8,_9,_9,_9,_8,_0,_1,_1,_0,_9,_9,_9,_8,_9,_8,_8,_8,_9,_8,_8,_8,_0,_1,_1,_0,_9,_9,_9,_8,_9,_8,_8,_8,_9,_8,_8,_8,
+      _a,_b,_b,_a,_b,_9,_b,_8,_b,_a,_a,_a,_3,_0,_2,_0,_a,_9,_b,_8,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_b,_8,_a,_8,_9,_8,_8,_8,_a,_8,_a,_8,_0,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_a,_9,_b,_8,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,
+      _c,_f,_d,_e,_f,_d,_f,_c,_d,_e,_c,_e,_7,_4,_6,_4,_e,_d,_f,_c,_d,_d,_d,_c,_f,_c,_e,_c,_5,_4,_4,_4,_f,_c,_e,_c,_d,_c,_c,_c,_e,_c,_e,_c,_4,_4,_4,_4,_d,_c,_c,_c,_d,_c,_c,_c,_c,_c,_c,_c,_4,_4,_4,_4,_e,_d,_f,_c,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,_c,_d,_d,_c,_9,_9,_9,_8,_d,_c,_c,_c,_1,_0,_0,_0,_d,_c,_c,_c,_9,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,_d,_c,_c,_c,_9,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,
+      _f,_e,_e,_e,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_e,_c,_e,_c,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_c,_c,_c,_c,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _e,_d,_f,_c,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,_c,_d,_d,_c,_9,_9,_9,_8,_d,_c,_c,_c,_1,_0,_0,_0,_d,_c,_c,_c,_9,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,_d,_c,_c,_c,_9,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,
+      _b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _4,_4,_4,_5,_8,_b,_9,_b,_c,_d,_d,_c,_9,_b,_9,_a,_4,_6,_4,_7,_a,_9,_b,_9,_c,_f,_d,_e,_b,_9,_b,_8,_4,_7,_5,_6,_b,_9,_b,_8,_d,_e,_c,_e,_b,_8,_a,_8,_6,_5,_7,_4,_9,_9,_9,_8,_f,_c,_e,_c,_9,_8,_8,_8,_0,_2,_0,_3,_a,_9,_b,_9,_8,_b,_9,_a,_b,_9,_b,_8,_2,_0,_2,_1,_8,_9,_9,_9,_a,_9,_b,_8,_9,_9,_9,_8,_2,_1,_3,_0,_9,_9,_9,_8,_b,_8,_a,_8,_9,_8,_8,_8,_0,_1,_1,_0,_9,_9,_9,_8,_9,_8,_8,_8,_9,_8,_8,_8,
+      _8,_b,_9,_a,_b,_b,_b,_a,_9,_a,_8,_a,_3,_2,_2,_2,_a,_b,_b,_a,_b,_9,_b,_8,_b,_a,_a,_a,_3,_0,_2,_0,_b,_a,_a,_a,_b,_8,_a,_8,_a,_a,_a,_a,_2,_0,_2,_0,_b,_8,_a,_8,_9,_8,_8,_8,_a,_8,_a,_8,_0,_0,_0,_0,_a,_b,_b,_a,_b,_9,_b,_8,_b,_a,_a,_a,_3,_0,_2,_0,_a,_9,_b,_8,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_b,_8,_a,_8,_9,_8,_8,_8,_a,_8,_a,_8,_0,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,
+      _0,_2,_0,_3,_a,_9,_b,_9,_8,_b,_9,_a,_b,_9,_b,_8,_2,_0,_2,_1,_8,_9,_9,_9,_a,_9,_b,_8,_9,_9,_9,_8,_2,_1,_3,_0,_9,_9,_9,_8,_b,_8,_a,_8,_9,_8,_8,_8,_0,_1,_1,_0,_9,_9,_9,_8,_9,_8,_8,_8,_9,_8,_8,_8,_2,_0,_2,_1,_8,_9,_9,_9,_a,_9,_b,_8,_9,_9,_9,_8,_0,_0,_0,_1,_8,_9,_9,_9,_8,_9,_9,_8,_9,_9,_9,_8,_0,_1,_1,_0,_9,_9,_9,_8,_9,_8,_8,_8,_9,_8,_8,_8,_0,_1,_1,_0,_9,_9,_9,_8,_9,_8,_8,_8,_9,_8,_8,_8,
+      _a,_b,_b,_a,_b,_9,_b,_8,_b,_a,_a,_a,_3,_0,_2,_0,_a,_9,_b,_8,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_b,_8,_a,_8,_9,_8,_8,_8,_a,_8,_a,_8,_0,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_a,_9,_b,_8,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,
+      _c,_f,_d,_e,_b,_9,_b,_8,_d,_e,_c,_e,_3,_0,_2,_0,_e,_d,_f,_c,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,_f,_c,_e,_c,_9,_8,_8,_8,_e,_c,_e,_c,_0,_0,_0,_0,_d,_c,_c,_c,_9,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,_a,_9,_b,_8,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,
+      _b,_a,_a,_a,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_a,_8,_a,_8,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _a,_9,_b,_8,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,
+      _b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _c,_c,_c,_d,_8,_b,_9,_b,_c,_d,_d,_c,_1,_3,_1,_2,_c,_e,_c,_f,_a,_9,_b,_9,_c,_f,_d,_e,_3,_1,_3,_0,_c,_f,_d,_e,_b,_9,_b,_8,_d,_e,_c,_e,_3,_0,_2,_0,_e,_d,_f,_c,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,_8,_a,_8,_b,_a,_9,_b,_9,_8,_b,_9,_a,_3,_1,_3,_0,_a,_8,_a,_9,_8,_9,_9,_9,_a,_9,_b,_8,_1,_1,_1,_0,_a,_9,_b,_8,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,
+      _8,_b,_9,_a,_3,_3,_3,_2,_1,_2,_0,_2,_3,_2,_2,_2,_a,_b,_b,_a,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_b,_a,_a,_a,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_a,_b,_b,_a,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _8,_a,_8,_b,_a,_9,_b,_9,_8,_b,_9,_a,_3,_1,_3,_0,_a,_8,_a,_9,_8,_9,_9,_9,_a,_9,_b,_8,_1,_1,_1,_0,_a,_9,_b,_8,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,_a,_8,_a,_9,_8,_9,_9,_9,_a,_9,_b,_8,_1,_1,_1,_0,_8,_8,_8,_9,_8,_9,_9,_9,_8,_9,_9,_8,_1,_1,_1,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,
+      _a,_b,_b,_a,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _c,_f,_d,_e,_3,_1,_3,_0,_5,_6,_4,_6,_3,_0,_2,_0,_e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _8,_8,_8,_9,_8,_b,_9,_b,_8,_9,_9,_8,_1,_3,_1,_2,_8,_a,_8,_b,_a,_9,_b,_9,_8,_b,_9,_a,_3,_1,_3,_0,_8,_b,_9,_a,_b,_9,_b,_8,_9,_a,_8,_a,_3,_0,_2,_0,_a,_9,_b,_8,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_8,_a,_8,_b,_a,_9,_b,_9,_8,_b,_9,_a,_3,_1,_3,_0,_a,_8,_a,_9,_8,_9,_9,_9,_a,_9,_b,_8,_1,_1,_1,_0,_a,_9,_b,_8,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,
+      _8,_b,_9,_a,_3,_3,_3,_2,_1,_2,_0,_2,_3,_2,_2,_2,_a,_b,_b,_a,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_b,_a,_a,_a,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_a,_b,_b,_a,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _8,_a,_8,_b,_a,_9,_b,_9,_8,_b,_9,_a,_3,_1,_3,_0,_a,_8,_a,_9,_8,_9,_9,_9,_a,_9,_b,_8,_1,_1,_1,_0,_a,_9,_b,_8,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,_a,_8,_a,_9,_8,_9,_9,_9,_a,_9,_b,_8,_1,_1,_1,_0,_8,_8,_8,_9,_8,_9,_9,_9,_8,_9,_9,_8,_1,_1,_1,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,
+      _a,_b,_b,_a,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _8,_b,_9,_a,_3,_1,_3,_0,_1,_2,_0,_2,_3,_0,_2,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _0,_0,_0,_1,_8,_9,_9,_9,_8,_9,_9,_8,_1,_1,_1,_0,_0,_0,_0,_1,_8,_b,_9,_b,_8,_9,_9,_8,_1,_3,_1,_2,_0,_1,_1,_0,_9,_b,_9,_a,_9,_8,_8,_8,_1,_2,_0,_2,_0,_3,_1,_2,_b,_9,_b,_8,_9,_a,_8,_a,_3,_0,_2,_0,_0,_0,_0,_1,_c,_f,_d,_f,_8,_9,_9,_8,_5,_7,_5,_6,_0,_2,_0,_3,_e,_d,_f,_d,_8,_b,_9,_a,_7,_5,_7,_4,_0,_3,_1,_2,_f,_d,_f,_c,_9,_a,_8,_a,_7,_4,_6,_4,_2,_1,_3,_0,_d,_d,_d,_c,_b,_8,_a,_8,_5,_4,_4,_4,
+      _8,_9,_9,_8,_5,_7,_5,_6,_1,_0,_0,_0,_5,_6,_4,_6,_8,_b,_9,_a,_7,_7,_7,_6,_1,_2,_0,_2,_7,_6,_6,_6,_9,_a,_8,_a,_7,_6,_6,_6,_0,_2,_0,_2,_6,_6,_6,_6,_b,_a,_a,_a,_7,_4,_6,_4,_2,_2,_2,_2,_6,_4,_6,_4,_c,_f,_d,_e,_3,_3,_3,_2,_5,_6,_4,_6,_3,_2,_2,_2,_e,_f,_f,_e,_3,_1,_3,_0,_7,_6,_6,_6,_3,_0,_2,_0,_f,_e,_e,_e,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,
+      _0,_0,_0,_1,_c,_f,_d,_f,_8,_9,_9,_8,_5,_7,_5,_6,_0,_2,_0,_3,_e,_d,_f,_d,_8,_b,_9,_a,_7,_5,_7,_4,_0,_3,_1,_2,_f,_d,_f,_c,_9,_a,_8,_a,_7,_4,_6,_4,_2,_1,_3,_0,_d,_d,_d,_c,_b,_8,_a,_8,_5,_4,_4,_4,_4,_6,_4,_7,_a,_9,_b,_9,_c,_f,_d,_e,_3,_1,_3,_0,_6,_4,_6,_5,_8,_9,_9,_9,_e,_d,_f,_c,_1,_1,_1,_0,_6,_5,_7,_4,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,_4,_5,_5,_4,_9,_9,_9,_8,_d,_c,_c,_c,_1,_0,_0,_0,
+      _c,_f,_d,_e,_3,_3,_3,_2,_5,_6,_4,_6,_3,_2,_2,_2,_e,_f,_f,_e,_3,_1,_3,_0,_7,_6,_6,_6,_3,_0,_2,_0,_f,_e,_e,_e,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_a,_b,_b,_a,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _8,_9,_9,_8,_5,_7,_5,_6,_1,_0,_0,_0,_5,_6,_4,_6,_8,_b,_9,_a,_7,_5,_7,_4,_1,_2,_0,_2,_7,_4,_6,_4,_9,_a,_8,_a,_7,_4,_6,_4,_0,_2,_0,_2,_6,_4,_6,_4,_b,_8,_a,_8,_5,_4,_4,_4,_2,_0,_2,_0,_4,_4,_4,_4,_c,_f,_d,_e,_7,_5,_7,_4,_5,_6,_4,_6,_7,_4,_6,_4,_e,_d,_f,_c,_5,_5,_5,_4,_7,_4,_6,_4,_5,_4,_4,_4,_f,_c,_e,_c,_5,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_d,_c,_c,_c,_5,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,
+      _5,_6,_4,_6,_7,_6,_6,_6,_4,_6,_4,_6,_6,_6,_6,_6,_7,_6,_6,_6,_7,_4,_6,_4,_6,_6,_6,_6,_6,_4,_6,_4,_6,_6,_6,_6,_6,_4,_6,_4,_6,_6,_6,_6,_6,_4,_6,_4,_6,_4,_6,_4,_4,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_7,_6,_6,_6,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,
+      _c,_f,_d,_e,_7,_5,_7,_4,_5,_6,_4,_6,_7,_4,_6,_4,_e,_d,_f,_c,_5,_5,_5,_4,_7,_4,_6,_4,_5,_4,_4,_4,_f,_c,_e,_c,_5,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_d,_c,_c,_c,_5,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_c,_d,_d,_c,_1,_1,_1,_0,_5,_4,_4,_4,_1,_0,_0,_0,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,
+      _7,_6,_6,_6,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _0,_0,_0,_1,_c,_d,_d,_d,_8,_9,_9,_8,_5,_5,_5,_4,_0,_0,_0,_1,_c,_f,_d,_f,_8,_9,_9,_8,_5,_7,_5,_6,_0,_1,_1,_0,_d,_f,_d,_e,_9,_8,_8,_8,_5,_6,_4,_6,_0,_3,_1,_2,_f,_d,_f,_c,_9,_a,_8,_a,_7,_4,_6,_4,_4,_4,_4,_5,_8,_b,_9,_b,_c,_d,_d,_c,_1,_3,_1,_2,_4,_6,_4,_7,_a,_9,_b,_9,_c,_f,_d,_e,_3,_1,_3,_0,_4,_7,_5,_6,_b,_9,_b,_8,_d,_e,_c,_e,_3,_0,_2,_0,_6,_5,_7,_4,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,
+      _c,_d,_d,_c,_1,_3,_1,_2,_5,_4,_4,_4,_1,_2,_0,_2,_c,_f,_d,_e,_3,_3,_3,_2,_5,_6,_4,_6,_3,_2,_2,_2,_d,_e,_c,_e,_3,_2,_2,_2,_4,_6,_4,_6,_2,_2,_2,_2,_f,_e,_e,_e,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_8,_b,_9,_a,_3,_3,_3,_2,_1,_2,_0,_2,_3,_2,_2,_2,_a,_b,_b,_a,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_b,_a,_a,_a,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,
+      _4,_4,_4,_5,_8,_b,_9,_b,_c,_d,_d,_c,_1,_3,_1,_2,_4,_6,_4,_7,_a,_9,_b,_9,_c,_f,_d,_e,_3,_1,_3,_0,_4,_7,_5,_6,_b,_9,_b,_8,_d,_e,_c,_e,_3,_0,_2,_0,_6,_5,_7,_4,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,_0,_2,_0,_3,_a,_9,_b,_9,_8,_b,_9,_a,_3,_1,_3,_0,_2,_0,_2,_1,_8,_9,_9,_9,_a,_9,_b,_8,_1,_1,_1,_0,_2,_1,_3,_0,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_0,_1,_1,_0,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,
+      _8,_b,_9,_a,_3,_3,_3,_2,_1,_2,_0,_2,_3,_2,_2,_2,_a,_b,_b,_a,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_b,_a,_a,_a,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_a,_b,_b,_a,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _c,_d,_d,_c,_5,_7,_5,_6,_5,_4,_4,_4,_5,_6,_4,_6,_c,_f,_d,_e,_7,_5,_7,_4,_5,_6,_4,_6,_7,_4,_6,_4,_d,_e,_c,_e,_7,_4,_6,_4,_4,_6,_4,_6,_6,_4,_6,_4,_f,_c,_e,_c,_5,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_c,_f,_d,_e,_3,_1,_3,_0,_5,_6,_4,_6,_3,_0,_2,_0,_e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,
+      _5,_6,_4,_6,_3,_2,_2,_2,_4,_6,_4,_6,_2,_2,_2,_2,_7,_6,_6,_6,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _c,_f,_d,_e,_3,_1,_3,_0,_5,_6,_4,_6,_3,_0,_2,_0,_e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _8,_8,_8,_9,_4,_5,_5,_5,_0,_1,_1,_0,_5,_5,_5,_4,_8,_8,_8,_9,_4,_7,_5,_7,_0,_1,_1,_0,_5,_7,_5,_6,_8,_9,_9,_8,_5,_7,_5,_6,_1,_0,_0,_0,_5,_6,_4,_6,_8,_b,_9,_a,_7,_5,_7,_4,_1,_2,_0,_2,_7,_4,_6,_4,_c,_c,_c,_d,_0,_3,_1,_3,_4,_5,_5,_4,_1,_3,_1,_2,_c,_e,_c,_f,_2,_1,_3,_1,_4,_7,_5,_6,_3,_1,_3,_0,_c,_f,_d,_e,_3,_1,_3,_0,_5,_6,_4,_6,_3,_0,_2,_0,_e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,
+      _4,_5,_5,_4,_1,_3,_1,_2,_5,_4,_4,_4,_1,_2,_0,_2,_4,_7,_5,_6,_3,_3,_3,_2,_5,_6,_4,_6,_3,_2,_2,_2,_5,_6,_4,_6,_3,_2,_2,_2,_4,_6,_4,_6,_2,_2,_2,_2,_7,_6,_6,_6,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_0,_3,_1,_2,_3,_3,_3,_2,_1,_2,_0,_2,_3,_2,_2,_2,_2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,
+      _c,_c,_c,_d,_0,_3,_1,_3,_4,_5,_5,_4,_1,_3,_1,_2,_c,_e,_c,_f,_2,_1,_3,_1,_4,_7,_5,_6,_3,_1,_3,_0,_c,_f,_d,_e,_3,_1,_3,_0,_5,_6,_4,_6,_3,_0,_2,_0,_e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_8,_a,_8,_b,_2,_1,_3,_1,_0,_3,_1,_2,_3,_1,_3,_0,_a,_8,_a,_9,_0,_1,_1,_1,_2,_1,_3,_0,_1,_1,_1,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,
+      _0,_3,_1,_2,_3,_3,_3,_2,_1,_2,_0,_2,_3,_2,_2,_2,_2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _4,_5,_5,_4,_5,_7,_5,_6,_5,_4,_4,_4,_5,_6,_4,_6,_4,_7,_5,_6,_7,_5,_7,_4,_5,_6,_4,_6,_7,_4,_6,_4,_5,_6,_4,_6,_7,_4,_6,_4,_4,_6,_4,_6,_6,_4,_6,_4,_7,_4,_6,_4,_5,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_4,_7,_5,_6,_3,_1,_3,_0,_5,_6,_4,_6,_3,_0,_2,_0,_6,_5,_7,_4,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_5,_4,_4,_4,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,
+      _5,_6,_4,_6,_3,_2,_2,_2,_4,_6,_4,_6,_2,_2,_2,_2,_7,_6,_6,_6,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _4,_7,_5,_6,_3,_1,_3,_0,_5,_6,_4,_6,_3,_0,_2,_0,_6,_5,_7,_4,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_5,_4,_4,_4,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_0,_1,_1,_0,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _c,_c,_c,_d,_0,_1,_1,_1,_4,_5,_5,_4,_1,_1,_1,_0,_c,_c,_c,_d,_0,_3,_1,_3,_4,_5,_5,_4,_1,_3,_1,_2,_c,_d,_d,_c,_1,_3,_1,_2,_5,_4,_4,_4,_1,_2,_0,_2,_c,_f,_d,_e,_3,_1,_3,_0,_5,_6,_4,_6,_3,_0,_2,_0,_8,_8,_8,_9,_0,_3,_1,_3,_0,_1,_1,_0,_1,_3,_1,_2,_8,_a,_8,_b,_2,_1,_3,_1,_0,_3,_1,_2,_3,_1,_3,_0,_8,_b,_9,_a,_3,_1,_3,_0,_1,_2,_0,_2,_3,_0,_2,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,
+      _0,_1,_1,_0,_1,_3,_1,_2,_1,_0,_0,_0,_1,_2,_0,_2,_0,_3,_1,_2,_3,_3,_3,_2,_1,_2,_0,_2,_3,_2,_2,_2,_1,_2,_0,_2,_3,_2,_2,_2,_0,_2,_0,_2,_2,_2,_2,_2,_3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_0,_3,_1,_2,_3,_3,_3,_2,_1,_2,_0,_2,_3,_2,_2,_2,_2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,
+      _8,_8,_8,_9,_0,_3,_1,_3,_0,_1,_1,_0,_1,_3,_1,_2,_8,_a,_8,_b,_2,_1,_3,_1,_0,_3,_1,_2,_3,_1,_3,_0,_8,_b,_9,_a,_3,_1,_3,_0,_1,_2,_0,_2,_3,_0,_2,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_a,_8,_b,_2,_1,_3,_1,_0,_3,_1,_2,_3,_1,_3,_0,_a,_8,_a,_9,_0,_1,_1,_1,_2,_1,_3,_0,_1,_1,_1,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,
+      _0,_3,_1,_2,_3,_3,_3,_2,_1,_2,_0,_2,_3,_2,_2,_2,_2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _4,_5,_5,_4,_1,_3,_1,_2,_5,_4,_4,_4,_1,_2,_0,_2,_4,_7,_5,_6,_3,_1,_3,_0,_5,_6,_4,_6,_3,_0,_2,_0,_5,_6,_4,_6,_3,_0,_2,_0,_4,_6,_4,_6,_2,_0,_2,_0,_7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_0,_3,_1,_2,_3,_1,_3,_0,_1,_2,_0,_2,_3,_0,_2,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _1,_2,_0,_2,_3,_2,_2,_2,_0,_2,_0,_2,_2,_2,_2,_2,_3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _0,_3,_1,_2,_3,_1,_3,_0,_1,_2,_0,_2,_3,_0,_2,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_0,_1,_1,_0,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _8,_9,_9,_8,_d,_f,_d,_e,_9,_8,_8,_8,_5,_6,_4,_6,_8,_b,_9,_a,_f,_d,_f,_c,_9,_a,_8,_a,_7,_4,_6,_4,_9,_a,_8,_a,_f,_c,_e,_c,_8,_a,_8,_a,_6,_4,_6,_4,_b,_8,_a,_8,_d,_c,_c,_c,_a,_8,_a,_8,_4,_4,_4,_4,_c,_f,_d,_e,_b,_9,_b,_8,_d,_e,_c,_e,_3,_0,_2,_0,_e,_d,_f,_c,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,_f,_c,_e,_c,_9,_8,_8,_8,_e,_c,_e,_c,_0,_0,_0,_0,_d,_c,_c,_c,_9,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,
+      _d,_e,_c,_e,_3,_2,_2,_2,_4,_6,_4,_6,_2,_2,_2,_2,_f,_e,_e,_e,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_e,_e,_e,_e,_2,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_e,_c,_e,_c,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_b,_a,_a,_a,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_a,_8,_a,_8,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _c,_f,_d,_e,_b,_9,_b,_8,_d,_e,_c,_e,_3,_0,_2,_0,_e,_d,_f,_c,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,_f,_c,_e,_c,_9,_8,_8,_8,_e,_c,_e,_c,_0,_0,_0,_0,_d,_c,_c,_c,_9,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,_a,_9,_b,_8,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,
+      _b,_a,_a,_a,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_a,_8,_a,_8,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _d,_e,_c,_e,_7,_4,_6,_4,_4,_6,_4,_6,_6,_4,_6,_4,_f,_c,_e,_c,_5,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_e,_c,_e,_c,_4,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_c,_c,_c,_c,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_c,_c,_c,_c,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_c,_c,_c,_c,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,
+      _6,_6,_6,_6,_2,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_c,_c,_c,_c,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_c,_c,_c,_c,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _c,_d,_d,_c,_9,_b,_9,_a,_d,_c,_c,_c,_1,_2,_0,_2,_c,_f,_d,_e,_b,_9,_b,_8,_d,_e,_c,_e,_3,_0,_2,_0,_d,_e,_c,_e,_b,_8,_a,_8,_c,_e,_c,_e,_2,_0,_2,_0,_f,_c,_e,_c,_9,_8,_8,_8,_e,_c,_e,_c,_0,_0,_0,_0,_8,_b,_9,_a,_b,_9,_b,_8,_9,_a,_8,_a,_3,_0,_2,_0,_a,_9,_b,_8,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_b,_8,_a,_8,_9,_8,_8,_8,_a,_8,_a,_8,_0,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,
+      _9,_a,_8,_a,_3,_2,_2,_2,_0,_2,_0,_2,_2,_2,_2,_2,_b,_a,_a,_a,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_a,_a,_a,_a,_2,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_a,_8,_a,_8,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_b,_a,_a,_a,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_a,_8,_a,_8,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _8,_b,_9,_a,_b,_9,_b,_8,_9,_a,_8,_a,_3,_0,_2,_0,_a,_9,_b,_8,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_b,_8,_a,_8,_9,_8,_8,_8,_a,_8,_a,_8,_0,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_a,_9,_b,_8,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,
+      _b,_a,_a,_a,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_a,_8,_a,_8,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _d,_e,_c,_e,_3,_0,_2,_0,_4,_6,_4,_6,_2,_0,_2,_0,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_e,_c,_e,_c,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_c,_c,_c,_c,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _2,_2,_2,_2,_2,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _c,_d,_d,_c,_1,_3,_1,_2,_5,_4,_4,_4,_1,_2,_0,_2,_c,_f,_d,_e,_3,_1,_3,_0,_5,_6,_4,_6,_3,_0,_2,_0,_d,_e,_c,_e,_3,_0,_2,_0,_4,_6,_4,_6,_2,_0,_2,_0,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_8,_b,_9,_a,_3,_1,_3,_0,_1,_2,_0,_2,_3,_0,_2,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _1,_2,_0,_2,_3,_2,_2,_2,_0,_2,_0,_2,_2,_2,_2,_2,_3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _8,_b,_9,_a,_3,_1,_3,_0,_1,_2,_0,_2,_3,_0,_2,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _5,_6,_4,_6,_3,_0,_2,_0,_4,_6,_4,_6,_2,_0,_2,_0,_7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _2,_2,_2,_2,_2,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _8,_9,_9,_8,_1,_3,_1,_2,_1,_0,_0,_0,_1,_2,_0,_2,_8,_b,_9,_a,_3,_1,_3,_0,_1,_2,_0,_2,_3,_0,_2,_0,_9,_a,_8,_a,_3,_0,_2,_0,_0,_2,_0,_2,_2,_0,_2,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_8,_b,_9,_a,_3,_1,_3,_0,_1,_2,_0,_2,_3,_0,_2,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _1,_2,_0,_2,_3,_2,_2,_2,_0,_2,_0,_2,_2,_2,_2,_2,_3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _8,_b,_9,_a,_3,_1,_3,_0,_1,_2,_0,_2,_3,_0,_2,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _1,_2,_0,_2,_3,_0,_2,_0,_0,_2,_0,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _2,_2,_2,_2,_2,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_8,_9,_9,_9,_0,_0,_0,_0,_0,_2,_0,_3,_0,_0,_0,_1,_8,_b,_9,_b,_0,_0,_0,_1,_0,_3,_1,_3,_0,_1,_1,_0,_9,_b,_9,_a,_0,_2,_0,_3,_2,_1,_3,_1,_0,_3,_1,_2,_b,_9,_b,_8,_0,_0,_0,_0,_0,_2,_0,_3,_0,_0,_0,_1,_8,_b,_9,_b,_0,_2,_0,_2,_2,_0,_2,_1,_0,_2,_0,_3,_a,_9,_b,_9,_0,_2,_0,_3,_2,_1,_3,_1,_0,_3,_1,_2,_b,_9,_b,_8,_2,_0,_2,_1,_0,_1,_1,_1,_2,_1,_3,_0,_9,_9,_9,_8,
+      _0,_0,_0,_1,_8,_b,_9,_b,_8,_9,_9,_8,_1,_3,_1,_2,_0,_2,_0,_3,_a,_b,_b,_b,_8,_b,_9,_a,_3,_3,_3,_2,_0,_3,_1,_2,_b,_b,_b,_a,_9,_a,_8,_a,_3,_2,_2,_2,_2,_3,_3,_2,_b,_9,_b,_8,_b,_a,_a,_a,_3,_0,_2,_0,_0,_2,_0,_3,_e,_f,_f,_f,_8,_b,_9,_a,_7,_7,_7,_6,_2,_2,_2,_3,_e,_d,_f,_d,_a,_b,_b,_a,_7,_5,_7,_4,_2,_3,_3,_2,_f,_d,_f,_c,_b,_a,_a,_a,_7,_4,_6,_4,_2,_1,_3,_0,_d,_d,_d,_c,_b,_8,_a,_8,_5,_4,_4,_4,
+      _0,_0,_0,_0,_0,_2,_0,_3,_0,_0,_0,_1,_8,_b,_9,_b,_0,_2,_0,_2,_2,_0,_2,_1,_0,_2,_0,_3,_a,_9,_b,_9,_0,_2,_0,_3,_2,_1,_3,_1,_0,_3,_1,_2,_b,_9,_b,_8,_2,_0,_2,_1,_0,_1,_1,_1,_2,_1,_3,_0,_9,_9,_9,_8,_0,_2,_0,_2,_6,_4,_6,_5,_0,_2,_0,_3,_e,_d,_f,_d,_2,_0,_2,_0,_4,_4,_4,_5,_2,_0,_2,_1,_c,_d,_d,_d,_2,_0,_2,_1,_4,_5,_5,_5,_2,_1,_3,_0,_d,_d,_d,_c,_0,_0,_0,_1,_4,_5,_5,_5,_0,_1,_1,_0,_d,_d,_d,_c,
+      _0,_2,_0,_3,_e,_f,_f,_f,_8,_b,_9,_a,_7,_7,_7,_6,_2,_2,_2,_3,_e,_d,_f,_d,_a,_b,_b,_a,_7,_5,_7,_4,_2,_3,_3,_2,_f,_d,_f,_c,_b,_a,_a,_a,_7,_4,_6,_4,_2,_1,_3,_0,_d,_d,_d,_c,_b,_8,_a,_8,_5,_4,_4,_4,_6,_6,_6,_7,_a,_9,_b,_9,_e,_f,_f,_e,_3,_1,_3,_0,_6,_4,_6,_5,_8,_9,_9,_9,_e,_d,_f,_c,_1,_1,_1,_0,_6,_5,_7,_4,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,_4,_5,_5,_4,_9,_9,_9,_8,_d,_c,_c,_c,_1,_0,_0,_0,
+      _0,_0,_0,_1,_8,_b,_9,_b,_8,_9,_9,_8,_1,_3,_1,_2,_0,_2,_0,_3,_a,_9,_b,_9,_8,_b,_9,_a,_3,_1,_3,_0,_0,_3,_1,_2,_b,_9,_b,_8,_9,_a,_8,_a,_3,_0,_2,_0,_2,_1,_3,_0,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_0,_2,_0,_3,_e,_d,_f,_d,_8,_b,_9,_a,_7,_5,_7,_4,_2,_0,_2,_1,_c,_d,_d,_d,_a,_9,_b,_8,_5,_5,_5,_4,_2,_1,_3,_0,_d,_d,_d,_c,_b,_8,_a,_8,_5,_4,_4,_4,_0,_1,_1,_0,_d,_d,_d,_c,_9,_8,_8,_8,_5,_4,_4,_4,
+      _8,_b,_9,_a,_7,_7,_7,_6,_1,_2,_0,_2,_7,_6,_6,_6,_a,_b,_b,_a,_7,_5,_7,_4,_3,_2,_2,_2,_7,_4,_6,_4,_b,_a,_a,_a,_7,_4,_6,_4,_2,_2,_2,_2,_6,_4,_6,_4,_b,_8,_a,_8,_5,_4,_4,_4,_2,_0,_2,_0,_4,_4,_4,_4,_e,_f,_f,_e,_7,_5,_7,_4,_7,_6,_6,_6,_7,_4,_6,_4,_e,_d,_f,_c,_5,_5,_5,_4,_7,_4,_6,_4,_5,_4,_4,_4,_f,_c,_e,_c,_5,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_d,_c,_c,_c,_5,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,
+      _0,_2,_0,_3,_e,_d,_f,_d,_8,_b,_9,_a,_7,_5,_7,_4,_2,_0,_2,_1,_c,_d,_d,_d,_a,_9,_b,_8,_5,_5,_5,_4,_2,_1,_3,_0,_d,_d,_d,_c,_b,_8,_a,_8,_5,_4,_4,_4,_0,_1,_1,_0,_d,_d,_d,_c,_9,_8,_8,_8,_5,_4,_4,_4,_6,_4,_6,_5,_c,_d,_d,_d,_e,_d,_f,_c,_5,_5,_5,_4,_4,_4,_4,_5,_c,_d,_d,_d,_c,_d,_d,_c,_5,_5,_5,_4,_4,_5,_5,_4,_d,_d,_d,_c,_d,_c,_c,_c,_5,_4,_4,_4,_4,_5,_5,_4,_d,_d,_d,_c,_d,_c,_c,_c,_5,_4,_4,_4,
+      _e,_f,_f,_e,_7,_5,_7,_4,_7,_6,_6,_6,_7,_4,_6,_4,_e,_d,_f,_c,_5,_5,_5,_4,_7,_4,_6,_4,_5,_4,_4,_4,_f,_c,_e,_c,_5,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_d,_c,_c,_c,_5,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_c,_d,_d,_c,_1,_1,_1,_0,_5,_4,_4,_4,_1,_0,_0,_0,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,
+      _0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_8,_9,_9,_9,_0,_0,_0,_0,_0,_2,_0,_3,_0,_0,_0,_1,_8,_b,_9,_b,_0,_0,_0,_1,_0,_3,_1,_3,_0,_1,_1,_0,_9,_b,_9,_a,_0,_2,_0,_3,_2,_1,_3,_1,_0,_3,_1,_2,_b,_9,_b,_8,_0,_0,_0,_0,_4,_6,_4,_7,_0,_0,_0,_1,_c,_f,_d,_f,_0,_2,_0,_2,_6,_4,_6,_5,_0,_2,_0,_3,_e,_d,_f,_d,_0,_2,_0,_3,_6,_5,_7,_5,_0,_3,_1,_2,_f,_d,_f,_c,_2,_0,_2,_1,_4,_5,_5,_5,_2,_1,_3,_0,_d,_d,_d,_c,
+      _0,_0,_0,_1,_c,_f,_d,_f,_8,_9,_9,_8,_5,_7,_5,_6,_0,_2,_0,_3,_e,_f,_f,_f,_8,_b,_9,_a,_7,_7,_7,_6,_0,_3,_1,_2,_f,_f,_f,_e,_9,_a,_8,_a,_7,_6,_6,_6,_2,_3,_3,_2,_f,_d,_f,_c,_b,_a,_a,_a,_7,_4,_6,_4,_4,_6,_4,_7,_a,_b,_b,_b,_c,_f,_d,_e,_3,_3,_3,_2,_6,_6,_6,_7,_a,_9,_b,_9,_e,_f,_f,_e,_3,_1,_3,_0,_6,_7,_7,_6,_b,_9,_b,_8,_f,_e,_e,_e,_3,_0,_2,_0,_6,_5,_7,_4,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,
+      _0,_0,_0,_0,_4,_6,_4,_7,_0,_0,_0,_1,_c,_f,_d,_f,_0,_2,_0,_2,_6,_4,_6,_5,_0,_2,_0,_3,_e,_d,_f,_d,_0,_2,_0,_3,_6,_5,_7,_5,_0,_3,_1,_2,_f,_d,_f,_c,_2,_0,_2,_1,_4,_5,_5,_5,_2,_1,_3,_0,_d,_d,_d,_c,_4,_6,_4,_6,_2,_0,_2,_1,_4,_6,_4,_7,_a,_9,_b,_9,_6,_4,_6,_4,_0,_0,_0,_1,_6,_4,_6,_5,_8,_9,_9,_9,_6,_4,_6,_5,_0,_1,_1,_1,_6,_5,_7,_4,_9,_9,_9,_8,_4,_4,_4,_5,_0,_1,_1,_1,_4,_5,_5,_4,_9,_9,_9,_8,
+      _4,_6,_4,_7,_a,_b,_b,_b,_c,_f,_d,_e,_3,_3,_3,_2,_6,_6,_6,_7,_a,_9,_b,_9,_e,_f,_f,_e,_3,_1,_3,_0,_6,_7,_7,_6,_b,_9,_b,_8,_f,_e,_e,_e,_3,_0,_2,_0,_6,_5,_7,_4,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,_2,_2,_2,_3,_a,_9,_b,_9,_a,_b,_b,_a,_3,_1,_3,_0,_2,_0,_2,_1,_8,_9,_9,_9,_a,_9,_b,_8,_1,_1,_1,_0,_2,_1,_3,_0,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_0,_1,_1,_0,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,
+      _0,_0,_0,_1,_c,_f,_d,_f,_8,_9,_9,_8,_5,_7,_5,_6,_0,_2,_0,_3,_e,_d,_f,_d,_8,_b,_9,_a,_7,_5,_7,_4,_0,_3,_1,_2,_f,_d,_f,_c,_9,_a,_8,_a,_7,_4,_6,_4,_2,_1,_3,_0,_d,_d,_d,_c,_b,_8,_a,_8,_5,_4,_4,_4,_4,_6,_4,_7,_e,_d,_f,_d,_c,_f,_d,_e,_7,_5,_7,_4,_6,_4,_6,_5,_c,_d,_d,_d,_e,_d,_f,_c,_5,_5,_5,_4,_6,_5,_7,_4,_d,_d,_d,_c,_f,_c,_e,_c,_5,_4,_4,_4,_4,_5,_5,_4,_d,_d,_d,_c,_d,_c,_c,_c,_5,_4,_4,_4,
+      _c,_f,_d,_e,_7,_7,_7,_6,_5,_6,_4,_6,_7,_6,_6,_6,_e,_f,_f,_e,_7,_5,_7,_4,_7,_6,_6,_6,_7,_4,_6,_4,_f,_e,_e,_e,_7,_4,_6,_4,_6,_6,_6,_6,_6,_4,_6,_4,_f,_c,_e,_c,_5,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_e,_f,_f,_e,_3,_1,_3,_0,_7,_6,_6,_6,_3,_0,_2,_0,_e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,
+      _4,_6,_4,_7,_e,_d,_f,_d,_c,_f,_d,_e,_7,_5,_7,_4,_6,_4,_6,_5,_c,_d,_d,_d,_e,_d,_f,_c,_5,_5,_5,_4,_6,_5,_7,_4,_d,_d,_d,_c,_f,_c,_e,_c,_5,_4,_4,_4,_4,_5,_5,_4,_d,_d,_d,_c,_d,_c,_c,_c,_5,_4,_4,_4,_6,_4,_6,_5,_8,_9,_9,_9,_e,_d,_f,_c,_1,_1,_1,_0,_4,_4,_4,_5,_8,_9,_9,_9,_c,_d,_d,_c,_1,_1,_1,_0,_4,_5,_5,_4,_9,_9,_9,_8,_d,_c,_c,_c,_1,_0,_0,_0,_4,_5,_5,_4,_9,_9,_9,_8,_d,_c,_c,_c,_1,_0,_0,_0,
+      _e,_f,_f,_e,_3,_1,_3,_0,_7,_6,_6,_6,_3,_0,_2,_0,_e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _0,_0,_0,_0,_8,_8,_8,_9,_8,_8,_8,_9,_0,_1,_1,_1,_0,_0,_0,_0,_8,_a,_8,_b,_8,_8,_8,_9,_0,_3,_1,_3,_0,_0,_0,_1,_8,_b,_9,_b,_8,_9,_9,_8,_1,_3,_1,_2,_0,_2,_0,_3,_a,_9,_b,_9,_8,_b,_9,_a,_3,_1,_3,_0,_0,_0,_0,_0,_c,_e,_c,_f,_8,_8,_8,_9,_4,_7,_5,_7,_0,_2,_0,_2,_e,_c,_e,_d,_8,_a,_8,_b,_6,_5,_7,_5,_0,_2,_0,_3,_e,_d,_f,_d,_8,_b,_9,_a,_7,_5,_7,_4,_2,_0,_2,_1,_c,_d,_d,_d,_a,_9,_b,_8,_5,_5,_5,_4,
+      _8,_8,_8,_9,_4,_7,_5,_7,_0,_1,_1,_0,_5,_7,_5,_6,_8,_a,_8,_b,_6,_7,_7,_7,_0,_3,_1,_2,_7,_7,_7,_6,_8,_b,_9,_a,_7,_7,_7,_6,_1,_2,_0,_2,_7,_6,_6,_6,_a,_b,_b,_a,_7,_5,_7,_4,_3,_2,_2,_2,_7,_4,_6,_4,_c,_e,_c,_f,_2,_3,_3,_3,_4,_7,_5,_6,_3,_3,_3,_2,_e,_e,_e,_f,_2,_1,_3,_1,_6,_7,_7,_6,_3,_1,_3,_0,_e,_f,_f,_e,_3,_1,_3,_0,_7,_6,_6,_6,_3,_0,_2,_0,_e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,
+      _0,_0,_0,_0,_c,_e,_c,_f,_8,_8,_8,_9,_4,_7,_5,_7,_0,_2,_0,_2,_e,_c,_e,_d,_8,_a,_8,_b,_6,_5,_7,_5,_0,_2,_0,_3,_e,_d,_f,_d,_8,_b,_9,_a,_7,_5,_7,_4,_2,_0,_2,_1,_c,_d,_d,_d,_a,_9,_b,_8,_5,_5,_5,_4,_4,_6,_4,_6,_a,_8,_a,_9,_c,_e,_c,_f,_2,_1,_3,_1,_6,_4,_6,_4,_8,_8,_8,_9,_e,_c,_e,_d,_0,_1,_1,_1,_6,_4,_6,_5,_8,_9,_9,_9,_e,_d,_f,_c,_1,_1,_1,_0,_4,_4,_4,_5,_8,_9,_9,_9,_c,_d,_d,_c,_1,_1,_1,_0,
+      _c,_e,_c,_f,_2,_3,_3,_3,_4,_7,_5,_6,_3,_3,_3,_2,_e,_e,_e,_f,_2,_1,_3,_1,_6,_7,_7,_6,_3,_1,_3,_0,_e,_f,_f,_e,_3,_1,_3,_0,_7,_6,_6,_6,_3,_0,_2,_0,_e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_a,_a,_a,_b,_2,_1,_3,_1,_2,_3,_3,_2,_3,_1,_3,_0,_a,_8,_a,_9,_0,_1,_1,_1,_2,_1,_3,_0,_1,_1,_1,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,
+      _8,_8,_8,_9,_4,_7,_5,_7,_0,_1,_1,_0,_5,_7,_5,_6,_8,_a,_8,_b,_6,_5,_7,_5,_0,_3,_1,_2,_7,_5,_7,_4,_8,_b,_9,_a,_7,_5,_7,_4,_1,_2,_0,_2,_7,_4,_6,_4,_a,_9,_b,_8,_5,_5,_5,_4,_3,_0,_2,_0,_5,_4,_4,_4,_c,_e,_c,_f,_6,_5,_7,_5,_4,_7,_5,_6,_7,_5,_7,_4,_e,_c,_e,_d,_4,_5,_5,_5,_6,_5,_7,_4,_5,_5,_5,_4,_e,_d,_f,_c,_5,_5,_5,_4,_7,_4,_6,_4,_5,_4,_4,_4,_c,_d,_d,_c,_5,_5,_5,_4,_5,_4,_4,_4,_5,_4,_4,_4,
+      _4,_7,_5,_6,_7,_7,_7,_6,_5,_6,_4,_6,_7,_6,_6,_6,_6,_7,_7,_6,_7,_5,_7,_4,_7,_6,_6,_6,_7,_4,_6,_4,_7,_6,_6,_6,_7,_4,_6,_4,_6,_6,_6,_6,_6,_4,_6,_4,_7,_4,_6,_4,_5,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_6,_7,_7,_6,_3,_1,_3,_0,_7,_6,_6,_6,_3,_0,_2,_0,_6,_5,_7,_4,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_5,_4,_4,_4,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,
+      _c,_e,_c,_f,_6,_5,_7,_5,_4,_7,_5,_6,_7,_5,_7,_4,_e,_c,_e,_d,_4,_5,_5,_5,_6,_5,_7,_4,_5,_5,_5,_4,_e,_d,_f,_c,_5,_5,_5,_4,_7,_4,_6,_4,_5,_4,_4,_4,_c,_d,_d,_c,_5,_5,_5,_4,_5,_4,_4,_4,_5,_4,_4,_4,_e,_c,_e,_d,_0,_1,_1,_1,_6,_5,_7,_4,_1,_1,_1,_0,_c,_c,_c,_d,_0,_1,_1,_1,_4,_5,_5,_4,_1,_1,_1,_0,_c,_d,_d,_c,_1,_1,_1,_0,_5,_4,_4,_4,_1,_0,_0,_0,_c,_d,_d,_c,_1,_1,_1,_0,_5,_4,_4,_4,_1,_0,_0,_0,
+      _6,_7,_7,_6,_3,_1,_3,_0,_7,_6,_6,_6,_3,_0,_2,_0,_6,_5,_7,_4,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_5,_4,_4,_4,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_0,_1,_1,_0,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _0,_0,_0,_0,_c,_c,_c,_d,_8,_8,_8,_9,_4,_5,_5,_5,_0,_0,_0,_0,_c,_e,_c,_f,_8,_8,_8,_9,_4,_7,_5,_7,_0,_0,_0,_1,_c,_f,_d,_f,_8,_9,_9,_8,_5,_7,_5,_6,_0,_2,_0,_3,_e,_d,_f,_d,_8,_b,_9,_a,_7,_5,_7,_4,_4,_4,_4,_4,_8,_a,_8,_b,_c,_c,_c,_d,_0,_3,_1,_3,_4,_6,_4,_6,_a,_8,_a,_9,_c,_e,_c,_f,_2,_1,_3,_1,_4,_6,_4,_7,_a,_9,_b,_9,_c,_f,_d,_e,_3,_1,_3,_0,_6,_4,_6,_5,_8,_9,_9,_9,_e,_d,_f,_c,_1,_1,_1,_0,
+      _c,_c,_c,_d,_0,_3,_1,_3,_4,_5,_5,_4,_1,_3,_1,_2,_c,_e,_c,_f,_2,_3,_3,_3,_4,_7,_5,_6,_3,_3,_3,_2,_c,_f,_d,_e,_3,_3,_3,_2,_5,_6,_4,_6,_3,_2,_2,_2,_e,_f,_f,_e,_3,_1,_3,_0,_7,_6,_6,_6,_3,_0,_2,_0,_8,_a,_8,_b,_2,_3,_3,_3,_0,_3,_1,_2,_3,_3,_3,_2,_a,_a,_a,_b,_2,_1,_3,_1,_2,_3,_3,_2,_3,_1,_3,_0,_a,_b,_b,_a,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,
+      _4,_4,_4,_4,_8,_a,_8,_b,_c,_c,_c,_d,_0,_3,_1,_3,_4,_6,_4,_6,_a,_8,_a,_9,_c,_e,_c,_f,_2,_1,_3,_1,_4,_6,_4,_7,_a,_9,_b,_9,_c,_f,_d,_e,_3,_1,_3,_0,_6,_4,_6,_5,_8,_9,_9,_9,_e,_d,_f,_c,_1,_1,_1,_0,_0,_2,_0,_2,_a,_8,_a,_9,_8,_a,_8,_b,_2,_1,_3,_1,_2,_0,_2,_0,_8,_8,_8,_9,_a,_8,_a,_9,_0,_1,_1,_1,_2,_0,_2,_1,_8,_9,_9,_9,_a,_9,_b,_8,_1,_1,_1,_0,_0,_0,_0,_1,_8,_9,_9,_9,_8,_9,_9,_8,_1,_1,_1,_0,
+      _8,_a,_8,_b,_2,_3,_3,_3,_0,_3,_1,_2,_3,_3,_3,_2,_a,_a,_a,_b,_2,_1,_3,_1,_2,_3,_3,_2,_3,_1,_3,_0,_a,_b,_b,_a,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_a,_a,_a,_b,_2,_1,_3,_1,_2,_3,_3,_2,_3,_1,_3,_0,_a,_8,_a,_9,_0,_1,_1,_1,_2,_1,_3,_0,_1,_1,_1,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,
+      _c,_c,_c,_d,_4,_7,_5,_7,_4,_5,_5,_4,_5,_7,_5,_6,_c,_e,_c,_f,_6,_5,_7,_5,_4,_7,_5,_6,_7,_5,_7,_4,_c,_f,_d,_e,_7,_5,_7,_4,_5,_6,_4,_6,_7,_4,_6,_4,_e,_d,_f,_c,_5,_5,_5,_4,_7,_4,_6,_4,_5,_4,_4,_4,_c,_e,_c,_f,_2,_1,_3,_1,_4,_7,_5,_6,_3,_1,_3,_0,_e,_c,_e,_d,_0,_1,_1,_1,_6,_5,_7,_4,_1,_1,_1,_0,_e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_c,_d,_d,_c,_1,_1,_1,_0,_5,_4,_4,_4,_1,_0,_0,_0,
+      _4,_7,_5,_6,_3,_3,_3,_2,_5,_6,_4,_6,_3,_2,_2,_2,_6,_7,_7,_6,_3,_1,_3,_0,_7,_6,_6,_6,_3,_0,_2,_0,_7,_6,_6,_6,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _c,_e,_c,_f,_2,_1,_3,_1,_4,_7,_5,_6,_3,_1,_3,_0,_e,_c,_e,_d,_0,_1,_1,_1,_6,_5,_7,_4,_1,_1,_1,_0,_e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_c,_d,_d,_c,_1,_1,_1,_0,_5,_4,_4,_4,_1,_0,_0,_0,_a,_8,_a,_9,_0,_1,_1,_1,_2,_1,_3,_0,_1,_1,_1,_0,_8,_8,_8,_9,_0,_1,_1,_1,_0,_1,_1,_0,_1,_1,_1,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,
+      _2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_0,_1,_1,_0,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _0,_0,_0,_1,_8,_b,_9,_b,_8,_9,_9,_8,_9,_b,_9,_a,_0,_2,_0,_3,_a,_9,_b,_9,_8,_b,_9,_a,_b,_9,_b,_8,_0,_3,_1,_2,_b,_9,_b,_8,_9,_a,_8,_a,_b,_8,_a,_8,_2,_1,_3,_0,_9,_9,_9,_8,_b,_8,_a,_8,_9,_8,_8,_8,_0,_2,_0,_3,_e,_d,_f,_d,_8,_b,_9,_a,_f,_d,_f,_c,_2,_0,_2,_1,_c,_d,_d,_d,_a,_9,_b,_8,_d,_d,_d,_c,_2,_1,_3,_0,_d,_d,_d,_c,_b,_8,_a,_8,_d,_c,_c,_c,_0,_1,_1,_0,_d,_d,_d,_c,_9,_8,_8,_8,_d,_c,_c,_c,
+      _8,_b,_9,_a,_f,_f,_f,_e,_9,_a,_8,_a,_7,_6,_6,_6,_a,_b,_b,_a,_f,_d,_f,_c,_b,_a,_a,_a,_7,_4,_6,_4,_b,_a,_a,_a,_f,_c,_e,_c,_a,_a,_a,_a,_6,_4,_6,_4,_b,_8,_a,_8,_d,_c,_c,_c,_a,_8,_a,_8,_4,_4,_4,_4,_e,_f,_f,_e,_b,_9,_b,_8,_f,_e,_e,_e,_3,_0,_2,_0,_e,_d,_f,_c,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,_f,_c,_e,_c,_9,_8,_8,_8,_e,_c,_e,_c,_0,_0,_0,_0,_d,_c,_c,_c,_9,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,
+      _0,_2,_0,_3,_e,_d,_f,_d,_8,_b,_9,_a,_f,_d,_f,_c,_2,_0,_2,_1,_c,_d,_d,_d,_a,_9,_b,_8,_d,_d,_d,_c,_2,_1,_3,_0,_d,_d,_d,_c,_b,_8,_a,_8,_d,_c,_c,_c,_0,_1,_1,_0,_d,_d,_d,_c,_9,_8,_8,_8,_d,_c,_c,_c,_6,_4,_6,_5,_8,_9,_9,_9,_e,_d,_f,_c,_9,_9,_9,_8,_4,_4,_4,_5,_8,_9,_9,_9,_c,_d,_d,_c,_9,_9,_9,_8,_4,_5,_5,_4,_9,_9,_9,_8,_d,_c,_c,_c,_9,_8,_8,_8,_4,_5,_5,_4,_9,_9,_9,_8,_d,_c,_c,_c,_9,_8,_8,_8,
+      _e,_f,_f,_e,_b,_9,_b,_8,_f,_e,_e,_e,_3,_0,_2,_0,_e,_d,_f,_c,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,_f,_c,_e,_c,_9,_8,_8,_8,_e,_c,_e,_c,_0,_0,_0,_0,_d,_c,_c,_c,_9,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,_a,_9,_b,_8,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,
+      _8,_b,_9,_a,_f,_d,_f,_c,_9,_a,_8,_a,_7,_4,_6,_4,_a,_9,_b,_8,_d,_d,_d,_c,_b,_8,_a,_8,_5,_4,_4,_4,_b,_8,_a,_8,_d,_c,_c,_c,_a,_8,_a,_8,_4,_4,_4,_4,_9,_8,_8,_8,_d,_c,_c,_c,_8,_8,_8,_8,_4,_4,_4,_4,_e,_d,_f,_c,_d,_d,_d,_c,_f,_c,_e,_c,_5,_4,_4,_4,_c,_d,_d,_c,_d,_d,_d,_c,_d,_c,_c,_c,_5,_4,_4,_4,_d,_c,_c,_c,_d,_c,_c,_c,_c,_c,_c,_c,_4,_4,_4,_4,_d,_c,_c,_c,_d,_c,_c,_c,_c,_c,_c,_c,_4,_4,_4,_4,
+      _f,_e,_e,_e,_7,_4,_6,_4,_6,_6,_6,_6,_6,_4,_6,_4,_f,_c,_e,_c,_5,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_e,_c,_e,_c,_4,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_c,_c,_c,_c,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_c,_c,_c,_c,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_c,_c,_c,_c,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,
+      _e,_d,_f,_c,_d,_d,_d,_c,_f,_c,_e,_c,_5,_4,_4,_4,_c,_d,_d,_c,_d,_d,_d,_c,_d,_c,_c,_c,_5,_4,_4,_4,_d,_c,_c,_c,_d,_c,_c,_c,_c,_c,_c,_c,_4,_4,_4,_4,_d,_c,_c,_c,_d,_c,_c,_c,_c,_c,_c,_c,_4,_4,_4,_4,_c,_d,_d,_c,_9,_9,_9,_8,_d,_c,_c,_c,_1,_0,_0,_0,_c,_d,_d,_c,_9,_9,_9,_8,_d,_c,_c,_c,_1,_0,_0,_0,_d,_c,_c,_c,_9,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,_d,_c,_c,_c,_9,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,
+      _f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_c,_c,_c,_c,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_c,_c,_c,_c,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _0,_0,_0,_1,_c,_f,_d,_f,_8,_9,_9,_8,_d,_f,_d,_e,_0,_2,_0,_3,_e,_d,_f,_d,_8,_b,_9,_a,_f,_d,_f,_c,_0,_3,_1,_2,_f,_d,_f,_c,_9,_a,_8,_a,_f,_c,_e,_c,_2,_1,_3,_0,_d,_d,_d,_c,_b,_8,_a,_8,_d,_c,_c,_c,_4,_6,_4,_7,_a,_9,_b,_9,_c,_f,_d,_e,_b,_9,_b,_8,_6,_4,_6,_5,_8,_9,_9,_9,_e,_d,_f,_c,_9,_9,_9,_8,_6,_5,_7,_4,_9,_9,_9,_8,_f,_c,_e,_c,_9,_8,_8,_8,_4,_5,_5,_4,_9,_9,_9,_8,_d,_c,_c,_c,_9,_8,_8,_8,
+      _c,_f,_d,_e,_b,_b,_b,_a,_d,_e,_c,_e,_3,_2,_2,_2,_e,_f,_f,_e,_b,_9,_b,_8,_f,_e,_e,_e,_3,_0,_2,_0,_f,_e,_e,_e,_b,_8,_a,_8,_e,_e,_e,_e,_2,_0,_2,_0,_f,_c,_e,_c,_9,_8,_8,_8,_e,_c,_e,_c,_0,_0,_0,_0,_a,_b,_b,_a,_b,_9,_b,_8,_b,_a,_a,_a,_3,_0,_2,_0,_a,_9,_b,_8,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_b,_8,_a,_8,_9,_8,_8,_8,_a,_8,_a,_8,_0,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,
+      _4,_6,_4,_7,_a,_9,_b,_9,_c,_f,_d,_e,_b,_9,_b,_8,_6,_4,_6,_5,_8,_9,_9,_9,_e,_d,_f,_c,_9,_9,_9,_8,_6,_5,_7,_4,_9,_9,_9,_8,_f,_c,_e,_c,_9,_8,_8,_8,_4,_5,_5,_4,_9,_9,_9,_8,_d,_c,_c,_c,_9,_8,_8,_8,_2,_0,_2,_1,_8,_9,_9,_9,_a,_9,_b,_8,_9,_9,_9,_8,_0,_0,_0,_1,_8,_9,_9,_9,_8,_9,_9,_8,_9,_9,_9,_8,_0,_1,_1,_0,_9,_9,_9,_8,_9,_8,_8,_8,_9,_8,_8,_8,_0,_1,_1,_0,_9,_9,_9,_8,_9,_8,_8,_8,_9,_8,_8,_8,
+      _a,_b,_b,_a,_b,_9,_b,_8,_b,_a,_a,_a,_3,_0,_2,_0,_a,_9,_b,_8,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_b,_8,_a,_8,_9,_8,_8,_8,_a,_8,_a,_8,_0,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_a,_9,_b,_8,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,
+      _c,_f,_d,_e,_f,_d,_f,_c,_d,_e,_c,_e,_7,_4,_6,_4,_e,_d,_f,_c,_d,_d,_d,_c,_f,_c,_e,_c,_5,_4,_4,_4,_f,_c,_e,_c,_d,_c,_c,_c,_e,_c,_e,_c,_4,_4,_4,_4,_d,_c,_c,_c,_d,_c,_c,_c,_c,_c,_c,_c,_4,_4,_4,_4,_e,_d,_f,_c,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,_c,_d,_d,_c,_9,_9,_9,_8,_d,_c,_c,_c,_1,_0,_0,_0,_d,_c,_c,_c,_9,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,_d,_c,_c,_c,_9,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,
+      _f,_e,_e,_e,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_e,_c,_e,_c,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_c,_c,_c,_c,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _e,_d,_f,_c,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,_c,_d,_d,_c,_9,_9,_9,_8,_d,_c,_c,_c,_1,_0,_0,_0,_d,_c,_c,_c,_9,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,_d,_c,_c,_c,_9,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,
+      _b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _8,_8,_8,_9,_c,_f,_d,_f,_8,_9,_9,_8,_5,_7,_5,_6,_8,_a,_8,_b,_e,_d,_f,_d,_8,_b,_9,_a,_7,_5,_7,_4,_8,_b,_9,_a,_f,_d,_f,_c,_9,_a,_8,_a,_7,_4,_6,_4,_a,_9,_b,_8,_d,_d,_d,_c,_b,_8,_a,_8,_5,_4,_4,_4,_c,_e,_c,_f,_a,_9,_b,_9,_c,_f,_d,_e,_3,_1,_3,_0,_e,_c,_e,_d,_8,_9,_9,_9,_e,_d,_f,_c,_1,_1,_1,_0,_e,_d,_f,_c,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,_c,_d,_d,_c,_9,_9,_9,_8,_d,_c,_c,_c,_1,_0,_0,_0,
+      _c,_f,_d,_e,_3,_3,_3,_2,_5,_6,_4,_6,_3,_2,_2,_2,_e,_f,_f,_e,_3,_1,_3,_0,_7,_6,_6,_6,_3,_0,_2,_0,_f,_e,_e,_e,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_a,_b,_b,_a,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _c,_e,_c,_f,_a,_9,_b,_9,_c,_f,_d,_e,_3,_1,_3,_0,_e,_c,_e,_d,_8,_9,_9,_9,_e,_d,_f,_c,_1,_1,_1,_0,_e,_d,_f,_c,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,_c,_d,_d,_c,_9,_9,_9,_8,_d,_c,_c,_c,_1,_0,_0,_0,_a,_8,_a,_9,_8,_9,_9,_9,_a,_9,_b,_8,_1,_1,_1,_0,_8,_8,_8,_9,_8,_9,_9,_9,_8,_9,_9,_8,_1,_1,_1,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,
+      _a,_b,_b,_a,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _c,_f,_d,_e,_7,_5,_7,_4,_5,_6,_4,_6,_7,_4,_6,_4,_e,_d,_f,_c,_5,_5,_5,_4,_7,_4,_6,_4,_5,_4,_4,_4,_f,_c,_e,_c,_5,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_d,_c,_c,_c,_5,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_c,_d,_d,_c,_1,_1,_1,_0,_5,_4,_4,_4,_1,_0,_0,_0,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,
+      _7,_6,_6,_6,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_c,_d,_d,_c,_1,_1,_1,_0,_5,_4,_4,_4,_1,_0,_0,_0,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _c,_c,_c,_d,_8,_b,_9,_b,_c,_d,_d,_c,_1,_3,_1,_2,_c,_e,_c,_f,_a,_9,_b,_9,_c,_f,_d,_e,_3,_1,_3,_0,_c,_f,_d,_e,_b,_9,_b,_8,_d,_e,_c,_e,_3,_0,_2,_0,_e,_d,_f,_c,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,_8,_a,_8,_b,_a,_9,_b,_9,_8,_b,_9,_a,_3,_1,_3,_0,_a,_8,_a,_9,_8,_9,_9,_9,_a,_9,_b,_8,_1,_1,_1,_0,_a,_9,_b,_8,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,
+      _8,_b,_9,_a,_3,_3,_3,_2,_1,_2,_0,_2,_3,_2,_2,_2,_a,_b,_b,_a,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_b,_a,_a,_a,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_a,_b,_b,_a,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _8,_a,_8,_b,_a,_9,_b,_9,_8,_b,_9,_a,_3,_1,_3,_0,_a,_8,_a,_9,_8,_9,_9,_9,_a,_9,_b,_8,_1,_1,_1,_0,_a,_9,_b,_8,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,_a,_8,_a,_9,_8,_9,_9,_9,_a,_9,_b,_8,_1,_1,_1,_0,_8,_8,_8,_9,_8,_9,_9,_9,_8,_9,_9,_8,_1,_1,_1,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,
+      _a,_b,_b,_a,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _c,_f,_d,_e,_3,_1,_3,_0,_5,_6,_4,_6,_3,_0,_2,_0,_e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _0,_0,_0,_1,_8,_9,_9,_9,_8,_9,_9,_8,_1,_1,_1,_0,_0,_0,_0,_1,_8,_b,_9,_b,_8,_9,_9,_8,_1,_3,_1,_2,_0,_1,_1,_0,_9,_b,_9,_a,_9,_8,_8,_8,_1,_2,_0,_2,_0,_3,_1,_2,_b,_9,_b,_8,_9,_a,_8,_a,_3,_0,_2,_0,_0,_0,_0,_1,_8,_b,_9,_b,_8,_9,_9,_8,_1,_3,_1,_2,_0,_2,_0,_3,_a,_9,_b,_9,_8,_b,_9,_a,_3,_1,_3,_0,_0,_3,_1,_2,_b,_9,_b,_8,_9,_a,_8,_a,_3,_0,_2,_0,_2,_1,_3,_0,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,
+      _8,_9,_9,_8,_1,_3,_1,_2,_1,_0,_0,_0,_1,_2,_0,_2,_8,_b,_9,_a,_3,_3,_3,_2,_1,_2,_0,_2,_3,_2,_2,_2,_9,_a,_8,_a,_3,_2,_2,_2,_0,_2,_0,_2,_2,_2,_2,_2,_b,_a,_a,_a,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_8,_b,_9,_a,_7,_7,_7,_6,_1,_2,_0,_2,_7,_6,_6,_6,_a,_b,_b,_a,_7,_5,_7,_4,_3,_2,_2,_2,_7,_4,_6,_4,_b,_a,_a,_a,_7,_4,_6,_4,_2,_2,_2,_2,_6,_4,_6,_4,_b,_8,_a,_8,_5,_4,_4,_4,_2,_0,_2,_0,_4,_4,_4,_4,
+      _0,_0,_0,_1,_8,_b,_9,_b,_8,_9,_9,_8,_1,_3,_1,_2,_0,_2,_0,_3,_a,_9,_b,_9,_8,_b,_9,_a,_3,_1,_3,_0,_0,_3,_1,_2,_b,_9,_b,_8,_9,_a,_8,_a,_3,_0,_2,_0,_2,_1,_3,_0,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_0,_2,_0,_3,_e,_d,_f,_d,_8,_b,_9,_a,_7,_5,_7,_4,_2,_0,_2,_1,_c,_d,_d,_d,_a,_9,_b,_8,_5,_5,_5,_4,_2,_1,_3,_0,_d,_d,_d,_c,_b,_8,_a,_8,_5,_4,_4,_4,_0,_1,_1,_0,_d,_d,_d,_c,_9,_8,_8,_8,_5,_4,_4,_4,
+      _8,_b,_9,_a,_7,_7,_7,_6,_1,_2,_0,_2,_7,_6,_6,_6,_a,_b,_b,_a,_7,_5,_7,_4,_3,_2,_2,_2,_7,_4,_6,_4,_b,_a,_a,_a,_7,_4,_6,_4,_2,_2,_2,_2,_6,_4,_6,_4,_b,_8,_a,_8,_5,_4,_4,_4,_2,_0,_2,_0,_4,_4,_4,_4,_e,_f,_f,_e,_3,_1,_3,_0,_7,_6,_6,_6,_3,_0,_2,_0,_e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,
+      _8,_9,_9,_8,_1,_3,_1,_2,_1,_0,_0,_0,_1,_2,_0,_2,_8,_b,_9,_a,_3,_1,_3,_0,_1,_2,_0,_2,_3,_0,_2,_0,_9,_a,_8,_a,_3,_0,_2,_0,_0,_2,_0,_2,_2,_0,_2,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_8,_b,_9,_a,_7,_5,_7,_4,_1,_2,_0,_2,_7,_4,_6,_4,_a,_9,_b,_8,_5,_5,_5,_4,_3,_0,_2,_0,_5,_4,_4,_4,_b,_8,_a,_8,_5,_4,_4,_4,_2,_0,_2,_0,_4,_4,_4,_4,_9,_8,_8,_8,_5,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,
+      _1,_2,_0,_2,_7,_6,_6,_6,_0,_2,_0,_2,_6,_6,_6,_6,_3,_2,_2,_2,_7,_4,_6,_4,_2,_2,_2,_2,_6,_4,_6,_4,_2,_2,_2,_2,_6,_4,_6,_4,_2,_2,_2,_2,_6,_4,_6,_4,_2,_0,_2,_0,_4,_4,_4,_4,_2,_0,_2,_0,_4,_4,_4,_4,_7,_6,_6,_6,_7,_4,_6,_4,_6,_6,_6,_6,_6,_4,_6,_4,_7,_4,_6,_4,_5,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,
+      _8,_b,_9,_a,_7,_5,_7,_4,_1,_2,_0,_2,_7,_4,_6,_4,_a,_9,_b,_8,_5,_5,_5,_4,_3,_0,_2,_0,_5,_4,_4,_4,_b,_8,_a,_8,_5,_4,_4,_4,_2,_0,_2,_0,_4,_4,_4,_4,_9,_8,_8,_8,_5,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_e,_d,_f,_c,_5,_5,_5,_4,_7,_4,_6,_4,_5,_4,_4,_4,_c,_d,_d,_c,_5,_5,_5,_4,_5,_4,_4,_4,_5,_4,_4,_4,_d,_c,_c,_c,_5,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_d,_c,_c,_c,_5,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,
+      _7,_6,_6,_6,_7,_4,_6,_4,_6,_6,_6,_6,_6,_4,_6,_4,_7,_4,_6,_4,_5,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_5,_4,_4,_4,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,
+      _0,_0,_0,_1,_8,_9,_9,_9,_8,_9,_9,_8,_1,_1,_1,_0,_0,_0,_0,_1,_8,_b,_9,_b,_8,_9,_9,_8,_1,_3,_1,_2,_0,_1,_1,_0,_9,_b,_9,_a,_9,_8,_8,_8,_1,_2,_0,_2,_0,_3,_1,_2,_b,_9,_b,_8,_9,_a,_8,_a,_3,_0,_2,_0,_0,_0,_0,_1,_c,_f,_d,_f,_8,_9,_9,_8,_5,_7,_5,_6,_0,_2,_0,_3,_e,_d,_f,_d,_8,_b,_9,_a,_7,_5,_7,_4,_0,_3,_1,_2,_f,_d,_f,_c,_9,_a,_8,_a,_7,_4,_6,_4,_2,_1,_3,_0,_d,_d,_d,_c,_b,_8,_a,_8,_5,_4,_4,_4,
+      _8,_9,_9,_8,_5,_7,_5,_6,_1,_0,_0,_0,_5,_6,_4,_6,_8,_b,_9,_a,_7,_7,_7,_6,_1,_2,_0,_2,_7,_6,_6,_6,_9,_a,_8,_a,_7,_6,_6,_6,_0,_2,_0,_2,_6,_6,_6,_6,_b,_a,_a,_a,_7,_4,_6,_4,_2,_2,_2,_2,_6,_4,_6,_4,_c,_f,_d,_e,_3,_3,_3,_2,_5,_6,_4,_6,_3,_2,_2,_2,_e,_f,_f,_e,_3,_1,_3,_0,_7,_6,_6,_6,_3,_0,_2,_0,_f,_e,_e,_e,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,
+      _0,_0,_0,_1,_c,_f,_d,_f,_8,_9,_9,_8,_5,_7,_5,_6,_0,_2,_0,_3,_e,_d,_f,_d,_8,_b,_9,_a,_7,_5,_7,_4,_0,_3,_1,_2,_f,_d,_f,_c,_9,_a,_8,_a,_7,_4,_6,_4,_2,_1,_3,_0,_d,_d,_d,_c,_b,_8,_a,_8,_5,_4,_4,_4,_4,_6,_4,_7,_a,_9,_b,_9,_c,_f,_d,_e,_3,_1,_3,_0,_6,_4,_6,_5,_8,_9,_9,_9,_e,_d,_f,_c,_1,_1,_1,_0,_6,_5,_7,_4,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,_4,_5,_5,_4,_9,_9,_9,_8,_d,_c,_c,_c,_1,_0,_0,_0,
+      _c,_f,_d,_e,_3,_3,_3,_2,_5,_6,_4,_6,_3,_2,_2,_2,_e,_f,_f,_e,_3,_1,_3,_0,_7,_6,_6,_6,_3,_0,_2,_0,_f,_e,_e,_e,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_a,_b,_b,_a,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _8,_9,_9,_8,_5,_7,_5,_6,_1,_0,_0,_0,_5,_6,_4,_6,_8,_b,_9,_a,_7,_5,_7,_4,_1,_2,_0,_2,_7,_4,_6,_4,_9,_a,_8,_a,_7,_4,_6,_4,_0,_2,_0,_2,_6,_4,_6,_4,_b,_8,_a,_8,_5,_4,_4,_4,_2,_0,_2,_0,_4,_4,_4,_4,_c,_f,_d,_e,_7,_5,_7,_4,_5,_6,_4,_6,_7,_4,_6,_4,_e,_d,_f,_c,_5,_5,_5,_4,_7,_4,_6,_4,_5,_4,_4,_4,_f,_c,_e,_c,_5,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_d,_c,_c,_c,_5,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,
+      _5,_6,_4,_6,_7,_6,_6,_6,_4,_6,_4,_6,_6,_6,_6,_6,_7,_6,_6,_6,_7,_4,_6,_4,_6,_6,_6,_6,_6,_4,_6,_4,_6,_6,_6,_6,_6,_4,_6,_4,_6,_6,_6,_6,_6,_4,_6,_4,_6,_4,_6,_4,_4,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_7,_6,_6,_6,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,
+      _c,_f,_d,_e,_7,_5,_7,_4,_5,_6,_4,_6,_7,_4,_6,_4,_e,_d,_f,_c,_5,_5,_5,_4,_7,_4,_6,_4,_5,_4,_4,_4,_f,_c,_e,_c,_5,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_d,_c,_c,_c,_5,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_c,_d,_d,_c,_1,_1,_1,_0,_5,_4,_4,_4,_1,_0,_0,_0,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,
+      _7,_6,_6,_6,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _8,_8,_8,_9,_0,_1,_1,_1,_0,_1,_1,_0,_1,_1,_1,_0,_8,_8,_8,_9,_0,_3,_1,_3,_0,_1,_1,_0,_1,_3,_1,_2,_8,_9,_9,_8,_1,_3,_1,_2,_1,_0,_0,_0,_1,_2,_0,_2,_8,_b,_9,_a,_3,_1,_3,_0,_1,_2,_0,_2,_3,_0,_2,_0,_8,_8,_8,_9,_4,_7,_5,_7,_0,_1,_1,_0,_5,_7,_5,_6,_8,_a,_8,_b,_6,_5,_7,_5,_0,_3,_1,_2,_7,_5,_7,_4,_8,_b,_9,_a,_7,_5,_7,_4,_1,_2,_0,_2,_7,_4,_6,_4,_a,_9,_b,_8,_5,_5,_5,_4,_3,_0,_2,_0,_5,_4,_4,_4,
+      _0,_1,_1,_0,_5,_7,_5,_6,_1,_0,_0,_0,_5,_6,_4,_6,_0,_3,_1,_2,_7,_7,_7,_6,_1,_2,_0,_2,_7,_6,_6,_6,_1,_2,_0,_2,_7,_6,_6,_6,_0,_2,_0,_2,_6,_6,_6,_6,_3,_2,_2,_2,_7,_4,_6,_4,_2,_2,_2,_2,_6,_4,_6,_4,_4,_7,_5,_6,_3,_3,_3,_2,_5,_6,_4,_6,_3,_2,_2,_2,_6,_7,_7,_6,_3,_1,_3,_0,_7,_6,_6,_6,_3,_0,_2,_0,_7,_6,_6,_6,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,
+      _8,_8,_8,_9,_4,_7,_5,_7,_0,_1,_1,_0,_5,_7,_5,_6,_8,_a,_8,_b,_6,_5,_7,_5,_0,_3,_1,_2,_7,_5,_7,_4,_8,_b,_9,_a,_7,_5,_7,_4,_1,_2,_0,_2,_7,_4,_6,_4,_a,_9,_b,_8,_5,_5,_5,_4,_3,_0,_2,_0,_5,_4,_4,_4,_c,_e,_c,_f,_2,_1,_3,_1,_4,_7,_5,_6,_3,_1,_3,_0,_e,_c,_e,_d,_0,_1,_1,_1,_6,_5,_7,_4,_1,_1,_1,_0,_e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_c,_d,_d,_c,_1,_1,_1,_0,_5,_4,_4,_4,_1,_0,_0,_0,
+      _4,_7,_5,_6,_3,_3,_3,_2,_5,_6,_4,_6,_3,_2,_2,_2,_6,_7,_7,_6,_3,_1,_3,_0,_7,_6,_6,_6,_3,_0,_2,_0,_7,_6,_6,_6,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _0,_1,_1,_0,_5,_7,_5,_6,_1,_0,_0,_0,_5,_6,_4,_6,_0,_3,_1,_2,_7,_5,_7,_4,_1,_2,_0,_2,_7,_4,_6,_4,_1,_2,_0,_2,_7,_4,_6,_4,_0,_2,_0,_2,_6,_4,_6,_4,_3,_0,_2,_0,_5,_4,_4,_4,_2,_0,_2,_0,_4,_4,_4,_4,_4,_7,_5,_6,_7,_5,_7,_4,_5,_6,_4,_6,_7,_4,_6,_4,_6,_5,_7,_4,_5,_5,_5,_4,_7,_4,_6,_4,_5,_4,_4,_4,_7,_4,_6,_4,_5,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_5,_4,_4,_4,_5,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,
+      _5,_6,_4,_6,_7,_6,_6,_6,_4,_6,_4,_6,_6,_6,_6,_6,_7,_6,_6,_6,_7,_4,_6,_4,_6,_6,_6,_6,_6,_4,_6,_4,_6,_6,_6,_6,_6,_4,_6,_4,_6,_6,_6,_6,_6,_4,_6,_4,_6,_4,_6,_4,_4,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_7,_6,_6,_6,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,
+      _4,_7,_5,_6,_7,_5,_7,_4,_5,_6,_4,_6,_7,_4,_6,_4,_6,_5,_7,_4,_5,_5,_5,_4,_7,_4,_6,_4,_5,_4,_4,_4,_7,_4,_6,_4,_5,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_5,_4,_4,_4,_5,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_6,_5,_7,_4,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_4,_5,_5,_4,_1,_1,_1,_0,_5,_4,_4,_4,_1,_0,_0,_0,_5,_4,_4,_4,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_5,_4,_4,_4,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,
+      _7,_6,_6,_6,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _8,_8,_8,_9,_4,_5,_5,_5,_0,_1,_1,_0,_5,_5,_5,_4,_8,_8,_8,_9,_4,_7,_5,_7,_0,_1,_1,_0,_5,_7,_5,_6,_8,_9,_9,_8,_5,_7,_5,_6,_1,_0,_0,_0,_5,_6,_4,_6,_8,_b,_9,_a,_7,_5,_7,_4,_1,_2,_0,_2,_7,_4,_6,_4,_c,_c,_c,_d,_0,_3,_1,_3,_4,_5,_5,_4,_1,_3,_1,_2,_c,_e,_c,_f,_2,_1,_3,_1,_4,_7,_5,_6,_3,_1,_3,_0,_c,_f,_d,_e,_3,_1,_3,_0,_5,_6,_4,_6,_3,_0,_2,_0,_e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,
+      _4,_5,_5,_4,_1,_3,_1,_2,_5,_4,_4,_4,_1,_2,_0,_2,_4,_7,_5,_6,_3,_3,_3,_2,_5,_6,_4,_6,_3,_2,_2,_2,_5,_6,_4,_6,_3,_2,_2,_2,_4,_6,_4,_6,_2,_2,_2,_2,_7,_6,_6,_6,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_0,_3,_1,_2,_3,_3,_3,_2,_1,_2,_0,_2,_3,_2,_2,_2,_2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,
+      _c,_c,_c,_d,_0,_3,_1,_3,_4,_5,_5,_4,_1,_3,_1,_2,_c,_e,_c,_f,_2,_1,_3,_1,_4,_7,_5,_6,_3,_1,_3,_0,_c,_f,_d,_e,_3,_1,_3,_0,_5,_6,_4,_6,_3,_0,_2,_0,_e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_8,_a,_8,_b,_2,_1,_3,_1,_0,_3,_1,_2,_3,_1,_3,_0,_a,_8,_a,_9,_0,_1,_1,_1,_2,_1,_3,_0,_1,_1,_1,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,
+      _0,_3,_1,_2,_3,_3,_3,_2,_1,_2,_0,_2,_3,_2,_2,_2,_2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _4,_5,_5,_4,_5,_7,_5,_6,_5,_4,_4,_4,_5,_6,_4,_6,_4,_7,_5,_6,_7,_5,_7,_4,_5,_6,_4,_6,_7,_4,_6,_4,_5,_6,_4,_6,_7,_4,_6,_4,_4,_6,_4,_6,_6,_4,_6,_4,_7,_4,_6,_4,_5,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_4,_7,_5,_6,_3,_1,_3,_0,_5,_6,_4,_6,_3,_0,_2,_0,_6,_5,_7,_4,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_5,_4,_4,_4,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,
+      _5,_6,_4,_6,_3,_2,_2,_2,_4,_6,_4,_6,_2,_2,_2,_2,_7,_6,_6,_6,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _4,_7,_5,_6,_3,_1,_3,_0,_5,_6,_4,_6,_3,_0,_2,_0,_6,_5,_7,_4,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_5,_4,_4,_4,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_0,_1,_1,_0,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _8,_9,_9,_8,_9,_b,_9,_a,_9,_8,_8,_8,_1,_2,_0,_2,_8,_b,_9,_a,_b,_9,_b,_8,_9,_a,_8,_a,_3,_0,_2,_0,_9,_a,_8,_a,_b,_8,_a,_8,_8,_a,_8,_a,_2,_0,_2,_0,_b,_8,_a,_8,_9,_8,_8,_8,_a,_8,_a,_8,_0,_0,_0,_0,_8,_b,_9,_a,_f,_d,_f,_c,_9,_a,_8,_a,_7,_4,_6,_4,_a,_9,_b,_8,_d,_d,_d,_c,_b,_8,_a,_8,_5,_4,_4,_4,_b,_8,_a,_8,_d,_c,_c,_c,_a,_8,_a,_8,_4,_4,_4,_4,_9,_8,_8,_8,_d,_c,_c,_c,_8,_8,_8,_8,_4,_4,_4,_4,
+      _9,_a,_8,_a,_7,_6,_6,_6,_0,_2,_0,_2,_6,_6,_6,_6,_b,_a,_a,_a,_7,_4,_6,_4,_2,_2,_2,_2,_6,_4,_6,_4,_a,_a,_a,_a,_6,_4,_6,_4,_2,_2,_2,_2,_6,_4,_6,_4,_a,_8,_a,_8,_4,_4,_4,_4,_2,_0,_2,_0,_4,_4,_4,_4,_f,_e,_e,_e,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_e,_c,_e,_c,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_c,_c,_c,_c,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,
+      _8,_b,_9,_a,_f,_d,_f,_c,_9,_a,_8,_a,_7,_4,_6,_4,_a,_9,_b,_8,_d,_d,_d,_c,_b,_8,_a,_8,_5,_4,_4,_4,_b,_8,_a,_8,_d,_c,_c,_c,_a,_8,_a,_8,_4,_4,_4,_4,_9,_8,_8,_8,_d,_c,_c,_c,_8,_8,_8,_8,_4,_4,_4,_4,_e,_d,_f,_c,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,_c,_d,_d,_c,_9,_9,_9,_8,_d,_c,_c,_c,_1,_0,_0,_0,_d,_c,_c,_c,_9,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,_d,_c,_c,_c,_9,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,
+      _f,_e,_e,_e,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_e,_c,_e,_c,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_c,_c,_c,_c,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _9,_a,_8,_a,_7,_4,_6,_4,_0,_2,_0,_2,_6,_4,_6,_4,_b,_8,_a,_8,_5,_4,_4,_4,_2,_0,_2,_0,_4,_4,_4,_4,_a,_8,_a,_8,_4,_4,_4,_4,_2,_0,_2,_0,_4,_4,_4,_4,_8,_8,_8,_8,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_f,_c,_e,_c,_5,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_d,_c,_c,_c,_5,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_c,_c,_c,_c,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_c,_c,_c,_c,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,
+      _6,_6,_6,_6,_6,_4,_6,_4,_6,_6,_6,_6,_6,_4,_6,_4,_6,_4,_6,_4,_4,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,
+      _f,_c,_e,_c,_5,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_d,_c,_c,_c,_5,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_c,_c,_c,_c,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_c,_c,_c,_c,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_c,_c,_c,_c,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_c,_c,_c,_c,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,
+      _6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _8,_9,_9,_8,_d,_f,_d,_e,_9,_8,_8,_8,_5,_6,_4,_6,_8,_b,_9,_a,_f,_d,_f,_c,_9,_a,_8,_a,_7,_4,_6,_4,_9,_a,_8,_a,_f,_c,_e,_c,_8,_a,_8,_a,_6,_4,_6,_4,_b,_8,_a,_8,_d,_c,_c,_c,_a,_8,_a,_8,_4,_4,_4,_4,_c,_f,_d,_e,_b,_9,_b,_8,_d,_e,_c,_e,_3,_0,_2,_0,_e,_d,_f,_c,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,_f,_c,_e,_c,_9,_8,_8,_8,_e,_c,_e,_c,_0,_0,_0,_0,_d,_c,_c,_c,_9,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,
+      _d,_e,_c,_e,_3,_2,_2,_2,_4,_6,_4,_6,_2,_2,_2,_2,_f,_e,_e,_e,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_e,_e,_e,_e,_2,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_e,_c,_e,_c,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_b,_a,_a,_a,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_a,_8,_a,_8,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _c,_f,_d,_e,_b,_9,_b,_8,_d,_e,_c,_e,_3,_0,_2,_0,_e,_d,_f,_c,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,_f,_c,_e,_c,_9,_8,_8,_8,_e,_c,_e,_c,_0,_0,_0,_0,_d,_c,_c,_c,_9,_8,_8,_8,_c,_c,_c,_c,_0,_0,_0,_0,_a,_9,_b,_8,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,_9,_8,_8,_8,_9,_8,_8,_8,_8,_8,_8,_8,_0,_0,_0,_0,
+      _b,_a,_a,_a,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_a,_8,_a,_8,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _d,_e,_c,_e,_7,_4,_6,_4,_4,_6,_4,_6,_6,_4,_6,_4,_f,_c,_e,_c,_5,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_e,_c,_e,_c,_4,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_c,_c,_c,_c,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_c,_c,_c,_c,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_c,_c,_c,_c,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,
+      _6,_6,_6,_6,_2,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_c,_c,_c,_c,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_c,_c,_c,_c,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_8,_8,_8,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _8,_9,_9,_8,_5,_7,_5,_6,_1,_0,_0,_0,_5,_6,_4,_6,_8,_b,_9,_a,_7,_5,_7,_4,_1,_2,_0,_2,_7,_4,_6,_4,_9,_a,_8,_a,_7,_4,_6,_4,_0,_2,_0,_2,_6,_4,_6,_4,_b,_8,_a,_8,_5,_4,_4,_4,_2,_0,_2,_0,_4,_4,_4,_4,_c,_f,_d,_e,_3,_1,_3,_0,_5,_6,_4,_6,_3,_0,_2,_0,_e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,
+      _5,_6,_4,_6,_3,_2,_2,_2,_4,_6,_4,_6,_2,_2,_2,_2,_7,_6,_6,_6,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _c,_f,_d,_e,_3,_1,_3,_0,_5,_6,_4,_6,_3,_0,_2,_0,_e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _5,_6,_4,_6,_7,_4,_6,_4,_4,_6,_4,_6,_6,_4,_6,_4,_7,_4,_6,_4,_5,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_5,_4,_4,_4,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,
+      _6,_6,_6,_6,_2,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_5,_4,_4,_4,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _c,_d,_d,_c,_1,_3,_1,_2,_5,_4,_4,_4,_1,_2,_0,_2,_c,_f,_d,_e,_3,_1,_3,_0,_5,_6,_4,_6,_3,_0,_2,_0,_d,_e,_c,_e,_3,_0,_2,_0,_4,_6,_4,_6,_2,_0,_2,_0,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_8,_b,_9,_a,_3,_1,_3,_0,_1,_2,_0,_2,_3,_0,_2,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _1,_2,_0,_2,_3,_2,_2,_2,_0,_2,_0,_2,_2,_2,_2,_2,_3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _8,_b,_9,_a,_3,_1,_3,_0,_1,_2,_0,_2,_3,_0,_2,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _5,_6,_4,_6,_3,_0,_2,_0,_4,_6,_4,_6,_2,_0,_2,_0,_7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _2,_2,_2,_2,_2,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _0,_0,_0,_0,_8,_8,_8,_9,_8,_8,_8,_9,_0,_1,_1,_1,_0,_0,_0,_0,_8,_a,_8,_b,_8,_8,_8,_9,_0,_3,_1,_3,_0,_0,_0,_1,_8,_b,_9,_b,_8,_9,_9,_8,_1,_3,_1,_2,_0,_2,_0,_3,_a,_9,_b,_9,_8,_b,_9,_a,_3,_1,_3,_0,_0,_0,_0,_0,_c,_e,_c,_f,_8,_8,_8,_9,_4,_7,_5,_7,_0,_2,_0,_2,_e,_c,_e,_d,_8,_a,_8,_b,_6,_5,_7,_5,_0,_2,_0,_3,_e,_d,_f,_d,_8,_b,_9,_a,_7,_5,_7,_4,_2,_0,_2,_1,_c,_d,_d,_d,_a,_9,_b,_8,_5,_5,_5,_4,
+      _8,_8,_8,_9,_4,_7,_5,_7,_0,_1,_1,_0,_5,_7,_5,_6,_8,_a,_8,_b,_6,_7,_7,_7,_0,_3,_1,_2,_7,_7,_7,_6,_8,_b,_9,_a,_7,_7,_7,_6,_1,_2,_0,_2,_7,_6,_6,_6,_a,_b,_b,_a,_7,_5,_7,_4,_3,_2,_2,_2,_7,_4,_6,_4,_c,_e,_c,_f,_2,_3,_3,_3,_4,_7,_5,_6,_3,_3,_3,_2,_e,_e,_e,_f,_2,_1,_3,_1,_6,_7,_7,_6,_3,_1,_3,_0,_e,_f,_f,_e,_3,_1,_3,_0,_7,_6,_6,_6,_3,_0,_2,_0,_e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,
+      _0,_0,_0,_0,_c,_e,_c,_f,_8,_8,_8,_9,_4,_7,_5,_7,_0,_2,_0,_2,_e,_c,_e,_d,_8,_a,_8,_b,_6,_5,_7,_5,_0,_2,_0,_3,_e,_d,_f,_d,_8,_b,_9,_a,_7,_5,_7,_4,_2,_0,_2,_1,_c,_d,_d,_d,_a,_9,_b,_8,_5,_5,_5,_4,_4,_6,_4,_6,_a,_8,_a,_9,_c,_e,_c,_f,_2,_1,_3,_1,_6,_4,_6,_4,_8,_8,_8,_9,_e,_c,_e,_d,_0,_1,_1,_1,_6,_4,_6,_5,_8,_9,_9,_9,_e,_d,_f,_c,_1,_1,_1,_0,_4,_4,_4,_5,_8,_9,_9,_9,_c,_d,_d,_c,_1,_1,_1,_0,
+      _c,_e,_c,_f,_2,_3,_3,_3,_4,_7,_5,_6,_3,_3,_3,_2,_e,_e,_e,_f,_2,_1,_3,_1,_6,_7,_7,_6,_3,_1,_3,_0,_e,_f,_f,_e,_3,_1,_3,_0,_7,_6,_6,_6,_3,_0,_2,_0,_e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_a,_a,_a,_b,_2,_1,_3,_1,_2,_3,_3,_2,_3,_1,_3,_0,_a,_8,_a,_9,_0,_1,_1,_1,_2,_1,_3,_0,_1,_1,_1,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,
+      _8,_8,_8,_9,_4,_7,_5,_7,_0,_1,_1,_0,_5,_7,_5,_6,_8,_a,_8,_b,_6,_5,_7,_5,_0,_3,_1,_2,_7,_5,_7,_4,_8,_b,_9,_a,_7,_5,_7,_4,_1,_2,_0,_2,_7,_4,_6,_4,_a,_9,_b,_8,_5,_5,_5,_4,_3,_0,_2,_0,_5,_4,_4,_4,_c,_e,_c,_f,_6,_5,_7,_5,_4,_7,_5,_6,_7,_5,_7,_4,_e,_c,_e,_d,_4,_5,_5,_5,_6,_5,_7,_4,_5,_5,_5,_4,_e,_d,_f,_c,_5,_5,_5,_4,_7,_4,_6,_4,_5,_4,_4,_4,_c,_d,_d,_c,_5,_5,_5,_4,_5,_4,_4,_4,_5,_4,_4,_4,
+      _4,_7,_5,_6,_7,_7,_7,_6,_5,_6,_4,_6,_7,_6,_6,_6,_6,_7,_7,_6,_7,_5,_7,_4,_7,_6,_6,_6,_7,_4,_6,_4,_7,_6,_6,_6,_7,_4,_6,_4,_6,_6,_6,_6,_6,_4,_6,_4,_7,_4,_6,_4,_5,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_6,_7,_7,_6,_3,_1,_3,_0,_7,_6,_6,_6,_3,_0,_2,_0,_6,_5,_7,_4,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_5,_4,_4,_4,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,
+      _c,_e,_c,_f,_6,_5,_7,_5,_4,_7,_5,_6,_7,_5,_7,_4,_e,_c,_e,_d,_4,_5,_5,_5,_6,_5,_7,_4,_5,_5,_5,_4,_e,_d,_f,_c,_5,_5,_5,_4,_7,_4,_6,_4,_5,_4,_4,_4,_c,_d,_d,_c,_5,_5,_5,_4,_5,_4,_4,_4,_5,_4,_4,_4,_e,_c,_e,_d,_0,_1,_1,_1,_6,_5,_7,_4,_1,_1,_1,_0,_c,_c,_c,_d,_0,_1,_1,_1,_4,_5,_5,_4,_1,_1,_1,_0,_c,_d,_d,_c,_1,_1,_1,_0,_5,_4,_4,_4,_1,_0,_0,_0,_c,_d,_d,_c,_1,_1,_1,_0,_5,_4,_4,_4,_1,_0,_0,_0,
+      _6,_7,_7,_6,_3,_1,_3,_0,_7,_6,_6,_6,_3,_0,_2,_0,_6,_5,_7,_4,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_5,_4,_4,_4,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_0,_1,_1,_0,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _0,_0,_0,_0,_c,_c,_c,_d,_8,_8,_8,_9,_4,_5,_5,_5,_0,_0,_0,_0,_c,_e,_c,_f,_8,_8,_8,_9,_4,_7,_5,_7,_0,_0,_0,_1,_c,_f,_d,_f,_8,_9,_9,_8,_5,_7,_5,_6,_0,_2,_0,_3,_e,_d,_f,_d,_8,_b,_9,_a,_7,_5,_7,_4,_4,_4,_4,_4,_8,_a,_8,_b,_c,_c,_c,_d,_0,_3,_1,_3,_4,_6,_4,_6,_a,_8,_a,_9,_c,_e,_c,_f,_2,_1,_3,_1,_4,_6,_4,_7,_a,_9,_b,_9,_c,_f,_d,_e,_3,_1,_3,_0,_6,_4,_6,_5,_8,_9,_9,_9,_e,_d,_f,_c,_1,_1,_1,_0,
+      _c,_c,_c,_d,_0,_3,_1,_3,_4,_5,_5,_4,_1,_3,_1,_2,_c,_e,_c,_f,_2,_3,_3,_3,_4,_7,_5,_6,_3,_3,_3,_2,_c,_f,_d,_e,_3,_3,_3,_2,_5,_6,_4,_6,_3,_2,_2,_2,_e,_f,_f,_e,_3,_1,_3,_0,_7,_6,_6,_6,_3,_0,_2,_0,_8,_a,_8,_b,_2,_3,_3,_3,_0,_3,_1,_2,_3,_3,_3,_2,_a,_a,_a,_b,_2,_1,_3,_1,_2,_3,_3,_2,_3,_1,_3,_0,_a,_b,_b,_a,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,
+      _4,_4,_4,_4,_8,_a,_8,_b,_c,_c,_c,_d,_0,_3,_1,_3,_4,_6,_4,_6,_a,_8,_a,_9,_c,_e,_c,_f,_2,_1,_3,_1,_4,_6,_4,_7,_a,_9,_b,_9,_c,_f,_d,_e,_3,_1,_3,_0,_6,_4,_6,_5,_8,_9,_9,_9,_e,_d,_f,_c,_1,_1,_1,_0,_0,_2,_0,_2,_a,_8,_a,_9,_8,_a,_8,_b,_2,_1,_3,_1,_2,_0,_2,_0,_8,_8,_8,_9,_a,_8,_a,_9,_0,_1,_1,_1,_2,_0,_2,_1,_8,_9,_9,_9,_a,_9,_b,_8,_1,_1,_1,_0,_0,_0,_0,_1,_8,_9,_9,_9,_8,_9,_9,_8,_1,_1,_1,_0,
+      _8,_a,_8,_b,_2,_3,_3,_3,_0,_3,_1,_2,_3,_3,_3,_2,_a,_a,_a,_b,_2,_1,_3,_1,_2,_3,_3,_2,_3,_1,_3,_0,_a,_b,_b,_a,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_a,_a,_a,_b,_2,_1,_3,_1,_2,_3,_3,_2,_3,_1,_3,_0,_a,_8,_a,_9,_0,_1,_1,_1,_2,_1,_3,_0,_1,_1,_1,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,
+      _c,_c,_c,_d,_4,_7,_5,_7,_4,_5,_5,_4,_5,_7,_5,_6,_c,_e,_c,_f,_6,_5,_7,_5,_4,_7,_5,_6,_7,_5,_7,_4,_c,_f,_d,_e,_7,_5,_7,_4,_5,_6,_4,_6,_7,_4,_6,_4,_e,_d,_f,_c,_5,_5,_5,_4,_7,_4,_6,_4,_5,_4,_4,_4,_c,_e,_c,_f,_2,_1,_3,_1,_4,_7,_5,_6,_3,_1,_3,_0,_e,_c,_e,_d,_0,_1,_1,_1,_6,_5,_7,_4,_1,_1,_1,_0,_e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_c,_d,_d,_c,_1,_1,_1,_0,_5,_4,_4,_4,_1,_0,_0,_0,
+      _4,_7,_5,_6,_3,_3,_3,_2,_5,_6,_4,_6,_3,_2,_2,_2,_6,_7,_7,_6,_3,_1,_3,_0,_7,_6,_6,_6,_3,_0,_2,_0,_7,_6,_6,_6,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _c,_e,_c,_f,_2,_1,_3,_1,_4,_7,_5,_6,_3,_1,_3,_0,_e,_c,_e,_d,_0,_1,_1,_1,_6,_5,_7,_4,_1,_1,_1,_0,_e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_c,_d,_d,_c,_1,_1,_1,_0,_5,_4,_4,_4,_1,_0,_0,_0,_a,_8,_a,_9,_0,_1,_1,_1,_2,_1,_3,_0,_1,_1,_1,_0,_8,_8,_8,_9,_0,_1,_1,_1,_0,_1,_1,_0,_1,_1,_1,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,
+      _2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_0,_1,_1,_0,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _8,_8,_8,_8,_4,_4,_4,_5,_0,_0,_0,_1,_4,_5,_5,_5,_8,_8,_8,_8,_4,_6,_4,_7,_0,_0,_0,_1,_4,_7,_5,_7,_8,_8,_8,_9,_4,_7,_5,_7,_0,_1,_1,_0,_5,_7,_5,_6,_8,_a,_8,_b,_6,_5,_7,_5,_0,_3,_1,_2,_7,_5,_7,_4,_c,_c,_c,_c,_0,_2,_0,_3,_4,_4,_4,_5,_0,_3,_1,_3,_c,_e,_c,_e,_2,_0,_2,_1,_4,_6,_4,_7,_2,_1,_3,_1,_c,_e,_c,_f,_2,_1,_3,_1,_4,_7,_5,_6,_3,_1,_3,_0,_e,_c,_e,_d,_0,_1,_1,_1,_6,_5,_7,_4,_1,_1,_1,_0,
+      _4,_4,_4,_5,_0,_3,_1,_3,_4,_5,_5,_4,_1,_3,_1,_2,_4,_6,_4,_7,_2,_3,_3,_3,_4,_7,_5,_6,_3,_3,_3,_2,_4,_7,_5,_6,_3,_3,_3,_2,_5,_6,_4,_6,_3,_2,_2,_2,_6,_7,_7,_6,_3,_1,_3,_0,_7,_6,_6,_6,_3,_0,_2,_0,_0,_2,_0,_3,_2,_3,_3,_3,_0,_3,_1,_2,_3,_3,_3,_2,_2,_2,_2,_3,_2,_1,_3,_1,_2,_3,_3,_2,_3,_1,_3,_0,_2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,
+      _c,_c,_c,_c,_0,_2,_0,_3,_4,_4,_4,_5,_0,_3,_1,_3,_c,_e,_c,_e,_2,_0,_2,_1,_4,_6,_4,_7,_2,_1,_3,_1,_c,_e,_c,_f,_2,_1,_3,_1,_4,_7,_5,_6,_3,_1,_3,_0,_e,_c,_e,_d,_0,_1,_1,_1,_6,_5,_7,_4,_1,_1,_1,_0,_8,_a,_8,_a,_2,_0,_2,_1,_0,_2,_0,_3,_2,_1,_3,_1,_a,_8,_a,_8,_0,_0,_0,_1,_2,_0,_2,_1,_0,_1,_1,_1,_a,_8,_a,_9,_0,_1,_1,_1,_2,_1,_3,_0,_1,_1,_1,_0,_8,_8,_8,_9,_0,_1,_1,_1,_0,_1,_1,_0,_1,_1,_1,_0,
+      _0,_2,_0,_3,_2,_3,_3,_3,_0,_3,_1,_2,_3,_3,_3,_2,_2,_2,_2,_3,_2,_1,_3,_1,_2,_3,_3,_2,_3,_1,_3,_0,_2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_2,_2,_3,_2,_1,_3,_1,_2,_3,_3,_2,_3,_1,_3,_0,_2,_0,_2,_1,_0,_1,_1,_1,_2,_1,_3,_0,_1,_1,_1,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_0,_1,_1,_0,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,
+      _4,_4,_4,_5,_4,_7,_5,_7,_4,_5,_5,_4,_5,_7,_5,_6,_4,_6,_4,_7,_6,_5,_7,_5,_4,_7,_5,_6,_7,_5,_7,_4,_4,_7,_5,_6,_7,_5,_7,_4,_5,_6,_4,_6,_7,_4,_6,_4,_6,_5,_7,_4,_5,_5,_5,_4,_7,_4,_6,_4,_5,_4,_4,_4,_4,_6,_4,_7,_2,_1,_3,_1,_4,_7,_5,_6,_3,_1,_3,_0,_6,_4,_6,_5,_0,_1,_1,_1,_6,_5,_7,_4,_1,_1,_1,_0,_6,_5,_7,_4,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_4,_5,_5,_4,_1,_1,_1,_0,_5,_4,_4,_4,_1,_0,_0,_0,
+      _4,_7,_5,_6,_3,_3,_3,_2,_5,_6,_4,_6,_3,_2,_2,_2,_6,_7,_7,_6,_3,_1,_3,_0,_7,_6,_6,_6,_3,_0,_2,_0,_7,_6,_6,_6,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _4,_6,_4,_7,_2,_1,_3,_1,_4,_7,_5,_6,_3,_1,_3,_0,_6,_4,_6,_5,_0,_1,_1,_1,_6,_5,_7,_4,_1,_1,_1,_0,_6,_5,_7,_4,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_4,_5,_5,_4,_1,_1,_1,_0,_5,_4,_4,_4,_1,_0,_0,_0,_2,_0,_2,_1,_0,_1,_1,_1,_2,_1,_3,_0,_1,_1,_1,_0,_0,_0,_0,_1,_0,_1,_1,_1,_0,_1,_1,_0,_1,_1,_1,_0,_0,_1,_1,_0,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_1,_1,_0,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,
+      _2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_0,_1,_1,_0,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _c,_c,_c,_c,_0,_0,_0,_1,_4,_4,_4,_5,_0,_1,_1,_1,_c,_c,_c,_c,_0,_2,_0,_3,_4,_4,_4,_5,_0,_3,_1,_3,_c,_c,_c,_d,_0,_3,_1,_3,_4,_5,_5,_4,_1,_3,_1,_2,_c,_e,_c,_f,_2,_1,_3,_1,_4,_7,_5,_6,_3,_1,_3,_0,_8,_8,_8,_8,_0,_2,_0,_3,_0,_0,_0,_1,_0,_3,_1,_3,_8,_a,_8,_a,_2,_0,_2,_1,_0,_2,_0,_3,_2,_1,_3,_1,_8,_a,_8,_b,_2,_1,_3,_1,_0,_3,_1,_2,_3,_1,_3,_0,_a,_8,_a,_9,_0,_1,_1,_1,_2,_1,_3,_0,_1,_1,_1,_0,
+      _0,_0,_0,_1,_0,_3,_1,_3,_0,_1,_1,_0,_1,_3,_1,_2,_0,_2,_0,_3,_2,_3,_3,_3,_0,_3,_1,_2,_3,_3,_3,_2,_0,_3,_1,_2,_3,_3,_3,_2,_1,_2,_0,_2,_3,_2,_2,_2,_2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_0,_2,_0,_3,_2,_3,_3,_3,_0,_3,_1,_2,_3,_3,_3,_2,_2,_2,_2,_3,_2,_1,_3,_1,_2,_3,_3,_2,_3,_1,_3,_0,_2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,
+      _8,_8,_8,_8,_0,_2,_0,_3,_0,_0,_0,_1,_0,_3,_1,_3,_8,_a,_8,_a,_2,_0,_2,_1,_0,_2,_0,_3,_2,_1,_3,_1,_8,_a,_8,_b,_2,_1,_3,_1,_0,_3,_1,_2,_3,_1,_3,_0,_a,_8,_a,_9,_0,_1,_1,_1,_2,_1,_3,_0,_1,_1,_1,_0,_8,_a,_8,_a,_2,_0,_2,_1,_0,_2,_0,_3,_2,_1,_3,_1,_a,_8,_a,_8,_0,_0,_0,_1,_2,_0,_2,_1,_0,_1,_1,_1,_a,_8,_a,_9,_0,_1,_1,_1,_2,_1,_3,_0,_1,_1,_1,_0,_8,_8,_8,_9,_0,_1,_1,_1,_0,_1,_1,_0,_1,_1,_1,_0,
+      _0,_2,_0,_3,_2,_3,_3,_3,_0,_3,_1,_2,_3,_3,_3,_2,_2,_2,_2,_3,_2,_1,_3,_1,_2,_3,_3,_2,_3,_1,_3,_0,_2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_2,_2,_3,_2,_1,_3,_1,_2,_3,_3,_2,_3,_1,_3,_0,_2,_0,_2,_1,_0,_1,_1,_1,_2,_1,_3,_0,_1,_1,_1,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_0,_1,_1,_0,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,
+      _4,_4,_4,_5,_0,_3,_1,_3,_4,_5,_5,_4,_1,_3,_1,_2,_4,_6,_4,_7,_2,_1,_3,_1,_4,_7,_5,_6,_3,_1,_3,_0,_4,_7,_5,_6,_3,_1,_3,_0,_5,_6,_4,_6,_3,_0,_2,_0,_6,_5,_7,_4,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_0,_2,_0,_3,_2,_1,_3,_1,_0,_3,_1,_2,_3,_1,_3,_0,_2,_0,_2,_1,_0,_1,_1,_1,_2,_1,_3,_0,_1,_1,_1,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_0,_1,_1,_0,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,
+      _0,_3,_1,_2,_3,_3,_3,_2,_1,_2,_0,_2,_3,_2,_2,_2,_2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _0,_2,_0,_3,_2,_1,_3,_1,_0,_3,_1,_2,_3,_1,_3,_0,_2,_0,_2,_1,_0,_1,_1,_1,_2,_1,_3,_0,_1,_1,_1,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_0,_1,_1,_0,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_2,_0,_2,_1,_0,_1,_1,_1,_2,_1,_3,_0,_1,_1,_1,_0,_0,_0,_0,_1,_0,_1,_1,_1,_0,_1,_1,_0,_1,_1,_1,_0,_0,_1,_1,_0,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_1,_1,_0,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,
+      _2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_0,_1,_1,_0,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _8,_8,_8,_9,_c,_f,_d,_f,_8,_9,_9,_8,_5,_7,_5,_6,_8,_a,_8,_b,_e,_d,_f,_d,_8,_b,_9,_a,_7,_5,_7,_4,_8,_b,_9,_a,_f,_d,_f,_c,_9,_a,_8,_a,_7,_4,_6,_4,_a,_9,_b,_8,_d,_d,_d,_c,_b,_8,_a,_8,_5,_4,_4,_4,_c,_e,_c,_f,_a,_9,_b,_9,_c,_f,_d,_e,_3,_1,_3,_0,_e,_c,_e,_d,_8,_9,_9,_9,_e,_d,_f,_c,_1,_1,_1,_0,_e,_d,_f,_c,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,_c,_d,_d,_c,_9,_9,_9,_8,_d,_c,_c,_c,_1,_0,_0,_0,
+      _c,_f,_d,_e,_3,_3,_3,_2,_5,_6,_4,_6,_3,_2,_2,_2,_e,_f,_f,_e,_3,_1,_3,_0,_7,_6,_6,_6,_3,_0,_2,_0,_f,_e,_e,_e,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_a,_b,_b,_a,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _c,_e,_c,_f,_a,_9,_b,_9,_c,_f,_d,_e,_3,_1,_3,_0,_e,_c,_e,_d,_8,_9,_9,_9,_e,_d,_f,_c,_1,_1,_1,_0,_e,_d,_f,_c,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,_c,_d,_d,_c,_9,_9,_9,_8,_d,_c,_c,_c,_1,_0,_0,_0,_a,_8,_a,_9,_8,_9,_9,_9,_a,_9,_b,_8,_1,_1,_1,_0,_8,_8,_8,_9,_8,_9,_9,_9,_8,_9,_9,_8,_1,_1,_1,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,
+      _a,_b,_b,_a,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _c,_f,_d,_e,_7,_5,_7,_4,_5,_6,_4,_6,_7,_4,_6,_4,_e,_d,_f,_c,_5,_5,_5,_4,_7,_4,_6,_4,_5,_4,_4,_4,_f,_c,_e,_c,_5,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_d,_c,_c,_c,_5,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_c,_d,_d,_c,_1,_1,_1,_0,_5,_4,_4,_4,_1,_0,_0,_0,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,
+      _7,_6,_6,_6,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_c,_d,_d,_c,_1,_1,_1,_0,_5,_4,_4,_4,_1,_0,_0,_0,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _c,_c,_c,_d,_8,_b,_9,_b,_c,_d,_d,_c,_1,_3,_1,_2,_c,_e,_c,_f,_a,_9,_b,_9,_c,_f,_d,_e,_3,_1,_3,_0,_c,_f,_d,_e,_b,_9,_b,_8,_d,_e,_c,_e,_3,_0,_2,_0,_e,_d,_f,_c,_9,_9,_9,_8,_f,_c,_e,_c,_1,_0,_0,_0,_8,_a,_8,_b,_a,_9,_b,_9,_8,_b,_9,_a,_3,_1,_3,_0,_a,_8,_a,_9,_8,_9,_9,_9,_a,_9,_b,_8,_1,_1,_1,_0,_a,_9,_b,_8,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,
+      _8,_b,_9,_a,_3,_3,_3,_2,_1,_2,_0,_2,_3,_2,_2,_2,_a,_b,_b,_a,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_b,_a,_a,_a,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_a,_b,_b,_a,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _8,_a,_8,_b,_a,_9,_b,_9,_8,_b,_9,_a,_3,_1,_3,_0,_a,_8,_a,_9,_8,_9,_9,_9,_a,_9,_b,_8,_1,_1,_1,_0,_a,_9,_b,_8,_9,_9,_9,_8,_b,_8,_a,_8,_1,_0,_0,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,_a,_8,_a,_9,_8,_9,_9,_9,_a,_9,_b,_8,_1,_1,_1,_0,_8,_8,_8,_9,_8,_9,_9,_9,_8,_9,_9,_8,_1,_1,_1,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,_8,_9,_9,_8,_9,_9,_9,_8,_9,_8,_8,_8,_1,_0,_0,_0,
+      _a,_b,_b,_a,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _c,_f,_d,_e,_3,_1,_3,_0,_5,_6,_4,_6,_3,_0,_2,_0,_e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _c,_c,_c,_d,_0,_3,_1,_3,_4,_5,_5,_4,_1,_3,_1,_2,_c,_e,_c,_f,_2,_1,_3,_1,_4,_7,_5,_6,_3,_1,_3,_0,_c,_f,_d,_e,_3,_1,_3,_0,_5,_6,_4,_6,_3,_0,_2,_0,_e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_8,_a,_8,_b,_2,_1,_3,_1,_0,_3,_1,_2,_3,_1,_3,_0,_a,_8,_a,_9,_0,_1,_1,_1,_2,_1,_3,_0,_1,_1,_1,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,
+      _0,_3,_1,_2,_3,_3,_3,_2,_1,_2,_0,_2,_3,_2,_2,_2,_2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _8,_a,_8,_b,_2,_1,_3,_1,_0,_3,_1,_2,_3,_1,_3,_0,_a,_8,_a,_9,_0,_1,_1,_1,_2,_1,_3,_0,_1,_1,_1,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_a,_8,_a,_9,_0,_1,_1,_1,_2,_1,_3,_0,_1,_1,_1,_0,_8,_8,_8,_9,_0,_1,_1,_1,_0,_1,_1,_0,_1,_1,_1,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,
+      _2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_0,_1,_1,_0,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _4,_7,_5,_6,_3,_1,_3,_0,_5,_6,_4,_6,_3,_0,_2,_0,_6,_5,_7,_4,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_5,_4,_4,_4,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_0,_1,_1,_0,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_0,_1,_1,_0,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_1,_0,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_1,_1,_0,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _8,_8,_8,_9,_0,_3,_1,_3,_0,_1,_1,_0,_1,_3,_1,_2,_8,_a,_8,_b,_2,_1,_3,_1,_0,_3,_1,_2,_3,_1,_3,_0,_8,_b,_9,_a,_3,_1,_3,_0,_1,_2,_0,_2,_3,_0,_2,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_a,_8,_b,_2,_1,_3,_1,_0,_3,_1,_2,_3,_1,_3,_0,_a,_8,_a,_9,_0,_1,_1,_1,_2,_1,_3,_0,_1,_1,_1,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,
+      _0,_3,_1,_2,_3,_3,_3,_2,_1,_2,_0,_2,_3,_2,_2,_2,_2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _8,_a,_8,_b,_2,_1,_3,_1,_0,_3,_1,_2,_3,_1,_3,_0,_a,_8,_a,_9,_0,_1,_1,_1,_2,_1,_3,_0,_1,_1,_1,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_a,_8,_a,_9,_0,_1,_1,_1,_2,_1,_3,_0,_1,_1,_1,_0,_8,_8,_8,_9,_0,_1,_1,_1,_0,_1,_1,_0,_1,_1,_1,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,
+      _2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_0,_1,_1,_0,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _0,_3,_1,_2,_3,_1,_3,_0,_1,_2,_0,_2,_3,_0,_2,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_0,_1,_1,_0,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_0,_1,_1,_0,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_1,_0,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_1,_1,_0,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _8,_8,_8,_9,_0,_1,_1,_1,_0,_1,_1,_0,_1,_1,_1,_0,_8,_8,_8,_9,_0,_3,_1,_3,_0,_1,_1,_0,_1,_3,_1,_2,_8,_9,_9,_8,_1,_3,_1,_2,_1,_0,_0,_0,_1,_2,_0,_2,_8,_b,_9,_a,_3,_1,_3,_0,_1,_2,_0,_2,_3,_0,_2,_0,_8,_8,_8,_9,_4,_7,_5,_7,_0,_1,_1,_0,_5,_7,_5,_6,_8,_a,_8,_b,_6,_5,_7,_5,_0,_3,_1,_2,_7,_5,_7,_4,_8,_b,_9,_a,_7,_5,_7,_4,_1,_2,_0,_2,_7,_4,_6,_4,_a,_9,_b,_8,_5,_5,_5,_4,_3,_0,_2,_0,_5,_4,_4,_4,
+      _0,_1,_1,_0,_5,_7,_5,_6,_1,_0,_0,_0,_5,_6,_4,_6,_0,_3,_1,_2,_7,_7,_7,_6,_1,_2,_0,_2,_7,_6,_6,_6,_1,_2,_0,_2,_7,_6,_6,_6,_0,_2,_0,_2,_6,_6,_6,_6,_3,_2,_2,_2,_7,_4,_6,_4,_2,_2,_2,_2,_6,_4,_6,_4,_4,_7,_5,_6,_3,_3,_3,_2,_5,_6,_4,_6,_3,_2,_2,_2,_6,_7,_7,_6,_3,_1,_3,_0,_7,_6,_6,_6,_3,_0,_2,_0,_7,_6,_6,_6,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,
+      _8,_8,_8,_9,_4,_7,_5,_7,_0,_1,_1,_0,_5,_7,_5,_6,_8,_a,_8,_b,_6,_5,_7,_5,_0,_3,_1,_2,_7,_5,_7,_4,_8,_b,_9,_a,_7,_5,_7,_4,_1,_2,_0,_2,_7,_4,_6,_4,_a,_9,_b,_8,_5,_5,_5,_4,_3,_0,_2,_0,_5,_4,_4,_4,_c,_e,_c,_f,_2,_1,_3,_1,_4,_7,_5,_6,_3,_1,_3,_0,_e,_c,_e,_d,_0,_1,_1,_1,_6,_5,_7,_4,_1,_1,_1,_0,_e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_c,_d,_d,_c,_1,_1,_1,_0,_5,_4,_4,_4,_1,_0,_0,_0,
+      _4,_7,_5,_6,_3,_3,_3,_2,_5,_6,_4,_6,_3,_2,_2,_2,_6,_7,_7,_6,_3,_1,_3,_0,_7,_6,_6,_6,_3,_0,_2,_0,_7,_6,_6,_6,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _0,_1,_1,_0,_5,_7,_5,_6,_1,_0,_0,_0,_5,_6,_4,_6,_0,_3,_1,_2,_7,_5,_7,_4,_1,_2,_0,_2,_7,_4,_6,_4,_1,_2,_0,_2,_7,_4,_6,_4,_0,_2,_0,_2,_6,_4,_6,_4,_3,_0,_2,_0,_5,_4,_4,_4,_2,_0,_2,_0,_4,_4,_4,_4,_4,_7,_5,_6,_7,_5,_7,_4,_5,_6,_4,_6,_7,_4,_6,_4,_6,_5,_7,_4,_5,_5,_5,_4,_7,_4,_6,_4,_5,_4,_4,_4,_7,_4,_6,_4,_5,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_5,_4,_4,_4,_5,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,
+      _5,_6,_4,_6,_7,_6,_6,_6,_4,_6,_4,_6,_6,_6,_6,_6,_7,_6,_6,_6,_7,_4,_6,_4,_6,_6,_6,_6,_6,_4,_6,_4,_6,_6,_6,_6,_6,_4,_6,_4,_6,_6,_6,_6,_6,_4,_6,_4,_6,_4,_6,_4,_4,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_7,_6,_6,_6,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,
+      _4,_7,_5,_6,_7,_5,_7,_4,_5,_6,_4,_6,_7,_4,_6,_4,_6,_5,_7,_4,_5,_5,_5,_4,_7,_4,_6,_4,_5,_4,_4,_4,_7,_4,_6,_4,_5,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_5,_4,_4,_4,_5,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_6,_5,_7,_4,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_4,_5,_5,_4,_1,_1,_1,_0,_5,_4,_4,_4,_1,_0,_0,_0,_5,_4,_4,_4,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_5,_4,_4,_4,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,
+      _7,_6,_6,_6,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _8,_8,_8,_9,_4,_5,_5,_5,_0,_1,_1,_0,_5,_5,_5,_4,_8,_8,_8,_9,_4,_7,_5,_7,_0,_1,_1,_0,_5,_7,_5,_6,_8,_9,_9,_8,_5,_7,_5,_6,_1,_0,_0,_0,_5,_6,_4,_6,_8,_b,_9,_a,_7,_5,_7,_4,_1,_2,_0,_2,_7,_4,_6,_4,_c,_c,_c,_d,_0,_3,_1,_3,_4,_5,_5,_4,_1,_3,_1,_2,_c,_e,_c,_f,_2,_1,_3,_1,_4,_7,_5,_6,_3,_1,_3,_0,_c,_f,_d,_e,_3,_1,_3,_0,_5,_6,_4,_6,_3,_0,_2,_0,_e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,
+      _4,_5,_5,_4,_1,_3,_1,_2,_5,_4,_4,_4,_1,_2,_0,_2,_4,_7,_5,_6,_3,_3,_3,_2,_5,_6,_4,_6,_3,_2,_2,_2,_5,_6,_4,_6,_3,_2,_2,_2,_4,_6,_4,_6,_2,_2,_2,_2,_7,_6,_6,_6,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_0,_3,_1,_2,_3,_3,_3,_2,_1,_2,_0,_2,_3,_2,_2,_2,_2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,
+      _c,_c,_c,_d,_0,_3,_1,_3,_4,_5,_5,_4,_1,_3,_1,_2,_c,_e,_c,_f,_2,_1,_3,_1,_4,_7,_5,_6,_3,_1,_3,_0,_c,_f,_d,_e,_3,_1,_3,_0,_5,_6,_4,_6,_3,_0,_2,_0,_e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_8,_a,_8,_b,_2,_1,_3,_1,_0,_3,_1,_2,_3,_1,_3,_0,_a,_8,_a,_9,_0,_1,_1,_1,_2,_1,_3,_0,_1,_1,_1,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,
+      _0,_3,_1,_2,_3,_3,_3,_2,_1,_2,_0,_2,_3,_2,_2,_2,_2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _4,_5,_5,_4,_5,_7,_5,_6,_5,_4,_4,_4,_5,_6,_4,_6,_4,_7,_5,_6,_7,_5,_7,_4,_5,_6,_4,_6,_7,_4,_6,_4,_5,_6,_4,_6,_7,_4,_6,_4,_4,_6,_4,_6,_6,_4,_6,_4,_7,_4,_6,_4,_5,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_4,_7,_5,_6,_3,_1,_3,_0,_5,_6,_4,_6,_3,_0,_2,_0,_6,_5,_7,_4,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_5,_4,_4,_4,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,
+      _5,_6,_4,_6,_3,_2,_2,_2,_4,_6,_4,_6,_2,_2,_2,_2,_7,_6,_6,_6,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _4,_7,_5,_6,_3,_1,_3,_0,_5,_6,_4,_6,_3,_0,_2,_0,_6,_5,_7,_4,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_5,_4,_4,_4,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_0,_1,_1,_0,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _0,_0,_0,_1,_4,_5,_5,_5,_0,_1,_1,_0,_5,_5,_5,_4,_0,_0,_0,_1,_4,_7,_5,_7,_0,_1,_1,_0,_5,_7,_5,_6,_0,_1,_1,_0,_5,_7,_5,_6,_1,_0,_0,_0,_5,_6,_4,_6,_0,_3,_1,_2,_7,_5,_7,_4,_1,_2,_0,_2,_7,_4,_6,_4,_4,_4,_4,_5,_0,_3,_1,_3,_4,_5,_5,_4,_1,_3,_1,_2,_4,_6,_4,_7,_2,_1,_3,_1,_4,_7,_5,_6,_3,_1,_3,_0,_4,_7,_5,_6,_3,_1,_3,_0,_5,_6,_4,_6,_3,_0,_2,_0,_6,_5,_7,_4,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,
+      _4,_5,_5,_4,_1,_3,_1,_2,_5,_4,_4,_4,_1,_2,_0,_2,_4,_7,_5,_6,_3,_3,_3,_2,_5,_6,_4,_6,_3,_2,_2,_2,_5,_6,_4,_6,_3,_2,_2,_2,_4,_6,_4,_6,_2,_2,_2,_2,_7,_6,_6,_6,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_0,_3,_1,_2,_3,_3,_3,_2,_1,_2,_0,_2,_3,_2,_2,_2,_2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,
+      _4,_4,_4,_5,_0,_3,_1,_3,_4,_5,_5,_4,_1,_3,_1,_2,_4,_6,_4,_7,_2,_1,_3,_1,_4,_7,_5,_6,_3,_1,_3,_0,_4,_7,_5,_6,_3,_1,_3,_0,_5,_6,_4,_6,_3,_0,_2,_0,_6,_5,_7,_4,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_0,_2,_0,_3,_2,_1,_3,_1,_0,_3,_1,_2,_3,_1,_3,_0,_2,_0,_2,_1,_0,_1,_1,_1,_2,_1,_3,_0,_1,_1,_1,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_0,_1,_1,_0,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,
+      _0,_3,_1,_2,_3,_3,_3,_2,_1,_2,_0,_2,_3,_2,_2,_2,_2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _4,_5,_5,_4,_5,_7,_5,_6,_5,_4,_4,_4,_5,_6,_4,_6,_4,_7,_5,_6,_7,_5,_7,_4,_5,_6,_4,_6,_7,_4,_6,_4,_5,_6,_4,_6,_7,_4,_6,_4,_4,_6,_4,_6,_6,_4,_6,_4,_7,_4,_6,_4,_5,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_4,_7,_5,_6,_3,_1,_3,_0,_5,_6,_4,_6,_3,_0,_2,_0,_6,_5,_7,_4,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_5,_4,_4,_4,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,
+      _5,_6,_4,_6,_3,_2,_2,_2,_4,_6,_4,_6,_2,_2,_2,_2,_7,_6,_6,_6,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _4,_7,_5,_6,_3,_1,_3,_0,_5,_6,_4,_6,_3,_0,_2,_0,_6,_5,_7,_4,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_5,_4,_4,_4,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_0,_1,_1,_0,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _4,_4,_4,_5,_0,_1,_1,_1,_4,_5,_5,_4,_1,_1,_1,_0,_4,_4,_4,_5,_0,_3,_1,_3,_4,_5,_5,_4,_1,_3,_1,_2,_4,_5,_5,_4,_1,_3,_1,_2,_5,_4,_4,_4,_1,_2,_0,_2,_4,_7,_5,_6,_3,_1,_3,_0,_5,_6,_4,_6,_3,_0,_2,_0,_0,_0,_0,_1,_0,_3,_1,_3,_0,_1,_1,_0,_1,_3,_1,_2,_0,_2,_0,_3,_2,_1,_3,_1,_0,_3,_1,_2,_3,_1,_3,_0,_0,_3,_1,_2,_3,_1,_3,_0,_1,_2,_0,_2,_3,_0,_2,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,
+      _0,_1,_1,_0,_1,_3,_1,_2,_1,_0,_0,_0,_1,_2,_0,_2,_0,_3,_1,_2,_3,_3,_3,_2,_1,_2,_0,_2,_3,_2,_2,_2,_1,_2,_0,_2,_3,_2,_2,_2,_0,_2,_0,_2,_2,_2,_2,_2,_3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_0,_3,_1,_2,_3,_3,_3,_2,_1,_2,_0,_2,_3,_2,_2,_2,_2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,
+      _0,_0,_0,_1,_0,_3,_1,_3,_0,_1,_1,_0,_1,_3,_1,_2,_0,_2,_0,_3,_2,_1,_3,_1,_0,_3,_1,_2,_3,_1,_3,_0,_0,_3,_1,_2,_3,_1,_3,_0,_1,_2,_0,_2,_3,_0,_2,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_0,_2,_0,_3,_2,_1,_3,_1,_0,_3,_1,_2,_3,_1,_3,_0,_2,_0,_2,_1,_0,_1,_1,_1,_2,_1,_3,_0,_1,_1,_1,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_0,_1,_1,_0,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,
+      _0,_3,_1,_2,_3,_3,_3,_2,_1,_2,_0,_2,_3,_2,_2,_2,_2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_3,_3,_2,_3,_1,_3,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _4,_5,_5,_4,_1,_3,_1,_2,_5,_4,_4,_4,_1,_2,_0,_2,_4,_7,_5,_6,_3,_1,_3,_0,_5,_6,_4,_6,_3,_0,_2,_0,_5,_6,_4,_6,_3,_0,_2,_0,_4,_6,_4,_6,_2,_0,_2,_0,_7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_0,_3,_1,_2,_3,_1,_3,_0,_1,_2,_0,_2,_3,_0,_2,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _1,_2,_0,_2,_3,_2,_2,_2,_0,_2,_0,_2,_2,_2,_2,_2,_3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _0,_3,_1,_2,_3,_1,_3,_0,_1,_2,_0,_2,_3,_0,_2,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_0,_1,_1,_0,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _8,_9,_9,_8,_5,_7,_5,_6,_1,_0,_0,_0,_5,_6,_4,_6,_8,_b,_9,_a,_7,_5,_7,_4,_1,_2,_0,_2,_7,_4,_6,_4,_9,_a,_8,_a,_7,_4,_6,_4,_0,_2,_0,_2,_6,_4,_6,_4,_b,_8,_a,_8,_5,_4,_4,_4,_2,_0,_2,_0,_4,_4,_4,_4,_c,_f,_d,_e,_3,_1,_3,_0,_5,_6,_4,_6,_3,_0,_2,_0,_e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,
+      _5,_6,_4,_6,_3,_2,_2,_2,_4,_6,_4,_6,_2,_2,_2,_2,_7,_6,_6,_6,_3,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _c,_f,_d,_e,_3,_1,_3,_0,_5,_6,_4,_6,_3,_0,_2,_0,_e,_d,_f,_c,_1,_1,_1,_0,_7,_4,_6,_4,_1,_0,_0,_0,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_d,_c,_c,_c,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _5,_6,_4,_6,_7,_4,_6,_4,_4,_6,_4,_6,_6,_4,_6,_4,_7,_4,_6,_4,_5,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_6,_4,_6,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_4,_7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_5,_4,_4,_4,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,
+      _6,_6,_6,_6,_2,_0,_2,_0,_6,_6,_6,_6,_2,_0,_2,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_5,_4,_4,_4,_1,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _c,_d,_d,_c,_1,_3,_1,_2,_5,_4,_4,_4,_1,_2,_0,_2,_c,_f,_d,_e,_3,_1,_3,_0,_5,_6,_4,_6,_3,_0,_2,_0,_d,_e,_c,_e,_3,_0,_2,_0,_4,_6,_4,_6,_2,_0,_2,_0,_f,_c,_e,_c,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_8,_b,_9,_a,_3,_1,_3,_0,_1,_2,_0,_2,_3,_0,_2,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _1,_2,_0,_2,_3,_2,_2,_2,_0,_2,_0,_2,_2,_2,_2,_2,_3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _8,_b,_9,_a,_3,_1,_3,_0,_1,_2,_0,_2,_3,_0,_2,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_b,_8,_a,_8,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_a,_9,_b,_8,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_8,_9,_9,_8,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_9,_8,_8,_8,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _5,_6,_4,_6,_3,_0,_2,_0,_4,_6,_4,_6,_2,_0,_2,_0,_7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _2,_2,_2,_2,_2,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _4,_5,_5,_4,_1,_3,_1,_2,_5,_4,_4,_4,_1,_2,_0,_2,_4,_7,_5,_6,_3,_1,_3,_0,_5,_6,_4,_6,_3,_0,_2,_0,_5,_6,_4,_6,_3,_0,_2,_0,_4,_6,_4,_6,_2,_0,_2,_0,_7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_0,_3,_1,_2,_3,_1,_3,_0,_1,_2,_0,_2,_3,_0,_2,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _1,_2,_0,_2,_3,_2,_2,_2,_0,_2,_0,_2,_2,_2,_2,_2,_3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _0,_3,_1,_2,_3,_1,_3,_0,_1,_2,_0,_2,_3,_0,_2,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_0,_1,_1,_0,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _5,_6,_4,_6,_3,_0,_2,_0,_4,_6,_4,_6,_2,_0,_2,_0,_7,_4,_6,_4,_1,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_6,_4,_6,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_4,_4,_4,_4,_0,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _2,_2,_2,_2,_2,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _0,_1,_1,_0,_1,_3,_1,_2,_1,_0,_0,_0,_1,_2,_0,_2,_0,_3,_1,_2,_3,_1,_3,_0,_1,_2,_0,_2,_3,_0,_2,_0,_1,_2,_0,_2,_3,_0,_2,_0,_0,_2,_0,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_3,_1,_2,_3,_1,_3,_0,_1,_2,_0,_2,_3,_0,_2,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _1,_2,_0,_2,_3,_2,_2,_2,_0,_2,_0,_2,_2,_2,_2,_2,_3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _0,_3,_1,_2,_3,_1,_3,_0,_1,_2,_0,_2,_3,_0,_2,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_2,_1,_3,_0,_1,_1,_1,_0,_3,_0,_2,_0,_1,_0,_0,_0,_0,_1,_1,_0,_1,_1,_1,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _3,_2,_2,_2,_3,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _1,_2,_0,_2,_3,_0,_2,_0,_0,_2,_0,_2,_2,_0,_2,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _2,_2,_2,_2,_2,_0,_2,_0,_2,_2,_2,_2,_2,_0,_2,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _3,_0,_2,_0,_1,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_1,_0,_0,_0,_1,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,
+      _2,_0,_2,_0,_0,_0,_0,_0,_2,_0,_2,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0,_0
+   };
+
+   public static Node calculate(Node lt, Node rt, Node rb, Node lb) {
+       int value = getNumeric(lt) << 12 | getNumeric(rt) << 8 | getNumeric(rb) << 4 | getNumeric(lb);
+       return PRECALCULATED[value];
+   }
+}
diff --git a/java/java-tests/testData/psi/types/assignableSubinheritor/empty.txt b/java/java-tests/testData/psi/types/assignableSubinheritor/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/psi/types/assignableSubinheritor/empty.txt
diff --git a/java/java-tests/testData/psi/types/boundedParams/A.java b/java/java-tests/testData/psi/types/boundedParams/A.java
new file mode 100644
index 0000000..4e9dc5e
--- /dev/null
+++ b/java/java-tests/testData/psi/types/boundedParams/A.java
@@ -0,0 +1,7 @@
+import test.*;
+
+class A<T extends Collection> {
+    void method(T param) {
+	Iterator it = param.iterator();
+    }
+}
diff --git a/java/java-tests/testData/psi/types/complexInheritance/A.java b/java/java-tests/testData/psi/types/complexInheritance/A.java
new file mode 100644
index 0000000..e1cc4aa
--- /dev/null
+++ b/java/java-tests/testData/psi/types/complexInheritance/A.java
@@ -0,0 +1,9 @@
+import test.*;
+
+public class A {
+    void method() {
+        IntListList l = new IntListList();
+        l.get(0);
+    }
+}
+
diff --git a/java/java-tests/testData/psi/types/listListInheritance/A.java b/java/java-tests/testData/psi/types/listListInheritance/A.java
new file mode 100644
index 0000000..2eff7e2
--- /dev/null
+++ b/java/java-tests/testData/psi/types/listListInheritance/A.java
@@ -0,0 +1,15 @@
+import test.*;
+
+public class A {
+    public static class B extends ListList<Integer> {
+    }
+
+    public void method() {
+        ListList<Integer> l = new ListList<Integer>();
+        l.get(0);
+        B b = new B();
+        b.get(0);
+        l.add(b.get(0));
+        b.add(l.get(0))
+    }
+}
diff --git a/java/java-tests/testData/psi/types/methodTypeParameter/A.java b/java/java-tests/testData/psi/types/methodTypeParameter/A.java
new file mode 100644
index 0000000..5a33e57
--- /dev/null
+++ b/java/java-tests/testData/psi/types/methodTypeParameter/A.java
@@ -0,0 +1,10 @@
+import test.*;
+
+public class A {
+    public void method() {
+        List<Integer> l = new List<Integer>();
+        CollectionUtil.sort(l);
+        List l1 = new List();
+        CollectionUtil.sort(l1)
+    }
+}
diff --git a/java/java-tests/testData/psi/types/rawArrayTypes/A.java b/java/java-tests/testData/psi/types/rawArrayTypes/A.java
new file mode 100644
index 0000000..552a0ba
--- /dev/null
+++ b/java/java-tests/testData/psi/types/rawArrayTypes/A.java
@@ -0,0 +1,9 @@
+import test.*;
+
+class A {
+    void method() {
+        List l;
+        l.getArray();
+        l.getListOfArrays();
+    }
+}
diff --git a/java/java-tests/testData/psi/types/rawTypeExtension/A.java b/java/java-tests/testData/psi/types/rawTypeExtension/A.java
new file mode 100644
index 0000000..bb09f35
--- /dev/null
+++ b/java/java-tests/testData/psi/types/rawTypeExtension/A.java
@@ -0,0 +1,7 @@
+import test.*;
+
+class A extends List {
+    void method() {
+	Iterator it = iterator();
+    }
+}
diff --git a/java/java-tests/testData/psi/types/rawTypeInMethodArg/A.java b/java/java-tests/testData/psi/types/rawTypeInMethodArg/A.java
new file mode 100644
index 0000000..d279a2a
--- /dev/null
+++ b/java/java-tests/testData/psi/types/rawTypeInMethodArg/A.java
@@ -0,0 +1,9 @@
+import test.*;
+
+class A {
+    public void method() {
+        List<String> l = new List<String>();
+        List l1 = new List();
+        l1.putAll(l);
+    }
+}
diff --git a/java/java-tests/testData/psi/types/rawTypes/A.java b/java/java-tests/testData/psi/types/rawTypes/A.java
new file mode 100644
index 0000000..81bb47f
--- /dev/null
+++ b/java/java-tests/testData/psi/types/rawTypes/A.java
@@ -0,0 +1,9 @@
+import test.*;
+
+class A {
+    public void method() {
+	List list = new List();
+        list.add(new A());
+        list.iterator();
+    }
+}
diff --git a/java/java-tests/testData/psi/types/simpleRawTypeInMethodArg/A.java b/java/java-tests/testData/psi/types/simpleRawTypeInMethodArg/A.java
new file mode 100644
index 0000000..e4415f2
--- /dev/null
+++ b/java/java-tests/testData/psi/types/simpleRawTypeInMethodArg/A.java
@@ -0,0 +1,9 @@
+import test.*;
+
+public class A {
+    void method() {
+        Object o = null;
+        List l = new List();       
+        l.add(o);
+    }
+}
diff --git a/java/java-tests/testData/psi/types/simpleStuff/A.java b/java/java-tests/testData/psi/types/simpleStuff/A.java
new file mode 100644
index 0000000..b4039ac
--- /dev/null
+++ b/java/java-tests/testData/psi/types/simpleStuff/A.java
@@ -0,0 +1,9 @@
+import test.*;
+
+class A {
+    public void method() {
+	List<String> list = new List<String>();
+        list.add("abcd");
+	list.iterator();
+    }
+}
diff --git a/java/java-tests/testData/psi/types/spaceInTypeParameterList/A.java b/java/java-tests/testData/psi/types/spaceInTypeParameterList/A.java
new file mode 100644
index 0000000..659652d
--- /dev/null
+++ b/java/java-tests/testData/psi/types/spaceInTypeParameterList/A.java
@@ -0,0 +1,7 @@
+import test.*;
+
+public class A {
+    public void method() {
+        List<List <Integer>> l = null;
+    }
+}
diff --git a/java/java-tests/testData/psi/types/src/test/AbstractCollection.java b/java/java-tests/testData/psi/types/src/test/AbstractCollection.java
new file mode 100644
index 0000000..5c2b4cd
--- /dev/null
+++ b/java/java-tests/testData/psi/types/src/test/AbstractCollection.java
@@ -0,0 +1,2 @@
+public class SubList<E> extends List<E> {
+}
diff --git a/java/java-tests/testData/psi/types/src/test/Collection.java b/java/java-tests/testData/psi/types/src/test/Collection.java
new file mode 100644
index 0000000..f7c133b1
--- /dev/null
+++ b/java/java-tests/testData/psi/types/src/test/Collection.java
@@ -0,0 +1,9 @@
+package test;
+
+public interface Collection<E> {
+    void add(E e);
+    void remove(E e);
+    boolean contains(E e);
+    Iterator<E> iterator();
+    void putAll(Collection<E> l);
+}
diff --git a/java/java-tests/testData/psi/types/src/test/CollectionUtil.java b/java/java-tests/testData/psi/types/src/test/CollectionUtil.java
new file mode 100644
index 0000000..8ba6791
--- /dev/null
+++ b/java/java-tests/testData/psi/types/src/test/CollectionUtil.java
@@ -0,0 +1,6 @@
+package test;
+
+public abstract class CollectionUtil {
+    public static <T> void sort(Collection<T> collection) {
+    }
+}
diff --git a/java/java-tests/testData/psi/types/src/test/IntList.java b/java/java-tests/testData/psi/types/src/test/IntList.java
new file mode 100644
index 0000000..2371b5b
--- /dev/null
+++ b/java/java-tests/testData/psi/types/src/test/IntList.java
@@ -0,0 +1,5 @@
+package test;
+
+public class IntList extends List<Integer> {
+
+}
diff --git a/java/java-tests/testData/psi/types/src/test/IntListList.java b/java/java-tests/testData/psi/types/src/test/IntListList.java
new file mode 100644
index 0000000..5d2c22b
--- /dev/null
+++ b/java/java-tests/testData/psi/types/src/test/IntListList.java
@@ -0,0 +1,4 @@
+package test;
+
+public class IntListList extends List<List<Integer>> {
+}
diff --git a/java/java-tests/testData/psi/types/src/test/Iterator.java b/java/java-tests/testData/psi/types/src/test/Iterator.java
new file mode 100644
index 0000000..26ba19b
--- /dev/null
+++ b/java/java-tests/testData/psi/types/src/test/Iterator.java
@@ -0,0 +1,5 @@
+package test;
+public interface Iterator<E> {
+    E next();
+    boolean hasNext();
+}
diff --git a/java/java-tests/testData/psi/types/src/test/List.java b/java/java-tests/testData/psi/types/src/test/List.java
new file mode 100644
index 0000000..0a9b7a6
--- /dev/null
+++ b/java/java-tests/testData/psi/types/src/test/List.java
@@ -0,0 +1,23 @@
+package test;
+
+public class List<T> implements Collection<T> {
+   public void add(T e) {
+   }
+   public void remove(T e) {
+   }
+   public Iterator<T> iterator() {
+       return null;
+   }
+   public boolean contains(T e) {
+       return false;
+   }
+   public T get(int i) {
+       return null;
+   }
+   public void putAll(Collection<T> e) {
+   }
+   public T[] getArray() {
+   }
+   public List<T[]> getListOfArrays() {
+   }
+}
diff --git a/java/java-tests/testData/psi/types/src/test/ListList.java b/java/java-tests/testData/psi/types/src/test/ListList.java
new file mode 100644
index 0000000..bfcf77c
--- /dev/null
+++ b/java/java-tests/testData/psi/types/src/test/ListList.java
@@ -0,0 +1,4 @@
+package test;
+
+public class ListList<T> extends List<List<T>> {
+}
diff --git a/java/java-tests/testData/psi/types/src/test/SubList.java b/java/java-tests/testData/psi/types/src/test/SubList.java
new file mode 100644
index 0000000..8a0cbee
--- /dev/null
+++ b/java/java-tests/testData/psi/types/src/test/SubList.java
@@ -0,0 +1,4 @@
+package test;
+
+public class SubList<L> extends List<L> {
+}
diff --git a/java/java-tests/testData/psi/types/substWithInheritor/A.java b/java/java-tests/testData/psi/types/substWithInheritor/A.java
new file mode 100644
index 0000000..fddba5a
--- /dev/null
+++ b/java/java-tests/testData/psi/types/substWithInheritor/A.java
@@ -0,0 +1,9 @@
+import test.*;
+
+class A {
+    public void method() {
+        IntList list = new IntList();
+        list.add(new Integer(1));
+        list.iterator();
+    }
+}
diff --git a/java/java-tests/testData/psi/types/typesInGenericClass/A.java b/java/java-tests/testData/psi/types/typesInGenericClass/A.java
new file mode 100644
index 0000000..0f02adc
--- /dev/null
+++ b/java/java-tests/testData/psi/types/typesInGenericClass/A.java
@@ -0,0 +1,9 @@
+public class A<T> {
+    T get() {
+        return null;
+    }
+
+    void method() {
+        get();
+    }
+}
diff --git a/java/java-tests/testData/psi/types/wildcardTypesAssignable/usages/Base.java b/java/java-tests/testData/psi/types/wildcardTypesAssignable/usages/Base.java
new file mode 100644
index 0000000..e5c359d
--- /dev/null
+++ b/java/java-tests/testData/psi/types/wildcardTypesAssignable/usages/Base.java
@@ -0,0 +1,4 @@
+package usages;
+
+public class Base {
+}
diff --git a/java/java-tests/testData/psi/types/wildcardTypesAssignable/usages/Intermediate.java b/java/java-tests/testData/psi/types/wildcardTypesAssignable/usages/Intermediate.java
new file mode 100644
index 0000000..d939aac
--- /dev/null
+++ b/java/java-tests/testData/psi/types/wildcardTypesAssignable/usages/Intermediate.java
@@ -0,0 +1,4 @@
+package usages;
+
+public class Intermediate extends Base, Runnable {
+}
diff --git a/java/java-tests/testData/psi/types/wildcardTypesAssignable/usages/Leaf.java b/java/java-tests/testData/psi/types/wildcardTypesAssignable/usages/Leaf.java
new file mode 100644
index 0000000..bf93b65
--- /dev/null
+++ b/java/java-tests/testData/psi/types/wildcardTypesAssignable/usages/Leaf.java
@@ -0,0 +1,4 @@
+package usages;
+
+public class Leaf extends Intermediate {
+}
diff --git a/java/java-tests/testData/refactoring/anonymousToInner/canBeStatic.java b/java/java-tests/testData/refactoring/anonymousToInner/canBeStatic.java
new file mode 100644
index 0000000..dd7ca49
--- /dev/null
+++ b/java/java-tests/testData/refactoring/anonymousToInner/canBeStatic.java
@@ -0,0 +1,14 @@
+public class Foo {
+    public<T> void foo() {
+        Predicate<T> predicate = ne<caret>w Predicate<T>() {
+            @Override
+            public boolean test(T t) {
+                return false;
+            }
+        };
+    }
+
+    private interface Predicate<K> {
+        boolean test(K t);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/anonymousToInner/canBeStatic_after.java b/java/java-tests/testData/refactoring/anonymousToInner/canBeStatic_after.java
new file mode 100644
index 0000000..4bcfab1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/anonymousToInner/canBeStatic_after.java
@@ -0,0 +1,16 @@
+public class Foo {
+    public<T> void foo() {
+        Predicate<T> predicate = new MyPredicate<>();
+    }
+
+    private interface Predicate<K> {
+        boolean test(K t);
+    }
+
+    private static class MyPredicate<T> implements Predicate<T> {
+        @Override
+        public boolean test(T t) {
+            return false;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/anonymousToInner/collapseDiamonds.java b/java/java-tests/testData/refactoring/anonymousToInner/collapseDiamonds.java
new file mode 100644
index 0000000..dd7ca49
--- /dev/null
+++ b/java/java-tests/testData/refactoring/anonymousToInner/collapseDiamonds.java
@@ -0,0 +1,14 @@
+public class Foo {
+    public<T> void foo() {
+        Predicate<T> predicate = ne<caret>w Predicate<T>() {
+            @Override
+            public boolean test(T t) {
+                return false;
+            }
+        };
+    }
+
+    private interface Predicate<K> {
+        boolean test(K t);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/anonymousToInner/collapseDiamonds_after.java b/java/java-tests/testData/refactoring/anonymousToInner/collapseDiamonds_after.java
new file mode 100644
index 0000000..4bcfab1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/anonymousToInner/collapseDiamonds_after.java
@@ -0,0 +1,16 @@
+public class Foo {
+    public<T> void foo() {
+        Predicate<T> predicate = new MyPredicate<>();
+    }
+
+    private interface Predicate<K> {
+        boolean test(K t);
+    }
+
+    private static class MyPredicate<T> implements Predicate<T> {
+        @Override
+        public boolean test(T t) {
+            return false;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/anonymousToInner/genericTypeParameters.java b/java/java-tests/testData/refactoring/anonymousToInner/genericTypeParameters.java
new file mode 100644
index 0000000..d0c0aac
--- /dev/null
+++ b/java/java-tests/testData/refactoring/anonymousToInner/genericTypeParameters.java
@@ -0,0 +1,18 @@
+import java.util.*;
+
+class A<K, V> {
+    public Iterator<Map.Entry<K, V>> iterator(long revision) {
+        return new <caret>Iterator<Map.Entry<K, V>>() {
+            public boolean hasNext() {
+                return false;
+            }
+
+            public Map.Entry<K, V> next() {
+                return null;
+            }
+
+            public void remove() {
+            }
+        };
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/anonymousToInner/genericTypeParameters_after.java b/java/java-tests/testData/refactoring/anonymousToInner/genericTypeParameters_after.java
new file mode 100644
index 0000000..9ee35687
--- /dev/null
+++ b/java/java-tests/testData/refactoring/anonymousToInner/genericTypeParameters_after.java
@@ -0,0 +1,20 @@
+import java.util.*;
+
+class A<K, V> {
+    public Iterator<Map.Entry<K, V>> iterator(long revision) {
+        return new MyIterator<>();
+    }
+
+    private static class MyIterator<K, V> implements Iterator<Map.Entry<K, V>> {
+        public boolean hasNext() {
+            return false;
+        }
+
+        public Map.Entry<K, V> next() {
+            return null;
+        }
+
+        public void remove() {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/anonymousToInner/insideInterface.java b/java/java-tests/testData/refactoring/anonymousToInner/insideInterface.java
new file mode 100644
index 0000000..46da505
--- /dev/null
+++ b/java/java-tests/testData/refactoring/anonymousToInner/insideInterface.java
@@ -0,0 +1,8 @@
+interface M {
+  Runnable r = new Runnable() {<caret>
+    @Override
+    public void run() {
+
+    }
+  };
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/anonymousToInner/insideInterface_after.java b/java/java-tests/testData/refactoring/anonymousToInner/insideInterface_after.java
new file mode 100644
index 0000000..dca6445
--- /dev/null
+++ b/java/java-tests/testData/refactoring/anonymousToInner/insideInterface_after.java
@@ -0,0 +1,10 @@
+interface M {
+  Runnable r = new MyRunnable();
+
+    class MyRunnable implements Runnable {
+        @Override
+        public void run() {
+    
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeClassSignature/AddParam.java b/java/java-tests/testData/refactoring/changeClassSignature/AddParam.java
new file mode 100644
index 0000000..7adfcf0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeClassSignature/AddParam.java
@@ -0,0 +1,9 @@
+class L<E> {}
+class <caret>C<T> {
+}
+
+class Usage extends C<String> {
+  {
+    C<? extends Integer> c = new C<Integer>();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeClassSignature/AddParam.java.after b/java/java-tests/testData/refactoring/changeClassSignature/AddParam.java.after
new file mode 100644
index 0000000..84211a1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeClassSignature/AddParam.java.after
@@ -0,0 +1,9 @@
+class L<E> {}
+class <caret>C<T, E> {
+}
+
+class Usage extends C<String, L<String>> {
+  {
+    C<? extends Integer, L<? extends Integer>> c = new C<Integer, L<Integer>>();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeClassSignature/InstanceOf.java b/java/java-tests/testData/refactoring/changeClassSignature/InstanceOf.java
new file mode 100644
index 0000000..37e7694
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeClassSignature/InstanceOf.java
@@ -0,0 +1,11 @@
+public class ChangeClassSignatureAddParameter {
+
+  public void test(Object object) {
+    if (object instanceof MyClass) {
+      MyClass myClass = (MyClass)object;
+    }
+  }
+}
+
+class My<caret>Class {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeClassSignature/InstanceOf.java.after b/java/java-tests/testData/refactoring/changeClassSignature/InstanceOf.java.after
new file mode 100644
index 0000000..a21b86a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeClassSignature/InstanceOf.java.after
@@ -0,0 +1,11 @@
+public class ChangeClassSignatureAddParameter {
+
+  public void test(Object object) {
+    if (object instanceof MyClass) {
+      MyClass<String> myClass = (MyClass<String>)object;
+    }
+  }
+}
+
+class MyClass<T> {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeClassSignature/NoParams.java b/java/java-tests/testData/refactoring/changeClassSignature/NoParams.java
new file mode 100644
index 0000000..84071ab
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeClassSignature/NoParams.java
@@ -0,0 +1,10 @@
+class <caret>C {
+}
+
+class Usage extends C {
+  {
+    C c = new C();
+
+    C c = new C() { }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeClassSignature/NoParams.java.after b/java/java-tests/testData/refactoring/changeClassSignature/NoParams.java.after
new file mode 100644
index 0000000..a925dde
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeClassSignature/NoParams.java.after
@@ -0,0 +1,10 @@
+class C<T> {
+}
+
+class Usage extends C<String> {
+  {
+    C<String> c = new C<String>();
+
+    C<String> c = new C<String>() { }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeClassSignature/OneString.java b/java/java-tests/testData/refactoring/changeClassSignature/OneString.java
new file mode 100644
index 0000000..d6c319b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeClassSignature/OneString.java
@@ -0,0 +1,21 @@
+class <caret>Subject<T> {
+}
+
+interface SubjectFace {
+}
+
+public class Client extends Subject<String> implements SubjectFace {
+	private Subject<String> mySubject = new Subject<String>();
+	private SubjectFace mySubjectFace = new SubjectFace() {
+	};
+
+	public Subject<String> subjectMethod(Subject<String> subject) {
+		Subject<String> varSubject = new Subject<String>();
+		return varSubject;
+	}
+	public SubjectFace subjectFaceMethod(SubjectFace subjectFace) {
+		SubjectFace varSubjectFace = new SubjectFace() {
+		};
+		return varSubjectFace;
+	}
+}
diff --git a/java/java-tests/testData/refactoring/changeClassSignature/RemoveAllParams.java b/java/java-tests/testData/refactoring/changeClassSignature/RemoveAllParams.java
new file mode 100644
index 0000000..fa4e6a0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeClassSignature/RemoveAllParams.java
@@ -0,0 +1,5 @@
+class <caret>C<X, Y, Z> {
+  {
+    C c = new C<String, String, Integer>();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeClassSignature/RemoveAllParams.java.after b/java/java-tests/testData/refactoring/changeClassSignature/RemoveAllParams.java.after
new file mode 100644
index 0000000..28ef5f5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeClassSignature/RemoveAllParams.java.after
@@ -0,0 +1,5 @@
+class C {
+  {
+    C c = new C();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeClassSignature/ReorderParams.java b/java/java-tests/testData/refactoring/changeClassSignature/ReorderParams.java
new file mode 100644
index 0000000..5edc5bc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeClassSignature/ReorderParams.java
@@ -0,0 +1,8 @@
+class <caret>C<X,Y> {
+}
+
+class Usage extends C<String,Integer> {
+  {
+    C<Boolean,String> = new C();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeClassSignature/ReorderParams.java.after b/java/java-tests/testData/refactoring/changeClassSignature/ReorderParams.java.after
new file mode 100644
index 0000000..311dfab
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeClassSignature/ReorderParams.java.after
@@ -0,0 +1,8 @@
+class C<Y, X> {
+}
+
+class Usage extends C<Integer, String> {
+  {
+    C<String, Boolean> = new C();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeClassSignature/SubjectInClient.java.blank b/java/java-tests/testData/refactoring/changeClassSignature/SubjectInClient.java.blank
new file mode 100644
index 0000000..2d6dd89
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeClassSignature/SubjectInClient.java.blank
@@ -0,0 +1,21 @@
+class Subject {
+}
+
+interface SubjectFace {
+}
+
+public class Client extends Subject implements SubjectFace {
+	private Subject mySubject = new Subject();
+	private SubjectFace mySubjectFace = new SubjectFace() {
+	};
+
+	public Subject subjectMethod(Subject subject) {
+		Subject varSubject = new Subject();
+		return varSubject;
+	}
+	public SubjectFace subjectFaceMethod(SubjectFace subjectFace) {
+		SubjectFace varSubjectFace = new SubjectFace() {
+		};
+		return varSubjectFace;
+	}
+}
diff --git a/java/java-tests/testData/refactoring/changeClassSignature/SubstituteParamInsideClass.java b/java/java-tests/testData/refactoring/changeClassSignature/SubstituteParamInsideClass.java
new file mode 100644
index 0000000..b849bb7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeClassSignature/SubstituteParamInsideClass.java
@@ -0,0 +1,6 @@
+public class F<caret>oo<T extends Runnable> {
+
+    T getFoo() {
+        return null;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/changeClassSignature/SubstituteParamInsideClass.java.after b/java/java-tests/testData/refactoring/changeClassSignature/SubstituteParamInsideClass.java.after
new file mode 100644
index 0000000..94e32da1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeClassSignature/SubstituteParamInsideClass.java.after
@@ -0,0 +1,6 @@
+public class Foo {
+
+    Runnable getFoo() {
+        return null;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/changeClassSignature/TwoSubjectFaceSetObject.java b/java/java-tests/testData/refactoring/changeClassSignature/TwoSubjectFaceSetObject.java
new file mode 100644
index 0000000..e842ae3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeClassSignature/TwoSubjectFaceSetObject.java
@@ -0,0 +1,23 @@
+import java.util.Set;
+
+class <caret>Subject<U, V> {
+}
+
+interface SubjectFace {
+}
+
+public class Client extends Subject<SubjectFace, Set<Object>> implements SubjectFace {
+	private Subject<SubjectFace, Set<Object>> mySubject = new Subject<SubjectFace, Set<Object>>();
+	private SubjectFace mySubjectFace = new SubjectFace() {
+	};
+
+	public Subject<SubjectFace, Set<Object>> subjectMethod(Subject<SubjectFace, Set<Object>> subject) {
+		Subject<SubjectFace, Set<Object>> varSubject = new Subject<SubjectFace, Set<Object>>();
+		return varSubject;
+	}
+	public SubjectFace subjectFaceMethod(SubjectFace subjectFace) {
+		SubjectFace varSubjectFace = new SubjectFace() {
+		};
+		return varSubjectFace;
+	}
+}
diff --git a/java/java-tests/testData/refactoring/changeClassSignature/Zero.java b/java/java-tests/testData/refactoring/changeClassSignature/Zero.java
new file mode 100644
index 0000000..3d1b0ef
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeClassSignature/Zero.java
@@ -0,0 +1,21 @@
+class <caret>Subject {
+}
+
+interface SubjectFace {
+}
+
+public class Client extends Subject implements SubjectFace {
+	private Subject mySubject = new Subject();
+	private SubjectFace mySubjectFace = new SubjectFace() {
+	};
+
+	public Subject subjectMethod(Subject subject) {
+		Subject varSubject = new Subject();
+		return varSubject;
+	}
+	public SubjectFace subjectFaceMethod(SubjectFace subjectFace) {
+		SubjectFace varSubjectFace = new SubjectFace() {
+		};
+		return varSubjectFace;
+	}
+}
diff --git a/java/java-tests/testData/refactoring/changeSignature/AddException.java b/java/java-tests/testData/refactoring/changeSignature/AddException.java
new file mode 100644
index 0000000..cf59542
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/AddException.java
@@ -0,0 +1,8 @@
+class Test {
+    void foo<caret> () {
+    }
+
+    void bar () {
+        foo();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/changeSignature/AddException_after.java b/java/java-tests/testData/refactoring/changeSignature/AddException_after.java
new file mode 100644
index 0000000..a7ea854
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/AddException_after.java
@@ -0,0 +1,12 @@
+class Test {
+    void foo () throws Exception {
+    }
+
+    void bar () {
+        try {
+            foo();
+        } catch (Exception e) {
+            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/changeSignature/AddRuntimeException.java b/java/java-tests/testData/refactoring/changeSignature/AddRuntimeException.java
new file mode 100644
index 0000000..cf59542
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/AddRuntimeException.java
@@ -0,0 +1,8 @@
+class Test {
+    void foo<caret> () {
+    }
+
+    void bar () {
+        foo();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/changeSignature/AddRuntimeException_after.java b/java/java-tests/testData/refactoring/changeSignature/AddRuntimeException_after.java
new file mode 100644
index 0000000..7ec8460
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/AddRuntimeException_after.java
@@ -0,0 +1,8 @@
+class Test {
+    void foo () throws RuntimeException {
+    }
+
+    void bar () {
+        foo();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/changeSignature/AlreadyHandled.java b/java/java-tests/testData/refactoring/changeSignature/AlreadyHandled.java
new file mode 100644
index 0000000..43ecdda
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/AlreadyHandled.java
@@ -0,0 +1,8 @@
+class Test {
+    void foo<caret> () {
+    }
+
+    void bar () throws Exception {
+        foo();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/changeSignature/AlreadyHandled_after.java b/java/java-tests/testData/refactoring/changeSignature/AlreadyHandled_after.java
new file mode 100644
index 0000000..e2f1a75
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/AlreadyHandled_after.java
@@ -0,0 +1,8 @@
+class Test {
+    void foo () throws Exception {
+    }
+
+    void bar () throws Exception {
+        foo();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/changeSignature/ConstructorException.java b/java/java-tests/testData/refactoring/changeSignature/ConstructorException.java
new file mode 100644
index 0000000..690fb38
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/ConstructorException.java
@@ -0,0 +1,10 @@
+class Base {
+  public B<caret>ase() {
+  }
+}
+
+class AAA extends Base {
+  public AAA() {
+    super();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/ConstructorException_after.java b/java/java-tests/testData/refactoring/changeSignature/ConstructorException_after.java
new file mode 100644
index 0000000..522403c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/ConstructorException_after.java
@@ -0,0 +1,12 @@
+import java.io.IOException;
+
+class Base {
+  public Base() throws IOException {
+  }
+}
+
+class AAA extends Base {
+  public AAA() {
+    super();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/CovariantReturnType.java b/java/java-tests/testData/refactoring/changeSignature/CovariantReturnType.java
new file mode 100644
index 0000000..4498755
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/CovariantReturnType.java
@@ -0,0 +1,19 @@
+import java.util.*;
+
+class A {
+    List <caret>method() { }
+}
+
+class Q implements List, Runnable  {
+}
+
+class Z implements List {
+}
+
+class B extends A {
+    Q method() { }
+}
+
+class C extends A {
+    Z method() { }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/CovariantReturnType_after.java b/java/java-tests/testData/refactoring/changeSignature/CovariantReturnType_after.java
new file mode 100644
index 0000000..289fc99
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/CovariantReturnType_after.java
@@ -0,0 +1,19 @@
+import java.util.*;
+
+class A {
+    Runnable method() { }
+}
+
+class Q implements List, Runnable  {
+}
+
+class Z implements List {
+}
+
+class B extends A {
+    Q method() { }
+}
+
+class C extends A {
+    Runnable method() { }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/DefaultConstructor.java b/java/java-tests/testData/refactoring/changeSignature/DefaultConstructor.java
new file mode 100644
index 0000000..e3306bd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/DefaultConstructor.java
@@ -0,0 +1,11 @@
+class C {
+    C<caret>() {
+    }
+}
+
+class C1 extends C {
+    int i;
+    C1(int i, int k) {
+        this.i = i;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/DefaultConstructor_after.java b/java/java-tests/testData/refactoring/changeSignature/DefaultConstructor_after.java
new file mode 100644
index 0000000..5acc86c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/DefaultConstructor_after.java
@@ -0,0 +1,12 @@
+class C {
+    C(int j) {
+    }
+}
+
+class C1 extends C {
+    int i;
+    C1(int i, int k) {
+        super(27);
+        this.i = i;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/EnumConstructor.java b/java/java-tests/testData/refactoring/changeSignature/EnumConstructor.java
new file mode 100644
index 0000000..5047f33
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/EnumConstructor.java
@@ -0,0 +1,7 @@
+enum En {
+    A {},
+    B {},
+    C;
+
+    <caret>En() { }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/EnumConstructor_after.java b/java/java-tests/testData/refactoring/changeSignature/EnumConstructor_after.java
new file mode 100644
index 0000000..96ec0ca
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/EnumConstructor_after.java
@@ -0,0 +1,7 @@
+enum En {
+    A(10) {},
+    B(10) {},
+    C(10);
+
+    En(int i) { }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/GenerateDelegate.java b/java/java-tests/testData/refactoring/changeSignature/GenerateDelegate.java
new file mode 100644
index 0000000..48b3e4b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/GenerateDelegate.java
@@ -0,0 +1,16 @@
+class C {
+    void <caret>method() {
+    }
+}
+
+class C1 extends C {
+    void method() {
+    }
+}
+
+class Usage {
+    {
+        new C().method();
+        new C1().method();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/GenerateDelegateConstructor.java b/java/java-tests/testData/refactoring/changeSignature/GenerateDelegateConstructor.java
new file mode 100644
index 0000000..48cfaa0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/GenerateDelegateConstructor.java
@@ -0,0 +1,10 @@
+public class C {
+    public <caret>C(int i) {
+    }
+}
+
+class Usage {
+    {
+        C c = new C(10);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/GenerateDelegateConstructor_after.java b/java/java-tests/testData/refactoring/changeSignature/GenerateDelegateConstructor_after.java
new file mode 100644
index 0000000..2299709
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/GenerateDelegateConstructor_after.java
@@ -0,0 +1,14 @@
+public class C {
+    public C(int i) {
+        this();
+    }
+
+    public C() {
+    }
+}
+
+class Usage {
+    {
+        C c = new C(10);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/GenerateDelegateDefaultConstructor.java b/java/java-tests/testData/refactoring/changeSignature/GenerateDelegateDefaultConstructor.java
new file mode 100644
index 0000000..2c160ef
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/GenerateDelegateDefaultConstructor.java
@@ -0,0 +1,15 @@
+public class C {
+    public <caret>C() {
+    }
+}
+
+public class C1 extends C {
+    public C1(String s) {
+    }
+}
+
+class Usage {
+    {
+        C c = new C();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/GenerateDelegateDefaultConstructor_after.java b/java/java-tests/testData/refactoring/changeSignature/GenerateDelegateDefaultConstructor_after.java
new file mode 100644
index 0000000..7352b81
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/GenerateDelegateDefaultConstructor_after.java
@@ -0,0 +1,19 @@
+public class C {
+    public C() {
+        this(27);
+    }
+
+    public C(int i) {
+    }
+}
+
+public class C1 extends C {
+    public C1(String s) {
+    }
+}
+
+class Usage {
+    {
+        C c = new C();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/GenerateDelegateForAbstract.java b/java/java-tests/testData/refactoring/changeSignature/GenerateDelegateForAbstract.java
new file mode 100644
index 0000000..06b48f5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/GenerateDelegateForAbstract.java
@@ -0,0 +1,8 @@
+abstract class C {
+    abstract void <caret>method();
+}
+
+class C1 extends C {
+    void method() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/GenerateDelegateForAbstract_after.java b/java/java-tests/testData/refactoring/changeSignature/GenerateDelegateForAbstract_after.java
new file mode 100644
index 0000000..723e756
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/GenerateDelegateForAbstract_after.java
@@ -0,0 +1,12 @@
+abstract class C {
+    void method() {
+        method(27);
+    }
+
+    abstract void <caret>method(int i);
+}
+
+class C1 extends C {
+    void method(int i) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/GenerateDelegateWithParametersReordering.java b/java/java-tests/testData/refactoring/changeSignature/GenerateDelegateWithParametersReordering.java
new file mode 100644
index 0000000..9daa31d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/GenerateDelegateWithParametersReordering.java
@@ -0,0 +1,18 @@
+class C {
+    void <caret>method(int i, String s) {
+        System.out.println("i = " + i + " s = " + s);
+    }
+}
+
+class C1 extends C {
+    void method(int i, String s) {
+        System.out.println("i = " + i + " s = " + s);
+    }
+}
+
+class Usage {
+    {
+        new C().method(1, null);
+        new C1().method(1, null);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/GenerateDelegateWithParametersReordering_after.java b/java/java-tests/testData/refactoring/changeSignature/GenerateDelegateWithParametersReordering_after.java
new file mode 100644
index 0000000..6ab9dc2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/GenerateDelegateWithParametersReordering_after.java
@@ -0,0 +1,22 @@
+class C {
+    void method(int i, String s) {
+        method(s, 'a', i);
+    }
+
+    void method(String s, char c, int j) {
+        System.out.println("i = " + j + " s = " + s);
+    }
+}
+
+class C1 extends C {
+    void method(String s, char c, int j) {
+        System.out.println("i = " + j + " s = " + s);
+    }
+}
+
+class Usage {
+    {
+        new C().method(1, null);
+        new C1().method(1, null);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/GenerateDelegateWithReturn.java b/java/java-tests/testData/refactoring/changeSignature/GenerateDelegateWithReturn.java
new file mode 100644
index 0000000..ecf94ad
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/GenerateDelegateWithReturn.java
@@ -0,0 +1,9 @@
+class C {
+    String <caret>method() {
+    }
+}
+
+class C1 extends C {
+    String method() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/GenerateDelegateWithReturn_after.java b/java/java-tests/testData/refactoring/changeSignature/GenerateDelegateWithReturn_after.java
new file mode 100644
index 0000000..86ed9c7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/GenerateDelegateWithReturn_after.java
@@ -0,0 +1,13 @@
+class C {
+    String method() {
+        return method(27);
+    }
+
+    String <caret>method(int i) {
+    }
+}
+
+class C1 extends C {
+    String method(int i) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/GenerateDelegate_after.java b/java/java-tests/testData/refactoring/changeSignature/GenerateDelegate_after.java
new file mode 100644
index 0000000..a8fba68
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/GenerateDelegate_after.java
@@ -0,0 +1,20 @@
+class C {
+    void method() {
+        method(27);
+    }
+
+    void method(int i) {
+    }
+}
+
+class C1 extends C {
+    void method(int i) {
+    }
+}
+
+class Usage {
+    {
+        new C().method();
+        new C1().method();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/GenericTypes.java b/java/java-tests/testData/refactoring/changeSignature/GenericTypes.java
new file mode 100644
index 0000000..7797cb7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/GenericTypes.java
@@ -0,0 +1,7 @@
+class C<T> {
+    void method<caret>();
+}
+
+class C1 extends C<String> {
+    void method();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/GenericTypesInOldParameters.java b/java/java-tests/testData/refactoring/changeSignature/GenericTypesInOldParameters.java
new file mode 100644
index 0000000..6bddf12
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/GenericTypesInOldParameters.java
@@ -0,0 +1,11 @@
+class C<T> {
+    void put<caret>(Object o) {
+        System.out.println(o);
+    }
+}
+
+class CString extends C<String> {
+    void put(Object o) {
+        System.out.println(o+"Text");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/GenericTypesInOldParameters_after.java b/java/java-tests/testData/refactoring/changeSignature/GenericTypesInOldParameters_after.java
new file mode 100644
index 0000000..992908a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/GenericTypesInOldParameters_after.java
@@ -0,0 +1,11 @@
+class C<T> {
+    void put(T t) {
+        System.out.println(t);
+    }
+}
+
+class CString extends C<String> {
+    void put(String t) {
+        System.out.println(t +"Text");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/GenericTypes_after.java b/java/java-tests/testData/refactoring/changeSignature/GenericTypes_after.java
new file mode 100644
index 0000000..7a61e36
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/GenericTypes_after.java
@@ -0,0 +1,7 @@
+class C<T> {
+    T method(T x, C<T> y);
+}
+
+class C1 extends C<String> {
+    String method(String x, C<String> y);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/IntroduceParameterWithDefaultValueInHierarchy.java b/java/java-tests/testData/refactoring/changeSignature/IntroduceParameterWithDefaultValueInHierarchy.java
new file mode 100644
index 0000000..b332ce7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/IntroduceParameterWithDefaultValueInHierarchy.java
@@ -0,0 +1,9 @@
+class Foo {
+   void f<caret>oo(){}
+
+   class A extends Foo {
+     void foo(){
+       super.foo();
+     }
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/IntroduceParameterWithDefaultValueInHierarchy_after.java b/java/java-tests/testData/refactoring/changeSignature/IntroduceParameterWithDefaultValueInHierarchy_after.java
new file mode 100644
index 0000000..08cf46f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/IntroduceParameterWithDefaultValueInHierarchy_after.java
@@ -0,0 +1,9 @@
+class Foo {
+   void foo(int i){}
+
+   class A extends Foo {
+     void foo(int i){
+       super.foo(i);
+     }
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/MethodParametersAlignmentAfterMethodNameChange.java b/java/java-tests/testData/refactoring/changeSignature/MethodParametersAlignmentAfterMethodNameChange.java
new file mode 100644
index 0000000..de1b4f2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/MethodParametersAlignmentAfterMethodNameChange.java
@@ -0,0 +1,10 @@
+public class Test {
+  public void <caret>test123(int i,
+                      int j) {
+  }
+
+  public void foo() {
+    test123(1,
+            2);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/MethodParametersAlignmentAfterMethodNameChange_after.java b/java/java-tests/testData/refactoring/changeSignature/MethodParametersAlignmentAfterMethodNameChange_after.java
new file mode 100644
index 0000000..09e6246c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/MethodParametersAlignmentAfterMethodNameChange_after.java
@@ -0,0 +1,10 @@
+public class Test {
+  public void test123asd(int i,
+                         int j) {
+  }
+
+  public void foo() {
+    test123asd(1,
+               2);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/MethodParametersAlignmentAfterMethodReturnTypeChange.java b/java/java-tests/testData/refactoring/changeSignature/MethodParametersAlignmentAfterMethodReturnTypeChange.java
new file mode 100644
index 0000000..c34d871
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/MethodParametersAlignmentAfterMethodReturnTypeChange.java
@@ -0,0 +1,6 @@
+public class Test {
+  public String <caret>test123(int i,
+                               int j) {
+    return null;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/MethodParametersAlignmentAfterMethodReturnTypeChange_after.java b/java/java-tests/testData/refactoring/changeSignature/MethodParametersAlignmentAfterMethodReturnTypeChange_after.java
new file mode 100644
index 0000000..f3ceb99
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/MethodParametersAlignmentAfterMethodReturnTypeChange_after.java
@@ -0,0 +1,6 @@
+public class Test {
+  public Exception test123(int i,
+                           int j) {
+    return null;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/MethodParametersAlignmentAfterMethodVisibilityChange.java b/java/java-tests/testData/refactoring/changeSignature/MethodParametersAlignmentAfterMethodVisibilityChange.java
new file mode 100644
index 0000000..c92f2a8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/MethodParametersAlignmentAfterMethodVisibilityChange.java
@@ -0,0 +1,5 @@
+public class Test {
+  public void <caret>test123(int i,
+                             int j) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/MethodParametersAlignmentAfterMethodVisibilityChange_after.java b/java/java-tests/testData/refactoring/changeSignature/MethodParametersAlignmentAfterMethodVisibilityChange_after.java
new file mode 100644
index 0000000..c704043
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/MethodParametersAlignmentAfterMethodVisibilityChange_after.java
@@ -0,0 +1,5 @@
+public class Test {
+  protected void test123(int i,
+                         int j) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/ParamJavadoc.java b/java/java-tests/testData/refactoring/changeSignature/ParamJavadoc.java
new file mode 100644
index 0000000..c1e5688
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/ParamJavadoc.java
@@ -0,0 +1,14 @@
+class X {
+
+    /**
+     * Has a method called {@link #mymethod(int, int)}.
+     */
+    public class TestRefactorLink {
+      /**
+       * @return nothing
+       * @param y yparam
+       * @param z zparam
+       */
+        public void <caret>mymethod(int y, int z) { }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/changeSignature/ParamJavadoc1.java b/java/java-tests/testData/refactoring/changeSignature/ParamJavadoc1.java
new file mode 100644
index 0000000..894325b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/ParamJavadoc1.java
@@ -0,0 +1,13 @@
+class X {
+
+    /**
+     * Has a method called {@link #mymethod(int)}.
+     */
+    public class TestRefactorLink {
+      /**
+       * @return nothing
+       * @param y yparam
+       */
+        public void <caret>mymethod(int y) { }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/changeSignature/ParamJavadoc1_after.java b/java/java-tests/testData/refactoring/changeSignature/ParamJavadoc1_after.java
new file mode 100644
index 0000000..314ffd6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/ParamJavadoc1_after.java
@@ -0,0 +1,13 @@
+class X {
+
+    /**
+     * Has a method called {@link #mymethod(boolean)}.
+     */
+    public class TestRefactorLink {
+      /**
+       * @return nothing
+       * @param z yparam
+       */
+        public void mymethod(boolean z) { }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/changeSignature/ParamJavadoc2.java b/java/java-tests/testData/refactoring/changeSignature/ParamJavadoc2.java
new file mode 100644
index 0000000..ce459ab
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/ParamJavadoc2.java
@@ -0,0 +1,12 @@
+class X {
+
+    /**
+     * Has a method called {@link #mymethod(boolean)}.
+     */
+    public class TestRefactorLink {
+      /**
+       * @param a aparam
+       */
+        public void <caret>mymethod(boolean a) { }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/changeSignature/ParamJavadoc2_after.java b/java/java-tests/testData/refactoring/changeSignature/ParamJavadoc2_after.java
new file mode 100644
index 0000000..0028088
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/ParamJavadoc2_after.java
@@ -0,0 +1,13 @@
+class X {
+
+    /**
+     * Has a method called {@link #mymethod(boolean, boolean)}.
+     */
+    public class TestRefactorLink {
+      /**
+       * @param z
+       * @param a aparam
+       */
+        public void mymethod(boolean z, boolean a) { }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/changeSignature/ParamJavadoc_after.java b/java/java-tests/testData/refactoring/changeSignature/ParamJavadoc_after.java
new file mode 100644
index 0000000..6e97d80
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/ParamJavadoc_after.java
@@ -0,0 +1,14 @@
+class X {
+
+    /**
+     * Has a method called {@link #mymethod(int, int)}.
+     */
+    public class TestRefactorLink {
+      /**
+       * @return nothing
+       * @param z zparam
+       * @param y yparam
+       */
+        public void mymethod(int z, int y) { }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/changeSignature/ParamNameNoConflict.java b/java/java-tests/testData/refactoring/changeSignature/ParamNameNoConflict.java
new file mode 100644
index 0000000..a98e376
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/ParamNameNoConflict.java
@@ -0,0 +1,11 @@
+class D {
+    void f<caret>oo(Object o){}
+}
+
+class DImpl extends D {
+    void foo(Object o1) {
+        super.foo(o1);
+        int o = 0;
+        System.out.println(o);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/ParamNameNoConflict_after.java b/java/java-tests/testData/refactoring/changeSignature/ParamNameNoConflict_after.java
new file mode 100644
index 0000000..6b29466
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/ParamNameNoConflict_after.java
@@ -0,0 +1,11 @@
+class D {
+    void foo(Object o, boolean b){}
+}
+
+class DImpl extends D {
+    void foo(Object o1, boolean b) {
+        super.foo(o1, b);
+        int o = 0;
+        System.out.println(o);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/ParamNameSameAsFieldName.java b/java/java-tests/testData/refactoring/changeSignature/ParamNameSameAsFieldName.java
new file mode 100644
index 0000000..f064d1a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/ParamNameSameAsFieldName.java
@@ -0,0 +1,13 @@
+class Test {
+    int fieldName;
+
+    void fo<caret>o(int name) {
+        fieldName = name;
+    }
+}
+
+class TestImpl extends Test {
+  void foo(int name) {
+    fieldName = name;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/ParamNameSameAsFieldName_after.java b/java/java-tests/testData/refactoring/changeSignature/ParamNameSameAsFieldName_after.java
new file mode 100644
index 0000000..4a7a1ac
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/ParamNameSameAsFieldName_after.java
@@ -0,0 +1,13 @@
+class Test {
+    int fieldName;
+
+    void foo(int fieldName) {
+        this.fieldName = fieldName;
+    }
+}
+
+class TestImpl extends Test {
+  void foo(int fieldName) {
+    this.fieldName = fieldName;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/ParameterReorder.java b/java/java-tests/testData/refactoring/changeSignature/ParameterReorder.java
new file mode 100644
index 0000000..4481a35
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/ParameterReorder.java
@@ -0,0 +1,11 @@
+class A {
+    public int method<caret>(int i, int j) {
+        return i - j;
+    }
+}
+
+class B extends A {
+    public void method(int j, int i) {
+        return i - j;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/ParameterReorder_after.java b/java/java-tests/testData/refactoring/changeSignature/ParameterReorder_after.java
new file mode 100644
index 0000000..def9aba
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/ParameterReorder_after.java
@@ -0,0 +1,11 @@
+class A {
+    public int method<caret>(int j, int i) {
+        return i - j;
+    }
+}
+
+class B extends A {
+    public void method(int i, int j) {
+        return i - j;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/PropagateParameter.java b/java/java-tests/testData/refactoring/changeSignature/PropagateParameter.java
new file mode 100644
index 0000000..f3a85d2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/PropagateParameter.java
@@ -0,0 +1,9 @@
+public class C {
+    void su<caret>bject(String s) {
+    }
+
+    void caller() {
+        int s;
+        subject(null);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/changeSignature/PropagateParameter_after.java b/java/java-tests/testData/refactoring/changeSignature/PropagateParameter_after.java
new file mode 100644
index 0000000..ff0cf08
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/PropagateParameter_after.java
@@ -0,0 +1,9 @@
+public class C {
+    void subject(String s, boolean b) {
+    }
+
+    void caller(boolean b) {
+        int s;
+        subject(null, b);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/changeSignature/RemoveExceptions.java b/java/java-tests/testData/refactoring/changeSignature/RemoveExceptions.java
new file mode 100644
index 0000000..2e03ad2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/RemoveExceptions.java
@@ -0,0 +1,4 @@
+class Test {
+  void fo<caret>o() throws RuntimeException {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/RemoveExceptions_after.java b/java/java-tests/testData/refactoring/changeSignature/RemoveExceptions_after.java
new file mode 100644
index 0000000..b90c16d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/RemoveExceptions_after.java
@@ -0,0 +1,4 @@
+class Test {
+  void foo() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/RemoveFirstParameter.java b/java/java-tests/testData/refactoring/changeSignature/RemoveFirstParameter.java
new file mode 100644
index 0000000..5b72d68
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/RemoveFirstParameter.java
@@ -0,0 +1,5 @@
+class Test {
+    void <caret>foo(boolean b,
+             int i) { // Don't expect line break to be inserted before closing method args bracket
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/RemoveFirstParameter_after.java b/java/java-tests/testData/refactoring/changeSignature/RemoveFirstParameter_after.java
new file mode 100644
index 0000000..14c1371
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/RemoveFirstParameter_after.java
@@ -0,0 +1,4 @@
+class Test {
+    void <caret>foo(int i) { // Don't expect line break to be inserted before closing method args bracket
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/RemoveVarargParameter.java b/java/java-tests/testData/refactoring/changeSignature/RemoveVarargParameter.java
new file mode 100644
index 0000000..49a38df
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/RemoveVarargParameter.java
@@ -0,0 +1,12 @@
+class Test {
+   void fo<caret>o(int i, int ... ja){
+    }
+
+    void bar() {
+      foo(0);
+      foo(0, 1);
+      foo(0, 1, 2);
+      foo(0, new int[]{3, 4});
+      foo(0, new int[0]);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/RemoveVarargParameter_after.java b/java/java-tests/testData/refactoring/changeSignature/RemoveVarargParameter_after.java
new file mode 100644
index 0000000..a44dd40
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/RemoveVarargParameter_after.java
@@ -0,0 +1,12 @@
+class Test {
+   void foo(int i){
+    }
+
+    void bar() {
+      foo(0);
+      foo(0);
+      foo(0);
+      foo(0);
+      foo(0);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/ReorderExceptions.java b/java/java-tests/testData/refactoring/changeSignature/ReorderExceptions.java
new file mode 100644
index 0000000..d492b54
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/ReorderExceptions.java
@@ -0,0 +1,34 @@
+class MyException extends Exception{
+}
+
+class MyException1 extends Exception{
+}
+
+class Test {
+    void foo<caret> () throws MyException,
+       MyException1 {
+    }
+
+    void bar () {
+        try {
+            foo();
+        }
+        catch (MyException e) {}
+        catch (MyException1 myException1) {}
+    }
+}
+
+class Derived extends Test {
+    void foo() throws MyException,
+       MyException1 {
+
+    }
+
+    void bar () {
+        try {
+            foo();
+        }
+        catch (MyException e) {}
+        catch (MyException1 myException1) {}
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/ReorderExceptions_after.java b/java/java-tests/testData/refactoring/changeSignature/ReorderExceptions_after.java
new file mode 100644
index 0000000..c91abce
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/ReorderExceptions_after.java
@@ -0,0 +1,32 @@
+class MyException extends Exception{
+}
+
+class MyException1 extends Exception{
+}
+
+class Test {
+    void foo () throws MyException1, MyException {
+    }
+
+    void bar () {
+        try {
+            foo();
+        }
+        catch (MyException e) {}
+        catch (MyException1 myException1) {}
+    }
+}
+
+class Derived extends Test {
+    void foo() throws MyException1, MyException {
+
+    }
+
+    void bar () {
+        try {
+            foo();
+        }
+        catch (MyException e) {}
+        catch (MyException1 myException1) {}
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/ReorderMultilineMethodParameters.java b/java/java-tests/testData/refactoring/changeSignature/ReorderMultilineMethodParameters.java
new file mode 100644
index 0000000..5b72d68
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/ReorderMultilineMethodParameters.java
@@ -0,0 +1,5 @@
+class Test {
+    void <caret>foo(boolean b,
+             int i) { // Don't expect line break to be inserted before closing method args bracket
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/ReorderMultilineMethodParameters_after.java b/java/java-tests/testData/refactoring/changeSignature/ReorderMultilineMethodParameters_after.java
new file mode 100644
index 0000000..8dcec1de
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/ReorderMultilineMethodParameters_after.java
@@ -0,0 +1,4 @@
+class Test {
+    void foo(int i, boolean b) { // Don't expect line break to be inserted before closing method args bracket
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/ReorderWithVarargs.java b/java/java-tests/testData/refactoring/changeSignature/ReorderWithVarargs.java
new file mode 100644
index 0000000..4100294
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/ReorderWithVarargs.java
@@ -0,0 +1,7 @@
+class Test {
+    void <caret>foo(String[] s, int a) {}
+
+    {
+        foo(new String[]{"a", "bbb"}, 1);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/ReorderWithVarargs2.java b/java/java-tests/testData/refactoring/changeSignature/ReorderWithVarargs2.java
new file mode 100644
index 0000000..d0ead6c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/ReorderWithVarargs2.java
@@ -0,0 +1,9 @@
+class Test {
+    static final String[] strs = new String[] { "a" };
+
+    void <caret>foo(String[] s, int a) {}
+
+    {
+        foo(strs, 1);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/ReorderWithVarargs2_after.java b/java/java-tests/testData/refactoring/changeSignature/ReorderWithVarargs2_after.java
new file mode 100644
index 0000000..5107af2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/ReorderWithVarargs2_after.java
@@ -0,0 +1,9 @@
+class Test {
+    static final String[] strs = new String[] { "a" };
+
+    void <caret>foo(int a, String... s) {}
+
+    {
+        foo(1, strs);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/ReorderWithVarargs_after.java b/java/java-tests/testData/refactoring/changeSignature/ReorderWithVarargs_after.java
new file mode 100644
index 0000000..f17d806
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/ReorderWithVarargs_after.java
@@ -0,0 +1,7 @@
+class Test {
+    void foo(int a, String... s) {}
+
+    {
+        foo(1, "a", "bbb");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/ReplaceVarargWithArray.java b/java/java-tests/testData/refactoring/changeSignature/ReplaceVarargWithArray.java
new file mode 100644
index 0000000..20f9b40
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/ReplaceVarargWithArray.java
@@ -0,0 +1,14 @@
+class List<T> {}
+
+class Base<T> {
+  void fo<caret>o(String s, List<T>... l) {}
+}
+
+class Inheritor extends Base<Integer> {
+  void foo(String s, List<Integer>... l) {}
+  
+  {
+    new Inheritor().foo("a", new List<Integer>());
+  }
+}
+
diff --git a/java/java-tests/testData/refactoring/changeSignature/ReplaceVarargWithArray_after.java b/java/java-tests/testData/refactoring/changeSignature/ReplaceVarargWithArray_after.java
new file mode 100644
index 0000000..e2a0388
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/ReplaceVarargWithArray_after.java
@@ -0,0 +1,14 @@
+class List<T> {}
+
+class Base<T> {
+  void foo(List<T>[] l, String s) {}
+}
+
+class Inheritor extends Base<Integer> {
+  void foo(List<Integer>[] l, String s) {}
+  
+  {
+    new Inheritor().foo(new List[]{new List<Integer>()}, "a");
+  }
+}
+
diff --git a/java/java-tests/testData/refactoring/changeSignature/SCR40895.java b/java/java-tests/testData/refactoring/changeSignature/SCR40895.java
new file mode 100644
index 0000000..f2e1889
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/SCR40895.java
@@ -0,0 +1,9 @@
+class X {
+
+    /**
+     * Has a method called {@link #mymethod(int, int)}.
+     */
+    public class TestRefactorLink {
+        public void <caret>mymethod(int y, int z) { }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/changeSignature/SCR40895_after.java b/java/java-tests/testData/refactoring/changeSignature/SCR40895_after.java
new file mode 100644
index 0000000..cc8388f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/SCR40895_after.java
@@ -0,0 +1,9 @@
+class X {
+
+    /**
+     * Has a method called {@link #mymethod(int, boolean)}.
+     */
+    public class TestRefactorLink {
+        public void mymethod(int y, boolean b) { }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/changeSignature/Simple.java b/java/java-tests/testData/refactoring/changeSignature/Simple.java
new file mode 100644
index 0000000..7c644e4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/Simple.java
@@ -0,0 +1,7 @@
+class A {
+    void method<caret>(int i);
+}
+
+class B extends A {
+    void method(int k);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/Simple_after.java b/java/java-tests/testData/refactoring/changeSignature/Simple_after.java
new file mode 100644
index 0000000..231247a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/Simple_after.java
@@ -0,0 +1,7 @@
+class A {
+    void method();
+}
+
+class B extends A {
+    void method();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/SuperCallFromOtherMethod.java b/java/java-tests/testData/refactoring/changeSignature/SuperCallFromOtherMethod.java
new file mode 100644
index 0000000..81d389a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/SuperCallFromOtherMethod.java
@@ -0,0 +1,10 @@
+class A {
+    void <caret>foo() {
+    }
+}
+
+class B extends A {
+    void boo() {
+        super.foo();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/changeSignature/SuperCallFromOtherMethod_after.java b/java/java-tests/testData/refactoring/changeSignature/SuperCallFromOtherMethod_after.java
new file mode 100644
index 0000000..2e79099
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/SuperCallFromOtherMethod_after.java
@@ -0,0 +1,10 @@
+class A {
+    void <caret>foo(int nnn) {
+    }
+}
+
+class B extends A {
+    void boo() {
+        super.foo(-222);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/changeSignature/TypeParametersInMethod.java b/java/java-tests/testData/refactoring/changeSignature/TypeParametersInMethod.java
new file mode 100644
index 0000000..d91d98d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/TypeParametersInMethod.java
@@ -0,0 +1,9 @@
+class C<T> {
+    protected <U> U method<caret>(){
+    }
+}
+
+class C1 extends C<String> {
+    protected <V> V method(){
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/TypeParametersInMethod_after.java b/java/java-tests/testData/refactoring/changeSignature/TypeParametersInMethod_after.java
new file mode 100644
index 0000000..0a59f01
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/TypeParametersInMethod_after.java
@@ -0,0 +1,9 @@
+class C<T> {
+    protected <U> U method(T t, U u, C<U> cu){
+    }
+}
+
+class C1 extends C<String> {
+    protected <V> V method(String t, V u, C<V> cu){
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/UseAnyVariable.java b/java/java-tests/testData/refactoring/changeSignature/UseAnyVariable.java
new file mode 100644
index 0000000..b86284e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/UseAnyVariable.java
@@ -0,0 +1,14 @@
+import java.util.List;
+
+class C {
+    void <caret>method() {
+    }
+}
+
+class Usage {
+    List myList;
+    {
+        C c = new C();
+        c.method();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/UseAnyVariableAndDefault.java b/java/java-tests/testData/refactoring/changeSignature/UseAnyVariableAndDefault.java
new file mode 100644
index 0000000..b8afa62
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/UseAnyVariableAndDefault.java
@@ -0,0 +1,14 @@
+class C {
+    <caret>C(String name){}
+}
+
+class Usage {
+    void foo() {
+      C c1 = new C("1");
+      C c2 = new C("2");
+    }
+
+    void bar() {
+      C c1 = new C("1"), c2 = new C("2");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/UseAnyVariableAndDefault_after.java b/java/java-tests/testData/refactoring/changeSignature/UseAnyVariableAndDefault_after.java
new file mode 100644
index 0000000..552dae2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/UseAnyVariableAndDefault_after.java
@@ -0,0 +1,14 @@
+class C {
+    C(C c){}
+}
+
+class Usage {
+    void foo() {
+      C c1 = new C(null);
+      C c2 = new C(c1);
+    }
+
+    void bar() {
+      C c1 = new C(null), c2 = new C(c1);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/UseAnyVariable_after.java b/java/java-tests/testData/refactoring/changeSignature/UseAnyVariable_after.java
new file mode 100644
index 0000000..a2b6f44
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/UseAnyVariable_after.java
@@ -0,0 +1,14 @@
+import java.util.List;
+
+class C {
+    void method(List l) {
+    }
+}
+
+class Usage {
+    List myList;
+    {
+        C c = new C();
+        c.method(myList);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/UseThisAsAnyVariable.java b/java/java-tests/testData/refactoring/changeSignature/UseThisAsAnyVariable.java
new file mode 100644
index 0000000..88c0e11
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/UseThisAsAnyVariable.java
@@ -0,0 +1,18 @@
+import java.util.List;
+
+class C {
+    void <caret>method() {
+    }
+}
+
+class Usage implements List {
+    {
+        final C c = new C();
+        c.method();
+        new Runnable() {
+          public void run() {
+            c.method();
+          }
+        }.run();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/UseThisAsAnyVariable_after.java b/java/java-tests/testData/refactoring/changeSignature/UseThisAsAnyVariable_after.java
new file mode 100644
index 0000000..4044ed6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/UseThisAsAnyVariable_after.java
@@ -0,0 +1,18 @@
+import java.util.List;
+
+class C {
+    void method(List l) {
+    }
+}
+
+class Usage implements List {
+    {
+        final C c = new C();
+        c.method(this);
+        new Runnable() {
+          public void run() {
+            c.method(Usage.this);
+          }
+        }.run();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/Varargs1.java b/java/java-tests/testData/refactoring/changeSignature/Varargs1.java
new file mode 100644
index 0000000..b26fd25
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/Varargs1.java
@@ -0,0 +1,10 @@
+class C {
+    void <caret>method(int... args) {
+    }
+
+    {
+        method(1,2);
+        method(1,2,3);
+        method();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/Varargs1_after.java b/java/java-tests/testData/refactoring/changeSignature/Varargs1_after.java
new file mode 100644
index 0000000..4241d7b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/Varargs1_after.java
@@ -0,0 +1,10 @@
+class C {
+    void <caret>method(boolean b, int... args) {
+    }
+
+    {
+        method(true, 1,2);
+        method(true, 1,2,3);
+        method(true);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/Varargs2.java b/java/java-tests/testData/refactoring/changeSignature/Varargs2.java
new file mode 100644
index 0000000..b9502e4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/Varargs2.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright 2000-2011 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 {
+    void do<caret>Smth(boolean b, int... i) {
+    }
+
+    void m() {
+        doSmth(true, 1);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignature/Varargs2_after.java b/java/java-tests/testData/refactoring/changeSignature/Varargs2_after.java
new file mode 100644
index 0000000..baaf0bd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignature/Varargs2_after.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright 2000-2011 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 {
+    void doSmth(int i, boolean... b) {
+    }
+
+    void m() {
+        doSmth(1, true);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignatureGesture/AddParamChangeReturnType.java b/java/java-tests/testData/refactoring/changeSignatureGesture/AddParamChangeReturnType.java
new file mode 100644
index 0000000..581d081
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignatureGesture/AddParamChangeReturnType.java
@@ -0,0 +1,8 @@
+class Test {
+  void foo() {
+    bar();
+  }
+
+  void bar(<caret>){
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignatureGesture/AddParamChangeReturnType_after.java b/java/java-tests/testData/refactoring/changeSignatureGesture/AddParamChangeReturnType_after.java
new file mode 100644
index 0000000..0bf104b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignatureGesture/AddParamChangeReturnType_after.java
@@ -0,0 +1,8 @@
+class Test {
+  void foo() {
+    bar();
+  }
+
+  boolean bar(int param){
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignatureGesture/AddParameter2Constructor.java b/java/java-tests/testData/refactoring/changeSignatureGesture/AddParameter2Constructor.java
new file mode 100644
index 0000000..31ae929
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignatureGesture/AddParameter2Constructor.java
@@ -0,0 +1,9 @@
+package refactoring.changeSignatureGesture;
+class TestMeabracadabra {
+  TestMeabracadabra(<caret>){
+  }
+
+  public static void main(String[] args) {
+    TestMeabracadabra t = new TestMeabracadabra();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignatureGesture/AddParameter2Constructor_after.java b/java/java-tests/testData/refactoring/changeSignatureGesture/AddParameter2Constructor_after.java
new file mode 100644
index 0000000..fb8bda0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignatureGesture/AddParameter2Constructor_after.java
@@ -0,0 +1,9 @@
+package refactoring.changeSignatureGesture;
+class TestMeabracadabra {
+  TestMeabracadabra(int param){
+  }
+
+  public static void main(String[] args) {
+    TestMeabracadabra t = new TestMeabracadabra();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignatureGesture/AddParameter2UnusedConstructor.java b/java/java-tests/testData/refactoring/changeSignatureGesture/AddParameter2UnusedConstructor.java
new file mode 100644
index 0000000..d14f709
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignatureGesture/AddParameter2UnusedConstructor.java
@@ -0,0 +1,5 @@
+package refactoring.changeSignatureGesture;
+class TestMeabracadabra {
+  private TestMeabracadabra(<caret>){
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignatureGesture/AddParameterFinal.java b/java/java-tests/testData/refactoring/changeSignatureGesture/AddParameterFinal.java
new file mode 100644
index 0000000..37d9f03
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignatureGesture/AddParameterFinal.java
@@ -0,0 +1,8 @@
+public class Test {
+  public void foo(<caret>) {
+  }
+
+  void bar() {
+    foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignatureGesture/AddParameterFinal_after.java b/java/java-tests/testData/refactoring/changeSignatureGesture/AddParameterFinal_after.java
new file mode 100644
index 0000000..a8d0b7a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignatureGesture/AddParameterFinal_after.java
@@ -0,0 +1,8 @@
+public class Test {
+  public void foo(final int param) {
+  }
+
+  void bar() {
+    foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignatureGesture/DeleteParamInSuperUsed.java b/java/java-tests/testData/refactoring/changeSignatureGesture/DeleteParamInSuperUsed.java
new file mode 100644
index 0000000..080e28e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignatureGesture/DeleteParamInSuperUsed.java
@@ -0,0 +1,14 @@
+public class Parent {
+  public void foo(float j, int i, String s) {
+    System.out.println(j + s + i);
+  }
+}
+
+class Child extends Parent {
+  public void foo(float j, <selection> int i,</selection> String s ) {
+  }
+
+  void bar() {
+    foo(1.0, 1, "aaa");
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignatureGesture/DeleteParamInSuperUsed_after.java b/java/java-tests/testData/refactoring/changeSignatureGesture/DeleteParamInSuperUsed_after.java
new file mode 100644
index 0000000..81b93fe
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignatureGesture/DeleteParamInSuperUsed_after.java
@@ -0,0 +1,14 @@
+public class Parent {
+  public void foo(float j, String s) {
+    System.out.println(j + s + i);
+  }
+}
+
+class Child extends Parent {
+  public void foo(float j,  String s ) {
+  }
+
+  void bar() {
+    foo(1.0, "aaa");
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignatureGesture/Modifier.java b/java/java-tests/testData/refactoring/changeSignatureGesture/Modifier.java
new file mode 100644
index 0000000..0fe7f48
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignatureGesture/Modifier.java
@@ -0,0 +1,4 @@
+class Test {
+  <caret> void foo() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignatureGesture/MultiParams.java b/java/java-tests/testData/refactoring/changeSignatureGesture/MultiParams.java
new file mode 100644
index 0000000..cce5899
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignatureGesture/MultiParams.java
@@ -0,0 +1,27 @@
+/*
+ * 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.
+ */
+package refactoring.changeSignatureGesture;
+interface I {
+  void add(<caret>);
+}
+
+public class IImpl implements I {
+  public void add(){}
+  
+  void foo() {
+    add();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignatureGesture/MultiParams_after.java b/java/java-tests/testData/refactoring/changeSignatureGesture/MultiParams_after.java
new file mode 100644
index 0000000..e98af5f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignatureGesture/MultiParams_after.java
@@ -0,0 +1,27 @@
+/*
+ * 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.
+ */
+package refactoring.changeSignatureGesture;
+interface I {
+  void add(int x, int y);
+}
+
+public class IImpl implements I {
+  public void add(int x, int y){}
+  
+  void foo() {
+    add(, );
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignatureGesture/NewParam.java b/java/java-tests/testData/refactoring/changeSignatureGesture/NewParam.java
new file mode 100644
index 0000000..97d8f97
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignatureGesture/NewParam.java
@@ -0,0 +1,6 @@
+class Test {
+  void foo(int i<caret>) {
+    System.out.println(i);
+  }
+  void bar(){foo(1);}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignatureGesture/NewParamInSuper.java b/java/java-tests/testData/refactoring/changeSignatureGesture/NewParamInSuper.java
new file mode 100644
index 0000000..ea4cfb4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignatureGesture/NewParamInSuper.java
@@ -0,0 +1,10 @@
+public class Parent {
+  public void foo(int i) {
+    System.out.println(i);
+  }
+}
+
+class Child extends Parent {
+  public void foo(int i<caret>) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignatureGesture/NewParamInSuperUsed.java b/java/java-tests/testData/refactoring/changeSignatureGesture/NewParamInSuperUsed.java
new file mode 100644
index 0000000..2d16b5c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignatureGesture/NewParamInSuperUsed.java
@@ -0,0 +1,14 @@
+public class Parent {
+  public void foo(int i) {
+    System.out.println(i);
+  }
+}
+
+class Child extends Parent {
+  public void foo(int i<caret>) {
+  }
+
+  void bar() {
+    foo(1);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignatureGesture/NewParamInSuperUsed_after.java b/java/java-tests/testData/refactoring/changeSignatureGesture/NewParamInSuperUsed_after.java
new file mode 100644
index 0000000..9633084
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignatureGesture/NewParamInSuperUsed_after.java
@@ -0,0 +1,14 @@
+public class Parent {
+  public void foo(int i, int param) {
+    System.out.println(i);
+  }
+}
+
+class Child extends Parent {
+  public void foo(int i, int param) {
+  }
+
+  void bar() {
+    foo(1, );
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignatureGesture/NewParamInSuper_after.java b/java/java-tests/testData/refactoring/changeSignatureGesture/NewParamInSuper_after.java
new file mode 100644
index 0000000..a6cacb3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignatureGesture/NewParamInSuper_after.java
@@ -0,0 +1,10 @@
+public class Parent {
+  public void foo(int i, int param) {
+    System.out.println(i);
+  }
+}
+
+class Child extends Parent {
+  public void foo(int i, int param) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignatureGesture/NewParam_after.java b/java/java-tests/testData/refactoring/changeSignatureGesture/NewParam_after.java
new file mode 100644
index 0000000..949da90
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignatureGesture/NewParam_after.java
@@ -0,0 +1,6 @@
+class Test {
+  void foo(int i, int param) {
+    System.out.println(i);
+  }
+  void bar(){foo(1);}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignatureGesture/NoUsages.java b/java/java-tests/testData/refactoring/changeSignatureGesture/NoUsages.java
new file mode 100644
index 0000000..2dca7c2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignatureGesture/NoUsages.java
@@ -0,0 +1,4 @@
+package refactoring.changeSignatureGesture;
+class Test {
+  private void myverylonagname(<caret>){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignatureGesture/OccurrencesInSameFile.java b/java/java-tests/testData/refactoring/changeSignatureGesture/OccurrencesInSameFile.java
new file mode 100644
index 0000000..1f09aed
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignatureGesture/OccurrencesInSameFile.java
@@ -0,0 +1,8 @@
+package refactoring.changeSignatureGesture;
+interface I {
+  void add(<caret>);
+}
+
+public class IImpl implements I {
+  public void add(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignatureGesture/OccurrencesInSameFile_after.java b/java/java-tests/testData/refactoring/changeSignatureGesture/OccurrencesInSameFile_after.java
new file mode 100644
index 0000000..26e4c9b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignatureGesture/OccurrencesInSameFile_after.java
@@ -0,0 +1,8 @@
+package refactoring.changeSignatureGesture;
+interface I {
+  void add(int param);
+}
+
+public class IImpl implements I {
+  public void add(int param){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignatureGesture/OnAnotherMethod.java b/java/java-tests/testData/refactoring/changeSignatureGesture/OnAnotherMethod.java
new file mode 100644
index 0000000..b863a36
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignatureGesture/OnAnotherMethod.java
@@ -0,0 +1,5 @@
+class Test {
+  void foo(<caret>) {
+  }
+  void bar(){foo();}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignatureGesture/RenameLocalVariable.java b/java/java-tests/testData/refactoring/changeSignatureGesture/RenameLocalVariable.java
new file mode 100644
index 0000000..13020b2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignatureGesture/RenameLocalVariable.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2000-2010 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.
+ */
+public class Test {
+  void foo() {
+    int my<caret>i = 0;
+    if (myi > 0) {
+      System.out.println(myi);
+    }
+  }
+}
diff --git a/java/java-tests/testData/refactoring/changeSignatureGesture/RenameLocalVariable_after.java b/java/java-tests/testData/refactoring/changeSignatureGesture/RenameLocalVariable_after.java
new file mode 100644
index 0000000..6a2578d10
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignatureGesture/RenameLocalVariable_after.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2000-2010 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.
+ */
+public class Test {
+  void foo() {
+    int my1i = 0;
+    if (my1i > 0) {
+      System.out.println(my1i);
+    }
+  }
+}
diff --git a/java/java-tests/testData/refactoring/changeSignatureGesture/ReturnValue.java b/java/java-tests/testData/refactoring/changeSignatureGesture/ReturnValue.java
new file mode 100644
index 0000000..3adc00a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignatureGesture/ReturnValue.java
@@ -0,0 +1,4 @@
+class Test {
+  private <caret> foo() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignatureGesture/Simple.java b/java/java-tests/testData/refactoring/changeSignatureGesture/Simple.java
new file mode 100644
index 0000000..8b307ec
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignatureGesture/Simple.java
@@ -0,0 +1,6 @@
+class Test {
+  void foo(int i<caret>) {
+    System.out.println(i);
+  }
+  void bar(){foo();}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignatureGesture/Simple_after.java b/java/java-tests/testData/refactoring/changeSignatureGesture/Simple_after.java
new file mode 100644
index 0000000..5cbb7db
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignatureGesture/Simple_after.java
@@ -0,0 +1,6 @@
+class Test {
+  void foo(int iparam) {
+    System.out.println(iparam);
+  }
+  void bar(){foo();}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignatureGesture/Spaces.java b/java/java-tests/testData/refactoring/changeSignatureGesture/Spaces.java
new file mode 100644
index 0000000..624f6df
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignatureGesture/Spaces.java
@@ -0,0 +1,6 @@
+public class Test {
+  void foo(<caret>){}
+  void bar() {
+    foo();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/changeSignaturePropagation/ExceptionSimple.java b/java/java-tests/testData/refactoring/changeSignaturePropagation/ExceptionSimple.java
new file mode 100644
index 0000000..6ac7602
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignaturePropagation/ExceptionSimple.java
@@ -0,0 +1,12 @@
+class ChangeSignatureTest {
+    void <caret>foo() {
+    }
+
+    void bar() {
+      foo();
+    }
+
+    {
+        bar();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignaturePropagation/ExceptionSimple.java.after b/java/java-tests/testData/refactoring/changeSignaturePropagation/ExceptionSimple.java.after
new file mode 100644
index 0000000..ac86738
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignaturePropagation/ExceptionSimple.java.after
@@ -0,0 +1,16 @@
+class ChangeSignatureTest {
+    void foo() throws Exception {
+    }
+
+    void bar() throws Exception {
+      foo();
+    }
+
+    {
+        try {
+            bar();
+        } catch (Exception e) {
+            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignaturePropagation/ExceptionWithImplicitConstructor.java b/java/java-tests/testData/refactoring/changeSignaturePropagation/ExceptionWithImplicitConstructor.java
new file mode 100644
index 0000000..fd8fd12
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignaturePropagation/ExceptionWithImplicitConstructor.java
@@ -0,0 +1,9 @@
+public class P {
+  public P<caret>() {
+  }
+}
+
+class PP extends P {
+  public PP(){
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignaturePropagation/ExceptionWithImplicitConstructor.java.after b/java/java-tests/testData/refactoring/changeSignaturePropagation/ExceptionWithImplicitConstructor.java.after
new file mode 100644
index 0000000..a19dbb4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignaturePropagation/ExceptionWithImplicitConstructor.java.after
@@ -0,0 +1,10 @@
+public class P {
+  public P() throws Exception {
+  }
+}
+
+class PP extends P {
+  public PP() throws Exception {
+      super();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignaturePropagation/ExceptionWithNoConstructor.java b/java/java-tests/testData/refactoring/changeSignaturePropagation/ExceptionWithNoConstructor.java
new file mode 100644
index 0000000..979cd56
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignaturePropagation/ExceptionWithNoConstructor.java
@@ -0,0 +1,7 @@
+public class P {
+  public P<caret>() {
+  }
+}
+
+class PP extends P {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignaturePropagation/ExceptionWithNoConstructor.java.after b/java/java-tests/testData/refactoring/changeSignaturePropagation/ExceptionWithNoConstructor.java.after
new file mode 100644
index 0000000..c5d842f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignaturePropagation/ExceptionWithNoConstructor.java.after
@@ -0,0 +1,10 @@
+public class P {
+  public P() throws Exception {
+  }
+}
+
+class PP extends P {
+    PP() throws Exception {
+        super();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignaturePropagation/ExceptionWithOverriding.java b/java/java-tests/testData/refactoring/changeSignaturePropagation/ExceptionWithOverriding.java
new file mode 100644
index 0000000..bf3fb2f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignaturePropagation/ExceptionWithOverriding.java
@@ -0,0 +1,18 @@
+class ChangeSignatureTest {
+    void <caret>foo() {
+    }
+
+    void bar() {
+      foo();
+    }
+
+    {
+        bar();
+    }
+}
+
+class Derived extends ChangeSignatureTest {
+  void bar () {
+    super.bar();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignaturePropagation/ExceptionWithOverriding.java.after b/java/java-tests/testData/refactoring/changeSignaturePropagation/ExceptionWithOverriding.java.after
new file mode 100644
index 0000000..2b33e24
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignaturePropagation/ExceptionWithOverriding.java.after
@@ -0,0 +1,22 @@
+class ChangeSignatureTest {
+    void foo() throws Exception {
+    }
+
+    void bar() throws Exception {
+      foo();
+    }
+
+    {
+        try {
+            bar();
+        } catch (Exception e) {
+            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
+        }
+    }
+}
+
+class Derived extends ChangeSignatureTest {
+  void bar () throws Exception {
+    super.bar();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignaturePropagation/ParamSimple.java b/java/java-tests/testData/refactoring/changeSignaturePropagation/ParamSimple.java
new file mode 100644
index 0000000..c5f0fcd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignaturePropagation/ParamSimple.java
@@ -0,0 +1,12 @@
+class ChangeSignatureTest {
+    public <caret>ChangeSignatureTest() {
+    }
+
+    void foo() {
+        new ChangeSignatureTest();
+    }
+
+    {
+      foo();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/changeSignaturePropagation/ParamSimple.java.after b/java/java-tests/testData/refactoring/changeSignaturePropagation/ParamSimple.java.after
new file mode 100644
index 0000000..f56c945
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignaturePropagation/ParamSimple.java.after
@@ -0,0 +1,12 @@
+class ChangeSignatureTest {
+    public ChangeSignatureTest(Class clazz) {
+    }
+
+    void foo(Class clazz) {
+        new ChangeSignatureTest(clazz);
+    }
+
+    {
+      foo(null);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/changeSignaturePropagation/ParamTypeSubst.java b/java/java-tests/testData/refactoring/changeSignaturePropagation/ParamTypeSubst.java
new file mode 100644
index 0000000..374f3ccc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignaturePropagation/ParamTypeSubst.java
@@ -0,0 +1,10 @@
+class Base<T> {
+  void m<caret>() {
+  }
+}
+
+class A extends Base<String> {
+  void x() {
+    m();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignaturePropagation/ParamTypeSubst.java.after b/java/java-tests/testData/refactoring/changeSignaturePropagation/ParamTypeSubst.java.after
new file mode 100644
index 0000000..070698a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignaturePropagation/ParamTypeSubst.java.after
@@ -0,0 +1,10 @@
+class Base<T> {
+  void m(T clazz) {
+  }
+}
+
+class A extends Base<String> {
+  void x(String clazz) {
+    m(clazz);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignaturePropagation/ParamWithImplicitConstructor.java b/java/java-tests/testData/refactoring/changeSignaturePropagation/ParamWithImplicitConstructor.java
new file mode 100644
index 0000000..fd8fd12
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignaturePropagation/ParamWithImplicitConstructor.java
@@ -0,0 +1,9 @@
+public class P {
+  public P<caret>() {
+  }
+}
+
+class PP extends P {
+  public PP(){
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignaturePropagation/ParamWithImplicitConstructor.java.after b/java/java-tests/testData/refactoring/changeSignaturePropagation/ParamWithImplicitConstructor.java.after
new file mode 100644
index 0000000..61db411
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignaturePropagation/ParamWithImplicitConstructor.java.after
@@ -0,0 +1,10 @@
+public class P {
+  public P(Class clazz) {
+  }
+}
+
+class PP extends P {
+  public PP(Class clazz){
+      super(clazz);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignaturePropagation/ParamWithImplicitConstructors.java b/java/java-tests/testData/refactoring/changeSignaturePropagation/ParamWithImplicitConstructors.java
new file mode 100644
index 0000000..77b5236
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignaturePropagation/ParamWithImplicitConstructors.java
@@ -0,0 +1,14 @@
+public class P {
+  public P<caret>() {
+  }
+}
+
+class PP extends P {
+  public PP(){
+  }
+}
+
+class PPP extends P {
+  public PPP(){
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignaturePropagation/ParamWithImplicitConstructors.java.after b/java/java-tests/testData/refactoring/changeSignaturePropagation/ParamWithImplicitConstructors.java.after
new file mode 100644
index 0000000..47fd440
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignaturePropagation/ParamWithImplicitConstructors.java.after
@@ -0,0 +1,16 @@
+public class P {
+  public P(Class clazz) {
+  }
+}
+
+class PP extends P {
+  public PP(Class clazz){
+      super(clazz);
+  }
+}
+
+class PPP extends P {
+  public PPP(Class clazz){
+      super(clazz);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignaturePropagation/ParamWithNoConstructor.java b/java/java-tests/testData/refactoring/changeSignaturePropagation/ParamWithNoConstructor.java
new file mode 100644
index 0000000..979cd56
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignaturePropagation/ParamWithNoConstructor.java
@@ -0,0 +1,7 @@
+public class P {
+  public P<caret>() {
+  }
+}
+
+class PP extends P {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignaturePropagation/ParamWithNoConstructor.java.after b/java/java-tests/testData/refactoring/changeSignaturePropagation/ParamWithNoConstructor.java.after
new file mode 100644
index 0000000..51e2f0a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignaturePropagation/ParamWithNoConstructor.java.after
@@ -0,0 +1,10 @@
+public class P {
+  public P(Class clazz) {
+  }
+}
+
+class PP extends P {
+    PP(Class clazz) {
+        super(clazz);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignaturePropagation/ParamWithOverriding.java b/java/java-tests/testData/refactoring/changeSignaturePropagation/ParamWithOverriding.java
new file mode 100644
index 0000000..bea89d7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignaturePropagation/ParamWithOverriding.java
@@ -0,0 +1,16 @@
+class ChangeSignatureTest {
+    public <caret>ChangeSignatureTest() {
+    }
+
+    void foo() {
+        new ChangeSignatureTest();
+    }
+
+    {
+      foo();
+    }
+}
+
+class Derived extends ChangeSignatureTest {
+  void foo () {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignaturePropagation/ParamWithOverriding.java.after b/java/java-tests/testData/refactoring/changeSignaturePropagation/ParamWithOverriding.java.after
new file mode 100644
index 0000000..087eb3a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignaturePropagation/ParamWithOverriding.java.after
@@ -0,0 +1,20 @@
+class ChangeSignatureTest {
+    public ChangeSignatureTest(Class clazz) {
+    }
+
+    void foo(Class clazz) {
+        new ChangeSignatureTest(clazz);
+    }
+
+    {
+      foo(null);
+    }
+}
+
+class Derived extends ChangeSignatureTest {
+    Derived() {
+        super(null);
+    }
+
+    void foo(Class clazz) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignatureTarget/inClassTypeParameters.java b/java/java-tests/testData/refactoring/changeSignatureTarget/inClassTypeParameters.java
new file mode 100644
index 0000000..cd816bf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignatureTarget/inClassTypeParameters.java
@@ -0,0 +1,3 @@
+import java.util.*;
+class A1<<caret>T> {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignatureTarget/inMethodArguments.java b/java/java-tests/testData/refactoring/changeSignatureTarget/inMethodArguments.java
new file mode 100644
index 0000000..7b56e5d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignatureTarget/inMethodArguments.java
@@ -0,0 +1,12 @@
+import java.util.*;
+class B{
+
+    public static void main(String[] args) {
+      B b = null;
+      b.bar(b.<Str<caret>ing>foo("", ""));
+    }
+
+    <T> String foo(T t, String s){return null;}
+    String  bar(String s) {return null;}
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignatureTarget/inMethodParameters.java b/java/java-tests/testData/refactoring/changeSignatureTarget/inMethodParameters.java
new file mode 100644
index 0000000..a66333b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignatureTarget/inMethodParameters.java
@@ -0,0 +1,4 @@
+import java.util.*;
+class B {
+    <T> String  foo(T t, St<caret>ring s){return null;}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/changeSignatureTarget/inTypeArguments.java b/java/java-tests/testData/refactoring/changeSignatureTarget/inTypeArguments.java
new file mode 100644
index 0000000..b7332ce
--- /dev/null
+++ b/java/java-tests/testData/refactoring/changeSignatureTarget/inTypeArguments.java
@@ -0,0 +1,24 @@
+class A1<T> {
+  A1(){}
+
+  public static void main(String[] args) {
+
+    Callable<Object> callable = new Callable<Object>() {
+      public Object call() throws Exception {
+        return new A1<Str<caret>ing>().toString();
+
+      }
+    };
+    B b = null;
+    b.bar(b.<String>foo("", ""));
+  }
+
+
+  <T> String foo(T t, String s) {
+    return null;
+  }
+
+  String bar(String s) {
+    return null;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/convertToInstanceMethod/Interface.java b/java/java-tests/testData/refactoring/convertToInstanceMethod/Interface.java
new file mode 100644
index 0000000..07f45ae
--- /dev/null
+++ b/java/java-tests/testData/refactoring/convertToInstanceMethod/Interface.java
@@ -0,0 +1,22 @@
+interface I {
+}
+
+interface J extends I {
+}
+
+class IImpl implements I {
+}
+
+class JImpl implements J {
+}
+
+class X {
+    static void <caret>method(int i, I intf) {
+        System.out.println("i = " + i + ", intf = " + intf);
+    }
+
+    {
+        J j = new JImpl();
+        method(0, j);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/convertToInstanceMethod/Interface.java.after b/java/java-tests/testData/refactoring/convertToInstanceMethod/Interface.java.after
new file mode 100644
index 0000000..55e56e8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/convertToInstanceMethod/Interface.java.after
@@ -0,0 +1,26 @@
+interface I {
+    void method(int i);
+}
+
+interface J extends I {
+}
+
+class IImpl implements I {
+    public void method(int i) {
+        System.out.println("i = " + i + ", intf = " + this);
+    }
+}
+
+class JImpl implements J {
+    public void method(int i) {
+        System.out.println("i = " + i + ", intf = " + this);
+    }
+}
+
+class X {
+
+    {
+        J j = new JImpl();
+        j.method(0);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/convertToInstanceMethod/Interface2.java b/java/java-tests/testData/refactoring/convertToInstanceMethod/Interface2.java
new file mode 100644
index 0000000..1915b88
--- /dev/null
+++ b/java/java-tests/testData/refactoring/convertToInstanceMethod/Interface2.java
@@ -0,0 +1,16 @@
+interface I {
+}
+
+class C implements I {
+}
+
+interface J extends I {
+}
+
+class D extends C implements J {
+}
+
+class X {
+    static void <caret>m(I i) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/convertToInstanceMethod/Interface2.java.after b/java/java-tests/testData/refactoring/convertToInstanceMethod/Interface2.java.after
new file mode 100644
index 0000000..940e78b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/convertToInstanceMethod/Interface2.java.after
@@ -0,0 +1,17 @@
+interface I {
+    void m();
+}
+
+class C implements I {
+    public void m() {
+    }
+}
+
+interface J extends I {
+}
+
+class D extends C implements J {
+}
+
+class X {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/convertToInstanceMethod/Interface3.java b/java/java-tests/testData/refactoring/convertToInstanceMethod/Interface3.java
new file mode 100644
index 0000000..88d7a32
--- /dev/null
+++ b/java/java-tests/testData/refactoring/convertToInstanceMethod/Interface3.java
@@ -0,0 +1,37 @@
+interface PsiAntElement {
+}
+
+interface AntElement extends PsiAntElement {
+}
+
+class AntElementImpl implements AntElement {
+}
+
+interface AntNameIdentifier extends AntElement {
+}
+
+class AntNameIdentifierImpl extends AntElementImpl implements AntNameIdentifier {
+}
+
+interface AntStructuredElement extends AntElement {
+}
+
+class AntStructuredElementImpl extends AntElementImpl implements AntStructuredElement {
+}
+
+interface AntTask extends AntStructuredElement {
+}
+
+class AntTaskImpl extends AntStructuredElementImpl implements AntTask {
+}
+
+interface AntMacroDef extends AntTask {
+}
+
+class AntMacroDefImpl extends AntTaskImpl implements AntMacroDef {
+}
+
+class X {
+    static void <caret>m(PsiAntElement i) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/convertToInstanceMethod/Interface3.java.after b/java/java-tests/testData/refactoring/convertToInstanceMethod/Interface3.java.after
new file mode 100644
index 0000000..3ef593a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/convertToInstanceMethod/Interface3.java.after
@@ -0,0 +1,38 @@
+interface PsiAntElement {
+    void m();
+}
+
+interface AntElement extends PsiAntElement {
+}
+
+class AntElementImpl implements AntElement {
+    public void m() {
+    }
+}
+
+interface AntNameIdentifier extends AntElement {
+}
+
+class AntNameIdentifierImpl extends AntElementImpl implements AntNameIdentifier {
+}
+
+interface AntStructuredElement extends AntElement {
+}
+
+class AntStructuredElementImpl extends AntElementImpl implements AntStructuredElement {
+}
+
+interface AntTask extends AntStructuredElement {
+}
+
+class AntTaskImpl extends AntStructuredElementImpl implements AntTask {
+}
+
+interface AntMacroDef extends AntTask {
+}
+
+class AntMacroDefImpl extends AntTaskImpl implements AntMacroDef {
+}
+
+class X {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/convertToInstanceMethod/InterfacePrivate.java b/java/java-tests/testData/refactoring/convertToInstanceMethod/InterfacePrivate.java
new file mode 100644
index 0000000..6c247f6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/convertToInstanceMethod/InterfacePrivate.java
@@ -0,0 +1,22 @@
+interface I {
+}
+
+interface J extends I {
+}
+
+class IImpl implements I {
+}
+
+class JImpl implements J {
+}
+
+class X {
+    private static void <caret>method(int i, I intf) {
+        System.out.println("i = " + i + ", intf = " + intf);
+    }
+
+    {
+        J j = new JImpl();
+        method(0, j);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/convertToInstanceMethod/InterfacePrivate.java.after b/java/java-tests/testData/refactoring/convertToInstanceMethod/InterfacePrivate.java.after
new file mode 100644
index 0000000..55e56e8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/convertToInstanceMethod/InterfacePrivate.java.after
@@ -0,0 +1,26 @@
+interface I {
+    void method(int i);
+}
+
+interface J extends I {
+}
+
+class IImpl implements I {
+    public void method(int i) {
+        System.out.println("i = " + i + ", intf = " + this);
+    }
+}
+
+class JImpl implements J {
+    public void method(int i) {
+        System.out.println("i = " + i + ", intf = " + this);
+    }
+}
+
+class X {
+
+    {
+        J j = new JImpl();
+        j.method(0);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/convertToInstanceMethod/InterfaceTypeParameter.java b/java/java-tests/testData/refactoring/convertToInstanceMethod/InterfaceTypeParameter.java
new file mode 100644
index 0000000..c22af57
--- /dev/null
+++ b/java/java-tests/testData/refactoring/convertToInstanceMethod/InterfaceTypeParameter.java
@@ -0,0 +1,13 @@
+interface Intf<T> {
+    T get();
+}
+
+class Impl<V> implements Intf<V> {
+}
+
+class X {
+    static <U> X<U> <caret>method(Intf<U> p, U value) {
+        U v = p.get();
+        return new X<U>(v,value);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/convertToInstanceMethod/InterfaceTypeParameter.java.after b/java/java-tests/testData/refactoring/convertToInstanceMethod/InterfaceTypeParameter.java.after
new file mode 100644
index 0000000..8d19d891
--- /dev/null
+++ b/java/java-tests/testData/refactoring/convertToInstanceMethod/InterfaceTypeParameter.java.after
@@ -0,0 +1,15 @@
+interface Intf<T> {
+    X<T> method(T value);
+
+    T get();
+}
+
+class Impl<V> implements Intf<V> {
+    public X<V> method(V value) {
+        V v = get();
+        return new X<V>(v,value);
+    }
+}
+
+class X {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/convertToInstanceMethod/JavadocParameter.java b/java/java-tests/testData/refactoring/convertToInstanceMethod/JavadocParameter.java
new file mode 100644
index 0000000..413e756
--- /dev/null
+++ b/java/java-tests/testData/refactoring/convertToInstanceMethod/JavadocParameter.java
@@ -0,0 +1,10 @@
+class Test {
+  /**
+   * method description
+   * @param a description
+   */
+  public static void ma<caret>in(A a) {
+  }
+}
+
+class A {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/convertToInstanceMethod/JavadocParameter.java.after b/java/java-tests/testData/refactoring/convertToInstanceMethod/JavadocParameter.java.after
new file mode 100644
index 0000000..34491fa
--- /dev/null
+++ b/java/java-tests/testData/refactoring/convertToInstanceMethod/JavadocParameter.java.after
@@ -0,0 +1,10 @@
+class Test {
+}
+
+class A {
+    /**
+     * method description  
+     */
+    public void main() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/convertToInstanceMethod/Simple.java b/java/java-tests/testData/refactoring/convertToInstanceMethod/Simple.java
new file mode 100644
index 0000000..f038672
--- /dev/null
+++ b/java/java-tests/testData/refactoring/convertToInstanceMethod/Simple.java
@@ -0,0 +1,16 @@
+public class Y {
+    public void foo() {
+    }
+}
+public class X {
+    static void <caret>method(Y y) {
+        System.out.println(y);
+        y.foo();
+    }
+
+    {
+      Y y = new Y();
+      method(y);
+      method(new Y());
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/convertToInstanceMethod/Simple.java.after b/java/java-tests/testData/refactoring/convertToInstanceMethod/Simple.java.after
new file mode 100644
index 0000000..69449ae
--- /dev/null
+++ b/java/java-tests/testData/refactoring/convertToInstanceMethod/Simple.java.after
@@ -0,0 +1,17 @@
+public class Y {
+    void method() {
+        System.out.println(this);
+        foo();
+    }
+
+    public void foo() {
+    }
+}
+public class X {
+
+    {
+      Y y = new Y();
+      y.method();
+      new Y().method();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/convertToInstanceMethod/TypeParameter.java b/java/java-tests/testData/refactoring/convertToInstanceMethod/TypeParameter.java
new file mode 100644
index 0000000..945f09e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/convertToInstanceMethod/TypeParameter.java
@@ -0,0 +1,7 @@
+class C<T> {
+    T get() { return null; }
+    static <V> void <caret>method(C<V> c, V value, X<V> x) {
+        V v = c.get();
+        System.out.println(v + " " + value);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/convertToInstanceMethod/TypeParameter.java.after b/java/java-tests/testData/refactoring/convertToInstanceMethod/TypeParameter.java.after
new file mode 100644
index 0000000..b7338e2a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/convertToInstanceMethod/TypeParameter.java.after
@@ -0,0 +1,8 @@
+class C<T> {
+    void method(T value, X<T> x) {
+        T v = get();
+        System.out.println(v + " " + value);
+    }
+
+    T get() { return null; }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/convertToInstanceMethod/VisibilityConflict.java b/java/java-tests/testData/refactoring/convertToInstanceMethod/VisibilityConflict.java
new file mode 100644
index 0000000..97e9949
--- /dev/null
+++ b/java/java-tests/testData/refactoring/convertToInstanceMethod/VisibilityConflict.java
@@ -0,0 +1,11 @@
+class Test {
+  {
+    foo(new Bar());
+  }
+  private static void <caret>foo(Bar b){}
+
+}
+
+class Bar {
+
+}
diff --git a/java/java-tests/testData/refactoring/copy/multifile/copyAvailable/pack1/p1.txt b/java/java-tests/testData/refactoring/copy/multifile/copyAvailable/pack1/p1.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copy/multifile/copyAvailable/pack1/p1.txt
diff --git a/java/java-tests/testData/refactoring/copy/multifile/copyAvailable/pack2/pack2.txt b/java/java-tests/testData/refactoring/copy/multifile/copyAvailable/pack2/pack2.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copy/multifile/copyAvailable/pack2/pack2.txt
diff --git a/java/java-tests/testData/refactoring/copy/multifile/javaAndTxt/pack1/Class1.java b/java/java-tests/testData/refactoring/copy/multifile/javaAndTxt/pack1/Class1.java
new file mode 100644
index 0000000..19640b5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copy/multifile/javaAndTxt/pack1/Class1.java
@@ -0,0 +1,2 @@
+package pack1;
+public class Class1 {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/copy/multifile/javaAndTxt/pack1/p1.txt b/java/java-tests/testData/refactoring/copy/multifile/javaAndTxt/pack1/p1.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copy/multifile/javaAndTxt/pack1/p1.txt
diff --git a/java/java-tests/testData/refactoring/copy/multifile/javaAndTxt/pack2/Class2.java b/java/java-tests/testData/refactoring/copy/multifile/javaAndTxt/pack2/Class2.java
new file mode 100644
index 0000000..2944570
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copy/multifile/javaAndTxt/pack2/Class2.java
@@ -0,0 +1,2 @@
+package pack2;
+public Class2{}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/copy/multifile/javaAndTxt/pack2/p2.txt b/java/java-tests/testData/refactoring/copy/multifile/javaAndTxt/pack2/p2.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copy/multifile/javaAndTxt/pack2/p2.txt
diff --git a/java/java-tests/testData/refactoring/copy/multifile/multipleClasses/pack1/Klass.java b/java/java-tests/testData/refactoring/copy/multifile/multipleClasses/pack1/Klass.java
new file mode 100644
index 0000000..15b74be
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copy/multifile/multipleClasses/pack1/Klass.java
@@ -0,0 +1,6 @@
+package pack1;
+class Klass {
+}
+
+class AnotherKlass {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/copy/multifile/multipleClasses/pack2/Klass.expected.java b/java/java-tests/testData/refactoring/copy/multifile/multipleClasses/pack2/Klass.expected.java
new file mode 100644
index 0000000..f11c2b8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copy/multifile/multipleClasses/pack2/Klass.expected.java
@@ -0,0 +1,6 @@
+package pack2;
+class Klass {
+}
+
+class AnotherKlass {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/copy/multifile/multipleFiles/from/1.txt b/java/java-tests/testData/refactoring/copy/multifile/multipleFiles/from/1.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copy/multifile/multipleFiles/from/1.txt
diff --git a/java/java-tests/testData/refactoring/copy/multifile/multipleFiles/from/2.txt b/java/java-tests/testData/refactoring/copy/multifile/multipleFiles/from/2.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copy/multifile/multipleFiles/from/2.txt
diff --git a/java/java-tests/testData/refactoring/copy/multifile/multipleFiles/to/empty.txt b/java/java-tests/testData/refactoring/copy/multifile/multipleFiles/to/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copy/multifile/multipleFiles/to/empty.txt
diff --git a/java/java-tests/testData/refactoring/copy/multifile/packageInfo/from/package-info.java b/java/java-tests/testData/refactoring/copy/multifile/packageInfo/from/package-info.java
new file mode 100644
index 0000000..2135ff2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copy/multifile/packageInfo/from/package-info.java
@@ -0,0 +1,3 @@
[email protected](elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED,
+        namespace = "http://www.mynamespaceurl.com/myHits")
+package from;
diff --git a/java/java-tests/testData/refactoring/copy/multifile/packageInfo/to/package-info.expected.java b/java/java-tests/testData/refactoring/copy/multifile/packageInfo/to/package-info.expected.java
new file mode 100644
index 0000000..dedc521
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copy/multifile/packageInfo/to/package-info.expected.java
@@ -0,0 +1,3 @@
[email protected](elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED,
+        namespace = "http://www.mynamespaceurl.com/myHits")
+package to;
diff --git a/java/java-tests/testData/refactoring/copyClass/libraryClass/Bar.expected.java b/java/java-tests/testData/refactoring/copyClass/libraryClass/Bar.expected.java
new file mode 100644
index 0000000..192f965
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copyClass/libraryClass/Bar.expected.java
@@ -0,0 +1,592 @@
+/*
+ * @(#)ArrayList.java	1.46 03/06/22
+ *
+ * Copyright 2003 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+import java.util.AbstractList;
+import java.util.Collection;
+import java.util.List;
+import java.util.RandomAccess;
+
+/**
+ * Resizable-array implementation of the <tt>List</tt> interface.  Implements
+ * all optional list operations, and permits all elements, including
+ * <tt>null</tt>.  In addition to implementing the <tt>List</tt> interface,
+ * this class provides methods to manipulate the size of the array that is
+ * used internally to store the list.  (This class is roughly equivalent to
+ * <tt>Vector</tt>, except that it is unsynchronized.)<p>
+ *
+ * The <tt>size</tt>, <tt>isEmpty</tt>, <tt>get</tt>, <tt>set</tt>,
+ * <tt>iterator</tt>, and <tt>listIterator</tt> operations run in constant
+ * time.  The <tt>add</tt> operation runs in <i>amortized constant time</i>,
+ * that is, adding n elements requires O(n) time.  All of the other operations
+ * run in linear time (roughly speaking).  The constant factor is low compared
+ * to that for the <tt>LinkedList</tt> implementation.<p>
+ *
+ * Each <tt>ArrayList</tt> instance has a <i>capacity</i>.  The capacity is
+ * the size of the array used to store the elements in the list.  It is always
+ * at least as large as the list size.  As elements are added to an ArrayList,
+ * its capacity grows automatically.  The details of the growth policy are not
+ * specified beyond the fact that adding an element has constant amortized
+ * time cost.<p> 
+ *
+ * An application can increase the capacity of an <tt>ArrayList</tt> instance
+ * before adding a large number of elements using the <tt>ensureCapacity</tt>
+ * operation.  This may reduce the amount of incremental reallocation.<p>
+ *
+ * <strong>Note that this implementation is not synchronized.</strong> If
+ * multiple threads access an <tt>ArrayList</tt> instance concurrently, and at
+ * least one of the threads modifies the list structurally, it <i>must</i> be
+ * synchronized externally.  (A structural modification is any operation that
+ * adds or deletes one or more elements, or explicitly resizes the backing
+ * array; merely setting the value of an element is not a structural
+ * modification.)  This is typically accomplished by synchronizing on some
+ * object that naturally encapsulates the list.  If no such object exists, the
+ * list should be "wrapped" using the <tt>Collections.synchronizedList</tt>
+ * method.  This is best done at creation time, to prevent accidental
+ * unsynchronized access to the list:
+ * <pre>
+ *	List list = Collections.synchronizedList(new ArrayList(...));
+ * </pre><p>
+ *
+ * The iterators returned by this class's <tt>iterator</tt> and
+ * <tt>listIterator</tt> methods are <i>fail-fast</i>: if list is structurally
+ * modified at any time after the iterator is created, in any way except
+ * through the iterator's own remove or add methods, the iterator will throw a
+ * ConcurrentModificationException.  Thus, in the face of concurrent
+ * modification, the iterator fails quickly and cleanly, rather than risking
+ * arbitrary, non-deterministic behavior at an undetermined time in the
+ * future.<p>
+ *
+ * Note that the fail-fast behavior of an iterator cannot be guaranteed
+ * as it is, generally speaking, impossible to make any hard guarantees in the
+ * presence of unsynchronized concurrent modification.  Fail-fast iterators
+ * throw <tt>ConcurrentModificationException</tt> on a best-effort basis. 
+ * Therefore, it would be wrong to write a program that depended on this
+ * exception for its correctness: <i>the fail-fast behavior of iterators
+ * should be used only to detect bugs.</i><p>
+ *
+ * This class is a member of the 
+ * <a href="{@docRoot}/../guide/collections/index.html">
+ * Java Collections Framework</a>.
+ *
+ * @author  Josh Bloch
+ * @author  Neal Gafter
+ * @version 1.46, 06/22/03
+ * @see	    java.util.Collection
+ * @see	    java.util.List
+ * @see	    LinkedList
+ * @see	    Vector
+ * @see	    java.util.Collections#synchronizedList(java.util.List)
+ * @since   1.2
+ */
+
+public class Bar<E> extends AbstractList<E>
+        implements List<E>, RandomAccess, Cloneable, java.io.Serializable
+{
+    private static final long serialVersionUID = 8683452581122892189L;
+
+    /**
+     * The array buffer into which the elements of the ArrayList are stored.
+     * The capacity of the ArrayList is the length of this array buffer.
+     */
+    private transient E[] elementData;
+
+    /**
+     * The size of the ArrayList (the number of elements it contains).
+     *
+     * @serial
+     */
+    private int size;
+
+    /**
+     * Constructs an empty list with the specified initial capacity.
+     *
+     * @param   initialCapacity   the initial capacity of the list.
+     * @exception IllegalArgumentException if the specified initial capacity
+     *            is negative
+     */
+    public Bar(int initialCapacity) {
+	super();
+        if (initialCapacity < 0)
+            throw new IllegalArgumentException("Illegal Capacity: "+
+                                               initialCapacity);
+	this.elementData = (E[])new Object[initialCapacity];
+    }
+
+    /**
+     * Constructs an empty list with an initial capacity of ten.
+     */
+    public Bar() {
+	this(10);
+    }
+
+    /**
+     * Constructs a list containing the elements of the specified
+     * collection, in the order they are returned by the collection's
+     * iterator.  The <tt>ArrayList</tt> instance has an initial capacity of
+     * 110% the size of the specified collection.
+     *
+     * @param c the collection whose elements are to be placed into this list.
+     * @throws NullPointerException if the specified collection is null.
+     */
+    public Bar(Collection<? extends E> c) {
+        size = c.size();
+        // Allow 10% room for growth
+        elementData = (E[])new Object[
+                      (int)Math.min((size*110L)/100,Integer.MAX_VALUE)]; 
+        c.toArray(elementData);
+    }
+
+    /**
+     * Trims the capacity of this <tt>ArrayList</tt> instance to be the
+     * list's current size.  An application can use this operation to minimize
+     * the storage of an <tt>ArrayList</tt> instance.
+     */
+    public void trimToSize() {
+	modCount++;
+	int oldCapacity = elementData.length;
+	if (size < oldCapacity) {
+	    Object oldData[] = elementData;
+	    elementData = (E[])new Object[size];
+	    System.arraycopy(oldData, 0, elementData, 0, size);
+	}
+    }
+
+    /**
+     * Increases the capacity of this <tt>ArrayList</tt> instance, if
+     * necessary, to ensure  that it can hold at least the number of elements
+     * specified by the minimum capacity argument. 
+     *
+     * @param   minCapacity   the desired minimum capacity.
+     */
+    public void ensureCapacity(int minCapacity) {
+	modCount++;
+	int oldCapacity = elementData.length;
+	if (minCapacity > oldCapacity) {
+	    Object oldData[] = elementData;
+	    int newCapacity = (oldCapacity * 3)/2 + 1;
+    	    if (newCapacity < minCapacity)
+		newCapacity = minCapacity;
+	    elementData = (E[])new Object[newCapacity];
+	    System.arraycopy(oldData, 0, elementData, 0, size);
+	}
+    }
+
+    /**
+     * Returns the number of elements in this list.
+     *
+     * @return  the number of elements in this list.
+     */
+    public int size() {
+	return size;
+    }
+
+    /**
+     * Tests if this list has no elements.
+     *
+     * @return  <tt>true</tt> if this list has no elements;
+     *          <tt>false</tt> otherwise.
+     */
+    public boolean isEmpty() {
+	return size == 0;
+    }
+
+    /**
+     * Returns <tt>true</tt> if this list contains the specified element.
+     *
+     * @param elem element whose presence in this List is to be tested.
+     * @return  <code>true</code> if the specified element is present;
+     *		<code>false</code> otherwise.
+     */
+    public boolean contains(Object elem) {
+	return indexOf(elem) >= 0;
+    }
+
+    /**
+     * Searches for the first occurence of the given argument, testing 
+     * for equality using the <tt>equals</tt> method. 
+     *
+     * @param   elem   an object.
+     * @return  the index of the first occurrence of the argument in this
+     *          list; returns <tt>-1</tt> if the object is not found.
+     * @see     Object#equals(Object)
+     */
+    public int indexOf(Object elem) {
+	if (elem == null) {
+	    for (int i = 0; i < size; i++)
+		if (elementData[i]==null)
+		    return i;
+	} else {
+	    for (int i = 0; i < size; i++)
+		if (elem.equals(elementData[i]))
+		    return i;
+	}
+	return -1;
+    }
+
+    /**
+     * Returns the index of the last occurrence of the specified object in
+     * this list.
+     *
+     * @param   elem   the desired element.
+     * @return  the index of the last occurrence of the specified object in
+     *          this list; returns -1 if the object is not found.
+     */
+    public int lastIndexOf(Object elem) {
+	if (elem == null) {
+	    for (int i = size-1; i >= 0; i--)
+		if (elementData[i]==null)
+		    return i;
+	} else {
+	    for (int i = size-1; i >= 0; i--)
+		if (elem.equals(elementData[i]))
+		    return i;
+	}
+	return -1;
+    }
+
+    /**
+     * Returns a shallow copy of this <tt>ArrayList</tt> instance.  (The
+     * elements themselves are not copied.)
+     *
+     * @return  a clone of this <tt>ArrayList</tt> instance.
+     */
+    public Object clone() {
+	try { 
+	    Bar<E> v = (Bar<E>) super.clone();
+	    v.elementData = (E[])new Object[size];
+	    System.arraycopy(elementData, 0, v.elementData, 0, size);
+	    v.modCount = 0;
+	    return v;
+	} catch (CloneNotSupportedException e) { 
+	    // this shouldn't happen, since we are Cloneable
+	    throw new InternalError();
+	}
+    }
+
+    /**
+     * Returns an array containing all of the elements in this list
+     * in the correct order.
+     *
+     * @return an array containing all of the elements in this list
+     * 	       in the correct order.
+     */
+    public Object[] toArray() {
+	Object[] result = new Object[size];
+	System.arraycopy(elementData, 0, result, 0, size);
+	return result;
+    }
+
+    /**
+     * Returns an array containing all of the elements in this list in the
+     * correct order; the runtime type of the returned array is that of the
+     * specified array.  If the list fits in the specified array, it is
+     * returned therein.  Otherwise, a new array is allocated with the runtime
+     * type of the specified array and the size of this list.<p>
+     *
+     * If the list fits in the specified array with room to spare (i.e., the
+     * array has more elements than the list), the element in the array
+     * immediately following the end of the collection is set to
+     * <tt>null</tt>.  This is useful in determining the length of the list
+     * <i>only</i> if the caller knows that the list does not contain any
+     * <tt>null</tt> elements.
+     *
+     * @param a the array into which the elements of the list are to
+     *		be stored, if it is big enough; otherwise, a new array of the
+     * 		same runtime type is allocated for this purpose.
+     * @return an array containing the elements of the list.
+     * @throws ArrayStoreException if the runtime type of a is not a supertype
+     *         of the runtime type of every element in this list.
+     */
+    public <T> T[] toArray(T[] a) {
+        if (a.length < size)
+            a = (T[])java.lang.reflect.Array.
+		newInstance(a.getClass().getComponentType(), size);
+	System.arraycopy(elementData, 0, a, 0, size);
+        if (a.length > size)
+            a[size] = null;
+        return a;
+    }
+
+    // Positional Access Operations
+
+    /**
+     * Returns the element at the specified position in this list.
+     *
+     * @param  index index of element to return.
+     * @return the element at the specified position in this list.
+     * @throws    IndexOutOfBoundsException if index is out of range <tt>(index
+     * 		  &lt; 0 || index &gt;= size())</tt>.
+     */
+    public E get(int index) {
+	RangeCheck(index);
+
+	return elementData[index];
+    }
+
+    /**
+     * Replaces the element at the specified position in this list with
+     * the specified element.
+     *
+     * @param index index of element to replace.
+     * @param element element to be stored at the specified position.
+     * @return the element previously at the specified position.
+     * @throws    IndexOutOfBoundsException if index out of range
+     *		  <tt>(index &lt; 0 || index &gt;= size())</tt>.
+     */
+    public E set(int index, E element) {
+	RangeCheck(index);
+
+	E oldValue = elementData[index];
+	elementData[index] = element;
+	return oldValue;
+    }
+
+    /**
+     * Appends the specified element to the end of this list.
+     *
+     * @param o element to be appended to this list.
+     * @return <tt>true</tt> (as per the general contract of Collection.add).
+     */
+    public boolean add(E o) {
+	ensureCapacity(size + 1);  // Increments modCount!!
+	elementData[size++] = o;
+	return true;
+    }
+
+    /**
+     * Inserts the specified element at the specified position in this
+     * list. Shifts the element currently at that position (if any) and
+     * any subsequent elements to the right (adds one to their indices).
+     *
+     * @param index index at which the specified element is to be inserted.
+     * @param element element to be inserted.
+     * @throws    IndexOutOfBoundsException if index is out of range
+     *		  <tt>(index &lt; 0 || index &gt; size())</tt>.
+     */
+    public void add(int index, E element) {
+	if (index > size || index < 0)
+	    throw new IndexOutOfBoundsException(
+		"Index: "+index+", Size: "+size);
+
+	ensureCapacity(size+1);  // Increments modCount!!
+	System.arraycopy(elementData, index, elementData, index + 1,
+			 size - index);
+	elementData[index] = element;
+	size++;
+    }
+
+    /**
+     * Removes the element at the specified position in this list.
+     * Shifts any subsequent elements to the left (subtracts one from their
+     * indices).
+     *
+     * @param index the index of the element to removed.
+     * @return the element that was removed from the list.
+     * @throws    IndexOutOfBoundsException if index out of range <tt>(index
+     * 		  &lt; 0 || index &gt;= size())</tt>.
+     */
+    public E remove(int index) {
+	RangeCheck(index);
+
+	modCount++;
+	E oldValue = elementData[index];
+
+	int numMoved = size - index - 1;
+	if (numMoved > 0)
+	    System.arraycopy(elementData, index+1, elementData, index,
+			     numMoved);
+	elementData[--size] = null; // Let gc do its work
+
+	return oldValue;
+    }
+
+    /**
+     * Removes a single instance of the specified element from this
+     * list, if it is present (optional operation).  More formally,
+     * removes an element <tt>e</tt> such that <tt>(o==null ? e==null :
+     * o.equals(e))</tt>, if the list contains one or more such
+     * elements.  Returns <tt>true</tt> if the list contained the
+     * specified element (or equivalently, if the list changed as a
+     * result of the call).<p>
+     *
+     * @param o element to be removed from this list, if present.
+     * @return <tt>true</tt> if the list contained the specified element.
+     */
+    public boolean remove(Object o) {
+	if (o == null) {
+            for (int index = 0; index < size; index++)
+		if (elementData[index] == null) {
+		    fastRemove(index);
+		    return true;
+		}
+	} else {
+	    for (int index = 0; index < size; index++)
+		if (o.equals(elementData[index])) {
+		    fastRemove(index);
+		    return true;
+		}
+        }
+	return false;
+    }
+
+    /*
+     * Private remove method that skips bounds checking and does not
+     * return the value removed.
+     */
+    private void fastRemove(int index) {
+        modCount++;
+        int numMoved = size - index - 1;
+        if (numMoved > 0)
+            System.arraycopy(elementData, index+1, elementData, index, 
+                             numMoved);
+        elementData[--size] = null; // Let gc do its work
+    }
+
+    /**
+     * Removes all of the elements from this list.  The list will
+     * be empty after this call returns.
+     */
+    public void clear() {
+	modCount++;
+
+	// Let gc do its work
+	for (int i = 0; i < size; i++)
+	    elementData[i] = null;
+
+	size = 0;
+    }
+
+    /**
+     * Appends all of the elements in the specified Collection to the end of
+     * this list, in the order that they are returned by the
+     * specified Collection's Iterator.  The behavior of this operation is
+     * undefined if the specified Collection is modified while the operation
+     * is in progress.  (This implies that the behavior of this call is
+     * undefined if the specified Collection is this list, and this
+     * list is nonempty.)
+     *
+     * @param c the elements to be inserted into this list.
+     * @return <tt>true</tt> if this list changed as a result of the call.
+     * @throws    NullPointerException if the specified collection is null.
+     */
+    public boolean addAll(Collection<? extends E> c) {
+	Object[] a = c.toArray();
+        int numNew = a.length;
+	ensureCapacity(size + numNew);  // Increments modCount
+        System.arraycopy(a, 0, elementData, size, numNew);
+        size += numNew;
+	return numNew != 0;
+    }
+
+    /**
+     * Inserts all of the elements in the specified Collection into this
+     * list, starting at the specified position.  Shifts the element
+     * currently at that position (if any) and any subsequent elements to
+     * the right (increases their indices).  The new elements will appear
+     * in the list in the order that they are returned by the
+     * specified Collection's iterator.
+     *
+     * @param index index at which to insert first element
+     *		    from the specified collection.
+     * @param c elements to be inserted into this list.
+     * @return <tt>true</tt> if this list changed as a result of the call.
+     * @throws    IndexOutOfBoundsException if index out of range <tt>(index
+     *		  &lt; 0 || index &gt; size())</tt>.
+     * @throws    NullPointerException if the specified Collection is null.
+     */
+    public boolean addAll(int index, Collection<? extends E> c) {
+	if (index > size || index < 0)
+	    throw new IndexOutOfBoundsException(
+		"Index: " + index + ", Size: " + size);
+
+	Object[] a = c.toArray();
+	int numNew = a.length;
+	ensureCapacity(size + numNew);  // Increments modCount
+
+	int numMoved = size - index;
+	if (numMoved > 0)
+	    System.arraycopy(elementData, index, elementData, index + numNew,
+			     numMoved);
+
+        System.arraycopy(a, 0, elementData, index, numNew);
+	size += numNew;
+	return numNew != 0;
+    }
+
+    /**
+     * Removes from this List all of the elements whose index is between
+     * fromIndex, inclusive and toIndex, exclusive.  Shifts any succeeding
+     * elements to the left (reduces their index).
+     * This call shortens the list by <tt>(toIndex - fromIndex)</tt> elements.
+     * (If <tt>toIndex==fromIndex</tt>, this operation has no effect.)
+     *
+     * @param fromIndex index of first element to be removed.
+     * @param toIndex index after last element to be removed.
+     */
+    protected void removeRange(int fromIndex, int toIndex) {
+	modCount++;
+	int numMoved = size - toIndex;
+        System.arraycopy(elementData, toIndex, elementData, fromIndex,
+                         numMoved);
+
+	// Let gc do its work
+	int newSize = size - (toIndex-fromIndex);
+	while (size != newSize)
+	    elementData[--size] = null;
+    }
+
+    /**
+     * Check if the given index is in range.  If not, throw an appropriate
+     * runtime exception.  This method does *not* check if the index is
+     * negative: It is always used immediately prior to an array access,
+     * which throws an ArrayIndexOutOfBoundsException if index is negative.
+     */
+    private void RangeCheck(int index) {
+	if (index >= size)
+	    throw new IndexOutOfBoundsException(
+		"Index: "+index+", Size: "+size);
+    }
+
+    /**
+     * Save the state of the <tt>ArrayList</tt> instance to a stream (that
+     * is, serialize it).
+     *
+     * @serialData The length of the array backing the <tt>ArrayList</tt>
+     *             instance is emitted (int), followed by all of its elements
+     *             (each an <tt>Object</tt>) in the proper order.
+     */
+    private void writeObject(java.io.ObjectOutputStream s)
+        throws java.io.IOException{
+	// Write out element count, and any hidden stuff
+	s.defaultWriteObject();
+
+        // Write out array length
+        s.writeInt(elementData.length);
+
+	// Write out all elements in the proper order.
+	for (int i=0; i<size; i++)
+            s.writeObject(elementData[i]);
+    }
+
+    /**
+     * Reconstitute the <tt>ArrayList</tt> instance from a stream (that is,
+     * deserialize it).
+     */
+    private void readObject(java.io.ObjectInputStream s)
+        throws java.io.IOException, ClassNotFoundException {
+	// Read in size, and any hidden stuff
+	s.defaultReadObject();
+
+        // Read in array length and allocate array
+        int arrayLength = s.readInt();
+        Object[] a = elementData = (E[])new Object[arrayLength];
+
+	// Read in all elements in the proper order.
+	for (int i=0; i<size; i++)
+            a[i] = s.readObject();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/copyClass/multifile/packageHierarchy/after/p1/S1.java b/java/java-tests/testData/refactoring/copyClass/multifile/packageHierarchy/after/p1/S1.java
new file mode 100644
index 0000000..6af54d7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copyClass/multifile/packageHierarchy/after/p1/S1.java
@@ -0,0 +1,7 @@
+package p1;
+public class S1 {
+  S2 s2;
+  void foo() {
+    s2.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/copyClass/multifile/packageHierarchy/after/p1/S2.java b/java/java-tests/testData/refactoring/copyClass/multifile/packageHierarchy/after/p1/S2.java
new file mode 100644
index 0000000..02d05b7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copyClass/multifile/packageHierarchy/after/p1/S2.java
@@ -0,0 +1,7 @@
+package p1;
+public class S2 {
+  S1 s1;
+  void foo() {
+    s1.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/copyClass/multifile/packageHierarchy/after/p1/p11/S11.java b/java/java-tests/testData/refactoring/copyClass/multifile/packageHierarchy/after/p1/p11/S11.java
new file mode 100644
index 0000000..2ebeca4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copyClass/multifile/packageHierarchy/after/p1/p11/S11.java
@@ -0,0 +1,2 @@
+package p1.p11;
+class S11 {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/copyClass/multifile/packageHierarchy/after/p2/empty.txt b/java/java-tests/testData/refactoring/copyClass/multifile/packageHierarchy/after/p2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copyClass/multifile/packageHierarchy/after/p2/empty.txt
diff --git a/java/java-tests/testData/refactoring/copyClass/multifile/packageHierarchy/after/p2/p1/S1.java b/java/java-tests/testData/refactoring/copyClass/multifile/packageHierarchy/after/p2/p1/S1.java
new file mode 100644
index 0000000..ebe42c3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copyClass/multifile/packageHierarchy/after/p2/p1/S1.java
@@ -0,0 +1,8 @@
+package p2.p1;
+
+public class S1 {
+  S2 s2;
+  void foo() {
+    s2.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/copyClass/multifile/packageHierarchy/after/p2/p1/S2.java b/java/java-tests/testData/refactoring/copyClass/multifile/packageHierarchy/after/p2/p1/S2.java
new file mode 100644
index 0000000..e75b579
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copyClass/multifile/packageHierarchy/after/p2/p1/S2.java
@@ -0,0 +1,8 @@
+package p2.p1;
+
+public class S2 {
+  S1 s1;
+  void foo() {
+    s1.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/copyClass/multifile/packageHierarchy/after/p2/p1/p11/S11.java b/java/java-tests/testData/refactoring/copyClass/multifile/packageHierarchy/after/p2/p1/p11/S11.java
new file mode 100644
index 0000000..ae59b02
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copyClass/multifile/packageHierarchy/after/p2/p1/p11/S11.java
@@ -0,0 +1,2 @@
+package p2.p1.p11;
+class S11 {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/copyClass/multifile/packageHierarchy/before/p1/S1.java b/java/java-tests/testData/refactoring/copyClass/multifile/packageHierarchy/before/p1/S1.java
new file mode 100644
index 0000000..6af54d7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copyClass/multifile/packageHierarchy/before/p1/S1.java
@@ -0,0 +1,7 @@
+package p1;
+public class S1 {
+  S2 s2;
+  void foo() {
+    s2.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/copyClass/multifile/packageHierarchy/before/p1/S2.java b/java/java-tests/testData/refactoring/copyClass/multifile/packageHierarchy/before/p1/S2.java
new file mode 100644
index 0000000..02d05b7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copyClass/multifile/packageHierarchy/before/p1/S2.java
@@ -0,0 +1,7 @@
+package p1;
+public class S2 {
+  S1 s1;
+  void foo() {
+    s1.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/copyClass/multifile/packageHierarchy/before/p1/p11/S11.java b/java/java-tests/testData/refactoring/copyClass/multifile/packageHierarchy/before/p1/p11/S11.java
new file mode 100644
index 0000000..2ebeca4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copyClass/multifile/packageHierarchy/before/p1/p11/S11.java
@@ -0,0 +1,2 @@
+package p1.p11;
+class S11 {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/copyClass/multifile/packageHierarchy/before/p2/empty.txt b/java/java-tests/testData/refactoring/copyClass/multifile/packageHierarchy/before/p2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copyClass/multifile/packageHierarchy/before/p2/empty.txt
diff --git a/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalClasses/after/p1/S1.java b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalClasses/after/p1/S1.java
new file mode 100644
index 0000000..72bf6e7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalClasses/after/p1/S1.java
@@ -0,0 +1,4 @@
+package p1;
+class S1 {
+  S2 s2;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalClasses/after/p1/S2.java b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalClasses/after/p1/S2.java
new file mode 100644
index 0000000..1160227
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalClasses/after/p1/S2.java
@@ -0,0 +1,4 @@
+package p1;
+class S2 {
+  S1 s1;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalClasses/after/p1/empty.txt b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalClasses/after/p1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalClasses/after/p1/empty.txt
diff --git a/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalClasses/after/p2/S1.java b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalClasses/after/p2/S1.java
new file mode 100644
index 0000000..5201f46
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalClasses/after/p2/S1.java
@@ -0,0 +1,5 @@
+package p2;
+
+class S1 {
+  S2 s2;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalClasses/after/p2/S2.java b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalClasses/after/p2/S2.java
new file mode 100644
index 0000000..292b649
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalClasses/after/p2/S2.java
@@ -0,0 +1,5 @@
+package p2;
+
+class S2 {
+  S1 s1;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalClasses/after/p2/empty.txt b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalClasses/after/p2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalClasses/after/p2/empty.txt
diff --git a/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalClasses/before/p1/S1.java b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalClasses/before/p1/S1.java
new file mode 100644
index 0000000..72bf6e7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalClasses/before/p1/S1.java
@@ -0,0 +1,4 @@
+package p1;
+class S1 {
+  S2 s2;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalClasses/before/p1/S2.java b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalClasses/before/p1/S2.java
new file mode 100644
index 0000000..1160227
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalClasses/before/p1/S2.java
@@ -0,0 +1,4 @@
+package p1;
+class S2 {
+  S1 s1;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalClasses/before/p1/empty.txt b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalClasses/before/p1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalClasses/before/p1/empty.txt
diff --git a/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalClasses/before/p2/empty.txt b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalClasses/before/p2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalClasses/before/p2/empty.txt
diff --git a/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalMethods/after/p1/S1.java b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalMethods/after/p1/S1.java
new file mode 100644
index 0000000..6af54d7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalMethods/after/p1/S1.java
@@ -0,0 +1,7 @@
+package p1;
+public class S1 {
+  S2 s2;
+  void foo() {
+    s2.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalMethods/after/p1/S2.java b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalMethods/after/p1/S2.java
new file mode 100644
index 0000000..02d05b7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalMethods/after/p1/S2.java
@@ -0,0 +1,7 @@
+package p1;
+public class S2 {
+  S1 s1;
+  void foo() {
+    s1.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalMethods/after/p1/empty.txt b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalMethods/after/p1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalMethods/after/p1/empty.txt
diff --git a/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalMethods/after/p2/S1.java b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalMethods/after/p2/S1.java
new file mode 100644
index 0000000..629257a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalMethods/after/p2/S1.java
@@ -0,0 +1,8 @@
+package p2;
+
+public class S1 {
+  S2 s2;
+  void foo() {
+    s2.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalMethods/after/p2/S2.java b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalMethods/after/p2/S2.java
new file mode 100644
index 0000000..bcc841f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalMethods/after/p2/S2.java
@@ -0,0 +1,8 @@
+package p2;
+
+public class S2 {
+  S1 s1;
+  void foo() {
+    s1.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalMethods/after/p2/empty.txt b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalMethods/after/p2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalMethods/after/p2/empty.txt
diff --git a/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalMethods/before/p1/S1.java b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalMethods/before/p1/S1.java
new file mode 100644
index 0000000..6af54d7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalMethods/before/p1/S1.java
@@ -0,0 +1,7 @@
+package p1;
+public class S1 {
+  S2 s2;
+  void foo() {
+    s2.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalMethods/before/p1/S2.java b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalMethods/before/p1/S2.java
new file mode 100644
index 0000000..02d05b7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalMethods/before/p1/S2.java
@@ -0,0 +1,7 @@
+package p1;
+public class S2 {
+  S1 s1;
+  void foo() {
+    s1.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalMethods/before/p1/empty.txt b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalMethods/before/p1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalMethods/before/p1/empty.txt
diff --git a/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalMethods/before/p2/empty.txt b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalMethods/before/p2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalMethods/before/p2/empty.txt
diff --git a/java/java-tests/testData/refactoring/copyClass/multifile/packageOneLevelHierarchy/after/p1/S1.java b/java/java-tests/testData/refactoring/copyClass/multifile/packageOneLevelHierarchy/after/p1/S1.java
new file mode 100644
index 0000000..6af54d7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copyClass/multifile/packageOneLevelHierarchy/after/p1/S1.java
@@ -0,0 +1,7 @@
+package p1;
+public class S1 {
+  S2 s2;
+  void foo() {
+    s2.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/copyClass/multifile/packageOneLevelHierarchy/after/p1/S2.java b/java/java-tests/testData/refactoring/copyClass/multifile/packageOneLevelHierarchy/after/p1/S2.java
new file mode 100644
index 0000000..02d05b7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copyClass/multifile/packageOneLevelHierarchy/after/p1/S2.java
@@ -0,0 +1,7 @@
+package p1;
+public class S2 {
+  S1 s1;
+  void foo() {
+    s1.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/copyClass/multifile/packageOneLevelHierarchy/after/p2/empty.txt b/java/java-tests/testData/refactoring/copyClass/multifile/packageOneLevelHierarchy/after/p2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copyClass/multifile/packageOneLevelHierarchy/after/p2/empty.txt
diff --git a/java/java-tests/testData/refactoring/copyClass/multifile/packageOneLevelHierarchy/after/p2/p1/S1.java b/java/java-tests/testData/refactoring/copyClass/multifile/packageOneLevelHierarchy/after/p2/p1/S1.java
new file mode 100644
index 0000000..ebe42c3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copyClass/multifile/packageOneLevelHierarchy/after/p2/p1/S1.java
@@ -0,0 +1,8 @@
+package p2.p1;
+
+public class S1 {
+  S2 s2;
+  void foo() {
+    s2.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/copyClass/multifile/packageOneLevelHierarchy/after/p2/p1/S2.java b/java/java-tests/testData/refactoring/copyClass/multifile/packageOneLevelHierarchy/after/p2/p1/S2.java
new file mode 100644
index 0000000..e75b579
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copyClass/multifile/packageOneLevelHierarchy/after/p2/p1/S2.java
@@ -0,0 +1,8 @@
+package p2.p1;
+
+public class S2 {
+  S1 s1;
+  void foo() {
+    s1.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/copyClass/multifile/packageOneLevelHierarchy/before/p1/S1.java b/java/java-tests/testData/refactoring/copyClass/multifile/packageOneLevelHierarchy/before/p1/S1.java
new file mode 100644
index 0000000..6af54d7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copyClass/multifile/packageOneLevelHierarchy/before/p1/S1.java
@@ -0,0 +1,7 @@
+package p1;
+public class S1 {
+  S2 s2;
+  void foo() {
+    s2.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/copyClass/multifile/packageOneLevelHierarchy/before/p1/S2.java b/java/java-tests/testData/refactoring/copyClass/multifile/packageOneLevelHierarchy/before/p1/S2.java
new file mode 100644
index 0000000..02d05b7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copyClass/multifile/packageOneLevelHierarchy/before/p1/S2.java
@@ -0,0 +1,7 @@
+package p1;
+public class S2 {
+  S1 s1;
+  void foo() {
+    s1.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/copyClass/multifile/packageOneLevelHierarchy/before/p2/empty.txt b/java/java-tests/testData/refactoring/copyClass/multifile/packageOneLevelHierarchy/before/p2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copyClass/multifile/packageOneLevelHierarchy/before/p2/empty.txt
diff --git a/java/java-tests/testData/refactoring/copyClass/replaceAllOccurrences/Bar.expected.java b/java/java-tests/testData/refactoring/copyClass/replaceAllOccurrences/Bar.expected.java
new file mode 100644
index 0000000..0a479c3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copyClass/replaceAllOccurrences/Bar.expected.java
@@ -0,0 +1,9 @@
+public class Bar {
+
+    public static Bar createInstance() {
+        return new Bar();
+    }
+
+    private Bar() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/copyClass/replaceAllOccurrences/Foo.java b/java/java-tests/testData/refactoring/copyClass/replaceAllOccurrences/Foo.java
new file mode 100644
index 0000000..385bd5c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/copyClass/replaceAllOccurrences/Foo.java
@@ -0,0 +1,9 @@
+public class Foo {
+
+    public static Foo createInstance() {
+        return new Foo();
+    }
+
+    private Foo() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/dndMove/publicJavaClass/d/MyClass.java b/java/java-tests/testData/refactoring/dndMove/publicJavaClass/d/MyClass.java
new file mode 100644
index 0000000..90f42c3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/dndMove/publicJavaClass/d/MyClass.java
@@ -0,0 +1,2 @@
+package d;
+public class MyClass{}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/dndMove/secondJavaClass/d/MyClass.java b/java/java-tests/testData/refactoring/dndMove/secondJavaClass/d/MyClass.java
new file mode 100644
index 0000000..78ad73a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/dndMove/secondJavaClass/d/MyClass.java
@@ -0,0 +1,5 @@
+package d;
+
+public class MyClass{}
+
+class Second{}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/encapsulateFields/alreadyExist/after/Test.java b/java/java-tests/testData/refactoring/encapsulateFields/alreadyExist/after/Test.java
new file mode 100644
index 0000000..d57d7f3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/encapsulateFields/alreadyExist/after/Test.java
@@ -0,0 +1,18 @@
+class Test {
+  int i;
+  int getI() {
+    return i;
+  }
+
+  void foo() {
+    setI(getI() + 1);
+    System.out.println(getI());
+
+    Test t;
+    setI(t.getI());
+  }
+
+    public void setI(int i) {
+        this.i = i;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/encapsulateFields/alreadyExist/before/Test.java b/java/java-tests/testData/refactoring/encapsulateFields/alreadyExist/before/Test.java
new file mode 100644
index 0000000..10afc55
--- /dev/null
+++ b/java/java-tests/testData/refactoring/encapsulateFields/alreadyExist/before/Test.java
@@ -0,0 +1,14 @@
+class Test {
+  int i;
+  int getI() {
+    return i;
+  }
+
+  void foo() {
+    i++;
+    System.out.println(getI());
+
+    Test t;
+    i = t.i;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/encapsulateFields/diffWithReturnTypeOnly/after/Test.java b/java/java-tests/testData/refactoring/encapsulateFields/diffWithReturnTypeOnly/after/Test.java
new file mode 100644
index 0000000..dc228d7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/encapsulateFields/diffWithReturnTypeOnly/after/Test.java
@@ -0,0 +1,11 @@
+class Test {
+  int i;
+  int getI() {
+    return i;
+  }
+
+  Test setI(int i) {
+    this.i = i;
+    return this;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/encapsulateFields/diffWithReturnTypeOnly/before/Test.java b/java/java-tests/testData/refactoring/encapsulateFields/diffWithReturnTypeOnly/before/Test.java
new file mode 100644
index 0000000..dc228d7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/encapsulateFields/diffWithReturnTypeOnly/before/Test.java
@@ -0,0 +1,11 @@
+class Test {
+  int i;
+  int getI() {
+    return i;
+  }
+
+  Test setI(int i) {
+    this.i = i;
+    return this;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/encapsulateFields/diffWithReturnTypeOnlyInHierarchy/after/Test.java b/java/java-tests/testData/refactoring/encapsulateFields/diffWithReturnTypeOnlyInHierarchy/after/Test.java
new file mode 100644
index 0000000..0e53dea
--- /dev/null
+++ b/java/java-tests/testData/refactoring/encapsulateFields/diffWithReturnTypeOnlyInHierarchy/after/Test.java
@@ -0,0 +1,12 @@
+public class Test extends Super{
+  int i;
+  int getI() {
+    return i;
+  }
+}
+
+class Super {
+  Super setI(int i) {
+    return this;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/encapsulateFields/diffWithReturnTypeOnlyInHierarchy/before/Test.java b/java/java-tests/testData/refactoring/encapsulateFields/diffWithReturnTypeOnlyInHierarchy/before/Test.java
new file mode 100644
index 0000000..0e53dea
--- /dev/null
+++ b/java/java-tests/testData/refactoring/encapsulateFields/diffWithReturnTypeOnlyInHierarchy/before/Test.java
@@ -0,0 +1,12 @@
+public class Test extends Super{
+  int i;
+  int getI() {
+    return i;
+  }
+}
+
+class Super {
+  Super setI(int i) {
+    return this;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/encapsulateFields/hideOuterclassMethod/after/Test.java b/java/java-tests/testData/refactoring/encapsulateFields/hideOuterclassMethod/after/Test.java
new file mode 100644
index 0000000..ad4b7f5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/encapsulateFields/hideOuterclassMethod/after/Test.java
@@ -0,0 +1,17 @@
+public class A {
+  static int getI() {
+    return 23;
+  }
+
+  static class B {
+    static private int i = 42;
+
+    static int m() {
+      return getI();
+    }
+  }
+
+  public static void main(String[] args) {
+    System.out.println(B.m());
+  }
+}
diff --git a/java/java-tests/testData/refactoring/encapsulateFields/hideOuterclassMethod/before/Test.java b/java/java-tests/testData/refactoring/encapsulateFields/hideOuterclassMethod/before/Test.java
new file mode 100644
index 0000000..ad4b7f5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/encapsulateFields/hideOuterclassMethod/before/Test.java
@@ -0,0 +1,17 @@
+public class A {
+  static int getI() {
+    return 23;
+  }
+
+  static class B {
+    static private int i = 42;
+
+    static int m() {
+      return getI();
+    }
+  }
+
+  public static void main(String[] args) {
+    System.out.println(B.m());
+  }
+}
diff --git a/java/java-tests/testData/refactoring/encapsulateFields/hideOverriderMethod/after/Test.java b/java/java-tests/testData/refactoring/encapsulateFields/hideOverriderMethod/after/Test.java
new file mode 100644
index 0000000..dd77e9b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/encapsulateFields/hideOverriderMethod/after/Test.java
@@ -0,0 +1,15 @@
+public class A {
+  public int i;
+}
+
+class B extends A {
+  public int getI() {
+    return 42;
+  }
+
+  public static void main(String[] args) {
+    A a = new B();
+    a.i = 23;
+    System.out.println(a.i);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/encapsulateFields/hideOverriderMethod/before/Test.java b/java/java-tests/testData/refactoring/encapsulateFields/hideOverriderMethod/before/Test.java
new file mode 100644
index 0000000..dd77e9b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/encapsulateFields/hideOverriderMethod/before/Test.java
@@ -0,0 +1,15 @@
+public class A {
+  public int i;
+}
+
+class B extends A {
+  public int getI() {
+    return 42;
+  }
+
+  public static void main(String[] args) {
+    A a = new B();
+    a.i = 23;
+    System.out.println(a.i);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/encapsulateFields/moveJavadocToGetter/after/Test.java b/java/java-tests/testData/refactoring/encapsulateFields/moveJavadocToGetter/after/Test.java
new file mode 100644
index 0000000..ca50188
--- /dev/null
+++ b/java/java-tests/testData/refactoring/encapsulateFields/moveJavadocToGetter/after/Test.java
@@ -0,0 +1,21 @@
+public class A {
+  public int i;
+
+
+  public static void main(String[] args) {
+    A a = new B();
+    a.setI(23);
+    System.out.println(a.getI());
+  }
+
+    /**
+     * my javadoc for field
+     */
+    public int getI() {
+        return i;
+    }
+
+    public void setI(int i) {
+        this.i = i;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/encapsulateFields/moveJavadocToGetter/before/Test.java b/java/java-tests/testData/refactoring/encapsulateFields/moveJavadocToGetter/before/Test.java
new file mode 100644
index 0000000..5a63451
--- /dev/null
+++ b/java/java-tests/testData/refactoring/encapsulateFields/moveJavadocToGetter/before/Test.java
@@ -0,0 +1,13 @@
+public class A {
+  /**
+   * my javadoc for field
+   */
+  public int i;
+
+
+  public static void main(String[] args) {
+    A a = new B();
+    a.i = 23;
+    System.out.println(a.i);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/extractClass/constructorParams/after/Extracted.java b/java/java-tests/testData/refactoring/extractClass/constructorParams/after/Extracted.java
new file mode 100644
index 0000000..cd91175
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/constructorParams/after/Extracted.java
@@ -0,0 +1,13 @@
+public class Extracted {
+    private final Test test;
+    String myT;
+
+    public Extracted(Test test) {
+        this.test = test;
+        this.myT = test.foo();
+    }
+
+    void bar() {
+        System.out.println(myT);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/constructorParams/after/Test.java b/java/java-tests/testData/refactoring/extractClass/constructorParams/after/Test.java
new file mode 100644
index 0000000..495f895
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/constructorParams/after/Test.java
@@ -0,0 +1,15 @@
+class Test {
+    final Extracted extracted = new Extracted(this);
+
+    void bar(){
+        extracted.bar();
+    }
+
+  String foo() {
+    return "";
+  }
+
+  void bazz() {
+      extracted.bar();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/constructorParams/before/Test.java b/java/java-tests/testData/refactoring/extractClass/constructorParams/before/Test.java
new file mode 100644
index 0000000..3311280
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/constructorParams/before/Test.java
@@ -0,0 +1,15 @@
+class Test {
+  String myT = foo();
+
+  void bar(){
+    System.out.println(myT);
+  }
+
+  String foo() {
+    return "";
+  }
+
+  void bazz() {
+    bar();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/dependantFieldInitializers/after/Extracted.java b/java/java-tests/testData/refactoring/extractClass/dependantFieldInitializers/after/Extracted.java
new file mode 100644
index 0000000..70889a6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/dependantFieldInitializers/after/Extracted.java
@@ -0,0 +1,7 @@
+public class Extracted {
+    static final int[] myT;
+
+    public Extracted() {
+        this.myT = new int[]{Test.ii};
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/dependantFieldInitializers/after/Test.java b/java/java-tests/testData/refactoring/extractClass/dependantFieldInitializers/after/Test.java
new file mode 100644
index 0000000..08ab1c0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/dependantFieldInitializers/after/Test.java
@@ -0,0 +1,3 @@
+class Test {
+  static final int ii = 1;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/dependantFieldInitializers/before/Test.java b/java/java-tests/testData/refactoring/extractClass/dependantFieldInitializers/before/Test.java
new file mode 100644
index 0000000..ec11551
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/dependantFieldInitializers/before/Test.java
@@ -0,0 +1,4 @@
+class Test {
+  static final int ii = 1;
+  static final int[] myT = {ii};
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/dependantNonStaticFieldInitializers/after/Extracted.java b/java/java-tests/testData/refactoring/extractClass/dependantNonStaticFieldInitializers/after/Extracted.java
new file mode 100644
index 0000000..9adbe8f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/dependantNonStaticFieldInitializers/after/Extracted.java
@@ -0,0 +1,9 @@
+public class Extracted {
+    private final Test test;
+    int[] myT;
+
+    public Extracted(Test test) {
+        this.test = test;
+        this.myT = new int[]{test.getIi()};
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/dependantNonStaticFieldInitializers/after/Test.java b/java/java-tests/testData/refactoring/extractClass/dependantNonStaticFieldInitializers/after/Test.java
new file mode 100644
index 0000000..743ffce
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/dependantNonStaticFieldInitializers/after/Test.java
@@ -0,0 +1,7 @@
+class Test {
+  int ii = 1;
+
+    public int getIi() {
+        return ii;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/dependantNonStaticFieldInitializers/before/Test.java b/java/java-tests/testData/refactoring/extractClass/dependantNonStaticFieldInitializers/before/Test.java
new file mode 100644
index 0000000..f24a4a0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/dependantNonStaticFieldInitializers/before/Test.java
@@ -0,0 +1,4 @@
+class Test {
+  int ii = 1;
+  int[] myT = {ii};
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/enumSwitch/after/Extracted.java b/java/java-tests/testData/refactoring/extractClass/enumSwitch/after/Extracted.java
new file mode 100644
index 0000000..486e1b6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/enumSwitch/after/Extracted.java
@@ -0,0 +1,11 @@
+public class Extracted {
+    static void foo(Test t) {
+        switch (p) {
+            case FRED:
+                break;
+
+            case GEORGE:
+                break;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/enumSwitch/after/Test.java b/java/java-tests/testData/refactoring/extractClass/enumSwitch/after/Test.java
new file mode 100644
index 0000000..ff8b9d9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/enumSwitch/after/Test.java
@@ -0,0 +1,7 @@
+public class Test {
+
+}
+
+enum Person {
+  FRED, GEORGE;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/enumSwitch/before/Test.java b/java/java-tests/testData/refactoring/extractClass/enumSwitch/before/Test.java
new file mode 100644
index 0000000..89b6caa
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/enumSwitch/before/Test.java
@@ -0,0 +1,16 @@
+public class Test {
+
+  static void foo(Test t) {
+    switch (p) {
+      case FRED:
+        break;
+
+      case GEORGE:
+        break;
+    }
+  }
+}
+
+enum Person {
+  FRED, GEORGE;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/fieldInitializers/after/Extracted.java b/java/java-tests/testData/refactoring/extractClass/fieldInitializers/after/Extracted.java
new file mode 100644
index 0000000..bd6794d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/fieldInitializers/after/Extracted.java
@@ -0,0 +1,3 @@
+public class Extracted {
+    static final int[] myT = {1, 2};
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/fieldInitializers/after/Test.java b/java/java-tests/testData/refactoring/extractClass/fieldInitializers/after/Test.java
new file mode 100644
index 0000000..96d83e0c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/fieldInitializers/after/Test.java
@@ -0,0 +1,2 @@
+class Test {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/fieldInitializers/before/Test.java b/java/java-tests/testData/refactoring/extractClass/fieldInitializers/before/Test.java
new file mode 100644
index 0000000..1e49a4e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/fieldInitializers/before/Test.java
@@ -0,0 +1,3 @@
+class Test {
+  static final int[]  myT = {1,2};
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/fieldReference/after/Test.java b/java/java-tests/testData/refactoring/extractClass/fieldReference/after/Test.java
new file mode 100644
index 0000000..6a5485d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/fieldReference/after/Test.java
@@ -0,0 +1,14 @@
+class Test {
+  int myField;
+  Test(){
+    myField = 7;
+  }
+
+  void foo() {
+    if (myField == 7){}
+  }
+
+  void bar() {
+    foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/fieldReference/before/Test.java b/java/java-tests/testData/refactoring/extractClass/fieldReference/before/Test.java
new file mode 100644
index 0000000..6a5485d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/fieldReference/before/Test.java
@@ -0,0 +1,14 @@
+class Test {
+  int myField;
+  Test(){
+    myField = 7;
+  }
+
+  void foo() {
+    if (myField == 7){}
+  }
+
+  void bar() {
+    foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/generateGetters/after/Extracted.java b/java/java-tests/testData/refactoring/extractClass/generateGetters/after/Extracted.java
new file mode 100644
index 0000000..72d0c1f3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/generateGetters/after/Extracted.java
@@ -0,0 +1,14 @@
+public class Extracted {
+    int myT;
+
+    public int getMyT() {
+        return myT;
+    }
+
+    public void setMyT(int myT) {
+        this.myT = myT;
+    }
+
+    public Extracted() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/generateGetters/after/Test.java b/java/java-tests/testData/refactoring/extractClass/generateGetters/after/Test.java
new file mode 100644
index 0000000..1fd2979
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/generateGetters/after/Test.java
@@ -0,0 +1,11 @@
+class Test {
+    final Extracted extracted = new Extracted();
+
+    {
+        extracted.setMyT(0);
+  }
+  
+  void bar(){
+    int i = extracted.getMyT();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/generateGetters/before/Test.java b/java/java-tests/testData/refactoring/extractClass/generateGetters/before/Test.java
new file mode 100644
index 0000000..9828dc1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/generateGetters/before/Test.java
@@ -0,0 +1,10 @@
+class Test {
+  int myT;
+  {
+    myT = 0;
+  }
+  
+  void bar(){
+    int i = myT;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/getters/after/Extracted.java b/java/java-tests/testData/refactoring/extractClass/getters/after/Extracted.java
new file mode 100644
index 0000000..16b7d48
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/getters/after/Extracted.java
@@ -0,0 +1,10 @@
+public class Extracted {
+    int myT;
+
+    public Extracted() {
+    }
+
+    public int getMyT() {
+        return myT;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/getters/after/Test.java b/java/java-tests/testData/refactoring/extractClass/getters/after/Test.java
new file mode 100644
index 0000000..4e747fa
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/getters/after/Test.java
@@ -0,0 +1,10 @@
+class Test {
+    final Extracted extracted = new Extracted();
+
+    public int getMyT() {
+        return extracted.getMyT();
+    }
+  void bar(){
+    int i = extracted.getMyT();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/getters/before/Test.java b/java/java-tests/testData/refactoring/extractClass/getters/before/Test.java
new file mode 100644
index 0000000..7ae85c8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/getters/before/Test.java
@@ -0,0 +1,9 @@
+class Test {
+  int myT;
+  public int getMyT() {
+    return myT;
+  }
+  void bar(){
+    int i = myT;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/hierarchy/after/A.java b/java/java-tests/testData/refactoring/extractClass/hierarchy/after/A.java
new file mode 100644
index 0000000..f6ecbf4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/hierarchy/after/A.java
@@ -0,0 +1,3 @@
+class A<T>{
+  void foo(T t){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/hierarchy/after/Extracted.java b/java/java-tests/testData/refactoring/extractClass/hierarchy/after/Extracted.java
new file mode 100644
index 0000000..a7857b1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/hierarchy/after/Extracted.java
@@ -0,0 +1,12 @@
+public class Extracted<R> {
+    private final Test<R> test;
+    public R myT;
+
+    public Extracted(Test<R> test) {
+        this.test = test;
+    }
+
+    void bar() {
+        test.foo(myT);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/hierarchy/after/Test.java b/java/java-tests/testData/refactoring/extractClass/hierarchy/after/Test.java
new file mode 100644
index 0000000..8c7bf68
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/hierarchy/after/Test.java
@@ -0,0 +1,5 @@
+class Test<R>  extends A <R>{
+
+    void foo(R t){}
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/hierarchy/before/A.java b/java/java-tests/testData/refactoring/extractClass/hierarchy/before/A.java
new file mode 100644
index 0000000..f6ecbf4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/hierarchy/before/A.java
@@ -0,0 +1,3 @@
+class A<T>{
+  void foo(T t){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/hierarchy/before/Test.java b/java/java-tests/testData/refactoring/extractClass/hierarchy/before/Test.java
new file mode 100644
index 0000000..334fd20
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/hierarchy/before/Test.java
@@ -0,0 +1,9 @@
+class Test<R>  extends A <R>{
+  public R myT;
+
+  void foo(R t){}
+
+  void bar(){
+    foo(myT);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/incrementDecrement/after/Extracted.java b/java/java-tests/testData/refactoring/extractClass/incrementDecrement/after/Extracted.java
new file mode 100644
index 0000000..72d0c1f3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/incrementDecrement/after/Extracted.java
@@ -0,0 +1,14 @@
+public class Extracted {
+    int myT;
+
+    public int getMyT() {
+        return myT;
+    }
+
+    public void setMyT(int myT) {
+        this.myT = myT;
+    }
+
+    public Extracted() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/incrementDecrement/after/Test.java b/java/java-tests/testData/refactoring/extractClass/incrementDecrement/after/Test.java
new file mode 100644
index 0000000..15a4e8a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/incrementDecrement/after/Test.java
@@ -0,0 +1,11 @@
+class Test {
+    final Extracted extracted = new Extracted();
+
+    {
+        extracted.setMyT(0);
+  }
+  
+  void bar(){
+    int i = extracted.setMyT(extracted.getMyT() + 1);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/incrementDecrement/before/Test.java b/java/java-tests/testData/refactoring/extractClass/incrementDecrement/before/Test.java
new file mode 100644
index 0000000..2cdc5b8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/incrementDecrement/before/Test.java
@@ -0,0 +1,10 @@
+class Test {
+  int myT;
+  {
+    myT = 0;
+  }
+  
+  void bar(){
+    int i = myT++;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/inheritanceDelegation/after/Extracted.java b/java/java-tests/testData/refactoring/extractClass/inheritanceDelegation/after/Extracted.java
new file mode 100644
index 0000000..fa09bd1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/inheritanceDelegation/after/Extracted.java
@@ -0,0 +1,8 @@
+public class Extracted implements I {
+    public Extracted() {
+    }
+
+    void foo() {
+        System.out.println("");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/inheritanceDelegation/after/I.java b/java/java-tests/testData/refactoring/extractClass/inheritanceDelegation/after/I.java
new file mode 100644
index 0000000..e8d3fe5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/inheritanceDelegation/after/I.java
@@ -0,0 +1,3 @@
+interface I {
+  void foo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/inheritanceDelegation/after/Test.java b/java/java-tests/testData/refactoring/extractClass/inheritanceDelegation/after/Test.java
new file mode 100644
index 0000000..614ef21
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/inheritanceDelegation/after/Test.java
@@ -0,0 +1,7 @@
+class Test implements I {
+    private final Extracted extracted = new Extracted();
+
+    void foo() {
+        extracted.foo();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/inheritanceDelegation/before/I.java b/java/java-tests/testData/refactoring/extractClass/inheritanceDelegation/before/I.java
new file mode 100644
index 0000000..e8d3fe5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/inheritanceDelegation/before/I.java
@@ -0,0 +1,3 @@
+interface I {
+  void foo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/inheritanceDelegation/before/Test.java b/java/java-tests/testData/refactoring/extractClass/inheritanceDelegation/before/Test.java
new file mode 100644
index 0000000..d076f11
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/inheritanceDelegation/before/Test.java
@@ -0,0 +1,5 @@
+class Test implements I {
+  void foo() {
+     System.out.println("");
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/inner/after/Extracted.java b/java/java-tests/testData/refactoring/extractClass/inner/after/Extracted.java
new file mode 100644
index 0000000..f3dbabf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/inner/after/Extracted.java
@@ -0,0 +1,6 @@
+public class Extracted {
+    static class Inner {
+        void foo() {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/inner/after/Test.java b/java/java-tests/testData/refactoring/extractClass/inner/after/Test.java
new file mode 100644
index 0000000..8f537ae
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/inner/after/Test.java
@@ -0,0 +1,6 @@
+class Test {
+  void bar() {
+     new Extracted.Inner().foo();
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/inner/before/Test.java b/java/java-tests/testData/refactoring/extractClass/inner/before/Test.java
new file mode 100644
index 0000000..d4d0b5b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/inner/before/Test.java
@@ -0,0 +1,9 @@
+class Test {
+  void bar() {
+     new Inner().foo();
+  }
+
+  static class Inner {
+    void foo(){}
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/innerClassRefs/after/Extracted.java b/java/java-tests/testData/refactoring/extractClass/innerClassRefs/after/Extracted.java
new file mode 100644
index 0000000..ca5a202
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/innerClassRefs/after/Extracted.java
@@ -0,0 +1,6 @@
+public class Extracted {
+    static class Inner {
+        public static void get() {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/innerClassRefs/after/Test.java b/java/java-tests/testData/refactoring/extractClass/innerClassRefs/after/Test.java
new file mode 100644
index 0000000..2d50aa1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/innerClassRefs/after/Test.java
@@ -0,0 +1,8 @@
+class Test {
+
+    Extracted.Inner p;
+
+    {
+        Extracted.Inner.get();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/extractClass/innerClassRefs/before/Test.java b/java/java-tests/testData/refactoring/extractClass/innerClassRefs/before/Test.java
new file mode 100644
index 0000000..1550aa7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/innerClassRefs/before/Test.java
@@ -0,0 +1,12 @@
+class Test {
+
+    static class Inner {
+          public static void get() {
+          }
+      }
+    Inner p;
+
+    {
+        Inner.get();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/extractClass/methodTypeParameters/after/Extracted.java b/java/java-tests/testData/refactoring/extractClass/methodTypeParameters/after/Extracted.java
new file mode 100644
index 0000000..bb979dc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/methodTypeParameters/after/Extracted.java
@@ -0,0 +1,8 @@
+public class Extracted {
+    public Extracted() {
+    }
+
+    public <T> void foo(T p) {
+        System.out.println(p.getClass().getName());
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/methodTypeParameters/after/Test.java b/java/java-tests/testData/refactoring/extractClass/methodTypeParameters/after/Test.java
new file mode 100644
index 0000000..e4826f8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/methodTypeParameters/after/Test.java
@@ -0,0 +1,12 @@
+class Test {
+    private final Extracted extracted = new Extracted();
+
+    public <T> void foo(T p) {
+        extracted.foo(p);
+    }
+
+  public static void main(String[] args) {
+    new Test().foo(10f);
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/methodTypeParameters/before/Test.java b/java/java-tests/testData/refactoring/extractClass/methodTypeParameters/before/Test.java
new file mode 100644
index 0000000..577710b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/methodTypeParameters/before/Test.java
@@ -0,0 +1,10 @@
+class Test {
+  public <T> void foo(T p) {
+    System.out.println(p.getClass().getName());
+  }
+
+  public static void main(String[] args) {
+    new Test().foo(10f);
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/multipleGetters/after/Test.java b/java/java-tests/testData/refactoring/extractClass/multipleGetters/after/Test.java
new file mode 100644
index 0000000..7ae85c8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/multipleGetters/after/Test.java
@@ -0,0 +1,9 @@
+class Test {
+  int myT;
+  public int getMyT() {
+    return myT;
+  }
+  void bar(){
+    int i = myT;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/multipleGetters/before/Test.java b/java/java-tests/testData/refactoring/extractClass/multipleGetters/before/Test.java
new file mode 100644
index 0000000..7ae85c8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/multipleGetters/before/Test.java
@@ -0,0 +1,9 @@
+class Test {
+  int myT;
+  public int getMyT() {
+    return myT;
+  }
+  void bar(){
+    int i = myT;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/multipleGetters1/after/Test.java b/java/java-tests/testData/refactoring/extractClass/multipleGetters1/after/Test.java
new file mode 100644
index 0000000..7cc867d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/multipleGetters1/after/Test.java
@@ -0,0 +1,6 @@
+class Test {
+  int myT;
+  public int getMyT() {
+    return myT;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/multipleGetters1/before/Test.java b/java/java-tests/testData/refactoring/extractClass/multipleGetters1/before/Test.java
new file mode 100644
index 0000000..7cc867d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/multipleGetters1/before/Test.java
@@ -0,0 +1,6 @@
+class Test {
+  int myT;
+  public int getMyT() {
+    return myT;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/noConstructorParams/after/Extracted.java b/java/java-tests/testData/refactoring/extractClass/noConstructorParams/after/Extracted.java
new file mode 100644
index 0000000..a49603d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/noConstructorParams/after/Extracted.java
@@ -0,0 +1,10 @@
+public class Extracted {
+    String myT = "";
+
+    public Extracted() {
+    }
+
+    void bar() {
+        System.out.println(myT);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/noConstructorParams/after/Test.java b/java/java-tests/testData/refactoring/extractClass/noConstructorParams/after/Test.java
new file mode 100644
index 0000000..dea92ec
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/noConstructorParams/after/Test.java
@@ -0,0 +1,11 @@
+class Test {
+    final Extracted extracted = new Extracted();
+
+    void bar(){
+        extracted.bar();
+    }
+
+  void foo() {
+      extracted.bar();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/noConstructorParams/before/Test.java b/java/java-tests/testData/refactoring/extractClass/noConstructorParams/before/Test.java
new file mode 100644
index 0000000..c725f07
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/noConstructorParams/before/Test.java
@@ -0,0 +1,11 @@
+class Test {
+  String myT = "";
+
+  void bar(){
+    System.out.println(myT);
+  }
+
+  void foo() {
+    bar();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/noDelegation/after/Extracted.java b/java/java-tests/testData/refactoring/extractClass/noDelegation/after/Extracted.java
new file mode 100644
index 0000000..742c726
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/noDelegation/after/Extracted.java
@@ -0,0 +1,7 @@
+public class Extracted {
+    public Extracted() {
+    }
+
+    void foo() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/noDelegation/after/Test.java b/java/java-tests/testData/refactoring/extractClass/noDelegation/after/Test.java
new file mode 100644
index 0000000..96d83e0c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/noDelegation/after/Test.java
@@ -0,0 +1,2 @@
+class Test {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/noDelegation/before/Test.java b/java/java-tests/testData/refactoring/extractClass/noDelegation/before/Test.java
new file mode 100644
index 0000000..9a6d394
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/noDelegation/before/Test.java
@@ -0,0 +1,3 @@
+class Test {
+  void foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/noFieldDelegation/after/Extracted.java b/java/java-tests/testData/refactoring/extractClass/noFieldDelegation/after/Extracted.java
new file mode 100644
index 0000000..7ab12e1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/noFieldDelegation/after/Extracted.java
@@ -0,0 +1,12 @@
+public class Extracted<T> {
+    private final Test<T> test;
+    T myT;
+
+    public Extracted(Test<T> test) {
+        this.test = test;
+    }
+
+    void bar() {
+        test.foo(myT);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/noFieldDelegation/after/Test.java b/java/java-tests/testData/refactoring/extractClass/noFieldDelegation/after/Test.java
new file mode 100644
index 0000000..a9d3ee2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/noFieldDelegation/after/Test.java
@@ -0,0 +1,3 @@
+class Test<T> {
+    void foo(T t){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/noFieldDelegation/before/Test.java b/java/java-tests/testData/refactoring/extractClass/noFieldDelegation/before/Test.java
new file mode 100644
index 0000000..a98342e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/noFieldDelegation/before/Test.java
@@ -0,0 +1,7 @@
+class Test<T> {
+  T myT;
+  void foo(T t){}
+  void bar(){
+    foo(myT);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/publicFieldDelegation/after/Extracted.java b/java/java-tests/testData/refactoring/extractClass/publicFieldDelegation/after/Extracted.java
new file mode 100644
index 0000000..062381c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/publicFieldDelegation/after/Extracted.java
@@ -0,0 +1,6 @@
+public class Extracted<T> {
+    public T myT;
+
+    public Extracted() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/publicFieldDelegation/after/Test.java b/java/java-tests/testData/refactoring/extractClass/publicFieldDelegation/after/Test.java
new file mode 100644
index 0000000..61c59fc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/publicFieldDelegation/after/Test.java
@@ -0,0 +1,8 @@
+class Test<T> {
+    public final Extracted<T> extracted = new Extracted<T>();
+
+    void foo(T t){}
+  void bar(){
+    foo(extracted.myT);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/publicFieldDelegation/before/Test.java b/java/java-tests/testData/refactoring/extractClass/publicFieldDelegation/before/Test.java
new file mode 100644
index 0000000..c6c3ca3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/publicFieldDelegation/before/Test.java
@@ -0,0 +1,7 @@
+class Test<T> {
+  public T myT;
+  void foo(T t){}
+  void bar(){
+    foo(myT);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/publicVisibility/after/Extracted.java b/java/java-tests/testData/refactoring/extractClass/publicVisibility/after/Extracted.java
new file mode 100644
index 0000000..cf44cfe
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/publicVisibility/after/Extracted.java
@@ -0,0 +1,9 @@
+public class Extracted<T> {
+    public T myT;
+
+    public Extracted() {
+    }
+
+    public void foos() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/publicVisibility/after/Test.java b/java/java-tests/testData/refactoring/extractClass/publicVisibility/after/Test.java
new file mode 100644
index 0000000..dc30d4c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/publicVisibility/after/Test.java
@@ -0,0 +1,10 @@
+class Test<T> {
+    final Extracted<T> extracted = new Extracted<T>();
+
+    void bar(){
+        extracted.foos();
+  }
+  void foos(){
+      extracted.foos();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/publicVisibility/before/Test.java b/java/java-tests/testData/refactoring/extractClass/publicVisibility/before/Test.java
new file mode 100644
index 0000000..32020d3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/publicVisibility/before/Test.java
@@ -0,0 +1,7 @@
+class Test<T> {
+  T myT;
+  void bar(){
+    foos();
+  }
+  void foos(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/refInJavadoc/after/Extracted.java b/java/java-tests/testData/refactoring/extractClass/refInJavadoc/after/Extracted.java
new file mode 100644
index 0000000..e2002a4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/refInJavadoc/after/Extracted.java
@@ -0,0 +1,6 @@
+public class Extracted<T> {
+    T myT;
+
+    public Extracted() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/refInJavadoc/after/Test.java b/java/java-tests/testData/refactoring/extractClass/refInJavadoc/after/Test.java
new file mode 100644
index 0000000..9c821dd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/refInJavadoc/after/Test.java
@@ -0,0 +1,8 @@
+class Test<T> {
+
+    /**
+  * {@link Extracted#myT}
+  */
+  void bar(){
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/refInJavadoc/before/Test.java b/java/java-tests/testData/refactoring/extractClass/refInJavadoc/before/Test.java
new file mode 100644
index 0000000..e04d232
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/refInJavadoc/before/Test.java
@@ -0,0 +1,9 @@
+class Test<T> {
+  T myT;
+
+  /**
+  * {@link Test#myT}
+  */
+  void bar(){
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/static/after/Extracted.java b/java/java-tests/testData/refactoring/extractClass/static/after/Extracted.java
new file mode 100644
index 0000000..cbdd8ce
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/static/after/Extracted.java
@@ -0,0 +1,5 @@
+public class Extracted {
+    static void foo() {
+        System.out.println("");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/static/after/Test.java b/java/java-tests/testData/refactoring/extractClass/static/after/Test.java
new file mode 100644
index 0000000..79d1290
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/static/after/Test.java
@@ -0,0 +1,6 @@
+class Test {
+
+    static void bar(){
+        Extracted.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/static/before/Test.java b/java/java-tests/testData/refactoring/extractClass/static/before/Test.java
new file mode 100644
index 0000000..b86f1ed
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/static/before/Test.java
@@ -0,0 +1,9 @@
+class Test {
+  static void foo() {
+     System.out.println("");
+  }
+
+  static void bar(){
+     foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/staticImport/after/Extracted.java b/java/java-tests/testData/refactoring/extractClass/staticImport/after/Extracted.java
new file mode 100644
index 0000000..44c22a9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/staticImport/after/Extracted.java
@@ -0,0 +1,7 @@
+import java.util.Collections;
+
+public class Extracted {
+    static void foo() {
+        Collections.singletonList();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/staticImport/after/Test.java b/java/java-tests/testData/refactoring/extractClass/staticImport/after/Test.java
new file mode 100644
index 0000000..96d83e0c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/staticImport/after/Test.java
@@ -0,0 +1,2 @@
+class Test {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/staticImport/before/Test.java b/java/java-tests/testData/refactoring/extractClass/staticImport/before/Test.java
new file mode 100644
index 0000000..f676dc7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/staticImport/before/Test.java
@@ -0,0 +1,6 @@
+import static java.util.Collections.singletonList;
+class Test {
+  static void foo(){
+     singletonList();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/usedInConstructor/after/Test.java b/java/java-tests/testData/refactoring/extractClass/usedInConstructor/after/Test.java
new file mode 100644
index 0000000..562678f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/usedInConstructor/after/Test.java
@@ -0,0 +1,13 @@
+class Test {
+  int myT;
+  Test(){
+    myT = 0;
+  }
+  
+  public int getMyT() {
+    return myT;
+  }
+  void bar(){
+    int i = myT;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/usedInConstructor/before/Test.java b/java/java-tests/testData/refactoring/extractClass/usedInConstructor/before/Test.java
new file mode 100644
index 0000000..562678f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/usedInConstructor/before/Test.java
@@ -0,0 +1,13 @@
+class Test {
+  int myT;
+  Test(){
+    myT = 0;
+  }
+  
+  public int getMyT() {
+    return myT;
+  }
+  void bar(){
+    int i = myT;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/usedInInitializer/after/Test.java b/java/java-tests/testData/refactoring/extractClass/usedInInitializer/after/Test.java
new file mode 100644
index 0000000..8886568
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/usedInInitializer/after/Test.java
@@ -0,0 +1,13 @@
+class Test {
+  int myT;
+  {
+    myT = 0;
+  }
+  
+  public int getMyT() {
+    return myT;
+  }
+  void bar(){
+    int i = myT;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/usedInInitializer/before/Test.java b/java/java-tests/testData/refactoring/extractClass/usedInInitializer/before/Test.java
new file mode 100644
index 0000000..8886568
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/usedInInitializer/before/Test.java
@@ -0,0 +1,13 @@
+class Test {
+  int myT;
+  {
+    myT = 0;
+  }
+  
+  public int getMyT() {
+    return myT;
+  }
+  void bar(){
+    int i = myT;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/varargs/after/Extracted.java b/java/java-tests/testData/refactoring/extractClass/varargs/after/Extracted.java
new file mode 100644
index 0000000..d1a39e1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/varargs/after/Extracted.java
@@ -0,0 +1,7 @@
+public class Extracted {
+    public Extracted() {
+    }
+
+    void foo(int... f) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/varargs/after/Test.java b/java/java-tests/testData/refactoring/extractClass/varargs/after/Test.java
new file mode 100644
index 0000000..66d90bc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/varargs/after/Test.java
@@ -0,0 +1,13 @@
+class Test {
+    private final Extracted extracted = new Extracted();
+
+    Test(){}
+
+  void foo(int... f) {
+      extracted.foo(f);
+  }
+
+  void bar() {
+      extracted.foo(1, 2);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractClass/varargs/before/Test.java b/java/java-tests/testData/refactoring/extractClass/varargs/before/Test.java
new file mode 100644
index 0000000..b10a375
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractClass/varargs/before/Test.java
@@ -0,0 +1,9 @@
+class Test {
+  Test(){}
+
+  void foo(int... f) {}
+
+  void bar() {
+    foo(1, 2);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractEnum/cantChangeMethodParameter/after/Test.java b/java/java-tests/testData/refactoring/extractEnum/cantChangeMethodParameter/after/Test.java
new file mode 100644
index 0000000..e85a488
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractEnum/cantChangeMethodParameter/after/Test.java
@@ -0,0 +1,18 @@
+public class Test {
+    public static final int FOO = 0;
+    public static final int BAR = 1;
+
+    void foo(int i) {
+        switch (i) {
+            case FOO:
+                break;
+            case BAR:
+                break;
+        }
+    }
+
+    void foobar() {
+        int max = Math.max(FOO, BAR);
+        foo(max);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractEnum/cantChangeMethodParameter/before/Test.java b/java/java-tests/testData/refactoring/extractEnum/cantChangeMethodParameter/before/Test.java
new file mode 100644
index 0000000..e85a488
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractEnum/cantChangeMethodParameter/before/Test.java
@@ -0,0 +1,18 @@
+public class Test {
+    public static final int FOO = 0;
+    public static final int BAR = 1;
+
+    void foo(int i) {
+        switch (i) {
+            case FOO:
+                break;
+            case BAR:
+                break;
+        }
+    }
+
+    void foobar() {
+        int max = Math.max(FOO, BAR);
+        foo(max);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractEnum/cantChangeMethodParameter1/after/Test.java b/java/java-tests/testData/refactoring/extractEnum/cantChangeMethodParameter1/after/Test.java
new file mode 100644
index 0000000..457b2d2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractEnum/cantChangeMethodParameter1/after/Test.java
@@ -0,0 +1,20 @@
+public class Test {
+    public static final int FOO = 0;
+    public static final int BAR = 1;
+
+    void foo(int i) {
+        switch (i) {
+            case FOO:
+                break;
+            case BAR:
+                break;
+        }
+        int k = Math.max(i * i, i + i);
+        switch (k) {
+            case FOO:
+                break;
+            case BAR:
+                break;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractEnum/cantChangeMethodParameter1/before/Test.java b/java/java-tests/testData/refactoring/extractEnum/cantChangeMethodParameter1/before/Test.java
new file mode 100644
index 0000000..457b2d2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractEnum/cantChangeMethodParameter1/before/Test.java
@@ -0,0 +1,20 @@
+public class Test {
+    public static final int FOO = 0;
+    public static final int BAR = 1;
+
+    void foo(int i) {
+        switch (i) {
+            case FOO:
+                break;
+            case BAR:
+                break;
+        }
+        int k = Math.max(i * i, i + i);
+        switch (k) {
+            case FOO:
+                break;
+            case BAR:
+                break;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractEnum/cantChangeReturnType/after/Test.java b/java/java-tests/testData/refactoring/extractEnum/cantChangeReturnType/after/Test.java
new file mode 100644
index 0000000..e77d50e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractEnum/cantChangeReturnType/after/Test.java
@@ -0,0 +1,13 @@
+public class Test {
+    public static final int FOO = 0;
+    public static final int BAR = 2;
+
+    void foo(String[] args) {
+        switch (args.length) {
+            case FOO:
+                break;
+            case BAR:
+                break;
+        }
+      }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractEnum/cantChangeReturnType/before/Test.java b/java/java-tests/testData/refactoring/extractEnum/cantChangeReturnType/before/Test.java
new file mode 100644
index 0000000..e77d50e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractEnum/cantChangeReturnType/before/Test.java
@@ -0,0 +1,13 @@
+public class Test {
+    public static final int FOO = 0;
+    public static final int BAR = 2;
+
+    void foo(String[] args) {
+        switch (args.length) {
+            case FOO:
+                break;
+            case BAR:
+                break;
+        }
+      }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractEnum/cantChangeReturnType1/after/Test.java b/java/java-tests/testData/refactoring/extractEnum/cantChangeReturnType1/after/Test.java
new file mode 100644
index 0000000..28a75d3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractEnum/cantChangeReturnType1/after/Test.java
@@ -0,0 +1,17 @@
+public class Test {
+    public static final int FOO = 0;
+    public static final int BAR = 2;
+
+    void foo(String[] args) {
+        switch (boo(args)) {
+            case FOO:
+                break;
+            case BAR:
+                break;
+        }
+    }
+
+    int boo(String[] args) {
+        return args.length;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractEnum/cantChangeReturnType1/before/Test.java b/java/java-tests/testData/refactoring/extractEnum/cantChangeReturnType1/before/Test.java
new file mode 100644
index 0000000..28a75d3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractEnum/cantChangeReturnType1/before/Test.java
@@ -0,0 +1,17 @@
+public class Test {
+    public static final int FOO = 0;
+    public static final int BAR = 2;
+
+    void foo(String[] args) {
+        switch (boo(args)) {
+            case FOO:
+                break;
+            case BAR:
+                break;
+        }
+    }
+
+    int boo(String[] args) {
+        return args.length;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractEnum/changeMethodParameter/after/EEnum.java b/java/java-tests/testData/refactoring/extractEnum/changeMethodParameter/after/EEnum.java
new file mode 100644
index 0000000..dc88a3b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractEnum/changeMethodParameter/after/EEnum.java
@@ -0,0 +1,12 @@
+public enum EEnum {
+    FOO(0), BAR(1);
+    private int value;
+
+    public int getValue() {
+        return value;
+    }
+
+    EEnum(int value) {
+        this.value = value;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractEnum/changeMethodParameter/after/Test.java b/java/java-tests/testData/refactoring/extractEnum/changeMethodParameter/after/Test.java
new file mode 100644
index 0000000..bc0818f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractEnum/changeMethodParameter/after/Test.java
@@ -0,0 +1,16 @@
+public class Test {
+
+    void foo(EEnum i) {
+        switch (i) {
+            case FOO:
+                break;
+            case BAR:
+                break;
+        }
+    }
+
+    void foobar() {
+        foo(EEnum.FOO);
+        foo(EEnum.BAR);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractEnum/changeMethodParameter/before/Test.java b/java/java-tests/testData/refactoring/extractEnum/changeMethodParameter/before/Test.java
new file mode 100644
index 0000000..b9fa726
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractEnum/changeMethodParameter/before/Test.java
@@ -0,0 +1,18 @@
+public class Test {
+    public static final int FOO = 0;
+    public static final int BAR = 1;
+
+    void foo(int i) {
+        switch (i) {
+            case FOO:
+                break;
+            case BAR:
+                break;
+        }
+    }
+
+    void foobar() {
+        foo(FOO);
+        foo(BAR);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractEnum/changeMethodParameterAndReplaceOtherUsages/after/EEnum.java b/java/java-tests/testData/refactoring/extractEnum/changeMethodParameterAndReplaceOtherUsages/after/EEnum.java
new file mode 100644
index 0000000..dc88a3b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractEnum/changeMethodParameterAndReplaceOtherUsages/after/EEnum.java
@@ -0,0 +1,12 @@
+public enum EEnum {
+    FOO(0), BAR(1);
+    private int value;
+
+    public int getValue() {
+        return value;
+    }
+
+    EEnum(int value) {
+        this.value = value;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractEnum/changeMethodParameterAndReplaceOtherUsages/after/Test.java b/java/java-tests/testData/refactoring/extractEnum/changeMethodParameterAndReplaceOtherUsages/after/Test.java
new file mode 100644
index 0000000..50b5b59
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractEnum/changeMethodParameterAndReplaceOtherUsages/after/Test.java
@@ -0,0 +1,12 @@
+public class Test {
+
+    void foo(EEnum i) {
+        switch (i) {
+            case FOO:
+                break;
+            case BAR:
+                break;
+        }
+        int k = Math.max(i.getValue() * i.getValue(), i.getValue() + i.getValue());
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractEnum/changeMethodParameterAndReplaceOtherUsages/before/Test.java b/java/java-tests/testData/refactoring/extractEnum/changeMethodParameterAndReplaceOtherUsages/before/Test.java
new file mode 100644
index 0000000..48c3cea
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractEnum/changeMethodParameterAndReplaceOtherUsages/before/Test.java
@@ -0,0 +1,14 @@
+public class Test {
+    public static final int FOO = 0;
+    public static final int BAR = 1;
+
+    void foo(int i) {
+        switch (i) {
+            case FOO:
+                break;
+            case BAR:
+                break;
+        }
+        int k = Math.max(i * i, i + i);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractEnum/changeReturnType/after/EEnum.java b/java/java-tests/testData/refactoring/extractEnum/changeReturnType/after/EEnum.java
new file mode 100644
index 0000000..dc88a3b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractEnum/changeReturnType/after/EEnum.java
@@ -0,0 +1,12 @@
+public enum EEnum {
+    FOO(0), BAR(1);
+    private int value;
+
+    public int getValue() {
+        return value;
+    }
+
+    EEnum(int value) {
+        this.value = value;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractEnum/changeReturnType/after/Test.java b/java/java-tests/testData/refactoring/extractEnum/changeReturnType/after/Test.java
new file mode 100644
index 0000000..3658f1a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractEnum/changeReturnType/after/Test.java
@@ -0,0 +1,19 @@
+public class Test {
+
+    void foo() {
+        EEnum i = foobar(false);
+        switch (i) {
+            case FOO:
+                break;
+            case BAR:
+                break;
+        }
+    }
+
+    EEnum foobar(boolean flag) {
+        if (flag) {
+            return EEnum.FOO;
+        }
+        return EEnum.BAR;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractEnum/changeReturnType/before/Test.java b/java/java-tests/testData/refactoring/extractEnum/changeReturnType/before/Test.java
new file mode 100644
index 0000000..da43d79
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractEnum/changeReturnType/before/Test.java
@@ -0,0 +1,21 @@
+public class Test {
+    public static final int FOO = 0;
+    public static final int BAR = 1;
+
+    void foo() {
+        int i = foobar(false);
+        switch (i) {
+            case FOO:
+                break;
+            case BAR:
+                break;
+        }
+    }
+
+    int foobar(boolean flag) {
+        if (flag) {
+            return FOO;
+        }
+        return BAR;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractEnum/dependantConstants/after/EEnum.java b/java/java-tests/testData/refactoring/extractEnum/dependantConstants/after/EEnum.java
new file mode 100644
index 0000000..a609851
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractEnum/dependantConstants/after/EEnum.java
@@ -0,0 +1,12 @@
+public enum EEnum {
+    FOO("foo"), BAR(FOO.getValue());
+    private String value;
+
+    public String getValue() {
+        return value;
+    }
+
+    EEnum(String value) {
+        this.value = value;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractEnum/dependantConstants/after/Test.java b/java/java-tests/testData/refactoring/extractEnum/dependantConstants/after/Test.java
new file mode 100644
index 0000000..96d83e0c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractEnum/dependantConstants/after/Test.java
@@ -0,0 +1,2 @@
+class Test {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractEnum/dependantConstants/before/Test.java b/java/java-tests/testData/refactoring/extractEnum/dependantConstants/before/Test.java
new file mode 100644
index 0000000..0ad428d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractEnum/dependantConstants/before/Test.java
@@ -0,0 +1,4 @@
+class Test {
+  public static final String FOO = "foo";
+  public static final String BAR = FOO;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractEnum/dontChangeOtherConstants/after/Test.java b/java/java-tests/testData/refactoring/extractEnum/dontChangeOtherConstants/after/Test.java
new file mode 100644
index 0000000..e73143d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractEnum/dontChangeOtherConstants/after/Test.java
@@ -0,0 +1,19 @@
+public class Test {
+  public static final int OK = 0;
+  public static final int ERROR = 1;
+
+  void foo(int status) {
+    switch (status) {
+      case OK:
+        break;
+      case ERROR:
+        break;
+      case Node.WARNING:
+        break;
+    }
+  }
+}
+
+interface Node {
+  int WARNING = 2;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractEnum/dontChangeOtherConstants/before/Test.java b/java/java-tests/testData/refactoring/extractEnum/dontChangeOtherConstants/before/Test.java
new file mode 100644
index 0000000..e73143d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractEnum/dontChangeOtherConstants/before/Test.java
@@ -0,0 +1,19 @@
+public class Test {
+  public static final int OK = 0;
+  public static final int ERROR = 1;
+
+  void foo(int status) {
+    switch (status) {
+      case OK:
+        break;
+      case ERROR:
+        break;
+      case Node.WARNING:
+        break;
+    }
+  }
+}
+
+interface Node {
+  int WARNING = 2;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractEnum/forwardReferenceConflict/after/Test.java b/java/java-tests/testData/refactoring/extractEnum/forwardReferenceConflict/after/Test.java
new file mode 100644
index 0000000..0ad428d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractEnum/forwardReferenceConflict/after/Test.java
@@ -0,0 +1,4 @@
+class Test {
+  public static final String FOO = "foo";
+  public static final String BAR = FOO;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractEnum/forwardReferenceConflict/before/Test.java b/java/java-tests/testData/refactoring/extractEnum/forwardReferenceConflict/before/Test.java
new file mode 100644
index 0000000..0ad428d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractEnum/forwardReferenceConflict/before/Test.java
@@ -0,0 +1,4 @@
+class Test {
+  public static final String FOO = "foo";
+  public static final String BAR = FOO;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractEnum/oneConstant/after/EEnum.java b/java/java-tests/testData/refactoring/extractEnum/oneConstant/after/EEnum.java
new file mode 100644
index 0000000..a83283b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractEnum/oneConstant/after/EEnum.java
@@ -0,0 +1,12 @@
+public enum EEnum {
+    FOO("foo");
+    private String value;
+
+    public String getValue() {
+        return value;
+    }
+
+    EEnum(String value) {
+        this.value = value;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractEnum/oneConstant/after/Test.java b/java/java-tests/testData/refactoring/extractEnum/oneConstant/after/Test.java
new file mode 100644
index 0000000..96d83e0c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractEnum/oneConstant/after/Test.java
@@ -0,0 +1,2 @@
+class Test {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractEnum/oneConstant/before/Test.java b/java/java-tests/testData/refactoring/extractEnum/oneConstant/before/Test.java
new file mode 100644
index 0000000..58d6f66c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractEnum/oneConstant/before/Test.java
@@ -0,0 +1,3 @@
+class Test {
+  public static final String FOO = "foo";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractEnum/referencesOnEnumConstantElsewhere/after/EEnum.java b/java/java-tests/testData/refactoring/extractEnum/referencesOnEnumConstantElsewhere/after/EEnum.java
new file mode 100644
index 0000000..1a69466
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractEnum/referencesOnEnumConstantElsewhere/after/EEnum.java
@@ -0,0 +1,12 @@
+public enum EEnum {
+    FOO(0), BAR(2);
+    private int value;
+
+    public int getValue() {
+        return value;
+    }
+
+    EEnum(int value) {
+        this.value = value;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractEnum/referencesOnEnumConstantElsewhere/after/Test.java b/java/java-tests/testData/refactoring/extractEnum/referencesOnEnumConstantElsewhere/after/Test.java
new file mode 100644
index 0000000..c38448b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractEnum/referencesOnEnumConstantElsewhere/after/Test.java
@@ -0,0 +1,5 @@
+class Test {
+    void foo() {
+    System.out.println(EEnum.FOO.getValue());
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractEnum/referencesOnEnumConstantElsewhere/after/Usage.java b/java/java-tests/testData/refactoring/extractEnum/referencesOnEnumConstantElsewhere/after/Usage.java
new file mode 100644
index 0000000..310fdee
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractEnum/referencesOnEnumConstantElsewhere/after/Usage.java
@@ -0,0 +1,15 @@
+class Usage {
+  void foo(EEnum i) {
+        switch (i) {
+            case FOO:
+                break;
+            case BAR:
+                break;
+        }
+    }
+
+    void foobar() {
+        foo(EEnum.FOO);
+        foo(EEnum.BAR);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractEnum/referencesOnEnumConstantElsewhere/before/Test.java b/java/java-tests/testData/refactoring/extractEnum/referencesOnEnumConstantElsewhere/before/Test.java
new file mode 100644
index 0000000..ac612da
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractEnum/referencesOnEnumConstantElsewhere/before/Test.java
@@ -0,0 +1,7 @@
+class Test {
+  public static final int FOO = 0;
+  public static final int BAR = 2;
+  void foo() {
+    System.out.println(FOO);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractEnum/referencesOnEnumConstantElsewhere/before/Usage.java b/java/java-tests/testData/refactoring/extractEnum/referencesOnEnumConstantElsewhere/before/Usage.java
new file mode 100644
index 0000000..7563c64
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractEnum/referencesOnEnumConstantElsewhere/before/Usage.java
@@ -0,0 +1,15 @@
+class Usage {
+  void foo(int i) {
+        switch (i) {
+            case Test.FOO:
+                break;
+            case Test.BAR:
+                break;
+        }
+    }
+
+    void foobar() {
+        foo(Test.FOO);
+        foo(Test.BAR);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractEnum/referencesOnEnumConstantInEnum/after/EEnum.java b/java/java-tests/testData/refactoring/extractEnum/referencesOnEnumConstantInEnum/after/EEnum.java
new file mode 100644
index 0000000..04fa5b6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractEnum/referencesOnEnumConstantInEnum/after/EEnum.java
@@ -0,0 +1,16 @@
+public enum EEnum {
+    FOO("foo");
+    private String value;
+
+    public String getValue() {
+        return value;
+    }
+
+    EEnum(String value) {
+        this.value = value;
+    }
+
+    void foo() {
+        System.out.println(FOO.getValue());
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractEnum/referencesOnEnumConstantInEnum/after/Test.java b/java/java-tests/testData/refactoring/extractEnum/referencesOnEnumConstantInEnum/after/Test.java
new file mode 100644
index 0000000..96d83e0c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractEnum/referencesOnEnumConstantInEnum/after/Test.java
@@ -0,0 +1,2 @@
+class Test {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractEnum/referencesOnEnumConstantInEnum/before/Test.java b/java/java-tests/testData/refactoring/extractEnum/referencesOnEnumConstantInEnum/before/Test.java
new file mode 100644
index 0000000..344f512
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractEnum/referencesOnEnumConstantInEnum/before/Test.java
@@ -0,0 +1,6 @@
+class Test {
+  public static final String FOO = "foo";
+  void foo() {
+    System.out.println(FOO);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractEnum/referencesOnEnumConstantInOriginal/after/EEnum.java b/java/java-tests/testData/refactoring/extractEnum/referencesOnEnumConstantInOriginal/after/EEnum.java
new file mode 100644
index 0000000..a83283b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractEnum/referencesOnEnumConstantInOriginal/after/EEnum.java
@@ -0,0 +1,12 @@
+public enum EEnum {
+    FOO("foo");
+    private String value;
+
+    public String getValue() {
+        return value;
+    }
+
+    EEnum(String value) {
+        this.value = value;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractEnum/referencesOnEnumConstantInOriginal/after/Test.java b/java/java-tests/testData/refactoring/extractEnum/referencesOnEnumConstantInOriginal/after/Test.java
new file mode 100644
index 0000000..c38448b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractEnum/referencesOnEnumConstantInOriginal/after/Test.java
@@ -0,0 +1,5 @@
+class Test {
+    void foo() {
+    System.out.println(EEnum.FOO.getValue());
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractEnum/referencesOnEnumConstantInOriginal/before/Test.java b/java/java-tests/testData/refactoring/extractEnum/referencesOnEnumConstantInOriginal/before/Test.java
new file mode 100644
index 0000000..344f512
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractEnum/referencesOnEnumConstantInOriginal/before/Test.java
@@ -0,0 +1,6 @@
+class Test {
+  public static final String FOO = "foo";
+  void foo() {
+    System.out.println(FOO);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractEnum/unknownSwitchLabel/after/Test.java b/java/java-tests/testData/refactoring/extractEnum/unknownSwitchLabel/after/Test.java
new file mode 100644
index 0000000..1ee8f0e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractEnum/unknownSwitchLabel/after/Test.java
@@ -0,0 +1,20 @@
+public class Test {
+    public static final int FOO = 0;
+    public static final int BAR = 1;
+
+    void foo(int i) {
+        switch (i) {
+            case FOO:
+                break;
+            case BAR:
+                break;
+            case 8:
+                break;
+        }
+    }
+
+    void foobar() {
+        foo(FOO);
+        foo(BAR);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractEnum/unknownSwitchLabel/before/Test.java b/java/java-tests/testData/refactoring/extractEnum/unknownSwitchLabel/before/Test.java
new file mode 100644
index 0000000..1ee8f0e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractEnum/unknownSwitchLabel/before/Test.java
@@ -0,0 +1,20 @@
+public class Test {
+    public static final int FOO = 0;
+    public static final int BAR = 1;
+
+    void foo(int i) {
+        switch (i) {
+            case FOO:
+                break;
+            case BAR:
+                break;
+            case 8:
+                break;
+        }
+    }
+
+    void foobar() {
+        foo(FOO);
+        foo(BAR);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractEnum/valueNameConflict/after/EEnum.java b/java/java-tests/testData/refactoring/extractEnum/valueNameConflict/after/EEnum.java
new file mode 100644
index 0000000..c0b8fde
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractEnum/valueNameConflict/after/EEnum.java
@@ -0,0 +1,13 @@
+public enum EEnum {
+    FOO("foo");
+    public int value = 0;
+    private String value1;
+
+    public String getValue() {
+        return value1;
+    }
+
+    EEnum(String value) {
+        value1 = value;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractEnum/valueNameConflict/after/Test.java b/java/java-tests/testData/refactoring/extractEnum/valueNameConflict/after/Test.java
new file mode 100644
index 0000000..96d83e0c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractEnum/valueNameConflict/after/Test.java
@@ -0,0 +1,2 @@
+class Test {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractEnum/valueNameConflict/before/Test.java b/java/java-tests/testData/refactoring/extractEnum/valueNameConflict/before/Test.java
new file mode 100644
index 0000000..9b98fc8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractEnum/valueNameConflict/before/Test.java
@@ -0,0 +1,4 @@
+class Test {
+  public static final String FOO = "foo";
+  public int value = 0;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/AnonInner.java b/java/java-tests/testData/refactoring/extractMethod/AnonInner.java
new file mode 100644
index 0000000..34a3246
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/AnonInner.java
@@ -0,0 +1,21 @@
+
+import javax.swing.*;
+import java.awt.event.ActionEvent;
+
+public class ExtractMethods { }
+abstract class MyButton
+        extends JButton
+        {
+    protected MyButton( String text ) {
+        super( text );
+    }
+}
+class Foo {
+    private JButton createOKButton() {
+        return new MyButton( "OK" ) {
+            public void actionPerformed( ActionEvent e ) {
+            <selection>    setVisible( false ); </selection>
+            }
+        };
+    }
+}
diff --git a/java/java-tests/testData/refactoring/extractMethod/AnonInner_after.java b/java/java-tests/testData/refactoring/extractMethod/AnonInner_after.java
new file mode 100644
index 0000000..c63341f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/AnonInner_after.java
@@ -0,0 +1,25 @@
+
+import javax.swing.*;
+import java.awt.event.ActionEvent;
+
+public class ExtractMethods { }
+abstract class MyButton
+        extends JButton
+        {
+    protected MyButton( String text ) {
+        super( text );
+    }
+}
+class Foo {
+    private JButton createOKButton() {
+        return new MyButton( "OK" ) {
+            public void actionPerformed( ActionEvent e ) {
+                newMethod();
+            }
+
+            private void newMethod() {
+                setVisible( false );
+            }
+        };
+    }
+}
diff --git a/java/java-tests/testData/refactoring/extractMethod/ArrayAccess.java b/java/java-tests/testData/refactoring/extractMethod/ArrayAccess.java
new file mode 100644
index 0000000..7d1fd88
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ArrayAccess.java
@@ -0,0 +1,8 @@
+class Test {
+  void foo(String[] ss) {
+     for(int i = 0; i < ss.length; i++) {
+       <selection>System.out.println(ss[i]);
+       System.out.println(ss[i] + ss[i]);</selection>
+     }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ArrayAccess1.java b/java/java-tests/testData/refactoring/extractMethod/ArrayAccess1.java
new file mode 100644
index 0000000..7ec5033
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ArrayAccess1.java
@@ -0,0 +1,10 @@
+class Test {
+  void foo(String[] ss, String[] bb) {
+     for(int i = 0; i < ss.length; i++) {
+       <selection>
+       System.out.println(ss[i]);
+       System.out.println(bb[i]);
+       </selection>
+     }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ArrayAccess1_after.java b/java/java-tests/testData/refactoring/extractMethod/ArrayAccess1_after.java
new file mode 100644
index 0000000..1203bc9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ArrayAccess1_after.java
@@ -0,0 +1,14 @@
+class Test {
+  void foo(String[] ss, String[] bb) {
+     for(int i = 0; i < ss.length; i++) {
+
+         newMethod(ss[i], bb[i]);
+       
+     }
+  }
+
+    private void newMethod(String s, String x) {
+        System.out.println(s);
+        System.out.println(x);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ArrayAccessWithDuplicates.java b/java/java-tests/testData/refactoring/extractMethod/ArrayAccessWithDuplicates.java
new file mode 100644
index 0000000..85248fb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ArrayAccessWithDuplicates.java
@@ -0,0 +1,6 @@
+class Test {
+  void foo(String[] ss) {
+    <selection>System.out.println(ss[0]);</selection>
+    System.out.println(ss[0]);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ArrayAccessWithDuplicates_after.java b/java/java-tests/testData/refactoring/extractMethod/ArrayAccessWithDuplicates_after.java
new file mode 100644
index 0000000..64496be
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ArrayAccessWithDuplicates_after.java
@@ -0,0 +1,10 @@
+class Test {
+  void foo(String[] ss) {
+      newMethod(ss[0]);
+      newMethod(ss[0]);
+  }
+
+    private void newMethod(String s) {
+        System.out.println(s);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ArrayAccessWithLocalIndex.java b/java/java-tests/testData/refactoring/extractMethod/ArrayAccessWithLocalIndex.java
new file mode 100644
index 0000000..cb850bd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ArrayAccessWithLocalIndex.java
@@ -0,0 +1,9 @@
+class Test {
+  void foo(String[] ss) {
+    Integer[] levels = new Integer[]{Integer.valueOf(1), Integer.valueOf(2), Integer.valueOf(3),};
+    Integer[] nextWinNumber = new Integer[6];
+    <selection>for (Integer level : levels) {
+      Integer nextWinNum = nextWinNumber[level - 1];
+    }</selection>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ArrayAccessWithLocalIndex_after.java b/java/java-tests/testData/refactoring/extractMethod/ArrayAccessWithLocalIndex_after.java
new file mode 100644
index 0000000..497400c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ArrayAccessWithLocalIndex_after.java
@@ -0,0 +1,13 @@
+class Test {
+  void foo(String[] ss) {
+    Integer[] levels = new Integer[]{Integer.valueOf(1), Integer.valueOf(2), Integer.valueOf(3),};
+    Integer[] nextWinNumber = new Integer[6];
+      newMethod(levels, nextWinNumber);
+  }
+
+    private void newMethod(Integer[] levels, Integer[] nextWinNumber) {
+        for (Integer level : levels) {
+          Integer nextWinNum = nextWinNumber[level - 1];
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ArrayAccess_after.java b/java/java-tests/testData/refactoring/extractMethod/ArrayAccess_after.java
new file mode 100644
index 0000000..d8b4d16
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ArrayAccess_after.java
@@ -0,0 +1,12 @@
+class Test {
+  void foo(String[] ss) {
+     for(int i = 0; i < ss.length; i++) {
+         newMethod(ss[i]);
+     }
+  }
+
+    private void newMethod(String s) {
+        System.out.println(s);
+        System.out.println(s + s);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/BooleanExpression.java b/java/java-tests/testData/refactoring/extractMethod/BooleanExpression.java
new file mode 100644
index 0000000..e039152
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/BooleanExpression.java
@@ -0,0 +1,5 @@
+class Test {
+    void method(int i) {
+        boolean isDirty = <selection>i == 0</selection> || otherTests();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/BooleanExpression_after.java b/java/java-tests/testData/refactoring/extractMethod/BooleanExpression_after.java
new file mode 100644
index 0000000..859d12c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/BooleanExpression_after.java
@@ -0,0 +1,9 @@
+class Test {
+    void method(int i) {
+        boolean isDirty = newMethod(i) || otherTests();
+    }
+
+    private boolean newMethod(int i) {
+        return i == 0;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/Cast4ParamGeneration.java b/java/java-tests/testData/refactoring/extractMethod/Cast4ParamGeneration.java
new file mode 100644
index 0000000..a36c65d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/Cast4ParamGeneration.java
@@ -0,0 +1,11 @@
+public class Test {
+  void foo(Object o) {
+    if (o instanceof A) {
+      <selection>((A)o).bar();</selection>
+    }
+  }
+}
+
+class A {
+  void bar(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/Cast4ParamGeneration_after.java b/java/java-tests/testData/refactoring/extractMethod/Cast4ParamGeneration_after.java
new file mode 100644
index 0000000..4f8e979
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/Cast4ParamGeneration_after.java
@@ -0,0 +1,15 @@
+public class Test {
+  void foo(Object o) {
+    if (o instanceof A) {
+        newMethod((A) o);
+    }
+  }
+
+    private void newMethod(A o) {
+        ((A)o).bar();
+    }
+}
+
+class A {
+  void bar(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/CastWhenDuplicateReplacement.java b/java/java-tests/testData/refactoring/extractMethod/CastWhenDuplicateReplacement.java
new file mode 100644
index 0000000..68a91fd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/CastWhenDuplicateReplacement.java
@@ -0,0 +1,7 @@
+class Test {
+
+    void foo(Object x) {
+        if (x instanceof String) x = ((String)x).substring(1);
+        if (x instanceof String) x = <selection>((String)x).substring(1)</selection>;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/CastWhenDuplicateReplacement_after.java b/java/java-tests/testData/refactoring/extractMethod/CastWhenDuplicateReplacement_after.java
new file mode 100644
index 0000000..e0a14ee4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/CastWhenDuplicateReplacement_after.java
@@ -0,0 +1,11 @@
+class Test {
+
+    void foo(Object x) {
+        if (x instanceof String) x = newMethod((String) x);
+        if (x instanceof String) x = newMethod((String) x);
+    }
+
+    private String newMethod(String x) {
+        return ((String)x).substring(1);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ChainedConstructor.java b/java/java-tests/testData/refactoring/extractMethod/ChainedConstructor.java
new file mode 100644
index 0000000..c69c2f6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ChainedConstructor.java
@@ -0,0 +1,9 @@
+class A {
+    private int i;
+    private int j;
+
+    public A(int i, int j) {
+        <selection>this.i = i;</selection>
+        this.j = j;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ChainedConstructorDuplicates.java b/java/java-tests/testData/refactoring/extractMethod/ChainedConstructorDuplicates.java
new file mode 100644
index 0000000..30ccf5a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ChainedConstructorDuplicates.java
@@ -0,0 +1,15 @@
+class A {
+    private int i;
+    private int j;
+    private int s;
+
+    public A(int i, int j) {
+        <selection>this.i = i;</selection>
+        this.j = j;
+    }
+
+    public A(int i, String s) {
+        this.i = i;
+        this.s = s;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ChainedConstructorDuplicates_after.java b/java/java-tests/testData/refactoring/extractMethod/ChainedConstructorDuplicates_after.java
new file mode 100644
index 0000000..70f9fa1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ChainedConstructorDuplicates_after.java
@@ -0,0 +1,19 @@
+class A {
+    private int i;
+    private int j;
+    private int s;
+
+    public A(int i, int j) {
+        this(i);
+        this.j = j;
+    }
+
+    private A(int i) {
+        this.i = i;
+    }
+
+    public A(int i, String s) {
+        this(i);
+        this.s = s;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ChainedConstructorInvalidDuplicates.java b/java/java-tests/testData/refactoring/extractMethod/ChainedConstructorInvalidDuplicates.java
new file mode 100644
index 0000000..696090f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ChainedConstructorInvalidDuplicates.java
@@ -0,0 +1,15 @@
+class A {
+    private int i;
+    private int j;
+    private int s;
+
+    public A(int i, int j) {
+        <selection>this.i = i;</selection>
+        this.j = j;
+    }
+
+    public A(int i, String s) {
+        this.s = s;
+        this.i = i;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ChainedConstructorInvalidDuplicates_after.java b/java/java-tests/testData/refactoring/extractMethod/ChainedConstructorInvalidDuplicates_after.java
new file mode 100644
index 0000000..53b78ec
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ChainedConstructorInvalidDuplicates_after.java
@@ -0,0 +1,19 @@
+class A {
+    private int i;
+    private int j;
+    private int s;
+
+    public A(int i, int j) {
+        this(i);
+        this.j = j;
+    }
+
+    private A(int i) {
+        this.i = i;
+    }
+
+    public A(int i, String s) {
+        this.s = s;
+        this.i = i;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ChainedConstructor_after.java b/java/java-tests/testData/refactoring/extractMethod/ChainedConstructor_after.java
new file mode 100644
index 0000000..bb45e0b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ChainedConstructor_after.java
@@ -0,0 +1,13 @@
+class A {
+    private int i;
+    private int j;
+
+    public A(int i, int j) {
+        this(i);
+        this.j = j;
+    }
+
+    private A(int i) {
+        this.i = i;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/CheckQualifierMapping.java b/java/java-tests/testData/refactoring/extractMethod/CheckQualifierMapping.java
new file mode 100644
index 0000000..46ea8a3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/CheckQualifierMapping.java
@@ -0,0 +1,14 @@
+import java.util.*;
+class Test {
+
+  public void method() {
+    String a = "A";
+    <selection>ArrayList<String> listA = new ArrayList<String>();
+    listA.add(a);</selection>
+
+    ArrayList<String> listB = new ArrayList<String>();
+    ArrayList<String> listC = new ArrayList<String>();
+    listB.add("B");
+    listC.add("C");
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/CheckQualifierMapping_after.java b/java/java-tests/testData/refactoring/extractMethod/CheckQualifierMapping_after.java
new file mode 100644
index 0000000..182605b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/CheckQualifierMapping_after.java
@@ -0,0 +1,18 @@
+import java.util.*;
+class Test {
+
+  public void method() {
+    String a = "A";
+      newMethod(a);
+
+    ArrayList<String> listB = new ArrayList<String>();
+    ArrayList<String> listC = new ArrayList<String>();
+    listB.add("B");
+    listC.add("C");
+  }
+
+    private void newMethod(String a) {
+        ArrayList<String> listA = new ArrayList<String>();
+        listA.add(a);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/CodeDuplicates.java b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicates.java
new file mode 100644
index 0000000..291e623
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicates.java
@@ -0,0 +1,8 @@
+class C {
+    {
+        int i;
+
+        <selection>System.out.println(i);</selection>
+        System.out.println(128);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/CodeDuplicates2.java b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicates2.java
new file mode 100644
index 0000000..0ac81a2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicates2.java
@@ -0,0 +1,15 @@
+class C {
+    {
+        Object[] array;
+
+        <selection>for (int i = 0; i < array.length; i++) {
+            System.out.println(array[i]);
+        }</selection>
+
+
+        Object[] array1;
+        for (int i = 0; i < array1.length; i++) {
+            System.out.println(array[i]);
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/CodeDuplicates2_after.java b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicates2_after.java
new file mode 100644
index 0000000..e4a1b39
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicates2_after.java
@@ -0,0 +1,19 @@
+class C {
+    {
+        Object[] array;
+
+        newMethod(array);
+
+
+        Object[] array1;
+        for (int i = 0; i < array1.length; i++) {
+            System.out.println(array[i]);
+        }
+    }
+
+    private void newMethod(Object[] array) {
+        for (int i = 0; i < array.length; i++) {
+            System.out.println(array[i]);
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/CodeDuplicates3.java b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicates3.java
new file mode 100644
index 0000000..70538c6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicates3.java
@@ -0,0 +1,15 @@
+class C {
+    {
+        Object[] array;
+
+        <selection>for (int i = 0; i < array.length; i++) {
+            System.out.println(array[i]);
+        }</selection>
+
+
+        Object[] array1;
+        for (int i = 0; i < array1.length; i++) {
+            System.out.println(array1[i]);
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/CodeDuplicates3_after.java b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicates3_after.java
new file mode 100644
index 0000000..f2b59d1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicates3_after.java
@@ -0,0 +1,17 @@
+class C {
+    {
+        Object[] array;
+
+        newMethod(array);
+
+
+        Object[] array1;
+        newMethod(array1);
+    }
+
+    private void newMethod(Object[] array) {
+        for (int i = 0; i < array.length; i++) {
+            System.out.println(array[i]);
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/CodeDuplicates4.java b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicates4.java
new file mode 100644
index 0000000..f22baf6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicates4.java
@@ -0,0 +1,15 @@
+class C {
+    {
+        Object[] array;
+
+        <selection>for (int i = 0; i < array.length; i++) {
+            System.out.println(array[i]);
+        }</selection>
+
+
+        Object[] array1;
+        for (int j = 0; j < array1.length; j++) {
+            System.out.println(array1[j]);
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/CodeDuplicates4_after.java b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicates4_after.java
new file mode 100644
index 0000000..f2b59d1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicates4_after.java
@@ -0,0 +1,17 @@
+class C {
+    {
+        Object[] array;
+
+        newMethod(array);
+
+
+        Object[] array1;
+        newMethod(array1);
+    }
+
+    private void newMethod(Object[] array) {
+        for (int i = 0; i < array.length; i++) {
+            System.out.println(array[i]);
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/CodeDuplicates5.java b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicates5.java
new file mode 100644
index 0000000..05197ad
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicates5.java
@@ -0,0 +1,30 @@
+class D {}
+class C extends D {
+    int myField = 10;
+    int myOtherField = 10;
+
+    {
+        int i = 5;
+        <selection>myField = i;
+        myOtherField = i;</selection>
+
+        C c = new C();
+
+        c.myField = 12;
+        c.myOtherField = 12;
+
+        C c1 = new C();
+        c1.myField = 12;
+        myOtherField = 12;
+
+
+        //not a duplicate: method is not visible with qualifer class
+        D d1 = new D();
+        d1.myField = 12;
+        d1.myOtherField = 12;
+
+
+        c.myField = 15;
+        c1.myOtherField = 15;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/CodeDuplicates5_after.java b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicates5_after.java
new file mode 100644
index 0000000..f603c3d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicates5_after.java
@@ -0,0 +1,33 @@
+class D {}
+class C extends D {
+    int myField = 10;
+    int myOtherField = 10;
+
+    {
+        int i = 5;
+        newMethod(i);
+
+        C c = new C();
+
+        c.newMethod(12);
+
+        C c1 = new C();
+        c1.myField = 12;
+        myOtherField = 12;
+
+
+        //not a duplicate: method is not visible with qualifer class
+        D d1 = new D();
+        d1.myField = 12;
+        d1.myOtherField = 12;
+
+
+        c.myField = 15;
+        c1.myOtherField = 15;
+    }
+
+    private void newMethod(int i) {
+        myField = i;
+        myOtherField = i;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesVarargsShouldNotChangeReturnType.java b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesVarargsShouldNotChangeReturnType.java
new file mode 100644
index 0000000..082875b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesVarargsShouldNotChangeReturnType.java
@@ -0,0 +1,12 @@
+class Test {
+    void foo() {
+        bar(<selection>String.valueOf(1)</selection>);
+        baz(String.valueOf(1));
+    }
+
+    private void bar(String s) {
+    }
+
+    private void baz(String... s) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesVarargsShouldNotChangeReturnType_after.java b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesVarargsShouldNotChangeReturnType_after.java
new file mode 100644
index 0000000..97652c7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesVarargsShouldNotChangeReturnType_after.java
@@ -0,0 +1,16 @@
+class Test {
+    void foo() {
+        bar(newMethod());
+        baz(newMethod());
+    }
+
+    private String newMethod() {
+        return String.valueOf(1);
+    }
+
+    private void bar(String s) {
+    }
+
+    private void baz(String... s) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithComments.java b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithComments.java
new file mode 100644
index 0000000..187ead9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithComments.java
@@ -0,0 +1,19 @@
+class Test {
+    private List<Object> list1 = new ArrayList<Object>();
+
+    private List<Object> list2 = new ArrayList<Object>();
+
+    public void method1()
+    {
+        list1.add(null);
+        // add to list2
+        list2.add(true);
+    }
+
+    public void method2()
+    {
+        <selection>list1.add(null);
+        // add to list2
+        list2.add(true);</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithComments_after.java b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithComments_after.java
new file mode 100644
index 0000000..df26164
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithComments_after.java
@@ -0,0 +1,21 @@
+class Test {
+    private List<Object> list1 = new ArrayList<Object>();
+
+    private List<Object> list2 = new ArrayList<Object>();
+
+    public void method1()
+    {
+        newMethod();
+    }
+
+    public void method2()
+    {
+        newMethod();
+    }
+
+    private void newMethod() {
+        list1.add(null);
+        // add to list2
+        list2.add(true);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithContinue.java b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithContinue.java
new file mode 100644
index 0000000..372ad87
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithContinue.java
@@ -0,0 +1,14 @@
+class C {
+    void foo() {
+        for(int i = 0; i < 10; i++){
+        <selection>if (i < 10){ continue;}</selection>
+         System.out.println("");
+        }
+    }
+
+    {
+        for(int i = 0; i < 10; i++){
+          if (i < 10){ continue;}
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithContinueNoReturn.java b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithContinueNoReturn.java
new file mode 100644
index 0000000..96c3399
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithContinueNoReturn.java
@@ -0,0 +1,13 @@
+class C {
+    void foo() {
+        for(int i = 0; i < 10; i++){
+        <selection>if (i < 10){ continue;}</selection>
+        }
+    }
+
+    {
+        for(int i = 0; i < 10; i++){
+          if (i < 10){ continue;}
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithContinueNoReturn_after.java b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithContinueNoReturn_after.java
new file mode 100644
index 0000000..2450d94
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithContinueNoReturn_after.java
@@ -0,0 +1,19 @@
+class C {
+    void foo() {
+        for(int i = 0; i < 10; i++){
+            newMethod(i);
+        }
+    }
+
+    private void newMethod(int i) {
+        if (i < 10){
+            return;
+        }
+    }
+
+    {
+        for(int i = 0; i < 10; i++){
+            newMethod(i);
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithContinue_after.java b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithContinue_after.java
new file mode 100644
index 0000000..5c7fc35
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithContinue_after.java
@@ -0,0 +1,21 @@
+class C {
+    void foo() {
+        for(int i = 0; i < 10; i++){
+            if (newMethod(i)) continue;
+            System.out.println("");
+        }
+    }
+
+    private boolean newMethod(int i) {
+        if (i < 10){
+            return true;
+        }
+        return false;
+    }
+
+    {
+        for(int i = 0; i < 10; i++){
+            if (newMethod(i)) continue;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithMultExitPoints.java b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithMultExitPoints.java
new file mode 100644
index 0000000..2111f49
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithMultExitPoints.java
@@ -0,0 +1,7 @@
+class A {
+   int foo (Object o) {
+     <selection>if (o == null) return 0;</selection>  
+     if (o == null) return 0;
+     return 1;
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithMultExitPoints_after.java b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithMultExitPoints_after.java
new file mode 100644
index 0000000..1678a90
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithMultExitPoints_after.java
@@ -0,0 +1,12 @@
+class A {
+   int foo (Object o) {
+       if (newMethod(o)) return 0;
+       if (newMethod(o)) return 0;
+       return 1;
+   }
+
+    private boolean newMethod(Object o) {
+        if (o == null) return true;
+        return false;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithOutputValue.java b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithOutputValue.java
new file mode 100644
index 0000000..74a2dfa
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithOutputValue.java
@@ -0,0 +1,16 @@
+import java.util.*;
+
+class C {
+    {
+        Object[] array;
+
+        <selection>List l1 = new ArrayList(Arrays.asList(array));</selection>
+
+        List l2 = new ArrayList(Arrays.asList(getObjects()));
+
+        System.out.println("l1 = " + l1 + ", l2 = " + l2);
+    }
+
+    String[] getObjects() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithOutputValue1.java b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithOutputValue1.java
new file mode 100644
index 0000000..549aafd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithOutputValue1.java
@@ -0,0 +1,19 @@
+import java.util.*;
+
+class C {
+    {
+        Object[] array;
+
+        <selection>List l1 = null;
+        l1 = new ArrayList(Arrays.asList(array));</selection>
+
+        List l2 = null;
+        l2 = new ArrayList(Arrays.asList(getObjects()));
+
+        System.out.println("l1 = " + l1 + ", l2 = " + l2);
+    }
+
+
+    String[] getObjects() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithOutputValue1_after.java b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithOutputValue1_after.java
new file mode 100644
index 0000000..81ebc680
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithOutputValue1_after.java
@@ -0,0 +1,23 @@
+import java.util.*;
+
+class C {
+    {
+        Object[] array;
+
+        List l1 = newMethod(array);
+
+        List l2 = newMethod(getObjects());
+
+        System.out.println("l1 = " + l1 + ", l2 = " + l2);
+    }
+
+    private List newMethod(Object[] array) {
+        List l1 = null;
+        l1 = new ArrayList(Arrays.asList(array));
+        return l1;
+    }
+
+
+    String[] getObjects() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithOutputValue_after.java b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithOutputValue_after.java
new file mode 100644
index 0000000..9b0dca1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithOutputValue_after.java
@@ -0,0 +1,20 @@
+import java.util.*;
+
+class C {
+    {
+        Object[] array;
+
+        List l1 = newMethod(array);
+
+        List l2 = newMethod(getObjects());
+
+        System.out.println("l1 = " + l1 + ", l2 = " + l2);
+    }
+
+    private List newMethod(Object[] array) {
+        return new ArrayList(Arrays.asList(array));
+    }
+
+    String[] getObjects() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithReturn.java b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithReturn.java
new file mode 100644
index 0000000..451960d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithReturn.java
@@ -0,0 +1,13 @@
+class C {
+    String method(Object o) {
+        System.out.println(o);
+        <selection>Integer i = new Integer(o.hashCode());
+        return i.toString();</selection>
+    }
+
+    {
+        String k;
+        Integer j = new Integer(Boolean.TRUE.hashCode());
+        k = j.toString();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithReturn2.java b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithReturn2.java
new file mode 100644
index 0000000..81b9917
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithReturn2.java
@@ -0,0 +1,12 @@
+class C {
+    String method(Object o) {
+        System.out.println(o);
+        <selection>Integer i = new Integer(o.hashCode());
+        return i.toString();</selection>
+    }
+
+    {
+        Integer j = new Integer(Boolean.TRUE.hashCode());
+        String k = j.toString();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithReturn2_after.java b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithReturn2_after.java
new file mode 100644
index 0000000..7ccc238
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithReturn2_after.java
@@ -0,0 +1,15 @@
+class C {
+    String method(Object o) {
+        System.out.println(o);
+        return newMethod(o);
+    }
+
+    private String newMethod(Object o) {
+        Integer i = new Integer(o.hashCode());
+        return i.toString();
+    }
+
+    {
+        String k = newMethod(Boolean.TRUE);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithReturnInAnonymous.java b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithReturnInAnonymous.java
new file mode 100644
index 0000000..6881382
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithReturnInAnonymous.java
@@ -0,0 +1,15 @@
+class Test10 {
+  void test() {
+    <selection>new Object() {
+      int get() {
+        return 0;
+      }
+    };</selection>
+
+    new Object() {
+      int get() {
+        return 0;
+      }
+    };
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithReturnInAnonymous_after.java b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithReturnInAnonymous_after.java
new file mode 100644
index 0000000..e683b7af
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithReturnInAnonymous_after.java
@@ -0,0 +1,15 @@
+class Test10 {
+  void test() {
+      newMethod();
+
+      newMethod();
+  }
+
+    private void newMethod() {
+        new Object() {
+          int get() {
+            return 0;
+          }
+        };
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithReturn_after.java b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithReturn_after.java
new file mode 100644
index 0000000..9901f3b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithReturn_after.java
@@ -0,0 +1,16 @@
+class C {
+    String method(Object o) {
+        System.out.println(o);
+        return newMethod(o);
+    }
+
+    private String newMethod(Object o) {
+        Integer i = new Integer(o.hashCode());
+        return i.toString();
+    }
+
+    {
+        String k;
+        k = newMethod(Boolean.TRUE);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithStaticInitializer.java b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithStaticInitializer.java
new file mode 100644
index 0000000..8fba585
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithStaticInitializer.java
@@ -0,0 +1,11 @@
+class C {
+   static C c;
+   static {
+        java.util.ArrayList<C> l = null;
+        l.add(c);
+    }
+
+    void foo() {
+      System.out.println(<selection>c</selection>);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithStaticInitializer_after.java b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithStaticInitializer_after.java
new file mode 100644
index 0000000..d7fcf48
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicatesWithStaticInitializer_after.java
@@ -0,0 +1,15 @@
+class C {
+   static C c;
+   static {
+        java.util.ArrayList<C> l = null;
+        l.add(newMethod());
+    }
+
+    void foo() {
+      System.out.println(newMethod());
+    }
+
+    private static C newMethod() {
+        return c;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/CodeDuplicates_after.java b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicates_after.java
new file mode 100644
index 0000000..e6b481d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/CodeDuplicates_after.java
@@ -0,0 +1,12 @@
+class C {
+    {
+        int i;
+
+        newMethod(i);
+        newMethod(128);
+    }
+
+    private void newMethod(int i) {
+        System.out.println(i);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ComplexTypeParams.java b/java/java-tests/testData/refactoring/extractMethod/ComplexTypeParams.java
new file mode 100644
index 0000000..c42f226
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ComplexTypeParams.java
@@ -0,0 +1,9 @@
+import java.util.List;
+
+public class Test
+{
+   <T> void foo(List<? extends List<T>> tr){
+      <selection> tr.add(null);</selection>
+   }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ComplexTypeParams_after.java b/java/java-tests/testData/refactoring/extractMethod/ComplexTypeParams_after.java
new file mode 100644
index 0000000..9253419
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ComplexTypeParams_after.java
@@ -0,0 +1,13 @@
+import java.util.List;
+
+public class Test
+{
+   <T> void foo(List<? extends List<T>> tr){
+       newMethod(tr);
+   }
+
+    private <T> void newMethod(List<? extends List<T>> tr) {
+        tr.add(null);
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ConflictingAnonymous.java b/java/java-tests/testData/refactoring/extractMethod/ConflictingAnonymous.java
new file mode 100644
index 0000000..9b9f4e2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ConflictingAnonymous.java
@@ -0,0 +1,10 @@
+public class Test {
+  void foo() {
+    new A() {
+      void fe() {<selection>System.out.println("");</selection>}
+    }
+  }
+}
+class A {
+  void newMethod(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ConflictingAnonymous_after.java b/java/java-tests/testData/refactoring/extractMethod/ConflictingAnonymous_after.java
new file mode 100644
index 0000000..4b20600
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ConflictingAnonymous_after.java
@@ -0,0 +1,16 @@
+public class Test {
+  void foo() {
+    new A() {
+      void fe() {
+          Test.this.newMethod();
+      }
+    }
+  }
+
+    private void newMethod() {
+        System.out.println("");
+    }
+}
+class A {
+  void newMethod(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ConstantConditionsAffectingControlFlow.java b/java/java-tests/testData/refactoring/extractMethod/ConstantConditionsAffectingControlFlow.java
new file mode 100644
index 0000000..f00e84b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ConstantConditionsAffectingControlFlow.java
@@ -0,0 +1,9 @@
+public /*abstract*/ class WillWorkTest {
+    int opera() {
+        int i = 0;
+        <selection>
+        int k;
+        if (true) k = i;
+        return k;</selection>
+    }
+}
diff --git a/java/java-tests/testData/refactoring/extractMethod/ConstantConditionsAffectingControlFlow1.java b/java/java-tests/testData/refactoring/extractMethod/ConstantConditionsAffectingControlFlow1.java
new file mode 100644
index 0000000..f03fb56
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ConstantConditionsAffectingControlFlow1.java
@@ -0,0 +1,13 @@
+class Test {
+
+    public void test(boolean b) {
+        int a = 1;
+        if (true) {
+            System.out.println(a);
+        } else {
+            <selection>System.out.println(a);</selection>
+        }
+    }
+
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ConstantConditionsAffectingControlFlow1_after.java b/java/java-tests/testData/refactoring/extractMethod/ConstantConditionsAffectingControlFlow1_after.java
new file mode 100644
index 0000000..5d57d125
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ConstantConditionsAffectingControlFlow1_after.java
@@ -0,0 +1,17 @@
+class Test {
+
+    public void test(boolean b) {
+        int a = 1;
+        if (true) {
+            newMethod(a);
+        } else {
+            newMethod(a);
+        }
+    }
+
+    private void newMethod(int a) {
+        System.out.println(a);
+    }
+
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ConstantConditionsAffectingControlFlow_after.java b/java/java-tests/testData/refactoring/extractMethod/ConstantConditionsAffectingControlFlow_after.java
new file mode 100644
index 0000000..2876225
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ConstantConditionsAffectingControlFlow_after.java
@@ -0,0 +1,13 @@
+public /*abstract*/ class WillWorkTest {
+    int opera() {
+        int i = 0;
+
+        return newMethod(i);
+    }
+
+    private int newMethod(int i) {
+        int k;
+        if (true) k = i;
+        return k;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/extractMethod/ContinueInside.java b/java/java-tests/testData/refactoring/extractMethod/ContinueInside.java
new file mode 100644
index 0000000..892e22d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ContinueInside.java
@@ -0,0 +1,12 @@
+class Test {
+  String foo(String[] args) {
+    <selection>
+    for(String arg : args) {
+      if (arg == null) continue;
+      System.out.println(arg);
+    }
+    if (args.length == 0) return null;
+    </selection>
+    return null;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/extractMethod/ContinueInside_after.java b/java/java-tests/testData/refactoring/extractMethod/ContinueInside_after.java
new file mode 100644
index 0000000..a8e17f7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ContinueInside_after.java
@@ -0,0 +1,17 @@
+class Test {
+  String foo(String[] args) {
+
+      if (newMethod(args)) return null;
+
+      return null;
+  }
+
+    private boolean newMethod(String[] args) {
+        for(String arg : args) {
+          if (arg == null) continue;
+          System.out.println(arg);
+        }
+        if (args.length == 0) return true;
+        return false;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/extractMethod/DisabledParam.java b/java/java-tests/testData/refactoring/extractMethod/DisabledParam.java
new file mode 100644
index 0000000..a64da756
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/DisabledParam.java
@@ -0,0 +1,22 @@
+/*
+ * 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 Fest {
+  public static void main(String[] args) {
+    String f = "";
+    String bar = ""
+    <selection> System.out.println(f + ";" + bar);</selection>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/DisabledParam_after.java b/java/java-tests/testData/refactoring/extractMethod/DisabledParam_after.java
new file mode 100644
index 0000000..c83eb27
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/DisabledParam_after.java
@@ -0,0 +1,27 @@
+/*
+ * 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 Fest {
+  public static void main(String[] args) {
+    String f = "";
+    String bar = ""
+      newMethod(bar);
+  }
+
+    private static void newMethod(String bar) {
+        String f = ;
+        System.out.println(f + ";" + bar);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ExitPoints1.java b/java/java-tests/testData/refactoring/extractMethod/ExitPoints1.java
new file mode 100644
index 0000000..c6436dc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ExitPoints1.java
@@ -0,0 +1,9 @@
+class Test{
+  public void foo() {
+    if (cond1){
+      <selection>if (cond2) return;</selection>
+    }
+    else if (cond3){
+    }
+  }
+}
diff --git a/java/java-tests/testData/refactoring/extractMethod/ExitPoints2.java b/java/java-tests/testData/refactoring/extractMethod/ExitPoints2.java
new file mode 100644
index 0000000..d291d24
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ExitPoints2.java
@@ -0,0 +1,10 @@
+class Test{
+  public void foo() {
+    if (cond1){
+      <selection>if (cond2) return;</selection>
+    }
+    else if (cond3){
+    }
+    x();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/extractMethod/ExitPoints2_after.java b/java/java-tests/testData/refactoring/extractMethod/ExitPoints2_after.java
new file mode 100644
index 0000000..196bcde
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ExitPoints2_after.java
@@ -0,0 +1,15 @@
+class Test{
+  public void foo() {
+    if (cond1){
+        if (newMethod()) return;
+    }
+    else if (cond3){
+    }
+    x();
+  }
+
+    private boolean newMethod() {
+        if (cond2) return true;
+        return false;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/extractMethod/ExitPoints3.java b/java/java-tests/testData/refactoring/extractMethod/ExitPoints3.java
new file mode 100644
index 0000000..acc314b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ExitPoints3.java
@@ -0,0 +1,10 @@
+class Test{
+  void foo() {
+    if (cond1){      
+      <selection>if (cond2) return;
+      x();</selection>
+    }
+    else if (cond3){
+    }
+  }
+}
diff --git a/java/java-tests/testData/refactoring/extractMethod/ExitPoints4.java b/java/java-tests/testData/refactoring/extractMethod/ExitPoints4.java
new file mode 100644
index 0000000..6c6c395
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ExitPoints4.java
@@ -0,0 +1,12 @@
+class Test {
+    int method() {
+         <selection>try {
+             if(cond1) return 0;
+             else if(cond2) return 1;
+             System.out.println("Text");
+         } finally {           
+             doSomething();
+         }</selection>
+         return 12;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ExitPoints5.java b/java/java-tests/testData/refactoring/extractMethod/ExitPoints5.java
new file mode 100644
index 0000000..954782b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ExitPoints5.java
@@ -0,0 +1,12 @@
+class Test {
+    int method() {
+         <selection>try {
+             if(cond1) return 0;
+             else if(cond2) return 1;
+             return 27;
+         } finally {           
+             doSomething();
+         }</selection>
+         return 12;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ExitPoints5_after.java b/java/java-tests/testData/refactoring/extractMethod/ExitPoints5_after.java
new file mode 100644
index 0000000..217c29d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ExitPoints5_after.java
@@ -0,0 +1,16 @@
+class Test {
+    int method() {
+        return newMethod();
+        return 12;
+    }
+
+    private int newMethod() {
+        try {
+            if(cond1) return 0;
+            else if(cond2) return 1;
+            return 27;
+        } finally {           
+            doSomething();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ExitPoints6.java b/java/java-tests/testData/refactoring/extractMethod/ExitPoints6.java
new file mode 100644
index 0000000..b0887cb7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ExitPoints6.java
@@ -0,0 +1,10 @@
+// multiple output values: one for modelling control flow + output value
+class K {
+    int f(Object o) {
+        <selection>if (o == null) return 0;
+        o = new Object();</selection>
+        Object oo = o;
+
+        return 1;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/extractMethod/ExitPoints7.java b/java/java-tests/testData/refactoring/extractMethod/ExitPoints7.java
new file mode 100644
index 0000000..c4a8975
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ExitPoints7.java
@@ -0,0 +1,27 @@
+class Foo {
+   public Object createBean(Object parent) {
+    try {
+      <selection>if (parent != null) {
+        try {
+        }
+        catch (Exception e) {
+          return null;
+        }
+      }
+
+
+      Object tag = null;</selection>
+
+      tag = foo(tag);
+    }
+    catch (Exception e) {
+      throw new RuntimeException(e);
+    }
+
+    return null;
+  }
+
+  private Object foo(final Object tag) {
+    return null;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ExitPoints8.java b/java/java-tests/testData/refactoring/extractMethod/ExitPoints8.java
new file mode 100644
index 0000000..cdee0bf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ExitPoints8.java
@@ -0,0 +1,10 @@
+class C {
+    public Object m() {
+        <selection>for (Object o : new ArrayList<Object>()) {
+            if (o != null) {
+                return o;
+            }
+        }</selection>
+        return null;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ExitPoints9.java b/java/java-tests/testData/refactoring/extractMethod/ExitPoints9.java
new file mode 100644
index 0000000..e4558a4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ExitPoints9.java
@@ -0,0 +1,25 @@
+class Result {
+    private String _message;
+
+    public Result(String _message) {
+        this._message = _message;
+    }
+}
+
+class Main {
+    public static Result doIt(String name) {
+        Result result;
+
+        <selection>if (name == null) {
+            result = new Result("Name is null");
+            return result;
+        }
+        if (name.length() == 0) {
+            result = new Result("Name is empty");
+            return result;
+        }</selection>
+
+        result = new Result("Name is " + name);
+        return result;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ExitPointsInsideLoop.java b/java/java-tests/testData/refactoring/extractMethod/ExitPointsInsideLoop.java
new file mode 100644
index 0000000..938c66d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ExitPointsInsideLoop.java
@@ -0,0 +1,9 @@
+class s {
+    void f(boolean b) {
+        for (;;) {
+            <selection>if (b) {
+                break;
+            }</selection>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ExpressionDuplicates.java b/java/java-tests/testData/refactoring/extractMethod/ExpressionDuplicates.java
new file mode 100644
index 0000000..fe163dc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ExpressionDuplicates.java
@@ -0,0 +1,10 @@
+import java.util.*;
+
+class C {
+    {
+        Object[] o = null;
+        List l = <selection>new ArrayList(Arrays.asList(o))</selection>;
+
+        List l1 = new ArrayList(Arrays.asList(new Object[0]));
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ExpressionDuplicates_after.java b/java/java-tests/testData/refactoring/extractMethod/ExpressionDuplicates_after.java
new file mode 100644
index 0000000..a564ab1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ExpressionDuplicates_after.java
@@ -0,0 +1,14 @@
+import java.util.*;
+
+class C {
+    {
+        Object[] o = null;
+        List l = newMethod(o);
+
+        List l1 = newMethod(new Object[0]);
+    }
+
+    private ArrayList newMethod(Object[] o) {
+        return new ArrayList(Arrays.asList(o));
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ExtractAssignmentExpression.java b/java/java-tests/testData/refactoring/extractMethod/ExtractAssignmentExpression.java
new file mode 100644
index 0000000..03b33f0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ExtractAssignmentExpression.java
@@ -0,0 +1,6 @@
+class Foo {
+  void foo() {
+    int x = 0;
+    int y = <selection>x = 1</selection>;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ExtractAssignmentExpressionFromStatement.java b/java/java-tests/testData/refactoring/extractMethod/ExtractAssignmentExpressionFromStatement.java
new file mode 100644
index 0000000..2a7bc85
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ExtractAssignmentExpressionFromStatement.java
@@ -0,0 +1,7 @@
+
+class Foo {
+  void foo() {
+    int x = 0;
+    <selection>x = 1</selection>;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ExtractAssignmentExpressionFromStatement_after.java b/java/java-tests/testData/refactoring/extractMethod/ExtractAssignmentExpressionFromStatement_after.java
new file mode 100644
index 0000000..d19a099
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ExtractAssignmentExpressionFromStatement_after.java
@@ -0,0 +1,12 @@
+
+class Foo {
+  void foo() {
+    int x = 0;
+      newMethod();
+  }
+
+    private void newMethod() {
+        int x;
+        x = 1;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ExtractAssignmentExpression_after.java b/java/java-tests/testData/refactoring/extractMethod/ExtractAssignmentExpression_after.java
new file mode 100644
index 0000000..468caa9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ExtractAssignmentExpression_after.java
@@ -0,0 +1,11 @@
+class Foo {
+  void foo() {
+    int x = 0;
+    int y = x = newMethod();
+  }
+
+    private int newMethod() {
+        int x;
+        return x = 1;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ExtractFromAnonymous.java b/java/java-tests/testData/refactoring/extractMethod/ExtractFromAnonymous.java
new file mode 100644
index 0000000..fff1454
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ExtractFromAnonymous.java
@@ -0,0 +1,9 @@
+class Test {
+    public static void main() {
+        new Runnable() {
+            public void run() {
+                <selection>System.out</selection>.println("Text");
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ExtractFromAnonymous_after.java b/java/java-tests/testData/refactoring/extractMethod/ExtractFromAnonymous_after.java
new file mode 100644
index 0000000..e4ccd5a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ExtractFromAnonymous_after.java
@@ -0,0 +1,15 @@
+import java.io.PrintStream;
+
+class Test {
+    public static void main() {
+        new Runnable() {
+            public void run() {
+                newMethod().println("Text");
+            }
+        }
+    }
+
+    private static PrintStream newMethod() {
+        return System.out;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ExtractFromCodeBlock.java b/java/java-tests/testData/refactoring/extractMethod/ExtractFromCodeBlock.java
new file mode 100644
index 0000000..60d31d8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ExtractFromCodeBlock.java
@@ -0,0 +1,10 @@
+class Test {
+    void method() {
+        System.out.println("1");
+        <selection>{
+             System.out.println("2");
+             System.out.println("3");
+        }</selection>
+        System.out.println("4");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ExtractFromCodeBlock_after.java b/java/java-tests/testData/refactoring/extractMethod/ExtractFromCodeBlock_after.java
new file mode 100644
index 0000000..5055344
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ExtractFromCodeBlock_after.java
@@ -0,0 +1,12 @@
+class Test {
+    void method() {
+        System.out.println("1");
+        newMethod();
+        System.out.println("4");
+    }
+
+    private void newMethod() {
+        System.out.println("2");
+        System.out.println("3");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ExtractFromFinally.java b/java/java-tests/testData/refactoring/extractMethod/ExtractFromFinally.java
new file mode 100644
index 0000000..f398c31
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ExtractFromFinally.java
@@ -0,0 +1,11 @@
+public class Test {
+    int method() {
+        try {
+            System.out.println("Text");
+            return 0;
+        } finally {
+            <selection>System.out.println("!!!");
+            return 1;</selection>
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ExtractFromFinally_after.java b/java/java-tests/testData/refactoring/extractMethod/ExtractFromFinally_after.java
new file mode 100644
index 0000000..561cc00
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ExtractFromFinally_after.java
@@ -0,0 +1,15 @@
+public class Test {
+    int method() {
+        try {
+            System.out.println("Text");
+            return 0;
+        } finally {
+            return newMethod();
+        }
+    }
+
+    private int newMethod() {
+        System.out.println("!!!");
+        return 1;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ExtractFromTryFinally.java b/java/java-tests/testData/refactoring/extractMethod/ExtractFromTryFinally.java
new file mode 100644
index 0000000..ca866c1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ExtractFromTryFinally.java
@@ -0,0 +1,10 @@
+public class S {
+  {
+    String s;
+    try {
+      <selection>s = "";</selection>
+    } finally {
+    }
+    System.out.print(s);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/extractMethod/ExtractFromTryFinally2.java b/java/java-tests/testData/refactoring/extractMethod/ExtractFromTryFinally2.java
new file mode 100644
index 0000000..15bf8c6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ExtractFromTryFinally2.java
@@ -0,0 +1,12 @@
+class Tester {
+    String x() {
+        String o = "";
+        <selection>String s;
+        try {
+            s = o;
+        }
+        finally {
+        }
+        return s;</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ExtractFromTryFinally2_after.java b/java/java-tests/testData/refactoring/extractMethod/ExtractFromTryFinally2_after.java
new file mode 100644
index 0000000..54274f1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ExtractFromTryFinally2_after.java
@@ -0,0 +1,16 @@
+class Tester {
+    String x() {
+        String o = "";
+        return newMethod(o);
+    }
+
+    private String newMethod(String o) {
+        String s;
+        try {
+            s = o;
+        }
+        finally {
+        }
+        return s;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ExtractFromTryFinally_after.java b/java/java-tests/testData/refactoring/extractMethod/ExtractFromTryFinally_after.java
new file mode 100644
index 0000000..52900ce
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ExtractFromTryFinally_after.java
@@ -0,0 +1,16 @@
+public class S {
+  {
+    String s;
+    try {
+        s = newMethod();
+    } finally {
+    }
+    System.out.print(s);
+  }
+
+    private String newMethod() {
+        String s;
+        s = "";
+        return s;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/extractMethod/ExtractWithLeadingComment.java b/java/java-tests/testData/refactoring/extractMethod/ExtractWithLeadingComment.java
new file mode 100644
index 0000000..a2519de
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ExtractWithLeadingComment.java
@@ -0,0 +1,12 @@
+class Test {
+    public void method2() {
+      if (true) {
+        <selection>
+        // add to list2
+        list2.add(true);</selection>
+
+      } else {
+
+      }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ExtractWithLeadingComment_after.java b/java/java-tests/testData/refactoring/extractMethod/ExtractWithLeadingComment_after.java
new file mode 100644
index 0000000..8833a28
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ExtractWithLeadingComment_after.java
@@ -0,0 +1,16 @@
+class Test {
+    public void method2() {
+      if (true) {
+          newMethod();
+
+
+      } else {
+
+      }
+    }
+
+    private void newMethod() {
+        // add to list2
+        list2.add(true);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/FinalOutputVar.java b/java/java-tests/testData/refactoring/extractMethod/FinalOutputVar.java
new file mode 100644
index 0000000..61758ed
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/FinalOutputVar.java
@@ -0,0 +1,8 @@
+class C {
+    {
+        <selection>final int i = 128;</selection>
+        System.out.println("i = " + i);
+
+        final int j = 128;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/FinalOutputVar_after.java b/java/java-tests/testData/refactoring/extractMethod/FinalOutputVar_after.java
new file mode 100644
index 0000000..b1ab68d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/FinalOutputVar_after.java
@@ -0,0 +1,12 @@
+class C {
+    {
+        final int i = newMethod();
+        System.out.println("i = " + i);
+
+        final int j = newMethod();
+    }
+
+    private int newMethod() {
+        return 128;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/FinalParamUsedInsideAnon.java b/java/java-tests/testData/refactoring/extractMethod/FinalParamUsedInsideAnon.java
new file mode 100644
index 0000000..a898764
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/FinalParamUsedInsideAnon.java
@@ -0,0 +1,11 @@
+public class Test {
+    public static void main(String[] args) {
+        final String s = "dude";
+        <selection>Runnable runnable = new Runnable() {
+            public void run() {
+                System.out.println(s);
+            }
+        };
+        new Thread(runnable).start();</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/FinalParamUsedInsideAnon_after.java b/java/java-tests/testData/refactoring/extractMethod/FinalParamUsedInsideAnon_after.java
new file mode 100644
index 0000000..283161a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/FinalParamUsedInsideAnon_after.java
@@ -0,0 +1,15 @@
+public class Test {
+    public static void main(String[] args) {
+        final String s = "dude";
+        newMethod(s);
+    }
+
+    private static void newMethod(final String s) {
+        Runnable runnable = new Runnable() {
+            public void run() {
+                System.out.println(s);
+            }
+        };
+        new Thread(runnable).start();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/FinalParams4LocalClasses.java b/java/java-tests/testData/refactoring/extractMethod/FinalParams4LocalClasses.java
new file mode 100644
index 0000000..8f1cbe4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/FinalParams4LocalClasses.java
@@ -0,0 +1,11 @@
+class Test {
+
+    public static void main(String[] args) {
+        final String s = "text";
+        <selection>class A {
+            {
+                System.out.println(s);
+            }
+        }</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/FinalParams4LocalClasses_after.java b/java/java-tests/testData/refactoring/extractMethod/FinalParams4LocalClasses_after.java
new file mode 100644
index 0000000..e887d2e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/FinalParams4LocalClasses_after.java
@@ -0,0 +1,15 @@
+class Test {
+
+    public static void main(String[] args) {
+        final String s = "text";
+        newMethod(s);
+    }
+
+    private static void newMethod(final String s) {
+        class A {
+            {
+                System.out.println(s);
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/Finally.java b/java/java-tests/testData/refactoring/extractMethod/Finally.java
new file mode 100644
index 0000000..1b2b12d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/Finally.java
@@ -0,0 +1,22 @@
+class Test {
+    void method(){         
+        <selection>try {
+            process.waitFor();
+        }
+        catch(InterruptedException e) {
+            process.destroy();
+        }
+        finally {
+            try {
+                myParsingThread.join();
+            }
+            catch(InterruptedException e) {
+            }
+            compilerHandler.processTerminated();
+        }
+        synchronized (this) {
+            myParsingThread = null;
+        }</selection>
+        someOtherCode();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/Finally_after.java b/java/java-tests/testData/refactoring/extractMethod/Finally_after.java
new file mode 100644
index 0000000..73485d3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/Finally_after.java
@@ -0,0 +1,26 @@
+class Test {
+    void method(){
+        newMethod();
+        someOtherCode();
+    }
+
+    private void newMethod() {
+        try {
+            process.waitFor();
+        }
+        catch(InterruptedException e) {
+            process.destroy();
+        }
+        finally {
+            try {
+                myParsingThread.join();
+            }
+            catch(InterruptedException e) {
+            }
+            compilerHandler.processTerminated();
+        }
+        synchronized (this) {
+            myParsingThread = null;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/FoldInWhile.java b/java/java-tests/testData/refactoring/extractMethod/FoldInWhile.java
new file mode 100644
index 0000000..a19b9d9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/FoldInWhile.java
@@ -0,0 +1,17 @@
+class Test {
+    String[] foo() {
+        return null;
+    }
+
+    boolean bar(String s) {
+        return false;
+    }
+
+    void foooooo() {
+        String[] modules = foo();
+        int i = 0;
+        while (i < modules.length && <selection>!bar(modules[i])</selection>) {
+            i++;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/FoldInWhile_after.java b/java/java-tests/testData/refactoring/extractMethod/FoldInWhile_after.java
new file mode 100644
index 0000000..40434f6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/FoldInWhile_after.java
@@ -0,0 +1,21 @@
+class Test {
+    String[] foo() {
+        return null;
+    }
+
+    boolean bar(String s) {
+        return false;
+    }
+
+    void foooooo() {
+        String[] modules = foo();
+        int i = 0;
+        while (i < modules.length && newMethod(modules[i])) {
+            i++;
+        }
+    }
+
+    private boolean newMethod(String module) {
+        return !bar(module);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ForEach.java b/java/java-tests/testData/refactoring/extractMethod/ForEach.java
new file mode 100644
index 0000000..38a27a6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ForEach.java
@@ -0,0 +1,9 @@
+class Foo {
+  {
+    String[] args = getArgs();
+
+    for(String arg : args) {
+       <selection>System.out.println("arg = " + arg);</selection>
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ForEach_after.java b/java/java-tests/testData/refactoring/extractMethod/ForEach_after.java
new file mode 100644
index 0000000..27a92ae
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ForEach_after.java
@@ -0,0 +1,13 @@
+class Foo {
+  {
+    String[] args = getArgs();
+
+    for(String arg : args) {
+        newMethod(arg);
+    }
+  }
+
+    private void newMethod(String arg) {
+        System.out.println("arg = " + arg);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ForceBraces.java b/java/java-tests/testData/refactoring/extractMethod/ForceBraces.java
new file mode 100644
index 0000000..eb66fa5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ForceBraces.java
@@ -0,0 +1,9 @@
+class Xtract {
+    void me(int i) {
+        <selection>if (i ==10) {
+            return;
+        }</selection>
+
+        System.out.println("i: " + i);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ForceBraces_after.java b/java/java-tests/testData/refactoring/extractMethod/ForceBraces_after.java
new file mode 100644
index 0000000..31c1044
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ForceBraces_after.java
@@ -0,0 +1,16 @@
+class Xtract {
+    void me(int i) {
+        if (newMethod(i)) {
+            return;
+        }
+
+        System.out.println("i: " + i);
+    }
+
+    private boolean newMethod(int i) {
+        if (i ==10) {
+            return true;
+        }
+        return false;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/FromLambdaBody.java b/java/java-tests/testData/refactoring/extractMethod/FromLambdaBody.java
new file mode 100644
index 0000000..eba4ec1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/FromLambdaBody.java
@@ -0,0 +1,23 @@
+/*
+ * 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 Test {
+  public void foo() {
+    Runnable r = () -> {
+      String hello = "hello";
+      <selection>System.out.println(hello);</selection>
+    };
+  }
+}
diff --git a/java/java-tests/testData/refactoring/extractMethod/FromLambdaBody_after.java b/java/java-tests/testData/refactoring/extractMethod/FromLambdaBody_after.java
new file mode 100644
index 0000000..b8f4191
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/FromLambdaBody_after.java
@@ -0,0 +1,27 @@
+/*
+ * 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 Test {
+  public void foo() {
+    Runnable r = () -> {
+      String hello = "hello";
+        newMethod(hello);
+    };
+  }
+
+    private void newMethod(String hello) {
+        System.out.println(hello);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/extractMethod/GenericsParameters.java b/java/java-tests/testData/refactoring/extractMethod/GenericsParameters.java
new file mode 100644
index 0000000..35ffd9d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/GenericsParameters.java
@@ -0,0 +1,5 @@
+class Test {
+   public final <T> Class<T> findClass(final String className) throws ClassNotFoundException {
+    return (Class<T>)Class.forName(className, true, <selection>getClass().getClassLoader()</selection>);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/GenericsParameters_after.java b/java/java-tests/testData/refactoring/extractMethod/GenericsParameters_after.java
new file mode 100644
index 0000000..eab388c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/GenericsParameters_after.java
@@ -0,0 +1,9 @@
+class Test {
+   public final <T> Class<T> findClass(final String className) throws ClassNotFoundException {
+    return (Class<T>)Class.forName(className, true, newMethod());
+  }
+
+    private ClassLoader newMethod() {
+        return getClass().getClassLoader();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/GuardMethodDuplicates.java b/java/java-tests/testData/refactoring/extractMethod/GuardMethodDuplicates.java
new file mode 100644
index 0000000..4afdf00
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/GuardMethodDuplicates.java
@@ -0,0 +1,18 @@
+class Test
+{
+    public Object foo() {
+        Object result = null;
+        <selection>if(test1()) return null;
+        if(test2()) return null;</selection>
+        return result;
+    }
+    public int foo1() {
+        int result = 1;
+        if(test1()) return 0;
+        if(test2()) return 0;
+        return result;
+    }
+
+    private boolean test1() {return false;}
+    private boolean test2() {return false;}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/GuardMethodDuplicates1.java b/java/java-tests/testData/refactoring/extractMethod/GuardMethodDuplicates1.java
new file mode 100644
index 0000000..07b7567
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/GuardMethodDuplicates1.java
@@ -0,0 +1,29 @@
+public class Test {
+    public Object foo() {
+        Object result = null;       // line1
+        <selection>if (test1()) return result;
+        if (test2()) return result;</selection>
+        if (test3()) return result;  // line4
+        return result;
+    }
+
+    public int foo1() {
+        Object result = null;       // line1
+        if (test1()) return 1; // ssss
+        if (test2()) return 1; //eee
+        if (test3()) return 2;  // line4
+        return 3;
+    }
+
+    private boolean test1() {
+        return false;
+    }
+
+    private boolean test2() {
+        return false;
+    }
+
+    private boolean test3() {
+        return false;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/GuardMethodDuplicates1_after.java b/java/java-tests/testData/refactoring/extractMethod/GuardMethodDuplicates1_after.java
new file mode 100644
index 0000000..6ad3225
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/GuardMethodDuplicates1_after.java
@@ -0,0 +1,34 @@
+public class Test {
+    public Object foo() {
+        Object result = null;       // line1
+        if (newMethod()) return result;
+        if (test3()) return result;  // line4
+        return result;
+    }
+
+    private boolean newMethod() {
+        Object result;
+        if (test1()) return true;
+        if (test2()) return true;
+        return false;
+    }
+
+    public int foo1() {
+        Object result = null;       // line1
+        if (newMethod()) return 1;
+        if (test3()) return 2;  // line4
+        return 3;
+    }
+
+    private boolean test1() {
+        return false;
+    }
+
+    private boolean test2() {
+        return false;
+    }
+
+    private boolean test3() {
+        return false;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/GuardMethodDuplicates_after.java b/java/java-tests/testData/refactoring/extractMethod/GuardMethodDuplicates_after.java
new file mode 100644
index 0000000..c2f5427
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/GuardMethodDuplicates_after.java
@@ -0,0 +1,23 @@
+class Test
+{
+    public Object foo() {
+        Object result = null;
+        if (newMethod()) return null;
+        return result;
+    }
+
+    private boolean newMethod() {
+        if(test1()) return true;
+        if(test2()) return true;
+        return false;
+    }
+
+    public int foo1() {
+        int result = 1;
+        if (newMethod()) return 0;
+        return result;
+    }
+
+    private boolean test1() {return false;}
+    private boolean test2() {return false;}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/IDEADEV11036.java b/java/java-tests/testData/refactoring/extractMethod/IDEADEV11036.java
new file mode 100644
index 0000000..f1b43c0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/IDEADEV11036.java
@@ -0,0 +1,9 @@
+class MyClass {
+    public void newMethod(long i) {
+    }
+    {
+        int i = 0;
+        <selection>System.out.println(i);</selection>
+        newMethod(14);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/IDEADEV11036_after.java b/java/java-tests/testData/refactoring/extractMethod/IDEADEV11036_after.java
new file mode 100644
index 0000000..66f19a3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/IDEADEV11036_after.java
@@ -0,0 +1,13 @@
+class MyClass {
+    public void newMethod(long i) {
+    }
+    {
+        int i = 0;
+        newMethod(i);
+        newMethod((long) 14);
+    }
+
+    private void newMethod(int i) {
+        System.out.println(i);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/IDEADEV11748.java b/java/java-tests/testData/refactoring/extractMethod/IDEADEV11748.java
new file mode 100644
index 0000000..0f2ab07
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/IDEADEV11748.java
@@ -0,0 +1,14 @@
+class Test {
+    public static String bar(int x , int y) {
+        while (true) {
+            <selection>if (x == y) {
+                continue;
+            }
+            System.out.println("HW");</selection>
+        }
+    }
+
+    private static int g() {
+        return 0;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/extractMethod/IDEADEV11748_after.java b/java/java-tests/testData/refactoring/extractMethod/IDEADEV11748_after.java
new file mode 100644
index 0000000..5a93390b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/IDEADEV11748_after.java
@@ -0,0 +1,18 @@
+class Test {
+    public static String bar(int x , int y) {
+        while (true) {
+            newMethod(x, y);
+        }
+    }
+
+    private static void newMethod(int x, int y) {
+        if (x == y) {
+            return;
+        }
+        System.out.println("HW");
+    }
+
+    private static int g() {
+        return 0;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/extractMethod/IDEADEV11848.java b/java/java-tests/testData/refactoring/extractMethod/IDEADEV11848.java
new file mode 100644
index 0000000..bd9df71
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/IDEADEV11848.java
@@ -0,0 +1,11 @@
+class Container {
+    static class X {
+        boolean x = false;
+
+        void foo(String s, String t) {
+            <selection>x = true;</selection>
+
+            x = true;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/IDEADEV11848_after.java b/java/java-tests/testData/refactoring/extractMethod/IDEADEV11848_after.java
new file mode 100644
index 0000000..d0c7e57
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/IDEADEV11848_after.java
@@ -0,0 +1,15 @@
+class Container {
+    static class X {
+        boolean x = false;
+
+        void foo(String s, String t) {
+            newMethod();
+
+            newMethod();
+        }
+
+        private void newMethod() {
+            x = true;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/IDEADEV33368.java b/java/java-tests/testData/refactoring/extractMethod/IDEADEV33368.java
new file mode 100644
index 0000000..bd8bfa8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/IDEADEV33368.java
@@ -0,0 +1,16 @@
+class Test {
+   void m(boolean b) {
+           int x = 42;
+           try {
+               <selection>
+               if(b) {
+                   x = 23;
+                   throw new Exception();
+               }
+               </selection>
+           } catch(Exception e) {
+               System.out.println(x);
+           }
+       }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/IDEADEV33368_after.java b/java/java-tests/testData/refactoring/extractMethod/IDEADEV33368_after.java
new file mode 100644
index 0000000..c05d3dc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/IDEADEV33368_after.java
@@ -0,0 +1,21 @@
+class Test {
+   void m(boolean b) {
+           int x = 42;
+           try {
+
+               x = newMethod(b, x);
+
+           } catch(Exception e) {
+               System.out.println(x);
+           }
+       }
+
+    private int newMethod(boolean b, int x) throws Exception {
+        if(b) {
+            x = 23;
+            throw new Exception();
+        }
+        return x;
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/IdeaDev2291.java b/java/java-tests/testData/refactoring/extractMethod/IdeaDev2291.java
new file mode 100644
index 0000000..5b14d45
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/IdeaDev2291.java
@@ -0,0 +1,6 @@
+class Tester {
+    void method(Object... array) {
+        Object object = null;
+        <selection>array.equals(object);</selection> 
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/IdeaDev2291_after.java b/java/java-tests/testData/refactoring/extractMethod/IdeaDev2291_after.java
new file mode 100644
index 0000000..d974660
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/IdeaDev2291_after.java
@@ -0,0 +1,10 @@
+class Tester {
+    void method(Object... array) {
+        Object object = null;
+        newMethod(object, array);
+    }
+
+    private void newMethod(Object object, Object[] array) {
+        array.equals(object);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/InlineCreated2ReturnLocalVariablesOnly.java b/java/java-tests/testData/refactoring/extractMethod/InlineCreated2ReturnLocalVariablesOnly.java
new file mode 100644
index 0000000..91101ce
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/InlineCreated2ReturnLocalVariablesOnly.java
@@ -0,0 +1,8 @@
+class Test {
+    void foo() {
+      <selection>int j = 0;
+      int i = 0;
+      j = 9;</selection>
+      System.out.println(i);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/extractMethod/InlineCreated2ReturnLocalVariablesOnly_after.java b/java/java-tests/testData/refactoring/extractMethod/InlineCreated2ReturnLocalVariablesOnly_after.java
new file mode 100644
index 0000000..e7b333b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/InlineCreated2ReturnLocalVariablesOnly_after.java
@@ -0,0 +1,13 @@
+class Test {
+    void foo() {
+        int i = newMethod();
+      System.out.println(i);
+    }
+
+    private int newMethod() {
+        int j = 0;
+        int i = 0;
+        j = 9;
+        return i;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/extractMethod/InstanceMethodDuplicatesInStaticContext.java b/java/java-tests/testData/refactoring/extractMethod/InstanceMethodDuplicatesInStaticContext.java
new file mode 100644
index 0000000..145d227
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/InstanceMethodDuplicatesInStaticContext.java
@@ -0,0 +1,14 @@
+class Class1 {
+    public static int staticMethod() {
+        int a = 1;
+        int b = 2;
+
+        int temp = a + b;
+        return temp * 2;
+    }
+
+    public int foo(int a, int b) {
+        <selection>int temp = a + b;
+        return temp * 2;</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/InstanceMethodDuplicatesInStaticContext_after.java b/java/java-tests/testData/refactoring/extractMethod/InstanceMethodDuplicatesInStaticContext_after.java
new file mode 100644
index 0000000..4c639dd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/InstanceMethodDuplicatesInStaticContext_after.java
@@ -0,0 +1,17 @@
+class Class1 {
+    public static int staticMethod() {
+        int a = 1;
+        int b = 2;
+
+        return newMethod(a, b);
+    }
+
+    public int foo(int a, int b) {
+        return newMethod(a, b);
+    }
+
+    private static int newMethod(int a, int b) {
+        int temp = a + b;
+        return temp * 2;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/InvalidReference.java b/java/java-tests/testData/refactoring/extractMethod/InvalidReference.java
new file mode 100644
index 0000000..b2addd9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/InvalidReference.java
@@ -0,0 +1,7 @@
+import java.io.IOException;
+
+class Test {
+  void foo(Exception targetElement) {
+    PsiPackage aPack = <selection>JavaDirectoryService.getInstance().getPackage((IOException)targetElement)</selection>;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/InvalidReference_after.java b/java/java-tests/testData/refactoring/extractMethod/InvalidReference_after.java
new file mode 100644
index 0000000..ad34b03
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/InvalidReference_after.java
@@ -0,0 +1,11 @@
+import java.io.IOException;
+
+class Test {
+  void foo(Exception targetElement) {
+    PsiPackage aPack = newMethod((IOException) targetElement);
+  }
+
+    private PsiPackage newMethod(IOException targetElement) {
+        return JavaDirectoryService.getInstance().getPackage((IOException)targetElement);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/LValueNotDuplicate.java b/java/java-tests/testData/refactoring/extractMethod/LValueNotDuplicate.java
new file mode 100644
index 0000000..316f1bc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/LValueNotDuplicate.java
@@ -0,0 +1,11 @@
+class UUU {
+    int myValue;
+
+    UUU() {
+        System.out.println(<selection>myValue</selection>);
+    }
+
+    void init() {
+        myValue = 0;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/LValueNotDuplicate_after.java b/java/java-tests/testData/refactoring/extractMethod/LValueNotDuplicate_after.java
new file mode 100644
index 0000000..f73a57a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/LValueNotDuplicate_after.java
@@ -0,0 +1,15 @@
+class UUU {
+    int myValue;
+
+    UUU() {
+        System.out.println(newMethod());
+    }
+
+    private int newMethod() {
+        return myValue;
+    }
+
+    void init() {
+        myValue = 0;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/LeaveCommentsWhenExpressionExtracted.java b/java/java-tests/testData/refactoring/extractMethod/LeaveCommentsWhenExpressionExtracted.java
new file mode 100644
index 0000000..05c61af
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/LeaveCommentsWhenExpressionExtracted.java
@@ -0,0 +1,6 @@
+class Test {
+  void bar(){}
+  void foo() {
+    <selection>bar();</selection>//some comment here
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/LeaveCommentsWhenExpressionExtracted_after.java b/java/java-tests/testData/refactoring/extractMethod/LeaveCommentsWhenExpressionExtracted_after.java
new file mode 100644
index 0000000..8a064f1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/LeaveCommentsWhenExpressionExtracted_after.java
@@ -0,0 +1,10 @@
+class Test {
+  void bar(){}
+  void foo() {
+    newMethod();//some comment here
+  }
+
+    private void newMethod() {
+        bar();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/LesyaBug.java b/java/java-tests/testData/refactoring/extractMethod/LesyaBug.java
new file mode 100644
index 0000000..a292e86
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/LesyaBug.java
@@ -0,0 +1,15 @@
+import java.io.OutputStream;
+
+class A {
+    {
+        try {
+            OutputStream out = null;
+
+            <selection>try {
+            } finally {
+                out.close();
+            }</selection>
+        } catch(Throwable t) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/LesyaBug_after.java b/java/java-tests/testData/refactoring/extractMethod/LesyaBug_after.java
new file mode 100644
index 0000000..6092255
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/LesyaBug_after.java
@@ -0,0 +1,20 @@
+import java.io.IOException;
+import java.io.OutputStream;
+
+class A {
+    {
+        try {
+            OutputStream out = null;
+
+            newMethod(out);
+        } catch(Throwable t) {
+        }
+    }
+
+    private void newMethod(OutputStream out) throws IOException {
+        try {
+        } finally {
+            out.close();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/LocalClass.java b/java/java-tests/testData/refactoring/extractMethod/LocalClass.java
new file mode 100644
index 0000000..9f61b16
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/LocalClass.java
@@ -0,0 +1,7 @@
+class Test{
+  public void foo() {
+    class A {
+    }
+    <selection>new A();</selection>
+  }
+}
diff --git a/java/java-tests/testData/refactoring/extractMethod/LocalClassDefinedInMethodWhichIsUsedLater.java b/java/java-tests/testData/refactoring/extractMethod/LocalClassDefinedInMethodWhichIsUsedLater.java
new file mode 100644
index 0000000..7f33f34
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/LocalClassDefinedInMethodWhichIsUsedLater.java
@@ -0,0 +1,8 @@
+class Test {
+  void foo() {
+    <selection>class X {}
+    X x;
+    </selection>
+    x = null;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/LocalClassUsage.java b/java/java-tests/testData/refactoring/extractMethod/LocalClassUsage.java
new file mode 100644
index 0000000..7910c9f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/LocalClassUsage.java
@@ -0,0 +1,7 @@
+class Test{
+  public void foo() {
+    <selection>class A {
+    }</selection>
+    new A();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/extractMethod/Method2Interface.java b/java/java-tests/testData/refactoring/extractMethod/Method2Interface.java
new file mode 100644
index 0000000..0c9a1c7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/Method2Interface.java
@@ -0,0 +1,5 @@
+interface I {
+    default void foo () {
+        <selection>System.out.println("hello");</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/Method2Interface_after.java b/java/java-tests/testData/refactoring/extractMethod/Method2Interface_after.java
new file mode 100644
index 0000000..faed7ac
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/Method2Interface_after.java
@@ -0,0 +1,9 @@
+interface I {
+    default void foo () {
+        newMethod();
+    }
+
+    private default void newMethod() {
+        System.out.println("hello");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/NearComment.java b/java/java-tests/testData/refactoring/extractMethod/NearComment.java
new file mode 100644
index 0000000..54d855f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/NearComment.java
@@ -0,0 +1,18 @@
+public class ExtractMethods {
+  public void processLine(String line) {
+    <selection>
+    //final Charset charset = myProcessHandler.getCharset();
+    final OutputStream outputStream = null;//myProcessHandler.getProcessInput();
+    try {
+      //byte[] bytes = (line + "\n").getBytes(charset.name());
+      byte[] bytes = (line + "\n").getBytes();
+      outputStream.write(bytes);
+      outputStream.flush();
+    }
+    catch (IOException e) {
+      // ignore
+    }
+    </selection>
+  }
+
+}
diff --git a/java/java-tests/testData/refactoring/extractMethod/NearComment_after.java b/java/java-tests/testData/refactoring/extractMethod/NearComment_after.java
new file mode 100644
index 0000000..cc9f860
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/NearComment_after.java
@@ -0,0 +1,22 @@
+public class ExtractMethods {
+  public void processLine(String line) {
+      newMethod(line);
+
+
+  }
+
+    private void newMethod(String line) {
+        //final Charset charset = myProcessHandler.getCharset();
+        final OutputStream outputStream = null;//myProcessHandler.getProcessInput();
+        try {
+          //byte[] bytes = (line + "\n").getBytes(charset.name());
+          byte[] bytes = (line + "\n").getBytes();
+          outputStream.write(bytes);
+          outputStream.flush();
+        }
+        catch (IOException e) {
+          // ignore
+        }
+    }
+
+}
diff --git a/java/java-tests/testData/refactoring/extractMethod/NoShortCircuit.java b/java/java-tests/testData/refactoring/extractMethod/NoShortCircuit.java
new file mode 100644
index 0000000..5fbc2f0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/NoShortCircuit.java
@@ -0,0 +1,7 @@
+public class Test {
+    public static void foo(char c) {
+        if (<selection>c == '\n' || c == '\r'</selection> || c == '\u0000') {
+            System.out.println("");
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/extractMethod/NoShortCircuit_after.java b/java/java-tests/testData/refactoring/extractMethod/NoShortCircuit_after.java
new file mode 100644
index 0000000..a29a6f3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/NoShortCircuit_after.java
@@ -0,0 +1,11 @@
+public class Test {
+    public static void foo(char c) {
+        if (newMethod(c) || c == '\u0000') {
+            System.out.println("");
+        }
+    }
+
+    private static boolean newMethod(char c) {
+        return c == '\n' || c == '\r';
+    }
+}
diff --git a/java/java-tests/testData/refactoring/extractMethod/NonFinalWritableParam.java b/java/java-tests/testData/refactoring/extractMethod/NonFinalWritableParam.java
new file mode 100644
index 0000000..8d45959
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/NonFinalWritableParam.java
@@ -0,0 +1,6 @@
+public class Test {
+    public static void main(String[] args) {
+        String s = "dude";
+        <selection>s = s;</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/NonFinalWritableParam_after.java b/java/java-tests/testData/refactoring/extractMethod/NonFinalWritableParam_after.java
new file mode 100644
index 0000000..43f9b3c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/NonFinalWritableParam_after.java
@@ -0,0 +1,10 @@
+public class Test {
+    public static void main(String[] args) {
+        String s = "dude";
+        newMethod(s);
+    }
+
+    private static void newMethod(String s) {
+        s = s;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/NonFoldInIfBody.java b/java/java-tests/testData/refactoring/extractMethod/NonFoldInIfBody.java
new file mode 100644
index 0000000..b92769d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/NonFoldInIfBody.java
@@ -0,0 +1,7 @@
+class Test {
+    void foo(String[] a, int i, boolean b) {
+        <selection>if (b) {
+            System.out.println(a[i]);
+        }</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/NonFoldInIfBody_after.java b/java/java-tests/testData/refactoring/extractMethod/NonFoldInIfBody_after.java
new file mode 100644
index 0000000..b6b5eda
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/NonFoldInIfBody_after.java
@@ -0,0 +1,11 @@
+class Test {
+    void foo(String[] a, int i, boolean b) {
+        newMethod(a, i, b);
+    }
+
+    private void newMethod(String[] a, int i, boolean b) {
+        if (b) {
+            System.out.println(a[i]);
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/NotInitializedInsideFinally.java b/java/java-tests/testData/refactoring/extractMethod/NotInitializedInsideFinally.java
new file mode 100644
index 0000000..17d0a16
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/NotInitializedInsideFinally.java
@@ -0,0 +1,14 @@
+class Tester {
+    String x() {
+        String o = "";
+<selection>
+        String s;
+        try {
+            s = o;
+        }
+        finally {
+
+        }
+        return s;</selection>
+    }
+}
diff --git a/java/java-tests/testData/refactoring/extractMethod/NotInitializedInsideFinally_after.java b/java/java-tests/testData/refactoring/extractMethod/NotInitializedInsideFinally_after.java
new file mode 100644
index 0000000..5c6cc93
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/NotInitializedInsideFinally_after.java
@@ -0,0 +1,18 @@
+class Tester {
+    String x() {
+        String o = "";
+
+        return newMethod(o);
+    }
+
+    private String newMethod(String o) {
+        String s;
+        try {
+            s = o;
+        }
+        finally {
+
+        }
+        return s;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/extractMethod/NullableCheck.java b/java/java-tests/testData/refactoring/extractMethod/NullableCheck.java
new file mode 100644
index 0000000..d1bb611
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/NullableCheck.java
@@ -0,0 +1,15 @@
+class Test {
+   Object foo() {
+      <selection>Object o = "";
+      for (int i = 0; i < 5; i++) {
+         if (i == 10){
+            o = null;
+         }
+      }
+      if (o == null) {
+        return null;
+      }</selection>
+      System.out.println(o);
+      return o;
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/NullableCheck1.java b/java/java-tests/testData/refactoring/extractMethod/NullableCheck1.java
new file mode 100644
index 0000000..600e3c6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/NullableCheck1.java
@@ -0,0 +1,16 @@
+class Test {
+   String foo(int i, boolean flag) {
+      <selection>
+      String xxx = "";
+        if (flag) {
+            for (int j = 0; j < 100; j++) {
+                if (i == j) {
+                    return null;
+                }
+            }
+        }
+      </selection>
+      System.out.println(xxx);
+      return null;
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/NullableCheck1_after.java b/java/java-tests/testData/refactoring/extractMethod/NullableCheck1_after.java
new file mode 100644
index 0000000..4a2cf18
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/NullableCheck1_after.java
@@ -0,0 +1,22 @@
+class Test {
+   String foo(int i, boolean flag) {
+
+       String xxx = newMethod(i, flag);
+       if (xxx == null) return null;
+      
+      System.out.println(xxx);
+      return null;
+   }
+
+    private String newMethod(int i, boolean flag) {
+        String xxx = "";
+        if (flag) {
+            for (int j = 0; j < 100; j++) {
+                if (i == j) {
+                    return null;
+                }
+            }
+        }
+        return xxx;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/NullableCheckDontMissFinal.java b/java/java-tests/testData/refactoring/extractMethod/NullableCheckDontMissFinal.java
new file mode 100644
index 0000000..f1dea91
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/NullableCheckDontMissFinal.java
@@ -0,0 +1,13 @@
+class Test {
+  void foo() {
+    <selection>final String str = "";
+    if (str == "") {
+      return;
+    }</selection>
+    new Runnable() {
+      public void run() {
+        System.out.println(str);
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/NullableCheckDontMissFinal_after.java b/java/java-tests/testData/refactoring/extractMethod/NullableCheckDontMissFinal_after.java
new file mode 100644
index 0000000..217f9f4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/NullableCheckDontMissFinal_after.java
@@ -0,0 +1,19 @@
+class Test {
+  void foo() {
+      final String str = newMethod();
+      if (str == null) return;
+    new Runnable() {
+      public void run() {
+        System.out.println(str);
+      }
+    }
+  }
+
+    private String newMethod() {
+        final String str = "";
+        if (str == "") {
+            return null;
+        }
+        return str;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/NullableCheckVoid.java b/java/java-tests/testData/refactoring/extractMethod/NullableCheckVoid.java
new file mode 100644
index 0000000..d0e404d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/NullableCheckVoid.java
@@ -0,0 +1,14 @@
+class Test {
+   void foo() {
+      <selection>Object o = "";
+      for (int i = 0; i < 5; i++) {
+         if (i == 10){
+            o = null;
+         }
+      }
+      if (o == null) {
+        return;
+      }</selection>
+      System.out.println(o);
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/NullableCheckVoid_after.java b/java/java-tests/testData/refactoring/extractMethod/NullableCheckVoid_after.java
new file mode 100644
index 0000000..311314d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/NullableCheckVoid_after.java
@@ -0,0 +1,20 @@
+class Test {
+   void foo() {
+       Object o = newMethod();
+       if (o == null) return;
+      System.out.println(o);
+   }
+
+    private Object newMethod() {
+        Object o = "";
+        for (int i = 0; i < 5; i++) {
+           if (i == 10){
+              o = null;
+           }
+        }
+        if (o == null) {
+            return null;
+        }
+        return o;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/NullableCheck_after.java b/java/java-tests/testData/refactoring/extractMethod/NullableCheck_after.java
new file mode 100644
index 0000000..fa0db64
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/NullableCheck_after.java
@@ -0,0 +1,21 @@
+class Test {
+   Object foo() {
+       Object o = newMethod();
+       if (o == null) return null;
+      System.out.println(o);
+      return o;
+   }
+
+    private Object newMethod() {
+        Object o = "";
+        for (int i = 0; i < 5; i++) {
+           if (i == 10){
+              o = null;
+           }
+        }
+        if (o == null) {
+            return null;
+        }
+        return o;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/OneBranchAssignment.java b/java/java-tests/testData/refactoring/extractMethod/OneBranchAssignment.java
new file mode 100644
index 0000000..6f65048
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/OneBranchAssignment.java
@@ -0,0 +1,13 @@
+class A{
+    public static Object test(Object a) {
+        boolean value;
+
+        if (a == null){
+            <selection>value = true;</selection>
+        }
+        else{
+        }
+
+        return Boolean.valueOf(value);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/extractMethod/OneBranchAssignment_after.java b/java/java-tests/testData/refactoring/extractMethod/OneBranchAssignment_after.java
new file mode 100644
index 0000000..bd5ba22
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/OneBranchAssignment_after.java
@@ -0,0 +1,19 @@
+class A{
+    public static Object test(Object a) {
+        boolean value;
+
+        if (a == null){
+            value = newMethod();
+        }
+        else{
+        }
+
+        return Boolean.valueOf(value);
+    }
+
+    private static boolean newMethod() {
+        boolean value;
+        value = true;
+        return value;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/extractMethod/OneLineLambda.java b/java/java-tests/testData/refactoring/extractMethod/OneLineLambda.java
new file mode 100644
index 0000000..db109ef
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/OneLineLambda.java
@@ -0,0 +1,5 @@
+class Test {
+  public void foo() {
+    Comparable<String> c = o -> <selection>o.indexOf("foo")</selection>;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/extractMethod/OneLineLambda_after.java b/java/java-tests/testData/refactoring/extractMethod/OneLineLambda_after.java
new file mode 100644
index 0000000..c5196b4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/OneLineLambda_after.java
@@ -0,0 +1,9 @@
+class Test {
+  public void foo() {
+    Comparable<String> c = o -> newMethod(o);
+  }
+
+    private int newMethod(String o) {
+        return o.indexOf("foo");
+    }
+}
diff --git a/java/java-tests/testData/refactoring/extractMethod/OxfordBug.java b/java/java-tests/testData/refactoring/extractMethod/OxfordBug.java
new file mode 100644
index 0000000..b3ef4f7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/OxfordBug.java
@@ -0,0 +1,13 @@
+class OxfordBug {
+    private int f(int m, int n) throws Exception {
+        int i = 0;
+        while (i < n) {
+            i++;
+            <selection>if (i == m) {
+                n += m;
+                throw new Exception("" + n);
+            }</selection>
+        }
+        return n;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/OxfordBug_after.java b/java/java-tests/testData/refactoring/extractMethod/OxfordBug_after.java
new file mode 100644
index 0000000..ab172bd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/OxfordBug_after.java
@@ -0,0 +1,18 @@
+class OxfordBug {
+    private int f(int m, int n) throws Exception {
+        int i = 0;
+        while (i < n) {
+            i++;
+            n = newMethod(m, n, i);
+        }
+        return n;
+    }
+
+    private int newMethod(int m, int n, int i) throws Exception {
+        if (i == m) {
+            n += m;
+            throw new Exception("" + n);
+        }
+        return n;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ParamDetection.java b/java/java-tests/testData/refactoring/extractMethod/ParamDetection.java
new file mode 100644
index 0000000..2bef3d8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ParamDetection.java
@@ -0,0 +1,20 @@
+import java.util.*;
+
+class Test {
+  public void foo() {
+    <selection>List trades;
+    try {
+      trades = getTrades();
+    }
+    catch (RemoteException e) {
+    }
+    </selection>
+
+    //probably not assigned !!!
+    if (trades.isEmpty()) {
+    }
+  }
+
+  static class RemoteException extends Exception {
+  }
+}
diff --git a/java/java-tests/testData/refactoring/extractMethod/ParamDetection_after.java b/java/java-tests/testData/refactoring/extractMethod/ParamDetection_after.java
new file mode 100644
index 0000000..f64ddcd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ParamDetection_after.java
@@ -0,0 +1,25 @@
+import java.util.*;
+
+class Test {
+  public void foo() {
+      List trades = newMethod();
+    
+
+    //probably not assigned !!!
+    if (trades.isEmpty()) {
+    }
+  }
+
+    private List newMethod() {
+        List trades;
+        try {
+          trades = getTrades();
+        }
+        catch (RemoteException e) {
+        }
+        return trades;
+    }
+
+    static class RemoteException extends Exception {
+  }
+}
diff --git a/java/java-tests/testData/refactoring/extractMethod/ParametersFromAnonymous.java b/java/java-tests/testData/refactoring/extractMethod/ParametersFromAnonymous.java
new file mode 100644
index 0000000..fc9dc3a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ParametersFromAnonymous.java
@@ -0,0 +1,12 @@
+class Test {
+  void f() {
+    new Runnable() {
+      public void run() {
+        int j = 0;
+        if (j == 0 && <selection>j < 0 && j > 0</selection>) {
+          assert false;
+        }
+      }
+    };
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ParametersFromAnonymous_after.java b/java/java-tests/testData/refactoring/extractMethod/ParametersFromAnonymous_after.java
new file mode 100644
index 0000000..8768dbc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ParametersFromAnonymous_after.java
@@ -0,0 +1,16 @@
+class Test {
+  void f() {
+    new Runnable() {
+      public void run() {
+        int j = 0;
+        if (j == 0 && newMethod(j)) {
+          assert false;
+        }
+      }
+    };
+  }
+
+    private boolean newMethod(int j) {
+        return j < 0 && j > 0;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ParamsUsedInLocalClass.java b/java/java-tests/testData/refactoring/extractMethod/ParamsUsedInLocalClass.java
new file mode 100644
index 0000000..7103fb4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ParamsUsedInLocalClass.java
@@ -0,0 +1,16 @@
+class A {
+    void foo() {
+      final int abc = 0;
+      boolean b = false;
+      <selection>
+      if (b) {
+        class T {
+          void bar() {
+            System.out.println(abc);
+          }
+        }
+        return;
+      } </selection>
+      System.out.println("");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ParamsUsedInLocalClass_after.java b/java/java-tests/testData/refactoring/extractMethod/ParamsUsedInLocalClass_after.java
new file mode 100644
index 0000000..c3268ef
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ParamsUsedInLocalClass_after.java
@@ -0,0 +1,21 @@
+class A {
+    void foo() {
+      final int abc = 0;
+      boolean b = false;
+
+        if (newMethod(abc, b)) return;
+        System.out.println("");
+    }
+
+    private boolean newMethod(final int abc, boolean b) {
+        if (b) {
+          class T {
+            void bar() {
+              System.out.println(abc);
+            }
+          }
+            return true;
+        }
+        return false;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ReassignedVarAfterCall.java b/java/java-tests/testData/refactoring/extractMethod/ReassignedVarAfterCall.java
new file mode 100644
index 0000000..852d0f8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ReassignedVarAfterCall.java
@@ -0,0 +1,8 @@
+class A {
+    public void test() {
+        <selection>int count=0;
+        for(int j=0; j<100; j++) count++;</selection>
+        count=0;
+        for(int j=0; j<100; j++) count++;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ReassignedVarAfterCall_after.java b/java/java-tests/testData/refactoring/extractMethod/ReassignedVarAfterCall_after.java
new file mode 100644
index 0000000..d6e671b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ReassignedVarAfterCall_after.java
@@ -0,0 +1,13 @@
+class A {
+    public void test() {
+        newMethod();
+        int count;
+        count=0;
+        for(int j=0; j<100; j++) count++;
+    }
+
+    private void newMethod() {
+        int count=0;
+        for(int j=0; j<100; j++) count++;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/RecursiveCallToExtracted.java b/java/java-tests/testData/refactoring/extractMethod/RecursiveCallToExtracted.java
new file mode 100644
index 0000000..a6a15ec
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/RecursiveCallToExtracted.java
@@ -0,0 +1,8 @@
+public class ExtractMethods {
+   void newMethod() {
+     int i = 0;
+     <selection>if (true) {
+       newMethod(i);
+     }</selection>
+   }
+}
diff --git a/java/java-tests/testData/refactoring/extractMethod/RecursiveCallToExtracted_after.java b/java/java-tests/testData/refactoring/extractMethod/RecursiveCallToExtracted_after.java
new file mode 100644
index 0000000..a6ffda7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/RecursiveCallToExtracted_after.java
@@ -0,0 +1,12 @@
+public class ExtractMethods {
+   void newMethod() {
+     int i = 0;
+       newMethod(i);
+   }
+
+    private void newMethod(int i) {
+        if (true) {
+          newMethod(i);
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/extractMethod/RedundantCast.java b/java/java-tests/testData/refactoring/extractMethod/RedundantCast.java
new file mode 100644
index 0000000..b2f77df
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/RedundantCast.java
@@ -0,0 +1,6 @@
+class Test {
+    void foo () {
+        int a = 1;
+        <selection>System.out.println("" + (Object)a);</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/RedundantCast_after.java b/java/java-tests/testData/refactoring/extractMethod/RedundantCast_after.java
new file mode 100644
index 0000000..473819a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/RedundantCast_after.java
@@ -0,0 +1,10 @@
+class Test {
+    void foo () {
+        int a = 1;
+        newMethod(a);
+    }
+
+    private void newMethod(Object a) {
+        System.out.println("" + a);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ReturnFromTry.java b/java/java-tests/testData/refactoring/extractMethod/ReturnFromTry.java
new file mode 100644
index 0000000..c324de5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ReturnFromTry.java
@@ -0,0 +1,16 @@
+class A {
+    public String method() {
+        try {
+            <selection>try {
+                return "";
+            }
+            finally {
+                System.out.println("f");
+            }</selection>
+        }
+        catch (Error e) {
+
+        }
+        return "";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ReturnFromTry_after.java b/java/java-tests/testData/refactoring/extractMethod/ReturnFromTry_after.java
new file mode 100644
index 0000000..4621ab2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ReturnFromTry_after.java
@@ -0,0 +1,20 @@
+class A {
+    public String method() {
+        try {
+            return newMethod();
+        }
+        catch (Error e) {
+
+        }
+        return "";
+    }
+
+    private String newMethod() {
+        try {
+            return "";
+        }
+        finally {
+            System.out.println("f");
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ReturnStatementFolding.java b/java/java-tests/testData/refactoring/extractMethod/ReturnStatementFolding.java
new file mode 100644
index 0000000..f99d1da
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ReturnStatementFolding.java
@@ -0,0 +1,5 @@
+public class Test {
+  String foo(String[] s, int i) {
+     return <selection>s[i]</selection>;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ReturnStatementFolding_after.java b/java/java-tests/testData/refactoring/extractMethod/ReturnStatementFolding_after.java
new file mode 100644
index 0000000..d083baf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ReturnStatementFolding_after.java
@@ -0,0 +1,9 @@
+public class Test {
+  String foo(String[] s, int i) {
+     return newMethod(s[i]);
+  }
+
+    private String newMethod(String s) {
+        return s;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/SCR12245.java b/java/java-tests/testData/refactoring/extractMethod/SCR12245.java
new file mode 100644
index 0000000..36f799b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/SCR12245.java
@@ -0,0 +1,11 @@
+public class A {
+    private void foo() {
+        Runnable a = new Runnable() {
+            private int a;
+
+            public void run() {
+                <selection>a = 2</selection>;
+            }
+        };
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/SCR12245_after.java b/java/java-tests/testData/refactoring/extractMethod/SCR12245_after.java
new file mode 100644
index 0000000..e729174
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/SCR12245_after.java
@@ -0,0 +1,15 @@
+public class A {
+    private void foo() {
+        Runnable a = new Runnable() {
+            private int a;
+
+            public void run() {
+                newMethod();
+            }
+
+            private void newMethod() {
+                a = 2;
+            }
+        };
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/SCR15815.java b/java/java-tests/testData/refactoring/extractMethod/SCR15815.java
new file mode 100644
index 0000000..fa7417f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/SCR15815.java
@@ -0,0 +1,10 @@
+public class Foo {
+    static Foo
+            f1 = new Foo(){
+                public String toString() {
+                    return <selection>"a" + "b"</selection>;
+                }
+            },
+            f2 = new Foo(){};
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/SCR15815_after.java b/java/java-tests/testData/refactoring/extractMethod/SCR15815_after.java
new file mode 100644
index 0000000..23a53de8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/SCR15815_after.java
@@ -0,0 +1,15 @@
+public class Foo {
+    static Foo
+            f1 = new Foo(){
+                public String toString() {
+                    return newMethod();
+                }
+            };
+
+    private static String newMethod() {
+        return "a" + "b";
+    }
+
+    static Foo f2 = new Foo(){};
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/SCR27887.java b/java/java-tests/testData/refactoring/extractMethod/SCR27887.java
new file mode 100644
index 0000000..b4a7b33
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/SCR27887.java
@@ -0,0 +1,41 @@
+package extractMethod;
+
+import java.io.*;
+import java.util.Iterator;
+
+public class SCR27887 {
+    public int publishx(OutputStream out, boolean includeCode) throws IOException {
+        if (VERBOSE) System.err.println("PUBLISH: publishing subsystem '" + subsystem.refQualifiedIdentifyingName() + "' with" + (includeCode ? "" : "out") + " code");
+        ZippingXMLGeneratorFactory genFac = new ZippingXMLGeneratorFactory(out);
+//========
+        <selection>RefObjectUList included = makeIncludedSet();
+        if (!included.isEmpty()) {
+            ScatteringDocBuilder docBuilder = new MyDocBuilder(repository, included);
+            new RepositorySaver(repository).saveTo(genFac, docBuilder);
+        }</selection>
+//========
+        if (includeCode) {
+            for (Iterator i = subsystem.getModule().iterator(); i.hasNext();) {
+                OptimalModule module = (OptimalModule) i.next();
+                if (module.getPublished()) {
+                    FileObject[] files = getModuleProducts(module);
+                    if (files != null && files.length > 0) {
+                        for (int j = 0; j < files.length; j++) {
+                            FileObject file = files[j];
+                            OutputStream os = genFac.getOutputStream(file.getFileName());
+                            InputStream is = file.getInputStream();
+                            try {
+                                copyStream(is, os);
+                            } finally {
+                                os.close();
+                                is.close();
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        genFac.close();
+        return included.size();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/extractMethod/SCR27887_after.java b/java/java-tests/testData/refactoring/extractMethod/SCR27887_after.java
new file mode 100644
index 0000000..b2e5e33
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/SCR27887_after.java
@@ -0,0 +1,46 @@
+package extractMethod;
+
+import java.io.*;
+import java.util.Iterator;
+
+public class SCR27887 {
+    public int publishx(OutputStream out, boolean includeCode) throws IOException {
+        if (VERBOSE) System.err.println("PUBLISH: publishing subsystem '" + subsystem.refQualifiedIdentifyingName() + "' with" + (includeCode ? "" : "out") + " code");
+        ZippingXMLGeneratorFactory genFac = new ZippingXMLGeneratorFactory(out);
+//========
+        RefObjectUList included = newMethod(genFac);
+//========
+        if (includeCode) {
+            for (Iterator i = subsystem.getModule().iterator(); i.hasNext();) {
+                OptimalModule module = (OptimalModule) i.next();
+                if (module.getPublished()) {
+                    FileObject[] files = getModuleProducts(module);
+                    if (files != null && files.length > 0) {
+                        for (int j = 0; j < files.length; j++) {
+                            FileObject file = files[j];
+                            OutputStream os = genFac.getOutputStream(file.getFileName());
+                            InputStream is = file.getInputStream();
+                            try {
+                                copyStream(is, os);
+                            } finally {
+                                os.close();
+                                is.close();
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        genFac.close();
+        return included.size();
+    }
+
+    private RefObjectUList newMethod(ZippingXMLGeneratorFactory genFac) {
+        RefObjectUList included = makeIncludedSet();
+        if (!included.isEmpty()) {
+            ScatteringDocBuilder docBuilder = new MyDocBuilder(repository, included);
+            new RepositorySaver(repository).saveTo(genFac, docBuilder);
+        }
+        return included;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/extractMethod/SCR28427.java b/java/java-tests/testData/refactoring/extractMethod/SCR28427.java
new file mode 100644
index 0000000..5f91e0c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/SCR28427.java
@@ -0,0 +1,5 @@
+class TestCase {
+  boolean a = true;
+  boolean b = false;
+  boolean x = <selection>a && b</selection>;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/SCR28427_after.java b/java/java-tests/testData/refactoring/extractMethod/SCR28427_after.java
new file mode 100644
index 0000000..aabffdf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/SCR28427_after.java
@@ -0,0 +1,9 @@
+class TestCase {
+  boolean a = true;
+  boolean b = false;
+  boolean x = newMethod();
+
+    private boolean newMethod() {
+        return a && b;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/SCR32924.java b/java/java-tests/testData/refactoring/extractMethod/SCR32924.java
new file mode 100644
index 0000000..1500589
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/SCR32924.java
@@ -0,0 +1,6 @@
+public class Test {
+    void m() {
+        Object x = null;
+        System.out.println("x = " + <selection>x</selection>); // [...] = selection
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/SCR32924_after.java b/java/java-tests/testData/refactoring/extractMethod/SCR32924_after.java
new file mode 100644
index 0000000..edb9a94
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/SCR32924_after.java
@@ -0,0 +1,10 @@
+public class Test {
+    void m() {
+        Object x = null;
+        System.out.println("x = " + newMethod(x)); // [...] = selection
+    }
+
+    private Object newMethod(Object x) {
+        return x;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/Scr10464.java b/java/java-tests/testData/refactoring/extractMethod/Scr10464.java
new file mode 100644
index 0000000..4e1d363
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/Scr10464.java
@@ -0,0 +1,9 @@
+class Test {
+    public Object method() {
+        <selection>bar();</selection>
+        return null;
+    }
+
+    public void bar() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/Scr10464_after.java b/java/java-tests/testData/refactoring/extractMethod/Scr10464_after.java
new file mode 100644
index 0000000..1cf0b58
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/Scr10464_after.java
@@ -0,0 +1,13 @@
+class Test {
+    public Object method() {
+        newMethod();
+        return null;
+    }
+
+    private void newMethod() {
+        bar();
+    }
+
+    public void bar() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/Scr6241.java b/java/java-tests/testData/refactoring/extractMethod/Scr6241.java
new file mode 100644
index 0000000..e7c8a2e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/Scr6241.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test extends GregorianCalendar {
+    public boolean isSaturday() {
+        return <selection>get( Calendar.DAY_OF_WEEK )</selection> == SATURDAY;
+    }    
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/Scr6241_after.java b/java/java-tests/testData/refactoring/extractMethod/Scr6241_after.java
new file mode 100644
index 0000000..6dc9793
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/Scr6241_after.java
@@ -0,0 +1,11 @@
+import java.util.*;
+
+class Test extends GregorianCalendar {
+    public boolean isSaturday() {
+        return newMethod() == SATURDAY;
+    }
+
+    private int newMethod() {
+        return get( Calendar.DAY_OF_WEEK );
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/Scr7091.java b/java/java-tests/testData/refactoring/extractMethod/Scr7091.java
new file mode 100644
index 0000000..b625d62
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/Scr7091.java
@@ -0,0 +1,29 @@
+public class IdeaTestBug {
+    public static final int MAP_HEIGHT = 1000;
+
+    Object[][] _map;
+
+    public int checkAndRemoveConditions() {
+        int conditionsFound = 0;
+        for (int y = 0; y < MAP_HEIGHT; y++) {
+            while (isCheckCondition(y)) {
+                ++conditionsFound;
+
+                <selection>final Object[] temp = _map[y];
+                for (int x = 0; x < temp.length; x++) {
+                    temp[x] = null;
+                }
+                for (int yy = y + 1; yy < MAP_HEIGHT; ++yy) {
+                    _map[yy - 1] = _map[yy];
+                }
+                _map[MAP_HEIGHT - 1] = temp;</selection>
+            }
+        }
+        return conditionsFound;
+    }
+
+    private boolean isCheckCondition(int y) {
+        return false;
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/Scr7091_after.java b/java/java-tests/testData/refactoring/extractMethod/Scr7091_after.java
new file mode 100644
index 0000000..da55234
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/Scr7091_after.java
@@ -0,0 +1,33 @@
+public class IdeaTestBug {
+    public static final int MAP_HEIGHT = 1000;
+
+    Object[][] _map;
+
+    public int checkAndRemoveConditions() {
+        int conditionsFound = 0;
+        for (int y = 0; y < MAP_HEIGHT; y++) {
+            while (isCheckCondition(y)) {
+                ++conditionsFound;
+
+                newMethod(y);
+            }
+        }
+        return conditionsFound;
+    }
+
+    private void newMethod(int y) {
+        final Object[] temp = _map[y];
+        for (int x = 0; x < temp.length; x++) {
+            temp[x] = null;
+        }
+        for (int yy = y + 1; yy < MAP_HEIGHT; ++yy) {
+            _map[yy - 1] = _map[yy];
+        }
+        _map[MAP_HEIGHT - 1] = temp;
+    }
+
+    private boolean isCheckCondition(int y) {
+        return false;
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/Scr9852.java b/java/java-tests/testData/refactoring/extractMethod/Scr9852.java
new file mode 100644
index 0000000..2ea69e4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/Scr9852.java
@@ -0,0 +1,9 @@
+class Test {
+    int f() {
+        try {
+            <selection>int k = 0;
+            return k;</selection>
+        } finally {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/Scr9852_after.java b/java/java-tests/testData/refactoring/extractMethod/Scr9852_after.java
new file mode 100644
index 0000000..5d301c5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/Scr9852_after.java
@@ -0,0 +1,13 @@
+class Test {
+    int f() {
+        try {
+            return newMethod();
+        } finally {
+        }
+    }
+
+    private int newMethod() {
+        int k = 0;
+        return k;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ShortCircuit.java b/java/java-tests/testData/refactoring/extractMethod/ShortCircuit.java
new file mode 100644
index 0000000..e69e733
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ShortCircuit.java
@@ -0,0 +1,6 @@
+public class Test {
+  void foo(String container) {
+    <selection>String parent;
+    if (container == null && (parent = null) != null && parent != null) {}</selection>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ShortCircuit_after.java b/java/java-tests/testData/refactoring/extractMethod/ShortCircuit_after.java
new file mode 100644
index 0000000..f3d7545
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ShortCircuit_after.java
@@ -0,0 +1,10 @@
+public class Test {
+  void foo(String container) {
+      newMethod(container);
+  }
+
+    private void newMethod(String container) {
+        String parent;
+        if (container == null && (parent = null) != null && parent != null) {}
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/SimpleArrayAccess.java b/java/java-tests/testData/refactoring/extractMethod/SimpleArrayAccess.java
new file mode 100644
index 0000000..8a8b85f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/SimpleArrayAccess.java
@@ -0,0 +1,5 @@
+class Test {
+  void foo(String[] ss) {
+    <selection>System.out.println(ss[0]);</selection>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/SimpleArrayAccess_after.java b/java/java-tests/testData/refactoring/extractMethod/SimpleArrayAccess_after.java
new file mode 100644
index 0000000..c1e0b27
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/SimpleArrayAccess_after.java
@@ -0,0 +1,9 @@
+class Test {
+  void foo(String[] ss) {
+      newMethod(ss[0]);
+  }
+
+    private void newMethod(String s) {
+        System.out.println(s);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/SkipComments.java b/java/java-tests/testData/refactoring/extractMethod/SkipComments.java
new file mode 100644
index 0000000..67326c9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/SkipComments.java
@@ -0,0 +1,5 @@
+class Test {
+  public static void main(String[] args) {
+    String arg = <selection>args[0];   //comment</selection>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/SkipComments_after.java b/java/java-tests/testData/refactoring/extractMethod/SkipComments_after.java
new file mode 100644
index 0000000..41c8c3d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/SkipComments_after.java
@@ -0,0 +1,9 @@
+class Test {
+  public static void main(String[] args) {
+    String arg = newMethod(args[0]);   //comment
+  }
+
+    private static String newMethod(String arg) {
+        return arg;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/StaticImport.java b/java/java-tests/testData/refactoring/extractMethod/StaticImport.java
new file mode 100644
index 0000000..ec79dd8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/StaticImport.java
@@ -0,0 +1,7 @@
+import static java.lang.Integer.MAX_VALUE;
+
+class StaticImport {
+    void test() {
+        <selection>System.out.println(MAX_VALUE);</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/StaticImport_after.java b/java/java-tests/testData/refactoring/extractMethod/StaticImport_after.java
new file mode 100644
index 0000000..7f24c0f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/StaticImport_after.java
@@ -0,0 +1,11 @@
+import static java.lang.Integer.MAX_VALUE;
+
+class StaticImport {
+    void test() {
+        newMethod();
+    }
+
+    private void newMethod() {
+        System.out.println(MAX_VALUE);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/StopFolding.java b/java/java-tests/testData/refactoring/extractMethod/StopFolding.java
new file mode 100644
index 0000000..24ca2dc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/StopFolding.java
@@ -0,0 +1,55 @@
+class A {
+    public static void main(String[] args) {
+        StatDescriptor[] allStatMembers = new StatDescriptor[] {};
+        WSStats[] allStats = new WSStats[] {};
+
+        StringBuffer sb = new StringBuffer();
+        sb.append("All stat members found:\n");
+        for (int i = 0; i < allStatMembers.length; i++) {
+            StatDescriptor statMember = allStatMembers[i];
+
+            <selection>
+            sb.append(statMember.toString());
+
+            sb.append(": [");
+
+            WSStatistic[] statistics = allStats[i].getStatistics();
+            for (int j = 0; j < statistics.length; j++) {
+                WSStatistic statistic = statistics[j];
+                sb.append(statistic.getId()).
+                        append('=').
+                        append(statistic.getName());
+                if (j < statistics.length - 1) {
+                    sb.append(", ");
+                }
+            }
+
+            sb.append("]\n");
+            </selection>
+        }
+    }
+
+    private class StatDescriptor {
+    }
+
+    private class WSStatistic {
+        private Object id;
+        private String name;
+
+        public Object getId() {
+            return id;
+        }
+
+        public String getName() {
+            return name;
+        }
+    }
+
+    private class WSStats {
+        private WSStatistic[] statistics;
+
+        public WSStatistic[] getStatistics() {
+            return statistics;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/StopFoldingPostfixInside.java b/java/java-tests/testData/refactoring/extractMethod/StopFoldingPostfixInside.java
new file mode 100644
index 0000000..45bf322
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/StopFoldingPostfixInside.java
@@ -0,0 +1,10 @@
+public class Devk {
+
+    void fr(String... params ) {
+        int idx = 0;
+        <selection>System.out.println(params[idx++]);
+        System.out.println(params[idx++]);
+        System.out.println(params[idx++]);
+        System.out.println(params[idx++]);</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/StopFoldingPostfixInside_after.java b/java/java-tests/testData/refactoring/extractMethod/StopFoldingPostfixInside_after.java
new file mode 100644
index 0000000..de629ec
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/StopFoldingPostfixInside_after.java
@@ -0,0 +1,14 @@
+public class Devk {
+
+    void fr(String... params ) {
+        int idx = 0;
+        newMethod(idx, params);
+    }
+
+    private void newMethod(int idx, String[] params) {
+        System.out.println(params[idx++]);
+        System.out.println(params[idx++]);
+        System.out.println(params[idx++]);
+        System.out.println(params[idx++]);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/StopFolding_after.java b/java/java-tests/testData/refactoring/extractMethod/StopFolding_after.java
new file mode 100644
index 0000000..de1ac84
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/StopFolding_after.java
@@ -0,0 +1,59 @@
+class A {
+    public static void main(String[] args) {
+        StatDescriptor[] allStatMembers = new StatDescriptor[] {};
+        WSStats[] allStats = new WSStats[] {};
+
+        StringBuffer sb = new StringBuffer();
+        sb.append("All stat members found:\n");
+        for (int i = 0; i < allStatMembers.length; i++) {
+            StatDescriptor statMember = allStatMembers[i];
+
+
+            newMethod(allStats[i], sb, statMember);
+            
+        }
+    }
+
+    private static void newMethod(WSStats allStat, StringBuffer sb, StatDescriptor statMember) {
+        sb.append(statMember.toString());
+
+        sb.append(": [");
+
+        WSStatistic[] statistics = allStat.getStatistics();
+        for (int j = 0; j < statistics.length; j++) {
+            WSStatistic statistic = statistics[j];
+            sb.append(statistic.getId()).
+                    append('=').
+                    append(statistic.getName());
+            if (j < statistics.length - 1) {
+                sb.append(", ");
+            }
+        }
+
+        sb.append("]\n");
+    }
+
+    private class StatDescriptor {
+    }
+
+    private class WSStatistic {
+        private Object id;
+        private String name;
+
+        public Object getId() {
+            return id;
+        }
+
+        public String getName() {
+            return name;
+        }
+    }
+
+    private class WSStats {
+        private WSStatistic[] statistics;
+
+        public WSStatistic[] getStatistics() {
+            return statistics;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ThisCall.java b/java/java-tests/testData/refactoring/extractMethod/ThisCall.java
new file mode 100644
index 0000000..163bcad
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ThisCall.java
@@ -0,0 +1,8 @@
+public class A {
+    A(String s) {
+    }
+
+    A() {
+        this(<selection>"a"</selection>);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/ThisCall_after.java b/java/java-tests/testData/refactoring/extractMethod/ThisCall_after.java
new file mode 100644
index 0000000..e30db82
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/ThisCall_after.java
@@ -0,0 +1,12 @@
+public class A {
+    A(String s) {
+    }
+
+    A() {
+        this(newMethod());
+    }
+
+    private static String newMethod() {
+        return "a";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/TryFinally.java b/java/java-tests/testData/refactoring/extractMethod/TryFinally.java
new file mode 100644
index 0000000..0a633e4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/TryFinally.java
@@ -0,0 +1,13 @@
+class TryFinally {
+    int method() {
+        String s = "abcd";
+     
+        <selection>StringBuffer buffer = new StringBuffer();
+        try {
+            buffer.append(s);
+            return buffer.length();
+        } finally {
+            buffer.clear();
+        }</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/TryFinallyInsideFor.java b/java/java-tests/testData/refactoring/extractMethod/TryFinallyInsideFor.java
new file mode 100644
index 0000000..d6e9305
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/TryFinallyInsideFor.java
@@ -0,0 +1,17 @@
+package extractMethod;
+
+import java.io.*;
+import java.util.Iterator;
+
+public class SCR27887 {
+    public int publishx(OutputStream out, boolean includeCode) throws IOException {
+        <selection>ScatteringDocBuilder docBuilder = new MyDocBuilder(repository, included);</selection>
+        while(true){
+          OutputStream os = null;
+          try {
+          } finally {
+            os.close();
+          }
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/extractMethod/TryFinallyInsideFor_after.java b/java/java-tests/testData/refactoring/extractMethod/TryFinallyInsideFor_after.java
new file mode 100644
index 0000000..1b5cd97
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/TryFinallyInsideFor_after.java
@@ -0,0 +1,21 @@
+package extractMethod;
+
+import java.io.*;
+import java.util.Iterator;
+
+public class SCR27887 {
+    public int publishx(OutputStream out, boolean includeCode) throws IOException {
+        newMethod();
+        while(true){
+          OutputStream os = null;
+          try {
+          } finally {
+            os.close();
+          }
+        }
+    }
+
+    private void newMethod() {
+        ScatteringDocBuilder docBuilder = new MyDocBuilder(repository, included);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/extractMethod/TryFinally_after.java b/java/java-tests/testData/refactoring/extractMethod/TryFinally_after.java
new file mode 100644
index 0000000..b4b7112
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/TryFinally_after.java
@@ -0,0 +1,17 @@
+class TryFinally {
+    int method() {
+        String s = "abcd";
+
+        return newMethod(s);
+    }
+
+    private int newMethod(String s) {
+        StringBuffer buffer = new StringBuffer();
+        try {
+            buffer.append(s);
+            return buffer.length();
+        } finally {
+            buffer.clear();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/TwoFromThreeEqStatements.java b/java/java-tests/testData/refactoring/extractMethod/TwoFromThreeEqStatements.java
new file mode 100644
index 0000000..1be7355
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/TwoFromThreeEqStatements.java
@@ -0,0 +1,8 @@
+class Test {
+
+    public static void main(String[] args) {
+        <selection>System.out.println("hello");
+                System.out.println("hello");</selection>
+                System.out.println("hello");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/TwoFromThreeEqStatements_after.java b/java/java-tests/testData/refactoring/extractMethod/TwoFromThreeEqStatements_after.java
new file mode 100644
index 0000000..0b1bc28
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/TwoFromThreeEqStatements_after.java
@@ -0,0 +1,12 @@
+class Test {
+
+    public static void main(String[] args) {
+        newMethod();
+                System.out.println("hello");
+    }
+
+    private static void newMethod() {
+        System.out.println("hello");
+        System.out.println("hello");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/TypeParamsList.java b/java/java-tests/testData/refactoring/extractMethod/TypeParamsList.java
new file mode 100644
index 0000000..e752fbf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/TypeParamsList.java
@@ -0,0 +1,11 @@
+class Test {
+  protected <T> void applyChanges(final T variable) {
+                 new Runnable() {
+                     @Override
+                     public void run() {
+                         <selection>System.out.println(variable);</selection>
+                     }
+                 }
+         ;
+     }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/TypeParamsList_after.java b/java/java-tests/testData/refactoring/extractMethod/TypeParamsList_after.java
new file mode 100644
index 0000000..8c545b8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/TypeParamsList_after.java
@@ -0,0 +1,15 @@
+class Test {
+  protected <T> void applyChanges(final T variable) {
+                 new Runnable() {
+                     @Override
+                     public void run() {
+                         newMethod(variable);
+                     }
+                 }
+         ;
+     }
+
+    private <T> void newMethod(T variable) {
+        System.out.println(variable);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/UnusedGenerics.java b/java/java-tests/testData/refactoring/extractMethod/UnusedGenerics.java
new file mode 100644
index 0000000..6882d54
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/UnusedGenerics.java
@@ -0,0 +1,6 @@
+class Test {
+  public <T> T method(Class<T> clazz) {
+    <selection>System.out.println();</selection>
+    return null;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/UnusedGenerics_after.java b/java/java-tests/testData/refactoring/extractMethod/UnusedGenerics_after.java
new file mode 100644
index 0000000..e918519
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/UnusedGenerics_after.java
@@ -0,0 +1,10 @@
+class Test {
+  public <T> T method(Class<T> clazz) {
+      newMethod();
+      return null;
+  }
+
+    private void newMethod() {
+        System.out.println();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/UnusedInitializedVar.java b/java/java-tests/testData/refactoring/extractMethod/UnusedInitializedVar.java
new file mode 100644
index 0000000..d5a5d63
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/UnusedInitializedVar.java
@@ -0,0 +1,14 @@
+class Foo {
+    private void bar() {
+        String text = null;
+        try {
+            <selection>text = getString();</selection>
+        }
+        catch(Exception e) {
+            System.out.println(text);
+        }
+    }
+    private void getString() {
+        return "hello";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/UnusedInitializedVar_after.java b/java/java-tests/testData/refactoring/extractMethod/UnusedInitializedVar_after.java
new file mode 100644
index 0000000..f6954c8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/UnusedInitializedVar_after.java
@@ -0,0 +1,21 @@
+class Foo {
+    private void bar() {
+        String text = null;
+        try {
+            text = newMethod();
+        }
+        catch(Exception e) {
+            System.out.println(text);
+        }
+    }
+
+    private String newMethod() {
+        String text;
+        text = getString();
+        return text;
+    }
+
+    private void getString() {
+        return "hello";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/UseVarAfterTry.java b/java/java-tests/testData/refactoring/extractMethod/UseVarAfterTry.java
new file mode 100644
index 0000000..0699236
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/UseVarAfterTry.java
@@ -0,0 +1,13 @@
+class A {
+    {
+        Object o;
+
+        try {
+            <selection>o = foo();</selection>
+        }
+        catch (Exception e) {
+        }
+
+        o.f();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/UseVarAfterTry_after.java b/java/java-tests/testData/refactoring/extractMethod/UseVarAfterTry_after.java
new file mode 100644
index 0000000..05b3b89
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/UseVarAfterTry_after.java
@@ -0,0 +1,19 @@
+class A {
+    {
+        Object o;
+
+        try {
+            o = newMethod();
+        }
+        catch (Exception e) {
+        }
+
+        o.f();
+    }
+
+    private Object newMethod() {
+        Object o;
+        o = foo();
+        return o;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/VarDeclAfterExpressionExtraction.java b/java/java-tests/testData/refactoring/extractMethod/VarDeclAfterExpressionExtraction.java
new file mode 100644
index 0000000..a757c44
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/VarDeclAfterExpressionExtraction.java
@@ -0,0 +1,34 @@
+class BasicLazyResolveTest {
+
+
+    public void test() {
+
+        Object session = <selection>new Object() {
+
+/*
+            public ClassMemberDeclarationProvider getClassMemberDeclarationProvider(JetClass jetClassOrObject) {
+                final JetClass jetClass = (JetClass) jetClassOrObject;
+                return new ClassMemberDeclarationProvider() {*/
+
+
+                    /*     private <D, T extends JetNamed> List<T> filter(List<D> list, final Class<T> t, final Name name) {
+                        //noinspection unchecked
+                        return (List) Lists.newArrayList(Collections2.filter(list, new Predicate<D>() {
+                            @Override
+                            public boolean apply(D d) {
+                                return t.isInstance(d) && ((JetNamed) d).getNameAsName().equals(name);
+                            }
+                        }));
+                    }*/
+
+
+             /*   };
+            }*/
+        }</selection>;
+
+        String packageDescriptor = session.toString();
+
+    }
+
+
+}
diff --git a/java/java-tests/testData/refactoring/extractMethod/VarDeclAfterExpressionExtraction_after.java b/java/java-tests/testData/refactoring/extractMethod/VarDeclAfterExpressionExtraction_after.java
new file mode 100644
index 0000000..cb7aeff
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/VarDeclAfterExpressionExtraction_after.java
@@ -0,0 +1,38 @@
+class BasicLazyResolveTest {
+
+
+    public void test() {
+
+        Object session = newMethod();
+
+        String packageDescriptor = session.toString();
+
+    }
+
+    private Object newMethod() {
+        return new Object() {
+
+/*
+            public ClassMemberDeclarationProvider getClassMemberDeclarationProvider(JetClass jetClassOrObject) {
+                final JetClass jetClass = (JetClass) jetClassOrObject;
+                return new ClassMemberDeclarationProvider() {*/
+
+
+                    /*     private <D, T extends JetNamed> List<T> filter(List<D> list, final Class<T> t, final Name name) {
+                        //noinspection unchecked
+                        return (List) Lists.newArrayList(Collections2.filter(list, new Predicate<D>() {
+                            @Override
+                            public boolean apply(D d) {
+                                return t.isInstance(d) && ((JetNamed) d).getNameAsName().equals(name);
+                            }
+                        }));
+                    }*/
+
+
+             /*   };
+            }*/
+        };
+    }
+
+
+}
diff --git a/java/java-tests/testData/refactoring/extractMethod/VerboseArrayAccess.java b/java/java-tests/testData/refactoring/extractMethod/VerboseArrayAccess.java
new file mode 100644
index 0000000..cb8c06d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/VerboseArrayAccess.java
@@ -0,0 +1,10 @@
+class Test {
+  void foo(String[] ss) {
+     for(int i = 0; i < ss.length; i++) {
+       <selection>
+       System.out.println(ss[i]);
+       System.out.println(ss[i+1]);
+       </selection>
+     }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/VerboseArrayAccess_after.java b/java/java-tests/testData/refactoring/extractMethod/VerboseArrayAccess_after.java
new file mode 100644
index 0000000..84f58e6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/VerboseArrayAccess_after.java
@@ -0,0 +1,14 @@
+class Test {
+  void foo(String[] ss) {
+     for(int i = 0; i < ss.length; i++) {
+
+         newMethod(ss, i);
+       
+     }
+  }
+
+    private void newMethod(String[] ss, int i) {
+        System.out.println(ss[i]);
+        System.out.println(ss[i+1]);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/WriteArrayAccess.java b/java/java-tests/testData/refactoring/extractMethod/WriteArrayAccess.java
new file mode 100644
index 0000000..39a38f7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/WriteArrayAccess.java
@@ -0,0 +1,7 @@
+class Test {
+  void foo(String[] ss) {
+     for(int i = 0; i < ss.length; i++) {
+       <selection>ss[i] = "";</selection>
+     }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod/WriteArrayAccess_after.java b/java/java-tests/testData/refactoring/extractMethod/WriteArrayAccess_after.java
new file mode 100644
index 0000000..2c0e117
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod/WriteArrayAccess_after.java
@@ -0,0 +1,11 @@
+class Test {
+  void foo(String[] ss) {
+     for(int i = 0; i < ss.length; i++) {
+         newMethod(ss, i);
+     }
+  }
+
+    private void newMethod(String[] ss, int i) {
+        ss[i] = "";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod15/CodeDuplicatesWithMultOccurences.java b/java/java-tests/testData/refactoring/extractMethod15/CodeDuplicatesWithMultOccurences.java
new file mode 100644
index 0000000..4cd295a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod15/CodeDuplicatesWithMultOccurences.java
@@ -0,0 +1,6 @@
+class Test {
+    void t(java.util.Map<String, String> m) {
+        String f = "";
+        System.out.println("f = " + <selection>f</selection> + ", " + m.get(f));
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethod15/CodeDuplicatesWithMultOccurences_after.java b/java/java-tests/testData/refactoring/extractMethod15/CodeDuplicatesWithMultOccurences_after.java
new file mode 100644
index 0000000..06cc3690
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethod15/CodeDuplicatesWithMultOccurences_after.java
@@ -0,0 +1,10 @@
+class Test {
+    void t(java.util.Map<String, String> m) {
+        String f = "";
+        System.out.println("f = " + newMethod(f) + ", " + newMethod(newMethod(f)));
+    }
+
+    private String newMethod(String f) {
+        return f;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/FieldUsage.java b/java/java-tests/testData/refactoring/extractMethodObject/FieldUsage.java
new file mode 100644
index 0000000..ce3ab37
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/FieldUsage.java
@@ -0,0 +1,9 @@
+class Test{
+  void fo<caret>o(int i){
+    i++;
+  }
+
+  void bar(Test t){
+    t.foo(1);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/FieldUsage.java.after b/java/java-tests/testData/refactoring/extractMethodObject/FieldUsage.java.after
new file mode 100644
index 0000000..5e3415d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/FieldUsage.java.after
@@ -0,0 +1,21 @@
+class Test{
+  void foo(int i){
+      new InnerClass(i).invoke();
+  }
+
+    void bar(Test t){
+    t.foo(1);
+  }
+
+    private class InnerClass {
+        private int i;
+
+        public InnerClass(int i) {
+            this.i = i;
+        }
+
+        public void invoke() {
+            i++;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/MethodInHierarchy.java b/java/java-tests/testData/refactoring/extractMethodObject/MethodInHierarchy.java
new file mode 100644
index 0000000..7637717
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/MethodInHierarchy.java
@@ -0,0 +1,14 @@
+class Test {
+  void bar() {
+    new B<String>().foo("");
+  }
+
+  class A<T> {
+    void foo(T t){}
+  }
+
+  class B<E> extends A<E> {
+    void fo<caret>o(E e){System.out.println(e);}
+  }
+}
+
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/MethodInHierarchy.java.after b/java/java-tests/testData/refactoring/extractMethodObject/MethodInHierarchy.java.after
new file mode 100644
index 0000000..45f156b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/MethodInHierarchy.java.after
@@ -0,0 +1,28 @@
+class Test {
+  void bar() {
+    new B<String>().foo("");
+  }
+
+  class A<T> {
+    void foo(T t){}
+  }
+
+  class B<E> extends A<E> {
+    void foo(E e){
+        new InnerClass(e).invoke();
+    }
+
+      private class InnerClass {
+          private E e;
+
+          public InnerClass(E e) {
+              this.e = e;
+          }
+
+          public void invoke() {
+              System.out.println(e);
+          }
+      }
+  }
+}
+
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/MethodInHierarchyReturn.java b/java/java-tests/testData/refactoring/extractMethodObject/MethodInHierarchyReturn.java
new file mode 100644
index 0000000..c3ae7a2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/MethodInHierarchyReturn.java
@@ -0,0 +1,17 @@
+class Test {
+   class A {
+     String foo(){
+       return null;
+     }
+   }
+
+   class B extends A {
+     String fo<caret>o(){
+       return null;
+     }
+   }
+
+   String bar(B b) {
+     return b.foo();
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/MethodInHierarchyReturn.java.after b/java/java-tests/testData/refactoring/extractMethodObject/MethodInHierarchyReturn.java.after
new file mode 100644
index 0000000..1a254c1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/MethodInHierarchyReturn.java.after
@@ -0,0 +1,23 @@
+class Test {
+   class A {
+     String foo(){
+       return null;
+     }
+   }
+
+   class B extends A {
+     String foo(){
+         return new InnerClass().invoke();
+     }
+
+       private class InnerClass {
+           public String invoke() {
+               return null;
+           }
+       }
+   }
+
+   String bar(B b) {
+     return b.foo();
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/Qualifier.java b/java/java-tests/testData/refactoring/extractMethodObject/Qualifier.java
new file mode 100644
index 0000000..4208cb8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/Qualifier.java
@@ -0,0 +1,8 @@
+class Test {
+  void bar(A a){
+    a.foo();
+  }
+  class A {
+    void f<caret>oo(){int i = 0;}
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/Qualifier.java.after b/java/java-tests/testData/refactoring/extractMethodObject/Qualifier.java.after
new file mode 100644
index 0000000..69fba07
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/Qualifier.java.after
@@ -0,0 +1,16 @@
+class Test {
+  void bar(A a){
+    a.foo();
+  }
+  class A {
+    void foo(){
+        new InnerClass().invoke();
+    }
+
+      private class InnerClass {
+          public void invoke() {
+              int i = 0;
+          }
+      }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/Recursion.java b/java/java-tests/testData/refactoring/extractMethodObject/Recursion.java
new file mode 100644
index 0000000..854cb1e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/Recursion.java
@@ -0,0 +1,10 @@
+class Test {
+    void b<caret>ar(int i) {
+        if (i == 0) return;
+        bar(i - 1);
+    }
+
+    void foo() {
+        bar(5);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/Recursion.java.after b/java/java-tests/testData/refactoring/extractMethodObject/Recursion.java.after
new file mode 100644
index 0000000..4dcbe7c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/Recursion.java.after
@@ -0,0 +1,22 @@
+class Test {
+    void bar(int i) {
+        new InnerClass(i).invoke();
+    }
+
+    void foo() {
+        bar(5);
+    }
+
+    private class InnerClass {
+        private int i;
+
+        public InnerClass(int i) {
+            this.i = i;
+        }
+
+        public void invoke() {
+            if (i == 0) return;
+            bar(i - 1);
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/Static.java b/java/java-tests/testData/refactoring/extractMethodObject/Static.java
new file mode 100644
index 0000000..0260ef5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/Static.java
@@ -0,0 +1,6 @@
+class Test {
+  static void f<caret>oo(){int i = 0;}
+  void bar() {
+    foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/Static.java.after b/java/java-tests/testData/refactoring/extractMethodObject/Static.java.after
new file mode 100644
index 0000000..41cb2eb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/Static.java.after
@@ -0,0 +1,15 @@
+class Test {
+  static void foo(){
+      InnerClass.invoke();
+  }
+
+    void bar() {
+    foo();
+  }
+
+    private static class InnerClass {
+        private static void invoke() {
+            int i = 0;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/StaticTypeParams.java b/java/java-tests/testData/refactoring/extractMethodObject/StaticTypeParams.java
new file mode 100644
index 0000000..3e42f5a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/StaticTypeParams.java
@@ -0,0 +1,6 @@
+class Test {
+     void bar() {
+       foo("");
+     }
+     static <T> void f<caret>oo(T t){System.out.println(t);}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/StaticTypeParams.java.after b/java/java-tests/testData/refactoring/extractMethodObject/StaticTypeParams.java.after
new file mode 100644
index 0000000..66eea49
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/StaticTypeParams.java.after
@@ -0,0 +1,20 @@
+class Test {
+     void bar() {
+       foo("");
+     }
+     static <T> void foo(T t){
+         new InnerClass<T>(t).invoke();
+     }
+
+    private static class InnerClass<T> {
+        private T t;
+
+        public InnerClass(T t) {
+            this.t = t;
+        }
+
+        public void invoke() {
+            System.out.println(t);
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/StaticTypeParamsRecursive.java b/java/java-tests/testData/refactoring/extractMethodObject/StaticTypeParamsRecursive.java
new file mode 100644
index 0000000..807d63a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/StaticTypeParamsRecursive.java
@@ -0,0 +1,8 @@
+class Test {
+     void bar() {
+       foo("");
+     }
+     static <T> void f<caret>oo(T t){
+       if (t != null) foo(t);
+     }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/StaticTypeParamsRecursive.java.after b/java/java-tests/testData/refactoring/extractMethodObject/StaticTypeParamsRecursive.java.after
new file mode 100644
index 0000000..f87edd2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/StaticTypeParamsRecursive.java.after
@@ -0,0 +1,20 @@
+class Test {
+     void bar() {
+       foo("");
+     }
+     static <T> void foo(T t){
+         new InnerClass<T>(t).invoke();
+     }
+
+    private static class InnerClass<T> {
+        private T t;
+
+        public InnerClass(T t) {
+            this.t = t;
+        }
+
+        public void invoke() {
+            if (t != null) foo(t);
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/StaticTypeParamsReturn.java b/java/java-tests/testData/refactoring/extractMethodObject/StaticTypeParamsReturn.java
new file mode 100644
index 0000000..f2cc1c9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/StaticTypeParamsReturn.java
@@ -0,0 +1,6 @@
+class Test {
+     void bar() {
+       String str = foo();
+     }
+     static <T> T fo<caret>o(){return null;}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/StaticTypeParamsReturn.java.after b/java/java-tests/testData/refactoring/extractMethodObject/StaticTypeParamsReturn.java.after
new file mode 100644
index 0000000..2100f1c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/StaticTypeParamsReturn.java.after
@@ -0,0 +1,14 @@
+class Test {
+     void bar() {
+       String str = foo();
+     }
+     static <T> T foo(){
+         return InnerClass.invoke();
+     }
+
+    private static class InnerClass {
+        private static <T> T invoke() {
+            return null;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/StaticTypeParamsReturnNoDelete.java b/java/java-tests/testData/refactoring/extractMethodObject/StaticTypeParamsReturnNoDelete.java
new file mode 100644
index 0000000..e33c361
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/StaticTypeParamsReturnNoDelete.java
@@ -0,0 +1,9 @@
+class Test {
+    static <T> T f<caret>oo() {
+        return null;
+    }
+
+    void bar() {
+       foo();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/StaticTypeParamsReturnNoDelete.java.after b/java/java-tests/testData/refactoring/extractMethodObject/StaticTypeParamsReturnNoDelete.java.after
new file mode 100644
index 0000000..468ae4a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/StaticTypeParamsReturnNoDelete.java.after
@@ -0,0 +1,15 @@
+class Test {
+    static <T> T foo() {
+        return InnerClass.invoke();
+    }
+
+    void bar() {
+       foo();
+    }
+
+    private static class InnerClass {
+        private static <T> T invoke() {
+            return null;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/TypeParams.java b/java/java-tests/testData/refactoring/extractMethodObject/TypeParams.java
new file mode 100644
index 0000000..e15dbd3e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/TypeParams.java
@@ -0,0 +1,7 @@
+class Test {
+   <T> void fo<caret>o(T t){System.out.println(t);}
+
+   void bar() {
+     foo("");
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/TypeParams.java.after b/java/java-tests/testData/refactoring/extractMethodObject/TypeParams.java.after
new file mode 100644
index 0000000..5ae5364
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/TypeParams.java.after
@@ -0,0 +1,21 @@
+class Test {
+   <T> void foo(T t){
+       new InnerClass<T>(t).invoke();
+   }
+
+    void bar() {
+     foo("");
+   }
+
+    private class InnerClass<T> {
+        private T t;
+
+        public InnerClass(T t) {
+            this.t = t;
+        }
+
+        public void invoke() {
+            System.out.println(t);
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/TypeParamsReturn.java b/java/java-tests/testData/refactoring/extractMethodObject/TypeParamsReturn.java
new file mode 100644
index 0000000..f22df85
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/TypeParamsReturn.java
@@ -0,0 +1,6 @@
+class Test {
+  <T> T fo<caret>o(){return null;}
+  void bar(){
+    String s = foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/TypeParamsReturn.java.after b/java/java-tests/testData/refactoring/extractMethodObject/TypeParamsReturn.java.after
new file mode 100644
index 0000000..f93f270
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/TypeParamsReturn.java.after
@@ -0,0 +1,15 @@
+class Test {
+  <T> T foo(){
+      return new InnerClass<T>().invoke();
+  }
+
+    void bar(){
+    String s = foo();
+  }
+
+    private class InnerClass<T> {
+        public T invoke() {
+            return null;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/Varargs.java b/java/java-tests/testData/refactoring/extractMethodObject/Varargs.java
new file mode 100644
index 0000000..b92a31e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/Varargs.java
@@ -0,0 +1,8 @@
+class Test {
+  <T> void fo<caret>o(T... t){
+      for (T t1 : t) {} 
+  }
+  void bar(){
+    foo("");
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/Varargs.java.after b/java/java-tests/testData/refactoring/extractMethodObject/Varargs.java.after
new file mode 100644
index 0000000..df1a88c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/Varargs.java.after
@@ -0,0 +1,21 @@
+class Test {
+  <T> void foo(T... t){
+      new InnerClass<T>(t).invoke();
+  }
+
+    void bar(){
+    foo("");
+  }
+
+    private class InnerClass<T> {
+        private T[] t;
+
+        public InnerClass(T[] t) {
+            this.t = t;
+        }
+
+        public void invoke() {
+            for (T t1 : t) {}
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/WithPrivateMethodUsed.java b/java/java-tests/testData/refactoring/extractMethodObject/WithPrivateMethodUsed.java
new file mode 100644
index 0000000..0707210
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/WithPrivateMethodUsed.java
@@ -0,0 +1,9 @@
+public class XXX {
+  void f<caret>oo() {
+    int i = 0 ;
+    bar(i);
+    System.out.println(i);
+  }
+
+  private void bar(int i){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/WithPrivateMethodUsed.java.after b/java/java-tests/testData/refactoring/extractMethodObject/WithPrivateMethodUsed.java.after
new file mode 100644
index 0000000..e8ccb2f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/WithPrivateMethodUsed.java.after
@@ -0,0 +1,15 @@
+public class XXX {
+  void foo() {
+      new InnerClass().invoke();
+  }
+
+    private class InnerClass {
+        public void invoke() {
+            int i = 0 ;
+            bar(i);
+            System.out.println(i);
+        }
+
+        private void bar(int i){}
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/WithPrivateMethodUsed1.java b/java/java-tests/testData/refactoring/extractMethodObject/WithPrivateMethodUsed1.java
new file mode 100644
index 0000000..e2c3ea2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/WithPrivateMethodUsed1.java
@@ -0,0 +1,52 @@
+import java.util.Date;
+
+public class TestClass {
+
+    private Date expiry;
+    private Date maturity;
+    private int commitment;
+    private double outstanding;
+    private Iterable payments;
+    private Date today;
+    private Date start;
+    private int riskRating;
+
+
+    public double cal<caret>culate() {
+        return ( outstandingRiskAmount() * duration() * riskFactor() ) + ( unusedRiskAmount() * duration() * unusedRiskFactor() );
+    }
+
+    private double riskFactor() {
+        return 5.0;
+    }
+
+    private double unusedRiskFactor() {
+        return 6.0;
+    }
+
+    private double unusedRiskAmount() {
+        return ( commitment - outstanding );
+    }
+
+    private double outstandingRiskAmount() {
+        return outstanding;
+    }
+
+    private double getUsedPercentage() {
+        return 1.0;
+    }
+
+    private double duration() {
+        if ( expiry == null && maturity != null ) {
+            return 1.0;
+        } else if ( expiry != null && maturity == null ) {
+            return yearsTo( expiry );
+        }
+        return 0.0;
+    }
+
+    private double yearsTo( final Date endDate ) {
+        Date beginDate = ( today == null ? start : today );
+        return ( ( endDate.getTime() - beginDate.getTime() ));
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/WithPrivateMethodUsed1.java.after b/java/java-tests/testData/refactoring/extractMethodObject/WithPrivateMethodUsed1.java.after
new file mode 100644
index 0000000..c4543e3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/WithPrivateMethodUsed1.java.after
@@ -0,0 +1,58 @@
+import java.util.Date;
+
+public class TestClass {
+
+    private Date expiry;
+    private Date maturity;
+    private int commitment;
+    private double outstanding;
+    private Iterable payments;
+    private Date today;
+    private Date start;
+    private int riskRating;
+
+
+    public double calculate() {
+        return new InnerClass().invoke();
+    }
+
+    private double getUsedPercentage() {
+        return 1.0;
+    }
+
+    private double yearsTo( final Date endDate ) {
+        Date beginDate = ( today == null ? start : today );
+        return ( ( endDate.getTime() - beginDate.getTime() ));
+    }
+
+    private class InnerClass {
+        public double invoke() {
+            return ( outstandingRiskAmount() * duration() * riskFactor() ) + ( unusedRiskAmount() * duration() * unusedRiskFactor() );
+        }
+
+        private double outstandingRiskAmount() {
+            return outstanding;
+        }
+
+        private double duration() {
+            if ( expiry == null && maturity != null ) {
+                return 1.0;
+            } else if ( expiry != null && maturity == null ) {
+                return yearsTo( expiry );
+            }
+            return 0.0;
+        }
+
+        private double riskFactor() {
+            return 5.0;
+        }
+
+        private double unusedRiskAmount() {
+            return ( commitment - outstanding );
+        }
+
+        private double unusedRiskFactor() {
+            return 6.0;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/WithPrivateMethodWhichCantBeMoved.java b/java/java-tests/testData/refactoring/extractMethodObject/WithPrivateMethodWhichCantBeMoved.java
new file mode 100644
index 0000000..5da2f27
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/WithPrivateMethodWhichCantBeMoved.java
@@ -0,0 +1,13 @@
+public class XXX {
+  void f<caret>oo() {
+    int i = 0 ;
+    bar(i);
+    System.out.println(i);
+  }
+
+  void bazz() {
+    bar(0);
+  }
+
+  private void bar(int i){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/WithPrivateMethodWhichCantBeMoved.java.after b/java/java-tests/testData/refactoring/extractMethodObject/WithPrivateMethodWhichCantBeMoved.java.after
new file mode 100644
index 0000000..fcbe4e0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/WithPrivateMethodWhichCantBeMoved.java.after
@@ -0,0 +1,19 @@
+public class XXX {
+  void foo() {
+      new InnerClass().invoke();
+  }
+
+    void bazz() {
+    bar(0);
+  }
+
+  private void bar(int i){}
+
+    private class InnerClass {
+        public void invoke() {
+            int i = 0 ;
+            bar(i);
+            System.out.println(i);
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/WrapWithObject.java b/java/java-tests/testData/refactoring/extractMethodObject/WrapWithObject.java
new file mode 100644
index 0000000..28926e6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/WrapWithObject.java
@@ -0,0 +1,9 @@
+class Test {
+  void f<caret>oo(int i, int... j) {
+    if (i == 0) {
+        for (int idx : j) {
+
+        }
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/WrapWithObject.java.after b/java/java-tests/testData/refactoring/extractMethodObject/WrapWithObject.java.after
new file mode 100644
index 0000000..a226076
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/WrapWithObject.java.after
@@ -0,0 +1,13 @@
+class Test {
+  void foo(int i, int... j) {
+      new Object() {
+          private void InnerClass(int i, int[] j) {
+              if (i == 0) {
+                  for (int idx : j) {
+
+                  }
+              }
+          }
+      }.InnerClass(i, j);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/WrapWithObjectRecursive.java b/java/java-tests/testData/refactoring/extractMethodObject/WrapWithObjectRecursive.java
new file mode 100644
index 0000000..0e8fab2f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/WrapWithObjectRecursive.java
@@ -0,0 +1,6 @@
+class Test {
+  int f<caret>oo(int i) {
+      if (i == 0) return -1;
+      return foo(i - 1);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/WrapWithObjectRecursive.java.after b/java/java-tests/testData/refactoring/extractMethodObject/WrapWithObjectRecursive.java.after
new file mode 100644
index 0000000..b33747f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/WrapWithObjectRecursive.java.after
@@ -0,0 +1,10 @@
+class Test {
+  int foo(int i) {
+      return new Object() {
+          private int InnerClass(int i) {
+              if (i == 0) return -1;
+              return foo(i - 1);
+          }
+      }.InnerClass(i);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/BatchUpdateCausedByFormatter.java b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/BatchUpdateCausedByFormatter.java
new file mode 100644
index 0000000..f65828c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/BatchUpdateCausedByFormatter.java
@@ -0,0 +1,37 @@
+import java.util.*;
+
+public class ABug {
+
+    private String drinkBear(String amount) {
+        String firstTime = "asdf";
+
+        if (firstTime == null)
+            return "loser";
+
+        ArrayList<String> bottles = new ArrayList<>();
+        bottles.add("asdf");
+
+        <selection>List<String> errors = new ArrayList<>();
+
+        int money = 0;
+        int nCount = 0;
+        int rCount = 0;
+        int wCount = 0;
+        char[] tripel = new char[bottles.size()];
+        boolean no33pr = false;
+        int first = 0;
+        int last = 0;
+        if (true) return null;</selection>
+
+        boolean unhappy = no33pr && first || no33pr && last;
+
+        String result = amount + Arrays.toString(tripel) + rCount + wCount + nCount + money + errors;
+
+        if (!unhappy)
+            result += "happy";
+
+
+        return result;
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/BatchUpdateCausedByFormatter.java.after b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/BatchUpdateCausedByFormatter.java.after
new file mode 100644
index 0000000..5b04adf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/BatchUpdateCausedByFormatter.java.after
@@ -0,0 +1,113 @@
+import java.util.*;
+
+public class ABug {
+
+    private String drinkBear(String amount) {
+        String firstTime = "asdf";
+
+        if (firstTime == null)
+            return "loser";
+
+        ArrayList<String> bottles = new ArrayList<>();
+        bottles.add("asdf");
+
+        Inner inner = new Inner(bottles).invoke();
+        if (inner.is()) return null;
+        boolean no33pr = inner.isNo33pr();
+        int first = inner.getFirst();
+        int last = inner.getLast();
+        char[] tripel = inner.getTripel();
+        int rCount = inner.getrCount();
+        int wCount = inner.getwCount();
+        int nCount = inner.getnCount();
+        int money = inner.getMoney();
+        List<String> errors = inner.getErrors();
+
+        boolean unhappy = no33pr && first || no33pr && last;
+
+        String result = amount + Arrays.toString(tripel) + rCount + wCount + nCount + money + errors;
+
+        if (!unhappy)
+            result += "happy";
+
+
+        return result;
+    }
+
+    private class Inner {
+        private boolean myResult;
+        private ArrayList<String> bottles;
+        private List<String> errors;
+        private int money;
+        private int nCount;
+        private int rCount;
+        private int wCount;
+        private char[] tripel;
+        private boolean no33pr;
+        private int first;
+        private int last;
+
+        public Inner(ArrayList<String> bottles) {
+            this.bottles = bottles;
+        }
+
+        boolean is() {
+            return myResult;
+        }
+
+        public List<String> getErrors() {
+            return errors;
+        }
+
+        public int getMoney() {
+            return money;
+        }
+
+        public int getnCount() {
+            return nCount;
+        }
+
+        public int getrCount() {
+            return rCount;
+        }
+
+        public int getwCount() {
+            return wCount;
+        }
+
+        public char[] getTripel() {
+            return tripel;
+        }
+
+        public boolean isNo33pr() {
+            return no33pr;
+        }
+
+        public int getFirst() {
+            return first;
+        }
+
+        public int getLast() {
+            return last;
+        }
+
+        public Inner invoke() {
+            errors = new ArrayList<>();
+
+            money = 0;
+            nCount = 0;
+            rCount = 0;
+            wCount = 0;
+            tripel = new char[bottles.size()];
+            no33pr = false;
+            first = 0;
+            last = 0;
+            if (true) {
+                myResult = true;
+                return this;
+            }
+            myResult = false;
+            return this;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/ConditionalExit.java b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/ConditionalExit.java
new file mode 100644
index 0000000..b8778cb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/ConditionalExit.java
@@ -0,0 +1,9 @@
+class Foo {
+  String foo() {
+    <selection>String var = null;
+    if (var == null) {
+      return "";
+    }</selection>
+    System.out.println(var);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/ConditionalExit.java.after b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/ConditionalExit.java.after
new file mode 100644
index 0000000..0e4ca64
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/ConditionalExit.java.after
@@ -0,0 +1,31 @@
+class Foo {
+  String foo() {
+      Inner inner = new Inner().invoke();
+      if (inner.is()) return "";
+      String var = inner.getVar();
+    System.out.println(var);
+  }
+
+    private class Inner {
+        private boolean myResult;
+        private String var;
+
+        boolean is() {
+            return myResult;
+        }
+
+        public String getVar() {
+            return var;
+        }
+
+        public Inner invoke() {
+            var = null;
+            if (var == null) {
+                myResult = true;
+                return this;
+            }
+            myResult = false;
+            return this;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/ConditionalExitWithoutCodeBlock.java b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/ConditionalExitWithoutCodeBlock.java
new file mode 100644
index 0000000..0f257ba
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/ConditionalExitWithoutCodeBlock.java
@@ -0,0 +1,10 @@
+class Test {
+  void foo(String[] args){
+    for (String aArg : args) {
+      <selection>boolean a = aArg == null;
+      if (aArg == null) continue;</selection>
+
+      System.out.println(aArg + a);
+    }
+  }
+}
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/ConditionalExitWithoutCodeBlock.java.after b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/ConditionalExitWithoutCodeBlock.java.after
new file mode 100644
index 0000000..5992e18
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/ConditionalExitWithoutCodeBlock.java.after
@@ -0,0 +1,39 @@
+class Test {
+  void foo(String[] args){
+    for (String aArg : args) {
+        Inner inner = new Inner(aArg).invoke();
+        if (inner.is()) continue;
+        boolean a = inner.isA();
+
+      System.out.println(aArg + a);
+    }
+  }
+
+    private class Inner {
+        private boolean myResult;
+        private String aArg;
+        private boolean a;
+
+        public Inner(String aArg) {
+            this.aArg = aArg;
+        }
+
+        boolean is() {
+            return myResult;
+        }
+
+        public boolean isA() {
+            return a;
+        }
+
+        public Inner invoke() {
+            a = aArg == null;
+            if (aArg == null) {
+                myResult = true;
+                return this;
+            }
+            myResult = false;
+            return this;
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/ExtractFromAnonymous.java b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/ExtractFromAnonymous.java
new file mode 100644
index 0000000..7483622
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/ExtractFromAnonymous.java
@@ -0,0 +1,11 @@
+class Test {
+  void foo() {
+    new Runnable() {
+      public void run() {
+        <selection>int i = 0;
+        int j = 0;</selection>
+        System.out.println(i + j);
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/ExtractFromAnonymous.java.after b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/ExtractFromAnonymous.java.after
new file mode 100644
index 0000000..ddfa52b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/ExtractFromAnonymous.java.after
@@ -0,0 +1,31 @@
+class Test {
+  void foo() {
+    new Runnable() {
+      public void run() {
+          Inner inner = new Inner().invoke();
+          int i = inner.getI();
+          int j = inner.getJ();
+        System.out.println(i + j);
+      }
+    }
+  }
+
+    private class Inner {
+        private int i;
+        private int j;
+
+        public int getI() {
+            return i;
+        }
+
+        public int getJ() {
+            return j;
+        }
+
+        public Inner invoke() {
+            i = 0;
+            j = 0;
+            return this;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/ExtractFromIfStatementInsideAnonymous.java b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/ExtractFromIfStatementInsideAnonymous.java
new file mode 100644
index 0000000..7b245b2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/ExtractFromIfStatementInsideAnonymous.java
@@ -0,0 +1,13 @@
+class Test {
+  void foo() {
+    new Runnable() {
+      public void run() {
+          <selection>String var = null;
+          if (var == null) {
+            return;
+          }</selection>
+          System.out.println(var);
+      }
+    };
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/ExtractFromIfStatementInsideAnonymous.java.after b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/ExtractFromIfStatementInsideAnonymous.java.after
new file mode 100644
index 0000000..128fea4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/ExtractFromIfStatementInsideAnonymous.java.after
@@ -0,0 +1,35 @@
+class Test {
+  void foo() {
+    new Runnable() {
+      public void run() {
+          Inner inner = new Inner().invoke();
+          if (inner.is()) return;
+          String var = inner.getVar();
+          System.out.println(var);
+      }
+    };
+  }
+
+    private class Inner {
+        private boolean myResult;
+        private String var;
+
+        boolean is() {
+            return myResult;
+        }
+
+        public String getVar() {
+            return var;
+        }
+
+        public Inner invoke() {
+            var = null;
+            if (var == null) {
+                myResult = true;
+                return this;
+            }
+            myResult = false;
+            return this;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/ExtractedAssignmentExpression.java b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/ExtractedAssignmentExpression.java
new file mode 100644
index 0000000..4afa5b0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/ExtractedAssignmentExpression.java
@@ -0,0 +1,7 @@
+class Test {
+  void foo() {
+    int x = 0;
+    int y = <selection>x = 1</selection>;
+    System.out.println(x + y);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/ExtractedAssignmentExpression.java.after b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/ExtractedAssignmentExpression.java.after
new file mode 100644
index 0000000..648bace
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/ExtractedAssignmentExpression.java.after
@@ -0,0 +1,22 @@
+class Test {
+  void foo() {
+    int x = 0;
+      Inner inner = new Inner().invoke();
+      x = inner.getX();
+      int y = x;
+    System.out.println(x + y);
+  }
+
+    private class Inner {
+        private int x;
+
+        public int getX() {
+            return x;
+        }
+
+        public Inner invoke() {
+            x = 1;
+            return this;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/ExtractedIncExpression.java b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/ExtractedIncExpression.java
new file mode 100644
index 0000000..cf981e6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/ExtractedIncExpression.java
@@ -0,0 +1,7 @@
+class Test {
+  void foo() {
+    int x = 0;
+    int y = <selection>x++</selection>;
+    System.out.println(x + y);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/ExtractedIncExpression.java.after b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/ExtractedIncExpression.java.after
new file mode 100644
index 0000000..7f4f3cf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/ExtractedIncExpression.java.after
@@ -0,0 +1,26 @@
+class Test {
+  void foo() {
+    int x = 0;
+      Inner inner = new Inner(x).invoke();
+      x = inner.getX();
+      int y = x;
+    System.out.println(x + y);
+  }
+
+    private class Inner {
+        private int x;
+
+        public Inner(int x) {
+            this.x = x;
+        }
+
+        public int getX() {
+            return x;
+        }
+
+        public Inner invoke() {
+            x++;
+            return this;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/FromStaticContext.java b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/FromStaticContext.java
new file mode 100644
index 0000000..b1ac463
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/FromStaticContext.java
@@ -0,0 +1,12 @@
+class Bag {
+    Integer x;
+    Integer y;
+}
+
+class Foo {
+    public static void foo() {
+        Bag b = new Bag();
+        System.out.println(<selection>b</selection>.x);
+        System.out.println(b.x);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/FromStaticContext.java.after b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/FromStaticContext.java.after
new file mode 100644
index 0000000..cc2caec
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/FromStaticContext.java.after
@@ -0,0 +1,24 @@
+class Bag {
+    Integer x;
+    Integer y;
+}
+
+class Foo {
+    public static void foo() {
+        Bag b = new Bag();
+        System.out.println(new Inner(b).invoke().x);
+        System.out.println(new Inner(b).invoke().x);
+    }
+
+    private static class Inner {
+        private Bag b;
+
+        public Inner(Bag b) {
+            this.b = b;
+        }
+
+        public Bag invoke() {
+            return b;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/InputOutput.java b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/InputOutput.java
new file mode 100644
index 0000000..2748e5c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/InputOutput.java
@@ -0,0 +1,12 @@
+class Test {
+   void foo() {
+      int i = 0;
+        int j = 0;
+        <selection>
+        int k =  i + j;
+        j = 9;
+        </selection>
+        int n = i+j;
+        int m = k;
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/InputOutput.java.after b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/InputOutput.java.after
new file mode 100644
index 0000000..f3f8293
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/InputOutput.java.after
@@ -0,0 +1,38 @@
+class Test {
+   void foo() {
+      int i = 0;
+        int j = 0;
+
+       Inner inner = new Inner(i, j).invoke();
+       j = inner.getJ();
+       int k = inner.getK();
+        
+        int n = i+j;
+        int m = k;
+   }
+
+    private class Inner {
+        private int i;
+        private int j;
+        private int k;
+
+        public Inner(int i, int j) {
+            this.i = i;
+            this.j = j;
+        }
+
+        public int getJ() {
+            return j;
+        }
+
+        public int getK() {
+            return k;
+        }
+
+        public Inner invoke() {
+            k = i + j;
+            j = 9;
+            return this;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/MultilineDeclarations.java b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/MultilineDeclarations.java
new file mode 100644
index 0000000..89619d3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/MultilineDeclarations.java
@@ -0,0 +1,9 @@
+class Test {
+    public void context1() {
+        <selection>int i = 0, j = 0;
+        int k = i + j;
+        </selection>
+        System.out.println(MessageFormat.format("i: {0}", i));
+        System.out.println(MessageFormat.format("k: {0}", j));
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/MultilineDeclarations.java.after b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/MultilineDeclarations.java.after
new file mode 100644
index 0000000..74d934b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/MultilineDeclarations.java.after
@@ -0,0 +1,30 @@
+class Test {
+    public void context1() {
+        Inner inner = new Inner().invoke();
+        int i = inner.getI();
+        int j = inner.getJ();
+        
+        System.out.println(MessageFormat.format("i: {0}", i));
+        System.out.println(MessageFormat.format("k: {0}", j));
+    }
+
+    private class Inner {
+        private int i;
+        private int j;
+
+        public int getI() {
+            return i;
+        }
+
+        public int getJ() {
+            return j;
+        }
+
+        public Inner invoke() {
+            i = 0;
+            j = 0;
+            int k = i + j;
+            return this;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/NonCanonicalNaming.java b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/NonCanonicalNaming.java
new file mode 100644
index 0000000..dde713d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/NonCanonicalNaming.java
@@ -0,0 +1,8 @@
+class Test {
+    void ft() {
+        <selection>String _result = "";
+        _result +="s";
+        int k = 0;</selection>
+        System.out.println(_result + k);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/NonCanonicalNaming.java.after b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/NonCanonicalNaming.java.after
new file mode 100644
index 0000000..0c38015
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/NonCanonicalNaming.java.after
@@ -0,0 +1,28 @@
+class Test {
+    void ft() {
+        Inner inner = new Inner().invoke();
+        String _result = inner.getResult();
+        int k = inner.getK();
+        System.out.println(_result + k);
+    }
+
+    private class Inner {
+        private String result;
+        private int k;
+
+        public String getResult() {
+            return result;
+        }
+
+        public int getK() {
+            return k;
+        }
+
+        public Inner invoke() {
+            result = "";
+            result +="s";
+            k = 0;
+            return this;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/OutputVariable.java b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/OutputVariable.java
new file mode 100644
index 0000000..919de12
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/OutputVariable.java
@@ -0,0 +1,9 @@
+class Foo {
+  String foo() {
+    <selection>String var = "";
+    if (var == null) {
+      return null;
+    }</selection>
+    System.out.println(var);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/OutputVariable.java.after b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/OutputVariable.java.after
new file mode 100644
index 0000000..2330d43
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/OutputVariable.java.after
@@ -0,0 +1,31 @@
+class Foo {
+  String foo() {
+      Inner inner = new Inner().invoke();
+      String var = inner.getVar();
+      if (var == null) return null;
+    System.out.println(var);
+  }
+
+    private class Inner {
+        private boolean myResult;
+        private String var;
+
+        boolean is() {
+            return myResult;
+        }
+
+        public String getVar() {
+            return var;
+        }
+
+        public Inner invoke() {
+            var = "";
+            if (var == null) {
+                myResult = true;
+                return this;
+            }
+            myResult = false;
+            return this;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/OutputVarsReferences.java b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/OutputVarsReferences.java
new file mode 100644
index 0000000..e0028c4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/OutputVarsReferences.java
@@ -0,0 +1,10 @@
+class Test {
+    public void context1() {
+        <selection>int i = 1;
+        i += 1;
+        int k = 2;
+        k++;</selection>
+        System.out.println(MessageFormat.format("i: {0}", i));
+        System.out.println(MessageFormat.format("k: {0}", k));
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/OutputVarsReferences.java.after b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/OutputVarsReferences.java.after
new file mode 100644
index 0000000..2527691
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/OutputVarsReferences.java.after
@@ -0,0 +1,30 @@
+class Test {
+    public void context1() {
+        Inner inner = new Inner().invoke();
+        int i = inner.getI();
+        int k = inner.getK();
+        System.out.println(MessageFormat.format("i: {0}", i));
+        System.out.println(MessageFormat.format("k: {0}", k));
+    }
+
+    private class Inner {
+        private int i;
+        private int k;
+
+        public int getI() {
+            return i;
+        }
+
+        public int getK() {
+            return k;
+        }
+
+        public Inner invoke() {
+            i = 1;
+            i += 1;
+            k = 2;
+            k++;
+            return this;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/ReturnExitStatement.java b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/ReturnExitStatement.java
new file mode 100644
index 0000000..35e92cb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/ReturnExitStatement.java
@@ -0,0 +1,14 @@
+class A {
+  boolean foo() {
+
+    <selection>for (int i = 0; i < 9; i++) {
+      final Boolean foo = Boolean.FALSE;
+      if (foo != null) {
+        return foo;
+      }
+    }</selection>
+
+
+    return false;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/ReturnExitStatement.java.after b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/ReturnExitStatement.java.after
new file mode 100644
index 0000000..aab751a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/ReturnExitStatement.java.after
@@ -0,0 +1,35 @@
+class A {
+  boolean foo() {
+
+      Inner inner = new Inner().invoke();
+      if (inner.is()) return inner.getFoo();
+
+
+      return false;
+  }
+
+    private class Inner {
+        private boolean myResult;
+        private Boolean foo;
+
+        boolean is() {
+            return myResult;
+        }
+
+        public Boolean getFoo() {
+            return foo;
+        }
+
+        public Inner invoke() {
+            for (int i = 0; i < 9; i++) {
+                foo = Boolean.FALSE;
+              if (foo != null) {
+                  myResult = true;
+                  return this;
+              }
+            }
+            myResult = false;
+            return this;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/StaticInner.java b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/StaticInner.java
new file mode 100644
index 0000000..5b2aba5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/StaticInner.java
@@ -0,0 +1,10 @@
+class Test {
+   void foo() {
+      int i = 0;
+      <selection>
+      int j = i;
+      int k = 0;
+      </selection>
+      int m = k + j;
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/StaticInner.java.after b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/StaticInner.java.after
new file mode 100644
index 0000000..01358df
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/StaticInner.java.after
@@ -0,0 +1,35 @@
+class Test {
+   void foo() {
+      int i = 0;
+
+       Inner inner = new Inner(i).invoke();
+       int k = inner.getK();
+       int j = inner.getJ();
+      
+      int m = k + j;
+   }
+
+    private class Inner {
+        private int i;
+        private int j;
+        private int k;
+
+        public Inner(int i) {
+            this.i = i;
+        }
+
+        public int getJ() {
+            return j;
+        }
+
+        public int getK() {
+            return k;
+        }
+
+        public Inner invoke() {
+            j = i;
+            k = 0;
+            return this;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/UniqueObjectName.java b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/UniqueObjectName.java
new file mode 100644
index 0000000..9b65f5e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/UniqueObjectName.java
@@ -0,0 +1,18 @@
+class A {
+    int foo() {
+        int x = 45;
+        int y = 46;
+        int inner = 47;
+        <selection>x = y + 1;
+        y = 77;</selection>
+        x = y + x + 45;
+        boolean z = true;
+        if (z) {
+            return y;
+        } else {
+            x = y;
+        }
+        y = 45;
+        return x;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/UniqueObjectName.java.after b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/UniqueObjectName.java.after
new file mode 100644
index 0000000..9e2abc6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/UniqueObjectName.java.after
@@ -0,0 +1,42 @@
+class A {
+    int foo() {
+        int x = 45;
+        int y = 46;
+        int inner = 47;
+        Inner inner1 = new Inner(y).invoke();
+        y = inner1.getY();
+        x = inner1.getX();
+        x = y + x + 45;
+        boolean z = true;
+        if (z) {
+            return y;
+        } else {
+            x = y;
+        }
+        y = 45;
+        return x;
+    }
+
+    private class Inner {
+        private int y;
+        private int x;
+
+        public Inner(int y) {
+            this.y = y;
+        }
+
+        public int getX() {
+            return x;
+        }
+
+        public int getY() {
+            return y;
+        }
+
+        public Inner invoke() {
+            x = y + 1;
+            y = 77;
+            return this;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/WithInnerClasses.java b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/WithInnerClasses.java
new file mode 100644
index 0000000..880283d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/WithInnerClasses.java
@@ -0,0 +1,54 @@
+public class Demo {
+
+
+    public static void main(String[] args) {
+
+        <selection>Pojo1 p1 = new Pojo1("p1");
+        Pojo2 p2 = new Pojo2("p2"){
+            @Override
+            public String getContent() {
+                return "------------";
+            }
+        };
+        </selection>
+
+        System.out.println(p1.getContent() + p2.getContent());
+
+    }
+
+
+    public static class Pojo1 {
+        private String content;
+
+        public Pojo1(String content) {
+            this.content = content;
+        }
+
+        public String getContent() {
+            return content;
+        }
+
+        public void setContent(String content) {
+            this.content = content;
+        }
+    }
+
+    public static class Pojo2 {
+        private String content;
+
+        public Pojo2(String content) {
+            this.content = content;
+        }
+
+        public String getContent() {
+            return content;
+        }
+
+        public void setContent(String content) {
+            this.content = content;
+        }
+    }
+}
+
+
+
diff --git a/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/WithInnerClasses.java.after b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/WithInnerClasses.java.after
new file mode 100644
index 0000000..d5624dc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/WithInnerClasses.java.after
@@ -0,0 +1,74 @@
+public class Demo {
+
+
+    public static void main(String[] args) {
+
+        Inner inner = new Inner().invoke();
+        Pojo1 p1 = inner.getP1();
+        Pojo2 p2 = inner.getP2();
+        
+
+        System.out.println(p1.getContent() + p2.getContent());
+
+    }
+
+
+    public static class Pojo1 {
+        private String content;
+
+        public Pojo1(String content) {
+            this.content = content;
+        }
+
+        public String getContent() {
+            return content;
+        }
+
+        public void setContent(String content) {
+            this.content = content;
+        }
+    }
+
+    public static class Pojo2 {
+        private String content;
+
+        public Pojo2(String content) {
+            this.content = content;
+        }
+
+        public String getContent() {
+            return content;
+        }
+
+        public void setContent(String content) {
+            this.content = content;
+        }
+    }
+
+    private static class Inner {
+        private Pojo1 p1;
+        private Pojo2 p2;
+
+        public Pojo1 getP1() {
+            return p1;
+        }
+
+        public Pojo2 getP2() {
+            return p2;
+        }
+
+        public Inner invoke() {
+            p1 = new Pojo1("p1");
+            p2 = new Pojo2("p2") {
+                @Override
+                public String getContent() {
+                    return "------------";
+                }
+            };
+            return this;
+        }
+    }
+}
+
+
+
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/conflictAbstractPackageLocalMethod/after/a/Test.java b/java/java-tests/testData/refactoring/extractSuperClass/conflictAbstractPackageLocalMethod/after/a/Test.java
new file mode 100644
index 0000000..1de0902
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/conflictAbstractPackageLocalMethod/after/a/Test.java
@@ -0,0 +1,5 @@
+package a;
+
+public abstract class Test {
+    abstract void x();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/conflictAbstractPackageLocalMethod/after/b/E.java b/java/java-tests/testData/refactoring/extractSuperClass/conflictAbstractPackageLocalMethod/after/b/E.java
new file mode 100644
index 0000000..e6e4b67
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/conflictAbstractPackageLocalMethod/after/b/E.java
@@ -0,0 +1,2 @@
+package b;
+class E{}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/conflictAbstractPackageLocalMethod/after/b/TestSubclass.java b/java/java-tests/testData/refactoring/extractSuperClass/conflictAbstractPackageLocalMethod/after/b/TestSubclass.java
new file mode 100644
index 0000000..ac7700e1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/conflictAbstractPackageLocalMethod/after/b/TestSubclass.java
@@ -0,0 +1,8 @@
+package b;
+
+import a.Test;
+
+public class TestSubclass extends Test {
+    @java.lang.Override void x() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/conflictAbstractPackageLocalMethod/before/a/Test.java b/java/java-tests/testData/refactoring/extractSuperClass/conflictAbstractPackageLocalMethod/before/a/Test.java
new file mode 100644
index 0000000..5fe7202
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/conflictAbstractPackageLocalMethod/before/a/Test.java
@@ -0,0 +1,5 @@
+package a;
+public class Test {
+    void x() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/conflictAbstractPackageLocalMethod/before/b/E.java b/java/java-tests/testData/refactoring/extractSuperClass/conflictAbstractPackageLocalMethod/before/b/E.java
new file mode 100644
index 0000000..e6e4b67
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/conflictAbstractPackageLocalMethod/before/b/E.java
@@ -0,0 +1,2 @@
+package b;
+class E{}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/conflictMoveAbstractWithPrivateMethod/after/Test.java b/java/java-tests/testData/refactoring/extractSuperClass/conflictMoveAbstractWithPrivateMethod/after/Test.java
new file mode 100644
index 0000000..c19d639
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/conflictMoveAbstractWithPrivateMethod/after/Test.java
@@ -0,0 +1,5 @@
+public abstract class Test {
+    abstract void x();
+
+    private void xx(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/conflictMoveAbstractWithPrivateMethod/after/TestSubclass.java b/java/java-tests/testData/refactoring/extractSuperClass/conflictMoveAbstractWithPrivateMethod/after/TestSubclass.java
new file mode 100644
index 0000000..54bd69a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/conflictMoveAbstractWithPrivateMethod/after/TestSubclass.java
@@ -0,0 +1,7 @@
+public class TestSubclass extends Test {
+    @java.lang.Override
+    void x() {
+      xx();
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/conflictMoveAbstractWithPrivateMethod/before/Test.java b/java/java-tests/testData/refactoring/extractSuperClass/conflictMoveAbstractWithPrivateMethod/before/Test.java
new file mode 100644
index 0000000..0196b2c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/conflictMoveAbstractWithPrivateMethod/before/Test.java
@@ -0,0 +1,7 @@
+public class Test  {
+    void x() {
+      xx();
+    }
+
+    private void xx(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPackageLocalMethod/after/a/Sup.java b/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPackageLocalMethod/after/a/Sup.java
new file mode 100644
index 0000000..3e9ecba8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPackageLocalMethod/after/a/Sup.java
@@ -0,0 +1,4 @@
+package a;
+public class Sup {
+  void foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPackageLocalMethod/after/a/Test.java b/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPackageLocalMethod/after/a/Test.java
new file mode 100644
index 0000000..50199f04
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPackageLocalMethod/after/a/Test.java
@@ -0,0 +1,7 @@
+package a;
+
+public class Test extends Sup {
+    void x() {
+      foo();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPackageLocalMethod/after/b/E.java b/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPackageLocalMethod/after/b/E.java
new file mode 100644
index 0000000..e6e4b67
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPackageLocalMethod/after/b/E.java
@@ -0,0 +1,2 @@
+package b;
+class E{}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPackageLocalMethod/after/b/TestSubclass.java b/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPackageLocalMethod/after/b/TestSubclass.java
new file mode 100644
index 0000000..1f39720
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPackageLocalMethod/after/b/TestSubclass.java
@@ -0,0 +1,6 @@
+package b;
+
+import a.Test;
+
+public class TestSubclass  extends Test {
+    }
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPackageLocalMethod/before/a/Sup.java b/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPackageLocalMethod/before/a/Sup.java
new file mode 100644
index 0000000..3e9ecba8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPackageLocalMethod/before/a/Sup.java
@@ -0,0 +1,4 @@
+package a;
+public class Sup {
+  void foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPackageLocalMethod/before/a/Test.java b/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPackageLocalMethod/before/a/Test.java
new file mode 100644
index 0000000..a1b6739
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPackageLocalMethod/before/a/Test.java
@@ -0,0 +1,6 @@
+package a;
+public class Test extends Sup {
+    void x() {
+      foo();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPackageLocalMethod/before/b/E.java b/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPackageLocalMethod/before/b/E.java
new file mode 100644
index 0000000..e6e4b67
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPackageLocalMethod/before/b/E.java
@@ -0,0 +1,2 @@
+package b;
+class E{}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPackageLocalSuperClass/after/a/Sup.java b/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPackageLocalSuperClass/after/a/Sup.java
new file mode 100644
index 0000000..e6f5774
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPackageLocalSuperClass/after/a/Sup.java
@@ -0,0 +1,2 @@
+package a;
+class Sup {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPackageLocalSuperClass/after/a/Test.java b/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPackageLocalSuperClass/after/a/Test.java
new file mode 100644
index 0000000..8f86aba
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPackageLocalSuperClass/after/a/Test.java
@@ -0,0 +1,5 @@
+package a;
+
+public class Test extends Sup {
+    void foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPackageLocalSuperClass/after/b/TestSubclass.java b/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPackageLocalSuperClass/after/b/TestSubclass.java
new file mode 100644
index 0000000..1f39720
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPackageLocalSuperClass/after/b/TestSubclass.java
@@ -0,0 +1,6 @@
+package b;
+
+import a.Test;
+
+public class TestSubclass  extends Test {
+    }
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPackageLocalSuperClass/after/b/donotdeletedir.txt b/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPackageLocalSuperClass/after/b/donotdeletedir.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPackageLocalSuperClass/after/b/donotdeletedir.txt
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPackageLocalSuperClass/before/a/Sup.java b/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPackageLocalSuperClass/before/a/Sup.java
new file mode 100644
index 0000000..e6f5774
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPackageLocalSuperClass/before/a/Sup.java
@@ -0,0 +1,2 @@
+package a;
+class Sup {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPackageLocalSuperClass/before/a/Test.java b/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPackageLocalSuperClass/before/a/Test.java
new file mode 100644
index 0000000..575f5a2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPackageLocalSuperClass/before/a/Test.java
@@ -0,0 +1,4 @@
+package a;
+public class Test extends Sup {
+    void foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPackageLocalSuperClass/before/b/donotdeletedir.txt b/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPackageLocalSuperClass/before/b/donotdeletedir.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPackageLocalSuperClass/before/b/donotdeletedir.txt
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPrivateMethod/after/Test.java b/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPrivateMethod/after/Test.java
new file mode 100644
index 0000000..469fa4c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPrivateMethod/after/Test.java
@@ -0,0 +1,5 @@
+public class Test {
+    void x() {
+      foo();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPrivateMethod/after/TestSubclass.java b/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPrivateMethod/after/TestSubclass.java
new file mode 100644
index 0000000..bd67ea9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPrivateMethod/after/TestSubclass.java
@@ -0,0 +1,4 @@
+public class TestSubclass extends Test {
+
+    private void foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPrivateMethod/before/Test.java b/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPrivateMethod/before/Test.java
new file mode 100644
index 0000000..65eec87
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/conflictUsingPrivateMethod/before/Test.java
@@ -0,0 +1,7 @@
+public class Test  {
+    void x() {
+      foo();
+    }
+
+    private void foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/extendsLibraryClass/after/Test.java b/java/java-tests/testData/refactoring/extractSuperClass/extendsLibraryClass/after/Test.java
new file mode 100644
index 0000000..8905c57
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/extendsLibraryClass/after/Test.java
@@ -0,0 +1,7 @@
+import java.util.ArrayList;
+
+public class Test extends ArrayList {
+    public Test(int initialCapacity) {
+        super(initialCapacity);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/extendsLibraryClass/after/TestSubclass.java b/java/java-tests/testData/refactoring/extractSuperClass/extendsLibraryClass/after/TestSubclass.java
new file mode 100644
index 0000000..e4f3b61
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/extendsLibraryClass/after/TestSubclass.java
@@ -0,0 +1,5 @@
+public class TestSubclass extends Test {
+    public TestSubclass(int capacity) {
+        super(capacity);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/extendsLibraryClass/before/Test.java b/java/java-tests/testData/refactoring/extractSuperClass/extendsLibraryClass/before/Test.java
new file mode 100644
index 0000000..61ee629
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/extendsLibraryClass/before/Test.java
@@ -0,0 +1,7 @@
+import java.util.ArrayList;
+
+public class Test extends ArrayList {
+    public Test(int capacity) {
+        super(capacity);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/extendsList/after/Test.java b/java/java-tests/testData/refactoring/extractSuperClass/extendsList/after/Test.java
new file mode 100644
index 0000000..2a30c68
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/extendsList/after/Test.java
@@ -0,0 +1,2 @@
+public abstract class Test implements java.util.List<String> {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/extendsList/after/TestSubclass.java b/java/java-tests/testData/refactoring/extractSuperClass/extendsList/after/TestSubclass.java
new file mode 100644
index 0000000..5f886ae
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/extendsList/after/TestSubclass.java
@@ -0,0 +1,2 @@
+public abstract class TestSubclass extends Test {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/extendsList/before/Test.java b/java/java-tests/testData/refactoring/extractSuperClass/extendsList/before/Test.java
new file mode 100644
index 0000000..1f87b26
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/extendsList/before/Test.java
@@ -0,0 +1,2 @@
+public abstract class Test implements java.util.List<String>{
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/fieldInitializationWithCast/after/Test.java b/java/java-tests/testData/refactoring/extractSuperClass/fieldInitializationWithCast/after/Test.java
new file mode 100644
index 0000000..5f8f2c8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/fieldInitializationWithCast/after/Test.java
@@ -0,0 +1,7 @@
+public class Test {
+    final String x;
+
+    public Test() {
+        x = (String)"";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/fieldInitializationWithCast/after/TestSubclass.java b/java/java-tests/testData/refactoring/extractSuperClass/fieldInitializationWithCast/after/TestSubclass.java
new file mode 100644
index 0000000..44969fe
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/fieldInitializationWithCast/after/TestSubclass.java
@@ -0,0 +1,6 @@
+public class TestSubclass extends Test {
+
+    public TestSubclass() {
+        super();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/fieldInitializationWithCast/before/Test.java b/java/java-tests/testData/refactoring/extractSuperClass/fieldInitializationWithCast/before/Test.java
new file mode 100644
index 0000000..5f8f2c8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/fieldInitializationWithCast/before/Test.java
@@ -0,0 +1,7 @@
+public class Test {
+    final String x;
+
+    public Test() {
+        x = (String)"";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/finalFieldInitialization/after/Test.java b/java/java-tests/testData/refactoring/extractSuperClass/finalFieldInitialization/after/Test.java
new file mode 100644
index 0000000..1e6077d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/finalFieldInitialization/after/Test.java
@@ -0,0 +1,10 @@
+public class Test {
+    final X x;
+
+    public Test() {
+        x = new X();
+    }
+
+    protected static class X {
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/finalFieldInitialization/after/TestSubclass.java b/java/java-tests/testData/refactoring/extractSuperClass/finalFieldInitialization/after/TestSubclass.java
new file mode 100644
index 0000000..af8153d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/finalFieldInitialization/after/TestSubclass.java
@@ -0,0 +1,7 @@
+public class TestSubclass extends Test {
+
+    public TestSubclass() {
+        super();
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/finalFieldInitialization/before/Test.java b/java/java-tests/testData/refactoring/extractSuperClass/finalFieldInitialization/before/Test.java
new file mode 100644
index 0000000..0093101
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/finalFieldInitialization/before/Test.java
@@ -0,0 +1,10 @@
+public class Test {
+    final X x;
+
+    public Test() {
+        x = new X(); 
+    }
+
+    protected static class X {
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/importsCorruption/after/p1/A.java b/java/java-tests/testData/refactoring/extractSuperClass/importsCorruption/after/p1/A.java
new file mode 100644
index 0000000..0ed5735
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/importsCorruption/after/p1/A.java
@@ -0,0 +1,6 @@
+package p1;
+
+public class A {
+    public void m1() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/importsCorruption/after/p1/AA.java b/java/java-tests/testData/refactoring/extractSuperClass/importsCorruption/after/p1/AA.java
new file mode 100644
index 0000000..fc67c98
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/importsCorruption/after/p1/AA.java
@@ -0,0 +1,5 @@
+package p1;
+public class AA extends A {
+    public void m2() {
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/importsCorruption/after/p2/B.java b/java/java-tests/testData/refactoring/extractSuperClass/importsCorruption/after/p2/B.java
new file mode 100644
index 0000000..2346a1d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/importsCorruption/after/p2/B.java
@@ -0,0 +1,8 @@
+package p2;
+import p1.A;
+public class B {
+    A a;
+    void foo() {
+        a.m1();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/importsCorruption/after/p2/C.java b/java/java-tests/testData/refactoring/extractSuperClass/importsCorruption/after/p2/C.java
new file mode 100644
index 0000000..95fadb4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/importsCorruption/after/p2/C.java
@@ -0,0 +1,9 @@
+package p2;
+import p1.AA;
+
+public class C {
+    AA a;
+    void foo() {
+        a.m2();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/importsCorruption/before/p1/A.java b/java/java-tests/testData/refactoring/extractSuperClass/importsCorruption/before/p1/A.java
new file mode 100644
index 0000000..6cdc98a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/importsCorruption/before/p1/A.java
@@ -0,0 +1,7 @@
+package p1;
+public class A {
+public void m1() {
+}
+public void m2() {
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/importsCorruption/before/p2/B.java b/java/java-tests/testData/refactoring/extractSuperClass/importsCorruption/before/p2/B.java
new file mode 100644
index 0000000..2346a1d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/importsCorruption/before/p2/B.java
@@ -0,0 +1,8 @@
+package p2;
+import p1.A;
+public class B {
+    A a;
+    void foo() {
+        a.m1();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/importsCorruption/before/p2/C.java b/java/java-tests/testData/refactoring/extractSuperClass/importsCorruption/before/p2/C.java
new file mode 100644
index 0000000..4e8aefe
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/importsCorruption/before/p2/C.java
@@ -0,0 +1,8 @@
+package p2;
+import p1.A;
+public class C {
+    A a;
+    void foo() {
+        a.m2();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/methodTypeParameter/after/Test.java b/java/java-tests/testData/refactoring/extractSuperClass/methodTypeParameter/after/Test.java
new file mode 100644
index 0000000..386656a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/methodTypeParameter/after/Test.java
@@ -0,0 +1,3 @@
+public class Test {
+    public <T> T m(){return null;}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/methodTypeParameter/after/TestSubclass.java b/java/java-tests/testData/refactoring/extractSuperClass/methodTypeParameter/after/TestSubclass.java
new file mode 100644
index 0000000..4d0a336
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/methodTypeParameter/after/TestSubclass.java
@@ -0,0 +1,2 @@
+public class TestSubclass extends Test {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/methodTypeParameter/before/Test.java b/java/java-tests/testData/refactoring/extractSuperClass/methodTypeParameter/before/Test.java
new file mode 100644
index 0000000..386656a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/methodTypeParameter/before/Test.java
@@ -0,0 +1,3 @@
+public class Test {
+    public <T> T m(){return null;}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/noConflictUsingProtectedMethodFromSuper/after/Test.java b/java/java-tests/testData/refactoring/extractSuperClass/noConflictUsingProtectedMethodFromSuper/after/Test.java
new file mode 100644
index 0000000..906db4d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/noConflictUsingProtectedMethodFromSuper/after/Test.java
@@ -0,0 +1,7 @@
+import java.util.ArrayList;
+
+public class Test extends ArrayList {
+    void x() {
+      removeRange(0, 0);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/noConflictUsingProtectedMethodFromSuper/after/TestSubclass.java b/java/java-tests/testData/refactoring/extractSuperClass/noConflictUsingProtectedMethodFromSuper/after/TestSubclass.java
new file mode 100644
index 0000000..4d0a336
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/noConflictUsingProtectedMethodFromSuper/after/TestSubclass.java
@@ -0,0 +1,2 @@
+public class TestSubclass extends Test {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/noConflictUsingProtectedMethodFromSuper/before/Test.java b/java/java-tests/testData/refactoring/extractSuperClass/noConflictUsingProtectedMethodFromSuper/before/Test.java
new file mode 100644
index 0000000..ae143e7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/noConflictUsingProtectedMethodFromSuper/before/Test.java
@@ -0,0 +1,6 @@
+import java.util.*;
+public class Test extends ArrayList {
+    void x() {
+      removeRange(0, 0);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/parameterNameEqualsFieldName/after/Test.java b/java/java-tests/testData/refactoring/extractSuperClass/parameterNameEqualsFieldName/after/Test.java
new file mode 100644
index 0000000..83e0ade
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/parameterNameEqualsFieldName/after/Test.java
@@ -0,0 +1,7 @@
+public class Test {
+    int a;
+
+    public Test(int a) {
+        this.a = a;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/parameterNameEqualsFieldName/after/TestSubclass.java b/java/java-tests/testData/refactoring/extractSuperClass/parameterNameEqualsFieldName/after/TestSubclass.java
new file mode 100644
index 0000000..df90dfc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/parameterNameEqualsFieldName/after/TestSubclass.java
@@ -0,0 +1,7 @@
+public class TestSubclass extends Test {
+    int b;
+    public TestSubclass(int a, int b) {
+        super(a);
+        this.b = b;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/parameterNameEqualsFieldName/before/Test.java b/java/java-tests/testData/refactoring/extractSuperClass/parameterNameEqualsFieldName/before/Test.java
new file mode 100644
index 0000000..8827112
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/parameterNameEqualsFieldName/before/Test.java
@@ -0,0 +1,8 @@
+public class Test {
+    int a;
+    int b;
+    public Test(int a, int b) {
+        this.a = a;
+        this.b = b;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/requiredImportRemoved/after/foo/A.java b/java/java-tests/testData/refactoring/extractSuperClass/requiredImportRemoved/after/foo/A.java
new file mode 100644
index 0000000..6bb3be4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/requiredImportRemoved/after/foo/A.java
@@ -0,0 +1,9 @@
+package foo;
+
+import foo.impl.B;
+
+public class A {
+  public static void main(String[] args) {
+    B b = B.getInstance();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/requiredImportRemoved/after/foo/impl/B.java b/java/java-tests/testData/refactoring/extractSuperClass/requiredImportRemoved/after/foo/impl/B.java
new file mode 100644
index 0000000..7d317b0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/requiredImportRemoved/after/foo/impl/B.java
@@ -0,0 +1,7 @@
+package foo.impl;
+
+public class B {
+    public static B getInstance() {
+        return null;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/requiredImportRemoved/after/foo/impl/BImpl.java b/java/java-tests/testData/refactoring/extractSuperClass/requiredImportRemoved/after/foo/impl/BImpl.java
new file mode 100644
index 0000000..e2e3fa0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/requiredImportRemoved/after/foo/impl/BImpl.java
@@ -0,0 +1,4 @@
+package foo.impl;
+
+public class BImpl extends B {
+}
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/requiredImportRemoved/before/foo/A.java b/java/java-tests/testData/refactoring/extractSuperClass/requiredImportRemoved/before/foo/A.java
new file mode 100644
index 0000000..6bb3be4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/requiredImportRemoved/before/foo/A.java
@@ -0,0 +1,9 @@
+package foo;
+
+import foo.impl.B;
+
+public class A {
+  public static void main(String[] args) {
+    B b = B.getInstance();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/requiredImportRemoved/before/foo/impl/B.java b/java/java-tests/testData/refactoring/extractSuperClass/requiredImportRemoved/before/foo/impl/B.java
new file mode 100644
index 0000000..f837020
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/requiredImportRemoved/before/foo/impl/B.java
@@ -0,0 +1,7 @@
+package foo.impl;
+
+public class B {
+    public static B getInstance() {
+        return null;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/substituteGenerics/after/A.java b/java/java-tests/testData/refactoring/extractSuperClass/substituteGenerics/after/A.java
new file mode 100644
index 0000000..c3f9ca4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/substituteGenerics/after/A.java
@@ -0,0 +1,4 @@
+public class A<E> {
+  public A(E e) {
+  }
+}
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/substituteGenerics/after/AB.java b/java/java-tests/testData/refactoring/extractSuperClass/substituteGenerics/after/AB.java
new file mode 100644
index 0000000..63fbe6a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/substituteGenerics/after/AB.java
@@ -0,0 +1,5 @@
+public class AB extends B {
+  public AB(String s) {
+    super(s);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/substituteGenerics/after/B.java b/java/java-tests/testData/refactoring/extractSuperClass/substituteGenerics/after/B.java
new file mode 100644
index 0000000..5814cf9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/substituteGenerics/after/B.java
@@ -0,0 +1,5 @@
+public class B extends A<String> {
+    public B(String e) {
+        super(e);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/substituteGenerics/before/A.java b/java/java-tests/testData/refactoring/extractSuperClass/substituteGenerics/before/A.java
new file mode 100644
index 0000000..c3f9ca4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/substituteGenerics/before/A.java
@@ -0,0 +1,4 @@
+public class A<E> {
+  public A(E e) {
+  }
+}
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/substituteGenerics/before/B.java b/java/java-tests/testData/refactoring/extractSuperClass/substituteGenerics/before/B.java
new file mode 100644
index 0000000..f6949ac
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/substituteGenerics/before/B.java
@@ -0,0 +1,5 @@
+public class B extends A<String>{
+  public B(String s) {
+    super(s);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/abstractBase/after/A.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/abstractBase/after/A.java
new file mode 100644
index 0000000..0b1132d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/abstractBase/after/A.java
@@ -0,0 +1,11 @@
+public abstract class A {
+    public final MyBase myDelegate = new MyBase();
+
+    protected abstract void run();
+
+    private class MyBase extends Base {
+        public void run() {
+            A.this.run();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/abstractBase/after/Base.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/abstractBase/after/Base.java
new file mode 100644
index 0000000..f237a7f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/abstractBase/after/Base.java
@@ -0,0 +1,2 @@
+public abstract class Base implements Runnable {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/abstractBase/before/A.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/abstractBase/before/A.java
new file mode 100644
index 0000000..2419572
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/abstractBase/before/A.java
@@ -0,0 +1,2 @@
+public abstract class A extends Base {    
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/abstractBase/before/Base.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/abstractBase/before/Base.java
new file mode 100644
index 0000000..f237a7f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/abstractBase/before/Base.java
@@ -0,0 +1,2 @@
+public abstract class Base implements Runnable {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/abstractBase1/after/A.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/abstractBase1/after/A.java
new file mode 100644
index 0000000..4b81db7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/abstractBase1/after/A.java
@@ -0,0 +1,9 @@
+public class A {
+    private final MyBase myDelegate = new MyBase();
+
+    private class MyBase extends Base {
+        public void run() {
+             System.out.println("From A");
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/abstractBase1/after/Base.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/abstractBase1/after/Base.java
new file mode 100644
index 0000000..f237a7f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/abstractBase1/after/Base.java
@@ -0,0 +1,2 @@
+public abstract class Base implements Runnable {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/abstractBase1/before/A.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/abstractBase1/before/A.java
new file mode 100644
index 0000000..976cbf5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/abstractBase1/before/A.java
@@ -0,0 +1,5 @@
+public class A extends Base {
+     public void run() {
+          System.out.println("From A");
+     }     
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/abstractBase1/before/Base.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/abstractBase1/before/Base.java
new file mode 100644
index 0000000..f237a7f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/abstractBase1/before/Base.java
@@ -0,0 +1,2 @@
+public abstract class Base implements Runnable {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/annotations/after/A.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/annotations/after/A.java
new file mode 100644
index 0000000..96c0001
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/annotations/after/A.java
@@ -0,0 +1,9 @@
+import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.NotNull;
+
+class A {
+    @Nullable
+    public Object methodFromA(@NotNull String s) {
+        return null;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/annotations/after/B.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/annotations/after/B.java
new file mode 100644
index 0000000..b7f0665
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/annotations/after/B.java
@@ -0,0 +1,11 @@
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+class B {
+    public final A myDelegate = new A();
+
+    @Nullable
+    public Object methodFromA(@NotNull String s) {
+        return myDelegate.methodFromA(s);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/annotations/before/A.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/annotations/before/A.java
new file mode 100644
index 0000000..96c0001
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/annotations/before/A.java
@@ -0,0 +1,9 @@
+import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.NotNull;
+
+class A {
+    @Nullable
+    public Object methodFromA(@NotNull String s) {
+        return null;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/annotations/before/B.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/annotations/before/B.java
new file mode 100644
index 0000000..776583f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/annotations/before/B.java
@@ -0,0 +1,2 @@
+class B extends A {       
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/getter/after/A.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/getter/after/A.java
new file mode 100644
index 0000000..e913171
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/getter/after/A.java
@@ -0,0 +1,7 @@
+class A {
+    public void methodFromA() {
+    }
+    public int intMethodFromA(int i) {
+        return 0;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/getter/after/B.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/getter/after/B.java
new file mode 100644
index 0000000..d6c49854
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/getter/after/B.java
@@ -0,0 +1,15 @@
+class B {
+    private final A myDelegate = new A();
+
+    public A getMyDelegate() {
+        return myDelegate;
+    }
+
+    public void methodFromA() {
+        myDelegate.methodFromA();
+    }
+
+    public int intMethodFromA(int i) {
+        return myDelegate.intMethodFromA(i);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/getter/before/A.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/getter/before/A.java
new file mode 100644
index 0000000..e913171
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/getter/before/A.java
@@ -0,0 +1,7 @@
+class A {
+    public void methodFromA() {
+    }
+    public int intMethodFromA(int i) {
+        return 0;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/getter/before/B.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/getter/before/B.java
new file mode 100644
index 0000000..776583f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/getter/before/B.java
@@ -0,0 +1,2 @@
+class B extends A {       
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/hierarchy/after/A.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/hierarchy/after/A.java
new file mode 100644
index 0000000..e15113e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/hierarchy/after/A.java
@@ -0,0 +1,4 @@
+public class A {
+    void methodFromA() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/hierarchy/after/Base.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/hierarchy/after/Base.java
new file mode 100644
index 0000000..24b0a3d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/hierarchy/after/Base.java
@@ -0,0 +1,2 @@
+public class Base extends A {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/hierarchy/after/Test.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/hierarchy/after/Test.java
new file mode 100644
index 0000000..403790e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/hierarchy/after/Test.java
@@ -0,0 +1,3 @@
+public interface Test {
+    A getA();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/hierarchy/after/X.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/hierarchy/after/X.java
new file mode 100644
index 0000000..de17c5c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/hierarchy/after/X.java
@@ -0,0 +1,9 @@
+public class X {
+    private final Base myDelegate = new Base();
+    A myField;
+    public void method(Test t) {
+         myField = t.getA();
+         myField.methodFromA();
+         t.getA().methodFromA();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/hierarchy/before/A.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/hierarchy/before/A.java
new file mode 100644
index 0000000..e15113e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/hierarchy/before/A.java
@@ -0,0 +1,4 @@
+public class A {
+    void methodFromA() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/hierarchy/before/Base.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/hierarchy/before/Base.java
new file mode 100644
index 0000000..24b0a3d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/hierarchy/before/Base.java
@@ -0,0 +1,2 @@
+public class Base extends A {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/hierarchy/before/Test.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/hierarchy/before/Test.java
new file mode 100644
index 0000000..403790e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/hierarchy/before/Test.java
@@ -0,0 +1,3 @@
+public interface Test {
+    A getA();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/hierarchy/before/X.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/hierarchy/before/X.java
new file mode 100644
index 0000000..112110b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/hierarchy/before/X.java
@@ -0,0 +1,8 @@
+public class X extends Base {
+    A myField;
+    public void method(Test t) {
+         myField = t.getA();
+         myField.methodFromA();
+         t.getA().methodFromA();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClass/after/A.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClass/after/A.java
new file mode 100644
index 0000000..1e063b9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClass/after/A.java
@@ -0,0 +1,17 @@
+public class A {
+    public final MyBase myDelegate;
+
+    public A() {
+        myDelegate = new MyBase(27);
+    }
+
+    private class MyBase extends Base {
+        public MyBase(int i) {
+            super(i);
+        }
+
+        public void methodToOverride() {
+            System.out.println("Hello from B");
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClass/after/Base.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClass/after/Base.java
new file mode 100644
index 0000000..20e97de
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClass/after/Base.java
@@ -0,0 +1,11 @@
+public class Base {
+    protected int baseField;
+    public Base() {
+    }
+    public Base(int i) {
+        baseField = i;
+    }
+    public void methodToOverride() {
+        System.out.println("Hello from Base");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClass/before/A.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClass/before/A.java
new file mode 100644
index 0000000..705e8fa
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClass/before/A.java
@@ -0,0 +1,8 @@
+public class A extends Base {
+    public A() {
+        super(27);
+    }
+    public void methodToOverride() {
+        System.out.println("Hello from B");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClass/before/Base.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClass/before/Base.java
new file mode 100644
index 0000000..20e97de
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClass/before/Base.java
@@ -0,0 +1,11 @@
+public class Base {
+    protected int baseField;
+    public Base() {
+    }
+    public Base(int i) {
+        baseField = i;
+    }
+    public void methodToOverride() {
+        System.out.println("Hello from Base");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClassForInterface/after/A.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClassForInterface/after/A.java
new file mode 100644
index 0000000..db951a5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClassForInterface/after/A.java
@@ -0,0 +1,20 @@
+public class A extends BaseClass {
+    private final MyBaseInterface myBaseInterface = new MyBaseInterface();
+
+    public A() {
+    }
+
+    public A(String s) {
+        super(27);
+    }
+
+    public void baseInterfaceMethod() {
+        myBaseInterface.baseInterfaceMethod();
+    }
+
+    private class MyBaseInterface implements BaseInterface {
+        public void baseInterfaceMethod() {
+            System.out.println("Hi!");
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClassForInterface/after/BaseClass.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClassForInterface/after/BaseClass.java
new file mode 100644
index 0000000..f06f893
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClassForInterface/after/BaseClass.java
@@ -0,0 +1,7 @@
+public BaseClass {
+    public BaseClass() {
+    }
+
+    public BaseClass(int i) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClassForInterface/after/BaseInterface.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClassForInterface/after/BaseInterface.java
new file mode 100644
index 0000000..72f2c984
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClassForInterface/after/BaseInterface.java
@@ -0,0 +1,3 @@
+public interface BaseInterface {
+    void baseInterfaceMethod();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClassForInterface/before/A.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClassForInterface/before/A.java
new file mode 100644
index 0000000..8d0bd26
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClassForInterface/before/A.java
@@ -0,0 +1,12 @@
+public class A extends BaseClass implements BaseInterface {
+    public A() {
+    }
+
+    public A(String s) {
+        super(27);
+    }
+
+    public void baseInterfaceMethod() {
+        System.out.println("Hi!");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClassForInterface/before/BaseClass.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClassForInterface/before/BaseClass.java
new file mode 100644
index 0000000..f06f893
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClassForInterface/before/BaseClass.java
@@ -0,0 +1,7 @@
+public BaseClass {
+    public BaseClass() {
+    }
+
+    public BaseClass(int i) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClassForInterface/before/BaseInterface.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClassForInterface/before/BaseInterface.java
new file mode 100644
index 0000000..72f2c984
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClassForInterface/before/BaseInterface.java
@@ -0,0 +1,3 @@
+public interface BaseInterface {
+    void baseInterfaceMethod();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClassForInterfaceAbstract/after/A.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClassForInterfaceAbstract/after/A.java
new file mode 100644
index 0000000..236c2e8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClassForInterfaceAbstract/after/A.java
@@ -0,0 +1,18 @@
+public abstract class A extends BaseClass {
+    private final MyBaseInterface myBaseInterface = new MyBaseInterface();
+
+    public A() {
+    }
+
+    public A(String s) {
+        super(27);
+    }
+
+    public abstract void baseInterfaceMethod();
+
+    private class MyBaseInterface implements BaseInterface {
+        public void baseInterfaceMethod() {
+            A.this.baseInterfaceMethod();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClassForInterfaceAbstract/after/BaseClass.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClassForInterfaceAbstract/after/BaseClass.java
new file mode 100644
index 0000000..f06f893
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClassForInterfaceAbstract/after/BaseClass.java
@@ -0,0 +1,7 @@
+public BaseClass {
+    public BaseClass() {
+    }
+
+    public BaseClass(int i) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClassForInterfaceAbstract/after/BaseInterface.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClassForInterfaceAbstract/after/BaseInterface.java
new file mode 100644
index 0000000..72f2c984
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClassForInterfaceAbstract/after/BaseInterface.java
@@ -0,0 +1,3 @@
+public interface BaseInterface {
+    void baseInterfaceMethod();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClassForInterfaceAbstract/before/A.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClassForInterfaceAbstract/before/A.java
new file mode 100644
index 0000000..8c64cc6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClassForInterfaceAbstract/before/A.java
@@ -0,0 +1,8 @@
+public abstract class A extends BaseClass implements BaseInterface {
+    public A() {
+    }
+
+    public A(String s) {
+        super(27);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClassForInterfaceAbstract/before/BaseClass.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClassForInterfaceAbstract/before/BaseClass.java
new file mode 100644
index 0000000..f06f893
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClassForInterfaceAbstract/before/BaseClass.java
@@ -0,0 +1,7 @@
+public BaseClass {
+    public BaseClass() {
+    }
+
+    public BaseClass(int i) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClassForInterfaceAbstract/before/BaseInterface.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClassForInterfaceAbstract/before/BaseInterface.java
new file mode 100644
index 0000000..72f2c984
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/innerClassForInterfaceAbstract/before/BaseInterface.java
@@ -0,0 +1,3 @@
+public interface BaseInterface {
+    void baseInterfaceMethod();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaceDelegation/after/A.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaceDelegation/after/A.java
new file mode 100644
index 0000000..b031b71
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaceDelegation/after/A.java
@@ -0,0 +1,22 @@
+public class A {
+
+    private final MyIntf myDelegate = new MyIntf();
+
+    public Intf getMyDelegate() {
+        return myDelegate;
+    }
+
+    public void method1() {
+        myDelegate.method1();
+    }
+
+    private class MyIntf implements Intf {
+        public void method1 () {
+            System.out.println("1");
+        }
+
+        public void method2 () {
+            System.out.println("2");
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaceDelegation/after/Intf.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaceDelegation/after/Intf.java
new file mode 100644
index 0000000..6e8322f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaceDelegation/after/Intf.java
@@ -0,0 +1,4 @@
+public interface Intf {
+    void method1();
+    void method2();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaceDelegation/after/Usage.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaceDelegation/after/Usage.java
new file mode 100644
index 0000000..1cabfd9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaceDelegation/after/Usage.java
@@ -0,0 +1,12 @@
+public class Usage {
+    A a = new A();
+
+    public void usage() {
+        a.method1();
+        a.getMyDelegate().method2();
+        use(a.getMyDelegate());
+    }
+
+    private void use(Intf i) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaceDelegation/before/A.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaceDelegation/before/A.java
new file mode 100644
index 0000000..4c7a0c9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaceDelegation/before/A.java
@@ -0,0 +1,9 @@
+public class A implements Intf {
+    public void method1 () {
+        System.out.println("1");
+    }
+
+    public void method2 () {
+        System.out.println("2");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaceDelegation/before/Intf.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaceDelegation/before/Intf.java
new file mode 100644
index 0000000..6e8322f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaceDelegation/before/Intf.java
@@ -0,0 +1,4 @@
+public interface Intf {
+    void method1();
+    void method2();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaceDelegation/before/Usage.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaceDelegation/before/Usage.java
new file mode 100644
index 0000000..f367f27
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaceDelegation/before/Usage.java
@@ -0,0 +1,12 @@
+public class Usage {
+    A a = new A();
+
+    public void usage() {
+        a.method1();
+        a.method2();
+        use(a);
+    }
+
+    private void use(Intf i) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaceImplicitImplementation/after/A.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaceImplicitImplementation/after/A.java
new file mode 100644
index 0000000..563ccaf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaceImplicitImplementation/after/A.java
@@ -0,0 +1,17 @@
+public class A extends ASuper {
+    private final MyIntf myDelegate = new MyIntf();
+
+    public Intf getMyDelegate() {
+        return myDelegate;
+    }
+
+    private class MyIntf implements Intf {
+        public void method1 () {
+            System.out.println("1");
+        }
+
+        public void method2() {
+            A.this.method2();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaceImplicitImplementation/after/ASuper.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaceImplicitImplementation/after/ASuper.java
new file mode 100644
index 0000000..1f245b7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaceImplicitImplementation/after/ASuper.java
@@ -0,0 +1,5 @@
+public class ASuper {
+    public void method2 () {
+        System.out.println("2");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaceImplicitImplementation/after/Intf.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaceImplicitImplementation/after/Intf.java
new file mode 100644
index 0000000..6e8322f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaceImplicitImplementation/after/Intf.java
@@ -0,0 +1,4 @@
+public interface Intf {
+    void method1();
+    void method2();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaceImplicitImplementation/after/Usage.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaceImplicitImplementation/after/Usage.java
new file mode 100644
index 0000000..1db8459
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaceImplicitImplementation/after/Usage.java
@@ -0,0 +1,12 @@
+public class Usage {
+    A a = new A();
+
+    public void usage() {
+        a.getMyDelegate().method1();
+        a.method2();
+        use(a.getMyDelegate());
+    }
+
+    private void use(Intf i) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaceImplicitImplementation/before/A.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaceImplicitImplementation/before/A.java
new file mode 100644
index 0000000..272acc7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaceImplicitImplementation/before/A.java
@@ -0,0 +1,5 @@
+public class A extends ASuper implements Intf {
+    public void method1 () {
+        System.out.println("1");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaceImplicitImplementation/before/ASuper.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaceImplicitImplementation/before/ASuper.java
new file mode 100644
index 0000000..1f245b7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaceImplicitImplementation/before/ASuper.java
@@ -0,0 +1,5 @@
+public class ASuper {
+    public void method2 () {
+        System.out.println("2");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaceImplicitImplementation/before/Intf.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaceImplicitImplementation/before/Intf.java
new file mode 100644
index 0000000..6e8322f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaceImplicitImplementation/before/Intf.java
@@ -0,0 +1,4 @@
+public interface Intf {
+    void method1();
+    void method2();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaceImplicitImplementation/before/Usage.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaceImplicitImplementation/before/Usage.java
new file mode 100644
index 0000000..f367f27
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaceImplicitImplementation/before/Usage.java
@@ -0,0 +1,12 @@
+public class Usage {
+    A a = new A();
+
+    public void usage() {
+        a.method1();
+        a.method2();
+        use(a);
+    }
+
+    private void use(Intf i) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaces/after/A.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaces/after/A.java
new file mode 100644
index 0000000..da60cb9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaces/after/A.java
@@ -0,0 +1,11 @@
+public class A implements I {
+    private final Base myDelegate = new Base();
+
+    public Base getMyDelegate() {
+        return myDelegate;
+    }
+
+    public void methodFromI() {
+        myDelegate.methodFromI();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaces/after/Base.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaces/after/Base.java
new file mode 100644
index 0000000..6a5e084
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaces/after/Base.java
@@ -0,0 +1,7 @@
+public class Base implements I, J {
+    public void methodFromI() {
+    }
+   
+    public void methodFromJ() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaces/after/I.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaces/after/I.java
new file mode 100644
index 0000000..006dc52
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaces/after/I.java
@@ -0,0 +1,3 @@
+public interface I {
+    void methodFromI();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaces/after/J.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaces/after/J.java
new file mode 100644
index 0000000..efd19d6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaces/after/J.java
@@ -0,0 +1,3 @@
+public interface J {
+    void methodFromJ();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaces/after/Usage.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaces/after/Usage.java
new file mode 100644
index 0000000..019f386a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaces/after/Usage.java
@@ -0,0 +1,23 @@
+class Usage {
+    private A myA = new A();
+    public void methodExpectingI(I i) {
+        i.methodFromI();
+    }
+
+    public J methodReturningJ() {
+        return myA.getMyDelegate();
+    }
+
+    public void methodExpectingJ(J j) {
+        j.methodFromJ();
+    }
+
+    public void main() {
+        A a = new A();
+        a.methodFromI();
+        a.getMyDelegate().methodFromJ();
+        methodExpectingI(a);
+        methodExpectingJ(a.getMyDelegate());
+        methodExpectingJ(myA.getMyDelegate());
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaces/before/A.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaces/before/A.java
new file mode 100644
index 0000000..e31cfab
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaces/before/A.java
@@ -0,0 +1,2 @@
+public class A extends Base {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaces/before/Base.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaces/before/Base.java
new file mode 100644
index 0000000..6a5e084
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaces/before/Base.java
@@ -0,0 +1,7 @@
+public class Base implements I, J {
+    public void methodFromI() {
+    }
+   
+    public void methodFromJ() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaces/before/I.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaces/before/I.java
new file mode 100644
index 0000000..006dc52
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaces/before/I.java
@@ -0,0 +1,3 @@
+public interface I {
+    void methodFromI();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaces/before/J.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaces/before/J.java
new file mode 100644
index 0000000..efd19d6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaces/before/J.java
@@ -0,0 +1,3 @@
+public interface J {
+    void methodFromJ();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaces/before/Usage.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaces/before/Usage.java
new file mode 100644
index 0000000..c536b34
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/interfaces/before/Usage.java
@@ -0,0 +1,23 @@
+class Usage {
+    private A myA = new A();
+    public void methodExpectingI(I i) {
+        i.methodFromI();
+    }
+
+    public J methodReturningJ() {
+        return myA;
+    }
+
+    public void methodExpectingJ(J j) {
+        j.methodFromJ();
+    }
+
+    public void main() {
+        A a = new A();
+        a.methodFromI();
+        a.methodFromJ();
+        methodExpectingI(a);
+        methodExpectingJ(a);
+        methodExpectingJ(myA);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/multipleInterfaceDelegation/after/A.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/multipleInterfaceDelegation/after/A.java
new file mode 100644
index 0000000..69fd5f4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/multipleInterfaceDelegation/after/A.java
@@ -0,0 +1,13 @@
+public class A implements Intf {
+    public final MyIntf myDelegate = new MyIntf();
+
+    public void method1() {
+        myDelegate.method2();
+    }
+
+    private class MyIntf implements Intf2 {
+        public void method2 () {
+            System.out.println("2");
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/multipleInterfaceDelegation/after/Intf.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/multipleInterfaceDelegation/after/Intf.java
new file mode 100644
index 0000000..a2c6104
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/multipleInterfaceDelegation/after/Intf.java
@@ -0,0 +1,3 @@
+public interface Intf {
+    void method1();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/multipleInterfaceDelegation/after/Intf2.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/multipleInterfaceDelegation/after/Intf2.java
new file mode 100644
index 0000000..70be986
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/multipleInterfaceDelegation/after/Intf2.java
@@ -0,0 +1,3 @@
+public interface Intf2 {
+    void method2();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/multipleInterfaceDelegation/before/A.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/multipleInterfaceDelegation/before/A.java
new file mode 100644
index 0000000..031b699
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/multipleInterfaceDelegation/before/A.java
@@ -0,0 +1,9 @@
+public class A implements Intf, Intf2 {
+    public void method1() {
+        method2();
+    }
+
+    public void method2 () {
+        System.out.println("2");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/multipleInterfaceDelegation/before/Intf.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/multipleInterfaceDelegation/before/Intf.java
new file mode 100644
index 0000000..a2c6104
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/multipleInterfaceDelegation/before/Intf.java
@@ -0,0 +1,3 @@
+public interface Intf {
+    void method1();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/multipleInterfaceDelegation/before/Intf2.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/multipleInterfaceDelegation/before/Intf2.java
new file mode 100644
index 0000000..70be986
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/multipleInterfaceDelegation/before/Intf2.java
@@ -0,0 +1,3 @@
+public interface Intf2 {
+    void method2();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/overridenMethods/after/A.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/overridenMethods/after/A.java
new file mode 100644
index 0000000..3eae87f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/overridenMethods/after/A.java
@@ -0,0 +1,23 @@
+class A {
+    private final MyBase myDelegate = new MyBase();
+    int fieldFromA;
+
+    public void firstMethodFromBase() {
+        myDelegate.firstMethodFromBase();
+    }
+
+    private class MyBase extends Base {
+        public void firstMethodFromBase() {
+            super.firstMethodFromBase();
+        }
+
+        public void secondMethodFromBase() {
+            fieldFromA = 27;
+            A.this.fieldFromA++;
+        }
+
+        Base getInstance() {
+            return this;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/overridenMethods/after/Base.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/overridenMethods/after/Base.java
new file mode 100644
index 0000000..45d37c5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/overridenMethods/after/Base.java
@@ -0,0 +1,12 @@
+public class Base implements Runnable {
+    void firstMethodFromBase() {
+    } 
+    void secondMethodFromBase() {
+    }
+    Base getInstance() {
+        return null;
+    }
+    public void run() {
+        // do nothing
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/overridenMethods/before/A.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/overridenMethods/before/A.java
new file mode 100644
index 0000000..9198acf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/overridenMethods/before/A.java
@@ -0,0 +1,13 @@
+class A extends Base {    
+    int fieldFromA;
+    public void firstMethodFromBase() {
+        super.firstMethodFromBase();
+    }
+    public void secondMethodFromBase() {
+        fieldFromA = 27;
+        this.fieldFromA++;
+    }
+    Base getInstance() {
+        return this;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/overridenMethods/before/Base.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/overridenMethods/before/Base.java
new file mode 100644
index 0000000..45d37c5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/overridenMethods/before/Base.java
@@ -0,0 +1,12 @@
+public class Base implements Runnable {
+    void firstMethodFromBase() {
+    } 
+    void secondMethodFromBase() {
+    }
+    Base getInstance() {
+        return null;
+    }
+    public void run() {
+        // do nothing
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/scr20557/after/xxx/SCR20557.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/scr20557/after/xxx/SCR20557.java
new file mode 100644
index 0000000..7f586ca
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/scr20557/after/xxx/SCR20557.java
@@ -0,0 +1,532 @@
+package xxx;
+
+import java.sql.*;
+import java.util.Calendar;
+import java.util.Map;
+import java.io.InputStream;
+import java.io.Reader;
+import java.math.BigDecimal;
+import java.net.URL;
+
+/**
+ * @author dsl
+ */
+public class SCR20557 {
+
+    private final MyResultSet myResultSet = new MyResultSet();
+
+    public Date getDate(int columnIndex) throws SQLException {
+        return myResultSet.getDate(columnIndex);
+    }
+
+    public Date getDate(String columnName) throws SQLException {
+        return myResultSet.getDate(columnName);
+    }
+
+    public Date getDate(int columnIndex, Calendar cal) throws SQLException {
+        return myResultSet.getDate(columnIndex, cal);
+    }
+
+    public Date getDate(String columnName, Calendar cal) throws SQLException {
+        return myResultSet.getDate(columnName, cal);
+    }
+
+    private class MyResultSet implements ResultSet {
+        public void updateLong(int columnIndex, long x) throws SQLException {
+        }
+
+        public void updateLong(String columnName, long x) throws SQLException {
+        }
+
+        public boolean getBoolean(int columnIndex) throws SQLException {
+          return false;
+        }
+
+        public boolean getBoolean(String columnName) throws SQLException {
+          return false;
+        }
+
+        public boolean wasNull() throws SQLException {
+          return false;
+        }
+
+        public int getRow() throws SQLException {
+          return 0;
+        }
+
+        public int getConcurrency() throws SQLException {
+          return 0;
+        }
+
+        public int getFetchSize() throws SQLException {
+          return 0;
+        }
+
+        public Ref getRef(int i) throws SQLException {
+          return null;
+        }
+
+        public Ref getRef(String colName) throws SQLException {
+          return null;
+        }
+
+        public Date getDate(int columnIndex) throws SQLException {
+          return null;
+        }
+
+        public Date getDate(String columnName) throws SQLException {
+          return null;
+        }
+
+        public Date getDate(int columnIndex, Calendar cal) throws SQLException {
+          return null;
+        }
+
+        public Date getDate(String columnName, Calendar cal) throws SQLException {
+          return null;
+        }
+
+        public Statement getStatement() throws SQLException {
+          return null;
+        }
+
+        public boolean isFirst() throws SQLException {
+          return false;
+        }
+
+        public boolean previous() throws SQLException {
+          return false;
+        }
+
+        public void updateFloat(int columnIndex, float x) throws SQLException {
+        }
+
+        public void updateFloat(String columnName, float x) throws SQLException {
+        }
+
+        public void updateBinaryStream(int columnIndex, InputStream x, int length) throws SQLException {
+        }
+
+        public void updateBinaryStream(String columnName, InputStream x, int length) throws SQLException {
+        }
+
+        public void updateRow() throws SQLException {
+        }
+
+        public long getLong(int columnIndex) throws SQLException {
+          return 0;
+        }
+
+        public long getLong(String columnName) throws SQLException {
+          return 0;
+        }
+
+        public void updateRef(int columnIndex, Ref x) throws SQLException {
+        }
+
+        public void updateRef(String columnName, Ref x) throws SQLException {
+        }
+
+        public void updateByte(int columnIndex, byte x) throws SQLException {
+        }
+
+        public void updateByte(String columnName, byte x) throws SQLException {
+        }
+
+        public void cancelRowUpdates() throws SQLException {
+        }
+
+        public Reader getCharacterStream(int columnIndex) throws SQLException {
+          return null;
+        }
+
+        public Reader getCharacterStream(String columnName) throws SQLException {
+          return null;
+        }
+
+        public boolean absolute(int row) throws SQLException {
+          return false;
+        }
+
+        public boolean first() throws SQLException {
+          return false;
+        }
+
+        public void updateAsciiStream(int columnIndex, InputStream x, int length) throws SQLException {
+        }
+
+        public void updateAsciiStream(String columnName, InputStream x, int length) throws SQLException {
+        }
+
+        public void moveToInsertRow() throws SQLException {
+        }
+
+        public SQLWarning getWarnings() throws SQLException {
+          return null;
+        }
+
+        public void updateDate(int columnIndex, Date x) throws SQLException {
+        }
+
+        public void updateDate(String columnName, Date x) throws SQLException {
+        }
+
+        public InputStream getBinaryStream(int columnIndex) throws SQLException {
+          return null;
+        }
+
+        public InputStream getBinaryStream(String columnName) throws SQLException {
+          return null;
+        }
+
+        public Time getTime(int columnIndex) throws SQLException {
+          return null;
+        }
+
+        public Time getTime(String columnName) throws SQLException {
+          return null;
+        }
+
+        public Time getTime(int columnIndex, Calendar cal) throws SQLException {
+          return null;
+        }
+
+        public Time getTime(String columnName, Calendar cal) throws SQLException {
+          return null;
+        }
+
+        public String getCursorName() throws SQLException {
+          return null;
+        }
+
+        public void updateBytes(int columnIndex, byte x[]) throws SQLException {
+        }
+
+        public void updateBytes(String columnName, byte x[]) throws SQLException {
+        }
+
+        public boolean last() throws SQLException {
+          return false;
+        }
+
+        public Timestamp getTimestamp(int columnIndex) throws SQLException {
+          return null;
+        }
+
+        public Timestamp getTimestamp(String columnName) throws SQLException {
+          return null;
+        }
+
+        public Timestamp getTimestamp(int columnIndex, Calendar cal) throws SQLException {
+          return null;
+        }
+
+        public Timestamp getTimestamp(String columnName, Calendar cal) throws SQLException {
+          return null;
+        }
+
+        public void updateBoolean(int columnIndex, boolean x) throws SQLException {
+        }
+
+        public void updateBoolean(String columnName, boolean x) throws SQLException {
+        }
+
+        public void beforeFirst() throws SQLException {
+        }
+
+        public int getFetchDirection() throws SQLException {
+          return 0;
+        }
+
+        public void updateDouble(int columnIndex, double x) throws SQLException {
+        }
+
+        public void updateDouble(String columnName, double x) throws SQLException {
+        }
+
+        public void setFetchDirection(int direction) throws SQLException {
+        }
+
+        public boolean rowDeleted() throws SQLException {
+          return false;
+        }
+
+        public void moveToCurrentRow() throws SQLException {
+        }
+
+        public void insertRow() throws SQLException {
+        }
+
+        public BigDecimal getBigDecimal(int columnIndex) throws SQLException {
+          return null;
+        }
+
+        public BigDecimal getBigDecimal(int columnIndex, int scale) throws SQLException {
+          return null;
+        }
+
+        public BigDecimal getBigDecimal(String columnName) throws SQLException {
+          return null;
+        }
+
+        public BigDecimal getBigDecimal(String columnName, int scale) throws SQLException {
+          return null;
+        }
+
+        public URL getURL(int columnIndex) throws SQLException {
+          return null;
+        }
+
+        public URL getURL(String columnName) throws SQLException {
+          return null;
+        }
+
+        public boolean isAfterLast() throws SQLException {
+          return false;
+        }
+
+        public short getShort(int columnIndex) throws SQLException {
+          return 0;
+        }
+
+        public short getShort(String columnName) throws SQLException {
+          return 0;
+        }
+
+        public void updateInt(int columnIndex, int x) throws SQLException {
+        }
+
+        public void updateInt(String columnName, int x) throws SQLException {
+        }
+
+        public void clearWarnings() throws SQLException {
+        }
+
+        public void updateCharacterStream(int columnIndex, Reader x, int length) throws SQLException {
+        }
+
+        public void updateCharacterStream(String columnName, Reader reader, int length) throws SQLException {
+        }
+
+        public Blob getBlob(int i) throws SQLException {
+          return null;
+        }
+
+        public Blob getBlob(String colName) throws SQLException {
+          return null;
+        }
+
+        public void refreshRow() throws SQLException {
+        }
+
+        public void updateTime(int columnIndex, Time x) throws SQLException {
+        }
+
+        public void updateTime(String columnName, Time x) throws SQLException {
+        }
+
+        public void updateArray(int columnIndex, Array x) throws SQLException {
+        }
+
+        public void updateArray(String columnName, Array x) throws SQLException {
+        }
+
+        public void updateObject(int columnIndex, Object x) throws SQLException {
+        }
+
+        public void updateObject(int columnIndex, Object x, int scale) throws SQLException {
+        }
+
+        public void updateObject(String columnName, Object x) throws SQLException {
+        }
+
+        public void updateObject(String columnName, Object x, int scale) throws SQLException {
+        }
+
+        public void updateNull(int columnIndex) throws SQLException {
+        }
+
+        public void updateNull(String columnName) throws SQLException {
+        }
+
+        public void close() throws SQLException {
+        }
+
+        public boolean rowInserted() throws SQLException {
+          return false;
+        }
+
+        public Clob getClob(int i) throws SQLException {
+          return null;
+        }
+
+        public Clob getClob(String colName) throws SQLException {
+          return null;
+        }
+
+        public void updateBigDecimal(int columnIndex, BigDecimal x) throws SQLException {
+        }
+
+        public void updateBigDecimal(String columnName, BigDecimal x) throws SQLException {
+        }
+
+        public int getType() throws SQLException {
+          return 0;
+        }
+
+        public boolean next() throws SQLException {
+          return false;
+        }
+
+        public int getInt(int columnIndex) throws SQLException {
+          return 0;
+        }
+
+        public int getInt(String columnName) throws SQLException {
+          return 0;
+        }
+
+        public void updateBlob(int columnIndex, Blob x) throws SQLException {
+        }
+
+        public void updateBlob(String columnName, Blob x) throws SQLException {
+        }
+
+        public ResultSetMetaData getMetaData() throws SQLException {
+          return null;
+        }
+
+        public boolean rowUpdated() throws SQLException {
+          return false;
+        }
+
+        public Array getArray(int i) throws SQLException {
+          return null;
+        }
+
+        public Array getArray(String colName) throws SQLException {
+          return null;
+        }
+
+        public byte getByte(int columnIndex) throws SQLException {
+          return 0;
+        }
+
+        public byte getByte(String columnName) throws SQLException {
+          return 0;
+        }
+
+        public InputStream getAsciiStream(int columnIndex) throws SQLException {
+          return null;
+        }
+
+        public InputStream getAsciiStream(String columnName) throws SQLException {
+          return null;
+        }
+
+        public double getDouble(int columnIndex) throws SQLException {
+          return 0;
+        }
+
+        public double getDouble(String columnName) throws SQLException {
+          return 0;
+        }
+
+        public void updateTimestamp(int columnIndex, Timestamp x) throws SQLException {
+        }
+
+        public void updateTimestamp(String columnName, Timestamp x) throws SQLException {
+        }
+
+        public void updateClob(int columnIndex, Clob x) throws SQLException {
+        }
+
+        public void updateClob(String columnName, Clob x) throws SQLException {
+        }
+
+        public boolean isBeforeFirst() throws SQLException {
+          return false;
+        }
+
+        public void deleteRow() throws SQLException {
+        }
+
+        public void afterLast() throws SQLException {
+        }
+
+        public InputStream getUnicodeStream(int columnIndex) throws SQLException {
+          return null;
+        }
+
+        public InputStream getUnicodeStream(String columnName) throws SQLException {
+          return null;
+        }
+
+        public byte[] getBytes(int columnIndex) throws SQLException {
+          return new byte[0];
+        }
+
+        public byte[] getBytes(String columnName) throws SQLException {
+          return new byte[0];
+        }
+
+        public void updateString(int columnIndex, String x) throws SQLException {
+        }
+
+        public void updateString(String columnName, String x) throws SQLException {
+        }
+
+        public float getFloat(int columnIndex) throws SQLException {
+          return 0;
+        }
+
+        public float getFloat(String columnName) throws SQLException {
+          return 0;
+        }
+
+        public Object getObject(int columnIndex) throws SQLException {
+          return null;
+        }
+
+        public Object getObject(String columnName) throws SQLException {
+          return null;
+        }
+
+        public Object getObject(int i, Map map) throws SQLException {
+          return null;
+        }
+
+        public Object getObject(String colName, Map map) throws SQLException {
+          return null;
+        }
+
+        public void setFetchSize(int rows) throws SQLException {
+        }
+
+        public boolean isLast() throws SQLException {
+          return false;
+        }
+
+        public void updateShort(int columnIndex, short x) throws SQLException {
+        }
+
+        public void updateShort(String columnName, short x) throws SQLException {
+        }
+
+        public String getString(int columnIndex) throws SQLException {
+          return null;
+        }
+
+        public String getString(String columnName) throws SQLException {
+          return null;
+        }
+
+        public int findColumn(String columnName) throws SQLException {
+          return 0;
+        }
+
+        public boolean relative(int rows) throws SQLException {
+          return false;
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/scr20557/before/xxx/SCR20557.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/scr20557/before/xxx/SCR20557.java
new file mode 100644
index 0000000..5273292
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/scr20557/before/xxx/SCR20557.java
@@ -0,0 +1,511 @@
+package xxx;
+
+import java.sql.*;
+import java.util.Calendar;
+import java.util.Map;
+import java.io.InputStream;
+import java.io.Reader;
+import java.math.BigDecimal;
+import java.net.URL;
+
+/**
+ * @author dsl
+ */
+public class SCR20557 implements ResultSet {
+  public void updateLong(int columnIndex, long x) throws SQLException {
+  }
+
+  public void updateLong(String columnName, long x) throws SQLException {
+  }
+
+  public boolean getBoolean(int columnIndex) throws SQLException {
+    return false;
+  }
+
+  public boolean getBoolean(String columnName) throws SQLException {
+    return false;
+  }
+
+  public boolean wasNull() throws SQLException {
+    return false;
+  }
+
+  public int getRow() throws SQLException {
+    return 0;
+  }
+
+  public int getConcurrency() throws SQLException {
+    return 0;
+  }
+
+  public int getFetchSize() throws SQLException {
+    return 0;
+  }
+
+  public Ref getRef(int i) throws SQLException {
+    return null;
+  }
+
+  public Ref getRef(String colName) throws SQLException {
+    return null;
+  }
+
+  public Date getDate(int columnIndex) throws SQLException {
+    return null;
+  }
+
+  public Date getDate(String columnName) throws SQLException {
+    return null;
+  }
+
+  public Date getDate(int columnIndex, Calendar cal) throws SQLException {
+    return null;
+  }
+
+  public Date getDate(String columnName, Calendar cal) throws SQLException {
+    return null;
+  }
+
+  public Statement getStatement() throws SQLException {
+    return null;
+  }
+
+  public boolean isFirst() throws SQLException {
+    return false;
+  }
+
+  public boolean previous() throws SQLException {
+    return false;
+  }
+
+  public void updateFloat(int columnIndex, float x) throws SQLException {
+  }
+
+  public void updateFloat(String columnName, float x) throws SQLException {
+  }
+
+  public void updateBinaryStream(int columnIndex, InputStream x, int length) throws SQLException {
+  }
+
+  public void updateBinaryStream(String columnName, InputStream x, int length) throws SQLException {
+  }
+
+  public void updateRow() throws SQLException {
+  }
+
+  public long getLong(int columnIndex) throws SQLException {
+    return 0;
+  }
+
+  public long getLong(String columnName) throws SQLException {
+    return 0;
+  }
+
+  public void updateRef(int columnIndex, Ref x) throws SQLException {
+  }
+
+  public void updateRef(String columnName, Ref x) throws SQLException {
+  }
+
+  public void updateByte(int columnIndex, byte x) throws SQLException {
+  }
+
+  public void updateByte(String columnName, byte x) throws SQLException {
+  }
+
+  public void cancelRowUpdates() throws SQLException {
+  }
+
+  public Reader getCharacterStream(int columnIndex) throws SQLException {
+    return null;
+  }
+
+  public Reader getCharacterStream(String columnName) throws SQLException {
+    return null;
+  }
+
+  public boolean absolute(int row) throws SQLException {
+    return false;
+  }
+
+  public boolean first() throws SQLException {
+    return false;
+  }
+
+  public void updateAsciiStream(int columnIndex, InputStream x, int length) throws SQLException {
+  }
+
+  public void updateAsciiStream(String columnName, InputStream x, int length) throws SQLException {
+  }
+
+  public void moveToInsertRow() throws SQLException {
+  }
+
+  public SQLWarning getWarnings() throws SQLException {
+    return null;
+  }
+
+  public void updateDate(int columnIndex, Date x) throws SQLException {
+  }
+
+  public void updateDate(String columnName, Date x) throws SQLException {
+  }
+
+  public InputStream getBinaryStream(int columnIndex) throws SQLException {
+    return null;
+  }
+
+  public InputStream getBinaryStream(String columnName) throws SQLException {
+    return null;
+  }
+
+  public Time getTime(int columnIndex) throws SQLException {
+    return null;
+  }
+
+  public Time getTime(String columnName) throws SQLException {
+    return null;
+  }
+
+  public Time getTime(int columnIndex, Calendar cal) throws SQLException {
+    return null;
+  }
+
+  public Time getTime(String columnName, Calendar cal) throws SQLException {
+    return null;
+  }
+
+  public String getCursorName() throws SQLException {
+    return null;
+  }
+
+  public void updateBytes(int columnIndex, byte x[]) throws SQLException {
+  }
+
+  public void updateBytes(String columnName, byte x[]) throws SQLException {
+  }
+
+  public boolean last() throws SQLException {
+    return false;
+  }
+
+  public Timestamp getTimestamp(int columnIndex) throws SQLException {
+    return null;
+  }
+
+  public Timestamp getTimestamp(String columnName) throws SQLException {
+    return null;
+  }
+
+  public Timestamp getTimestamp(int columnIndex, Calendar cal) throws SQLException {
+    return null;
+  }
+
+  public Timestamp getTimestamp(String columnName, Calendar cal) throws SQLException {
+    return null;
+  }
+
+  public void updateBoolean(int columnIndex, boolean x) throws SQLException {
+  }
+
+  public void updateBoolean(String columnName, boolean x) throws SQLException {
+  }
+
+  public void beforeFirst() throws SQLException {
+  }
+
+  public int getFetchDirection() throws SQLException {
+    return 0;
+  }
+
+  public void updateDouble(int columnIndex, double x) throws SQLException {
+  }
+
+  public void updateDouble(String columnName, double x) throws SQLException {
+  }
+
+  public void setFetchDirection(int direction) throws SQLException {
+  }
+
+  public boolean rowDeleted() throws SQLException {
+    return false;
+  }
+
+  public void moveToCurrentRow() throws SQLException {
+  }
+
+  public void insertRow() throws SQLException {
+  }
+
+  public BigDecimal getBigDecimal(int columnIndex) throws SQLException {
+    return null;
+  }
+
+  public BigDecimal getBigDecimal(int columnIndex, int scale) throws SQLException {
+    return null;
+  }
+
+  public BigDecimal getBigDecimal(String columnName) throws SQLException {
+    return null;
+  }
+
+  public BigDecimal getBigDecimal(String columnName, int scale) throws SQLException {
+    return null;
+  }
+
+  public URL getURL(int columnIndex) throws SQLException {
+    return null;
+  }
+
+  public URL getURL(String columnName) throws SQLException {
+    return null;
+  }
+
+  public boolean isAfterLast() throws SQLException {
+    return false;
+  }
+
+  public short getShort(int columnIndex) throws SQLException {
+    return 0;
+  }
+
+  public short getShort(String columnName) throws SQLException {
+    return 0;
+  }
+
+  public void updateInt(int columnIndex, int x) throws SQLException {
+  }
+
+  public void updateInt(String columnName, int x) throws SQLException {
+  }
+
+  public void clearWarnings() throws SQLException {
+  }
+
+  public void updateCharacterStream(int columnIndex, Reader x, int length) throws SQLException {
+  }
+
+  public void updateCharacterStream(String columnName, Reader reader, int length) throws SQLException {
+  }
+
+  public Blob getBlob(int i) throws SQLException {
+    return null;
+  }
+
+  public Blob getBlob(String colName) throws SQLException {
+    return null;
+  }
+
+  public void refreshRow() throws SQLException {
+  }
+
+  public void updateTime(int columnIndex, Time x) throws SQLException {
+  }
+
+  public void updateTime(String columnName, Time x) throws SQLException {
+  }
+
+  public void updateArray(int columnIndex, Array x) throws SQLException {
+  }
+
+  public void updateArray(String columnName, Array x) throws SQLException {
+  }
+
+  public void updateObject(int columnIndex, Object x) throws SQLException {
+  }
+
+  public void updateObject(int columnIndex, Object x, int scale) throws SQLException {
+  }
+
+  public void updateObject(String columnName, Object x) throws SQLException {
+  }
+
+  public void updateObject(String columnName, Object x, int scale) throws SQLException {
+  }
+
+  public void updateNull(int columnIndex) throws SQLException {
+  }
+
+  public void updateNull(String columnName) throws SQLException {
+  }
+
+  public void close() throws SQLException {
+  }
+
+  public boolean rowInserted() throws SQLException {
+    return false;
+  }
+
+  public Clob getClob(int i) throws SQLException {
+    return null;
+  }
+
+  public Clob getClob(String colName) throws SQLException {
+    return null;
+  }
+
+  public void updateBigDecimal(int columnIndex, BigDecimal x) throws SQLException {
+  }
+
+  public void updateBigDecimal(String columnName, BigDecimal x) throws SQLException {
+  }
+
+  public int getType() throws SQLException {
+    return 0;
+  }
+
+  public boolean next() throws SQLException {
+    return false;
+  }
+
+  public int getInt(int columnIndex) throws SQLException {
+    return 0;
+  }
+
+  public int getInt(String columnName) throws SQLException {
+    return 0;
+  }
+
+  public void updateBlob(int columnIndex, Blob x) throws SQLException {
+  }
+
+  public void updateBlob(String columnName, Blob x) throws SQLException {
+  }
+
+  public ResultSetMetaData getMetaData() throws SQLException {
+    return null;
+  }
+
+  public boolean rowUpdated() throws SQLException {
+    return false;
+  }
+
+  public Array getArray(int i) throws SQLException {
+    return null;
+  }
+
+  public Array getArray(String colName) throws SQLException {
+    return null;
+  }
+
+  public byte getByte(int columnIndex) throws SQLException {
+    return 0;
+  }
+
+  public byte getByte(String columnName) throws SQLException {
+    return 0;
+  }
+
+  public InputStream getAsciiStream(int columnIndex) throws SQLException {
+    return null;
+  }
+
+  public InputStream getAsciiStream(String columnName) throws SQLException {
+    return null;
+  }
+
+  public double getDouble(int columnIndex) throws SQLException {
+    return 0;
+  }
+
+  public double getDouble(String columnName) throws SQLException {
+    return 0;
+  }
+
+  public void updateTimestamp(int columnIndex, Timestamp x) throws SQLException {
+  }
+
+  public void updateTimestamp(String columnName, Timestamp x) throws SQLException {
+  }
+
+  public void updateClob(int columnIndex, Clob x) throws SQLException {
+  }
+
+  public void updateClob(String columnName, Clob x) throws SQLException {
+  }
+
+  public boolean isBeforeFirst() throws SQLException {
+    return false;
+  }
+
+  public void deleteRow() throws SQLException {
+  }
+
+  public void afterLast() throws SQLException {
+  }
+
+  public InputStream getUnicodeStream(int columnIndex) throws SQLException {
+    return null;
+  }
+
+  public InputStream getUnicodeStream(String columnName) throws SQLException {
+    return null;
+  }
+
+  public byte[] getBytes(int columnIndex) throws SQLException {
+    return new byte[0];
+  }
+
+  public byte[] getBytes(String columnName) throws SQLException {
+    return new byte[0];
+  }
+
+  public void updateString(int columnIndex, String x) throws SQLException {
+  }
+
+  public void updateString(String columnName, String x) throws SQLException {
+  }
+
+  public float getFloat(int columnIndex) throws SQLException {
+    return 0;
+  }
+
+  public float getFloat(String columnName) throws SQLException {
+    return 0;
+  }
+
+  public Object getObject(int columnIndex) throws SQLException {
+    return null;
+  }
+
+  public Object getObject(String columnName) throws SQLException {
+    return null;
+  }
+
+  public Object getObject(int i, Map map) throws SQLException {
+    return null;
+  }
+
+  public Object getObject(String colName, Map map) throws SQLException {
+    return null;
+  }
+
+  public void setFetchSize(int rows) throws SQLException {
+  }
+
+  public boolean isLast() throws SQLException {
+    return false;
+  }
+
+  public void updateShort(int columnIndex, short x) throws SQLException {
+  }
+
+  public void updateShort(String columnName, short x) throws SQLException {
+  }
+
+  public String getString(int columnIndex) throws SQLException {
+    return null;
+  }
+
+  public String getString(String columnName) throws SQLException {
+    return null;
+  }
+
+  public int findColumn(String columnName) throws SQLException {
+    return 0;
+  }
+
+  public boolean relative(int rows) throws SQLException {
+    return false;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/simpleGenerics/after/A.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/simpleGenerics/after/A.java
new file mode 100644
index 0000000..4f96fe3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/simpleGenerics/after/A.java
@@ -0,0 +1,10 @@
+class List <T> {}
+
+class A<T> {
+    public List<? extends T> method1() {
+        return null;
+    }
+    public T method2(T t) {
+        return null;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/simpleGenerics/after/B.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/simpleGenerics/after/B.java
new file mode 100644
index 0000000..e0c0bb4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/simpleGenerics/after/B.java
@@ -0,0 +1,11 @@
+class B {
+    public final A<String> myDelegate = new A<String>();
+
+    public List<? extends String> method1() {
+        return myDelegate.method1();
+    }
+
+    public String method2(String s) {
+        return myDelegate.method2(s);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/simpleGenerics/before/A.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/simpleGenerics/before/A.java
new file mode 100644
index 0000000..4f96fe3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/simpleGenerics/before/A.java
@@ -0,0 +1,10 @@
+class List <T> {}
+
+class A<T> {
+    public List<? extends T> method1() {
+        return null;
+    }
+    public T method2(T t) {
+        return null;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/simpleGenerics/before/B.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/simpleGenerics/before/B.java
new file mode 100644
index 0000000..0a5542a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/simpleGenerics/before/B.java
@@ -0,0 +1,2 @@
+class B extends A<String> {       
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/simpleInsertion/after/A.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/simpleInsertion/after/A.java
new file mode 100644
index 0000000..e913171
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/simpleInsertion/after/A.java
@@ -0,0 +1,7 @@
+class A {
+    public void methodFromA() {
+    }
+    public int intMethodFromA(int i) {
+        return 0;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/simpleInsertion/after/B.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/simpleInsertion/after/B.java
new file mode 100644
index 0000000..0b27acd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/simpleInsertion/after/B.java
@@ -0,0 +1,11 @@
+class B {
+    public final A myDelegate = new A();
+
+    public void methodFromA() {
+        myDelegate.methodFromA();
+    }
+
+    public int intMethodFromA(int i) {
+        return myDelegate.intMethodFromA(i);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/simpleInsertion/before/A.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/simpleInsertion/before/A.java
new file mode 100644
index 0000000..e913171
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/simpleInsertion/before/A.java
@@ -0,0 +1,7 @@
+class A {
+    public void methodFromA() {
+    }
+    public int intMethodFromA(int i) {
+        return 0;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/simpleInsertion/before/B.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/simpleInsertion/before/B.java
new file mode 100644
index 0000000..776583f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/simpleInsertion/before/B.java
@@ -0,0 +1,2 @@
+class B extends A {       
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/subClass/after/A.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/subClass/after/A.java
new file mode 100644
index 0000000..1892816
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/subClass/after/A.java
@@ -0,0 +1,20 @@
+public class A {
+    private final DelegatedBase myDelegate = new DelegatedBase();
+
+    int methodFromA() {
+        delegatedBaseMethod();
+        return myDelegate.delegatedBaseField;
+    }
+
+    DelegatedBase getSomething() {
+        return myDelegate;
+    }
+
+    public DelegatedBase getMyDelegate() {
+        return myDelegate;
+    }
+
+    void delegatedBaseMethod() {
+        myDelegate.delegatedBaseMethod();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/subClass/after/B.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/subClass/after/B.java
new file mode 100644
index 0000000..9c40fcc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/subClass/after/B.java
@@ -0,0 +1,5 @@
+public class B extends A {
+    void methodFromB() {
+        super.delegatedBaseMethod();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/subClass/after/DelegatedBase.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/subClass/after/DelegatedBase.java
new file mode 100644
index 0000000..8f1274e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/subClass/after/DelegatedBase.java
@@ -0,0 +1,7 @@
+public class DelegatedBase {
+    int delegatedBaseField;
+
+    void delegatedBaseMethod() {
+
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/subClass/after/Usage.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/subClass/after/Usage.java
new file mode 100644
index 0000000..ad278a5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/subClass/after/Usage.java
@@ -0,0 +1,20 @@
+public class Usage {
+    public void parameterUsageMethod(DelegatedBase b) {
+        b.delegatedBaseMethod();
+    }
+
+    public int testMethod() {
+        A a = new A();
+        B b = new B();
+        parameterUsageMethod(a.getMyDelegate());
+        parameterUsageMethod(b.getMyDelegate());
+        a.delegatedBaseMethod();
+        b.delegatedBaseMethod();
+        a.equals(b);
+        return a.getMyDelegate().delegatedBaseField + b.getMyDelegate().delegatedBaseField;
+    }
+
+    DelegatedBase getDelegatedBase(A a) {
+        return a.getMyDelegate();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/subClass/before/A.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/subClass/before/A.java
new file mode 100644
index 0000000..d6e5ef4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/subClass/before/A.java
@@ -0,0 +1,10 @@
+public class A extends DelegatedBase{
+    int methodFromA() {
+        delegatedBaseMethod();
+        return delegatedBaseField;
+    }
+
+    DelegatedBase getSomething() {
+        return this;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/subClass/before/B.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/subClass/before/B.java
new file mode 100644
index 0000000..9c40fcc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/subClass/before/B.java
@@ -0,0 +1,5 @@
+public class B extends A {
+    void methodFromB() {
+        super.delegatedBaseMethod();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/subClass/before/DelegatedBase.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/subClass/before/DelegatedBase.java
new file mode 100644
index 0000000..8f1274e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/subClass/before/DelegatedBase.java
@@ -0,0 +1,7 @@
+public class DelegatedBase {
+    int delegatedBaseField;
+
+    void delegatedBaseMethod() {
+
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/subClass/before/Usage.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/subClass/before/Usage.java
new file mode 100644
index 0000000..72e1eae
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/subClass/before/Usage.java
@@ -0,0 +1,20 @@
+public class Usage {
+    public void parameterUsageMethod(DelegatedBase b) {
+        b.delegatedBaseMethod();
+    }
+
+    public int testMethod() {
+        A a = new A();
+        B b = new B();
+        parameterUsageMethod(a);
+        parameterUsageMethod(b);
+        a.delegatedBaseMethod();
+        b.delegatedBaseMethod();
+        a.equals(b);
+        return a.delegatedBaseField + b.delegatedBaseField;
+    }
+
+    DelegatedBase getDelegatedBase(A a) {
+        return a;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/subClassNoMethods/after/A.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/subClassNoMethods/after/A.java
new file mode 100644
index 0000000..18ee3bd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/subClassNoMethods/after/A.java
@@ -0,0 +1,16 @@
+public class A {
+    protected final DelegatedBase myDelegate = new DelegatedBase();
+
+    int methodFromA() {
+        myDelegate.delegatedBaseMethod();
+        return myDelegate.delegatedBaseField;
+    }
+
+    DelegatedBase getSomething() {
+        return myDelegate;
+    }
+
+    public DelegatedBase getMyDelegate() {
+        return myDelegate;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/subClassNoMethods/after/B.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/subClassNoMethods/after/B.java
new file mode 100644
index 0000000..b752a62
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/subClassNoMethods/after/B.java
@@ -0,0 +1,5 @@
+public class B extends A {
+    void methodFromB() {
+        myDelegate.delegatedBaseMethod();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/subClassNoMethods/after/DelegatedBase.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/subClassNoMethods/after/DelegatedBase.java
new file mode 100644
index 0000000..8f1274e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/subClassNoMethods/after/DelegatedBase.java
@@ -0,0 +1,7 @@
+public class DelegatedBase {
+    int delegatedBaseField;
+
+    void delegatedBaseMethod() {
+
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/subClassNoMethods/after/Usage.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/subClassNoMethods/after/Usage.java
new file mode 100644
index 0000000..59c5e91
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/subClassNoMethods/after/Usage.java
@@ -0,0 +1,20 @@
+public class Usage {
+    public void parameterUsageMethod(DelegatedBase b) {
+        b.delegatedBaseMethod();
+    }
+
+    public int testMethod() {
+        A a = new A();
+        B b = new B();
+        parameterUsageMethod(a.getMyDelegate());
+        parameterUsageMethod(b.getMyDelegate());
+        a.getMyDelegate().delegatedBaseMethod();
+        b.getMyDelegate().delegatedBaseMethod();
+        a.equals(b);
+        return a.getMyDelegate().delegatedBaseField + b.getMyDelegate().delegatedBaseField;
+    }
+
+    DelegatedBase getDelegatedBase(A a) {
+        return a.getMyDelegate();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/subClassNoMethods/before/A.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/subClassNoMethods/before/A.java
new file mode 100644
index 0000000..d6e5ef4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/subClassNoMethods/before/A.java
@@ -0,0 +1,10 @@
+public class A extends DelegatedBase{
+    int methodFromA() {
+        delegatedBaseMethod();
+        return delegatedBaseField;
+    }
+
+    DelegatedBase getSomething() {
+        return this;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/subClassNoMethods/before/B.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/subClassNoMethods/before/B.java
new file mode 100644
index 0000000..9c40fcc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/subClassNoMethods/before/B.java
@@ -0,0 +1,5 @@
+public class B extends A {
+    void methodFromB() {
+        super.delegatedBaseMethod();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/subClassNoMethods/before/DelegatedBase.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/subClassNoMethods/before/DelegatedBase.java
new file mode 100644
index 0000000..8f1274e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/subClassNoMethods/before/DelegatedBase.java
@@ -0,0 +1,7 @@
+public class DelegatedBase {
+    int delegatedBaseField;
+
+    void delegatedBaseMethod() {
+
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/subClassNoMethods/before/Usage.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/subClassNoMethods/before/Usage.java
new file mode 100644
index 0000000..72e1eae
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/subClassNoMethods/before/Usage.java
@@ -0,0 +1,20 @@
+public class Usage {
+    public void parameterUsageMethod(DelegatedBase b) {
+        b.delegatedBaseMethod();
+    }
+
+    public int testMethod() {
+        A a = new A();
+        B b = new B();
+        parameterUsageMethod(a);
+        parameterUsageMethod(b);
+        a.delegatedBaseMethod();
+        b.delegatedBaseMethod();
+        a.equals(b);
+        return a.delegatedBaseField + b.delegatedBaseField;
+    }
+
+    DelegatedBase getDelegatedBase(A a) {
+        return a;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/subinterface/after/A.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/subinterface/after/A.java
new file mode 100644
index 0000000..5fa4f8d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/subinterface/after/A.java
@@ -0,0 +1,12 @@
+public class A extends B {
+    private final MyJ myDelegate = new MyJ();
+
+    public J getMyDelegate() {
+        return myDelegate;
+    }
+
+    private class MyJ implements J {
+        public void run() {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/subinterface/after/B.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/subinterface/after/B.java
new file mode 100644
index 0000000..253834b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/subinterface/after/B.java
@@ -0,0 +1,2 @@
+class B {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/subinterface/after/J.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/subinterface/after/J.java
new file mode 100644
index 0000000..e10fdb1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/subinterface/after/J.java
@@ -0,0 +1,2 @@
+interface J extends Runnable {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/subinterface/after/Usage.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/subinterface/after/Usage.java
new file mode 100644
index 0000000..0dcb693
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/subinterface/after/Usage.java
@@ -0,0 +1,6 @@
+class Usage {
+    public static void main() {
+        A a = new A();
+        a.getMyDelegate().run();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/subinterface/before/A.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/subinterface/before/A.java
new file mode 100644
index 0000000..b497edc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/subinterface/before/A.java
@@ -0,0 +1,4 @@
+public class A extends B implements J {
+    public void run() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/subinterface/before/B.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/subinterface/before/B.java
new file mode 100644
index 0000000..253834b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/subinterface/before/B.java
@@ -0,0 +1,2 @@
+class B {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/subinterface/before/J.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/subinterface/before/J.java
new file mode 100644
index 0000000..e10fdb1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/subinterface/before/J.java
@@ -0,0 +1,2 @@
+interface J extends Runnable {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/subinterface/before/Usage.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/subinterface/before/Usage.java
new file mode 100644
index 0000000..604ea3b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/subinterface/before/Usage.java
@@ -0,0 +1,6 @@
+class Usage {
+    public static void main() {
+        A a = new A();
+        a.run();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/superCalls/after/A.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/superCalls/after/A.java
new file mode 100644
index 0000000..2dce668
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/superCalls/after/A.java
@@ -0,0 +1,9 @@
+class A {
+    public A(int i) {
+    }
+    public void methodFromA() {
+    }
+    public int intMethodFromA(int i) {
+        return 0;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/superCalls/after/B.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/superCalls/after/B.java
new file mode 100644
index 0000000..3a8fa1f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/superCalls/after/B.java
@@ -0,0 +1,11 @@
+class B {
+    public final A myDelegate;
+
+    public B() {
+        myDelegate = new A(1);
+    }
+    
+    public B(int i) {
+        myDelegate = new A(i);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/superCalls/before/A.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/superCalls/before/A.java
new file mode 100644
index 0000000..2dce668
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/superCalls/before/A.java
@@ -0,0 +1,9 @@
+class A {
+    public A(int i) {
+    }
+    public void methodFromA() {
+    }
+    public int intMethodFromA(int i) {
+        return 0;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/superCalls/before/B.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/superCalls/before/B.java
new file mode 100644
index 0000000..3458c3e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/superCalls/before/B.java
@@ -0,0 +1,9 @@
+class B extends A {
+    public B() {
+        super(1);
+    }
+    
+    public B(int i) {
+        super(i);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/typeParametersSubstitution/after/A.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/typeParametersSubstitution/after/A.java
new file mode 100644
index 0000000..9414e4e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/typeParametersSubstitution/after/A.java
@@ -0,0 +1,8 @@
+public class A {
+    public final MyIntf myDelegate = new MyIntf();
+
+    private class MyIntf implements Intf<Integer> {
+        public void method1(Integer t) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/typeParametersSubstitution/after/Intf.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/typeParametersSubstitution/after/Intf.java
new file mode 100644
index 0000000..da4078c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/typeParametersSubstitution/after/Intf.java
@@ -0,0 +1,3 @@
+public interface Intf<T> {
+    void method1(T t);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/typeParametersSubstitution/before/A.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/typeParametersSubstitution/before/A.java
new file mode 100644
index 0000000..377e466
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/typeParametersSubstitution/before/A.java
@@ -0,0 +1,4 @@
+public class A implements Intf<Integer> {
+    public void method1(Integer t) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/typeParametersSubstitution/before/Intf.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/typeParametersSubstitution/before/Intf.java
new file mode 100644
index 0000000..da4078c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/typeParametersSubstitution/before/Intf.java
@@ -0,0 +1,3 @@
+public interface Intf<T> {
+    void method1(T t);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineConstantField/CastWhenLambdaAsQualifier.java b/java/java-tests/testData/refactoring/inlineConstantField/CastWhenLambdaAsQualifier.java
new file mode 100644
index 0000000..5be80c8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineConstantField/CastWhenLambdaAsQualifier.java
@@ -0,0 +1,21 @@
+/*
+ * 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 Test {
+  Runnable r = () -> {};
+  void foo() {
+    <caret>r.run();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/inlineConstantField/CastWhenLambdaAsQualifier.java.after b/java/java-tests/testData/refactoring/inlineConstantField/CastWhenLambdaAsQualifier.java.after
new file mode 100644
index 0000000..15ba6fd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineConstantField/CastWhenLambdaAsQualifier.java.after
@@ -0,0 +1,21 @@
+/*
+ * 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 Test {
+    void foo() {
+    ((Runnable) () -> {
+    }).run();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/inlineConstantField/QualifiedConstantExpression.java b/java/java-tests/testData/refactoring/inlineConstantField/QualifiedConstantExpression.java
new file mode 100644
index 0000000..bdc3744
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineConstantField/QualifiedConstantExpression.java
@@ -0,0 +1,7 @@
+class QTest {
+  final int myI = 0;
+
+  public static void main(String[] args) {
+    System.out.println(new QTest().my<caret>I);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineConstantField/QualifiedConstantExpression.java.after b/java/java-tests/testData/refactoring/inlineConstantField/QualifiedConstantExpression.java.after
new file mode 100644
index 0000000..520cc73
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineConstantField/QualifiedConstantExpression.java.after
@@ -0,0 +1,6 @@
+class QTest {
+
+    public static void main(String[] args) {
+    System.out.println(0);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineConstantField/QualifiedConstantExpressionReplacedWithAnotherOne.java b/java/java-tests/testData/refactoring/inlineConstantField/QualifiedConstantExpressionReplacedWithAnotherOne.java
new file mode 100644
index 0000000..69dad46
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineConstantField/QualifiedConstantExpressionReplacedWithAnotherOne.java
@@ -0,0 +1,10 @@
+class QTest {
+  final int myI = Source.CONST;
+  public static void main(String[] args) {
+    System.out.println(new QTest().my<caret>I);
+  }
+}
+
+class Source {
+  int CONST = 0;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineConstantField/QualifiedConstantExpressionReplacedWithAnotherOne.java.after b/java/java-tests/testData/refactoring/inlineConstantField/QualifiedConstantExpressionReplacedWithAnotherOne.java.after
new file mode 100644
index 0000000..c9d9be2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineConstantField/QualifiedConstantExpressionReplacedWithAnotherOne.java.after
@@ -0,0 +1,9 @@
+class QTest {
+    public static void main(String[] args) {
+    System.out.println(Source.CONST);
+  }
+}
+
+class Source {
+  int CONST = 0;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineConstantField/QualifiedExpression.java b/java/java-tests/testData/refactoring/inlineConstantField/QualifiedExpression.java
new file mode 100644
index 0000000..1ab2af3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineConstantField/QualifiedExpression.java
@@ -0,0 +1,7 @@
+class QTest {
+  final int myI = foo();
+  int foo(){return 0;}
+  public static void main(String[] args) {
+    System.out.println(new QTest().my<caret>I);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineConstantField/QualifiedExpression.java.after b/java/java-tests/testData/refactoring/inlineConstantField/QualifiedExpression.java.after
new file mode 100644
index 0000000..f12fd4a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineConstantField/QualifiedExpression.java.after
@@ -0,0 +1,6 @@
+class QTest {
+    int foo(){return 0;}
+  public static void main(String[] args) {
+    System.out.println(new QTest().foo());
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineConstantField/StaticallyImportedQualifiedExpression.java b/java/java-tests/testData/refactoring/inlineConstantField/StaticallyImportedQualifiedExpression.java
new file mode 100644
index 0000000..ca6a2eb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineConstantField/StaticallyImportedQualifiedExpression.java
@@ -0,0 +1,17 @@
+package p;
+
+import static p.C.mock;
+class C {
+  public static String mock() {
+    return null;
+  }
+}
+
+class D {
+  public static final String CONST = mock();
+}
+class QTest {
+  public static void main(String[] args) {
+    String s = D.CON<caret>ST;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineConstantField/StaticallyImportedQualifiedExpression.java.after b/java/java-tests/testData/refactoring/inlineConstantField/StaticallyImportedQualifiedExpression.java.after
new file mode 100644
index 0000000..77bf138
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineConstantField/StaticallyImportedQualifiedExpression.java.after
@@ -0,0 +1,16 @@
+package p;
+
+import static p.C.mock;
+class C {
+  public static String mock() {
+    return null;
+  }
+}
+
+class D {
+}
+class QTest {
+  public static void main(String[] args) {
+    String s = mock();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/AnotherDefinitionUsed.java b/java/java-tests/testData/refactoring/inlineLocal/AnotherDefinitionUsed.java
new file mode 100644
index 0000000..df80991
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/AnotherDefinitionUsed.java
@@ -0,0 +1,10 @@
+class A {
+    String s;
+    boolean foo() {
+      boolean bar = false;
+      if (s == null) {
+        ba<caret>r = true;
+      }
+      return bar;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/AnotherDefinitionUsed1.java b/java/java-tests/testData/refactoring/inlineLocal/AnotherDefinitionUsed1.java
new file mode 100644
index 0000000..c55d085
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/AnotherDefinitionUsed1.java
@@ -0,0 +1,10 @@
+class A {
+    String s;
+    boolean foo() {
+      boolean b<caret>ar = false;
+      if (s == null) {
+        bar = true;
+      }
+      return bar;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/ArrayIndex.java b/java/java-tests/testData/refactoring/inlineLocal/ArrayIndex.java
new file mode 100644
index 0000000..f9a7aeb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/ArrayIndex.java
@@ -0,0 +1,27 @@
+/*
+ * 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.
+ */
+public class A {
+
+  public void testInlineRefactoring() {
+    int[] array = new int[10];
+    int index = computeIndex();
+    array[in<caret>dex] = 22;
+  }
+
+  private int computeIndex() {
+    return 0;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/ArrayIndex.java.after b/java/java-tests/testData/refactoring/inlineLocal/ArrayIndex.java.after
new file mode 100644
index 0000000..f85bd8b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/ArrayIndex.java.after
@@ -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.
+ */
+public class A {
+
+  public void testInlineRefactoring() {
+    int[] array = new int[10];
+      array[computeIndex()] = 22;
+  }
+
+  private int computeIndex() {
+    return 0;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/ArrayInitializer.java b/java/java-tests/testData/refactoring/inlineLocal/ArrayInitializer.java
new file mode 100644
index 0000000..f7868a0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/ArrayInitializer.java
@@ -0,0 +1,7 @@
+class Test {
+
+  String[] get(){
+    String[] to<caret>Inline = {""};
+    return toInline;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/ArrayInitializer.java.after b/java/java-tests/testData/refactoring/inlineLocal/ArrayInitializer.java.after
new file mode 100644
index 0000000..3fc6f6b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/ArrayInitializer.java.after
@@ -0,0 +1,6 @@
+class Test {
+
+  String[] get(){
+      return new String[]{""};
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/AssignmentToArrayElement.java b/java/java-tests/testData/refactoring/inlineLocal/AssignmentToArrayElement.java
new file mode 100644
index 0000000..371159c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/AssignmentToArrayElement.java
@@ -0,0 +1,24 @@
+/*
+ * 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.
+ */
+public class A {
+
+  public static void main(String[] args) {
+
+    int[] arr = new int[3];
+    arr[0] = 123;
+    System.out.println(ar<caret>r);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/AugmentedAssignment.java b/java/java-tests/testData/refactoring/inlineLocal/AugmentedAssignment.java
new file mode 100644
index 0000000..5344c83
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/AugmentedAssignment.java
@@ -0,0 +1,7 @@
+class AugmentedAssignment {
+    public static String x() {
+        String te<caret>xt = "";
+        text += "something";
+        return text;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/AugmentedAssignment.java.after b/java/java-tests/testData/refactoring/inlineLocal/AugmentedAssignment.java.after
new file mode 100644
index 0000000..5344c83
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/AugmentedAssignment.java.after
@@ -0,0 +1,7 @@
+class AugmentedAssignment {
+    public static String x() {
+        String te<caret>xt = "";
+        text += "something";
+        return text;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/CastAroundLambda.java b/java/java-tests/testData/refactoring/inlineLocal/CastAroundLambda.java
new file mode 100644
index 0000000..03de90c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/CastAroundLambda.java
@@ -0,0 +1,12 @@
+class Test {
+  void test() {
+    I b1 = System::exit;
+    a(b<caret>1);
+  }
+
+  void a(Object b) {}
+
+  interface I {
+    void i(int i);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/inlineLocal/CastAroundLambda.java.after b/java/java-tests/testData/refactoring/inlineLocal/CastAroundLambda.java.after
new file mode 100644
index 0000000..3a08c90
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/CastAroundLambda.java.after
@@ -0,0 +1,11 @@
+class Test {
+  void test() {
+      a((I) System::exit);
+  }
+
+  void a(Object b) {}
+
+  interface I {
+    void i(int i);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/inlineLocal/CastNotNeeded.java b/java/java-tests/testData/refactoring/inlineLocal/CastNotNeeded.java
new file mode 100644
index 0000000..a95a2cd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/CastNotNeeded.java
@@ -0,0 +1,15 @@
+class Test {
+  static boolean isA() {
+    return true;
+  }
+
+  static boolean isB() {
+    return true;
+  }
+
+  private static void foo(final boolean explicit) {
+    final boolean has = explicit ? isA() : isB();
+    if (ha<caret>s) {
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/CastNotNeeded.java.after b/java/java-tests/testData/refactoring/inlineLocal/CastNotNeeded.java.after
new file mode 100644
index 0000000..981ca73
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/CastNotNeeded.java.after
@@ -0,0 +1,14 @@
+class Test {
+  static boolean isA() {
+    return true;
+  }
+
+  static boolean isB() {
+    return true;
+  }
+
+  private static void foo(final boolean explicit) {
+      if (explicit ? isA() : isB()) {
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/ConditionExpr.java b/java/java-tests/testData/refactoring/inlineLocal/ConditionExpr.java
new file mode 100644
index 0000000..58f3df6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/ConditionExpr.java
@@ -0,0 +1,7 @@
+public class Test2 {
+  {
+      Integer iii = true ? 1 : 2;
+      <caret>iii.byteValue();
+  }
+}
+
diff --git a/java/java-tests/testData/refactoring/inlineLocal/ConditionExpr.java.after b/java/java-tests/testData/refactoring/inlineLocal/ConditionExpr.java.after
new file mode 100644
index 0000000..0f18f38
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/ConditionExpr.java.after
@@ -0,0 +1,6 @@
+public class Test2 {
+  {
+      ((Integer) (true ? 1 : 2)).byteValue();
+  }
+}
+
diff --git a/java/java-tests/testData/refactoring/inlineLocal/IDEADEV10376.java b/java/java-tests/testData/refactoring/inlineLocal/IDEADEV10376.java
new file mode 100644
index 0000000..b671ec2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/IDEADEV10376.java
@@ -0,0 +1,8 @@
+class IDEADEV10376 {
+    private static int f(int p) {
+        int i = 0;
+        i = 9;
+        i = f(<caret>i);
+        return 0;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/IDEADEV10376.java.after b/java/java-tests/testData/refactoring/inlineLocal/IDEADEV10376.java.after
new file mode 100644
index 0000000..6af5c6e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/IDEADEV10376.java.after
@@ -0,0 +1,7 @@
+class IDEADEV10376 {
+    private static int f(int p) {
+        int i = 0;
+        i = f(9);
+        return 0;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/IDEADEV12244.java b/java/java-tests/testData/refactoring/inlineLocal/IDEADEV12244.java
new file mode 100644
index 0000000..deacb3e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/IDEADEV12244.java
@@ -0,0 +1,9 @@
+import java.util.*;
+
+class IDEADEV12244 {
+    {
+        TreeMap<String, Set<Integer>> map = new TreeMap<String, Set<Integer>>();
+        Set<Integer> set = Collections.emptySet();
+        map.put("foo", <caret>set);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/IDEADEV12244.java.after b/java/java-tests/testData/refactoring/inlineLocal/IDEADEV12244.java.after
new file mode 100644
index 0000000..4a21f20
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/IDEADEV12244.java.after
@@ -0,0 +1,8 @@
+import java.util.*;
+
+class IDEADEV12244 {
+    {
+        TreeMap<String, Set<Integer>> map = new TreeMap<String, Set<Integer>>();
+        map.put("foo", Collections.<Integer>emptySet());
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/IDEADEV13151.java b/java/java-tests/testData/refactoring/inlineLocal/IDEADEV13151.java
new file mode 100644
index 0000000..e6c469a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/IDEADEV13151.java
@@ -0,0 +1,13 @@
+class Tester {
+    void method(String x, String... y) {
+    }
+
+    void method1(String x, String[] y) {
+    }
+
+    void caller() {
+        String[] thing = {"a", "b"};
+        method("", <caret>thing);
+        method1("", thing);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/IDEADEV13151.java.after b/java/java-tests/testData/refactoring/inlineLocal/IDEADEV13151.java.after
new file mode 100644
index 0000000..4cbf4b6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/IDEADEV13151.java.after
@@ -0,0 +1,12 @@
+class Tester {
+    void method(String x, String... y) {
+    }
+
+    void method1(String x, String[] y) {
+    }
+
+    void caller() {
+        method("", "a", "b");
+        method1("", new String[]{"a", "b"});
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/IDEADEV950.java b/java/java-tests/testData/refactoring/inlineLocal/IDEADEV950.java
new file mode 100644
index 0000000..ff80a8e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/IDEADEV950.java
@@ -0,0 +1,10 @@
+public class IDEADEV950 {
+    void foo () {
+        int door_1 =  0;
+        float doorP = door_1 ;
+        //Cast should be inserted when inlining, otherwise semantics changes
+        float d1 = (<caret>doorP / NOF_LOOPS);
+    }
+
+    private static final int NOF_LOOPS = 2;
+}
diff --git a/java/java-tests/testData/refactoring/inlineLocal/IDEADEV950.java.after b/java/java-tests/testData/refactoring/inlineLocal/IDEADEV950.java.after
new file mode 100644
index 0000000..e86de28
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/IDEADEV950.java.after
@@ -0,0 +1,9 @@
+public class IDEADEV950 {
+    void foo () {
+        int door_1 =  0;
+        //Cast should be inserted when inlining, otherwise semantics changes
+        float d1 = ((float) door_1 / NOF_LOOPS);
+    }
+
+    private static final int NOF_LOOPS = 2;
+}
diff --git a/java/java-tests/testData/refactoring/inlineLocal/IdeaDEV9404.java b/java/java-tests/testData/refactoring/inlineLocal/IdeaDEV9404.java
new file mode 100644
index 0000000..8166c6e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/IdeaDEV9404.java
@@ -0,0 +1,8 @@
+import javax.swing.*;
+
+class Test {
+    public static JComponent getFoo() {
+        JComponent c = new JPanel();
+        return <caret>c;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/IdeaDEV9404.java.after b/java/java-tests/testData/refactoring/inlineLocal/IdeaDEV9404.java.after
new file mode 100644
index 0000000..00c3cb8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/IdeaDEV9404.java.after
@@ -0,0 +1,7 @@
+import javax.swing.*;
+
+class Test {
+    public static JComponent getFoo() {
+        return new JPanel();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/Inference.java b/java/java-tests/testData/refactoring/inlineLocal/Inference.java
new file mode 100644
index 0000000..b56ce4f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/Inference.java
@@ -0,0 +1,12 @@
+class Inference {
+        public <T> T getX() {
+            return null;
+        }
+
+        void foo (String s) {}
+
+        {
+           String v2 = new Inference().getX();
+           foo(<caret>v2);
+        }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/Inference.java.after b/java/java-tests/testData/refactoring/inlineLocal/Inference.java.after
new file mode 100644
index 0000000..a5fd32c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/Inference.java.after
@@ -0,0 +1,11 @@
+class Inference {
+        public <T> T getX() {
+            return null;
+        }
+
+        void foo (String s) {}
+
+        {
+            foo(new Inference().<String>getX());
+        }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/InlineFromTryCatch.java b/java/java-tests/testData/refactoring/inlineLocal/InlineFromTryCatch.java
new file mode 100644
index 0000000..8c22424
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/InlineFromTryCatch.java
@@ -0,0 +1,18 @@
+import java.io.*;
+
+class Test {
+  private static InputStream getInputUnchecked() throws IOException {
+    InputStream in;
+    try {
+      in = ff();
+    }
+    catch (IOException e) {
+      throw new IOException();
+    }
+    return i<caret>n;
+  }
+
+  static InputStream ff() throws IOException {
+    return null;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/InlineFromTryCatchAvailable.java b/java/java-tests/testData/refactoring/inlineLocal/InlineFromTryCatchAvailable.java
new file mode 100644
index 0000000..41164ea
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/InlineFromTryCatchAvailable.java
@@ -0,0 +1,15 @@
+import java.io.*;
+
+class Test {
+  private static InputStream getInputUnchecked(InputStream inputSupplier) throws IOException {
+    InputStream in;
+    try {
+      in = null;
+    }
+    catch (IOException e) {
+      throw new IOException();
+    }
+    return i<caret>n;
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/InlineFromTryCatchAvailable.java.after b/java/java-tests/testData/refactoring/inlineLocal/InlineFromTryCatchAvailable.java.after
new file mode 100644
index 0000000..1853d8a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/InlineFromTryCatchAvailable.java.after
@@ -0,0 +1,13 @@
+import java.io.*;
+
+class Test {
+  private static InputStream getInputUnchecked(InputStream inputSupplier) throws IOException {
+      try {
+      }
+    catch (IOException e) {
+      throw new IOException();
+    }
+    return null;
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/InnerInnerClass.java b/java/java-tests/testData/refactoring/inlineLocal/InnerInnerClass.java
new file mode 100644
index 0000000..a20e51c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/InnerInnerClass.java
@@ -0,0 +1,21 @@
+public class In {
+
+    void fool() {
+        final boolean delete = narr();
+        new Runnable() {
+            public void run() {
+                new Runnable() {
+                    public void run() {
+                        if (del<caret>ete) {
+
+                        }
+                    }
+                }.run();
+            }
+        };
+    }
+
+    boolean narr() {
+        return false;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineLocal/InnerInnerClass.java.after b/java/java-tests/testData/refactoring/inlineLocal/InnerInnerClass.java.after
new file mode 100644
index 0000000..413c4e1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/InnerInnerClass.java.after
@@ -0,0 +1,20 @@
+public class In {
+
+    void fool() {
+        new Runnable() {
+            public void run() {
+                new Runnable() {
+                    public void run() {
+                        if (narr()) {
+
+                        }
+                    }
+                }.run();
+            }
+        };
+    }
+
+    boolean narr() {
+        return false;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineLocal/LambdaExpr.java b/java/java-tests/testData/refactoring/inlineLocal/LambdaExpr.java
new file mode 100644
index 0000000..1152c96
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/LambdaExpr.java
@@ -0,0 +1,11 @@
+interface SAM<X> {
+        X m(int i, int j);
+    }
+
+class Foo {  
+    void test() {
+        SAM<Integer> c = (i, j)->i + j;
+        m(<caret>c);
+    }
+    void m(SAM<Integer> s) { }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/LambdaExpr.java.after b/java/java-tests/testData/refactoring/inlineLocal/LambdaExpr.java.after
new file mode 100644
index 0000000..2babe6e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/LambdaExpr.java.after
@@ -0,0 +1,10 @@
+interface SAM<X> {
+        X m(int i, int j);
+    }
+
+class Foo {  
+    void test() {
+        m((i, j)->i + j);
+    }
+    void m(SAM<Integer> s) { }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/LambdaExprAsRefQualifier.java b/java/java-tests/testData/refactoring/inlineLocal/LambdaExprAsRefQualifier.java
new file mode 100644
index 0000000..81b0240
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/LambdaExprAsRefQualifier.java
@@ -0,0 +1,25 @@
+/*
+ * 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.
+ */
+public class Test2 {
+  interface I {
+    boolean foo(String s);
+  }
+  {
+    I i = s -> s.endsWith(".java");
+    <caret>i.getClass();
+  }
+}
+
diff --git a/java/java-tests/testData/refactoring/inlineLocal/LambdaExprAsRefQualifier.java.after b/java/java-tests/testData/refactoring/inlineLocal/LambdaExprAsRefQualifier.java.after
new file mode 100644
index 0000000..7533b3c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/LambdaExprAsRefQualifier.java.after
@@ -0,0 +1,24 @@
+/*
+ * 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.
+ */
+public class Test2 {
+  interface I {
+    boolean foo(String s);
+  }
+  {
+      ((I) s -> s.endsWith(".java")).getClass();
+  }
+}
+
diff --git a/java/java-tests/testData/refactoring/inlineLocal/LocalVarInsideLambdaBody.java b/java/java-tests/testData/refactoring/inlineLocal/LocalVarInsideLambdaBody.java
new file mode 100644
index 0000000..550a93f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/LocalVarInsideLambdaBody.java
@@ -0,0 +1,23 @@
+/*
+ * 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.
+ */
+public class Test2 {
+  {
+    final String p = "hello";
+    Runnable r = () -> {System.out.println(<caret>p);};
+    System.out.println(p);
+  }
+}
+
diff --git a/java/java-tests/testData/refactoring/inlineLocal/LocalVarInsideLambdaBody.java.after b/java/java-tests/testData/refactoring/inlineLocal/LocalVarInsideLambdaBody.java.after
new file mode 100644
index 0000000..e941dd3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/LocalVarInsideLambdaBody.java.after
@@ -0,0 +1,22 @@
+/*
+ * 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.
+ */
+public class Test2 {
+  {
+      Runnable r = () -> {System.out.println("hello");};
+    System.out.println("hello");
+  }
+}
+
diff --git a/java/java-tests/testData/refactoring/inlineLocal/LocalVarInsideLambdaBody1.java b/java/java-tests/testData/refactoring/inlineLocal/LocalVarInsideLambdaBody1.java
new file mode 100644
index 0000000..46c97bd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/LocalVarInsideLambdaBody1.java
@@ -0,0 +1,24 @@
+/*
+ * 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.
+ */
+public class Test2 {
+  {
+    Runnable r = () -> {
+      final String p = "hello";
+      System.out.println(<caret>p);
+    };
+  }
+}
+
diff --git a/java/java-tests/testData/refactoring/inlineLocal/LocalVarInsideLambdaBody1.java.after b/java/java-tests/testData/refactoring/inlineLocal/LocalVarInsideLambdaBody1.java.after
new file mode 100644
index 0000000..66ef507
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/LocalVarInsideLambdaBody1.java.after
@@ -0,0 +1,23 @@
+/*
+ * 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.
+ */
+public class Test2 {
+  {
+    Runnable r = () -> {
+        System.out.println("hello");
+    };
+  }
+}
+
diff --git a/java/java-tests/testData/refactoring/inlineLocal/LocalVarInsideLambdaBody2.java b/java/java-tests/testData/refactoring/inlineLocal/LocalVarInsideLambdaBody2.java
new file mode 100644
index 0000000..f37774f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/LocalVarInsideLambdaBody2.java
@@ -0,0 +1,8 @@
+class Test {
+  {
+    Runnable x = () -> {
+      String hello = new String("hello");
+      System.out.println(<caret>hello);
+    };
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/LocalVarInsideLambdaBody2.java.after b/java/java-tests/testData/refactoring/inlineLocal/LocalVarInsideLambdaBody2.java.after
new file mode 100644
index 0000000..ee8de4a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/LocalVarInsideLambdaBody2.java.after
@@ -0,0 +1,7 @@
+class Test {
+  {
+    Runnable x = () -> {
+        System.out.println(new String("hello"));
+    };
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/LocalVarInsideLambdaBodyWriteUsage.java b/java/java-tests/testData/refactoring/inlineLocal/LocalVarInsideLambdaBodyWriteUsage.java
new file mode 100644
index 0000000..1590aa5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/LocalVarInsideLambdaBodyWriteUsage.java
@@ -0,0 +1,10 @@
+class Test {
+  {
+    Runnable x = () -> {
+      int hello = 9;
+      System.out.println(hello);
+      ++hello;
+      System.out.println(he<caret>llo);
+    };
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/MethodRefAsRefQualifier.java b/java/java-tests/testData/refactoring/inlineLocal/MethodRefAsRefQualifier.java
new file mode 100644
index 0000000..1652862
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/MethodRefAsRefQualifier.java
@@ -0,0 +1,14 @@
+class Test {
+  {
+      Bar bar = Test::length;
+      b<caret>ar._("");
+  }
+
+  public static Integer length(String s) {
+    return s.length();
+  }
+
+  interface Bar {
+    Integer _(String s);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/MethodRefAsRefQualifier.java.after b/java/java-tests/testData/refactoring/inlineLocal/MethodRefAsRefQualifier.java.after
new file mode 100644
index 0000000..b82f2ca
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/MethodRefAsRefQualifier.java.after
@@ -0,0 +1,13 @@
+class Test {
+  {
+      ((Bar) Test::length)._("");
+  }
+
+  public static Integer length(String s) {
+    return s.length();
+  }
+
+  interface Bar {
+    Integer _(String s);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/NewExpression.java b/java/java-tests/testData/refactoring/inlineLocal/NewExpression.java
new file mode 100644
index 0000000..e066797
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/NewExpression.java
@@ -0,0 +1,7 @@
+class Test {
+
+  String[] get(){
+    String[] to<caret>Inline = new String[]{""};
+    return toInline;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/NewExpression.java.after b/java/java-tests/testData/refactoring/inlineLocal/NewExpression.java.after
new file mode 100644
index 0000000..3fc6f6b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/NewExpression.java.after
@@ -0,0 +1,6 @@
+class Test {
+
+  String[] get(){
+      return new String[]{""};
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/NewExpressionWithDiamond.java b/java/java-tests/testData/refactoring/inlineLocal/NewExpressionWithDiamond.java
new file mode 100644
index 0000000..b5630a4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/NewExpressionWithDiamond.java
@@ -0,0 +1,9 @@
+import java.util.*;
+
+class Test {
+
+  void foo(){
+    Map<Integer, String> m<caret>ap = new HashMap<>();
+    System.out.println(map);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/NewExpressionWithDiamond.java.after b/java/java-tests/testData/refactoring/inlineLocal/NewExpressionWithDiamond.java.after
new file mode 100644
index 0000000..2b1d4fd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/NewExpressionWithDiamond.java.after
@@ -0,0 +1,8 @@
+import java.util.*;
+
+class Test {
+
+  void foo(){
+      System.out.println(new HashMap<Integer, String>());
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/NewExpressionWithPreservedDiamond.java b/java/java-tests/testData/refactoring/inlineLocal/NewExpressionWithPreservedDiamond.java
new file mode 100644
index 0000000..786d23a2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/NewExpressionWithPreservedDiamond.java
@@ -0,0 +1,9 @@
+import java.util.*;
+
+class Test {
+
+  void foo(){
+    Map<Integer, String> m<caret>ap = new HashMap<>();
+    Map<Integer, String> map1 = map;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/NewExpressionWithPreservedDiamond.java.after b/java/java-tests/testData/refactoring/inlineLocal/NewExpressionWithPreservedDiamond.java.after
new file mode 100644
index 0000000..eb76943
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/NewExpressionWithPreservedDiamond.java.after
@@ -0,0 +1,8 @@
+import java.util.*;
+
+class Test {
+
+  void foo(){
+      Map<Integer, String> map1 = new HashMap<>();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/NoCastAroundLambda.java b/java/java-tests/testData/refactoring/inlineLocal/NoCastAroundLambda.java
new file mode 100644
index 0000000..62f440a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/NoCastAroundLambda.java
@@ -0,0 +1,12 @@
+class Test {
+  void test() {
+    I b1 = System::exit;
+    a(b<caret>1);
+  }
+
+  void a(I b) {}
+
+  interface I {
+    void i(int i);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/inlineLocal/NoCastAroundLambda.java.after b/java/java-tests/testData/refactoring/inlineLocal/NoCastAroundLambda.java.after
new file mode 100644
index 0000000..e8dea47
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/NoCastAroundLambda.java.after
@@ -0,0 +1,11 @@
+class Test {
+  void test() {
+      a(System::exit);
+  }
+
+  void a(I b) {}
+
+  interface I {
+    void i(int i);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/inlineLocal/NoRedundantCasts.java b/java/java-tests/testData/refactoring/inlineLocal/NoRedundantCasts.java
new file mode 100644
index 0000000..ef6ab92
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/NoRedundantCasts.java
@@ -0,0 +1,12 @@
+class YoYo {
+    void bar () {}
+    void f () {
+        YoYo yoYoYo = foo();
+        <caret>yoYoYo.bar();
+    }
+
+    private YoYoYo foo() {
+
+    }
+    class YoYoYo extends YoYo {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/NoRedundantCasts.java.after b/java/java-tests/testData/refactoring/inlineLocal/NoRedundantCasts.java.after
new file mode 100644
index 0000000..1e4940c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/NoRedundantCasts.java.after
@@ -0,0 +1,11 @@
+class YoYo {
+    void bar () {}
+    void f () {
+        foo().bar();
+    }
+
+    private YoYoYo foo() {
+
+    }
+    class YoYoYo extends YoYo {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/NonEqAssignment.java b/java/java-tests/testData/refactoring/inlineLocal/NonEqAssignment.java
new file mode 100644
index 0000000..c69ec61
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/NonEqAssignment.java
@@ -0,0 +1,7 @@
+class Test {
+  void foo() {
+    int x = 1;
+    x += 1;
+    int y = <caret>x;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/NonWriteUnaryExpression.java b/java/java-tests/testData/refactoring/inlineLocal/NonWriteUnaryExpression.java
new file mode 100644
index 0000000..017afbe
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/NonWriteUnaryExpression.java
@@ -0,0 +1,7 @@
+class Test {
+
+  void get(){
+    boolean toInline = false;
+    if (!to<caret>Inline) return;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/NonWriteUnaryExpression.java.after b/java/java-tests/testData/refactoring/inlineLocal/NonWriteUnaryExpression.java.after
new file mode 100644
index 0000000..74b5a39
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/NonWriteUnaryExpression.java.after
@@ -0,0 +1,6 @@
+class Test {
+
+  void get(){
+      if (!false) return;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/Qualified.java b/java/java-tests/testData/refactoring/inlineLocal/Qualified.java
new file mode 100644
index 0000000..dc626e0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/Qualified.java
@@ -0,0 +1,17 @@
+public class A {
+  int f = 23;
+
+  static class B {
+    static int f = 42;
+  }
+
+  int foo() {
+    int r = B.f;
+    A B = this;
+    return r<caret>;
+  }
+
+  public static void main(String[] args) {
+    System.out.println(new A().foo());
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/Qualified.java.after b/java/java-tests/testData/refactoring/inlineLocal/Qualified.java.after
new file mode 100644
index 0000000..102be05
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/Qualified.java.after
@@ -0,0 +1,16 @@
+public class A {
+  int f = 23;
+
+  static class B {
+    static int f = 42;
+  }
+
+  int foo() {
+      A B = this;
+    return A.B.f;
+  }
+
+  public static void main(String[] args) {
+    System.out.println(new A().foo());
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/Qualifier.java b/java/java-tests/testData/refactoring/inlineLocal/Qualifier.java
new file mode 100644
index 0000000..77cf624
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/Qualifier.java
@@ -0,0 +1,12 @@
+class Outer {
+    String getValue() { return "";}
+    void doSomething (String x) { }
+    void foo() {
+        new Runnable() {
+            public void run() {
+                final String <caret>value = getValue();
+                doSomething(value);
+            }
+        };
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineLocal/Qualifier.java.after b/java/java-tests/testData/refactoring/inlineLocal/Qualifier.java.after
new file mode 100644
index 0000000..4b06af36
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/Qualifier.java.after
@@ -0,0 +1,11 @@
+class Outer {
+    String getValue() { return "";}
+    void doSomething (String x) { }
+    void foo() {
+        new Runnable() {
+            public void run() {
+                doSomething(getValue());
+            }
+        };
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineLocal/StaticImported.java b/java/java-tests/testData/refactoring/inlineLocal/StaticImported.java
new file mode 100644
index 0000000..eea23b8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/StaticImported.java
@@ -0,0 +1,23 @@
+import java.util.ArrayList;
+import java.util.List;
+
+import static Statics._emptyList;
+
+public class Statics {
+
+  public static <T> List<T> _emptyList() {
+    return new ArrayList<T>();
+  }
+}
+
+
+class Foo {
+  public static void main(String[] args) {
+    List<String> v1 = _emptyList();
+    doSomething(v<caret>1);
+  }
+
+  public static void doSomething(List<String> list) {
+
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/StaticImported.java.after b/java/java-tests/testData/refactoring/inlineLocal/StaticImported.java.after
new file mode 100644
index 0000000..d40a49e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/StaticImported.java.after
@@ -0,0 +1,22 @@
+import java.util.ArrayList;
+import java.util.List;
+
+import static Statics._emptyList;
+
+public class Statics {
+
+  public static <T> List<T> _emptyList() {
+    return new ArrayList<T>();
+  }
+}
+
+
+class Foo {
+  public static void main(String[] args) {
+      doSomething(Statics.<String>_emptyList());
+  }
+
+  public static void doSomething(List<String> list) {
+
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/TypeArguments.java b/java/java-tests/testData/refactoring/inlineLocal/TypeArguments.java
new file mode 100644
index 0000000..44ecaed
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/TypeArguments.java
@@ -0,0 +1,9 @@
+class Example {
+    private class X<T> {}
+    private <T> X<T> foo() { return new X<T>(); }
+    private <T> X<T> boo(X<T> x) {return x;}
+    private void goo() {
+        X<Integer> f = foo();
+        X<Integer> x = boo(<caret>f);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/TypeArguments.java.after b/java/java-tests/testData/refactoring/inlineLocal/TypeArguments.java.after
new file mode 100644
index 0000000..a23ed47
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/TypeArguments.java.after
@@ -0,0 +1,8 @@
+class Example {
+    private class X<T> {}
+    private <T> X<T> foo() { return new X<T>(); }
+    private <T> X<T> boo(X<T> x) {return x;}
+    private void goo() {
+        X<Integer> x = boo(this.<Integer>foo());
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/TypeArgumentsStatic.java b/java/java-tests/testData/refactoring/inlineLocal/TypeArgumentsStatic.java
new file mode 100644
index 0000000..7394afa
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/TypeArgumentsStatic.java
@@ -0,0 +1,9 @@
+class Example {
+    private static class X<T> {}
+    private static <T> X<T> foo() { return new X<T>(); }
+    private static <T> X<T> boo(X<T> x) {return x;}
+    private static void goo() {
+        X<Integer> f = foo();
+        X<Integer> x = boo(<caret>f);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/TypeArgumentsStatic.java.after b/java/java-tests/testData/refactoring/inlineLocal/TypeArgumentsStatic.java.after
new file mode 100644
index 0000000..3c9cdd7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/TypeArgumentsStatic.java.after
@@ -0,0 +1,8 @@
+class Example {
+    private static class X<T> {}
+    private static <T> X<T> foo() { return new X<T>(); }
+    private static <T> X<T> boo(X<T> x) {return x;}
+    private static void goo() {
+        X<Integer> x = boo(Example.<Integer>foo());
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/UncheckedCast.java b/java/java-tests/testData/refactoring/inlineLocal/UncheckedCast.java
new file mode 100644
index 0000000..b542ed0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/UncheckedCast.java
@@ -0,0 +1,12 @@
+import java.util.*;
+
+class X {
+  List getChildren() {
+    return null;
+  }
+
+  void iterate() {
+    List<X> xs = getChildren();
+    for (X x : x<caret>s) {}
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/UncheckedCast.java.after b/java/java-tests/testData/refactoring/inlineLocal/UncheckedCast.java.after
new file mode 100644
index 0000000..545169b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/UncheckedCast.java.after
@@ -0,0 +1,11 @@
+import java.util.*;
+
+class X {
+  List getChildren() {
+    return null;
+  }
+
+  void iterate() {
+      for (X x : (List<X>) getChildren()) {}
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/UncheckedCastNotNeeded.java b/java/java-tests/testData/refactoring/inlineLocal/UncheckedCastNotNeeded.java
new file mode 100644
index 0000000..af5cae4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/UncheckedCastNotNeeded.java
@@ -0,0 +1,13 @@
+import java.util.*;
+
+class X {
+  List getChildren() {
+    return null;
+  }
+
+  void iterate() {
+    List<X> xs = getChildren();
+    foo(x<caret>s);
+  }
+  void foo(List<X> l){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/UncheckedCastNotNeeded.java.after b/java/java-tests/testData/refactoring/inlineLocal/UncheckedCastNotNeeded.java.after
new file mode 100644
index 0000000..2750229
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/UncheckedCastNotNeeded.java.after
@@ -0,0 +1,12 @@
+import java.util.*;
+
+class X {
+  List getChildren() {
+    return null;
+  }
+
+  void iterate() {
+      foo(getChildren());
+  }
+  void foo(List<X> l){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/UsedInInnerClass.java b/java/java-tests/testData/refactoring/inlineLocal/UsedInInnerClass.java
new file mode 100644
index 0000000..a96da70
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/UsedInInnerClass.java
@@ -0,0 +1,10 @@
+class A {
+    void foo(final MyObject obj) {
+        final MyObject _obj = obj;
+        new Runnable() {
+            public void run() {
+                System.out.println(<caret>_obj);
+            }
+        }.run();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/UsedInInnerClass.java.after b/java/java-tests/testData/refactoring/inlineLocal/UsedInInnerClass.java.after
new file mode 100644
index 0000000..fc06382
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/UsedInInnerClass.java.after
@@ -0,0 +1,9 @@
+class A {
+    void foo(final MyObject obj) {
+        new Runnable() {
+            public void run() {
+                System.out.println(obj);
+            }
+        }.run();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/UsedInInnerClass2.java b/java/java-tests/testData/refactoring/inlineLocal/UsedInInnerClass2.java
new file mode 100644
index 0000000..4d3ba3b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/UsedInInnerClass2.java
@@ -0,0 +1,11 @@
+class A {
+    void foo(final MyObject obj) {
+        final MyObject _obj;
+        _obj = obj;
+        new Runnable() {
+            public void run() {
+                System.out.println(<caret>_obj);
+            }
+        }.run();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/UsedInInnerClass2.java.after b/java/java-tests/testData/refactoring/inlineLocal/UsedInInnerClass2.java.after
new file mode 100644
index 0000000..fc06382
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/UsedInInnerClass2.java.after
@@ -0,0 +1,9 @@
+class A {
+    void foo(final MyObject obj) {
+        new Runnable() {
+            public void run() {
+                System.out.println(obj);
+            }
+        }.run();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineLocal/UsedInInnerClass3.java b/java/java-tests/testData/refactoring/inlineLocal/UsedInInnerClass3.java
new file mode 100644
index 0000000..15e1073
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/UsedInInnerClass3.java
@@ -0,0 +1,40 @@
+public class IDEA17606 {
+
+    public void foo() {
+        final Preferences preferences = Preferences.getInstance();
+        // try to inline 'preferences'
+        final Bar bar = new Bar(<caret>preferences.getComponent());
+        bar.toString();
+
+        ThreadUtils.run(new Runnable() {
+            public void run() {
+                final Foo foo = new Foo();
+                foo.setSize(preferences.getDimension().getSize());
+            }
+        });
+    }
+
+    class Preferences {
+	public static Preferences getInstance() {
+            return new Preferences();
+        }
+
+	public JComponent getComponent() {
+            return null;
+        }
+
+	public Dimension getDimension() {
+            return null;
+	}
+    }
+
+    class Bar {
+	public Bar(JComponent component) {
+	}
+    }
+
+    class ThreadUtils {
+        public static void run(Runnable runnable) {
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineLocal/UsedInInnerClass3.java.after b/java/java-tests/testData/refactoring/inlineLocal/UsedInInnerClass3.java.after
new file mode 100644
index 0000000..7e573f5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/UsedInInnerClass3.java.after
@@ -0,0 +1,39 @@
+public class IDEA17606 {
+
+    public void foo() {
+        // try to inline 'preferences'
+        final Bar bar = new Bar(Preferences.getInstance().getComponent());
+        bar.toString();
+
+        ThreadUtils.run(new Runnable() {
+            public void run() {
+                final Foo foo = new Foo();
+                foo.setSize(Preferences.getInstance().getDimension().getSize());
+            }
+        });
+    }
+
+    class Preferences {
+	public static Preferences getInstance() {
+            return new Preferences();
+        }
+
+	public JComponent getComponent() {
+            return null;
+        }
+
+	public Dimension getDimension() {
+            return null;
+	}
+    }
+
+    class Bar {
+	public Bar(JComponent component) {
+	}
+    }
+
+    class ThreadUtils {
+        public static void run(Runnable runnable) {
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineLocal/UsedInInnerClass4.java b/java/java-tests/testData/refactoring/inlineLocal/UsedInInnerClass4.java
new file mode 100644
index 0000000..05e6df5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/UsedInInnerClass4.java
@@ -0,0 +1,40 @@
+public class IDEA17606 {
+
+    public void foo() {
+        final Preferences preferences = Preferences.getInstance();
+        // try to inline 'preferences'
+        final Bar bar = new Bar(preferences.getComponent());
+        bar.toString();
+
+        ThreadUtils.run(new Runnable() {
+            public void run() {
+                final Foo foo = new Foo();
+                foo.setSize(<caret>preferences.getDimension().getSize());
+            }
+        });
+    }
+
+    class Preferences {
+	public static Preferences getInstance() {
+            return new Preferences();
+        }
+
+	public JComponent getComponent() {
+            return null;
+        }
+
+	public Dimension getDimension() {
+            return null;
+	}
+    }
+
+    class Bar {
+	public Bar(JComponent component) {
+	}
+    }
+
+    class ThreadUtils {
+        public static void run(Runnable runnable) {
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineLocal/UsedInInnerClass4.java.after b/java/java-tests/testData/refactoring/inlineLocal/UsedInInnerClass4.java.after
new file mode 100644
index 0000000..7e573f5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/UsedInInnerClass4.java.after
@@ -0,0 +1,39 @@
+public class IDEA17606 {
+
+    public void foo() {
+        // try to inline 'preferences'
+        final Bar bar = new Bar(Preferences.getInstance().getComponent());
+        bar.toString();
+
+        ThreadUtils.run(new Runnable() {
+            public void run() {
+                final Foo foo = new Foo();
+                foo.setSize(Preferences.getInstance().getDimension().getSize());
+            }
+        });
+    }
+
+    class Preferences {
+	public static Preferences getInstance() {
+            return new Preferences();
+        }
+
+	public JComponent getComponent() {
+            return null;
+        }
+
+	public Dimension getDimension() {
+            return null;
+	}
+    }
+
+    class Bar {
+	public Bar(JComponent component) {
+	}
+    }
+
+    class ThreadUtils {
+        public static void run(Runnable runnable) {
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineLocal/Wildcard.java b/java/java-tests/testData/refactoring/inlineLocal/Wildcard.java
new file mode 100644
index 0000000..fafcde3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/Wildcard.java
@@ -0,0 +1,11 @@
+import java.util.Collection;
+class Test {
+  void foo() {
+    final Collection<? extends Number> extensions = getExtensions();
+    for (Number extension : exte<caret>nsions) {
+    }
+  }
+
+  Collection<? extends Number> getExtensions() {return null;}
+}
+
diff --git a/java/java-tests/testData/refactoring/inlineLocal/Wildcard.java.after b/java/java-tests/testData/refactoring/inlineLocal/Wildcard.java.after
new file mode 100644
index 0000000..429e19e7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineLocal/Wildcard.java.after
@@ -0,0 +1,10 @@
+import java.util.Collection;
+class Test {
+  void foo() {
+      for (Number extension : getExtensions()) {
+    }
+  }
+
+  Collection<? extends Number> getExtensions() {return null;}
+}
+
diff --git a/java/java-tests/testData/refactoring/inlineMethod/ArrayAccess.java b/java/java-tests/testData/refactoring/inlineMethod/ArrayAccess.java
new file mode 100644
index 0000000..443a7fa
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/ArrayAccess.java
@@ -0,0 +1,11 @@
+class A {
+    public void usage() {
+        int array[150];
+        for (int i = 0; i < array.length; i++) {
+            method(array[i]);
+        }
+    }
+    public void <caret>method(int i) {
+        System.out.println(i);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/ArrayAccess.java.after b/java/java-tests/testData/refactoring/inlineMethod/ArrayAccess.java.after
new file mode 100644
index 0000000..441310a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/ArrayAccess.java.after
@@ -0,0 +1,8 @@
+class A {
+    public void usage() {
+        int array[150];
+        for (int i = 0; i < array.length; i++) {
+            System.out.println(array[i]);
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/ArrayTypeInferenceFromVarargs.java b/java/java-tests/testData/refactoring/inlineMethod/ArrayTypeInferenceFromVarargs.java
new file mode 100644
index 0000000..4b74065
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/ArrayTypeInferenceFromVarargs.java
@@ -0,0 +1,9 @@
+class Test {
+  <T> void doSmth(T... ps) {
+    System.out.println(ps);
+  }
+
+  void m() {
+    doS<caret>mth(1, 2, 3);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/ArrayTypeInferenceFromVarargs.java.after b/java/java-tests/testData/refactoring/inlineMethod/ArrayTypeInferenceFromVarargs.java.after
new file mode 100644
index 0000000..483a7e0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/ArrayTypeInferenceFromVarargs.java.after
@@ -0,0 +1,6 @@
+class Test {
+
+    void m() {
+        System.out.println(new Integer[]{1, 2, 3});
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/CallInFor.java b/java/java-tests/testData/refactoring/inlineMethod/CallInFor.java
new file mode 100644
index 0000000..f659ed4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/CallInFor.java
@@ -0,0 +1,19 @@
+public class C {
+    public void doSomething() {
+        for (Iterator it = getSomeObjects().iterator(); it.hasNext();) {
+            String text = (String)it.next();
+            System.out.println("text = " + text);
+        }
+    }
+
+    private Collection <caret>getSomeObjects() {
+        final String text = "hello";
+        return getSomeObjects(text);
+    }
+
+    private Collection getSomeObjects(String text) {
+        final List list = new ArrayList();
+        list.add(text);
+        return list;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/CallInFor.java.after b/java/java-tests/testData/refactoring/inlineMethod/CallInFor.java.after
new file mode 100644
index 0000000..66ba3f5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/CallInFor.java.after
@@ -0,0 +1,15 @@
+public class C {
+    public void doSomething() {
+        final String text1 = "hello";
+        for (Iterator it = getSomeObjects(text1).iterator(); it.hasNext();) {
+            String text = (String)it.next();
+            System.out.println("text = " + text);
+        }
+    }
+
+    private Collection getSomeObjects(String text) {
+        final List list = new ArrayList();
+        list.add(text);
+        return list;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/CallUnderIf.java b/java/java-tests/testData/refactoring/inlineMethod/CallUnderIf.java
new file mode 100644
index 0000000..0db3e15
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/CallUnderIf.java
@@ -0,0 +1,14 @@
+public class Foo {
+    String getComponent(Integer i) { return null; }
+    Integer myI;
+
+    public void usage() {
+        if (myI != null)
+            method(myI);
+    }
+
+    void me<caret>thod(Integer i) {
+        System.out.println(getComponent(myI) + getComponent(i));
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/CallUnderIf.java.after b/java/java-tests/testData/refactoring/inlineMethod/CallUnderIf.java.after
new file mode 100644
index 0000000..0271bf7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/CallUnderIf.java.after
@@ -0,0 +1,10 @@
+public class Foo {
+    String getComponent(Integer i) { return null; }
+    Integer myI;
+
+    public void usage() {
+        if (myI != null)
+            System.out.println(getComponent(myI) + getComponent(myI));
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/ChainedConstructor.java b/java/java-tests/testData/refactoring/inlineMethod/ChainedConstructor.java
new file mode 100644
index 0000000..a64d275
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/ChainedConstructor.java
@@ -0,0 +1,21 @@
+public class InlineThis {
+    public InlineThis() {
+        System.out.println("code block here");
+    }
+
+    public InlineThis(int i) {
+        th<caret>is();
+    }
+
+    public InlineThis(String str) {
+        this(Integer.parseInt(str));
+    }
+
+
+
+
+    public static void main(String[] args) {
+        InlineThis aInlineThis = new InlineThis();
+        InlineThis aInlineThis1 = new InlineThis(1);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/ChainedConstructor.java.after b/java/java-tests/testData/refactoring/inlineMethod/ChainedConstructor.java.after
new file mode 100644
index 0000000..104f8b3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/ChainedConstructor.java.after
@@ -0,0 +1,21 @@
+public class InlineThis {
+    public InlineThis() {
+        System.out.println("code block here");
+    }
+
+    public InlineThis(int i) {
+        System.out.println("code block here");
+    }
+
+    public InlineThis(String str) {
+        this(Integer.parseInt(str));
+    }
+
+
+
+
+    public static void main(String[] args) {
+        InlineThis aInlineThis = new InlineThis();
+        InlineThis aInlineThis1 = new InlineThis(1);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/ChainedConstructor1.java b/java/java-tests/testData/refactoring/inlineMethod/ChainedConstructor1.java
new file mode 100644
index 0000000..a99133c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/ChainedConstructor1.java
@@ -0,0 +1,21 @@
+public class InlineThis {
+    public InlineThis() {
+        System.out.println("code block here");
+    }
+
+    public InlineThis(int i) {
+        this();
+    }
+
+    public InlineThis(String str) {
+        th<caret>is(Integer.parseInt(str));
+    }
+
+
+
+
+    public static void main(String[] args) {
+        InlineThis aInlineThis = new InlineThis();
+        InlineThis aInlineThis1 = new InlineThis(1);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/ChainedConstructor1.java.after b/java/java-tests/testData/refactoring/inlineMethod/ChainedConstructor1.java.after
new file mode 100644
index 0000000..5143141
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/ChainedConstructor1.java.after
@@ -0,0 +1,17 @@
+public class InlineThis {
+    public InlineThis() {
+        System.out.println("code block here");
+    }
+
+    public InlineThis(String str) {
+        this();
+    }
+
+
+
+
+    public static void main(String[] args) {
+        InlineThis aInlineThis = new InlineThis();
+        InlineThis aInlineThis1 = new InlineThis();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/ChainingConstructor.java b/java/java-tests/testData/refactoring/inlineMethod/ChainingConstructor.java
new file mode 100644
index 0000000..58b16bc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/ChainingConstructor.java
@@ -0,0 +1,22 @@
+class InlineMethodTest {
+    public static InlineMethodTest createInstance() {
+        return new InlineMethodTest(0);
+    }
+
+    protected <caret>InlineMethodTest(int y) {
+        this("hello world", y);
+    }
+
+    protected InlineMethodTest() {
+        this(0);
+    }
+
+    public InlineMethodTest(String text, int i) {
+    }
+}
+
+class Derived extends InlineMethodTest {
+    public Derived(int i) {
+        super(i);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/ChainingConstructor.java.after b/java/java-tests/testData/refactoring/inlineMethod/ChainingConstructor.java.after
new file mode 100644
index 0000000..63a748f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/ChainingConstructor.java.after
@@ -0,0 +1,18 @@
+class InlineMethodTest {
+    public static InlineMethodTest createInstance() {
+        return new InlineMethodTest("hello world", 0);
+    }
+
+    protected InlineMethodTest() {
+        this("hello world", 0);
+    }
+
+    public InlineMethodTest(String text, int i) {
+    }
+}
+
+class Derived extends InlineMethodTest {
+    public Derived(int i) {
+        super("hello world", i);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/ChainingConstructor1.java b/java/java-tests/testData/refactoring/inlineMethod/ChainingConstructor1.java
new file mode 100644
index 0000000..2165c65
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/ChainingConstructor1.java
@@ -0,0 +1,12 @@
+class TestInlineMethod {
+    public <caret>TestInlineMethod(String s1, int r1, String s2, int r2) {
+        this(Integer.valueOf(s1, r1), Integer.valueOf(s2, r2));
+    }
+
+    public TestInlineMethod(Integer i1, Integer i2) {
+    }
+
+    public static void main(String[] args) {
+        TestInlineMethod test = new TestInlineMethod("10", 10, "A", 16);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/ChainingConstructor1.java.after b/java/java-tests/testData/refactoring/inlineMethod/ChainingConstructor1.java.after
new file mode 100644
index 0000000..4a11b50
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/ChainingConstructor1.java.after
@@ -0,0 +1,9 @@
+class TestInlineMethod {
+
+    public TestInlineMethod(Integer i1, Integer i2) {
+    }
+
+    public static void main(String[] args) {
+        TestInlineMethod test = new TestInlineMethod(Integer.valueOf("10", 10), Integer.valueOf("A", 16));
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/ConflictingField.java b/java/java-tests/testData/refactoring/inlineMethod/ConflictingField.java
new file mode 100644
index 0000000..b59fbb1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/ConflictingField.java
@@ -0,0 +1,11 @@
+class Test {
+    public int i;
+
+    public int <caret>getI() {
+        return i;
+    }
+
+    public void usage() {
+        int i = getI();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/ConflictingField.java.after b/java/java-tests/testData/refactoring/inlineMethod/ConflictingField.java.after
new file mode 100644
index 0000000..8f7b670
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/ConflictingField.java.after
@@ -0,0 +1,7 @@
+class Test {
+    public int i;
+
+    public void usage() {
+        int i = this.i;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/ConstantInChainingConstructor.java b/java/java-tests/testData/refactoring/inlineMethod/ConstantInChainingConstructor.java
new file mode 100644
index 0000000..e8f67f2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/ConstantInChainingConstructor.java
@@ -0,0 +1,16 @@
+class Test {
+    public static final int ID=0;
+
+    public <caret>Test() {
+        this(ID);
+    }
+
+    public Test(int id) {
+    }
+}
+
+class Rest {
+    public static void test() {
+        new Test();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/ConstantInChainingConstructor.java.after b/java/java-tests/testData/refactoring/inlineMethod/ConstantInChainingConstructor.java.after
new file mode 100644
index 0000000..86ded72
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/ConstantInChainingConstructor.java.after
@@ -0,0 +1,12 @@
+class Test {
+    public static final int ID=0;
+
+    public Test(int id) {
+    }
+}
+
+class Rest {
+    public static void test() {
+        new Test(Test.ID);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/EnumConstantConstructorParameter.java b/java/java-tests/testData/refactoring/inlineMethod/EnumConstantConstructorParameter.java
new file mode 100644
index 0000000..4249a30
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/EnumConstantConstructorParameter.java
@@ -0,0 +1,10 @@
+public enum EEE {
+    a(<caret>doTest());
+
+    EEE(String s) {
+    }
+
+    private static String doTest() {
+        return "";
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/EnumConstantConstructorParameter.java.after b/java/java-tests/testData/refactoring/inlineMethod/EnumConstantConstructorParameter.java.after
new file mode 100644
index 0000000..cbc24e5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/EnumConstantConstructorParameter.java.after
@@ -0,0 +1,7 @@
+public enum EEE {
+    a("");
+
+    EEE(String s) {
+    }
+
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/EnumConstantConstructorParameterComplex.java b/java/java-tests/testData/refactoring/inlineMethod/EnumConstantConstructorParameterComplex.java
new file mode 100644
index 0000000..4538a84
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/EnumConstantConstructorParameterComplex.java
@@ -0,0 +1,11 @@
+public enum EEE {
+    a(<caret>doTest());
+
+    EEE(String s) {
+    }
+
+    private static String doTest() {
+        System.out.println("q");
+        return "";
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/EnumConstantConstructorParameterComplex.java.after b/java/java-tests/testData/refactoring/inlineMethod/EnumConstantConstructorParameterComplex.java.after
new file mode 100644
index 0000000..d9abfac
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/EnumConstantConstructorParameterComplex.java.after
@@ -0,0 +1,12 @@
+public enum EEE {
+    a(new Object() {
+        String evaluate() {
+            System.out.println("q");
+            return "";
+        }
+    }.evaluate());
+
+    EEE(String s) {
+    }
+
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/EnumConstantConstructorParameterComplex2.java b/java/java-tests/testData/refactoring/inlineMethod/EnumConstantConstructorParameterComplex2.java
new file mode 100644
index 0000000..85fc48c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/EnumConstantConstructorParameterComplex2.java
@@ -0,0 +1,11 @@
+public enum EEE {
+    a(<caret>doTest("q"));
+
+    EEE(String s) {
+    }
+
+    private static String doTest(String s) {
+        System.out.println(s);
+        return "";
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/EnumConstantConstructorParameterComplex2.java.after b/java/java-tests/testData/refactoring/inlineMethod/EnumConstantConstructorParameterComplex2.java.after
new file mode 100644
index 0000000..d9abfac
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/EnumConstantConstructorParameterComplex2.java.after
@@ -0,0 +1,12 @@
+public enum EEE {
+    a(new Object() {
+        String evaluate() {
+            System.out.println("q");
+            return "";
+        }
+    }.evaluate());
+
+    EEE(String s) {
+    }
+
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/EnumConstructor.java b/java/java-tests/testData/refactoring/inlineMethod/EnumConstructor.java
new file mode 100644
index 0000000..24b404b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/EnumConstructor.java
@@ -0,0 +1,10 @@
+enum EnumWithConstructor {
+    Test("1"), Rest("2", "b");
+
+    <caret>EnumWithConstructor(String s) {
+        this(s, "");
+    }
+
+    EnumWithConstructor(String s, String s2) {
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/EnumConstructor.java.after b/java/java-tests/testData/refactoring/inlineMethod/EnumConstructor.java.after
new file mode 100644
index 0000000..741622d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/EnumConstructor.java.after
@@ -0,0 +1,6 @@
+enum EnumWithConstructor {
+    Test("1", ""), Rest("2", "b");
+
+    EnumWithConstructor(String s, String s2) {
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/FieldInitializer.java b/java/java-tests/testData/refactoring/inlineMethod/FieldInitializer.java
new file mode 100644
index 0000000..6f26859
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/FieldInitializer.java
@@ -0,0 +1,7 @@
+class A{
+  int field = foo();
+
+  int <caret>foo(){
+    return 1;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/FieldInitializer.java.after b/java/java-tests/testData/refactoring/inlineMethod/FieldInitializer.java.after
new file mode 100644
index 0000000..c9f93de
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/FieldInitializer.java.after
@@ -0,0 +1,4 @@
+class A{
+  int field = 1;
+
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/FinalParameters.java b/java/java-tests/testData/refactoring/inlineMethod/FinalParameters.java
new file mode 100644
index 0000000..99d11ec
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/FinalParameters.java
@@ -0,0 +1,10 @@
+class Test {
+    void method(Object x) {
+        String s = null;
+        s = (String) x;
+        toInline(s.length());
+    }
+    void toInli<caret>ne(final int i) {
+        System.out.println(i);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/FinalParameters.java.after b/java/java-tests/testData/refactoring/inlineMethod/FinalParameters.java.after
new file mode 100644
index 0000000..e0feb96
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/FinalParameters.java.after
@@ -0,0 +1,7 @@
+class Test {
+    void method(Object x) {
+        String s = null;
+        s = (String) x;
+        System.out.println(s.length());
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/FinalParameters1.java b/java/java-tests/testData/refactoring/inlineMethod/FinalParameters1.java
new file mode 100644
index 0000000..6e02b72
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/FinalParameters1.java
@@ -0,0 +1,15 @@
+class Test {
+    void method(Object x) {
+        String s = null;
+        s = (String) x;
+	toInline(s.length());
+    }
+    void toIn<caret>line(final int i) {
+        Runnable r = new Runnable() {
+            public void run() {
+                System.out.println(i);
+            }
+        };
+        System.out.println(i);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/FinalParameters1.java.after b/java/java-tests/testData/refactoring/inlineMethod/FinalParameters1.java.after
new file mode 100644
index 0000000..11d830e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/FinalParameters1.java.after
@@ -0,0 +1,13 @@
+class Test {
+    void method(Object x) {
+        String s = null;
+        s = (String) x;
+        final int i = s.length();
+        Runnable r = new Runnable() {
+            public void run() {
+                System.out.println(i);
+            }
+        };
+        System.out.println(i);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/FlatVarargs.java b/java/java-tests/testData/refactoring/inlineMethod/FlatVarargs.java
new file mode 100644
index 0000000..97a35f7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/FlatVarargs.java
@@ -0,0 +1,16 @@
+class Varargs {
+  void xxx() {
+    foo(new String[] {"aa", "hh"});
+  }
+
+  void <caret>foo(String... ss) {
+    bar(ss);
+  }
+
+  void bar(String s, String ss){
+
+  }
+
+  void bar(String... ss) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/FlatVarargs.java.after b/java/java-tests/testData/refactoring/inlineMethod/FlatVarargs.java.after
new file mode 100644
index 0000000..f713b4d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/FlatVarargs.java.after
@@ -0,0 +1,12 @@
+class Varargs {
+  void xxx() {
+      bar(new String[] {"aa", "hh"});
+  }
+
+    void bar(String s, String ss){
+
+  }
+
+  void bar(String... ss) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/FlatVarargs1.java b/java/java-tests/testData/refactoring/inlineMethod/FlatVarargs1.java
new file mode 100644
index 0000000..2e47b23
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/FlatVarargs1.java
@@ -0,0 +1,12 @@
+class Varargs {
+  void xxx() {
+    foo(new String[] {"aa", "hh"});
+  }
+
+  void <caret>foo(String... ss) {
+    bar(ss);
+  }
+
+  void bar(String... ss) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/FlatVarargs1.java.after b/java/java-tests/testData/refactoring/inlineMethod/FlatVarargs1.java.after
new file mode 100644
index 0000000..2d057b1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/FlatVarargs1.java.after
@@ -0,0 +1,8 @@
+class Varargs {
+  void xxx() {
+      bar("aa", "hh");
+  }
+
+    void bar(String... ss) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/IDEADEV12616.java b/java/java-tests/testData/refactoring/inlineMethod/IDEADEV12616.java
new file mode 100644
index 0000000..6c24621
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/IDEADEV12616.java
@@ -0,0 +1,11 @@
+class Test {
+  public void foo() {
+      String s = <caret>bar();
+  }
+
+  private String bar() {
+    String result = null;
+    assert result != null;
+    return result;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/IDEADEV12616.java.after b/java/java-tests/testData/refactoring/inlineMethod/IDEADEV12616.java.after
new file mode 100644
index 0000000..4960c41
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/IDEADEV12616.java.after
@@ -0,0 +1,8 @@
+class Test {
+  public void foo() {
+      String result = null;
+      assert result != null;
+      String s = result;
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/IDEADEV3672.java b/java/java-tests/testData/refactoring/inlineMethod/IDEADEV3672.java
new file mode 100644
index 0000000..a6bc3b2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/IDEADEV3672.java
@@ -0,0 +1,13 @@
+class Tester1 {
+    void caller() {
+        <caret>method(); 
+    }
+    void method() {
+        new Runnable() {
+            public void run() {
+                other();
+            }
+        };
+    }
+    void other() { }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/IDEADEV3672.java.after b/java/java-tests/testData/refactoring/inlineMethod/IDEADEV3672.java.after
new file mode 100644
index 0000000..9545b41
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/IDEADEV3672.java.after
@@ -0,0 +1,11 @@
+class Tester1 {
+    void caller() {
+        new Runnable() {
+            public void run() {
+                other();
+            }
+        };
+    }
+
+    void other() { }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/IDEADEV5806.java b/java/java-tests/testData/refactoring/inlineMethod/IDEADEV5806.java
new file mode 100644
index 0000000..de391ca
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/IDEADEV5806.java
@@ -0,0 +1,27 @@
+import java.util.*;
+
+class Foo {
+    public void foo(Bar bar) {
+        for (Iterator it = bar.iterator(); it.hasNext();) {
+            final String o = (String) it.next();
+        }
+    }
+}
+
+class Bar<CN extends Bar> {
+    private List<CN> cns;
+
+    /**
+     * @deprecated
+     */
+    public Iterator<CN> <caret>iterator() {
+        return getCns().iterator();
+    }
+
+    public List<CN> getCns() {
+        if (cns == null) {
+            return Collections.emptyList();
+        }
+        return cns;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/IDEADEV5806.java.after b/java/java-tests/testData/refactoring/inlineMethod/IDEADEV5806.java.after
new file mode 100644
index 0000000..b81061d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/IDEADEV5806.java.after
@@ -0,0 +1,20 @@
+import java.util.*;
+
+class Foo {
+    public void foo(Bar bar) {
+        for (Iterator it = bar.getCns().iterator(); it.hasNext();) {
+            final String o = (String) it.next();
+        }
+    }
+}
+
+class Bar<CN extends Bar> {
+    private List<CN> cns;
+
+    public List<CN> getCns() {
+        if (cns == null) {
+            return Collections.emptyList();
+        }
+        return cns;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/IDEADEV6807.java b/java/java-tests/testData/refactoring/inlineMethod/IDEADEV6807.java
new file mode 100644
index 0000000..0342b913
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/IDEADEV6807.java
@@ -0,0 +1,14 @@
+class Base {
+    protected int f;
+
+
+    public int <caret>getF() {
+        return f;
+    }
+}
+
+class DRV extends Base {
+    void f() {
+        int f1 = getF();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/IDEADEV6807.java.after b/java/java-tests/testData/refactoring/inlineMethod/IDEADEV6807.java.after
new file mode 100644
index 0000000..4f26822
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/IDEADEV6807.java.after
@@ -0,0 +1,11 @@
+class Base {
+    protected int f;
+
+
+}
+
+class DRV extends Base {
+    void f() {
+        int f1 = f;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/InSuperCall.java b/java/java-tests/testData/refactoring/inlineMethod/InSuperCall.java
new file mode 100644
index 0000000..3e70c42
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/InSuperCall.java
@@ -0,0 +1,22 @@
+class BBB {
+    public BBB(String x) {
+    }
+
+    void foo(String s) {}
+}
+
+class AAA extends BBB {
+    public AAA(String x) {
+        super(test(x));
+    }
+
+    private static String t<caret>est(String x) {
+        String y = x.trim();
+        return y.length() > 0 ? y : "aaaa";
+    }
+
+    @Override
+    void foo(String s) {
+        super.foo(test(s));    //To change body of overridden methods use File | Settings | File Templates.
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/InferredType.java b/java/java-tests/testData/refactoring/inlineMethod/InferredType.java
new file mode 100644
index 0000000..208fcf4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/InferredType.java
@@ -0,0 +1,8 @@
+import java.util.*;
+class Test {
+    private static <T> List<T> <caret>foo() { return Collections.emptyList(); }
+    private static <T> List<T> bar(List<T> xs) { return xs; }
+    private static void gazonk() {
+        List<String> ss = bar(Test.<String>foo());
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/InferredType.java.after b/java/java-tests/testData/refactoring/inlineMethod/InferredType.java.after
new file mode 100644
index 0000000..15b44de
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/InferredType.java.after
@@ -0,0 +1,7 @@
+import java.util.*;
+class Test {
+    private static <T> List<T> bar(List<T> xs) { return xs; }
+    private static void gazonk() {
+        List<String> ss = bar(Collections.<String>emptyList());
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/InlineAllInProjectFromLibrary.java b/java/java-tests/testData/refactoring/inlineMethod/InlineAllInProjectFromLibrary.java
new file mode 100644
index 0000000..fdbeb26
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/InlineAllInProjectFromLibrary.java
@@ -0,0 +1,7 @@
+import mycompany.File;
+
+class Test {
+  void foo() throws Exception {
+    File tempFile = File.createTempFile("", "");
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/InlineAllInProjectFromLibrary.java.after b/java/java-tests/testData/refactoring/inlineMethod/InlineAllInProjectFromLibrary.java.after
new file mode 100644
index 0000000..8dc89c1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/InlineAllInProjectFromLibrary.java.after
@@ -0,0 +1,7 @@
+import mycompany.File;
+
+class Test {
+  void foo() throws Exception {
+      File tempFile = mycompany.File.createTempFile("", "", null);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/InlineAnonymousClassWithPrivateMethodInside.java b/java/java-tests/testData/refactoring/inlineMethod/InlineAnonymousClassWithPrivateMethodInside.java
new file mode 100644
index 0000000..ec4b84b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/InlineAnonymousClassWithPrivateMethodInside.java
@@ -0,0 +1,24 @@
+public class Foo {
+  public static void f<caret>oo() {
+    bar(new Runnable() {
+      @Override
+      public void run() {
+        doRun();
+      }
+
+      private void doRun() {
+        // Woo-hoo
+      }
+    });
+  }
+
+  public static void bar(final Runnable runnable) {
+    runnable.run();
+  }
+}
+
+class Bar {
+  public static void main(String[] args) {
+    Foo.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/InlineAnonymousClassWithPrivateMethodInside.java.after b/java/java-tests/testData/refactoring/inlineMethod/InlineAnonymousClassWithPrivateMethodInside.java.after
new file mode 100644
index 0000000..603055e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/InlineAnonymousClassWithPrivateMethodInside.java.after
@@ -0,0 +1,21 @@
+public class Foo {
+
+    public static void bar(final Runnable runnable) {
+    runnable.run();
+  }
+}
+
+class Bar {
+  public static void main(String[] args) {
+      Foo.bar(new Runnable() {
+          @Override
+          public void run() {
+              doRun();
+          }
+
+          private void doRun() {
+              // Woo-hoo
+          }
+      });
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/InlineMethodTest.txt b/java/java-tests/testData/refactoring/inlineMethod/InlineMethodTest.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/InlineMethodTest.txt
diff --git a/java/java-tests/testData/refactoring/inlineMethod/InlineParms.java b/java/java-tests/testData/refactoring/inlineMethod/InlineParms.java
new file mode 100644
index 0000000..a46df7d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/InlineParms.java
@@ -0,0 +1,30 @@
+public class Test {
+    public int <caret>foo(int p1, int p2) {
+        p2++;
+        return someMethod(p1, p2);
+    }
+
+    public void use1() {
+        int r = foo(x, y);
+    }
+
+    public void use2() {
+        int r = foo(field1, field1);
+    }
+
+    public void use3() {
+        int r = foo(field2, field2);
+    }
+
+    public void use4() {
+        int r = foo(field3, field3);
+    }
+
+    {
+        field2++;
+    }
+
+    private final int field1;
+    private int field2;
+    private int field3;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/InlineParms.java.after b/java/java-tests/testData/refactoring/inlineMethod/InlineParms.java.after
new file mode 100644
index 0000000..d7f7027
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/InlineParms.java.after
@@ -0,0 +1,34 @@
+public class Test {
+
+    public void use1() {
+        int p2 = y;
+        p2++;
+        int r = someMethod(x, p2);
+    }
+
+    public void use2() {
+        int p2 = field1;
+        p2++;
+        int r = someMethod(field1, p2);
+    }
+
+    public void use3() {
+        int p2 = field2;
+        p2++;
+        int r = someMethod(field2, p2);
+    }
+
+    public void use4() {
+        int p2 = field3;
+        p2++;
+        int r = someMethod(field3, p2);
+    }
+
+    {
+        field2++;
+    }
+
+    private final int field1;
+    private int field2;
+    private int field3;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/InlineRunnableRun.java b/java/java-tests/testData/refactoring/inlineMethod/InlineRunnableRun.java
new file mode 100644
index 0000000..11e96b8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/InlineRunnableRun.java
@@ -0,0 +1,28 @@
+/*
+ * 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 Test {
+  private void bar() {
+         //To change body of created methods use File | Settings | File Templates.
+     }
+ 
+     public void foo() {
+         new Runnable() {
+             public void run() {
+                 bar();
+             }
+         }.ru<caret>n();
+     }
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/InlineRunnableRun.java.after b/java/java-tests/testData/refactoring/inlineMethod/InlineRunnableRun.java.after
new file mode 100644
index 0000000..b0ffb0b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/InlineRunnableRun.java.after
@@ -0,0 +1,24 @@
+/*
+ * 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 Test {
+  private void bar() {
+         //To change body of created methods use File | Settings | File Templates.
+     }
+ 
+     public void foo() {
+         bar();
+     }
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/InlineWithQualifier.java b/java/java-tests/testData/refactoring/inlineMethod/InlineWithQualifier.java
new file mode 100644
index 0000000..db992dc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/InlineWithQualifier.java
@@ -0,0 +1,33 @@
+class Element {
+    String id;
+
+    String <caret>getName() {
+        return getID();
+    }
+    String getID() {
+        return id;
+    }
+
+    public String method(Element element) {
+        return getName() + element.getName();
+    }
+
+    public String staticMethod(Element element) {
+        StringBuffer buffer = new StringBuffer();
+        buffer.append(element.getName());
+        return buffer.toString();
+    }
+    static Element toXML(Element element){
+        X el= new X("El")
+        el.setAttribute("attr", element.getName());
+        return el;
+    }
+}
+
+class Usage {
+    public String staticMethod(Element element) {
+        StringBuffer buffer = new StringBuffer();
+        buffer.append(element.getName());
+        return buffer.toString();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/InlineWithQualifier.java.after b/java/java-tests/testData/refactoring/inlineMethod/InlineWithQualifier.java.after
new file mode 100644
index 0000000..e9c74bd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/InlineWithQualifier.java.after
@@ -0,0 +1,30 @@
+class Element {
+    String id;
+
+    String getID() {
+        return id;
+    }
+
+    public String method(Element element) {
+        return getID() + element.getID();
+    }
+
+    public String staticMethod(Element element) {
+        StringBuffer buffer = new StringBuffer();
+        buffer.append(element.getID());
+        return buffer.toString();
+    }
+    static Element toXML(Element element){
+        X el= new X("El")
+        el.setAttribute("attr", element.getID());
+        return el;
+    }
+}
+
+class Usage {
+    public String staticMethod(Element element) {
+        StringBuffer buffer = new StringBuffer();
+        buffer.append(element.getID());
+        return buffer.toString();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/InlineWithQualifierFromSuper.java b/java/java-tests/testData/refactoring/inlineMethod/InlineWithQualifierFromSuper.java
new file mode 100644
index 0000000..aee2cd0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/InlineWithQualifierFromSuper.java
@@ -0,0 +1,17 @@
+class Base {
+    String id;
+    public String getID() {
+        return id;
+    }
+}
+
+class Derived extends Base {
+    String <caret>getName() {
+        return getID();
+    }
+    
+    static void usage(Derived element) {
+        StringBuffer buffer = new StringBuffer();
+        buffer.add(element.getName());
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/InlineWithQualifierFromSuper.java.after b/java/java-tests/testData/refactoring/inlineMethod/InlineWithQualifierFromSuper.java.after
new file mode 100644
index 0000000..e9a554d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/InlineWithQualifierFromSuper.java.after
@@ -0,0 +1,14 @@
+class Base {
+    String id;
+    public String getID() {
+        return id;
+    }
+}
+
+class Derived extends Base {
+
+    static void usage(Derived element) {
+        StringBuffer buffer = new StringBuffer();
+        buffer.add(element.getID());
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/InlineWithTry.java b/java/java-tests/testData/refactoring/inlineMethod/InlineWithTry.java
new file mode 100644
index 0000000..7e75003
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/InlineWithTry.java
@@ -0,0 +1,12 @@
+class A {
+    {
+        g();
+    }
+    int <caret>g() {
+        try {
+            return 0;
+        } catch (Error e) {
+            throw e;
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/InlineWithTry.java.after b/java/java-tests/testData/refactoring/inlineMethod/InlineWithTry.java.after
new file mode 100644
index 0000000..dc25d00ea
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/InlineWithTry.java.after
@@ -0,0 +1,10 @@
+class A {
+    {
+        int result;
+        try {
+            result = 0;
+        } catch (Error e) {
+            throw e;
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/LocalVariableResult.java b/java/java-tests/testData/refactoring/inlineMethod/LocalVariableResult.java
new file mode 100644
index 0000000..ce1b06e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/LocalVariableResult.java
@@ -0,0 +1,17 @@
+class A {
+
+    Integer f(int i) {
+        return g(i);
+    }
+
+    Integer <caret>g(int i) {
+        if (i > 0) {
+            return new Integer(i);
+        }
+        else {
+            Integer result;
+            result = new Integer(0);
+            return result;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/LocalVariableResult.java.after b/java/java-tests/testData/refactoring/inlineMethod/LocalVariableResult.java.after
new file mode 100644
index 0000000..f02b525
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/LocalVariableResult.java.after
@@ -0,0 +1,16 @@
+class A {
+
+    Integer f(int i) {
+        Integer result;
+        if (i > 0) {
+            result = new Integer(i);
+        }
+        else {
+            Integer result;
+            result = new Integer(0);
+            result = result;
+        }
+        return result;
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/MethodCallInOtherAnonymousOrInner.java b/java/java-tests/testData/refactoring/inlineMethod/MethodCallInOtherAnonymousOrInner.java
new file mode 100644
index 0000000..a38a62d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/MethodCallInOtherAnonymousOrInner.java
@@ -0,0 +1,23 @@
+public class Parent {
+  void execute(){}
+  void foo<caret>execute(){
+    execute();
+  }
+}
+
+class Child extends Parent {
+  void foo() {
+    fooexecute();
+    new Runnable() {
+      public void run() {
+        fooexecute();
+      }
+    }.run();
+  }
+
+  class InnerChild {
+    void bar() {
+      Child.this.fooexecute();
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/MethodCallInOtherAnonymousOrInner.java.after b/java/java-tests/testData/refactoring/inlineMethod/MethodCallInOtherAnonymousOrInner.java.after
new file mode 100644
index 0000000..b71aca1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/MethodCallInOtherAnonymousOrInner.java.after
@@ -0,0 +1,20 @@
+public class Parent {
+  void execute(){}
+}
+
+class Child extends Parent {
+  void foo() {
+      execute();
+      new Runnable() {
+      public void run() {
+          execute();
+      }
+    }.run();
+  }
+
+  class InnerChild {
+    void bar() {
+        execute();
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/MethodUsedInJavadoc.java b/java/java-tests/testData/refactoring/inlineMethod/MethodUsedInJavadoc.java
new file mode 100644
index 0000000..af2f728
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/MethodUsedInJavadoc.java
@@ -0,0 +1,7 @@
+/**
+ * {@link InlineMethodTest#foo}
+ */
+class InlineMethodTest {
+    public void f<caret>oo(){}
+  
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/NameClash.java b/java/java-tests/testData/refactoring/inlineMethod/NameClash.java
new file mode 100644
index 0000000..7cf58b2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/NameClash.java
@@ -0,0 +1,12 @@
+public class Foo
+{
+    public static void main( String[] args )
+    {
+        Object value = null;
+        log( "float", new Float( 5.5f ) );
+    }
+  
+    private static void <caret>log(String title, Object value) {
+        System.out.println( title + ":" + value );
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/NameClash.java.after b/java/java-tests/testData/refactoring/inlineMethod/NameClash.java.after
new file mode 100644
index 0000000..3a89a80
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/NameClash.java.after
@@ -0,0 +1,9 @@
+public class Foo
+{
+    public static void main( String[] args )
+    {
+        Object value = null;
+        System.out.println( "float" + ":" + new Float( 5.5f ));
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/NestedCall.java b/java/java-tests/testData/refactoring/inlineMethod/NestedCall.java
new file mode 100644
index 0000000..52f250f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/NestedCall.java
@@ -0,0 +1,8 @@
+class NestedCall {
+    int foo(int p) { return p; }
+    int <caret>bar(int p) { return foo(p); }
+
+    {
+        bar(bar(0));
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/NestedCall.java.after b/java/java-tests/testData/refactoring/inlineMethod/NestedCall.java.after
new file mode 100644
index 0000000..83e56f4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/NestedCall.java.after
@@ -0,0 +1,7 @@
+class NestedCall {
+    int foo(int p) { return p; }
+
+    {
+        foo(foo(0));
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/NonCodeUsage.java b/java/java-tests/testData/refactoring/inlineMethod/NonCodeUsage.java
new file mode 100644
index 0000000..7116b89
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/NonCodeUsage.java
@@ -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 Test {
+    private int bar() {
+        System.out.println(42);
+    }
+
+    //noncode bar usage
+    public void foo() {
+        ba<caret>r();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/NonCodeUsage.java.after b/java/java-tests/testData/refactoring/inlineMethod/NonCodeUsage.java.after
new file mode 100644
index 0000000..3bb97a2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/NonCodeUsage.java.after
@@ -0,0 +1,23 @@
+/*
+ * 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 Test {
+
+    //noncode bar usage
+    public void foo() {
+        System.out.println(42);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/NotAStatement.java b/java/java-tests/testData/refactoring/inlineMethod/NotAStatement.java
new file mode 100644
index 0000000..f8871bcd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/NotAStatement.java
@@ -0,0 +1,26 @@
+class AAA {
+  void fff(Project myProject) {
+    ensureFilesWritable(myProject, new String[1]);
+  }
+
+  private boolean ensu<caret>reFilesWritable(final Project project, final String... strings) {
+    return !ensureFilesWritable(strings).hasReadonlyFiles();
+  }
+
+  private Status ensureFilesWritable(final String[] strings) {
+    return new Status(strings);
+  }
+
+  class Status {
+    public Status(final String[] strings) {
+      //To change body of created methods use File | Settings | File Templates.
+    }
+
+    boolean hasReadonlyFiles() {
+      return true;
+    }
+  }
+
+  class Project {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/OneLineLambdaValueCompatibleOneLine.java b/java/java-tests/testData/refactoring/inlineMethod/OneLineLambdaValueCompatibleOneLine.java
new file mode 100644
index 0000000..4e43186
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/OneLineLambdaValueCompatibleOneLine.java
@@ -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.
+ */
+import java.lang.Comparable;
+
+class Test {
+     private int bar() {
+       return 42;
+     }
+ 
+     public void foo() {
+         Comparable<String> c = (o) -> ba<caret>r();
+     }
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/OneLineLambdaValueCompatibleOneLine.java.after b/java/java-tests/testData/refactoring/inlineMethod/OneLineLambdaValueCompatibleOneLine.java.after
new file mode 100644
index 0000000..a39e950
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/OneLineLambdaValueCompatibleOneLine.java.after
@@ -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.
+ */
+import java.lang.Comparable;
+
+class Test {
+     private int bar() {
+       return 42;
+     }
+ 
+     public void foo() {
+         Comparable<String> c = (o) -> 42;
+     }
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/OneLineLambdaValueCompatibleToBlock.java b/java/java-tests/testData/refactoring/inlineMethod/OneLineLambdaValueCompatibleToBlock.java
new file mode 100644
index 0000000..abe9d74
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/OneLineLambdaValueCompatibleToBlock.java
@@ -0,0 +1,27 @@
+import java.lang.Comparable;
+
+/*
+ * 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 Test {
+     private int bar() {
+       System.out.println("");
+       return 42;
+     }
+ 
+     public void foo() {
+         Comparable<String> c = (o) -> ba<caret>r();
+     }
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/OneLineLambdaValueCompatibleToBlock.java.after b/java/java-tests/testData/refactoring/inlineMethod/OneLineLambdaValueCompatibleToBlock.java.after
new file mode 100644
index 0000000..c44932d2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/OneLineLambdaValueCompatibleToBlock.java.after
@@ -0,0 +1,30 @@
+import java.lang.Comparable;
+
+/*
+ * 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 Test {
+     private int bar() {
+       System.out.println("");
+       return 42;
+     }
+ 
+     public void foo() {
+         Comparable<String> c = (o) -> {
+             System.out.println("");
+             return 42;
+         };
+     }
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/OneLineLambdaVoidCompatibleOneLine.java b/java/java-tests/testData/refactoring/inlineMethod/OneLineLambdaVoidCompatibleOneLine.java
new file mode 100644
index 0000000..5199637
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/OneLineLambdaVoidCompatibleOneLine.java
@@ -0,0 +1,24 @@
+/*
+ * 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 Test {
+     private void bar() {
+       System.out.println("");
+     }
+ 
+     public void foo() {
+         Runnable r = () -> ba<caret>r();
+     }
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/OneLineLambdaVoidCompatibleOneLine.java.after b/java/java-tests/testData/refactoring/inlineMethod/OneLineLambdaVoidCompatibleOneLine.java.after
new file mode 100644
index 0000000..c69cb20
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/OneLineLambdaVoidCompatibleOneLine.java.after
@@ -0,0 +1,24 @@
+/*
+ * 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 Test {
+     private void bar() {
+       System.out.println("");
+     }
+ 
+     public void foo() {
+         Runnable r = () -> System.out.println("");
+     }
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/OneLineLambdaVoidCompatibleToBlock.java b/java/java-tests/testData/refactoring/inlineMethod/OneLineLambdaVoidCompatibleToBlock.java
new file mode 100644
index 0000000..059ce33
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/OneLineLambdaVoidCompatibleToBlock.java
@@ -0,0 +1,25 @@
+/*
+ * 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 Test {
+     private void bar() {
+       System.out.println("");
+       System.out.println("");
+     }
+ 
+     public void foo() {
+         Runnable r = () -> ba<caret>r();
+     }
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/OneLineLambdaVoidCompatibleToBlock.java.after b/java/java-tests/testData/refactoring/inlineMethod/OneLineLambdaVoidCompatibleToBlock.java.after
new file mode 100644
index 0000000..3827120
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/OneLineLambdaVoidCompatibleToBlock.java.after
@@ -0,0 +1,28 @@
+/*
+ * 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 Test {
+     private void bar() {
+       System.out.println("");
+       System.out.println("");
+     }
+ 
+     public void foo() {
+         Runnable r = () -> {
+             System.out.println("");
+             System.out.println("");
+         };
+     }
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/ParamNameConflictsWithLocalVar.java b/java/java-tests/testData/refactoring/inlineMethod/ParamNameConflictsWithLocalVar.java
new file mode 100644
index 0000000..7f3adbd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/ParamNameConflictsWithLocalVar.java
@@ -0,0 +1,14 @@
+public class ABl {
+    void foo(int fe) {
+        System.out.println(fe);
+    }
+
+    void bar(boolean br) {
+        int fe = 0;
+        if (br) {
+            foo(fe);
+        } else {
+            f<caret>oo(11);
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/ParamNameConflictsWithLocalVar.java.after b/java/java-tests/testData/refactoring/inlineMethod/ParamNameConflictsWithLocalVar.java.after
new file mode 100644
index 0000000..008bc75
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/ParamNameConflictsWithLocalVar.java.after
@@ -0,0 +1,11 @@
+public class ABl {
+
+    void bar(boolean br) {
+        int fe = 0;
+        if (br) {
+            System.out.println(fe);
+        } else {
+            System.out.println(11);
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/RawSubstitution.java b/java/java-tests/testData/refactoring/inlineMethod/RawSubstitution.java
new file mode 100644
index 0000000..6e7f02b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/RawSubstitution.java
@@ -0,0 +1,16 @@
+public class NotRaw<T> {
+    T g<caret>et(T t){
+        T tt = t;
+        if ( t == null) {
+            return null;
+        }           else
+        return null;
+    }
+
+}
+
+class Raw extends NotRaw {
+    void foo() {
+        Object o = get(null);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/RawSubstitution.java.after b/java/java-tests/testData/refactoring/inlineMethod/RawSubstitution.java.after
new file mode 100644
index 0000000..3bdbc00
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/RawSubstitution.java.after
@@ -0,0 +1,15 @@
+public class NotRaw<T> {
+
+}
+
+class Raw extends NotRaw {
+    void foo() {
+        Object result;
+        Object tt = null;
+        if ( null == null) {
+            result = null;
+        }           else
+            result = null;
+        Object o = result;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/ReplaceGenericsInside.java b/java/java-tests/testData/refactoring/inlineMethod/ReplaceGenericsInside.java
new file mode 100644
index 0000000..e51120c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/ReplaceGenericsInside.java
@@ -0,0 +1,16 @@
+import java.util.*;
+public class Super<T> {
+
+  void <caret>foo() {
+    List<T> l = new ArrayList<T>();
+    for (T t : l) {
+      System.out.println(t);
+    }
+  }
+}
+
+class Test extends Super<String>{
+  void bar() {
+    foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/ReplaceGenericsInside.java.after b/java/java-tests/testData/refactoring/inlineMethod/ReplaceGenericsInside.java.after
new file mode 100644
index 0000000..c6bbeb4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/ReplaceGenericsInside.java.after
@@ -0,0 +1,13 @@
+import java.util.*;
+public class Super<T> {
+
+}
+
+class Test extends Super<String>{
+  void bar() {
+      List<String> l = new ArrayList<String>();
+      for (String t : l) {
+        System.out.println(t);
+      }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/ReplaceParameterWithArgumentForConstructor.java b/java/java-tests/testData/refactoring/inlineMethod/ReplaceParameterWithArgumentForConstructor.java
new file mode 100644
index 0000000..d947478
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/ReplaceParameterWithArgumentForConstructor.java
@@ -0,0 +1,10 @@
+public class ConstructedClass {
+    public static ConstructedClass PEC_ONE = new ConstructedClass("param");
+
+    ConstructedClass(int field) {
+    }
+
+    public <caret>ConstructedClass(String keyword) {
+	this(keyword.length());
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/ReplaceParameterWithArgumentForConstructor.java.after b/java/java-tests/testData/refactoring/inlineMethod/ReplaceParameterWithArgumentForConstructor.java.after
new file mode 100644
index 0000000..c2fb330
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/ReplaceParameterWithArgumentForConstructor.java.after
@@ -0,0 +1,7 @@
+public class ConstructedClass {
+    public static ConstructedClass PEC_ONE = new ConstructedClass("param".length());
+
+    ConstructedClass(int field) {
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/SCR20655.java b/java/java-tests/testData/refactoring/inlineMethod/SCR20655.java
new file mode 100644
index 0000000..7a7d7b79
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/SCR20655.java
@@ -0,0 +1,11 @@
+class Super {
+  public void message<caret>() {
+    System.out.println(this);
+  }
+}
+
+class Sub extends Super {
+  public void message() {
+    super.message();      // <-- Inline this method call.
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/SCR20655.java.after b/java/java-tests/testData/refactoring/inlineMethod/SCR20655.java.after
new file mode 100644
index 0000000..adabeaf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/SCR20655.java.after
@@ -0,0 +1,8 @@
+class Super {
+}
+
+class Sub extends Super {
+  public void message() {
+      System.out.println(this);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/SCR22644.java b/java/java-tests/testData/refactoring/inlineMethod/SCR22644.java
new file mode 100644
index 0000000..52dadb9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/SCR22644.java
@@ -0,0 +1,17 @@
+public class SuperClass {
+    public void <caret>doSomething() {
+        UtilClass.doSomething(this);
+    }
+}
+
+public class SubClass extends SuperClass {
+    public void doSomethingElse() {
+        doSomething();
+    }
+}
+
+public class UtilClass {
+    public static void doSomething(SuperClass superClass) {
+        // ...
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/SCR22644.java.after b/java/java-tests/testData/refactoring/inlineMethod/SCR22644.java.after
new file mode 100644
index 0000000..3e93bbf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/SCR22644.java.after
@@ -0,0 +1,14 @@
+public class SuperClass {
+}
+
+public class SubClass extends SuperClass {
+    public void doSomethingElse() {
+        UtilClass.doSomething(this);
+    }
+}
+
+public class UtilClass {
+    public static void doSomething(SuperClass superClass) {
+        // ...
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/SCR31093.java b/java/java-tests/testData/refactoring/inlineMethod/SCR31093.java
new file mode 100644
index 0000000..1be51e3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/SCR31093.java
@@ -0,0 +1,10 @@
+class A {
+    private void f() {}
+}
+
+class B {
+    private A b;
+    public void g() {
+        b.<caret>f();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/SCR31093.java.after b/java/java-tests/testData/refactoring/inlineMethod/SCR31093.java.after
new file mode 100644
index 0000000..b49e312
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/SCR31093.java.after
@@ -0,0 +1,8 @@
+class A {
+}
+
+class B {
+    private A b;
+    public void g() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/SCR37742.java b/java/java-tests/testData/refactoring/inlineMethod/SCR37742.java
new file mode 100644
index 0000000..7c14ed8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/SCR37742.java
@@ -0,0 +1,12 @@
+import java.util.List;
+import java.util.ArrayList;
+
+class Test {
+    <T> void foo(T t) {
+        List<? extends T> l = new ArrayList<T>();
+    }
+
+    void bar () {
+        <caret>foo(new String());
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/SCR37742.java.after b/java/java-tests/testData/refactoring/inlineMethod/SCR37742.java.after
new file mode 100644
index 0000000..5d492a3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/SCR37742.java.after
@@ -0,0 +1,9 @@
+import java.util.List;
+import java.util.ArrayList;
+
+class Test {
+
+    void bar () {
+        List<? extends String> l = new ArrayList<String>();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/Scr10884.java b/java/java-tests/testData/refactoring/inlineMethod/Scr10884.java
new file mode 100644
index 0000000..3c593cf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/Scr10884.java
@@ -0,0 +1,16 @@
+public class Scr10884 {
+ int foo() {
+                return 1;
+        }
+        Y bar() {
+            return new Y(<caret>foo()) {
+	    };
+        }
+}
+
+class Y {
+        Y(int x) {}
+        int foo() {
+                return 2;
+        }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/Scr10884.java.after b/java/java-tests/testData/refactoring/inlineMethod/Scr10884.java.after
new file mode 100644
index 0000000..cdd5b09
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/Scr10884.java.after
@@ -0,0 +1,13 @@
+public class Scr10884 {
+    Y bar() {
+        return new Y(1) {
+	    };
+        }
+}
+
+class Y {
+        Y(int x) {}
+        int foo() {
+                return 2;
+        }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/Scr13831.java b/java/java-tests/testData/refactoring/inlineMethod/Scr13831.java
new file mode 100644
index 0000000..6491710
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/Scr13831.java
@@ -0,0 +1,12 @@
+public class Foo
+{
+    public static void main( String[] args )
+    {
+        log( "integer", new Integer( 5 ) );
+        log( "float", new Float( 5.5f ) );
+    }
+  
+    private static void <caret>log(String title, Object value) {
+        System.out.println( title + ":" + value );
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/Scr13831.java.after b/java/java-tests/testData/refactoring/inlineMethod/Scr13831.java.after
new file mode 100644
index 0000000..353f71e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/Scr13831.java.after
@@ -0,0 +1,9 @@
+public class Foo
+{
+    public static void main( String[] args )
+    {
+        System.out.println( "integer" + ":" + new Integer( 5 ));
+        System.out.println( "float" + ":" + new Float( 5.5f ));
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/SideEffect.java b/java/java-tests/testData/refactoring/inlineMethod/SideEffect.java
new file mode 100644
index 0000000..0ac33e5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/SideEffect.java
@@ -0,0 +1,11 @@
+class Test {
+    private String s;
+    String <caret>method() {
+        s = "Hello";
+        return s;
+    }
+    void test() {
+        System.out.println(method());
+        System.out.println(s);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/SideEffect.java.after b/java/java-tests/testData/refactoring/inlineMethod/SideEffect.java.after
new file mode 100644
index 0000000..1ca32bb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/SideEffect.java.after
@@ -0,0 +1,9 @@
+class Test {
+    private String s;
+
+    void test() {
+        s = "Hello";
+        System.out.println(s);
+        System.out.println(s);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/StaticFieldInitializer.java b/java/java-tests/testData/refactoring/inlineMethod/StaticFieldInitializer.java
new file mode 100644
index 0000000..400541c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/StaticFieldInitializer.java
@@ -0,0 +1,8 @@
+class A{
+    static int field = foo();
+
+    static int <caret>foo(){
+        doSomething();
+        return 1;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/StaticFieldInitializer.java.after b/java/java-tests/testData/refactoring/inlineMethod/StaticFieldInitializer.java.after
new file mode 100644
index 0000000..ba4b0f8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/StaticFieldInitializer.java.after
@@ -0,0 +1,9 @@
+class A{
+    static int field;
+
+    static {
+        doSomething();
+        field = 1;
+    }
+
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/StaticMethodWithoutParams.java b/java/java-tests/testData/refactoring/inlineMethod/StaticMethodWithoutParams.java
new file mode 100644
index 0000000..db4ad0e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/StaticMethodWithoutParams.java
@@ -0,0 +1,6 @@
+class A{
+  static void <caret>foo(){}
+  static void bar(){
+    foo(666);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/StaticMethodWithoutParams.java.after b/java/java-tests/testData/refactoring/inlineMethod/StaticMethodWithoutParams.java.after
new file mode 100644
index 0000000..5273307
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/StaticMethodWithoutParams.java.after
@@ -0,0 +1,4 @@
+class A{
+    static void bar(){
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/StaticSynchronized.java b/java/java-tests/testData/refactoring/inlineMethod/StaticSynchronized.java
new file mode 100644
index 0000000..2b47724
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/StaticSynchronized.java
@@ -0,0 +1,17 @@
+public class TestIntelliJ
+{
+
+    public synchronized void foo() {
+        System.out.println("foo");
+    }
+
+    public static synchronized void foo<caret>Static() {
+        System.out.println("fooStatic");
+    }
+
+    public static void main(String[] args) {
+        TestIntelliJ test = new TestIntelliJ();
+        test.foo();
+        TestIntelliJ.fooStatic();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/StaticSynchronized.java.after b/java/java-tests/testData/refactoring/inlineMethod/StaticSynchronized.java.after
new file mode 100644
index 0000000..4ba0027
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/StaticSynchronized.java.after
@@ -0,0 +1,15 @@
+public class TestIntelliJ
+{
+
+    public synchronized void foo() {
+        System.out.println("foo");
+    }
+
+    public static void main(String[] args) {
+        TestIntelliJ test = new TestIntelliJ();
+        test.foo();
+        synchronized (TestIntelliJ.class) {
+            System.out.println("fooStatic");
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/Substitution.java b/java/java-tests/testData/refactoring/inlineMethod/Substitution.java
new file mode 100644
index 0000000..d490684
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/Substitution.java
@@ -0,0 +1,47 @@
+class Foo {
+  public static <T, Loc> WeighingComparable<T, Loc> we<caret>igh(final Key<? extends Weigher<T, Loc>> key,
+                                                          final Computable<T> element,
+                                                          final Loc location) {
+    return new WeighingComparable<T, Loc>(element, location, new Weigher[0]);
+  }
+
+
+  public WeighingComparable<String, ProximityLocation> method(boolean b,
+                                                              final Computable<String> elementComputable,
+                                                              Object processingContext) {
+    return weigh(WEIGHER_KEY, elementComputable, new ProximityLocation());
+  }
+
+  public static final Key<ProximityWeigher> WEIGHER_KEY = null;
+}
+
+abstract class ProximityWeigher extends Weigher<String, ProximityLocation> {
+
+}
+
+class ProximityLocation {
+}
+
+class Key<P> {
+}
+
+class Weigher<A, B> {
+}
+
+class Computable<O> {}
+
+class WeighingComparable<T, Loc> implements Comparable<WeighingComparable<T, Loc>> {
+
+  public WeighingComparable(final Computable<T> element, final Loc location, final Weigher[] weighers) {
+    //To change body of created methods use File | Settings | File Templates.
+  }
+
+  public int compareTo(@NotNull final WeighingComparable<T, Loc> comparable) {
+    return 0;
+  }
+
+  @Nullable
+  private Comparable getWeight(final int index) {
+    return null;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/Substitution.java.after b/java/java-tests/testData/refactoring/inlineMethod/Substitution.java.after
new file mode 100644
index 0000000..2d63bdc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/Substitution.java.after
@@ -0,0 +1,42 @@
+class Foo {
+
+
+    public WeighingComparable<String, ProximityLocation> method(boolean b,
+                                                              final Computable<String> elementComputable,
+                                                              Object processingContext) {
+        return new WeighingComparable<String, ProximityLocation>(elementComputable, new ProximityLocation(), new Weigher[0]);
+    }
+
+  public static final Key<ProximityWeigher> WEIGHER_KEY = null;
+}
+
+abstract class ProximityWeigher extends Weigher<String, ProximityLocation> {
+
+}
+
+class ProximityLocation {
+}
+
+class Key<P> {
+}
+
+class Weigher<A, B> {
+}
+
+class Computable<O> {}
+
+class WeighingComparable<T, Loc> implements Comparable<WeighingComparable<T, Loc>> {
+
+  public WeighingComparable(final Computable<T> element, final Loc location, final Weigher[] weighers) {
+    //To change body of created methods use File | Settings | File Templates.
+  }
+
+  public int compareTo(@NotNull final WeighingComparable<T, Loc> comparable) {
+    return 0;
+  }
+
+  @Nullable
+  private Comparable getWeight(final int index) {
+    return null;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/SuperInsideHierarchy.java b/java/java-tests/testData/refactoring/inlineMethod/SuperInsideHierarchy.java
new file mode 100644
index 0000000..efb6003
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/SuperInsideHierarchy.java
@@ -0,0 +1,19 @@
+class A {
+  void foo(){
+    //do smth in A
+  }
+}
+
+class B {
+  void <caret>bar() {
+    super.foo();
+  }
+
+  void test(){
+    bar();
+  }
+
+  void foo() {
+    //do smth
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/SuperInsideHierarchy.java.after b/java/java-tests/testData/refactoring/inlineMethod/SuperInsideHierarchy.java.after
new file mode 100644
index 0000000..73c6c9a4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/SuperInsideHierarchy.java.after
@@ -0,0 +1,16 @@
+class A {
+  void foo(){
+    //do smth in A
+  }
+}
+
+class B {
+
+    void test(){
+        super.foo();
+    }
+
+  void foo() {
+    //do smth
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/SuperMethodInAnonymousClass.java b/java/java-tests/testData/refactoring/inlineMethod/SuperMethodInAnonymousClass.java
new file mode 100644
index 0000000..a523baf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/SuperMethodInAnonymousClass.java
@@ -0,0 +1,23 @@
+class A {
+    public void f() {
+      g();
+    }
+
+    public void g() {
+    }
+  }
+
+  class B extends A {
+    public void g() {
+
+    }
+    public void h() {
+      new Runnable() {
+
+        @Override
+        public void run() {
+          f<caret>();
+        }
+      }.run();
+    }
+  }
diff --git a/java/java-tests/testData/refactoring/inlineMethod/SuperMethodInAnonymousClass.java.after b/java/java-tests/testData/refactoring/inlineMethod/SuperMethodInAnonymousClass.java.after
new file mode 100644
index 0000000..aa42baf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/SuperMethodInAnonymousClass.java.after
@@ -0,0 +1,20 @@
+class A {
+
+    public void g() {
+    }
+  }
+
+  class B extends A {
+    public void g() {
+
+    }
+    public void h() {
+      new Runnable() {
+
+        @Override
+        public void run() {
+            g();
+        }
+      }.run();
+    }
+  }
diff --git a/java/java-tests/testData/refactoring/inlineMethod/TailCallReturn.java b/java/java-tests/testData/refactoring/inlineMethod/TailCallReturn.java
new file mode 100644
index 0000000..e4d4c46
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/TailCallReturn.java
@@ -0,0 +1,12 @@
+class A {
+    private String toInline(boolean b) {
+        if (b) {
+            return "b";
+        }
+        return "a";
+    }
+
+    public String method(boolean b) {
+        return <caret>toInline(b);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/TailCallReturn.java.after b/java/java-tests/testData/refactoring/inlineMethod/TailCallReturn.java.after
new file mode 100644
index 0000000..61dc1de0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/TailCallReturn.java.after
@@ -0,0 +1,9 @@
+class A {
+
+    public String method(boolean b) {
+        if (b) {
+            return "b";
+        }
+        return "a";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/TailCallSimple.java b/java/java-tests/testData/refactoring/inlineMethod/TailCallSimple.java
new file mode 100644
index 0000000..e4d4c46
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/TailCallSimple.java
@@ -0,0 +1,12 @@
+class A {
+    private String toInline(boolean b) {
+        if (b) {
+            return "b";
+        }
+        return "a";
+    }
+
+    public String method(boolean b) {
+        return <caret>toInline(b);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/TailCallSimple.java.after b/java/java-tests/testData/refactoring/inlineMethod/TailCallSimple.java.after
new file mode 100644
index 0000000..61dc1de0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/TailCallSimple.java.after
@@ -0,0 +1,9 @@
+class A {
+
+    public String method(boolean b) {
+        if (b) {
+            return "b";
+        }
+        return "a";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/TailComment.java b/java/java-tests/testData/refactoring/inlineMethod/TailComment.java
new file mode 100644
index 0000000..343ed2c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/TailComment.java
@@ -0,0 +1,10 @@
+class Test {
+  private void b(){
+    <caret>a();
+  }
+
+  private void a(){
+    System.out.println("asdasd");
+    //test
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/TailComment.java.after b/java/java-tests/testData/refactoring/inlineMethod/TailComment.java.after
new file mode 100644
index 0000000..7d5f3a9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/TailComment.java.after
@@ -0,0 +1,7 @@
+class Test {
+  private void b(){
+      System.out.println("asdasd");
+      //test
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/Try.java b/java/java-tests/testData/refactoring/inlineMethod/Try.java
new file mode 100644
index 0000000..c161739
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/Try.java
@@ -0,0 +1,15 @@
+public class Try {
+    public int test() {
+        int i = another();
+        return i;
+    }
+ 
+    public int another<caret>() {
+        try {
+            return Integer.parseInt("1");
+        }
+        catch (NumberFormatException ex) {
+            throw ex;
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/Try.java.after b/java/java-tests/testData/refactoring/inlineMethod/Try.java.after
new file mode 100644
index 0000000..38cd08d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/Try.java.after
@@ -0,0 +1,14 @@
+public class Try {
+    public int test() {
+        int result;
+        try {
+            result = Integer.parseInt("1");
+        }
+        catch (NumberFormatException ex) {
+            throw ex;
+        }
+        int i = result;
+        return i;
+    }
+
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/TrySynchronized.java b/java/java-tests/testData/refactoring/inlineMethod/TrySynchronized.java
new file mode 100644
index 0000000..02691b8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/TrySynchronized.java
@@ -0,0 +1,15 @@
+public class Try {
+    public int test() {
+        int i = another();
+        return i;
+    }
+ 
+    public synchronized int another<caret>() {
+        try {
+            return Integer.parseInt("1");
+        }
+        catch (NumberFormatException ex) {
+            throw ex;
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/TrySynchronized.java.after b/java/java-tests/testData/refactoring/inlineMethod/TrySynchronized.java.after
new file mode 100644
index 0000000..59358bc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/TrySynchronized.java.after
@@ -0,0 +1,16 @@
+public class Try {
+    public int test() {
+        int result;
+        synchronized (this) {
+            try {
+                result = Integer.parseInt("1");
+            }
+            catch (NumberFormatException ex) {
+                throw ex;
+            }
+        }
+        int i = result;
+        return i;
+    }
+
+}
diff --git a/java/java-tests/testData/refactoring/inlineMethod/Varargs.java b/java/java-tests/testData/refactoring/inlineMethod/Varargs.java
new file mode 100644
index 0000000..2cd31ce
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/Varargs.java
@@ -0,0 +1,13 @@
+public class Varargs {
+    public static String join(String separator, String... texts) {
+        return "";
+    }
+
+    public static String joinStrings(String separator, String... texts) {
+        return join(separator, texts);
+    }
+
+    public void foo() {
+        String s = <caret>joinStrings("", "i", "d", "e", "a");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/Varargs.java.after b/java/java-tests/testData/refactoring/inlineMethod/Varargs.java.after
new file mode 100644
index 0000000..62867ae
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/Varargs.java.after
@@ -0,0 +1,9 @@
+public class Varargs {
+    public static String join(String separator, String... texts) {
+        return "";
+    }
+
+    public void foo() {
+        String s = join("", "i", "d", "e", "a");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/Varargs1.java b/java/java-tests/testData/refactoring/inlineMethod/Varargs1.java
new file mode 100644
index 0000000..976dbba
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/Varargs1.java
@@ -0,0 +1,11 @@
+class BugTest {
+    void <caret>f(String... s) {
+        for (String s1 : s) {
+
+        }
+    }
+
+    {
+        f(new String[] {""});
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/Varargs1.java.after b/java/java-tests/testData/refactoring/inlineMethod/Varargs1.java.after
new file mode 100644
index 0000000..35ca65a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/Varargs1.java.after
@@ -0,0 +1,8 @@
+class BugTest {
+
+    {
+        for (String s1 : new String[] {""}) {
+
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/VoidWithReturn.java b/java/java-tests/testData/refactoring/inlineMethod/VoidWithReturn.java
new file mode 100644
index 0000000..54072d1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/VoidWithReturn.java
@@ -0,0 +1,9 @@
+class Test {
+    void method() {
+        otherMethod();
+        System.out.println("Here");
+    }
+    void otherMethod<caret>() {
+        return;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/VoidWithReturn.java.after b/java/java-tests/testData/refactoring/inlineMethod/VoidWithReturn.java.after
new file mode 100644
index 0000000..e0e7582
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/VoidWithReturn.java.after
@@ -0,0 +1,5 @@
+class Test {
+    void method() {
+        System.out.println("Here");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/VoidWithReturn1.java b/java/java-tests/testData/refactoring/inlineMethod/VoidWithReturn1.java
new file mode 100644
index 0000000..e9348d2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/VoidWithReturn1.java
@@ -0,0 +1,9 @@
+class Test {
+    private static void dude() {
+        return System.currentTimeMillis();
+    }
+
+    public static void main(String[] args) {
+        <caret>dude();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/VoidWithReturn1.java.after b/java/java-tests/testData/refactoring/inlineMethod/VoidWithReturn1.java.after
new file mode 100644
index 0000000..9c0be14
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/VoidWithReturn1.java.after
@@ -0,0 +1,6 @@
+class Test {
+
+    public static void main(String[] args) {
+        System.currentTimeMillis();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/WithSuperInside.java b/java/java-tests/testData/refactoring/inlineMethod/WithSuperInside.java
new file mode 100644
index 0000000..015e3b0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/WithSuperInside.java
@@ -0,0 +1,17 @@
+public class Usage {
+  void foo() {
+    b<caret>ar();
+  }
+
+  void bar() {
+    new W() {
+      protected void www() {
+        super.www();
+      }
+    };
+  }
+}
+
+class W {
+  protected void www() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/WithSuperInside.java.after b/java/java-tests/testData/refactoring/inlineMethod/WithSuperInside.java.after
new file mode 100644
index 0000000..d454a7f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/WithSuperInside.java.after
@@ -0,0 +1,14 @@
+public class Usage {
+  void foo() {
+      new W() {
+        protected void www() {
+          super.www();
+        }
+      };
+  }
+
+}
+
+class W {
+  protected void www() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/multifile/removeStaticImports/after/Bar.java b/java/java-tests/testData/refactoring/inlineMethod/multifile/removeStaticImports/after/Bar.java
new file mode 100644
index 0000000..2f1dfde
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/multifile/removeStaticImports/after/Bar.java
@@ -0,0 +1,4 @@
+public class Bar {
+  void bar() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/multifile/removeStaticImports/after/Foo.java b/java/java-tests/testData/refactoring/inlineMethod/multifile/removeStaticImports/after/Foo.java
new file mode 100644
index 0000000..0a2b052
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/multifile/removeStaticImports/after/Foo.java
@@ -0,0 +1,2 @@
+public class Foo {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/multifile/removeStaticImports/before/Bar.java b/java/java-tests/testData/refactoring/inlineMethod/multifile/removeStaticImports/before/Bar.java
new file mode 100644
index 0000000..0d11160
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/multifile/removeStaticImports/before/Bar.java
@@ -0,0 +1,6 @@
+import static Foo.foo;
+public class Bar {
+  void bar() {
+    foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/multifile/removeStaticImports/before/Foo.java b/java/java-tests/testData/refactoring/inlineMethod/multifile/removeStaticImports/before/Foo.java
new file mode 100644
index 0000000..38f408a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/multifile/removeStaticImports/before/Foo.java
@@ -0,0 +1,3 @@
+public class Foo {
+  public static void foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineParameter/CantInlineRecursive.java b/java/java-tests/testData/refactoring/inlineParameter/CantInlineRecursive.java
new file mode 100644
index 0000000..5c7474f1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/CantInlineRecursive.java
@@ -0,0 +1,18 @@
+import java.lang.Integer;
+import java.util.*;
+import java.util.ArrayList;
+
+public class ExpData {
+   private final List<Integer> myResult = new ArrayList<Integer>();
+  {
+    m(10, myResult);
+  }
+
+  private void m(int i, List<Integer> re<caret>sult) {
+    if (i > 0) {
+      m(i - 1, result);
+    }
+    result.add(i);
+    m(2, new ArrayList<Integer>());
+  }
+}
diff --git a/java/java-tests/testData/refactoring/inlineParameter/ConstructorCall.java b/java/java-tests/testData/refactoring/inlineParameter/ConstructorCall.java
new file mode 100644
index 0000000..c2ac7f2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/ConstructorCall.java
@@ -0,0 +1,11 @@
+class A {
+    private int myI;
+
+    private A(int <caret>i) {
+        myI = i;
+    }
+
+    public static A create() {
+        return new A(0);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineParameter/ConstructorCall.java.after b/java/java-tests/testData/refactoring/inlineParameter/ConstructorCall.java.after
new file mode 100644
index 0000000..eb32c8c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/ConstructorCall.java.after
@@ -0,0 +1,11 @@
+class A {
+    private int myI;
+
+    private A() {
+        myI = 0;
+    }
+
+    public static A create() {
+        return new A();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineParameter/HandleExceptions.java b/java/java-tests/testData/refactoring/inlineParameter/HandleExceptions.java
new file mode 100644
index 0000000..2558922
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/HandleExceptions.java
@@ -0,0 +1,26 @@
+import java.io.*;
+public class Subject {
+  private int myInt;
+
+  public void withClass(Object <caret>o) {
+    myInt += o.hashCode();
+  }
+}
+
+class User {
+  private void oper() throws IOException {
+    Subject subj = new Subject();
+    subj.withClass(new ThirdParty(false));
+  }
+}
+
+class ThirdParty {
+  public ThirdParty() {
+  }
+
+  public ThirdParty(boolean b) throws IOException {
+    if (b) {
+      throw new IOException();
+    }
+  }
+}
diff --git a/java/java-tests/testData/refactoring/inlineParameter/HandleExceptions.java.after b/java/java-tests/testData/refactoring/inlineParameter/HandleExceptions.java.after
new file mode 100644
index 0000000..8e87464
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/HandleExceptions.java.after
@@ -0,0 +1,26 @@
+import java.io.*;
+public class Subject {
+  private int myInt;
+
+  public void withClass() throws IOException {
+    myInt += new ThirdParty(false).hashCode();
+  }
+}
+
+class User {
+  private void oper() throws IOException {
+    Subject subj = new Subject();
+    subj.withClass();
+  }
+}
+
+class ThirdParty {
+  public ThirdParty() {
+  }
+
+  public ThirdParty(boolean b) throws IOException {
+    if (b) {
+      throw new IOException();
+    }
+  }
+}
diff --git a/java/java-tests/testData/refactoring/inlineParameter/InlineLocalParamDef.java b/java/java-tests/testData/refactoring/inlineParameter/InlineLocalParamDef.java
new file mode 100644
index 0000000..9e5953f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/InlineLocalParamDef.java
@@ -0,0 +1,6 @@
+public class ExpData {
+  void foo(String s) {
+    s = "";
+    System.out.println(<caret>s.substring(2));
+  }
+}
diff --git a/java/java-tests/testData/refactoring/inlineParameter/InlineLocalParamDef.java.after b/java/java-tests/testData/refactoring/inlineParameter/InlineLocalParamDef.java.after
new file mode 100644
index 0000000..332d132
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/InlineLocalParamDef.java.after
@@ -0,0 +1,5 @@
+public class ExpData {
+  void foo(String s) {
+      System.out.println("".substring(2));
+  }
+}
diff --git a/java/java-tests/testData/refactoring/inlineParameter/InlineRecursive.java b/java/java-tests/testData/refactoring/inlineParameter/InlineRecursive.java
new file mode 100644
index 0000000..88fb548
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/InlineRecursive.java
@@ -0,0 +1,15 @@
+import java.util.*;
+
+public class ExpData {
+   private final List<Integer> myResult = new ArrayList<Integer>();
+  {
+    m(10, myResult);
+  }
+
+  private void m(int i, List<Integer> re<caret>sult) {
+    if (i > 0) {
+      m(i - 1, result);
+    }
+    result.add(i);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/inlineParameter/InlineRecursive.java.after b/java/java-tests/testData/refactoring/inlineParameter/InlineRecursive.java.after
new file mode 100644
index 0000000..ef341a3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/InlineRecursive.java.after
@@ -0,0 +1,15 @@
+import java.util.*;
+
+public class ExpData {
+   private final List<Integer> myResult = new ArrayList<Integer>();
+  {
+    m(10);
+  }
+
+  private void m(int i) {
+    if (i > 0) {
+      m(i - 1);
+    }
+    myResult.add(i);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/inlineParameter/LocalVarDeclarationInConstructor.java b/java/java-tests/testData/refactoring/inlineParameter/LocalVarDeclarationInConstructor.java
new file mode 100644
index 0000000..d1195e0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/LocalVarDeclarationInConstructor.java
@@ -0,0 +1,15 @@
+class Base {
+    public Base() {
+    }
+}
+
+class Inheritor extends Base {
+    public Inheritor(String b<caret>ar) {
+        super();
+        System.out.println(bar);
+    }
+
+    public static void main(String[] args) {
+        new Inheritor("bar".toString());
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineParameter/LocalVarDeclarationInConstructor.java.after b/java/java-tests/testData/refactoring/inlineParameter/LocalVarDeclarationInConstructor.java.after
new file mode 100644
index 0000000..e989fd0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/LocalVarDeclarationInConstructor.java.after
@@ -0,0 +1,16 @@
+class Base {
+    public Base() {
+    }
+}
+
+class Inheritor extends Base {
+    public Inheritor() {
+        super();
+        String bar = "bar".toString();
+        System.out.println(bar);
+    }
+
+    public static void main(String[] args) {
+        new Inheritor();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineParameter/NullValue.java b/java/java-tests/testData/refactoring/inlineParameter/NullValue.java
new file mode 100644
index 0000000..296ac2d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/NullValue.java
@@ -0,0 +1,13 @@
+public class A {
+  void test(int count, String <caret>s) {
+    String t = s;
+  }
+
+  void callTest() {
+    test(1, null);
+  }
+
+  void callTest2() {
+    test(2, null);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineParameter/NullValue.java.after b/java/java-tests/testData/refactoring/inlineParameter/NullValue.java.after
new file mode 100644
index 0000000..057abc4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/NullValue.java.after
@@ -0,0 +1,13 @@
+public class A {
+  void test(int count) {
+    String t = null;
+  }
+
+  void callTest() {
+    test(1);
+  }
+
+  void callTest2() {
+    test(2);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineParameter/ParameterDefWithWriteAccess.java b/java/java-tests/testData/refactoring/inlineParameter/ParameterDefWithWriteAccess.java
new file mode 100644
index 0000000..a9c5083
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/ParameterDefWithWriteAccess.java
@@ -0,0 +1,6 @@
+public class ExpData {
+  void foo(int i) {
+    i = 0;
+    System.out.println(<caret>i++);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/inlineParameter/ParameterWithWriteAccess.java b/java/java-tests/testData/refactoring/inlineParameter/ParameterWithWriteAccess.java
new file mode 100644
index 0000000..6894f1a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/ParameterWithWriteAccess.java
@@ -0,0 +1,10 @@
+class Clazz {
+    public Clazz(String b<caret>ar) {
+        bar = bar + bar;
+        System.out.println(bar);
+    }
+
+    public static void main(String[] args) {
+        new Clazz("bar");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineParameter/Ref2ConstantsWithTheSameValue.java b/java/java-tests/testData/refactoring/inlineParameter/Ref2ConstantsWithTheSameValue.java
new file mode 100644
index 0000000..1893d8c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/Ref2ConstantsWithTheSameValue.java
@@ -0,0 +1,18 @@
+public class Subject {
+  private int myInt;
+
+  public void wp(int <caret>p) {
+    myInt += p;
+  }
+}
+
+class User {
+  public static final int OUR_CONST = 2;
+  public static final int OUR_CONST2 = 2;
+
+  private void oper() {
+    Subject subj = new Subject();
+    subj.wp(OUR_CONST);
+    subj.wp(OUR_CONST2);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/inlineParameter/Ref2ConstantsWithTheSameValue.java.after b/java/java-tests/testData/refactoring/inlineParameter/Ref2ConstantsWithTheSameValue.java.after
new file mode 100644
index 0000000..692154d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/Ref2ConstantsWithTheSameValue.java.after
@@ -0,0 +1,18 @@
+public class Subject {
+  private int myInt;
+
+  public void wp() {
+    myInt += User.OUR_CONST;
+  }
+}
+
+class User {
+  public static final int OUR_CONST = 2;
+  public static final int OUR_CONST2 = 2;
+
+  private void oper() {
+    Subject subj = new Subject();
+    subj.wp();
+    subj.wp();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefArrayAccess.java b/java/java-tests/testData/refactoring/inlineParameter/RefArrayAccess.java
new file mode 100644
index 0000000..929fd27
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefArrayAccess.java
@@ -0,0 +1,16 @@
+public class Subject {
+  private int myInt;
+
+  public void withArray(int[] <caret>pia) {
+    myInt += pia[0];
+  }
+}
+
+class User {
+  private void oper() {
+    Subject subj = new Subject();
+    int[] ia = new int[]{0, 1};
+    ia[0] = 2;
+    subj.withArray(ia);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefCallerParameter.java b/java/java-tests/testData/refactoring/inlineParameter/RefCallerParameter.java
new file mode 100644
index 0000000..c2d8469
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefCallerParameter.java
@@ -0,0 +1,9 @@
+class Outer {
+  public void withClass(Object <caret>o) {
+    System.out.println(o.toString());
+  }
+
+  public void foor(Object objct) {
+    withClass(objct);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefCallerParameterInCallChain.java b/java/java-tests/testData/refactoring/inlineParameter/RefCallerParameterInCallChain.java
new file mode 100644
index 0000000..62dc4ce
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefCallerParameterInCallChain.java
@@ -0,0 +1,21 @@
+class Foo {
+    void f(boolean b) {
+        String project = project(b);
+        if (b) {
+            barrrr(project.substring(0));
+        } else {
+            if (true) {
+                barrrr(project.substring(0));
+            }
+        }
+
+    }
+
+    private void barrrr(String <caret>pProject) {
+        System.out.println(pProject);
+    }
+
+    String project (boolean b) {
+        return null;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefConstantAndField.java b/java/java-tests/testData/refactoring/inlineParameter/RefConstantAndField.java
new file mode 100644
index 0000000..bbe02f9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefConstantAndField.java
@@ -0,0 +1,18 @@
+public class Subject {
+  private int myInt;
+
+  public void wp(int <caret>p) {
+    myInt += p;
+  }
+}
+
+class User {
+  public static int ourStatic = 0;
+  public static final int OUR_CONST = 0;
+
+  private void oper() {
+    Subject subj = new Subject();
+    subj.wp(OUR_CONST);
+    subj.wp(ourStatic);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefFinalLocal.java b/java/java-tests/testData/refactoring/inlineParameter/RefFinalLocal.java
new file mode 100644
index 0000000..b65344f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefFinalLocal.java
@@ -0,0 +1,11 @@
+public class A {
+    void test(String s1, final String <caret>s2) {
+        System.out.println(s1);
+        System.out.println(s2);
+    }
+
+    void callTest() {
+        String s = "";
+        test(s, s);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefFinalLocal.java.after b/java/java-tests/testData/refactoring/inlineParameter/RefFinalLocal.java.after
new file mode 100644
index 0000000..672809f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefFinalLocal.java.after
@@ -0,0 +1,12 @@
+public class A {
+    void test(String s1) {
+        final String s2 = s1;
+        System.out.println(s1);
+        System.out.println(s2);
+    }
+
+    void callTest() {
+        String s = "";
+        test(s);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefFinalLocalInitializedWithMethod.java b/java/java-tests/testData/refactoring/inlineParameter/RefFinalLocalInitializedWithMethod.java
new file mode 100644
index 0000000..850bc95
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefFinalLocalInitializedWithMethod.java
@@ -0,0 +1,11 @@
+public class A {
+    void test(String s, int <caret>l) {
+        System.out.println(s);
+        System.out.println(l);
+    }
+
+    void callTest(String aString) {
+        final int len = aString.length();
+        test(aString, len);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefFinalLocalInitializedWithMethod.java.after b/java/java-tests/testData/refactoring/inlineParameter/RefFinalLocalInitializedWithMethod.java.after
new file mode 100644
index 0000000..604b4504
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefFinalLocalInitializedWithMethod.java.after
@@ -0,0 +1,10 @@
+public class A {
+    void test(String s) {
+        System.out.println(s);
+        System.out.println(s.length());
+    }
+
+    void callTest(String aString) {
+        test(aString);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefIdentical.java b/java/java-tests/testData/refactoring/inlineParameter/RefIdentical.java
new file mode 100644
index 0000000..e05e2e9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefIdentical.java
@@ -0,0 +1,11 @@
+public class A {
+    void test(String s1, String <caret>s2) {
+        System.out.println(s1);
+        System.out.println(s2);
+    }
+
+    void callTest() {
+        String s = "";
+        test(s, s);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefIdentical.java.after b/java/java-tests/testData/refactoring/inlineParameter/RefIdentical.java.after
new file mode 100644
index 0000000..5df0b98
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefIdentical.java.after
@@ -0,0 +1,12 @@
+public class A {
+    void test(String s1) {
+        String s2 = s1;
+        System.out.println(s1);
+        System.out.println(s2);
+    }
+
+    void callTest() {
+        String s = "";
+        test(s);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefIdenticalNoLocal.java b/java/java-tests/testData/refactoring/inlineParameter/RefIdenticalNoLocal.java
new file mode 100644
index 0000000..e05e2e9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefIdenticalNoLocal.java
@@ -0,0 +1,11 @@
+public class A {
+    void test(String s1, String <caret>s2) {
+        System.out.println(s1);
+        System.out.println(s2);
+    }
+
+    void callTest() {
+        String s = "";
+        test(s, s);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefIdenticalNoLocal.java.after b/java/java-tests/testData/refactoring/inlineParameter/RefIdenticalNoLocal.java.after
new file mode 100644
index 0000000..20d193a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefIdenticalNoLocal.java.after
@@ -0,0 +1,11 @@
+public class A {
+    void test(String s1) {
+        System.out.println(s1);
+        System.out.println(s1);
+    }
+
+    void callTest() {
+        String s = "";
+        test(s);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefLocalConstantInitializer.java b/java/java-tests/testData/refactoring/inlineParameter/RefLocalConstantInitializer.java
new file mode 100644
index 0000000..d4e8ec8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefLocalConstantInitializer.java
@@ -0,0 +1,12 @@
+public class A {
+    void test(String s1, String <caret>s2) {
+        System.out.println(s1);
+        System.out.println(s2);
+    }
+
+    void callTest() {
+        String s = "";
+        String t = "";
+        test(s, t);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefLocalConstantInitializer.java.after b/java/java-tests/testData/refactoring/inlineParameter/RefLocalConstantInitializer.java.after
new file mode 100644
index 0000000..b02ce08
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefLocalConstantInitializer.java.after
@@ -0,0 +1,11 @@
+public class A {
+    void test(String s1) {
+        System.out.println(s1);
+        System.out.println("");
+    }
+
+    void callTest() {
+        String s = "";
+        test(s);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefLocalWithLocal.java b/java/java-tests/testData/refactoring/inlineParameter/RefLocalWithLocal.java
new file mode 100644
index 0000000..c47ae37
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefLocalWithLocal.java
@@ -0,0 +1,12 @@
+public class A {
+    void test(String s1, String <caret>s2) {
+        System.out.println(s1);
+        System.out.println(s2);
+    }
+
+    void callTest() {
+        String s = "";
+        String t = s;
+        test(s, t);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefLocalWithLocal.java.after b/java/java-tests/testData/refactoring/inlineParameter/RefLocalWithLocal.java.after
new file mode 100644
index 0000000..20d193a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefLocalWithLocal.java.after
@@ -0,0 +1,11 @@
+public class A {
+    void test(String s1) {
+        System.out.println(s1);
+        System.out.println(s1);
+    }
+
+    void callTest() {
+        String s = "";
+        test(s);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefMethod.java b/java/java-tests/testData/refactoring/inlineParameter/RefMethod.java
new file mode 100644
index 0000000..6fdedff
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefMethod.java
@@ -0,0 +1,13 @@
+public class A {
+    void test(String <caret>s) {
+        System.out.println(s);
+    }
+
+    void callTest() {
+        test(myMethod());
+    }
+
+    String myMethod() {
+        return "";
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefMethod.java.after b/java/java-tests/testData/refactoring/inlineParameter/RefMethod.java.after
new file mode 100644
index 0000000..e95fe5b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefMethod.java.after
@@ -0,0 +1,14 @@
+public class A {
+    void test() {
+        String s = myMethod();
+        System.out.println(s);
+    }
+
+    void callTest() {
+        test();
+    }
+
+    String myMethod() {
+        return "";
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefMethodOnLocal.java b/java/java-tests/testData/refactoring/inlineParameter/RefMethodOnLocal.java
new file mode 100644
index 0000000..9d7ea36
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefMethodOnLocal.java
@@ -0,0 +1,11 @@
+public class A {
+    void test(String s, int <caret>l) {
+        System.out.println(s);
+        System.out.println(l);
+    }
+
+    void callTest() {
+        String aString = "abc";
+        test(aString, aString.length());
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefMethodOnLocal.java.after b/java/java-tests/testData/refactoring/inlineParameter/RefMethodOnLocal.java.after
new file mode 100644
index 0000000..cdbfca9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefMethodOnLocal.java.after
@@ -0,0 +1,11 @@
+public class A {
+    void test(String s) {
+        System.out.println(s);
+        System.out.println(s.length());
+    }
+
+    void callTest() {
+        String aString = "abc";
+        test(aString);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefNewInner.java b/java/java-tests/testData/refactoring/inlineParameter/RefNewInner.java
new file mode 100644
index 0000000..8b52ea1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefNewInner.java
@@ -0,0 +1,17 @@
+public class Subject {
+  private int myInt;
+
+  public void withClass(Object <caret>o) {
+    myInt += o.hashCode();
+  }
+}
+
+class User {
+  private void oper() throws IOException {
+    Subject subj = new Subject();
+    subj.withClass(new Local());
+  }
+
+  private class Local {
+  }
+}
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefNewInnerAvailable.java b/java/java-tests/testData/refactoring/inlineParameter/RefNewInnerAvailable.java
new file mode 100644
index 0000000..ebac975
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefNewInnerAvailable.java
@@ -0,0 +1,17 @@
+public class Subject {
+  private int myInt;
+
+  public void withClass(Object <caret>o) {
+    myInt += o.hashCode();
+  }
+}
+
+class User {
+  private void oper() throws IOException {
+    Subject subj = new Subject();
+    subj.withClass(new Local());
+  }
+
+  class Local {
+  }
+}
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefNewInnerAvailable.java.after b/java/java-tests/testData/refactoring/inlineParameter/RefNewInnerAvailable.java.after
new file mode 100644
index 0000000..f944cca
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefNewInnerAvailable.java.after
@@ -0,0 +1,17 @@
+public class Subject {
+  private int myInt;
+
+  public void withClass() {
+    myInt += new User.Local().hashCode();
+  }
+}
+
+class User {
+  private void oper() throws IOException {
+    Subject subj = new Subject();
+    subj.withClass();
+  }
+
+  class Local {
+  }
+}
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefNewInnerForMethod.java b/java/java-tests/testData/refactoring/inlineParameter/RefNewInnerForMethod.java
new file mode 100644
index 0000000..6ec3664
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefNewInnerForMethod.java
@@ -0,0 +1,21 @@
+public class Subject {
+    private int myInt;
+
+    public void withClass(Object <caret>o) {
+        myInt += o.hashCode();
+    }
+
+    class User {
+        private void oper() throws IOException {
+            Subject subj = new Subject();
+
+            subj.withClass(new Local());
+        }
+
+
+    }
+
+    class Local {
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefNewInnerForMethod.java.after b/java/java-tests/testData/refactoring/inlineParameter/RefNewInnerForMethod.java.after
new file mode 100644
index 0000000..e1f8917
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefNewInnerForMethod.java.after
@@ -0,0 +1,21 @@
+public class Subject {
+    private int myInt;
+
+    public void withClass() {
+        myInt += new Local().hashCode();
+    }
+
+    class User {
+        private void oper() throws IOException {
+            Subject subj = new Subject();
+
+            subj.withClass();
+        }
+
+
+    }
+
+    class Local {
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefNewInnerFromMethod.java b/java/java-tests/testData/refactoring/inlineParameter/RefNewInnerFromMethod.java
new file mode 100644
index 0000000..f3f66cb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefNewInnerFromMethod.java
@@ -0,0 +1,16 @@
+public class Subject {
+    private int myInt;
+
+    public void withClass(Object <caret>o) {
+        myInt += o.hashCode();
+    }
+
+    private void oper() throws IOException {
+      Subject subj = new Subject();
+      class Local {
+      }
+      subj.withClass(new Local());
+    }
+
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefNewInnerInHierarchyAvailable.java b/java/java-tests/testData/refactoring/inlineParameter/RefNewInnerInHierarchyAvailable.java
new file mode 100644
index 0000000..0fbc2b3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefNewInnerInHierarchyAvailable.java
@@ -0,0 +1,18 @@
+public class Subject {
+  private int myInt;
+
+  public void withClass(Object <caret>o) {
+    myInt += o.hashCode();
+  }
+}
+
+class User {
+  private void oper() throws IOException {
+    Subject subj = new Subject();
+    subj.withClass(new Local().new InnerLocal());
+  }
+
+  class Local {
+    class InnerLocal {}
+  }
+}
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefNewInnerInHierarchyAvailable.java.after b/java/java-tests/testData/refactoring/inlineParameter/RefNewInnerInHierarchyAvailable.java.after
new file mode 100644
index 0000000..6124750
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefNewInnerInHierarchyAvailable.java.after
@@ -0,0 +1,18 @@
+public class Subject {
+  private int myInt;
+
+  public void withClass() {
+    myInt += new User.Local().new InnerLocal().hashCode();
+  }
+}
+
+class User {
+  private void oper() throws IOException {
+    Subject subj = new Subject();
+    subj.withClass();
+  }
+
+  class Local {
+    class InnerLocal {}
+  }
+}
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefNewLocal.java b/java/java-tests/testData/refactoring/inlineParameter/RefNewLocal.java
new file mode 100644
index 0000000..3948972
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefNewLocal.java
@@ -0,0 +1,18 @@
+public class Subject {
+  private int myInt;
+
+  public void withClass(Object <caret>o) {
+    myInt += o.hashCode();
+  }
+}
+
+class User {
+  private void oper() throws IOException {
+    Subject subj = new Subject();
+    class Local {
+    }
+    subj.withClass(new Local());
+  }
+
+
+}
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefNewTopLevel.java b/java/java-tests/testData/refactoring/inlineParameter/RefNewTopLevel.java
new file mode 100644
index 0000000..c5212b2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefNewTopLevel.java
@@ -0,0 +1,16 @@
+public class Subject {
+  private int myInt;
+
+  public void withClass(Object <caret>o) {
+    myInt += o.hashCode();
+  }
+}
+
+class User {
+  private void oper() throws IOException {
+    Subject subj = new Subject();
+    subj.withClass(new TopLevel());
+  }
+}
+
+class TopLevel {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefNewTopLevel.java.after b/java/java-tests/testData/refactoring/inlineParameter/RefNewTopLevel.java.after
new file mode 100644
index 0000000..82bcacc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefNewTopLevel.java.after
@@ -0,0 +1,16 @@
+public class Subject {
+  private int myInt;
+
+  public void withClass() {
+    myInt += new TopLevel().hashCode();
+  }
+}
+
+class User {
+  private void oper() throws IOException {
+    Subject subj = new Subject();
+    subj.withClass();
+  }
+}
+
+class TopLevel {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefNonStatic.java b/java/java-tests/testData/refactoring/inlineParameter/RefNonStatic.java
new file mode 100644
index 0000000..5097b6c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefNonStatic.java
@@ -0,0 +1,18 @@
+public class ExpData {
+
+  private Object provideObject() {
+    return new Object();
+  }
+
+  public static void useStatic(Object p) {
+    System.out.println(p);
+  }
+
+  public void context() {
+    inlineE(provideObject());
+  }
+
+  public static void inlineE(Object <caret>subj) {
+    useStatic(subj);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefNonStaticClass.java b/java/java-tests/testData/refactoring/inlineParameter/RefNonStaticClass.java
new file mode 100644
index 0000000..50bf51f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefNonStaticClass.java
@@ -0,0 +1,20 @@
+public class ExpData {
+
+  private Object provideObject() {
+    return new Object();
+  }
+
+  public static void useStatic(Object p) {
+    System.out.println(p);
+  }
+
+  public void context() {
+    inlineE(new DD());
+  }
+
+  public static void inlineE(Object <caret>subj) {
+    useStatic(subj);
+  }
+
+  class DD {}
+}
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefOuterThis.java b/java/java-tests/testData/refactoring/inlineParameter/RefOuterThis.java
new file mode 100644
index 0000000..e3ef672
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefOuterThis.java
@@ -0,0 +1,14 @@
+public class Subject {
+  private int myInt;
+
+  public void withClass(Object <caret>o) {
+    myInt += o.hashCode();
+  }
+}
+
+class User {
+  private void oper() {
+    Subject subj = new Subject();
+    subj.withClass(this);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefQualifiedThis.java b/java/java-tests/testData/refactoring/inlineParameter/RefQualifiedThis.java
new file mode 100644
index 0000000..108aa6a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefQualifiedThis.java
@@ -0,0 +1,14 @@
+class Outer {
+  class User {
+    public class Subject {
+      public void withClass(Object <caret>o) {
+        System.out.println(o.toString());
+      }
+    }
+
+    private void oper() {
+      Subject subj = new Subject();
+      subj.withClass(Outer.this);
+    }
+  }
+}
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefQualifiedThis.java.after b/java/java-tests/testData/refactoring/inlineParameter/RefQualifiedThis.java.after
new file mode 100644
index 0000000..be2095d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefQualifiedThis.java.after
@@ -0,0 +1,14 @@
+class Outer {
+  class User {
+    public class Subject {
+      public void withClass() {
+        System.out.println(Outer.this.toString());
+      }
+    }
+
+    private void oper() {
+      Subject subj = new Subject();
+      subj.withClass();
+    }
+  }
+}
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefSameNonFinalField.java b/java/java-tests/testData/refactoring/inlineParameter/RefSameNonFinalField.java
new file mode 100644
index 0000000..6a8a8a1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefSameNonFinalField.java
@@ -0,0 +1,13 @@
+public class Subject {
+  private int myInt;
+  private int t;
+
+  public void wp(int <caret>p) {
+    myInt += p;
+  }
+
+  void foo() {
+      wp(t);
+      wp(t);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefSameNonFinalField.java.after b/java/java-tests/testData/refactoring/inlineParameter/RefSameNonFinalField.java.after
new file mode 100644
index 0000000..55b393e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefSameNonFinalField.java.after
@@ -0,0 +1,13 @@
+public class Subject {
+  private int myInt;
+  private int t;
+
+  public void wp() {
+    myInt += t;
+  }
+
+  void foo() {
+      wp();
+      wp();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefSameNonFinalFieldOtherObject.java b/java/java-tests/testData/refactoring/inlineParameter/RefSameNonFinalFieldOtherObject.java
new file mode 100644
index 0000000..c31fb7e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefSameNonFinalFieldOtherObject.java
@@ -0,0 +1,13 @@
+public class Subject {
+  private int myInt;
+  private int t;
+
+  public void wp(int <caret>p) {
+    myInt += p;
+  }
+
+  void foo(Subject s) {
+      wp(s.t);
+      wp(t);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefSelfField.java b/java/java-tests/testData/refactoring/inlineParameter/RefSelfField.java
new file mode 100644
index 0000000..208cfe0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefSelfField.java
@@ -0,0 +1,19 @@
+public class A {
+    private final String myData;
+
+    public A(String someData) {
+        myData = someData;
+    }
+
+    void test(String <caret>data) {
+        System.out.println(data);
+    }
+
+    void callTest() {
+        test(myData);        
+    }
+
+    void alsoCallTest() {
+        test(myData);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefSelfField.java.after b/java/java-tests/testData/refactoring/inlineParameter/RefSelfField.java.after
new file mode 100644
index 0000000..a9d84b8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefSelfField.java.after
@@ -0,0 +1,19 @@
+public class A {
+    private final String myData;
+
+    public A(String someData) {
+        myData = someData;
+    }
+
+    void test() {
+        System.out.println(myData);
+    }
+
+    void callTest() {
+        test();        
+    }
+
+    void alsoCallTest() {
+        test();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefStaticField.java b/java/java-tests/testData/refactoring/inlineParameter/RefStaticField.java
new file mode 100644
index 0000000..8ebb6f6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefStaticField.java
@@ -0,0 +1,13 @@
+public class A {
+    void test(String <caret>s) {
+        System.out.println(s);
+    }
+
+    void callTest() {
+        test(B.f);
+    }
+}
+
+class B {
+    public static String f = null;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefStaticField.java.after b/java/java-tests/testData/refactoring/inlineParameter/RefStaticField.java.after
new file mode 100644
index 0000000..2144d3f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefStaticField.java.after
@@ -0,0 +1,14 @@
+public class A {
+    void test() {
+        String s = B.f;
+        System.out.println(s);
+    }
+
+    void callTest() {
+        test();
+    }
+}
+
+class B {
+    public static String f = null;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefStaticMethod.java b/java/java-tests/testData/refactoring/inlineParameter/RefStaticMethod.java
new file mode 100644
index 0000000..429fa3b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefStaticMethod.java
@@ -0,0 +1,16 @@
+public class StaticRefMove {
+  public static int init() {
+    return 1;
+  }
+
+  public void context() {
+    StaticRefMoveSubject v = new StaticRefMoveSubject();
+    v.subject(init());
+  }
+}
+
+class StaticRefMoveSubject {
+  public void subject(int <caret>subj) {
+    System.out.println(subj);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefStaticMethod.java.after b/java/java-tests/testData/refactoring/inlineParameter/RefStaticMethod.java.after
new file mode 100644
index 0000000..6f076e7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefStaticMethod.java.after
@@ -0,0 +1,17 @@
+public class StaticRefMove {
+  public static int init() {
+    return 1;
+  }
+
+  public void context() {
+    StaticRefMoveSubject v = new StaticRefMoveSubject();
+    v.subject();
+  }
+}
+
+class StaticRefMoveSubject {
+  public void subject() {
+      int subj = StaticRefMove.init();
+      System.out.println(subj);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefThis.java b/java/java-tests/testData/refactoring/inlineParameter/RefThis.java
new file mode 100644
index 0000000..99dcac6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefThis.java
@@ -0,0 +1,15 @@
+class User {
+  public class Subject {
+    private int myInt;
+
+    public void withClass(Object <caret>o) {
+      myInt += o.hashCode();
+    }
+  }
+
+  private void oper() {
+    Subject subj = new Subject();
+    subj.withClass(this);
+  }
+}
+
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefThis.java.after b/java/java-tests/testData/refactoring/inlineParameter/RefThis.java.after
new file mode 100644
index 0000000..80e9366
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefThis.java.after
@@ -0,0 +1,15 @@
+class User {
+  public class Subject {
+    private int myInt;
+
+    public void withClass() {
+      myInt += User.this.hashCode();
+    }
+  }
+
+  private void oper() {
+    Subject subj = new Subject();
+    subj.withClass();
+  }
+}
+
diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefThisFromStatic.java b/java/java-tests/testData/refactoring/inlineParameter/RefThisFromStatic.java
new file mode 100644
index 0000000..acc93cc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/RefThisFromStatic.java
@@ -0,0 +1,18 @@
+public class ExpData {
+
+  private Object provideObject() {
+    return new Object();
+  }
+
+  public static void useStatic(Object p) {
+    System.out.println(p);
+  }
+
+  public void context() {
+    inlineE(this);
+  }
+
+  public static void inlineE(Object <caret>subj) {
+    useStatic(subj);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/inlineParameter/SameValue.java b/java/java-tests/testData/refactoring/inlineParameter/SameValue.java
new file mode 100644
index 0000000..3748e90
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/SameValue.java
@@ -0,0 +1,9 @@
+public class A {
+  void test(int <caret>i) {
+    int j = i;
+  }
+
+  void callTest() {
+    test(0);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineParameter/SameValue.java.after b/java/java-tests/testData/refactoring/inlineParameter/SameValue.java.after
new file mode 100644
index 0000000..b08d199
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/SameValue.java.after
@@ -0,0 +1,9 @@
+public class A {
+  void test() {
+    int j = 0;
+  }
+
+  void callTest() {
+    test();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineParameter/StaticFinalField.java b/java/java-tests/testData/refactoring/inlineParameter/StaticFinalField.java
new file mode 100644
index 0000000..1020f04
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/StaticFinalField.java
@@ -0,0 +1,15 @@
+public class A {
+  void test(String[] <caret>value) {
+    String[] myValue = value;
+  }
+
+  void callTest() {
+    test(CONST);
+  }
+
+  void callTest2() {
+    test(CONST);
+  }
+
+  public static final String[] CONST = new String[] { "A", "B" };
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineParameter/StaticFinalField.java.after b/java/java-tests/testData/refactoring/inlineParameter/StaticFinalField.java.after
new file mode 100644
index 0000000..2e5e668
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/StaticFinalField.java.after
@@ -0,0 +1,15 @@
+public class A {
+  void test() {
+    String[] myValue = CONST;
+  }
+
+  void callTest() {
+    test();
+  }
+
+  void callTest2() {
+    test();
+  }
+
+  public static final String[] CONST = new String[] { "A", "B" };
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineParameter/Visibility.java b/java/java-tests/testData/refactoring/inlineParameter/Visibility.java
new file mode 100644
index 0000000..9bca9dc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/Visibility.java
@@ -0,0 +1,24 @@
+public class VisibilityPinline {
+    private static DifferentScope cashedObject = new DifferentScope();
+
+    private static DifferentScope provideObject() {
+        return new DifferentScope();
+    }
+
+    public void context() {
+        DifferentScope vB = new DifferentScope();
+        vB.inlineB(provideObject());
+    }
+}
+
+class DifferentScope {
+    private int value = 1;
+
+    public void mutate() {
+        value++;
+    }
+
+    public void inlineB(DifferentScope <caret>subj) {
+        subj.mutate();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineParameter/WriteAccess.java b/java/java-tests/testData/refactoring/inlineParameter/WriteAccess.java
new file mode 100644
index 0000000..92d3e29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineParameter/WriteAccess.java
@@ -0,0 +1,31 @@
+public class ExpData {
+  public void use(Object p) {
+    System.out.println(p);
+  }
+
+  public void context() {
+    ObjectType v1 = new ObjectType();
+    v1 = v1.provide();
+    inline1(v1);
+
+    int v2 = 1;
+    v2 += System.identityHashCode(new Object());
+    inline2(v2);
+  }
+
+  public void inline1(ObjectType <caret>subj) {
+    use(subj);
+  }
+
+  public void inline2(int subj) {
+    use(subj);
+  }
+}
+
+class ObjectType {
+  private int value = 1;
+
+  public ObjectType provide() {
+    return new ObjectType();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/abstractOverrides/after/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/abstractOverrides/after/Test.java
new file mode 100644
index 0000000..bc38d60
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/abstractOverrides/after/Test.java
@@ -0,0 +1,7 @@
+class Test {
+  public void context() {
+    method();
+  }
+
+  public void method() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/abstractOverrides/before/Super.java b/java/java-tests/testData/refactoring/inlineSuperClass/abstractOverrides/before/Super.java
new file mode 100644
index 0000000..3e91df2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/abstractOverrides/before/Super.java
@@ -0,0 +1,3 @@
+abstract class Super {
+   public abstract void method() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/abstractOverrides/before/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/abstractOverrides/before/Test.java
new file mode 100644
index 0000000..2b8fb60
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/abstractOverrides/before/Test.java
@@ -0,0 +1,8 @@
+class Test extends Super{
+  public void context() {
+    super.method();
+  }
+
+  @Override
+  public void method() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/childConstructorImplicitlyCallsSuper/after/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/childConstructorImplicitlyCallsSuper/after/Test.java
new file mode 100644
index 0000000..2373b7c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/childConstructorImplicitlyCallsSuper/after/Test.java
@@ -0,0 +1,6 @@
+class Test {
+   Test() {
+       System.out.println("Super");
+       System.out.println("Test");
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/childConstructorImplicitlyCallsSuper/before/Super.java b/java/java-tests/testData/refactoring/inlineSuperClass/childConstructorImplicitlyCallsSuper/before/Super.java
new file mode 100644
index 0000000..b72e7b5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/childConstructorImplicitlyCallsSuper/before/Super.java
@@ -0,0 +1,5 @@
+class Super {
+  Super() {
+    System.out.println("Super");
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/childConstructorImplicitlyCallsSuper/before/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/childConstructorImplicitlyCallsSuper/before/Test.java
new file mode 100644
index 0000000..27b95120
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/childConstructorImplicitlyCallsSuper/before/Test.java
@@ -0,0 +1,5 @@
+class Test extends Super{
+   Test() {
+     System.out.println("Test");
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/conflictConstructors/after/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/conflictConstructors/after/Test.java
new file mode 100644
index 0000000..71d6fec
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/conflictConstructors/after/Test.java
@@ -0,0 +1,8 @@
+class Test {
+    void foo() {
+      Test s = new Test();
+      s.bar();
+    }
+
+    void bar() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/conflictConstructors/before/Super.java b/java/java-tests/testData/refactoring/inlineSuperClass/conflictConstructors/before/Super.java
new file mode 100644
index 0000000..79a11c3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/conflictConstructors/before/Super.java
@@ -0,0 +1,8 @@
+class Super {
+  void foo() {
+    Super s = new Super();
+    s.bar();
+  }
+
+  void bar() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/conflictConstructors/before/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/conflictConstructors/before/Test.java
new file mode 100644
index 0000000..39d1a7f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/conflictConstructors/before/Test.java
@@ -0,0 +1,3 @@
+class Test extends Super{
+  Test(String s){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/conflictGenerics/after/Usage.java b/java/java-tests/testData/refactoring/inlineSuperClass/conflictGenerics/after/Usage.java
new file mode 100644
index 0000000..0586fab
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/conflictGenerics/after/Usage.java
@@ -0,0 +1,7 @@
+import p.Test;
+
+class Usage {
+  void bar(Test s) {
+    s.foo(null);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/conflictGenerics/after/p/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/conflictGenerics/after/p/Test.java
new file mode 100644
index 0000000..a43b8e6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/conflictGenerics/after/p/Test.java
@@ -0,0 +1,7 @@
+package p;
+
+public class Test {
+    public void foo(String t) {
+      System.out.println("Hello");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/conflictGenerics/after/p1/t.txt b/java/java-tests/testData/refactoring/inlineSuperClass/conflictGenerics/after/p1/t.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/conflictGenerics/after/p1/t.txt
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/conflictGenerics/before/Usage.java b/java/java-tests/testData/refactoring/inlineSuperClass/conflictGenerics/before/Usage.java
new file mode 100644
index 0000000..5960404
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/conflictGenerics/before/Usage.java
@@ -0,0 +1,6 @@
+import p1.*;
+class Usage {
+  void bar(Super<Integer> s) {
+    s.foo(null);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/conflictGenerics/before/p/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/conflictGenerics/before/p/Test.java
new file mode 100644
index 0000000..25c8c0f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/conflictGenerics/before/p/Test.java
@@ -0,0 +1,3 @@
+package p;
+import p1.*;
+public class Test extends Super<String> {} 
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/conflictGenerics/before/p1/Super.java b/java/java-tests/testData/refactoring/inlineSuperClass/conflictGenerics/before/p1/Super.java
new file mode 100644
index 0000000..c580a00
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/conflictGenerics/before/p1/Super.java
@@ -0,0 +1,6 @@
+package p1;
+public class Super<T>{
+   public void foo(T t) {
+     System.out.println("Hello");
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/conflictGenerics/before/p1/t.txt b/java/java-tests/testData/refactoring/inlineSuperClass/conflictGenerics/before/p1/t.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/conflictGenerics/before/p1/t.txt
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/conflictMultipleConstructors/after/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/conflictMultipleConstructors/after/Test.java
new file mode 100644
index 0000000..72456b5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/conflictMultipleConstructors/after/Test.java
@@ -0,0 +1,10 @@
+class Test {
+  Test(String s, String s1){super(s);}
+
+    void foo() {
+      Test s = new Test("");
+      s.bar();
+    }
+
+    void bar() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/conflictMultipleConstructors/before/Super.java b/java/java-tests/testData/refactoring/inlineSuperClass/conflictMultipleConstructors/before/Super.java
new file mode 100644
index 0000000..487337f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/conflictMultipleConstructors/before/Super.java
@@ -0,0 +1,10 @@
+class Super {
+  Super(String s){}
+
+  void foo() {
+    Super s = new Super("");
+    s.bar();
+  }
+
+  void bar() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/conflictMultipleConstructors/before/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/conflictMultipleConstructors/before/Test.java
new file mode 100644
index 0000000..f3e2f5d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/conflictMultipleConstructors/before/Test.java
@@ -0,0 +1,3 @@
+class Test extends Super{
+  Test(String s, String s1){super(s);}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/generics/after/Usage.java b/java/java-tests/testData/refactoring/inlineSuperClass/generics/after/Usage.java
new file mode 100644
index 0000000..9549698
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/generics/after/Usage.java
@@ -0,0 +1,19 @@
+import p.Test;
+
+class Usage {
+  Test<String> myField;
+
+  Test<String> xxx(){
+    return myField;
+  }
+
+  Test<Integer> xxxxx() {
+    return null;
+  }
+
+  void bar(Test<String> s) {
+    s.foo(null);
+  }
+
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/generics/after/p/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/generics/after/p/Test.java
new file mode 100644
index 0000000..aff01e9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/generics/after/p/Test.java
@@ -0,0 +1,7 @@
+package p;
+
+public class Test<R> {
+    public void foo(R t) {
+      System.out.println("Hello");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/generics/after/p1/t.txt b/java/java-tests/testData/refactoring/inlineSuperClass/generics/after/p1/t.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/generics/after/p1/t.txt
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/generics/before/Usage.java b/java/java-tests/testData/refactoring/inlineSuperClass/generics/before/Usage.java
new file mode 100644
index 0000000..1f63bdf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/generics/before/Usage.java
@@ -0,0 +1,18 @@
+import p1.*;
+class Usage {
+  Super<String> myField;
+
+  Super<String> xxx(){
+    return myField;
+  }
+
+  Super<Integer> xxxxx() {
+    return null;
+  }
+
+  void bar(Super<String> s) {
+    s.foo(null);
+  }
+
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/generics/before/p/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/generics/before/p/Test.java
new file mode 100644
index 0000000..8f27e91
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/generics/before/p/Test.java
@@ -0,0 +1,3 @@
+package p;
+import p1.*;
+public class Test<R> extends Super<R> {} 
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/generics/before/p1/Super.java b/java/java-tests/testData/refactoring/inlineSuperClass/generics/before/p1/Super.java
new file mode 100644
index 0000000..c580a00
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/generics/before/p1/Super.java
@@ -0,0 +1,6 @@
+package p1;
+public class Super<T>{
+   public void foo(T t) {
+     System.out.println("Hello");
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/generics/before/p1/t.txt b/java/java-tests/testData/refactoring/inlineSuperClass/generics/before/p1/t.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/generics/before/p1/t.txt
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/implicitChildConstructor/after/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/implicitChildConstructor/after/Test.java
new file mode 100644
index 0000000..ffa7a10
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/implicitChildConstructor/after/Test.java
@@ -0,0 +1,5 @@
+class Test {
+  void foo() {
+    Test s = new Test();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/implicitChildConstructor/before/Super.java b/java/java-tests/testData/refactoring/inlineSuperClass/implicitChildConstructor/before/Super.java
new file mode 100644
index 0000000..3bb06af
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/implicitChildConstructor/before/Super.java
@@ -0,0 +1,3 @@
+class Super {
+  Super(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/implicitChildConstructor/before/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/implicitChildConstructor/before/Test.java
new file mode 100644
index 0000000..da3346d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/implicitChildConstructor/before/Test.java
@@ -0,0 +1,5 @@
+class Test extends Super{
+  void foo() {
+    Super s = new Super();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/imports/after/p/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/imports/after/p/Test.java
new file mode 100644
index 0000000..9bc4d88
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/imports/after/p/Test.java
@@ -0,0 +1,7 @@
+package p;
+
+public class Test {
+    public void foo() {
+      System.out.println("Hello");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/imports/after/p1/Usage.java b/java/java-tests/testData/refactoring/inlineSuperClass/imports/after/p1/Usage.java
new file mode 100644
index 0000000..70b1dcb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/imports/after/p1/Usage.java
@@ -0,0 +1,9 @@
+package p1;
+
+import p.Test;
+
+class Usage {
+  void bar(Test s) {
+    s.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/imports/before/p/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/imports/before/p/Test.java
new file mode 100644
index 0000000..9bd48d2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/imports/before/p/Test.java
@@ -0,0 +1,3 @@
+package p;
+import p1.*;
+public class Test extends Super {} 
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/imports/before/p1/Super.java b/java/java-tests/testData/refactoring/inlineSuperClass/imports/before/p1/Super.java
new file mode 100644
index 0000000..1c2aacf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/imports/before/p1/Super.java
@@ -0,0 +1,6 @@
+package p1;
+public class Super {
+   public void foo() {
+     System.out.println("Hello");
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/imports/before/p1/Usage.java b/java/java-tests/testData/refactoring/inlineSuperClass/imports/before/p1/Usage.java
new file mode 100644
index 0000000..8c7f6ae
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/imports/before/p1/Usage.java
@@ -0,0 +1,6 @@
+package p1;
+class Usage {
+  void bar(Super s) {
+    s.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/inlineSuperclassExtendsList/after/Super.java b/java/java-tests/testData/refactoring/inlineSuperClass/inlineSuperclassExtendsList/after/Super.java
new file mode 100644
index 0000000..ffe4e52
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/inlineSuperclassExtendsList/after/Super.java
@@ -0,0 +1,5 @@
+
+interface Int {}
+
+class Dummy {}
+
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/inlineSuperclassExtendsList/after/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/inlineSuperclassExtendsList/after/Test.java
new file mode 100644
index 0000000..5204dee
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/inlineSuperclassExtendsList/after/Test.java
@@ -0,0 +1,11 @@
+class Test extends Dummy implements Int {
+  Test(){}
+
+    public void main() {}
+}
+
+class U {
+    public static void main(String[] args) {
+       new Test().main();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/inlineSuperclassExtendsList/before/Super.java b/java/java-tests/testData/refactoring/inlineSuperClass/inlineSuperclassExtendsList/before/Super.java
new file mode 100644
index 0000000..4cd4a5a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/inlineSuperclassExtendsList/before/Super.java
@@ -0,0 +1,9 @@
+
+interface Int {}
+
+class Dummy {}
+
+public class Super extends Dummy implements Int {
+    public void main() {}
+}
+
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/inlineSuperclassExtendsList/before/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/inlineSuperclassExtendsList/before/Test.java
new file mode 100644
index 0000000..c1f4e72
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/inlineSuperclassExtendsList/before/Test.java
@@ -0,0 +1,9 @@
+class Test extends Super{
+  Test(){}
+}
+
+class U {
+    public static void main(String[] args) {
+       new Test().main();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/innerclassReference/after/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/innerclassReference/after/Test.java
new file mode 100644
index 0000000..a1cb4a0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/innerclassReference/after/Test.java
@@ -0,0 +1,15 @@
+class Test {
+   public void contextChild() {
+      StInner inner1 = new StInner();
+      Test.InstInner inner2 = this.new InstInner();
+   }
+
+    void foo() {
+       StInner inner1 = new StInner();
+       Test.InstInner inner2 = this.new InstInner();
+    }
+
+    public static class StInner {}
+
+    public class InstInner {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/innerclassReference/before/Super.java b/java/java-tests/testData/refactoring/inlineSuperClass/innerclassReference/before/Super.java
new file mode 100644
index 0000000..59bec82
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/innerclassReference/before/Super.java
@@ -0,0 +1,9 @@
+class Super {
+      public static class StInner {}
+      public class InstInner {}
+
+      void foo() {
+         Super.StInner inner1 = new Super.StInner();
+         Super.InstInner inner2 = this.new InstInner();
+      }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/innerclassReference/before/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/innerclassReference/before/Test.java
new file mode 100644
index 0000000..77ee3a9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/innerclassReference/before/Test.java
@@ -0,0 +1,6 @@
+class Test extends Super{
+   public void contextChild() {
+      Super.StInner inner1 = new Super.StInner();
+      Super.InstInner inner2 = this.new InstInner();
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/interfaceHierarchyWithSubstitution/after/Super.java b/java/java-tests/testData/refactoring/inlineSuperClass/interfaceHierarchyWithSubstitution/after/Super.java
new file mode 100644
index 0000000..f0c2064
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/interfaceHierarchyWithSubstitution/after/Super.java
@@ -0,0 +1,2 @@
+interface Int<T> {
+}
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/interfaceHierarchyWithSubstitution/after/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/interfaceHierarchyWithSubstitution/after/Test.java
new file mode 100644
index 0000000..32dd190
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/interfaceHierarchyWithSubstitution/after/Test.java
@@ -0,0 +1,2 @@
+interface Test<T> extends Int<T> {
+}
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/interfaceHierarchyWithSubstitution/before/Super.java b/java/java-tests/testData/refactoring/inlineSuperClass/interfaceHierarchyWithSubstitution/before/Super.java
new file mode 100644
index 0000000..35f2238
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/interfaceHierarchyWithSubstitution/before/Super.java
@@ -0,0 +1,4 @@
+interface Super<T> extends Int<T> {
+}
+interface Int<T> {
+}
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/interfaceHierarchyWithSubstitution/before/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/interfaceHierarchyWithSubstitution/before/Test.java
new file mode 100644
index 0000000..2eeeb5d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/interfaceHierarchyWithSubstitution/before/Test.java
@@ -0,0 +1,2 @@
+interface Test<T> extends Super<T>{
+}
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/multipleConstructors/after/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/multipleConstructors/after/Test.java
new file mode 100644
index 0000000..798a7f2e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/multipleConstructors/after/Test.java
@@ -0,0 +1,11 @@
+class Test {
+  Test(String s){
+  }
+
+    void foo() {
+      Test s = new Test("");
+      s.bar();
+    }
+
+    void bar() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/multipleConstructors/before/Super.java b/java/java-tests/testData/refactoring/inlineSuperClass/multipleConstructors/before/Super.java
new file mode 100644
index 0000000..487337f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/multipleConstructors/before/Super.java
@@ -0,0 +1,10 @@
+class Super {
+  Super(String s){}
+
+  void foo() {
+    Super s = new Super("");
+    s.bar();
+  }
+
+  void bar() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/multipleConstructors/before/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/multipleConstructors/before/Test.java
new file mode 100644
index 0000000..aa49954
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/multipleConstructors/before/Test.java
@@ -0,0 +1,3 @@
+class Test extends Super{
+  Test(String s){super(s);}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubclasses/after/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubclasses/after/Test.java
new file mode 100644
index 0000000..88710e5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubclasses/after/Test.java
@@ -0,0 +1,7 @@
+class Test {
+  public void context() {
+    method();
+  }
+
+    public void method() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubclasses/after/Test1.java b/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubclasses/after/Test1.java
new file mode 100644
index 0000000..b231b9e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubclasses/after/Test1.java
@@ -0,0 +1,7 @@
+class Test1 {
+  public void context() {
+    method();
+  }
+
+    public void method() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubclasses/before/Super.java b/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubclasses/before/Super.java
new file mode 100644
index 0000000..fb0359a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubclasses/before/Super.java
@@ -0,0 +1,3 @@
+class Super {
+   public void method() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubclasses/before/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubclasses/before/Test.java
new file mode 100644
index 0000000..c81b720
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubclasses/before/Test.java
@@ -0,0 +1,5 @@
+class Test extends Super{
+  public void context() {
+    super.method();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubclasses/before/Test1.java b/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubclasses/before/Test1.java
new file mode 100644
index 0000000..e2b67a7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubclasses/before/Test1.java
@@ -0,0 +1,5 @@
+class Test1 extends Super{
+  public void context() {
+    super.method();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubclassesInheritsOneBaseBase/after/ISuper.java b/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubclassesInheritsOneBaseBase/after/ISuper.java
new file mode 100644
index 0000000..42f94cf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubclassesInheritsOneBaseBase/after/ISuper.java
@@ -0,0 +1 @@
+interface ISuper {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubclassesInheritsOneBaseBase/after/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubclassesInheritsOneBaseBase/after/Test.java
new file mode 100644
index 0000000..0988603
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubclassesInheritsOneBaseBase/after/Test.java
@@ -0,0 +1 @@
+class Test implements ISuper {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubclassesInheritsOneBaseBase/after/Test1.java b/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubclassesInheritsOneBaseBase/after/Test1.java
new file mode 100644
index 0000000..b312de86
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubclassesInheritsOneBaseBase/after/Test1.java
@@ -0,0 +1,2 @@
+class Test1 implements ISuper {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubclassesInheritsOneBaseBase/before/ISuper.java b/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubclassesInheritsOneBaseBase/before/ISuper.java
new file mode 100644
index 0000000..42f94cf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubclassesInheritsOneBaseBase/before/ISuper.java
@@ -0,0 +1 @@
+interface ISuper {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubclassesInheritsOneBaseBase/before/Super.java b/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubclassesInheritsOneBaseBase/before/Super.java
new file mode 100644
index 0000000..7d430e3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubclassesInheritsOneBaseBase/before/Super.java
@@ -0,0 +1 @@
+public interface Super extends ISuper{}
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubclassesInheritsOneBaseBase/before/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubclassesInheritsOneBaseBase/before/Test.java
new file mode 100644
index 0000000..22d8cb1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubclassesInheritsOneBaseBase/before/Test.java
@@ -0,0 +1 @@
+class Test implements Super {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubclassesInheritsOneBaseBase/before/Test1.java b/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubclassesInheritsOneBaseBase/before/Test1.java
new file mode 100644
index 0000000..8bcdbac
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubclassesInheritsOneBaseBase/before/Test1.java
@@ -0,0 +1,2 @@
+class Test1 implements Super{
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubstitutions/after/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubstitutions/after/Test.java
new file mode 100644
index 0000000..cab6506
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubstitutions/after/Test.java
@@ -0,0 +1,3 @@
+class Test {
+    Integer t;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubstitutions/after/Test1.java b/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubstitutions/after/Test1.java
new file mode 100644
index 0000000..758551d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubstitutions/after/Test1.java
@@ -0,0 +1,3 @@
+class Test1 {
+    String t;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubstitutions/before/Super.java b/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubstitutions/before/Super.java
new file mode 100644
index 0000000..89a7eb9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubstitutions/before/Super.java
@@ -0,0 +1,3 @@
+class Super<T> {
+  T t;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubstitutions/before/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubstitutions/before/Test.java
new file mode 100644
index 0000000..034a76b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubstitutions/before/Test.java
@@ -0,0 +1,2 @@
+class Test extends Super<Integer>{
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubstitutions/before/Test1.java b/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubstitutions/before/Test1.java
new file mode 100644
index 0000000..1ba993a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/multipleSubstitutions/before/Test1.java
@@ -0,0 +1,2 @@
+class Test1 extends Super<String>{
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/newArrayComplexDimensionsExpr/after/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/newArrayComplexDimensionsExpr/after/Test.java
new file mode 100644
index 0000000..d97574a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/newArrayComplexDimensionsExpr/after/Test.java
@@ -0,0 +1,8 @@
+class Test {
+    static int bar(){return 1;}
+
+    void foo() {
+      Test s = new Test();
+      s.bar();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/newArrayComplexDimensionsExpr/after/Usage.java b/java/java-tests/testData/refactoring/inlineSuperClass/newArrayComplexDimensionsExpr/after/Usage.java
new file mode 100644
index 0000000..c4901e2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/newArrayComplexDimensionsExpr/after/Usage.java
@@ -0,0 +1,5 @@
+class Usage {
+  void ba() {
+    Test[][] s = new Test[Test.bar()][];
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/newArrayComplexDimensionsExpr/before/Super.java b/java/java-tests/testData/refactoring/inlineSuperClass/newArrayComplexDimensionsExpr/before/Super.java
new file mode 100644
index 0000000..42ba0cf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/newArrayComplexDimensionsExpr/before/Super.java
@@ -0,0 +1,8 @@
+class Super {
+  void foo() {
+    Super s = new Super();
+    s.bar();
+  }
+
+  static int bar(){return 1;}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/newArrayComplexDimensionsExpr/before/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/newArrayComplexDimensionsExpr/before/Test.java
new file mode 100644
index 0000000..f9ac433
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/newArrayComplexDimensionsExpr/before/Test.java
@@ -0,0 +1,2 @@
+class Test extends Super{
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/newArrayComplexDimensionsExpr/before/Usage.java b/java/java-tests/testData/refactoring/inlineSuperClass/newArrayComplexDimensionsExpr/before/Usage.java
new file mode 100644
index 0000000..c1a7201
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/newArrayComplexDimensionsExpr/before/Usage.java
@@ -0,0 +1,5 @@
+class Usage {
+  void ba() {
+    Super[][] s = new Super[Super.bar()][];
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/newArrayDimensionsExpr/after/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/newArrayDimensionsExpr/after/Test.java
new file mode 100644
index 0000000..71d6fec
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/newArrayDimensionsExpr/after/Test.java
@@ -0,0 +1,8 @@
+class Test {
+    void foo() {
+      Test s = new Test();
+      s.bar();
+    }
+
+    void bar() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/newArrayDimensionsExpr/after/Usage.java b/java/java-tests/testData/refactoring/inlineSuperClass/newArrayDimensionsExpr/after/Usage.java
new file mode 100644
index 0000000..56aa861
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/newArrayDimensionsExpr/after/Usage.java
@@ -0,0 +1,5 @@
+class Usage {
+  void ba() {
+    Test[][] s = new Test[2][3];
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/newArrayDimensionsExpr/before/Super.java b/java/java-tests/testData/refactoring/inlineSuperClass/newArrayDimensionsExpr/before/Super.java
new file mode 100644
index 0000000..79a11c3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/newArrayDimensionsExpr/before/Super.java
@@ -0,0 +1,8 @@
+class Super {
+  void foo() {
+    Super s = new Super();
+    s.bar();
+  }
+
+  void bar() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/newArrayDimensionsExpr/before/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/newArrayDimensionsExpr/before/Test.java
new file mode 100644
index 0000000..f9ac433
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/newArrayDimensionsExpr/before/Test.java
@@ -0,0 +1,2 @@
+class Test extends Super{
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/newArrayDimensionsExpr/before/Usage.java b/java/java-tests/testData/refactoring/inlineSuperClass/newArrayDimensionsExpr/before/Usage.java
new file mode 100644
index 0000000..867a6e2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/newArrayDimensionsExpr/before/Usage.java
@@ -0,0 +1,5 @@
+class Usage {
+  void ba() {
+    Super[][] s = new Super[2][3];
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/newArrayInitializerExpr/after/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/newArrayInitializerExpr/after/Test.java
new file mode 100644
index 0000000..71d6fec
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/newArrayInitializerExpr/after/Test.java
@@ -0,0 +1,8 @@
+class Test {
+    void foo() {
+      Test s = new Test();
+      s.bar();
+    }
+
+    void bar() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/newArrayInitializerExpr/after/Usage.java b/java/java-tests/testData/refactoring/inlineSuperClass/newArrayInitializerExpr/after/Usage.java
new file mode 100644
index 0000000..e9bbb56
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/newArrayInitializerExpr/after/Usage.java
@@ -0,0 +1,5 @@
+class Usage {
+  void ba() {
+    Test[][] s = new Test[][]{new Test[]{new Test()}};
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/newArrayInitializerExpr/before/Super.java b/java/java-tests/testData/refactoring/inlineSuperClass/newArrayInitializerExpr/before/Super.java
new file mode 100644
index 0000000..79a11c3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/newArrayInitializerExpr/before/Super.java
@@ -0,0 +1,8 @@
+class Super {
+  void foo() {
+    Super s = new Super();
+    s.bar();
+  }
+
+  void bar() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/newArrayInitializerExpr/before/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/newArrayInitializerExpr/before/Test.java
new file mode 100644
index 0000000..f9ac433
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/newArrayInitializerExpr/before/Test.java
@@ -0,0 +1,2 @@
+class Test extends Super{
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/newArrayInitializerExpr/before/Usage.java b/java/java-tests/testData/refactoring/inlineSuperClass/newArrayInitializerExpr/before/Usage.java
new file mode 100644
index 0000000..ee2797b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/newArrayInitializerExpr/before/Usage.java
@@ -0,0 +1,5 @@
+class Usage {
+  void ba() {
+    Super[][] s = new Super[][]{new Super[]{new Test()}};
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/newexpr/after/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/newexpr/after/Test.java
new file mode 100644
index 0000000..71d6fec
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/newexpr/after/Test.java
@@ -0,0 +1,8 @@
+class Test {
+    void foo() {
+      Test s = new Test();
+      s.bar();
+    }
+
+    void bar() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/newexpr/after/Usage.java b/java/java-tests/testData/refactoring/inlineSuperClass/newexpr/after/Usage.java
new file mode 100644
index 0000000..06dbeb8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/newexpr/after/Usage.java
@@ -0,0 +1,5 @@
+class Usage {
+  void ba() {
+    Test s = new Test();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/newexpr/before/Super.java b/java/java-tests/testData/refactoring/inlineSuperClass/newexpr/before/Super.java
new file mode 100644
index 0000000..79a11c3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/newexpr/before/Super.java
@@ -0,0 +1,8 @@
+class Super {
+  void foo() {
+    Super s = new Super();
+    s.bar();
+  }
+
+  void bar() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/newexpr/before/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/newexpr/before/Test.java
new file mode 100644
index 0000000..f9ac433
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/newexpr/before/Test.java
@@ -0,0 +1,2 @@
+class Test extends Super{
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/newexpr/before/Usage.java b/java/java-tests/testData/refactoring/inlineSuperClass/newexpr/before/Usage.java
new file mode 100644
index 0000000..75bed906
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/newexpr/before/Usage.java
@@ -0,0 +1,5 @@
+class Usage {
+  void ba() {
+    Super s = new Super();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/noChildConstructorCallsSuperDefault/after/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/noChildConstructorCallsSuperDefault/after/Test.java
new file mode 100644
index 0000000..20fc1a5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/noChildConstructorCallsSuperDefault/after/Test.java
@@ -0,0 +1,6 @@
+class Test {
+
+    Test() {
+      System.out.println("");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/noChildConstructorCallsSuperDefault/before/Super.java b/java/java-tests/testData/refactoring/inlineSuperClass/noChildConstructorCallsSuperDefault/before/Super.java
new file mode 100644
index 0000000..f92c6de
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/noChildConstructorCallsSuperDefault/before/Super.java
@@ -0,0 +1,5 @@
+class Super {
+  Super() {
+    System.out.println("");
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/noChildConstructorCallsSuperDefault/before/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/noChildConstructorCallsSuperDefault/before/Test.java
new file mode 100644
index 0000000..87dc25b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/noChildConstructorCallsSuperDefault/before/Test.java
@@ -0,0 +1,3 @@
+class Test extends Super{
+  
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/replaceGenericsInside/after/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/replaceGenericsInside/after/Test.java
new file mode 100644
index 0000000..d75371c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/replaceGenericsInside/after/Test.java
@@ -0,0 +1,23 @@
+import java.util.List;
+import java.util.Set;
+
+class Test {
+    List<String> l;
+
+    Test() {
+      Set<String> s = new HashSet<String>();
+      for (String t : s) {
+        System.out.println(t);
+      }
+    }
+
+    void foo(String t) {
+      System.out.println(t);
+    }
+
+    void bar() {
+      for (String t : l) {
+        System.out.println(t);
+      }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/replaceGenericsInside/before/Super.java b/java/java-tests/testData/refactoring/inlineSuperClass/replaceGenericsInside/before/Super.java
new file mode 100644
index 0000000..b1229b5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/replaceGenericsInside/before/Super.java
@@ -0,0 +1,22 @@
+import java.util.*;
+
+class Super<T> {
+  List<T> l;
+
+  Super() {
+    Set<T> s = new HashSet<T>();
+    for (T t : s) {
+      System.out.println(t);
+    }
+  }
+
+  void foo(T t) {
+    System.out.println(t);
+  }
+
+  void bar() {
+    for (T t : l) {
+      System.out.println(t);
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/replaceGenericsInside/before/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/replaceGenericsInside/before/Test.java
new file mode 100644
index 0000000..cc36f3d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/replaceGenericsInside/before/Test.java
@@ -0,0 +1,2 @@
+class Test extends Super<String>{
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/simple/after/Usage.java b/java/java-tests/testData/refactoring/inlineSuperClass/simple/after/Usage.java
new file mode 100644
index 0000000..93b9a15
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/simple/after/Usage.java
@@ -0,0 +1,7 @@
+import p.Test;
+
+class Usage {
+  void bar(Test s) {
+    s.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/simple/after/p/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/simple/after/p/Test.java
new file mode 100644
index 0000000..9bc4d88
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/simple/after/p/Test.java
@@ -0,0 +1,7 @@
+package p;
+
+public class Test {
+    public void foo() {
+      System.out.println("Hello");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/simple/after/p1/t.txt b/java/java-tests/testData/refactoring/inlineSuperClass/simple/after/p1/t.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/simple/after/p1/t.txt
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/simple/before/Usage.java b/java/java-tests/testData/refactoring/inlineSuperClass/simple/before/Usage.java
new file mode 100644
index 0000000..df1efb8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/simple/before/Usage.java
@@ -0,0 +1,6 @@
+import p1.*;
+class Usage {
+  void bar(Super s) {
+    s.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/simple/before/p/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/simple/before/p/Test.java
new file mode 100644
index 0000000..9bd48d2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/simple/before/p/Test.java
@@ -0,0 +1,3 @@
+package p;
+import p1.*;
+public class Test extends Super {} 
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/simple/before/p1/Super.java b/java/java-tests/testData/refactoring/inlineSuperClass/simple/before/p1/Super.java
new file mode 100644
index 0000000..1c2aacf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/simple/before/p1/Super.java
@@ -0,0 +1,6 @@
+package p1;
+public class Super {
+   public void foo() {
+     System.out.println("Hello");
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/simple/before/p1/t.txt b/java/java-tests/testData/refactoring/inlineSuperClass/simple/before/p1/t.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/simple/before/p1/t.txt
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/simpleGenerics/after/Usage.java b/java/java-tests/testData/refactoring/inlineSuperClass/simpleGenerics/after/Usage.java
new file mode 100644
index 0000000..0586fab
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/simpleGenerics/after/Usage.java
@@ -0,0 +1,7 @@
+import p.Test;
+
+class Usage {
+  void bar(Test s) {
+    s.foo(null);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/simpleGenerics/after/p/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/simpleGenerics/after/p/Test.java
new file mode 100644
index 0000000..a43b8e6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/simpleGenerics/after/p/Test.java
@@ -0,0 +1,7 @@
+package p;
+
+public class Test {
+    public void foo(String t) {
+      System.out.println("Hello");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/simpleGenerics/after/p1/t.txt b/java/java-tests/testData/refactoring/inlineSuperClass/simpleGenerics/after/p1/t.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/simpleGenerics/after/p1/t.txt
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/simpleGenerics/before/Usage.java b/java/java-tests/testData/refactoring/inlineSuperClass/simpleGenerics/before/Usage.java
new file mode 100644
index 0000000..2dfc39c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/simpleGenerics/before/Usage.java
@@ -0,0 +1,6 @@
+import p1.*;
+class Usage {
+  void bar(Super<String> s) {
+    s.foo(null);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/simpleGenerics/before/p/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/simpleGenerics/before/p/Test.java
new file mode 100644
index 0000000..25c8c0f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/simpleGenerics/before/p/Test.java
@@ -0,0 +1,3 @@
+package p;
+import p1.*;
+public class Test extends Super<String> {} 
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/simpleGenerics/before/p1/Super.java b/java/java-tests/testData/refactoring/inlineSuperClass/simpleGenerics/before/p1/Super.java
new file mode 100644
index 0000000..c580a00
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/simpleGenerics/before/p1/Super.java
@@ -0,0 +1,6 @@
+package p1;
+public class Super<T>{
+   public void foo(T t) {
+     System.out.println("Hello");
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/simpleGenerics/before/p1/t.txt b/java/java-tests/testData/refactoring/inlineSuperClass/simpleGenerics/before/p1/t.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/simpleGenerics/before/p1/t.txt
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/staticImport/after/Usage.java b/java/java-tests/testData/refactoring/inlineSuperClass/staticImport/after/Usage.java
new file mode 100644
index 0000000..e26d793
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/staticImport/after/Usage.java
@@ -0,0 +1,8 @@
+import static p.Test.CONSTANT;
+import static p.Test.statMeth;
+class Usage {
+  public void context() {
+      String v = CONSTANT;
+      statMeth();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/staticImport/after/p/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/staticImport/after/p/Test.java
new file mode 100644
index 0000000..0fd1af8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/staticImport/after/p/Test.java
@@ -0,0 +1,7 @@
+package p;
+
+public class Test {
+    public static final String CONSTANT = "";
+
+    public static void statMeth() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/staticImport/after/p1/t.txt b/java/java-tests/testData/refactoring/inlineSuperClass/staticImport/after/p1/t.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/staticImport/after/p1/t.txt
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/staticImport/before/Usage.java b/java/java-tests/testData/refactoring/inlineSuperClass/staticImport/before/Usage.java
new file mode 100644
index 0000000..0a2df49
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/staticImport/before/Usage.java
@@ -0,0 +1,8 @@
+import static p1.Super.CONSTANT;
+import static p1.Super.statMeth;
+class Usage {
+  public void context() {
+      String v = CONSTANT;
+      statMeth();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/staticImport/before/p/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/staticImport/before/p/Test.java
new file mode 100644
index 0000000..9bd48d2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/staticImport/before/p/Test.java
@@ -0,0 +1,3 @@
+package p;
+import p1.*;
+public class Test extends Super {} 
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/staticImport/before/p1/Super.java b/java/java-tests/testData/refactoring/inlineSuperClass/staticImport/before/p1/Super.java
new file mode 100644
index 0000000..93c4064
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/staticImport/before/p1/Super.java
@@ -0,0 +1,5 @@
+package p1;
+public class Super {
+   public static final String CONSTANT = "";
+   public static void statMeth() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/staticImport/before/p1/t.txt b/java/java-tests/testData/refactoring/inlineSuperClass/staticImport/before/p1/t.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/staticImport/before/p1/t.txt
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/staticMembers/after/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/staticMembers/after/Test.java
new file mode 100644
index 0000000..409bbee
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/staticMembers/after/Test.java
@@ -0,0 +1,12 @@
+class Test {
+    public static final String S = "";
+
+    static void foo(){
+       System.out.println(S);
+    }
+
+    void bar() {
+    System.out.println(Test.S);
+    Test.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/staticMembers/before/Super.java b/java/java-tests/testData/refactoring/inlineSuperClass/staticMembers/before/Super.java
new file mode 100644
index 0000000..3b87d18
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/staticMembers/before/Super.java
@@ -0,0 +1,7 @@
+class Super {
+   public static final String S = "";
+
+   static void foo(){
+      System.out.println(S);
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/staticMembers/before/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/staticMembers/before/Test.java
new file mode 100644
index 0000000..eb4432f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/staticMembers/before/Test.java
@@ -0,0 +1,6 @@
+class Test extends Super{
+  void bar() {
+    System.out.println(Super.S);
+    Super.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/superConstructorWithFieldInitialization/after/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/superConstructorWithFieldInitialization/after/Test.java
new file mode 100644
index 0000000..f95077f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/superConstructorWithFieldInitialization/after/Test.java
@@ -0,0 +1,7 @@
+class Test {
+    private final String field;
+
+    Test(){
+        field = "text";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/superConstructorWithFieldInitialization/before/Super.java b/java/java-tests/testData/refactoring/inlineSuperClass/superConstructorWithFieldInitialization/before/Super.java
new file mode 100644
index 0000000..586b69a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/superConstructorWithFieldInitialization/before/Super.java
@@ -0,0 +1,8 @@
+class Super {
+  private final String field;
+
+  public Super() {
+    field = "text";
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/superConstructorWithFieldInitialization/before/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/superConstructorWithFieldInitialization/before/Test.java
new file mode 100644
index 0000000..991414e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/superConstructorWithFieldInitialization/before/Test.java
@@ -0,0 +1,5 @@
+class Test extends Super{
+  Test(){
+    super();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/superConstructorWithParam/after/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/superConstructorWithParam/after/Test.java
new file mode 100644
index 0000000..cd4bab3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/superConstructorWithParam/after/Test.java
@@ -0,0 +1,17 @@
+class Test {
+    String s;
+
+    Test(String s){
+        if (s != null) {
+          this.s = s;
+        }
+        System.out.println("hello");
+  }
+
+    void foo() {
+      Test s = new Test(null);
+      s.bar();
+    }
+
+    void bar() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/superConstructorWithParam/before/Super.java b/java/java-tests/testData/refactoring/inlineSuperClass/superConstructorWithParam/before/Super.java
new file mode 100644
index 0000000..d3e05ce
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/superConstructorWithParam/before/Super.java
@@ -0,0 +1,15 @@
+class Super {
+  String s;
+  Super(String s) {
+    if (s != null) {
+      this.s = s;
+    }
+  }
+
+  void foo() {
+    Super s = new Super(null);
+    s.bar();
+  }
+
+  void bar() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/superConstructorWithParam/before/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/superConstructorWithParam/before/Test.java
new file mode 100644
index 0000000..920ae35
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/superConstructorWithParam/before/Test.java
@@ -0,0 +1,6 @@
+class Test extends Super{
+  Test(String s){
+    super(s);
+    System.out.println("hello");
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/superConstructorWithReturnInside/after/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/superConstructorWithReturnInside/after/Test.java
new file mode 100644
index 0000000..91f2f77
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/superConstructorWithReturnInside/after/Test.java
@@ -0,0 +1,13 @@
+class Test {
+  Test(String s){
+    super(s);
+    System.out.println("hello");
+  }
+
+    void foo() {
+      Test s = new Test(null);
+      s.bar();
+    }
+
+    void bar() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/superConstructorWithReturnInside/before/Super.java b/java/java-tests/testData/refactoring/inlineSuperClass/superConstructorWithReturnInside/before/Super.java
new file mode 100644
index 0000000..45e4249
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/superConstructorWithReturnInside/before/Super.java
@@ -0,0 +1,13 @@
+class Super {
+  Super(String s) {
+    if (s == null) return;
+    System.out.println("s:" + s);
+  }
+
+  void foo() {
+    Super s = new Super(null);
+    s.bar();
+  }
+
+  void bar() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/superConstructorWithReturnInside/before/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/superConstructorWithReturnInside/before/Test.java
new file mode 100644
index 0000000..c1e7293
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/superConstructorWithReturnInside/before/Test.java
@@ -0,0 +1,7 @@
+class Test extends Super{
+  Test(String s){
+    super(s);
+    System.out.println("hello");
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/superReference/after/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/superReference/after/Test.java
new file mode 100644
index 0000000..88710e5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/superReference/after/Test.java
@@ -0,0 +1,7 @@
+class Test {
+  public void context() {
+    method();
+  }
+
+    public void method() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/superReference/before/Super.java b/java/java-tests/testData/refactoring/inlineSuperClass/superReference/before/Super.java
new file mode 100644
index 0000000..fb0359a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/superReference/before/Super.java
@@ -0,0 +1,3 @@
+class Super {
+   public void method() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/superReference/before/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/superReference/before/Test.java
new file mode 100644
index 0000000..c81b720
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineSuperClass/superReference/before/Test.java
@@ -0,0 +1,5 @@
+class Test extends Super{
+  public void context() {
+    super.method();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/ArrayInitializer.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ArrayInitializer.java
new file mode 100644
index 0000000..7303ec4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ArrayInitializer.java
@@ -0,0 +1,11 @@
+class A {
+    public void test() {
+        Inner[] b = new Inner[] { new Inner() };
+    }
+
+    private class <caret>Inner {
+        public String toString() {
+            return "A";
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/ArrayInitializer.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ArrayInitializer.java.after
new file mode 100644
index 0000000..f8f4c0b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ArrayInitializer.java.after
@@ -0,0 +1,10 @@
+class A {
+    public void test() {
+        Object[] b = new Object[] {new Object() {
+            public String toString() {
+                return "A";
+            }
+        }};
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/ArrayType.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ArrayType.java
new file mode 100644
index 0000000..96c9434
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ArrayType.java
@@ -0,0 +1,12 @@
+class A {
+    public void test() {
+        Inner[] b = new Inner[1];
+        b [0] = new Inner();
+    }
+
+    private class <caret>Inner {
+        public String toString() {
+            return "A";
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/ArrayType.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ArrayType.java.after
new file mode 100644
index 0000000..41b0ff9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ArrayType.java.after
@@ -0,0 +1,11 @@
+class A {
+    public void test() {
+        Object[] b = new Object[1];
+        b [0] = new Object() {
+            public String toString() {
+                return "A";
+            }
+        };
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/ArrayTypeWithGenerics.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ArrayTypeWithGenerics.java
new file mode 100644
index 0000000..aa123de
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ArrayTypeWithGenerics.java
@@ -0,0 +1,14 @@
+import java.util.*;
+
+class A {
+    public void test() {
+        Inner<String>[] b = new Inner<String>[1];
+        b [0] = new Inner<String>();
+    }
+
+    private class <caret>Inner<T> implements Comparator<T> {
+        public int compare(T t1, T t2) {
+            return 0;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/ArrayTypeWithGenerics.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ArrayTypeWithGenerics.java.after
new file mode 100644
index 0000000..542e1ea
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ArrayTypeWithGenerics.java.after
@@ -0,0 +1,13 @@
+import java.util.*;
+
+class A {
+    public void test() {
+        Comparator<String>[] b = new Comparator[1];
+        b [0] = new Comparator<String>() {
+            public int compare(String t1, String t2) {
+                return 0;
+            }
+        };
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/Braces.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/Braces.java
new file mode 100644
index 0000000..fc3eddb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/Braces.java
@@ -0,0 +1,26 @@
+public class Demo {
+
+    static class MyParent {
+        private final String value;
+
+        MyParent(String value) {
+            this.value = value;
+        }
+    }
+
+    static class MyC<caret>hild extends MyParent {
+        MyChild(String value) {
+            super(value);
+        }
+    }
+
+    public static void main(String[] args) {
+
+        String value = "something";
+        final MyParent p;
+        if (true)
+            p = new MyChild(value);
+        else
+            p = new MyParent("value");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/Braces.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/Braces.java.after
new file mode 100644
index 0000000..8a2d39e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/Braces.java.after
@@ -0,0 +1,22 @@
+public class Demo {
+
+    static class MyParent {
+        private final String value;
+
+        MyParent(String value) {
+            this.value = value;
+        }
+    }
+
+    public static void main(String[] args) {
+
+        String value = "something";
+        final MyParent p;
+        if (true) {
+            final String value1 = value;
+            p = new MyParent(value1);
+        }
+        else
+            p = new MyParent("value");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/CanBeInvokedOnReference.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/CanBeInvokedOnReference.java
new file mode 100644
index 0000000..4960f19
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/CanBeInvokedOnReference.java
@@ -0,0 +1,7 @@
+public class Simple {}
+
+class Usage {
+  void foo() {
+    String s = new Si<caret>mple().toString();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/CanBeInvokedOnReference1.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/CanBeInvokedOnReference1.java
new file mode 100644
index 0000000..08ce210
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/CanBeInvokedOnReference1.java
@@ -0,0 +1,11 @@
+public class Simple implements Runnable {
+  public void run(){}
+}
+
+class Usage {
+  void foo() {
+    bar(new Si<caret>mple());
+  }
+
+  void bar(Runnable r){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/CanBeInvokedOnReferenceSubstitution.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/CanBeInvokedOnReferenceSubstitution.java
new file mode 100644
index 0000000..4911916
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/CanBeInvokedOnReferenceSubstitution.java
@@ -0,0 +1,11 @@
+public class Simple<T> implements Comparable<T> {
+  public int compareTo(T o){}
+}
+
+class Usage {
+  void foo() {
+    bar(new Si<caret>mple<String>());
+  }
+
+  void bar(Comparable<String>... r){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/CanBeInvokedOnReferenceSubstitution1.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/CanBeInvokedOnReferenceSubstitution1.java
new file mode 100644
index 0000000..0c020e3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/CanBeInvokedOnReferenceSubstitution1.java
@@ -0,0 +1,11 @@
+public class Simple<T> implements Comparable<T> {
+  public int compareTo(T o){}
+}
+
+class Usage<S> {
+  void foo() {
+    bar(new Si<caret>mple<S>());
+  }
+
+  void bar(Comparable<S>... r){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/CanBeInvokedOnReferenceSyncStatement.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/CanBeInvokedOnReferenceSyncStatement.java
new file mode 100644
index 0000000..2e0b378
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/CanBeInvokedOnReferenceSyncStatement.java
@@ -0,0 +1,9 @@
+public class Simple {}
+
+class Usage {
+  void foo() {
+    synchronized (new Si<caret>mple()) {
+      //dosmth
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/CanBeInvokedOnReferenceVarargs.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/CanBeInvokedOnReferenceVarargs.java
new file mode 100644
index 0000000..7e2bfa2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/CanBeInvokedOnReferenceVarargs.java
@@ -0,0 +1,11 @@
+public class Simple implements Runnable {
+  public void run(){}
+}
+
+class Usage {
+  void foo() {
+    bar(new Si<caret>mple());
+  }
+
+  void bar(Runnable... r){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/CantBeInvokedOnReference.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/CantBeInvokedOnReference.java
new file mode 100644
index 0000000..f6fd4d4b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/CantBeInvokedOnReference.java
@@ -0,0 +1,7 @@
+public class Simple {}
+
+class Usage {
+  void foo() {
+    Simple s = new Si<caret>mple();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/CantBeInvokedOnReference1.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/CantBeInvokedOnReference1.java
new file mode 100644
index 0000000..010d44a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/CantBeInvokedOnReference1.java
@@ -0,0 +1,11 @@
+public class Simple implements Runnable {
+  public void run(){}
+}
+
+class Usage {
+  void foo() {
+    bar(new Si<caret>mple());
+  }
+
+  void bar(Simple s){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/CantBeInvokedOnReferenceReturnStatement.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/CantBeInvokedOnReferenceReturnStatement.java
new file mode 100644
index 0000000..dea465a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/CantBeInvokedOnReferenceReturnStatement.java
@@ -0,0 +1,7 @@
+public class Simple {}
+
+class Usage {
+  Simple foo() {
+    return new Si<caret>mple();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/ChainedConstructors.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ChainedConstructors.java
new file mode 100644
index 0000000..38d06b8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ChainedConstructors.java
@@ -0,0 +1,17 @@
+class A {
+    private Object b = new MyException("w");
+
+    private class <caret>MyException extends Exception {
+        public MyException(String msg) {
+            this(new Throwable(), msg);
+        }
+
+        public MyException(Throwable t, String msg) {
+            super(msg, t);
+        }
+
+        public String getMessage() {
+            return "q";
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/ChainedConstructors.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ChainedConstructors.java.after
new file mode 100644
index 0000000..258e701
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ChainedConstructors.java.after
@@ -0,0 +1,8 @@
+class A {
+    private Object b = new Exception("w", new Throwable()) {
+        public String getMessage() {
+            return "q";
+        }
+    };
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/ChainedVarargConstructors.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ChainedVarargConstructors.java
new file mode 100644
index 0000000..a992497
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ChainedVarargConstructors.java
@@ -0,0 +1,16 @@
+class A {
+  private Object b = new MyException("w");
+
+  private class <caret>MyException implements Runnable {
+    public MyException(String...msg){
+      this(new Throwable(), msg[0]);
+    }
+
+    public MyException(Throwable t, String msg)
+    {
+      System.out.println(msg);
+    }
+
+    public void run(){}
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/ChainedVarargConstructors.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ChainedVarargConstructors.java.after
new file mode 100644
index 0000000..e93dacc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ChainedVarargConstructors.java.after
@@ -0,0 +1,10 @@
+class A {
+  private Object b = new Runnable() {
+      {
+          System.out.println(new String[]{"w"}[0]);
+      }
+
+      public void run(){}
+  };
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/ChangeToSuperType.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ChangeToSuperType.java
new file mode 100644
index 0000000..99b0754
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ChangeToSuperType.java
@@ -0,0 +1,9 @@
+class A {
+    private Inner b = new Inner();
+
+    private class <caret>Inner {
+        public String toString() {
+            return "A";
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/ChangeToSuperType.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ChangeToSuperType.java.after
new file mode 100644
index 0000000..d7e8728
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ChangeToSuperType.java.after
@@ -0,0 +1,8 @@
+class A {
+    private Object b = new Object() {
+        public String toString() {
+            return "A";
+        }
+    };
+    
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/ClassInitializer.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ClassInitializer.java
new file mode 100644
index 0000000..9ac17b3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ClassInitializer.java
@@ -0,0 +1,13 @@
+class A {
+    private Object b = new Inner();
+
+    private class <caret>Inner {
+        {
+            // class initializer
+        }
+
+        public String toString() {
+            return "A";
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/ClassInitializer.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ClassInitializer.java.after
new file mode 100644
index 0000000..b08bb81
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ClassInitializer.java.after
@@ -0,0 +1,12 @@
+class A {
+    private Object b = new Object() {
+        {
+            // class initializer
+        }
+
+        public String toString() {
+            return "A";
+        }
+    };
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/ConflictInaccessibleOuterField.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ConflictInaccessibleOuterField.java
new file mode 100644
index 0000000..4a998dd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ConflictInaccessibleOuterField.java
@@ -0,0 +1,17 @@
+public class QualifyInnerTest {
+    public class C2User {
+        public void test() {
+            C2.C2Inner inner = new C2.C2Inner();
+        }
+    }
+}
+
+class C2 {
+    private static int a;
+
+    public static class <caret>C2Inner {
+        public void doStuff() {
+            System.out.println(a);
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/Constructor.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/Constructor.java
new file mode 100644
index 0000000..0154d57
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/Constructor.java
@@ -0,0 +1,13 @@
+class A {
+    private Object b = new MyException();
+
+    private class <caret>MyException extends Exception {
+        public MyException() {
+            super("w");
+        }
+
+        public String getMessage() {
+            return "q";
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/Constructor.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/Constructor.java.after
new file mode 100644
index 0000000..ca4e3d9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/Constructor.java.after
@@ -0,0 +1,8 @@
+class A {
+    private Object b = new Exception("w") {
+        public String getMessage() {
+            return "q";
+        }
+    };
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/ConstructorArgumentInExpression.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ConstructorArgumentInExpression.java
new file mode 100644
index 0000000..03ca9e2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ConstructorArgumentInExpression.java
@@ -0,0 +1,15 @@
+public class A {
+    public class <caret>Inner {
+        private int a = 0;
+
+        public Inner(int arg) {
+            int j = 5;
+            while (j < 10) j++;
+            a = arg * j;
+        }
+    }
+
+    public void test() {
+        Inner i = new Inner(1);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/ConstructorArgumentInExpression.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ConstructorArgumentInExpression.java.after
new file mode 100644
index 0000000..d671f86
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ConstructorArgumentInExpression.java.after
@@ -0,0 +1,14 @@
+public class A {
+
+    public void test() {
+        Object i = new Object() {
+            private int a = 0;
+
+            {
+                int j = 5;
+                while (j < 10) j++;
+                a = 1 * j;
+            }
+        };
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/ConstructorArgumentToField.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ConstructorArgumentToField.java
new file mode 100644
index 0000000..455518c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ConstructorArgumentToField.java
@@ -0,0 +1,19 @@
+public class A {
+    public class <caret>Inner implements Runnable {
+        private final int c;
+
+        public Inner(int arg) {
+            c = arg;
+        }
+
+        public void run() {
+            System.out.println(c);
+        }
+    }
+
+    public void test() {
+        int c = 0;
+        Inner i = new Inner(1);
+        new Thread(i).start();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/ConstructorArgumentToField.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ConstructorArgumentToField.java.after
new file mode 100644
index 0000000..18556f7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ConstructorArgumentToField.java.after
@@ -0,0 +1,14 @@
+public class A {
+
+    public void test() {
+        int c = 0;
+        Runnable i = new Runnable() {
+            private final int c = 1;
+
+            public void run() {
+                System.out.println(c);
+            }
+        };
+        new Thread(i).start();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/ConstructorToInstanceInitializer.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ConstructorToInstanceInitializer.java
new file mode 100644
index 0000000..c020ca2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ConstructorToInstanceInitializer.java
@@ -0,0 +1,15 @@
+class A {
+    private Object b = new Inner();
+
+    private class <caret>Inner {
+        public Inner() {
+            // this does some stuff
+            doStuff();
+            /* isn't this interesting? */
+        }
+
+        public String doStuff() {
+            return "A";
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/ConstructorToInstanceInitializer.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ConstructorToInstanceInitializer.java.after
new file mode 100644
index 0000000..8b484d3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ConstructorToInstanceInitializer.java.after
@@ -0,0 +1,14 @@
+class A {
+    private Object b = new Object() {
+        {
+            // this does some stuff
+            doStuff();
+            /* isn't this interesting? */
+        }
+        
+        public String doStuff() {
+            return "A";
+        }
+    };
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/ConstructorWithArguments.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ConstructorWithArguments.java
new file mode 100644
index 0000000..eec1b90
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ConstructorWithArguments.java
@@ -0,0 +1,13 @@
+class A {
+    private Object b = new MyException("w");
+
+    private class <caret>MyException extends Exception {
+        public MyException(String msg) {
+            super(msg);
+        }
+
+        public String getMessage() {
+            return "q";
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/ConstructorWithArguments.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ConstructorWithArguments.java.after
new file mode 100644
index 0000000..ca4e3d9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ConstructorWithArguments.java.after
@@ -0,0 +1,8 @@
+class A {
+    private Object b = new Exception("w") {
+        public String getMessage() {
+            return "q";
+        }
+    };
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/ConstructorWithArgumentsInExpression.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ConstructorWithArgumentsInExpression.java
new file mode 100644
index 0000000..b7feaa7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ConstructorWithArgumentsInExpression.java
@@ -0,0 +1,13 @@
+class A {
+    private Object b = new MyException("w");
+
+    private class <caret>MyException extends Exception {
+        public MyException(String msg) {
+            super(msg.substring(0, 1));
+        }
+
+        public String getMessage() {
+            return "q";
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/ConstructorWithArgumentsInExpression.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ConstructorWithArgumentsInExpression.java.after
new file mode 100644
index 0000000..43d16904
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ConstructorWithArgumentsInExpression.java.after
@@ -0,0 +1,8 @@
+class A {
+    private Object b = new Exception("w".substring(0, 1)) {
+        public String getMessage() {
+            return "q";
+        }
+    };
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/Field.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/Field.java
new file mode 100644
index 0000000..dbeff52
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/Field.java
@@ -0,0 +1,12 @@
+class A {
+    private Object b = new Inner();
+
+    private class <caret>Inner {
+        private int i=0;
+
+        public String toString() {
+            i++;
+            return "A";
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/Field.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/Field.java.after
new file mode 100644
index 0000000..090046c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/Field.java.after
@@ -0,0 +1,11 @@
+class A {
+    private Object b = new Object() {
+        private int i=0;
+
+        public String toString() {
+            i++;
+            return "A";
+        }
+    };
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/FieldAsConstructorParameter.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/FieldAsConstructorParameter.java
new file mode 100644
index 0000000..25db971
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/FieldAsConstructorParameter.java
@@ -0,0 +1,18 @@
+class ParentCtor {
+    public ParentCtor(String s) {
+    }
+}
+
+class <caret>ChildCtor extends ParentCtor {
+    private static final String CONST = "";
+
+    public ChildCtor() {
+        super(CONST);
+    }
+}
+
+class Usage {
+    public void test() {
+        ChildCtor c = new ChildCtor();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/FieldAsConstructorParameter.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/FieldAsConstructorParameter.java.after
new file mode 100644
index 0000000..13a93af
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/FieldAsConstructorParameter.java.after
@@ -0,0 +1,12 @@
+class ParentCtor {
+    public ParentCtor(String s) {
+    }
+}
+
+class Usage {
+    public void test() {
+        ParentCtor c = new ParentCtor("") {
+            private static final String CONST = "";
+        };
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/FieldInitializedWithVar.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/FieldInitializedWithVar.java
new file mode 100644
index 0000000..1e2afdd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/FieldInitializedWithVar.java
@@ -0,0 +1,18 @@
+class A {
+    public void doTest() {
+        Object b = new Inner(new Throwable("t"));
+    }
+
+    private class <caret>Inner {
+        private String myMessage;
+
+        public Inner(Throwable t) {
+            String msg = t.getMessage();
+            myMessage = msg;
+        }
+    
+        public String toString() {
+            return "A";
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/FieldInitializedWithVar.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/FieldInitializedWithVar.java.after
new file mode 100644
index 0000000..2fd569f87
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/FieldInitializedWithVar.java.after
@@ -0,0 +1,18 @@
+class A {
+    public void doTest() {
+        final Throwable t = new Throwable("t");
+        Object b = new Object() {
+            private String myMessage;
+
+            {
+                String msg = t.getMessage();
+                myMessage = msg;
+            }
+
+            public String toString() {
+                return "A";
+            }
+        };
+    }
+    
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/FieldVsLocalConflict.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/FieldVsLocalConflict.java
new file mode 100644
index 0000000..d3e2b22
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/FieldVsLocalConflict.java
@@ -0,0 +1,19 @@
+class A {
+    public void doTest() {
+        Throwable t = new Throwable("q");
+        Object b = new Inner(new Throwable("t"));
+    }
+
+    private class <caret>Inner {
+        private String myMessage;
+
+        public Inner(Throwable t) {
+            String msg = t.getMessage();
+            myMessage = msg;
+        }
+    
+        public String toString() {
+            return "A";
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/FieldVsLocalConflict.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/FieldVsLocalConflict.java.after
new file mode 100644
index 0000000..511a5cc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/FieldVsLocalConflict.java.after
@@ -0,0 +1,19 @@
+class A {
+    public void doTest() {
+        Throwable t = new Throwable("q");
+        final Throwable t1 = new Throwable("t");
+        Object b = new Object() {
+            private String myMessage;
+
+            {
+                String msg = t1.getMessage();
+                myMessage = msg;
+            }
+
+            public String toString() {
+                return "A";
+            }
+        };
+    }
+    
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/FieldVsParameterConflict.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/FieldVsParameterConflict.java
new file mode 100644
index 0000000..537c6eb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/FieldVsParameterConflict.java
@@ -0,0 +1,20 @@
+class A {
+    public void doTest() {
+        Object b = new Inner(new Throwable("t"));
+    }
+
+    private class <caret>Inner {
+        private Throwable t;
+        private String myMessage;
+
+        public Inner(Throwable t) {
+            this.t = t;
+            String msg = this.t.getMessage();
+            myMessage = msg;
+        }
+    
+        public String toString() {
+            return "A";
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/FieldVsParameterConflict.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/FieldVsParameterConflict.java.after
new file mode 100644
index 0000000..1e3f079
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/FieldVsParameterConflict.java.after
@@ -0,0 +1,19 @@
+class A {
+    public void doTest() {
+        final Throwable t1 = new Throwable("t");
+        Object b = new Object() {
+            private Throwable t = t1;
+            private String myMessage;
+
+            {
+                String msg = this.t.getMessage();
+                myMessage = msg;
+            }
+
+            public String toString() {
+                return "A";
+            }
+        };
+    }
+    
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/Generics.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/Generics.java
new file mode 100644
index 0000000..b010042
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/Generics.java
@@ -0,0 +1,11 @@
+import java.util.*;
+
+class A {
+    private Inner b = new Inner();
+
+    private class <caret>Inner implements Comparator<String> {
+        public int compare(String s1, String s2) {
+            return 0;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/Generics.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/Generics.java.after
new file mode 100644
index 0000000..18f37f8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/Generics.java.after
@@ -0,0 +1,10 @@
+import java.util.*;
+
+class A {
+    private Comparator<String> b = new Comparator<String>() {
+        public int compare(String s1, String s2) {
+            return 0;
+        }
+    };
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/GenericsFieldDeclaration.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/GenericsFieldDeclaration.java
new file mode 100644
index 0000000..bd86ea6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/GenericsFieldDeclaration.java
@@ -0,0 +1,13 @@
+public class <caret>AGeneric<T> {
+    private T myT;
+    public T getT() {
+     	return myT;
+    }
+    public void setT(T t) {
+        myT = t;
+    }
+}
+
+class Client {
+  private AGeneric<String> myGen = new AGeneric<String>();
+}
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/GenericsFieldDeclaration.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/GenericsFieldDeclaration.java.after
new file mode 100644
index 0000000..4500ad5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/GenericsFieldDeclaration.java.after
@@ -0,0 +1,13 @@
+class Client {
+  private Object myGen = new Object() {
+      private String myT;
+
+      public String getT() {
+           return myT;
+      }
+
+      public void setT(String t) {
+          myT = t;
+      }
+  };
+}
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/GenericsInTypeParameter.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/GenericsInTypeParameter.java
new file mode 100644
index 0000000..06e5a4f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/GenericsInTypeParameter.java
@@ -0,0 +1,17 @@
+import java.util.*;
+
+class A {
+    private AGeneric<Collection> b = new AGeneric<Collection>();
+
+    private class <caret>AGeneric<T> {
+        private T myV;
+
+        public <X extends T> void parMethA(X p) {
+             myV = p;
+        }
+
+        private class Inner<Y extends T> {
+    	    private Y myY;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/GenericsInTypeParameter.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/GenericsInTypeParameter.java.after
new file mode 100644
index 0000000..dc40a98
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/GenericsInTypeParameter.java.after
@@ -0,0 +1,16 @@
+import java.util.*;
+
+class A {
+    private Object b = new Object() {
+        private Collection myV;
+
+        public <X extends Collection> void parMethA(X p) {
+             myV = p;
+        }
+
+        private class Inner<Y extends Collection> {
+    	    private Y myY;
+        }
+    };
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/GenericsRawType.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/GenericsRawType.java
new file mode 100644
index 0000000..56aba69
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/GenericsRawType.java
@@ -0,0 +1,11 @@
+import java.util.*;
+
+class A {
+    private Inner b = new Inner();
+
+    private class <caret>Inner<T> implements Comparator<T> {
+        public int compare(T s1, T s2) {
+            return 0;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/GenericsRawType.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/GenericsRawType.java.after
new file mode 100644
index 0000000..94a6756
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/GenericsRawType.java.after
@@ -0,0 +1,10 @@
+import java.util.*;
+
+class A {
+    private Comparator b = new Comparator() {
+        public int compare(Object s1, Object s2) {
+            return 0;
+        }
+    };
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/GenericsSubstitute.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/GenericsSubstitute.java
new file mode 100644
index 0000000..93ec382
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/GenericsSubstitute.java
@@ -0,0 +1,11 @@
+import java.util.*;
+
+class A {
+    private Inner<String> b = new Inner<String>();
+
+    private class <caret>Inner<T> implements Comparator<T> {
+        public int compare(T s1, T s2) {
+            return 0;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/GenericsSubstitute.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/GenericsSubstitute.java.after
new file mode 100644
index 0000000..18f37f8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/GenericsSubstitute.java.after
@@ -0,0 +1,10 @@
+import java.util.*;
+
+class A {
+    private Comparator<String> b = new Comparator<String>() {
+        public int compare(String s1, String s2) {
+            return 0;
+        }
+    };
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/GetClassConflict.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/GetClassConflict.java
new file mode 100644
index 0000000..c40d109
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/GetClassConflict.java
@@ -0,0 +1,11 @@
+class Simple {
+  void foo(Simple s) {
+    final Class<? extends Simple> aClass = getClass();
+    final Class<? extends Simple> aClass1 = s.getClass();
+    final Class<? extends String> nonConflictStrClass = "".getClass();
+  }
+}
+
+class Usage {
+  Simple s = new Sim<caret>ple();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/ImplementsInterface.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ImplementsInterface.java
new file mode 100644
index 0000000..fd9de11
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ImplementsInterface.java
@@ -0,0 +1,10 @@
+import java.awt.event.*;
+
+class A {
+    private ActionListener b = new Inner();
+
+    private class <caret>Inner implements ActionListener {
+        public void actionPerformed(ActionEvent e) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/ImplementsInterface.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ImplementsInterface.java.after
new file mode 100644
index 0000000..c59ba2b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ImplementsInterface.java.after
@@ -0,0 +1,9 @@
+import java.awt.event.*;
+
+class A {
+    private ActionListener b = new ActionListener() {
+        public void actionPerformed(ActionEvent e) {
+        }
+    };
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/InlineThisOnly.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/InlineThisOnly.java
new file mode 100644
index 0000000..f79a852
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/InlineThisOnly.java
@@ -0,0 +1,10 @@
+class A {
+    private Inner b = new <caret>Inner();
+    private Inner b2 = new Inner();
+
+    private class Inner {
+        public String toString() {
+            return "A";
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/InlineThisOnly.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/InlineThisOnly.java.after
new file mode 100644
index 0000000..d903a66
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/InlineThisOnly.java.after
@@ -0,0 +1,14 @@
+class A {
+    private Inner b = new Object() {
+        public String toString() {
+            return "A";
+        }
+    };
+    private Inner b2 = new Inner();
+
+    private class Inner {
+        public String toString() {
+            return "A";
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/InnerClass.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/InnerClass.java
new file mode 100644
index 0000000..548ec1b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/InnerClass.java
@@ -0,0 +1,19 @@
+import java.io;
+
+class A {
+    public void test() {
+        Inlined i = new Inlined();
+    }
+}
+
+class <caret>Inlined {
+    public class A {
+    }
+
+    private A myA = new A();
+
+    public String toString() {
+        A a = new A();
+        return a.toString();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/InnerClass.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/InnerClass.java.after
new file mode 100644
index 0000000..50a5b5e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/InnerClass.java.after
@@ -0,0 +1,18 @@
+import java.io;
+
+class A {
+    public void test() {
+        Object i = new Object() {
+            public class A {
+            }
+            
+            private A myA = new A();
+            
+            public String toString() {
+                A a = new A();
+                return a.toString();
+            }
+        };
+    }
+}
+
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/LocalClass.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/LocalClass.java
new file mode 100644
index 0000000..e73ca04
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/LocalClass.java
@@ -0,0 +1,11 @@
+class A {
+    public void test() {
+        class <caret>Inner {
+            public String toString() {
+                return "A";
+            }
+        }
+
+        Object b = new Inner();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/LocalClass.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/LocalClass.java.after
new file mode 100644
index 0000000..539f5af
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/LocalClass.java.after
@@ -0,0 +1,10 @@
+class A {
+    public void test() {
+    
+        Object b = new Object() {
+            public String toString() {
+                return "A";
+            }
+        };
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/MethodCallInNewExpression.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/MethodCallInNewExpression.java
new file mode 100644
index 0000000..e04724d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/MethodCallInNewExpression.java
@@ -0,0 +1,10 @@
+public class A {
+    private class <caret>Inner {
+        void doTest() {
+        }
+    }
+
+    public void test() {
+        new Inner().doTest();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/MethodCallInNewExpression.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/MethodCallInNewExpression.java.after
new file mode 100644
index 0000000..0dfe705
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/MethodCallInNewExpression.java.after
@@ -0,0 +1,9 @@
+public class A {
+
+    public void test() {
+        new Object() {
+            void doTest() {
+            }
+        }.doTest();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/MethodCallInNewExpressionWithParens.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/MethodCallInNewExpressionWithParens.java
new file mode 100644
index 0000000..deb3b08
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/MethodCallInNewExpressionWithParens.java
@@ -0,0 +1,10 @@
+public class A {
+    private class <caret>Inner {
+        void doTest() {
+        }
+    }
+
+    public void test() {
+        (new Inner()).doTest();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/MethodCallInNewExpressionWithParens.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/MethodCallInNewExpressionWithParens.java.after
new file mode 100644
index 0000000..51d1f34
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/MethodCallInNewExpressionWithParens.java.after
@@ -0,0 +1,9 @@
+public class A {
+
+    public void test() {
+        (new Object() {
+            void doTest() {
+            }
+        }).doTest();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/MethodUsage.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/MethodUsage.java
new file mode 100644
index 0000000..930a4f5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/MethodUsage.java
@@ -0,0 +1,13 @@
+class A {
+    private Object b = new Inner();
+
+    private class <caret>Inner {
+        public String toString() {
+            return getMyStringRepresentation();
+        }
+
+        public String getMyStringRepresentation() {
+            return "q";
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/MethodUsage.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/MethodUsage.java.after
new file mode 100644
index 0000000..f5d708e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/MethodUsage.java.after
@@ -0,0 +1,12 @@
+class A {
+    private Object b = new Object() {
+        public String toString() {
+            return getMyStringRepresentation();
+        }
+
+        public String getMyStringRepresentation() {
+            return "q";
+        }
+    };
+    
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/MultipleAssignments.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/MultipleAssignments.java
new file mode 100644
index 0000000..2725dd7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/MultipleAssignments.java
@@ -0,0 +1,20 @@
+public class WithCtor {
+	private int myInt = 8;
+	private String myString = "Sashya";
+
+	public WithCtor() {
+	}
+
+	public WithCtor(int anInt, String string) {
+		int i = 2;
+		i = 3;
+		myInt = i + anInt;
+		int j = 4;
+		j = 5;
+		myString = string.substring(j);
+	}
+}
+
+class Usage {
+  private WithCtor wc1 = new With<caret>Ctor(17, "Sa");
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/MultipleAssignments.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/MultipleAssignments.java.after
new file mode 100644
index 0000000..c7885a8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/MultipleAssignments.java.after
@@ -0,0 +1,15 @@
+class Usage {
+  private Object wc1 = new Object() {
+      private int myInt = 8;
+      private String myString = "Sashya";
+
+      {
+          int i = 2;
+          i = 3;
+          myInt = i + 17;
+          int j = 4;
+          j = 5;
+          myString = "Sa".substring(j);
+      }
+  };
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/MultipleConstructors.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/MultipleConstructors.java
new file mode 100644
index 0000000..0e8d6cf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/MultipleConstructors.java
@@ -0,0 +1,17 @@
+class A {
+    private Object b = new MyException(new Throwable(), "w");
+
+    private class <caret>MyException extends Exception {
+        public MyException(String msg) {
+            super(msg);
+        }
+
+        public MyException(Throwable t, String msg) {
+            super(msg, t);
+        }
+
+        public String getMessage() {
+            return "q";
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/MultipleConstructors.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/MultipleConstructors.java.after
new file mode 100644
index 0000000..258e701
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/MultipleConstructors.java.after
@@ -0,0 +1,8 @@
+class A {
+    private Object b = new Exception("w", new Throwable()) {
+        public String getMessage() {
+            return "q";
+        }
+    };
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/MultipleGeneratedVars.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/MultipleGeneratedVars.java
new file mode 100644
index 0000000..5598b5f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/MultipleGeneratedVars.java
@@ -0,0 +1,20 @@
+class PrivateInitUser {
+        public void method() {
+          new WithPrivateInit(new CustomType("a"));
+          new WithPrivateInit(new CustomType("b"));
+        }
+
+        public static class CustomType {
+                public CustomType(String s) {
+                }
+        }
+}
+
+class <caret>WithPrivateInit {
+        public WithPrivateInit(PrivateInitUser.CustomType customType) {
+                privateMethod(customType);
+        }
+
+        private void privateMethod(PrivateInitUser.CustomType customType) {
+        }
+}
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/MultipleGeneratedVars.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/MultipleGeneratedVars.java.after
new file mode 100644
index 0000000..6102dc4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/MultipleGeneratedVars.java.after
@@ -0,0 +1,28 @@
+class PrivateInitUser {
+        public void method() {
+            final CustomType customType = new CustomType("a");
+            new Object() {
+                {
+                    privateMethod(customType);
+                }
+
+                private void privateMethod(CustomType customType) {
+                }
+            };
+            final CustomType customType1 = new CustomType("b");
+            new Object() {
+                {
+                    privateMethod(customType1);
+                }
+
+                private void privateMethod(CustomType customType) {
+                }
+            };
+        }
+
+        public static class CustomType {
+                public CustomType(String s) {
+                }
+        }
+}
+
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/MultipleInnerClasses.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/MultipleInnerClasses.java
new file mode 100644
index 0000000..2aa6c88
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/MultipleInnerClasses.java
@@ -0,0 +1,21 @@
+class A {
+    class <caret>Inner {
+        private void a() {
+        }
+
+        private void b() {
+        }
+
+        class InnerA {
+        }
+
+        class InnerB {
+        }
+    }
+}
+
+class B {
+    public void test() {
+        A.Inner inner = new A.Inner();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/MultipleInnerClasses.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/MultipleInnerClasses.java.after
new file mode 100644
index 0000000..ed1e7c2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/MultipleInnerClasses.java.after
@@ -0,0 +1,20 @@
+class A {
+}
+
+class B {
+    public void test() {
+        Object inner = new Object() {
+            private void a() {
+            }
+
+            private void b() {
+            }
+
+            class InnerA {
+            }
+
+            class InnerB {
+            }
+        };
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/NewExpressionContext.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NewExpressionContext.java
new file mode 100644
index 0000000..436ba83
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NewExpressionContext.java
@@ -0,0 +1,13 @@
+class A {
+    private Object b = new Inner();
+    private Object c = new Object() {
+        public void doStuff(Inner i) {
+        }
+    };
+
+    private class <caret>Inner {
+        public String toString() {
+            return "A";
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/NewExpressionContext.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NewExpressionContext.java.after
new file mode 100644
index 0000000..13e8caa
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NewExpressionContext.java.after
@@ -0,0 +1,12 @@
+class A {
+    private Object b = new Object() {
+        public String toString() {
+            return "A";
+        }
+    };
+    private Object c = new Object() {
+        public void doStuff(Object i) {
+        }
+    };
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineAbstract.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineAbstract.java
new file mode 100644
index 0000000..72311c1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineAbstract.java
@@ -0,0 +1,9 @@
+class A {
+    private Object b = new Inner();
+
+    public abstract class <caret>Inner {
+        public String toString() {
+            return "A";
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineAnnotationType.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineAnnotationType.java
new file mode 100644
index 0000000..64287c3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineAnnotationType.java
@@ -0,0 +1,9 @@
+class A {
+    @Inner
+    public void test() {
+    }
+
+}
+
+@interface <caret>Inner {
+}
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineCatchClause.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineCatchClause.java
new file mode 100644
index 0000000..df9de35
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineCatchClause.java
@@ -0,0 +1,18 @@
+class A {
+    public void test() {
+        try {
+            test2();
+        }
+        catch(Inner ex) {
+        }
+    }
+
+    private void test2() {
+    }
+
+    private class <caret>Inner extends RuntimeException {
+        public String toString() {
+            return "A";
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineClassLiteral.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineClassLiteral.java
new file mode 100644
index 0000000..e0a8293
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineClassLiteral.java
@@ -0,0 +1,13 @@
+class A {
+    private Object b = new Inner();
+
+    public void test() {
+        System.out.println(Inner.class.getName());
+    }
+
+    private class <caret>Inner {
+        public String toString() {
+            return "A";
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineEnum.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineEnum.java
new file mode 100644
index 0000000..d007d0d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineEnum.java
@@ -0,0 +1,8 @@
+class A {
+    public void test(Inner b) {
+    }
+}
+
+enum <caret>Inner {
+    A, B
+}
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineFieldUsage.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineFieldUsage.java
new file mode 100644
index 0000000..74d9532
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineFieldUsage.java
@@ -0,0 +1,13 @@
+class A {
+    public void f() {
+        Inner i = new Inner();
+        i.q = 2;
+    }
+
+    private class <caret>Inner implements Runnable {
+        public int q = 1;
+
+        public void run() {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineInterface.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineInterface.java
new file mode 100644
index 0000000..86d114e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineInterface.java
@@ -0,0 +1,8 @@
+class A {
+    public void test(Inner b) {
+    }
+
+    public interface <caret>Inner {
+        void doStuff();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineLibraryClass.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineLibraryClass.java
new file mode 100644
index 0000000..e8566df
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineLibraryClass.java
@@ -0,0 +1,3 @@
+class A {
+    private <caret>String s = new String();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineMethodUsage.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineMethodUsage.java
new file mode 100644
index 0000000..8d49b5c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineMethodUsage.java
@@ -0,0 +1,11 @@
+class A {
+    public void f() {
+        Inner i = new Inner();
+        i.doStuff();
+    }
+
+    private class <caret>Inner {
+        public void doStuff() {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineMultipleInterfaces.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineMultipleInterfaces.java
new file mode 100644
index 0000000..ab2291e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineMultipleInterfaces.java
@@ -0,0 +1,13 @@
+import java.awt.event.*;
+
+class A {
+    private Object b = new Inner();
+
+    public class <caret>Inner implements Runnable, ActionListener {
+        public void run() {
+        }
+
+        public void actionPerformed(ActionEvent e) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineNewWithInner.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineNewWithInner.java
new file mode 100644
index 0000000..2207e42
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineNewWithInner.java
@@ -0,0 +1,10 @@
+class <caret>WithInner {
+    public class Inner {
+    }
+}
+
+class A {
+    public void test() {
+        WithInner.Inner i = new WithInner().new Inner();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineNoUsages.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineNoUsages.java
new file mode 100644
index 0000000..23ec91d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineNoUsages.java
@@ -0,0 +1,7 @@
+class A {
+    private class <caret>Inner {
+        public Inner newInstance() {
+            return new Inner();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineRecursiveAccess.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineRecursiveAccess.java
new file mode 100644
index 0000000..0ae807f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineRecursiveAccess.java
@@ -0,0 +1,20 @@
+public class SelfParams {
+	private int myVar = 0;
+
+	private int myProp = 0;
+	public int getProp() {
+		return myProp;
+	}
+	public void setProp(int prop) {
+		myProp = prop;
+	}
+
+	public void copy(SelfParams sp) {
+		this.myVar = sp.myVar;
+		this.myProp = sp.getProp();
+	}
+}
+
+class Usage {
+  SelfParams s = new Self<caret>Params();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineReturnInConstructor.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineReturnInConstructor.java
new file mode 100644
index 0000000..e006fab
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineReturnInConstructor.java
@@ -0,0 +1,15 @@
+class A {
+    private Object b = new MyException();
+
+    private class <caret>MyException extends Exception {
+        public MyException() {
+            super("w");
+            if (toString().length() == 0) return;
+            System.out.println(toString());
+        }
+
+        public String getMessage() {
+            return "q";
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineStaticField.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineStaticField.java
new file mode 100644
index 0000000..7e26bcd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineStaticField.java
@@ -0,0 +1,11 @@
+import java.io;
+
+class A {
+    public void test() {
+        Inlined i = new Inlined();
+    }
+}
+
+class <caret>Inlined {
+    public static final Stream s = System.out;
+}
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineStaticInitializer.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineStaticInitializer.java
new file mode 100644
index 0000000..a052a4f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineStaticInitializer.java
@@ -0,0 +1,17 @@
+class A {
+    private Object b = new Inner();
+
+    private class <caret>Inner {
+        {
+            // class initializer
+        }
+
+        public String toString() {
+            return "A";
+        }
+
+        static {
+            // static initializer
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineStaticInnerClass.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineStaticInnerClass.java
new file mode 100644
index 0000000..88b94ed
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineStaticInnerClass.java
@@ -0,0 +1,12 @@
+import java.io;
+
+class A {
+    public void test() {
+        Inlined i = new Inlined();
+    }
+}
+
+class <caret>Inlined {
+    public static class A {
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineStaticMethod.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineStaticMethod.java
new file mode 100644
index 0000000..4086b3c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineStaticMethod.java
@@ -0,0 +1,12 @@
+import java.io;
+
+class A {
+    public void test() {
+        Inlined i = new Inlined();
+    }
+}
+
+class <caret>Inlined {
+    public static void main() {
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineStaticNonFinalField.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineStaticNonFinalField.java
new file mode 100644
index 0000000..b4add46
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineStaticNonFinalField.java
@@ -0,0 +1,11 @@
+import java.io;
+
+class A {
+    public void test() {
+        Inlined i = new Inlined();
+    }
+}
+
+class <caret>Inlined {
+    public static String s = "s";
+}
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineSuperclassInterface.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineSuperclassInterface.java
new file mode 100644
index 0000000..ea93368
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineSuperclassInterface.java
@@ -0,0 +1,10 @@
+import java.awt.event.*;
+
+class A {
+    private Object b = new Inner();
+
+    public class <caret>Inner extends Throwable implements Runnable {
+        public void run() {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineThisQualifier.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineThisQualifier.java
new file mode 100644
index 0000000..6e71dbb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineThisQualifier.java
@@ -0,0 +1,15 @@
+class <caret>A {
+  private int b;
+
+  private class B {
+    private int b;
+
+    void doTest() {
+      b = A.this.b;
+    }
+  }
+}
+
+class User {
+  A a = new A();
+}
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineThrowsClause.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineThrowsClause.java
new file mode 100644
index 0000000..8140169
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineThrowsClause.java
@@ -0,0 +1,19 @@
+class A {
+    public void test() {
+        try {
+            test2();
+        }
+        catch(Exception ex) {
+        }
+    }
+
+    private void test2() throws Inner {
+        throw new Inner();
+    }
+
+    private class <caret>Inner extends Exception {
+        public String toString() {
+            return "A";
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineUnresolvedConstructor.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineUnresolvedConstructor.java
new file mode 100644
index 0000000..e0b0c3a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineUnresolvedConstructor.java
@@ -0,0 +1,9 @@
+class A {
+    private Object b = new Inner("q");
+
+    private class <caret>Inner {
+        public String toString() {
+            return "A";
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineUnresolvedConstructor2.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineUnresolvedConstructor2.java
new file mode 100644
index 0000000..b62c0a43
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineUnresolvedConstructor2.java
@@ -0,0 +1,12 @@
+class A {
+    private Object b = new Inner();
+
+    private class <caret>Inner {
+        public Inner(int i) {
+        }
+
+        public String toString() {
+            return "A";
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineUnresolvedInterface.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineUnresolvedInterface.java
new file mode 100644
index 0000000..8bd80ee
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineUnresolvedInterface.java
@@ -0,0 +1,9 @@
+class A {
+    private Object b = new Inner("q");
+
+    private class <caret>Inner implements Someshit {
+        public String toString() {
+            return "A";
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineUnresolvedSuperclass.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineUnresolvedSuperclass.java
new file mode 100644
index 0000000..1b6c1d0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NoInlineUnresolvedSuperclass.java
@@ -0,0 +1,9 @@
+class A {
+    private Object b = new Inner("q");
+
+    private class <caret>Inner extends Someshit {
+        public String toString() {
+            return "A";
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/NullInitializedField.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NullInitializedField.java
new file mode 100644
index 0000000..593d252
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NullInitializedField.java
@@ -0,0 +1,18 @@
+class A {
+    private Object b = new Inner();
+
+    private class <caret>Inner {
+        private String s;
+
+        public Inner() {
+            s=null;
+        }
+
+        public String toString() {
+            if (s == null) {
+                s = "q";
+            }
+            return "A";
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/NullInitializedField.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NullInitializedField.java.after
new file mode 100644
index 0000000..e037058
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/NullInitializedField.java.after
@@ -0,0 +1,13 @@
+class A {
+    private Object b = new Object() {
+        private String s = null;
+
+        public String toString() {
+            if (s == null) {
+                s = "q";
+            }
+            return "A";
+        }
+    };
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/OuterClassFieldAccess.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/OuterClassFieldAccess.java
new file mode 100644
index 0000000..6b052e5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/OuterClassFieldAccess.java
@@ -0,0 +1,14 @@
+class Outer {
+    int i;
+
+    class Inner {
+        public void f() {
+            int j = i;
+        }
+    }
+
+    void foo() {
+        final int i = 0;
+        new <caret>Inner(); 
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/OuterClassFieldAccess.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/OuterClassFieldAccess.java.after
new file mode 100644
index 0000000..fb4d82b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/OuterClassFieldAccess.java.after
@@ -0,0 +1,12 @@
+class Outer {
+    int i;
+
+    void foo() {
+        final int i = 0;
+        new Object() {
+            public void f() {
+                int j = Outer.this.i;
+            }
+        };
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/OverwriteInitializer.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/OverwriteInitializer.java
new file mode 100644
index 0000000..33928871
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/OverwriteInitializer.java
@@ -0,0 +1,18 @@
+class A {
+    private Object b = new Inner(100);
+
+    private class <caret>Inner {
+        private int myInt = 0;
+
+        public Inner() {
+        }
+
+        public Inner(int anInt) {
+	    myInt = anInt;
+        }
+
+        public int getInt() {
+	    return myInt;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/OverwriteInitializer.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/OverwriteInitializer.java.after
new file mode 100644
index 0000000..3187141
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/OverwriteInitializer.java.after
@@ -0,0 +1,10 @@
+class A {
+    private Object b = new Object() {
+        private int myInt = 100;
+
+        public int getInt() {
+	    return myInt;
+        }
+    };
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/ParamTypeReplacement.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ParamTypeReplacement.java
new file mode 100644
index 0000000..0687e1e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ParamTypeReplacement.java
@@ -0,0 +1,13 @@
+public class Simple implements Runnable{
+  void foo(Simple s) {
+    System.out.println(s.toString());
+    s.run();
+  }
+
+  public void run(){
+  }
+}
+
+class Usage {
+  Simple s = new Sim<caret>ple();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/ParamTypeReplacement.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ParamTypeReplacement.java.after
new file mode 100644
index 0000000..5e73698
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/ParamTypeReplacement.java.after
@@ -0,0 +1,11 @@
+class Usage {
+  Runnable s = new Runnable() {
+      void foo(Runnable s) {
+        System.out.println(s.toString());
+        s.run();
+      }
+
+      public void run(){
+      }
+  };
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/PrivateFieldUsedFromInnerClass.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/PrivateFieldUsedFromInnerClass.java
new file mode 100644
index 0000000..eb78c8e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/PrivateFieldUsedFromInnerClass.java
@@ -0,0 +1,19 @@
+class A {
+    class <caret>Inner {
+        private int myNonStaticField = 0;
+
+        class InnerNonStatic {
+            private int myInsField = 0;
+
+            public void insMethod() {
+                myNonStaticField += myInsField;
+            }
+        }
+    }
+}
+
+class B {
+    public void test() {
+        A.Inner inner = new A.Inner();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/PrivateFieldUsedFromInnerClass.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/PrivateFieldUsedFromInnerClass.java.after
new file mode 100644
index 0000000..b890a11
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/PrivateFieldUsedFromInnerClass.java.after
@@ -0,0 +1,18 @@
+class A {
+}
+
+class B {
+    public void test() {
+        Object inner = new Object() {
+            private int myNonStaticField = 0;
+            
+            class InnerNonStatic {
+                private int myInsField = 0;
+
+                public void insMethod() {
+                    myNonStaticField += myInsField;
+                }
+            }
+        };
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/QualifiedNew.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/QualifiedNew.java
new file mode 100644
index 0000000..86dc4c0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/QualifiedNew.java
@@ -0,0 +1,18 @@
+public class QualifiedNewTest {
+    public class C2 {
+        private int a;
+
+        public class <caret>C2Inner {
+            public void doStuff() {
+                System.out.println(a);
+            }
+        }
+    }
+
+    public class C2User {
+        public void test() {
+            C2 c2 = new C2();
+            C2.C2Inner inner = c2.new C2Inner();
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/QualifiedNew.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/QualifiedNew.java.after
new file mode 100644
index 0000000..db4f546
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/QualifiedNew.java.after
@@ -0,0 +1,18 @@
+public class QualifiedNewTest {
+    public class C2 {
+        private int a;
+
+    }
+
+    public class C2User {
+        public void test() {
+            C2 c2 = new C2();
+            final C2 c21 = c2;
+            Object inner = new Object() {
+                public void doStuff() {
+                    System.out.println(c21.a);
+                }
+            };
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/QualifyInner.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/QualifyInner.java
new file mode 100644
index 0000000..c8a204f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/QualifyInner.java
@@ -0,0 +1,17 @@
+public class QualifyInnerTest {
+    public class C2User {
+        public void test() {
+            C2.C2Inner inner = new C2.C2Inner();
+        }
+    }
+}
+
+class C2 {
+    public static int a;
+
+    public static class <caret>C2Inner {
+        public void doStuff() {
+            System.out.println(a);
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/QualifyInner.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/QualifyInner.java.after
new file mode 100644
index 0000000..f20b017
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/QualifyInner.java.after
@@ -0,0 +1,16 @@
+public class QualifyInnerTest {
+    public class C2User {
+        public void test() {
+            Object inner = new Object() {
+                public void doStuff() {
+                    System.out.println(C2.a);
+                }
+            };
+        }
+    }
+}
+
+class C2 {
+    public static int a;
+
+}
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/QualifyParentStaticReferences.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/QualifyParentStaticReferences.java
new file mode 100644
index 0000000..a151360
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/QualifyParentStaticReferences.java
@@ -0,0 +1,18 @@
+class ParentCtor {
+    public static final String PARENT_CONST = "";
+
+    public ParentCtor(String s) {
+    }
+}
+
+class ChildCtor extends ParentCtor {
+    public ChildCtor(boolean b) {
+        super(PARENT_CONST);
+    }
+}
+
+class Usage {
+    public void test() {
+        new <caret>ChildCtor(true);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/QualifyParentStaticReferences.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/QualifyParentStaticReferences.java.after
new file mode 100644
index 0000000..9a70fba
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/QualifyParentStaticReferences.java.after
@@ -0,0 +1,12 @@
+class ParentCtor {
+    public static final String PARENT_CONST = "";
+
+    public ParentCtor(String s) {
+    }
+}
+
+class Usage {
+    public void test() {
+        new ParentCtor(ParentCtor.PARENT_CONST);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/RedundantImplementsInterface.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/RedundantImplementsInterface.java
new file mode 100644
index 0000000..858459a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/RedundantImplementsInterface.java
@@ -0,0 +1,13 @@
+import java.awt.event.*;
+
+class A {
+    private ActionListener b = new Inner();
+
+    private abstract class MyActionListener implements ActionListener {
+    }
+
+    private class <caret>Inner extends MyActionListener implements ActionListener {
+        public void actionPerformed(ActionEvent e) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/RedundantImplementsInterface.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/RedundantImplementsInterface.java.after
new file mode 100644
index 0000000..7505f78
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/RedundantImplementsInterface.java.after
@@ -0,0 +1,12 @@
+import java.awt.event.*;
+
+class A {
+    private ActionListener b = new MyActionListener() {
+        public void actionPerformed(ActionEvent e) {
+        }
+    };
+
+    private abstract class MyActionListener implements ActionListener {
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/SelfReference.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/SelfReference.java
new file mode 100644
index 0000000..eeb8f6c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/SelfReference.java
@@ -0,0 +1,11 @@
+class A {
+    public class <caret>Inner {
+        private Inner myI;
+        private Inner myI2;
+    }
+}
+
+class B {
+    private A.Inner b = new A.Inner();
+    
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/SelfReference.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/SelfReference.java.after
new file mode 100644
index 0000000..aadf04d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/SelfReference.java.after
@@ -0,0 +1,10 @@
+class A {
+}
+
+class B {
+    private Object b = new Object() {
+        private Object myI;
+        private Object myI2;
+    };
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/Simple.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/Simple.java
new file mode 100644
index 0000000..7eb3a2b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/Simple.java
@@ -0,0 +1,9 @@
+class A {
+    private Object b = new Inner();
+
+    private class <caret>Inner {
+        public String toString() {
+            return "A";
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/Simple.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/Simple.java.after
new file mode 100644
index 0000000..cf5eb6f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/Simple.java.after
@@ -0,0 +1,8 @@
+class A {
+    private Object b = new Object() {
+        public String toString() {
+            return "A";
+        }
+    };
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/StaticConstantField.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/StaticConstantField.java
new file mode 100644
index 0000000..2ea2213
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/StaticConstantField.java
@@ -0,0 +1,11 @@
+import java.io;
+
+class A {
+    public void test() {
+        Inlined i = new Inlined();
+    }
+}
+
+class <caret>Inlined {
+    public static final String s = "s";
+}
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/StaticConstantField.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/StaticConstantField.java.after
new file mode 100644
index 0000000..52f3f85
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/StaticConstantField.java.after
@@ -0,0 +1,10 @@
+import java.io;
+
+class A {
+    public void test() {
+        Object i = new Object() {
+            public static final String s = "s";
+        };
+    }
+}
+
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/StringInMethodCallFromConstructor.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/StringInMethodCallFromConstructor.java
new file mode 100644
index 0000000..f00d5c6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/StringInMethodCallFromConstructor.java
@@ -0,0 +1,17 @@
+class <caret>Inlined {
+    private int myA;
+
+    public Inlined(String s) {
+        process(s);
+    }
+
+    public void process(String s) {
+        myA = s.length();
+    }
+}
+
+class C {
+    public void test() {
+        Inlined i = new Inlined("a");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/StringInMethodCallFromConstructor.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/StringInMethodCallFromConstructor.java.after
new file mode 100644
index 0000000..0c2ca770
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/StringInMethodCallFromConstructor.java.after
@@ -0,0 +1,15 @@
+class C {
+    public void test() {
+        Object i = new Object() {
+            private int myA;
+
+            {
+                process("a");
+            }
+
+            public void process(String s) {
+                myA = s.length();
+            }
+        };
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/Varargs.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/Varargs.java
new file mode 100644
index 0000000..aeb90ae
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/Varargs.java
@@ -0,0 +1,17 @@
+class A {
+    public void test() {
+        Object o = new Inner(1, 2, 3);
+    }
+
+    private class <caret>Inner {
+        private int length;
+
+        public Inner(int... values) {
+            length = values.length;
+        }
+
+        public String toString() {
+            return Integer.toString(length);
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/Varargs.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/Varargs.java.after
new file mode 100644
index 0000000..1404fe1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/Varargs.java.after
@@ -0,0 +1,17 @@
+class A {
+    public void test() {
+        final int[] values = new int[]{1, 2, 3};
+        Object o = new Object() {
+            private int length;
+
+            {
+                length = values.length;
+            }
+
+            public String toString() {
+                return Integer.toString(length);
+            }
+        };
+    }
+    
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/WritableFieldInitializedWithParameter.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/WritableFieldInitializedWithParameter.java
new file mode 100644
index 0000000..ed06f91
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/WritableFieldInitializedWithParameter.java
@@ -0,0 +1,19 @@
+class A {
+    public void doTest() {
+        int i = 2;
+        Object b = new Inner(i*2);
+    }
+
+    private class <caret>Inner {
+        private int i;
+
+        public Inner(int arg) {
+            i=arg;
+        }
+
+        public String toString() {
+            i++;
+            return "A";
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/WritableFieldInitializedWithParameter.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/WritableFieldInitializedWithParameter.java.after
new file mode 100644
index 0000000..3d4daee
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/WritableFieldInitializedWithParameter.java.after
@@ -0,0 +1,15 @@
+class A {
+    public void doTest() {
+        int i = 2;
+        final int arg = i * 2;
+        Object b = new Object() {
+            private int i = arg;
+
+            public String toString() {
+                i++;
+                return "A";
+            }
+        };
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/WritableInitializedField.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/WritableInitializedField.java
new file mode 100644
index 0000000..0667e6e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/WritableInitializedField.java
@@ -0,0 +1,16 @@
+class A {
+    private Object b = new Inner();
+
+    private class <caret>Inner {
+        private int i;
+
+        public Inner() {
+            i=0;
+        }
+
+        public String toString() {
+            i++;
+            return "A";
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/WritableInitializedField.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/WritableInitializedField.java.after
new file mode 100644
index 0000000..56a355c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/WritableInitializedField.java.after
@@ -0,0 +1,11 @@
+class A {
+    private Object b = new Object() {
+        private int i = 0;
+
+        public String toString() {
+            i++;
+            return "A";
+        }
+    };
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/importForConstructor/after/p1/ParentUniqueName.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/importForConstructor/after/p1/ParentUniqueName.java
new file mode 100644
index 0000000..c60b1e6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/importForConstructor/after/p1/ParentUniqueName.java
@@ -0,0 +1,4 @@
+package p1;
+
+public class ParentUniqueName {
+}
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/importForConstructor/after/p2/Usage.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/importForConstructor/after/p2/Usage.java
new file mode 100644
index 0000000..ba97cdc1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/importForConstructor/after/p2/Usage.java
@@ -0,0 +1,12 @@
+package p2;
+
+import p1.ParentUniqueName;
+
+public class Usage {
+    public void test() {
+        equals(new ParentUniqueName() {
+            public void test() {
+            }
+        });
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/importForConstructor/before/p1/ChildCtor.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/importForConstructor/before/p1/ChildCtor.java
new file mode 100644
index 0000000..9f90d96
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/importForConstructor/before/p1/ChildCtor.java
@@ -0,0 +1,6 @@
+package p1;
+
+public class ChildCtor extends ParentUniqueName {
+    public void test() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/importForConstructor/before/p1/ParentUniqueName.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/importForConstructor/before/p1/ParentUniqueName.java
new file mode 100644
index 0000000..c60b1e6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/importForConstructor/before/p1/ParentUniqueName.java
@@ -0,0 +1,4 @@
+package p1;
+
+public class ParentUniqueName {
+}
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/importForConstructor/before/p2/Usage.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/importForConstructor/before/p2/Usage.java
new file mode 100644
index 0000000..3eafe54
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/importForConstructor/before/p2/Usage.java
@@ -0,0 +1,9 @@
+package p2;
+
+import p1.ChildCtor;
+
+public class Usage {
+    public void test() {
+        equals(new ChildCtor());
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/protectedMember/after/p1/ParentWithProtected.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/protectedMember/after/p1/ParentWithProtected.java
new file mode 100644
index 0000000..c9757dd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/protectedMember/after/p1/ParentWithProtected.java
@@ -0,0 +1,9 @@
+package p1;
+
+public class ParentWithProtected {
+  protected int myOwn = 0;
+
+  protected void increaseMe(int i) {
+	myOwn += i;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/protectedMember/after/p2/Usage.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/protectedMember/after/p2/Usage.java
new file mode 100644
index 0000000..2c40319
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/protectedMember/after/p2/Usage.java
@@ -0,0 +1,13 @@
+package p2;
+
+import p1.ParentWithProtected;
+
+public class Usage {
+    public void test() {
+        ParentWithProtected sws = new ParentWithProtected() {
+            public void creaseMe(int i) {
+              increaseMe(i);
+            }
+        };
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/protectedMember/before/p1/ParentWithProtected.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/protectedMember/before/p1/ParentWithProtected.java
new file mode 100644
index 0000000..c9757dd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/protectedMember/before/p1/ParentWithProtected.java
@@ -0,0 +1,9 @@
+package p1;
+
+public class ParentWithProtected {
+  protected int myOwn = 0;
+
+  protected void increaseMe(int i) {
+	myOwn += i;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/protectedMember/before/p1/SubjectWithSuper.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/protectedMember/before/p1/SubjectWithSuper.java
new file mode 100644
index 0000000..a5fa8a8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/protectedMember/before/p1/SubjectWithSuper.java
@@ -0,0 +1,7 @@
+package p1;
+
+public class SubjectWithSuper extends ParentWithProtected {
+    public void creaseMe(int i) {
+  	increaseMe(i);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/protectedMember/before/p2/Usage.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/protectedMember/before/p2/Usage.java
new file mode 100644
index 0000000..729b6d9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/protectedMember/before/p2/Usage.java
@@ -0,0 +1,9 @@
+package p2;
+
+import p1.SubjectWithSuper;
+
+public class Usage {
+    public void test() {
+        SubjectWithSuper sws = new SubjectWithSuper();    
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/staticImports/after/p1/Usage.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/staticImports/after/p1/Usage.java
new file mode 100644
index 0000000..205e3f1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/staticImports/after/p1/Usage.java
@@ -0,0 +1,11 @@
+package p1;
+
+import static p2.Statics.PUB_CONST;
+
+public class Usage {
+    public void test() {
+        Object i = new Object() {
+            public int myInt = PUB_CONST;
+        };
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/staticImports/after/p2/Statics.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/staticImports/after/p2/Statics.java
new file mode 100644
index 0000000..c379ad6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/staticImports/after/p2/Statics.java
@@ -0,0 +1,5 @@
+package p2;
+
+public class Statics {
+    public static final int PUB_CONST = 0;
+}
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/staticImports/before/p1/Inlined.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/staticImports/before/p1/Inlined.java
new file mode 100644
index 0000000..bf73f2d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/staticImports/before/p1/Inlined.java
@@ -0,0 +1,15 @@
+package p1;
+
+import static p2.Statics.PUB_CONST;
+
+public class Inlined {
+    public int myInt = PUB_CONST;
+
+    public Inlined() {
+       this(PUB_CONST);
+    }
+
+    public Inlined(int i) {
+        myInt = i;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/staticImports/before/p1/Usage.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/staticImports/before/p1/Usage.java
new file mode 100644
index 0000000..e711ebb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/staticImports/before/p1/Usage.java
@@ -0,0 +1,7 @@
+package p1;
+
+public class Usage {
+    public void test() {
+        Inlined i = new Inlined();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/staticImports/before/p2/Statics.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/staticImports/before/p2/Statics.java
new file mode 100644
index 0000000..c379ad6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/multifile/staticImports/before/p2/Statics.java
@@ -0,0 +1,5 @@
+package p2;
+
+public class Statics {
+    public static final int PUB_CONST = 0;
+}
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceConstant/conflictingConstantName.java b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/conflictingConstantName.java
new file mode 100644
index 0000000..ae0b37a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/conflictingConstantName.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2000-2011 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 Test {
+    private static final String FOO = "foo";
+    public void method(Map<Object, Object> args) {
+      System.out.println(FOO);
+      System.out.println("fo<caret>o");
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceConstant/conflictingConstantName_after.java b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/conflictingConstantName_after.java
new file mode 100644
index 0000000..208461b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/conflictingConstantName_after.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2000-2011 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 Test {
+    private static final String FOO = "foo";
+    public static final String FOO1 = "foo";
+
+    public void method(Map<Object, Object> args) {
+      System.out.println(FOO);
+      System.out.println(FOO1);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceConstant/correctConstantPosition.java b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/correctConstantPosition.java
new file mode 100644
index 0000000..2b73b87
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/correctConstantPosition.java
@@ -0,0 +1,18 @@
+public class Res {
+
+    void bar(R r){}
+
+    interface R<S, T> {
+        void la(S s, T t);
+    }
+
+    private void validateStructuresCookie(Res cookie) {
+        cookie.bar(new <caret>R<String, Object>(){
+            final String param = "";
+            @Override
+            public void la(String s, Object o) {
+                System.out.println(param);
+            }
+        });
+      }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceConstant/correctConstantPosition_after.java b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/correctConstantPosition_after.java
new file mode 100644
index 0000000..1e994b8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/correctConstantPosition_after.java
@@ -0,0 +1,21 @@
+public class Res {
+
+    public static final Res.R<String,Object> R = new Res.R<String, Object>() {
+        final String param = "";
+
+        @Override
+        public void la(String s, Object o) {
+            System.out.println(param);
+        }
+    };
+
+    void bar(R r){}
+
+    interface R<S, T> {
+        void la(S s, T t);
+    }
+
+    private void validateStructuresCookie(Res cookie) {
+        cookie.bar(<caret>R);
+      }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceConstant/correctFinalPosition.java b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/correctFinalPosition.java
new file mode 100644
index 0000000..c7427d9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/correctFinalPosition.java
@@ -0,0 +1,3 @@
+class Test {
+    private static final int FOO = 60 * 6<caret>0;
+}
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceConstant/correctFinalPosition_after.java b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/correctFinalPosition_after.java
new file mode 100644
index 0000000..b30ac39
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/correctFinalPosition_after.java
@@ -0,0 +1,4 @@
+class Test {
+    public static final int SEC = 60;
+    private static final int FOO = 60 * <caret>SEC;
+}
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceConstant/escapePosition.java b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/escapePosition.java
new file mode 100644
index 0000000..1a44e3b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/escapePosition.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright 2000-2011 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 Test {
+    void simpleMethod() {
+        System.out.println("<caret>");
+        System.out.println("");
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceConstant/escapePositionOnLocal.java b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/escapePositionOnLocal.java
new file mode 100644
index 0000000..b4f03ac
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/escapePositionOnLocal.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2000-2011 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 Test {
+    void simpleMethod() {
+        boolean b<caret>b = false;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceConstant/escapePositionOnLocal_after.java b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/escapePositionOnLocal_after.java
new file mode 100644
index 0000000..8f7a98d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/escapePositionOnLocal_after.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright 2000-2011 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 Test {
+
+    void simpleMethod() {
+        boolean <caret>bb = false;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceConstant/escapePosition_after.java b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/escapePosition_after.java
new file mode 100644
index 0000000..e4dd533
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/escapePosition_after.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2000-2011 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 Test {
+
+    void simpleMethod() {
+        System.out.println(<caret>"");
+        System.out.println("");
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceConstant/noConflictingConstantName.java b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/noConflictingConstantName.java
new file mode 100644
index 0000000..5cf132e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/noConflictingConstantName.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright 2000-2011 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 Test {
+    public void method(String FOO) {
+      System.out.println(FOO);
+      System.out.println("fo<caret>o");
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceConstant/noConflictingConstantName_after.java b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/noConflictingConstantName_after.java
new file mode 100644
index 0000000..527c41a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/noConflictingConstantName_after.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2000-2011 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 Test {
+
+    public static final String FOO = "foo";
+
+    public void method(String FOO) {
+      System.out.println(FOO);
+      System.out.println(Test.FOO);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceConstant/replaceAll.java b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/replaceAll.java
new file mode 100644
index 0000000..f897c3a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/replaceAll.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2000-2011 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 Test {
+    private static final Object LOG = null;
+    private final Set<Map> myMethods = new HashSet<Map>();
+    private final Set<Map> myMethods1 = new HashSet<Map>();
+    public void method(Map<Object, Object> args) {
+        final Object toThrow = args.get("throws");
+        if (toThrow instanceof List) {
+            final ArrayList<String> list = new ArrayList<String>();
+            args.put("thr<caret>ows", list);
+        } else if (toThrow != null) {
+            args.put("throws", Collections.singleton(toThrow));
+        }
+        myMethods.add(args);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceConstant/replaceAllFromSecondOccurrence.java b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/replaceAllFromSecondOccurrence.java
new file mode 100644
index 0000000..27e9fc9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/replaceAllFromSecondOccurrence.java
@@ -0,0 +1,15 @@
+import java.lang.String;
+
+class A {
+  A(String str) {
+  }
+  
+  public static String getVeryLongString() {
+    return "";
+  }
+  
+  void foo() {
+    A a = new A(getVeryLongString());
+    A a1 = new A(getVery<caret>LongString());
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceConstant/replaceAllFromSecondOccurrence_after.java b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/replaceAllFromSecondOccurrence_after.java
new file mode 100644
index 0000000..0c8c9fa
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/replaceAllFromSecondOccurrence_after.java
@@ -0,0 +1,18 @@
+import java.lang.String;
+
+class A {
+
+    public static final String O = getVeryLongString();
+
+    A(String str) {
+  }
+  
+  public static String getVeryLongString() {
+    return "";
+  }
+  
+  void foo() {
+    A a = new A(O);
+    A a1 = new A(O);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceConstant/replaceAllWithClassRefType.java b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/replaceAllWithClassRefType.java
new file mode 100644
index 0000000..0f19f25
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/replaceAllWithClassRefType.java
@@ -0,0 +1,10 @@
+public class Derr {
+
+    public static void main(String[] args) {
+        long value;
+
+        value = new Lo<caret>ng(1);
+        value = new Long(1);
+        value = new Long(1);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceConstant/replaceAllWithClassRefType_after.java b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/replaceAllWithClassRefType_after.java
new file mode 100644
index 0000000..4ffba02
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/replaceAllWithClassRefType_after.java
@@ -0,0 +1,12 @@
+public class Derr {
+
+    public static final Long LONGONE = new Long(1);
+
+    public static void main(String[] args) {
+        long value;
+
+        value = LONGONE;
+        value = LONGONE;
+        value = LONGONE;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceConstant/replaceAll_after.java b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/replaceAll_after.java
new file mode 100644
index 0000000..d5f27a3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/replaceAll_after.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2000-2011 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 Test {
+    private static final Object LOG = null;
+    public static final String THROWS = "throws";
+    private final Set<Map> myMethods = new HashSet<Map>();
+    private final Set<Map> myMethods1 = new HashSet<Map>();
+    public void method(Map<Object, Object> args) {
+        final Object toThrow = args.get(THROWS);
+        if (toThrow instanceof List) {
+            final ArrayList<String> list = new ArrayList<String>();
+            args.put(THROWS, list);
+        } else if (toThrow != null) {
+            args.put(THROWS, Collections.singleton(toThrow));
+        }
+        myMethods.add(args);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceField/anchor.java b/java/java-tests/testData/refactoring/inplaceIntroduceField/anchor.java
new file mode 100644
index 0000000..322f4b8e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceField/anchor.java
@@ -0,0 +1,5 @@
+class Test {
+  void foo(boolean opaque) {
+    opaq<caret>ue
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceField/anchor1.java b/java/java-tests/testData/refactoring/inplaceIntroduceField/anchor1.java
new file mode 100644
index 0000000..a02dfa3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceField/anchor1.java
@@ -0,0 +1,8 @@
+import java.util.*;
+class ExtractFieldCompilationFailureTest {
+  private ArrayList aelements = new ArrayList();
+
+  public void test() {
+    aelements.it<caret>erator();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceField/anchor1_after.java b/java/java-tests/testData/refactoring/inplaceIntroduceField/anchor1_after.java
new file mode 100644
index 0000000..6a4ad8d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceField/anchor1_after.java
@@ -0,0 +1,9 @@
+import java.util.*;
+class ExtractFieldCompilationFailureTest {
+  private ArrayList aelements = new ArrayList();
+    private Iterator iterator;
+
+    public void test() {
+        iterator = aelements.iterator();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceField/anchor_after.java b/java/java-tests/testData/refactoring/inplaceIntroduceField/anchor_after.java
new file mode 100644
index 0000000..020e8ee
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceField/anchor_after.java
@@ -0,0 +1,8 @@
+class Test {
+
+    private boolean opaque;
+
+    void foo(boolean opaque) {
+        this.opaque = opaque;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceField/beforeAssignment.java b/java/java-tests/testData/refactoring/inplaceIntroduceField/beforeAssignment.java
new file mode 100644
index 0000000..7e8cace
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceField/beforeAssignment.java
@@ -0,0 +1,8 @@
+class Test {
+  private String myTimer;
+
+  Test() {
+    "<caret>"
+    myTimer = "abc";
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceField/beforeAssignmentReplaceAll.java b/java/java-tests/testData/refactoring/inplaceIntroduceField/beforeAssignmentReplaceAll.java
new file mode 100644
index 0000000..4a35a0b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceField/beforeAssignmentReplaceAll.java
@@ -0,0 +1,8 @@
+class Test {
+  private String myTimer;
+
+  Test() {
+    "<caret>"
+    myTimer = "";
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceField/beforeAssignmentReplaceAllCall.java b/java/java-tests/testData/refactoring/inplaceIntroduceField/beforeAssignmentReplaceAllCall.java
new file mode 100644
index 0000000..e737770
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceField/beforeAssignmentReplaceAllCall.java
@@ -0,0 +1,10 @@
+class Test {
+    private Foo myFoo;
+
+    Test() {
+        new Fo<caret>o()
+        myFoo = new Foo();
+    }
+}
+
+class Foo{}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceField/beforeAssignmentReplaceAllCall_after.java b/java/java-tests/testData/refactoring/inplaceIntroduceField/beforeAssignmentReplaceAllCall_after.java
new file mode 100644
index 0000000..ed252a2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceField/beforeAssignmentReplaceAllCall_after.java
@@ -0,0 +1,11 @@
+class Test {
+    private final Foo foo;
+    private Foo myFoo;
+
+    Test() {
+        foo = new Foo();
+        myFoo = foo;
+    }
+}
+
+class Foo{}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceField/beforeAssignmentReplaceAll_after.java b/java/java-tests/testData/refactoring/inplaceIntroduceField/beforeAssignmentReplaceAll_after.java
new file mode 100644
index 0000000..356bd37
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceField/beforeAssignmentReplaceAll_after.java
@@ -0,0 +1,9 @@
+class Test {
+    private final String string;
+    private String myTimer;
+
+    Test() {
+        string = "";<caret>
+        myTimer = string;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceField/beforeAssignment_after.java b/java/java-tests/testData/refactoring/inplaceIntroduceField/beforeAssignment_after.java
new file mode 100644
index 0000000..8c1a737
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceField/beforeAssignment_after.java
@@ -0,0 +1,9 @@
+class Test {
+    private final String string;
+    private String myTimer;
+
+    Test() {
+        string = "";
+        myTimer = "abc";
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceField/escapePosition.java b/java/java-tests/testData/refactoring/inplaceIntroduceField/escapePosition.java
new file mode 100644
index 0000000..b1a33a4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceField/escapePosition.java
@@ -0,0 +1,6 @@
+class Test {
+    void simpleMethod() {
+        System.out.println("<caret>");
+        System.out.println("");
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceField/escapePositionOnLocal.java b/java/java-tests/testData/refactoring/inplaceIntroduceField/escapePositionOnLocal.java
new file mode 100644
index 0000000..429535e3a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceField/escapePositionOnLocal.java
@@ -0,0 +1,5 @@
+class Test {
+    void simpleMethod() {
+        boolean b<caret>b;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceField/escapePositionOnLocal_after.java b/java/java-tests/testData/refactoring/inplaceIntroduceField/escapePositionOnLocal_after.java
new file mode 100644
index 0000000..c663151
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceField/escapePositionOnLocal_after.java
@@ -0,0 +1,6 @@
+class Test {
+
+    void simpleMethod() {
+        boolean <caret>bb;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceField/escapePosition_after.java b/java/java-tests/testData/refactoring/inplaceIntroduceField/escapePosition_after.java
new file mode 100644
index 0000000..a639e2c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceField/escapePosition_after.java
@@ -0,0 +1,7 @@
+class Test {
+
+    void simpleMethod() {
+        System.out.println(<caret>"");
+        System.out.println("");
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceField/replaceAll.java b/java/java-tests/testData/refactoring/inplaceIntroduceField/replaceAll.java
new file mode 100644
index 0000000..1a44e3b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceField/replaceAll.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright 2000-2011 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 Test {
+    void simpleMethod() {
+        System.out.println("<caret>");
+        System.out.println("");
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceField/replaceAll_after.java b/java/java-tests/testData/refactoring/inplaceIntroduceField/replaceAll_after.java
new file mode 100644
index 0000000..a818fa6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceField/replaceAll_after.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright 2000-2011 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 Test {
+
+    private String x;
+
+    void simpleMethod() {
+        x = "";
+        System.out.println(x);
+        System.out.println(x);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceField/restoreNewExpression.java b/java/java-tests/testData/refactoring/inplaceIntroduceField/restoreNewExpression.java
new file mode 100644
index 0000000..40f2480
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceField/restoreNewExpression.java
@@ -0,0 +1,18 @@
+public class MyClass {
+    public void test() {
+      if (new In<caret>ner().isWriteReplace()) {
+        return new Inner().writeReplace();
+      }
+      return false;
+    }
+
+  private class Inner {
+      public boolean isWriteReplace() {
+          return false;
+      }
+  
+      public boolean writeReplace() {
+          return false;
+      }
+  }
+}
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceField/restoreNewExpression_after.java b/java/java-tests/testData/refactoring/inplaceIntroduceField/restoreNewExpression_after.java
new file mode 100644
index 0000000..b3aff03
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceField/restoreNewExpression_after.java
@@ -0,0 +1,22 @@
+public class MyClass {
+
+    private Inner inner;
+
+    public void test() {
+        inner = new Inner();
+        if (inner.isWriteReplace()) {
+        return inner.writeReplace();
+      }
+      return false;
+    }
+
+  private class Inner {
+      public boolean isWriteReplace() {
+          return false;
+      }
+  
+      public boolean writeReplace() {
+          return false;
+      }
+  }
+}
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceField/templateAdjustment.java b/java/java-tests/testData/refactoring/inplaceIntroduceField/templateAdjustment.java
new file mode 100644
index 0000000..b5ec69e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceField/templateAdjustment.java
@@ -0,0 +1,5 @@
+class Test {
+  int f(){
+    return<caret>-1;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceField/templateAdjustment_after.java b/java/java-tests/testData/refactoring/inplaceIntroduceField/templateAdjustment_after.java
new file mode 100644
index 0000000..04a3a31
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceField/templateAdjustment_after.java
@@ -0,0 +1,9 @@
+class Test {
+
+    private int anInt;
+
+    int f(){
+        anInt = -1;
+        return anInt;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceParameter/escapePosition.java b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/escapePosition.java
new file mode 100644
index 0000000..b1a33a4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/escapePosition.java
@@ -0,0 +1,6 @@
+class Test {
+    void simpleMethod() {
+        System.out.println("<caret>");
+        System.out.println("");
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceParameter/escapePositionOnLocal.java b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/escapePositionOnLocal.java
new file mode 100644
index 0000000..429535e3a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/escapePositionOnLocal.java
@@ -0,0 +1,5 @@
+class Test {
+    void simpleMethod() {
+        boolean b<caret>b;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceParameter/escapePositionOnLocal_after.java b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/escapePositionOnLocal_after.java
new file mode 100644
index 0000000..d7f32ec
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/escapePositionOnLocal_after.java
@@ -0,0 +1,5 @@
+class Test {
+    void simpleMethod() {
+        boolean <caret>bb;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceParameter/escapePosition_after.java b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/escapePosition_after.java
new file mode 100644
index 0000000..fe58d5a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/escapePosition_after.java
@@ -0,0 +1,6 @@
+class Test {
+    void simpleMethod() {
+        System.out.println(<caret>"");
+        System.out.println("");
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceParameter/extractConflictingParamOverLocal.java b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/extractConflictingParamOverLocal.java
new file mode 100644
index 0000000..257ab0e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/extractConflictingParamOverLocal.java
@@ -0,0 +1,8 @@
+class Test {
+
+    void foo(int p) {
+        int i<caret>i = 4 + 2;
+        //comment
+        String var = "";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceParameter/extractParamOverLocal.java b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/extractParamOverLocal.java
new file mode 100644
index 0000000..72e1448
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/extractParamOverLocal.java
@@ -0,0 +1,8 @@
+class Test {
+
+    void foo() {
+        int i<caret>i = 4 + 2;
+        //comment
+        String var = "";
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceParameter/extractParamOverLocal_after.java b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/extractParamOverLocal_after.java
new file mode 100644
index 0000000..60829de5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/extractParamOverLocal_after.java
@@ -0,0 +1,7 @@
+class Test {
+
+    void foo(int ii) {
+        <caret>//comment
+        String var = "";
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceParameter/paramNameEqMethodName.java b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/paramNameEqMethodName.java
new file mode 100644
index 0000000..8a724c8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/paramNameEqMethodName.java
@@ -0,0 +1,10 @@
+class A {
+  int f() {
+    return 0;
+  }
+
+  void m() {
+    f<caret>();
+    f();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceParameter/paramNameEqMethodName_after.java b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/paramNameEqMethodName_after.java
new file mode 100644
index 0000000..7216093
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/paramNameEqMethodName_after.java
@@ -0,0 +1,9 @@
+class A {
+  int f() {
+    return 0;
+  }
+
+  void m(int f) {
+      f();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceParameter/replaceAll.java b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/replaceAll.java
new file mode 100644
index 0000000..4300b29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/replaceAll.java
@@ -0,0 +1,6 @@
+class Test {
+    void foo() {
+        System.out.println("hello");
+        System.out.println("hel<caret>lo");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceParameter/replaceAll1.java b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/replaceAll1.java
new file mode 100644
index 0000000..663a918
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/replaceAll1.java
@@ -0,0 +1,59 @@
+public abstract class PartnerAuthenticationInterceptor {
+
+
+    protected boolean validateProtection(PartnerAuthentication partnerAuthentication) {
+        tryPartnerAuthenticationTypes(partnerAuthentication, validated, ip, partner, "serviceGroup");
+
+        return false;
+    }
+
+
+    private boolean tryPartnerAuthenticationTypes(PartnerAuthentication partnerAuthentication, boolean validated, String ip, String partner, String serviceGroup) {
+        if (partnerAuthentication.typ<caret>e() == PartnerAuthenticationType.IP_PARTNER_ID) {
+
+        } else if (partnerAuthentication.type() == PartnerAuthenticationType.IP) {
+        }
+        return validated;
+    }
+
+
+    private class PartnerAuthentication {
+        public String serviceGroup() {
+            return null;  //To change body of created methods use File | Settings | File Templates.
+        }
+
+        public String type() {
+            return null;
+        }
+    }
+
+    private static class PartnerIdHolder {
+        private static PartnerIP partnerIP;
+
+        public static PartnerIP getPartnerIP() {
+            return partnerIP;
+        }
+    }
+
+    private class PartnerIP {
+        private String ip;
+        private String partner;
+        private boolean valid;
+
+        public String getIp() {
+            return ip;
+        }
+
+        public String getPartner() {
+            return partner;
+        }
+
+        public boolean isValid() {
+            return valid;
+        }
+    }
+
+    private class PartnerAuthenticationType {
+        public static final String IP_PARTNER_ID = "id";
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceParameter/replaceAll1_after.java b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/replaceAll1_after.java
new file mode 100644
index 0000000..b40cea1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/replaceAll1_after.java
@@ -0,0 +1,59 @@
+public abstract class PartnerAuthenticationInterceptor {
+
+
+    protected boolean validateProtection(PartnerAuthentication partnerAuthentication) {
+        tryPartnerAuthenticationTypes(validated, ip, partner, "serviceGroup", partnerAuthentication.type());
+
+        return false;
+    }
+
+
+    private boolean tryPartnerAuthenticationTypes(boolean validated, String ip, String partner, String serviceGroup, String type) {
+        if (type == PartnerAuthenticationType.IP_PARTNER_ID) {
+
+        } else if (type == PartnerAuthenticationType.IP) {
+        }
+        return validated;
+    }
+
+
+    private class PartnerAuthentication {
+        public String serviceGroup() {
+            return null;  //To change body of created methods use File | Settings | File Templates.
+        }
+
+        public String type() {
+            return null;
+        }
+    }
+
+    private static class PartnerIdHolder {
+        private static PartnerIP partnerIP;
+
+        public static PartnerIP getPartnerIP() {
+            return partnerIP;
+        }
+    }
+
+    private class PartnerIP {
+        private String ip;
+        private String partner;
+        private boolean valid;
+
+        public String getIp() {
+            return ip;
+        }
+
+        public String getPartner() {
+            return partner;
+        }
+
+        public boolean isValid() {
+            return valid;
+        }
+    }
+
+    private class PartnerAuthenticationType {
+        public static final String IP_PARTNER_ID = "id";
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceParameter/replaceAll2.java b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/replaceAll2.java
new file mode 100644
index 0000000..6233f72
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/replaceAll2.java
@@ -0,0 +1,13 @@
+public class ATest {
+  public static final String FOO = "foo";
+  public static final String FOO1 = "foo1";
+
+    String m_interval = "";
+    void foo() {
+      if (FOO.equals(<caret>m_interval.substring(1))) {
+          System.out.println(FOO);
+      } else if (FOO1.equals(m_interval.substring(1))) {
+          System.out.println();
+      }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceParameter/replaceAll2_after.java b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/replaceAll2_after.java
new file mode 100644
index 0000000..ecd9136
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/replaceAll2_after.java
@@ -0,0 +1,13 @@
+public class ATest {
+  public static final String FOO = "foo";
+  public static final String FOO1 = "foo1";
+
+    String m_interval = "";
+    void foo(String m_interval1) {
+      if (FOO.equals(m_interval1.substring(1))) {
+          System.out.println(FOO);
+      } else if (FOO1.equals(m_interval1.substring(1))) {
+          System.out.println();
+      }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceParameter/replaceAllMethodCalls.java b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/replaceAllMethodCalls.java
new file mode 100644
index 0000000..a7a7ebb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/replaceAllMethodCalls.java
@@ -0,0 +1,9 @@
+public class Aaa {
+  public String method() {
+    return get<caret>String() + getString() + getString();
+  }
+
+  public String getString() {
+    return "123";
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceParameter/replaceAllMethodCalls_after.java b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/replaceAllMethodCalls_after.java
new file mode 100644
index 0000000..6853ca8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/replaceAllMethodCalls_after.java
@@ -0,0 +1,9 @@
+public class Aaa {
+  public String method(String stringstring) {
+    return stringstring + stringstring + stringstring;
+  }
+
+  public String getString() {
+    return "123";
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceParameter/replaceAll_after.java b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/replaceAll_after.java
new file mode 100644
index 0000000..d596df5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/replaceAll_after.java
@@ -0,0 +1,6 @@
+class Test {
+    void foo(String hello) {
+        System.out.println(hello);
+        System.out.println(<caret>hello);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceConstant/AnnotationDescription.java b/java/java-tests/testData/refactoring/introduceConstant/AnnotationDescription.java
new file mode 100644
index 0000000..e2317b7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceConstant/AnnotationDescription.java
@@ -0,0 +1,4 @@
+@SuppressWarnings(<selection>"CONST"</selection>)
+class Me {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceConstant/AnnotationDescription_after.java b/java/java-tests/testData/refactoring/introduceConstant/AnnotationDescription_after.java
new file mode 100644
index 0000000..a4f3852
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceConstant/AnnotationDescription_after.java
@@ -0,0 +1,5 @@
+@SuppressWarnings(Me.xxx)
+class Me {
+
+    public static final String xxx = "CONST";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceConstant/ArrayFromVarargs.java b/java/java-tests/testData/refactoring/introduceConstant/ArrayFromVarargs.java
new file mode 100644
index 0000000..ae6ba8e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceConstant/ArrayFromVarargs.java
@@ -0,0 +1,8 @@
+class B1 {
+  public B1(int i, String... s) {}
+}
+class A1 extends B1 {
+  A1() {
+    super(1, <selection>"a", "b"</selection>);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceConstant/ArrayFromVarargs_after.java b/java/java-tests/testData/refactoring/introduceConstant/ArrayFromVarargs_after.java
new file mode 100644
index 0000000..3e28aca
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceConstant/ArrayFromVarargs_after.java
@@ -0,0 +1,10 @@
+class B1 {
+  public B1(int i, String... s) {}
+}
+class A1 extends B1 {
+    public static final String[] xxx = new String[]{"a", "b"};
+
+    A1() {
+    super(1, xxx);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceConstant/EnumConstant.java b/java/java-tests/testData/refactoring/introduceConstant/EnumConstant.java
new file mode 100644
index 0000000..466c1fc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceConstant/EnumConstant.java
@@ -0,0 +1,7 @@
+public enum EnumConstant {
+  ;
+  EnumConstant(String s){}
+  void foo() {
+    String <caret>s1 = "dddddd";
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceConstant/EnumConstant_after.java b/java/java-tests/testData/refactoring/introduceConstant/EnumConstant_after.java
new file mode 100644
index 0000000..6687dc6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceConstant/EnumConstant_after.java
@@ -0,0 +1,6 @@
+public enum EnumConstant {
+    xxx("dddddd");
+  EnumConstant(String s){}
+  void foo() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceConstant/EscalateVisibility.java b/java/java-tests/testData/refactoring/introduceConstant/EscalateVisibility.java
new file mode 100644
index 0000000..6e4b225
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceConstant/EscalateVisibility.java
@@ -0,0 +1,6 @@
+public class Test {
+  public static final String FIRST = "<selection>pref</selection>";
+  public static final String SECOND = "pref";
+}
+
+class AnotherTest {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceConstant/EscalateVisibility_after.java b/java/java-tests/testData/refactoring/introduceConstant/EscalateVisibility_after.java
new file mode 100644
index 0000000..f46483a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceConstant/EscalateVisibility_after.java
@@ -0,0 +1,8 @@
+public class Test {
+  public static final String FIRST = AnotherTest.xxx;
+  public static final String SECOND = AnotherTest.xxx;
+}
+
+class AnotherTest {
+    static final String xxx = "pref";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceConstant/ForwardReferences.java b/java/java-tests/testData/refactoring/introduceConstant/ForwardReferences.java
new file mode 100644
index 0000000..9eedccd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceConstant/ForwardReferences.java
@@ -0,0 +1,8 @@
+class Test {
+
+    public void foo(){
+        System.out.println(<selection>const1.charAt(0)</selection>);
+    }
+
+    public static final String const1 = "";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceConstant/ForwardReferences_after.java b/java/java-tests/testData/refactoring/introduceConstant/ForwardReferences_after.java
new file mode 100644
index 0000000..1b6df64
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceConstant/ForwardReferences_after.java
@@ -0,0 +1,9 @@
+class Test {
+
+    public void foo(){
+        System.out.println(xxx);
+    }
+
+    public static final String const1 = "";
+    public static final char xxx = const1.charAt(0);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceConstant/FromEnumConstantInitializer.java b/java/java-tests/testData/refactoring/introduceConstant/FromEnumConstantInitializer.java
new file mode 100644
index 0000000..d47760fd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceConstant/FromEnumConstantInitializer.java
@@ -0,0 +1,10 @@
+enum TestEnum {
+  ONE("te<caret>stString");
+
+  TestEnum(String str) {
+  }
+  
+  private class Constants {
+    void foo(){}
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceConstant/FromEnumConstantInitializer1.java b/java/java-tests/testData/refactoring/introduceConstant/FromEnumConstantInitializer1.java
new file mode 100644
index 0000000..a43401d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceConstant/FromEnumConstantInitializer1.java
@@ -0,0 +1,10 @@
+enum TestEnum {
+  ONE("te<caret>stString");
+
+  TestEnum(String str) {
+  }
+
+  private static class Constants {
+    public static final String FOO = "";
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceConstant/FromEnumConstantInitializer1_after.java b/java/java-tests/testData/refactoring/introduceConstant/FromEnumConstantInitializer1_after.java
new file mode 100644
index 0000000..db65735
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceConstant/FromEnumConstantInitializer1_after.java
@@ -0,0 +1,11 @@
+enum TestEnum {
+  ONE(Constants.xxx);
+
+  TestEnum(String str) {
+  }
+
+  private static class Constants {
+    public static final String FOO = "";
+      public static final String xxx = "testString";
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceConstant/FromEnumConstantInitializer_after.java b/java/java-tests/testData/refactoring/introduceConstant/FromEnumConstantInitializer_after.java
new file mode 100644
index 0000000..a2a2caa
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceConstant/FromEnumConstantInitializer_after.java
@@ -0,0 +1,14 @@
+enum TestEnum {
+  ONE(Constants1.xxx);
+
+  TestEnum(String str) {
+  }
+
+    private static class Constants1 {
+        public static final String xxx = "testString";
+    }
+
+    private class Constants {
+    void foo(){}
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceConstant/InNonNls.java b/java/java-tests/testData/refactoring/introduceConstant/InNonNls.java
new file mode 100644
index 0000000..09d1aa0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceConstant/InNonNls.java
@@ -0,0 +1,6 @@
+public class XXX {
+    void f() {
+        String <caret>s1 = "dddddd";
+        String s = s1;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceConstant/InNonNls_after.java b/java/java-tests/testData/refactoring/introduceConstant/InNonNls_after.java
new file mode 100644
index 0000000..e3998f4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceConstant/InNonNls_after.java
@@ -0,0 +1,10 @@
+import org.jetbrains.annotations.NonNls;
+
+public class XXX {
+    @NonNls
+    private static final String xxx = "dddddd";
+
+    void f() {
+        String s = xxx;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceConstant/IntroduceConstantFromThisCall.java b/java/java-tests/testData/refactoring/introduceConstant/IntroduceConstantFromThisCall.java
new file mode 100644
index 0000000..4ffcf06
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceConstant/IntroduceConstantFromThisCall.java
@@ -0,0 +1,8 @@
+class Test {
+        public Test() {
+                this(<selection>10</selection>);
+        }
+
+        public Test(final int i) {
+        }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceConstant/IntroduceConstantFromThisCall_after.java b/java/java-tests/testData/refactoring/introduceConstant/IntroduceConstantFromThisCall_after.java
new file mode 100644
index 0000000..25ad079
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceConstant/IntroduceConstantFromThisCall_after.java
@@ -0,0 +1,10 @@
+class Test {
+    public static final int xxx = 10;
+
+    public Test() {
+                this(xxx);
+        }
+
+        public Test(final int i) {
+        }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceConstant/PartialStringLiteral.java b/java/java-tests/testData/refactoring/introduceConstant/PartialStringLiteral.java
new file mode 100644
index 0000000..d161dc4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceConstant/PartialStringLiteral.java
@@ -0,0 +1,5 @@
+class Test{
+   void foo() {
+      String s = "<selection>xxx</selection>yz";
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceConstant/PartialStringLiteralAnchor.java b/java/java-tests/testData/refactoring/introduceConstant/PartialStringLiteralAnchor.java
new file mode 100644
index 0000000..36f88fb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceConstant/PartialStringLiteralAnchor.java
@@ -0,0 +1,4 @@
+public class Test{
+    public static final String FIRST = "<selection>pref</selection>.FIRST";
+    public static final String SECOND = "pref.SECOND";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceConstant/PartialStringLiteralAnchor_after.java b/java/java-tests/testData/refactoring/introduceConstant/PartialStringLiteralAnchor_after.java
new file mode 100644
index 0000000..2d56a4d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceConstant/PartialStringLiteralAnchor_after.java
@@ -0,0 +1,5 @@
+public class Test{
+    public static final String xxx = "pref";
+    public static final String FIRST = xxx + ".FIRST";
+    public static final String SECOND = xxx + ".SECOND";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceConstant/PartialStringLiteralQualified.java b/java/java-tests/testData/refactoring/introduceConstant/PartialStringLiteralQualified.java
new file mode 100644
index 0000000..94f695e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceConstant/PartialStringLiteralQualified.java
@@ -0,0 +1,8 @@
+public class Test{
+   void foo() {
+      String s = "<selection>xxx</selection>yz";
+   }
+
+   static class D {
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceConstant/PartialStringLiteralQualified_after.java b/java/java-tests/testData/refactoring/introduceConstant/PartialStringLiteralQualified_after.java
new file mode 100644
index 0000000..f3f0a56
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceConstant/PartialStringLiteralQualified_after.java
@@ -0,0 +1,9 @@
+public class Test{
+   void foo() {
+      String s = D.xxx + "yz";
+   }
+
+   static class D {
+       public static final String xxx = "xxx";
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceConstant/PartialStringLiteral_after.java b/java/java-tests/testData/refactoring/introduceConstant/PartialStringLiteral_after.java
new file mode 100644
index 0000000..a1bda1c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceConstant/PartialStringLiteral_after.java
@@ -0,0 +1,7 @@
+class Test{
+    public static final String xxx = "xxx";
+
+    void foo() {
+      String s = xxx + "yz";
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceConstant/ResultedType.java b/java/java-tests/testData/refactoring/introduceConstant/ResultedType.java
new file mode 100644
index 0000000..e29702a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceConstant/ResultedType.java
@@ -0,0 +1,6 @@
+class Test {
+  void foo() {
+    class C {}
+    C c<caret>c;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceConstant/ResultedTypeWhenNonLocal.java b/java/java-tests/testData/refactoring/introduceConstant/ResultedTypeWhenNonLocal.java
new file mode 100644
index 0000000..8b36707
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceConstant/ResultedTypeWhenNonLocal.java
@@ -0,0 +1,7 @@
+class Test {
+  class C {}
+
+  void foo() {
+    C c<caret>c;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceField/after1.java b/java/java-tests/testData/refactoring/introduceField/after1.java
new file mode 100644
index 0000000..033edea
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/after1.java
@@ -0,0 +1,8 @@
+class InStaticInitializer {
+    public static final String x = "Hello World";
+
+    static {
+		System.out.println(x);
+    }
+    //Field must be placed before initializer or illegal forward reference will happen
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceField/afterBeforeExist.java b/java/java-tests/testData/refactoring/introduceField/afterBeforeExist.java
new file mode 100644
index 0000000..1396c41
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/afterBeforeExist.java
@@ -0,0 +1,13 @@
+import org.junit.*;
+public class T {
+    private int i;
+
+    @Test
+    public void test() {
+    }
+
+    @Before
+    public void setUp(){
+        i = 9;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceField/afterBeforeExistNonAnnotated.java b/java/java-tests/testData/refactoring/introduceField/afterBeforeExistNonAnnotated.java
new file mode 100644
index 0000000..1396c41
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/afterBeforeExistNonAnnotated.java
@@ -0,0 +1,13 @@
+import org.junit.*;
+public class T {
+    private int i;
+
+    @Test
+    public void test() {
+    }
+
+    @Before
+    public void setUp(){
+        i = 9;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceField/afterBeforeNotExist.java b/java/java-tests/testData/refactoring/introduceField/afterBeforeNotExist.java
new file mode 100644
index 0000000..5f1a526
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/afterBeforeNotExist.java
@@ -0,0 +1,13 @@
+import org.junit.*;
+public class T {
+    private int i;
+
+    @Before
+    public void setUp() throws Exception {
+        i = 9;
+    }
+
+    @Test
+    public void test() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceField/afterBeforeNotExist1.java b/java/java-tests/testData/refactoring/introduceField/afterBeforeNotExist1.java
new file mode 100644
index 0000000..9ad0a3f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/afterBeforeNotExist1.java
@@ -0,0 +1,14 @@
+import org.junit.Before;
+import org.junit.Test;
+public class T {
+    private int i;
+
+    @Before
+    public void setUp() throws Exception {
+        i = 9;
+    }
+
+    @Test
+    public void test() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceField/afterElseClause.java b/java/java-tests/testData/refactoring/introduceField/afterElseClause.java
new file mode 100644
index 0000000..0a1a855
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/afterElseClause.java
@@ -0,0 +1,14 @@
+class A {
+    public static final String test2;
+
+    public void demo(String val){
+        if ("test1".equals(val)){
+            //do somethign
+        } else {
+            test2 = "test2";
+            if (test2.equals(val)) {
+                //... something else
+            }
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceField/afterEnclosingAnonymous.java b/java/java-tests/testData/refactoring/introduceField/afterEnclosingAnonymous.java
new file mode 100644
index 0000000..0d6d8e7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/afterEnclosingAnonymous.java
@@ -0,0 +1,13 @@
+class TestRefactoring {
+    public final Integer integer;
+
+    public TestRefactoring() {
+        integer = new Integer("0");
+        Runnable r = new Runnable() {
+            @Override
+            public void run() {
+                System.out.println(integer);
+            }
+        };
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceField/afterForcedFieldType.java b/java/java-tests/testData/refactoring/introduceField/afterForcedFieldType.java
new file mode 100644
index 0000000..8bcac86
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/afterForcedFieldType.java
@@ -0,0 +1,7 @@
+public class FieldTest {
+    public final int integer;
+
+    void foo() {
+        integer = new Integer(0);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceField/afterFromLambdaExpr.java b/java/java-tests/testData/refactoring/introduceField/afterFromLambdaExpr.java
new file mode 100644
index 0000000..fe0d2da
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/afterFromLambdaExpr.java
@@ -0,0 +1,14 @@
+interface SAM<X> {
+        X m(int i, int j);
+    }
+
+class Foo {
+    public final int anInt = 0;
+
+    void test() {
+        m((i, j) -> {
+            return i + j;
+        });
+    }
+    void m(SAM<Integer> s) { }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceField/afterInSetUp.java b/java/java-tests/testData/refactoring/introduceField/afterInSetUp.java
new file mode 100644
index 0000000..3ff07dd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/afterInSetUp.java
@@ -0,0 +1,12 @@
+import junit.framework.TestCase;
+public class T extends TestCase {
+    private int i;
+
+    public void setUp() throws Exception {
+        super.setUp();
+        i = 9;
+    }
+
+    public void test() {
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceField/afterInitiallyInSetUp.java b/java/java-tests/testData/refactoring/introduceField/afterInitiallyInSetUp.java
new file mode 100644
index 0000000..58090d8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/afterInitiallyInSetUp.java
@@ -0,0 +1,8 @@
+import junit.framework.TestCase;
+public class T extends TestCase {
+    private int i;
+
+    public void setUp() {
+        i = 9;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceField/afterLocalVarAnnotations.java b/java/java-tests/testData/refactoring/introduceField/afterLocalVarAnnotations.java
new file mode 100644
index 0000000..911e2e3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/afterLocalVarAnnotations.java
@@ -0,0 +1,7 @@
+class Test {
+    @Deprecated
+    public final String string = "";
+
+    void foo() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceField/afterOnClassLevelBinary.java b/java/java-tests/testData/refactoring/introduceField/afterOnClassLevelBinary.java
new file mode 100644
index 0000000..07800bb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/afterOnClassLevelBinary.java
@@ -0,0 +1,3 @@
+class Test {
+    public final int anInt = 2 + 2;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceField/afterOnClassLevelClassForName.java b/java/java-tests/testData/refactoring/introduceField/afterOnClassLevelClassForName.java
new file mode 100644
index 0000000..e40361e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/afterOnClassLevelClassForName.java
@@ -0,0 +1,7 @@
+class Test {
+    public final Class<?> aClass = Class.forName(Test.class.getName);
+
+    void foo() {
+      Class clazz = aClass;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceField/afterOnClassLevelDuplicates.java b/java/java-tests/testData/refactoring/introduceField/afterOnClassLevelDuplicates.java
new file mode 100644
index 0000000..5b4a9ef
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/afterOnClassLevelDuplicates.java
@@ -0,0 +1,5 @@
+class Test {
+    public final int anInt = Integer.parseInt("");
+
+    void foo() {int i = anInt;}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceField/afterOnClassLevelDuplicates1.java b/java/java-tests/testData/refactoring/introduceField/afterOnClassLevelDuplicates1.java
new file mode 100644
index 0000000..5b39765
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/afterOnClassLevelDuplicates1.java
@@ -0,0 +1,4 @@
+class Test {
+    public final int anInt = Integer.parseInt("");
+    int i = anInt;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceField/afterOnClassLevelNewExpression.java b/java/java-tests/testData/refactoring/introduceField/afterOnClassLevelNewExpression.java
new file mode 100644
index 0000000..b936609
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/afterOnClassLevelNewExpression.java
@@ -0,0 +1,7 @@
+class Test {
+    public final Integer integer = new Integer(0);
+
+  void foo() {
+    Integer i = integer;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceField/afterOnClassLevelNoDuplicates.java b/java/java-tests/testData/refactoring/introduceField/afterOnClassLevelNoDuplicates.java
new file mode 100644
index 0000000..83e9bfa
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/afterOnClassLevelNoDuplicates.java
@@ -0,0 +1,3 @@
+class Test {
+    public final int anInt = Integer.parseInt("");
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceField/afterOrderInSetup.java b/java/java-tests/testData/refactoring/introduceField/afterOrderInSetup.java
new file mode 100644
index 0000000..1731ad8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/afterOrderInSetup.java
@@ -0,0 +1,16 @@
+import junit.framework.TestCase;
+public class T extends TestCase {
+    private String i;
+
+    public void setUp() throws Exception {
+        i = getName();
+        myName = " second " + i;
+    }
+
+    public void test() throws Exception {
+    }
+
+    private String getName() {
+        return null;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceField/afterOuterClass.java b/java/java-tests/testData/refactoring/introduceField/afterOuterClass.java
new file mode 100644
index 0000000..1ee698f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/afterOuterClass.java
@@ -0,0 +1,16 @@
+public class FieldTest {
+    private Object comboBox;
+
+    private class NoSelectionComboItem {
+        public final Object comboBox;
+
+        private NoSelectionComboItem() {
+            comboBox = FieldTest.this.comboBox;
+        }
+
+        public String getLabel() {
+            Object comboItem = comboBox.getSelectedItem();
+            return comboItem == this ? "<Please Select>" : "<Back to overview>";
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceField/afterPublicBaseClassSetUp.java b/java/java-tests/testData/refactoring/introduceField/afterPublicBaseClassSetUp.java
new file mode 100644
index 0000000..e148221
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/afterPublicBaseClassSetUp.java
@@ -0,0 +1,19 @@
+import junit.framework.TestCase;
+
+class Base extends TestCase {
+    public void setUp() {
+        super.setUp();
+    }
+}
+
+public class T extends Base {
+    private int i;
+
+    public void setUp() throws Exception {
+        super.setUp();
+        i = 9;
+    }
+
+    public void test() {
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceField/afterStaticFieldInInnerClass.java b/java/java-tests/testData/refactoring/introduceField/afterStaticFieldInInnerClass.java
new file mode 100644
index 0000000..1a3c2aa
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/afterStaticFieldInInnerClass.java
@@ -0,0 +1,9 @@
+public class A {
+  private static final class Inner {
+      public final String string;
+
+      public Inner(Integer param) {
+          string = param.toString();
+     }
+  }
+}
diff --git a/java/java-tests/testData/refactoring/introduceField/afterUnresolvedReferenceToLocalVar.java b/java/java-tests/testData/refactoring/introduceField/afterUnresolvedReferenceToLocalVar.java
new file mode 100644
index 0000000..5dc141e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/afterUnresolvedReferenceToLocalVar.java
@@ -0,0 +1,12 @@
+import java.util.ArrayList;
+
+public class Test
+{
+    public final ArrayList arrayList;
+
+    public Test()
+    {
+        arrayList = new ArrayList();
+    }
+
+}
diff --git a/java/java-tests/testData/refactoring/introduceField/before1.java b/java/java-tests/testData/refactoring/introduceField/before1.java
new file mode 100644
index 0000000..97717e3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/before1.java
@@ -0,0 +1,6 @@
+class InStaticInitializer {
+    static {
+		System.out.println(<selection>"Hello World"</selection>);
+    }
+    //Field must be placed before initializer or illegal forward reference will happen
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceField/beforeBeforeExist.java b/java/java-tests/testData/refactoring/introduceField/beforeBeforeExist.java
new file mode 100644
index 0000000..3067ee7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/beforeBeforeExist.java
@@ -0,0 +1,10 @@
+import org.junit.*;
+public class T {
+    @Test
+    public void test() {
+        int <caret>i = 9;
+    }
+
+    @Before
+    public void setUp(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceField/beforeBeforeExistNonAnnotated.java b/java/java-tests/testData/refactoring/introduceField/beforeBeforeExistNonAnnotated.java
new file mode 100644
index 0000000..cfb4c61
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/beforeBeforeExistNonAnnotated.java
@@ -0,0 +1,9 @@
+import org.junit.*;
+public class T {
+    @Test
+    public void test() {
+        int <caret>i = 9;
+    }
+
+    public void setUp(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceField/beforeBeforeNotExist.java b/java/java-tests/testData/refactoring/introduceField/beforeBeforeNotExist.java
new file mode 100644
index 0000000..3e88c12
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/beforeBeforeNotExist.java
@@ -0,0 +1,7 @@
+import org.junit.*;
+public class T {
+    @Test
+    public void test() {
+        int <caret>i = 9;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceField/beforeBeforeNotExist1.java b/java/java-tests/testData/refactoring/introduceField/beforeBeforeNotExist1.java
new file mode 100644
index 0000000..2e4fcd1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/beforeBeforeNotExist1.java
@@ -0,0 +1,7 @@
+import org.junit.Test;
+public class T {
+    @Test
+    public void test() {
+        int <caret>i = 9;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceField/beforeElseClause.java b/java/java-tests/testData/refactoring/introduceField/beforeElseClause.java
new file mode 100644
index 0000000..24ef3cb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/beforeElseClause.java
@@ -0,0 +1,9 @@
+class A {
+    public void demo(String val){
+        if ("test1".equals(val)){
+            //do somethign
+        } else if (<selection>"test2"</selection>.equals(val)) {
+            //... something else
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceField/beforeEnclosingAnonymous.java b/java/java-tests/testData/refactoring/introduceField/beforeEnclosingAnonymous.java
new file mode 100644
index 0000000..850da94
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/beforeEnclosingAnonymous.java
@@ -0,0 +1,11 @@
+class TestRefactoring {
+    public TestRefactoring() {
+        Runnable r = new Runnable() {
+            @Override
+            public void run() {
+                Integer to<caret>Field = new Integer("0");
+                System.out.println(toField);
+            }
+        };
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceField/beforeForcedFieldType.java b/java/java-tests/testData/refactoring/introduceField/beforeForcedFieldType.java
new file mode 100644
index 0000000..de9c340
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/beforeForcedFieldType.java
@@ -0,0 +1,5 @@
+public class FieldTest {
+    void foo() {
+        Integer <selection>ii</selection> = new Integer(0);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceField/beforeFromLambdaExpr.java b/java/java-tests/testData/refactoring/introduceField/beforeFromLambdaExpr.java
new file mode 100644
index 0000000..f6e967f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/beforeFromLambdaExpr.java
@@ -0,0 +1,13 @@
+interface SAM<X> {
+        X m(int i, int j);
+    }
+
+class Foo {  
+    void test() {
+        m((i, j) -> {
+          <selection>0</selection>
+          return i + j;
+        });
+    }
+    void m(SAM<Integer> s) { }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceField/beforeInSetUp.java b/java/java-tests/testData/refactoring/introduceField/beforeInSetUp.java
new file mode 100644
index 0000000..cc96b34
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/beforeInSetUp.java
@@ -0,0 +1,6 @@
+import junit.framework.TestCase;
+public class T extends TestCase {
+    public void test() {
+        int <caret>i = 9;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceField/beforeInitiallyInSetUp.java b/java/java-tests/testData/refactoring/introduceField/beforeInitiallyInSetUp.java
new file mode 100644
index 0000000..2373ee3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/beforeInitiallyInSetUp.java
@@ -0,0 +1,6 @@
+import junit.framework.TestCase;
+public class T extends TestCase {
+    public void setUp() {
+        int <caret>i = 9;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceField/beforeLocalVarAnnotations.java b/java/java-tests/testData/refactoring/introduceField/beforeLocalVarAnnotations.java
new file mode 100644
index 0000000..01dad3b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/beforeLocalVarAnnotations.java
@@ -0,0 +1,5 @@
+class Test {
+    void foo() {
+        @Deprecated String f<caret>o = "";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceField/beforeOnClassLevelBinary.java b/java/java-tests/testData/refactoring/introduceField/beforeOnClassLevelBinary.java
new file mode 100644
index 0000000..4faafe3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/beforeOnClassLevelBinary.java
@@ -0,0 +1,3 @@
+class Test {
+  2 <caret> + 2
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceField/beforeOnClassLevelClassForName.java b/java/java-tests/testData/refactoring/introduceField/beforeOnClassLevelClassForName.java
new file mode 100644
index 0000000..fedf7f3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/beforeOnClassLevelClassForName.java
@@ -0,0 +1,7 @@
+class Test {
+    <selection>Class.forName(Test.class.getName)</selection>
+
+    void foo() {
+      Class clazz = Class.forName(Test.class.getName);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceField/beforeOnClassLevelDuplicates.java b/java/java-tests/testData/refactoring/introduceField/beforeOnClassLevelDuplicates.java
new file mode 100644
index 0000000..e1866e8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/beforeOnClassLevelDuplicates.java
@@ -0,0 +1,4 @@
+class Test {
+  Integer.pa<caret>rseInt("")
+  void foo() {int i = Integer.parseInt("");}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceField/beforeOnClassLevelDuplicates1.java b/java/java-tests/testData/refactoring/introduceField/beforeOnClassLevelDuplicates1.java
new file mode 100644
index 0000000..7679c9e6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/beforeOnClassLevelDuplicates1.java
@@ -0,0 +1,4 @@
+class Test {
+  int i = Integer.parseInt("");
+  Integer.pa<caret>rseInt("")
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceField/beforeOnClassLevelNewExpression.java b/java/java-tests/testData/refactoring/introduceField/beforeOnClassLevelNewExpression.java
new file mode 100644
index 0000000..e39504b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/beforeOnClassLevelNewExpression.java
@@ -0,0 +1,7 @@
+class Test {
+  <selection>new Integer(0)</selection>
+
+  void foo() {
+    Integer i = new Integer(0);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceField/beforeOnClassLevelNoDuplicates.java b/java/java-tests/testData/refactoring/introduceField/beforeOnClassLevelNoDuplicates.java
new file mode 100644
index 0000000..671bb2e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/beforeOnClassLevelNoDuplicates.java
@@ -0,0 +1,3 @@
+class Test {
+  Integer.pa<caret>rseInt("")
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceField/beforeOrderInSetup.java b/java/java-tests/testData/refactoring/introduceField/beforeOrderInSetup.java
new file mode 100644
index 0000000..02a985c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/beforeOrderInSetup.java
@@ -0,0 +1,14 @@
+import junit.framework.TestCase;
+public class T extends TestCase {
+    public void setUp() throws Exception {
+        String na<caret>me = getName();
+        myName = " second " + name;
+    }
+
+    public void test() throws Exception {
+    }
+
+    private String getName() {
+        return null;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceField/beforeOuterClass.java b/java/java-tests/testData/refactoring/introduceField/beforeOuterClass.java
new file mode 100644
index 0000000..a05faa4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/beforeOuterClass.java
@@ -0,0 +1,13 @@
+public class FieldTest {
+    private Object comboBox;
+
+    private class NoSelectionComboItem {
+        private NoSelectionComboItem() {
+        }
+
+        public String getLabel() {
+            Object comboItem = <selection>comboBox</selection>.getSelectedItem();
+            return comboItem == this ? "<Please Select>" : "<Back to overview>";
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceField/beforePublicBaseClassSetUp.java b/java/java-tests/testData/refactoring/introduceField/beforePublicBaseClassSetUp.java
new file mode 100644
index 0000000..e912ae1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/beforePublicBaseClassSetUp.java
@@ -0,0 +1,13 @@
+import junit.framework.TestCase;
+
+class Base extends TestCase {
+    public void setUp() {
+        super.setUp();
+    }
+}
+
+public class T extends Base {
+    public void test() {
+        int <caret>i = 9;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceField/beforeRejectIntroduceFieldFromExprInThisCall.java b/java/java-tests/testData/refactoring/introduceField/beforeRejectIntroduceFieldFromExprInThisCall.java
new file mode 100644
index 0000000..4056e8a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/beforeRejectIntroduceFieldFromExprInThisCall.java
@@ -0,0 +1,6 @@
+class Test {
+  Test(String s, String s1) {}
+  Test(String s) {
+    this(<selection>s</selection>, s);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceField/beforeStaticFieldInInnerClass.java b/java/java-tests/testData/refactoring/introduceField/beforeStaticFieldInInnerClass.java
new file mode 100644
index 0000000..3e1b9ef
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/beforeStaticFieldInInnerClass.java
@@ -0,0 +1,7 @@
+public class A {
+  private static final class Inner {
+     public Inner(Integer param) {
+        String s<caret>tr = param.toString();
+     }
+  }
+}
diff --git a/java/java-tests/testData/refactoring/introduceField/beforeUnresolvedReferenceToLocalVar.java b/java/java-tests/testData/refactoring/introduceField/beforeUnresolvedReferenceToLocalVar.java
new file mode 100644
index 0000000..bd34a5d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceField/beforeUnresolvedReferenceToLocalVar.java
@@ -0,0 +1,10 @@
+import java.util.ArrayList;
+
+public class Test
+{
+    public Test()
+    {
+        array<caret>List = new ArrayList();
+    }
+
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterAnonymousClass.java b/java/java-tests/testData/refactoring/introduceParameter/afterAnonymousClass.java
new file mode 100644
index 0000000..e8d6742
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterAnonymousClass.java
@@ -0,0 +1,10 @@
+public class Test {
+  public Test(int anObject) {
+    int i = anObject;
+  }
+
+  public Test get() {
+    return new Test(0) {
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterArrayInitializer.java b/java/java-tests/testData/refactoring/introduceParameter/afterArrayInitializer.java
new file mode 100644
index 0000000..efd87bb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterArrayInitializer.java
@@ -0,0 +1,10 @@
+class Test {
+  public synchronized boolean foo(String msg) {
+    return bar(new String[]{message});
+  }
+
+  private boolean bar(String[] anObject) {
+    String[] params = anObject;
+    return false;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterConflictingField.java b/java/java-tests/testData/refactoring/introduceParameter/afterConflictingField.java
new file mode 100644
index 0000000..7106fd5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterConflictingField.java
@@ -0,0 +1,25 @@
+public class Test {
+    public int anObject;
+    public void method(int anObject) {
+    }
+}
+
+public class Test1 extends Test {
+    public void method(int anObject) {
+        System.out.println(anObject);
+        System.out.println(this.anObject);
+    }
+}
+
+public class Test2 extends Test1 {
+    public void method(int anObject) {
+        System.out.println(this.anObject);
+    }
+}
+
+public class Usage {
+    {
+        Test t = new Test2();
+        t.method(1 + 2);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterDelegateWithVarargs.java b/java/java-tests/testData/refactoring/introduceParameter/afterDelegateWithVarargs.java
new file mode 100644
index 0000000..7821add
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterDelegateWithVarargs.java
@@ -0,0 +1,9 @@
+public class Test {
+    void m(int... ps) {
+        m("asd", ps);
+    }
+
+    void m(final String anObject, int... ps) {
+                System.out.println(anObject);
+        }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterDiamond2Raw.java b/java/java-tests/testData/refactoring/introduceParameter/afterDiamond2Raw.java
new file mode 100644
index 0000000..26f764f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterDiamond2Raw.java
@@ -0,0 +1,6 @@
+import java.util.ArrayList
+class Test {
+  void foo(final ArrayList anObject) {
+    ArrayList l = anObject;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterDiamondOccurrences.java b/java/java-tests/testData/refactoring/introduceParameter/afterDiamondOccurrences.java
new file mode 100644
index 0000000..2b10bd5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterDiamondOccurrences.java
@@ -0,0 +1,13 @@
+import java.util.*;
+
+class Test {
+  void foo(final ArrayList<String> anObject) {
+    List<String> ls = anObject;
+    List<String> lss = anObject;
+    List<Integer> li = new ArrayList<>();
+  }
+  
+  void bar() {
+    foo(new ArrayList<String>());
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterEnclosingWithParamDeletion.java b/java/java-tests/testData/refactoring/introduceParameter/afterEnclosingWithParamDeletion.java
new file mode 100644
index 0000000..1216026
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterEnclosingWithParamDeletion.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2000-2011 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 AAAA {
+  void foo() {
+    sampleEnclosing("A" + "");
+  }
+
+  private void sampleEnclosing(final String anObject) {
+    new AAAA() {
+      void bar() {
+        System.out.println(anObject);
+      }
+    }.bar();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterEnums.java b/java/java-tests/testData/refactoring/introduceParameter/afterEnums.java
new file mode 100644
index 0000000..5a42396
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterEnums.java
@@ -0,0 +1,6 @@
+public enum E{
+  a(2), b(2);
+  public E(int anObject) {
+    System.out.print(anObject);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterExpectedType.java b/java/java-tests/testData/refactoring/introduceParameter/afterExpectedType.java
new file mode 100644
index 0000000..985fee8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterExpectedType.java
@@ -0,0 +1,12 @@
+class Test {
+    void f (String s) {}
+
+    void u(final String anObject) {
+        f(anObject);
+    }
+
+    void y () {
+        String name = "";
+        u(name);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterFieldAccess.java b/java/java-tests/testData/refactoring/introduceParameter/afterFieldAccess.java
new file mode 100644
index 0000000..325e364
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterFieldAccess.java
@@ -0,0 +1,14 @@
+class Test {
+    int method(int a, int b, int anObject) {
+        return anObject;
+    }
+    int i;
+}
+
+class XTest {
+    int n() {
+        Test t;
+        
+        return t.method(1, 2, t.i);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterFieldWithGetterReplacement.java b/java/java-tests/testData/refactoring/introduceParameter/afterFieldWithGetterReplacement.java
new file mode 100644
index 0000000..6bc974b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterFieldWithGetterReplacement.java
@@ -0,0 +1,16 @@
+class Test {
+    int i;
+    
+    public int getI() { return i; }
+    
+    int method(int a, int anObject) {
+        return anObject;
+    }
+}
+
+class XXX {
+    public int m() {
+        Test t;
+        return t.method(1, 1 + t.getI());
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterFieldWithInaccessibleGetterReplacement.java b/java/java-tests/testData/refactoring/introduceParameter/afterFieldWithInaccessibleGetterReplacement.java
new file mode 100644
index 0000000..ce9537b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterFieldWithInaccessibleGetterReplacement.java
@@ -0,0 +1,16 @@
+class Test {
+    public int i;
+    
+    public int getI() { return i; }
+    
+    int method(int a, int anObject) {
+        return anObject;
+    }
+}
+
+class XXX {
+    public int m() {
+        Test t;
+        return t.method(1, 1 + t.i);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterGenerateDelegate.java b/java/java-tests/testData/refactoring/introduceParameter/afterGenerateDelegate.java
new file mode 100644
index 0000000..37122df
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterGenerateDelegate.java
@@ -0,0 +1,22 @@
+class Test {
+    public int m(int a, int b) {
+        return m(a, b, 0);
+    }
+
+    public int m(int a, int b, int anObject) {
+        if(a > b) {
+           return anObject;
+        }
+        else {
+           return anObject;
+        }
+    }
+}
+
+class Test1 {
+  Test t;
+
+  public int n(int v) {
+    return t.m(v, 1);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterGenerateDelegateInSuperClass.java b/java/java-tests/testData/refactoring/introduceParameter/afterGenerateDelegateInSuperClass.java
new file mode 100644
index 0000000..0addeb2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterGenerateDelegateInSuperClass.java
@@ -0,0 +1,22 @@
+abstract class A {
+    void xxx() {
+        xxx(239);
+    }
+
+    abstract void xxx(final int anObject);
+}
+
+class B implements A {
+    public void xxx() {
+        xxx(239);
+    }
+
+    public void xxx(final int anObject) {
+    System.out.println(anObject);
+  }
+
+  static {
+    A a = new B();
+    a.xxx();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterGenerateDelegateInSuperInterface.java b/java/java-tests/testData/refactoring/introduceParameter/afterGenerateDelegateInSuperInterface.java
new file mode 100644
index 0000000..8e1cbf3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterGenerateDelegateInSuperInterface.java
@@ -0,0 +1,20 @@
+interface A {
+    void xxx();
+
+    void xxx(final int anObject);
+}
+
+class B implements A {
+    public void xxx() {
+        xxx(239);
+    }
+
+    public void xxx(final int anObject) {
+    System.out.println(anObject);
+  }
+
+  static {
+    A a = new B();
+    a.xxx();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterGenerateDelegateNoArgs.java b/java/java-tests/testData/refactoring/introduceParameter/afterGenerateDelegateNoArgs.java
new file mode 100644
index 0000000..39efd86
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterGenerateDelegateNoArgs.java
@@ -0,0 +1,17 @@
+class Test {
+    public int m() {
+        return m(0);
+    }
+
+    public int m(int anObject) {
+        return anObject;
+    }
+}
+
+class Test1 {
+  Test t;
+
+  public int n(int v) {
+    return t.m();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterGenerateDelegateRemoveParameter.java b/java/java-tests/testData/refactoring/introduceParameter/afterGenerateDelegateRemoveParameter.java
new file mode 100644
index 0000000..95eb5ec
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterGenerateDelegateRemoveParameter.java
@@ -0,0 +1,9 @@
+public class Bar {
+    public int baz(byte blah) {
+        return baz(blah + blah + 3);
+    }
+
+    public int baz(int anObject) {
+        return <caret>anObject;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterGetterQualifier.java b/java/java-tests/testData/refactoring/introduceParameter/afterGetterQualifier.java
new file mode 100644
index 0000000..a0ce8c1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterGetterQualifier.java
@@ -0,0 +1,23 @@
+public class Test {
+    private String myStr;
+
+    public String getMyStr() {
+        return myStr;
+    }
+
+    void foo(String anObject) {
+        new Runnable(){
+            @Override
+            public void run() {
+                  System.out.println(anObject);
+            }
+        };
+    }
+}
+
+class X {
+   public void n() {
+       final Test test = new Test();
+       test.foo(test.getMyStr());
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterImplicitDefaultConstructor.java b/java/java-tests/testData/refactoring/introduceParameter/afterImplicitDefaultConstructor.java
new file mode 100644
index 0000000..4c1ff81
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterImplicitDefaultConstructor.java
@@ -0,0 +1,16 @@
+class A {
+    int i;
+    public A(int anObject) {
+        i = anObject;
+    }
+}
+
+class B extends A {
+    B() {
+        super(27);
+    }
+}
+
+class Usage {
+    A a = new B();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterImplicitSuperCall.java b/java/java-tests/testData/refactoring/introduceParameter/afterImplicitSuperCall.java
new file mode 100644
index 0000000..bf0d6ef
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterImplicitSuperCall.java
@@ -0,0 +1,19 @@
+class A {
+    int i;
+    public A(int anObject) {
+        i = anObject;
+    }
+}
+
+class B extends A {
+    int k;
+
+    public B() {
+        super(27);
+        k = 10;
+    }
+}
+
+class Usage {
+    A a = new B();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterIncompleteEnumDefinition.java b/java/java-tests/testData/refactoring/introduceParameter/afterIncompleteEnumDefinition.java
new file mode 100644
index 0000000..7796b34
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterIncompleteEnumDefinition.java
@@ -0,0 +1,10 @@
+enum Test {
+  Root(position + "");
+
+  public Test(String description, String anObject) {
+    System.out.println(description);
+    System.out.println(anObject);
+  }
+
+}
+
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterIncorrectScope.java b/java/java-tests/testData/refactoring/introduceParameter/afterIncorrectScope.java
new file mode 100644
index 0000000..172e1b1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterIncorrectScope.java
@@ -0,0 +1,17 @@
+public class InnerOuter {
+  String anObject = "";
+
+  interface Inner {
+    void exec(final String anObject);
+  }
+
+  Inner instance = new Inner() {
+    public void exec(final String anObject) {
+      anObject.charAt(1);
+    }
+  };
+
+  void foo() {
+   instance.exec(anObject);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterInternalSideEffect.java b/java/java-tests/testData/refactoring/introduceParameter/afterInternalSideEffect.java
new file mode 100644
index 0000000..6fb7951
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterInternalSideEffect.java
@@ -0,0 +1,23 @@
+import java.util.*;
+
+public class Test {
+    int field;
+    int method(int anObject) {
+        return anObject;
+    }
+}
+
+public class Usage {
+    int usage(Test[] tests) {
+        int sum = 0;
+        for(int i = 0; i < tests.length;) {
+            final Test test = tests[i++];
+            sum += test.method(test.field);
+        }
+        List list = Arrays.asList(tests);
+        for(int i = 0; i < list.size();) {
+            final Test test = (Test) list.get(i++);
+            sum += test.method(test.field);        
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterLocalVarDeclaration.java b/java/java-tests/testData/refactoring/introduceParameter/afterLocalVarDeclaration.java
new file mode 100644
index 0000000..2fdf39f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterLocalVarDeclaration.java
@@ -0,0 +1,5 @@
+class Foo {
+    void f(int anObject) {
+        int k = anObject;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterLocalVarSelection.java b/java/java-tests/testData/refactoring/introduceParameter/afterLocalVarSelection.java
new file mode 100644
index 0000000..e40b0a8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterLocalVarSelection.java
@@ -0,0 +1,9 @@
+class Test {
+    public void test(String anObject) {
+        System.out.println(anObject);
+    }
+
+    public void use() {
+        test("");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterMethodAccess.java b/java/java-tests/testData/refactoring/introduceParameter/afterMethodAccess.java
new file mode 100644
index 0000000..0f57f59
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterMethodAccess.java
@@ -0,0 +1,18 @@
+class Test {
+    int method(int a, int b, int anObject) {
+        return anObject;
+    }
+    int i;
+    
+    int anotherMethod(int x) { 
+        return x;
+    }
+}
+
+class XTest {
+    int n() {
+        Test t;
+        
+        return t.method(1, 2, t.anotherMethod(1 + 2));
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterMethodUsageInThisMethodInheritor.java b/java/java-tests/testData/refactoring/introduceParameter/afterMethodUsageInThisMethodInheritor.java
new file mode 100644
index 0000000..45bd8af
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterMethodUsageInThisMethodInheritor.java
@@ -0,0 +1,11 @@
+class C {
+  int foo(int x, int anObject) {
+     return anObject;
+  }
+}
+
+class D extends C {
+  int foo(int x, int anObject) {
+    return super.foo(x, anObject);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterMethodWithoutParams.java b/java/java-tests/testData/refactoring/introduceParameter/afterMethodWithoutParams.java
new file mode 100644
index 0000000..9660928
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterMethodWithoutParams.java
@@ -0,0 +1,12 @@
+class Test {
+    int m(int anObject) {
+        return anObject;
+    }
+}
+
+class X3 {
+    int n() {
+        Test t;
+        return t.m(0);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterNoUsages.java b/java/java-tests/testData/refactoring/introduceParameter/afterNoUsages.java
new file mode 100644
index 0000000..c4061d0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterNoUsages.java
@@ -0,0 +1,5 @@
+class Test {
+   public int m(int a, int b, int anObject) {
+	return anObject;
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterNull.java b/java/java-tests/testData/refactoring/introduceParameter/afterNull.java
new file mode 100644
index 0000000..b38d498
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterNull.java
@@ -0,0 +1,6 @@
+class Test {
+    public Test method(Test anObject) {
+        return anObject;
+    }
+}
+
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterParameterInFor.java b/java/java-tests/testData/refactoring/introduceParameter/afterParameterInFor.java
new file mode 100644
index 0000000..0554977
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterParameterInFor.java
@@ -0,0 +1,9 @@
+import java.util.*;
+
+class XX {
+    public void g(List l, Iterator it) {
+        for(; it.hasNext();) {
+            Object o = it.next():
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterParameterJavaDoc1.java b/java/java-tests/testData/refactoring/introduceParameter/afterParameterJavaDoc1.java
new file mode 100644
index 0000000..68485e0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterParameterJavaDoc1.java
@@ -0,0 +1,8 @@
+class Test {
+    /**
+     * @param anObject
+     */
+    int method(final int anObject) {
+        return anObject;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterParameterJavaDoc2.java b/java/java-tests/testData/refactoring/introduceParameter/afterParameterJavaDoc2.java
new file mode 100644
index 0000000..860dc50
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterParameterJavaDoc2.java
@@ -0,0 +1,9 @@
+class Test {
+    /**
+     * @param s
+     * @param anObject
+     */
+    int method(String s, final int anObject) {
+        return anObject;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterParameterJavaDoc3.java b/java/java-tests/testData/refactoring/introduceParameter/afterParameterJavaDoc3.java
new file mode 100644
index 0000000..4bffc29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterParameterJavaDoc3.java
@@ -0,0 +1,8 @@
+class Test {
+    /**
+     *  Incomplete JavaDoc
+     */
+    int method(String s, final int anObject) {
+        return anObject;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterParameterJavaDocBeforeVararg.java b/java/java-tests/testData/refactoring/introduceParameter/afterParameterJavaDocBeforeVararg.java
new file mode 100644
index 0000000..d76376e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterParameterJavaDocBeforeVararg.java
@@ -0,0 +1,14 @@
+class C {
+    /**
+     * @param anObject
+     * @param s
+     */
+    void method(final int anObject, String... s) {
+        System.out.println(s[anObject]);
+    }
+
+    {
+        method(0, "a", "b", "c");
+        method(0);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterParameterSubstitution.java b/java/java-tests/testData/refactoring/introduceParameter/afterParameterSubstitution.java
new file mode 100644
index 0000000..52eb5b9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterParameterSubstitution.java
@@ -0,0 +1,13 @@
+class Test {
+    int method(int a, int b, int anObject) {
+        return anObject;
+    }
+}
+
+class XTest {
+    int n() {
+        Test t;
+        
+        return t.method(1, 2, 1 + 2);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterPreserveDiamondOccurrences.java b/java/java-tests/testData/refactoring/introduceParameter/afterPreserveDiamondOccurrences.java
new file mode 100644
index 0000000..4f62137
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterPreserveDiamondOccurrences.java
@@ -0,0 +1,22 @@
+
+public class TestCompletion {
+
+    public static <T, V> ParallelPipeline<T, V> test(T base, V newStage, T upstream, final ParallelPipeline<T, V> anObject) {
+        if (base != null){
+            return anObject;
+        }
+        else {
+            return new ParallelPipeline<>(upstream, newStage);
+        }
+
+    }
+
+
+    void f() {
+        test(null, null, null, new ParallelPipeline<>(null, null));
+    }
+    private static class ParallelPipeline<T, V> {
+        public ParallelPipeline(T p0, V p1) {
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterQualifiedNew.java b/java/java-tests/testData/refactoring/introduceParameter/afterQualifiedNew.java
new file mode 100644
index 0000000..f99acd5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterQualifiedNew.java
@@ -0,0 +1,10 @@
+class Test {
+    class A {
+        class B {
+        }
+    }
+ 
+    Object method(A.B anObject) {
+        return anObject;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterRemoveParameter.java b/java/java-tests/testData/refactoring/introduceParameter/afterRemoveParameter.java
new file mode 100644
index 0000000..16f075f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterRemoveParameter.java
@@ -0,0 +1,5 @@
+public class Bar {
+    public int baz(int anObject) {
+        return <caret>anObject;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterRemoveParameterAfterVariable.java b/java/java-tests/testData/refactoring/introduceParameter/afterRemoveParameterAfterVariable.java
new file mode 100644
index 0000000..9e3ce8e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterRemoveParameterAfterVariable.java
@@ -0,0 +1,5 @@
+public class Bar {
+    public int baz(int anObject) {
+        <caret>return anObject + 9;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterRemoveParameterInHierarchy.java b/java/java-tests/testData/refactoring/introduceParameter/afterRemoveParameterInHierarchy.java
new file mode 100644
index 0000000..c6c075e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterRemoveParameterInHierarchy.java
@@ -0,0 +1,10 @@
+public class Bar {
+    public int baz(int anObject) {
+        return anObject;
+    }
+}
+class S extends Bar {
+    public int baz(int anObject) {
+        return super.baz(anObject);    //To change body of overridden methods use File | Settings | File Templates.
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterRemoveParameterWithJavadoc.java b/java/java-tests/testData/refactoring/introduceParameter/afterRemoveParameterWithJavadoc.java
new file mode 100644
index 0000000..33ee4fe
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterRemoveParameterWithJavadoc.java
@@ -0,0 +1,10 @@
+public class Bar {
+
+    /**
+     *
+     * @param anObject
+     */
+    public void printError(String detail, String anObject) {
+        System.out.println(anObject + " error: " + detail);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterReplaceAllAndDeleteUnused.java b/java/java-tests/testData/refactoring/introduceParameter/afterReplaceAllAndDeleteUnused.java
new file mode 100644
index 0000000..8f99f87
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterReplaceAllAndDeleteUnused.java
@@ -0,0 +1,11 @@
+public class Parameters {
+        public void subject(final int anObject) {
+                System.out.println(anObject);
+                System.out.println(anObject);
+        }
+
+        public void context() {
+                subject(1 +1);
+                subject(2 +1);
+        }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterSelfReference.java b/java/java-tests/testData/refactoring/introduceParameter/afterSelfReference.java
new file mode 100644
index 0000000..9ade5ad
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterSelfReference.java
@@ -0,0 +1,9 @@
+class Test {
+  void foo(boolean flag, int i, final int anObject) {
+    if (flag) {
+      foo(false, i, anObject);
+    }
+    System.out.println();
+    foo(false, i, anObject);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterSelfReferenceVarargs.java b/java/java-tests/testData/refactoring/introduceParameter/afterSelfReferenceVarargs.java
new file mode 100644
index 0000000..c088fd2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterSelfReferenceVarargs.java
@@ -0,0 +1,9 @@
+class Test {
+  void foo(boolean flag, final String anObject, int... i) {
+    if (flag) {
+      foo(false, anObject, i);
+    }
+    System.out.println();
+    foo(flag, anObject, i);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterSelfReferenceVarargs1.java b/java/java-tests/testData/refactoring/introduceParameter/afterSelfReferenceVarargs1.java
new file mode 100644
index 0000000..ffcb8ac6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterSelfReferenceVarargs1.java
@@ -0,0 +1,6 @@
+class Test {
+  void foo(final String anObject, int... i) {
+    foo(anObject, 1);
+    foo(anObject, 3);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterSimpleUsage.java b/java/java-tests/testData/refactoring/introduceParameter/afterSimpleUsage.java
new file mode 100644
index 0000000..1f99aa9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterSimpleUsage.java
@@ -0,0 +1,18 @@
+class Test {
+   public int m(int a, int b, int anObject) {
+        if(a > b) {
+           return anObject;
+        }
+        else {
+           return anObject;
+        }
+   }
+}
+
+class Test1 {
+  Test t;
+
+  public int n(int v) {
+    return t.m(v, 1, 0);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterSimplifiedResultedType.java b/java/java-tests/testData/refactoring/introduceParameter/afterSimplifiedResultedType.java
new file mode 100644
index 0000000..d56819d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterSimplifiedResultedType.java
@@ -0,0 +1,24 @@
+import java.util.*;
+public class IntroduceParameterProducesWarning {
+    private final List<Generic<?>> elements;
+
+    public IntroduceParameterProducesWarning(final ArrayList<Generic<?>> anObject) {
+        elements = anObject;
+    }
+
+    public static <E> ArrayList<E> newArrayList(E... elements) {
+        ArrayList<E> list = new ArrayList<E>();
+        Collections.addAll(list, elements);
+        return list;
+    }
+
+    private static interface Generic<T>{
+
+    }
+
+    private static class SomeGeneric implements Generic<String> {
+    }
+
+    private static class SomeOtherGeneric implements Generic<Object> {
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterStaticFieldAccess.java b/java/java-tests/testData/refactoring/introduceParameter/afterStaticFieldAccess.java
new file mode 100644
index 0000000..9f0435b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterStaticFieldAccess.java
@@ -0,0 +1,16 @@
+class Test {
+    public static int i;
+    
+    int method(int a, int anObject) {
+        return anObject;
+    }
+}
+
+class X {
+    public static int i;
+    
+    int yyy(int z) {
+        Test t;
+        return t.method(z, z + Test.i);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterStaticFieldWithGetterReplacement.java b/java/java-tests/testData/refactoring/introduceParameter/afterStaticFieldWithGetterReplacement.java
new file mode 100644
index 0000000..a0288eb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterStaticFieldWithGetterReplacement.java
@@ -0,0 +1,17 @@
+public class R {
+  private static int ourInt;
+
+  public static int getOurInt() {
+    return ourInt;
+  }
+
+  public static void doSmth(final int anObject) {
+    System.out.println(anObject);
+  }
+}
+
+class Usage {
+  void foo() {
+    R.doSmth(R.getOurInt());
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterSubstituteTypeParams.java b/java/java-tests/testData/refactoring/introduceParameter/afterSubstituteTypeParams.java
new file mode 100644
index 0000000..f1aecfd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterSubstituteTypeParams.java
@@ -0,0 +1,11 @@
+import java.util.*;
+class Test {
+ <T> void foo(T t, final ArrayList<T> anObject) {
+    List<T> ls = anObject;
+  }
+
+  void bar() {
+    String s = "";
+    foo(s, new ArrayList<String>());
+  }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterSuperInExpression.java b/java/java-tests/testData/refactoring/introduceParameter/afterSuperInExpression.java
new file mode 100644
index 0000000..965c542
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterSuperInExpression.java
@@ -0,0 +1,18 @@
+class T1 {
+    int method(int i) {
+        return 0;
+    }
+}
+
+class T2 extends T1 {
+    int method(int i, int anObject) {
+        return anObject;
+    }
+}
+
+class Usage {
+    int m() {
+        T2 test;
+        return test.method(0, test.method(0) + 1);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterSuperWithSideEffect.java b/java/java-tests/testData/refactoring/introduceParameter/afterSuperWithSideEffect.java
new file mode 100644
index 0000000..2aabb52
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterSuperWithSideEffect.java
@@ -0,0 +1,18 @@
+class T1 {
+    int method(int i) {
+        return 0;
+    }
+}
+
+class T2 extends T1 {
+    int method(int i, int anObject) {
+        return anObject;
+    }
+}
+
+class Usage {
+    int m() {
+        final T2 t2 = new T2();
+        return t2.method(0, t2.method(0) + 1);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterThisSubstitution.java b/java/java-tests/testData/refactoring/introduceParameter/afterThisSubstitution.java
new file mode 100644
index 0000000..b188dcc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterThisSubstitution.java
@@ -0,0 +1,14 @@
+class Test {
+    int method(int a, int b, Test anObject) {
+        return anObject.i;
+    }
+    private int i;
+}
+
+class XTest {
+    int n() {
+        Test t;
+        
+        return t.method(1, 2, t);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterThisSubstitutionInQualifier.java b/java/java-tests/testData/refactoring/introduceParameter/afterThisSubstitutionInQualifier.java
new file mode 100644
index 0000000..97c6e50
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterThisSubstitutionInQualifier.java
@@ -0,0 +1,14 @@
+class Test {
+    int method(int a, int b, int anObject) {
+        return anObject;
+    }
+    private int i;
+}
+
+class XTest {
+    int n() {
+        Test t;
+        
+        return t.method(1, 2, t.i);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterUseInInnerClass.java b/java/java-tests/testData/refactoring/introduceParameter/afterUseInInnerClass.java
new file mode 100644
index 0000000..63cc4d7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterUseInInnerClass.java
@@ -0,0 +1,13 @@
+class Test {
+    public void test(final String anObject) {
+        new Runnable() {
+            public void run() {
+                System.out.println(anObject);
+            }
+        }.run();
+    }
+
+    public void use() {
+        test("");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterVarargs.java b/java/java-tests/testData/refactoring/introduceParameter/afterVarargs.java
new file mode 100644
index 0000000..66ee10b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterVarargs.java
@@ -0,0 +1,18 @@
+class Test {
+   public int m(int a, int anObject, int... values) {
+        if(a > values.length) {
+           return anObject;
+        }
+        else {
+           return anObject;
+        }
+   }
+}
+
+class Test1 {
+  Test t;
+
+  public int n(int v) {
+    return t.m(v, 0, 1);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterVarargs1.java b/java/java-tests/testData/refactoring/introduceParameter/afterVarargs1.java
new file mode 100644
index 0000000..4a82552
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterVarargs1.java
@@ -0,0 +1,8 @@
+import java.util.*;
+
+public class Collect {
+    public void m(List<String> anObject) {
+       List strs = anObject;
+   }
+
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterWeirdQualifier.java b/java/java-tests/testData/refactoring/introduceParameter/afterWeirdQualifier.java
new file mode 100644
index 0000000..2558b90
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterWeirdQualifier.java
@@ -0,0 +1,16 @@
+public class Test {
+    int method(int i) {
+        return 0;
+    }
+
+    int m(int i, int j, int anObject) {
+        return i + anObject;
+    }
+}
+
+class X {
+   public int n(int a) {
+       final Test test = new Test();
+       return test.m(a, a * 2, test.method(a * 2));
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterWeirdQualifierAndParameter.java b/java/java-tests/testData/refactoring/introduceParameter/afterWeirdQualifierAndParameter.java
new file mode 100644
index 0000000..04ff25e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/afterWeirdQualifierAndParameter.java
@@ -0,0 +1,16 @@
+public class Test {    
+    int method(int i) {
+        return 0;
+    }
+
+    int m(int i, int j, Test t, int anObject) {
+        return i + anObject;
+    }
+}
+
+class X {
+   public int n(int a) {
+       final Test t = new Test();
+       return (new Test()).m(a, a * 2, t, t.method(a * 2));
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeAnonymousClass.java b/java/java-tests/testData/refactoring/introduceParameter/beforeAnonymousClass.java
new file mode 100644
index 0000000..0772b12
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeAnonymousClass.java
@@ -0,0 +1,10 @@
+public class Test {
+  public Test() {
+    int i = <selection>0</selection>;
+  }
+
+  public Test get() {
+    return new Test() {
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeArrayInitializer.java b/java/java-tests/testData/refactoring/introduceParameter/beforeArrayInitializer.java
new file mode 100644
index 0000000..b51d906
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeArrayInitializer.java
@@ -0,0 +1,10 @@
+class Test {
+  public synchronized boolean foo(String msg) {
+    return bar(message);
+  }
+
+  private boolean bar(String parameter) {
+    String[] params = <selection>{parameter}</selection>;
+    return false;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeConflictingField.java b/java/java-tests/testData/refactoring/introduceParameter/beforeConflictingField.java
new file mode 100644
index 0000000..77d714a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeConflictingField.java
@@ -0,0 +1,25 @@
+public class Test {
+    public int anObject;
+    public void method() {
+    }
+}
+
+public class Test1 extends Test {
+    public void method() {
+        System.out.println(<selection>1 + 2</selection>);
+        System.out.println(anObject);
+    }
+}
+
+public class Test2 extends Test1 {
+    public void method() {
+        System.out.println(anObject);
+    }
+}
+
+public class Usage {
+    {
+        Test t = new Test2();
+        t.method();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeDelegateWithVarargs.java b/java/java-tests/testData/refactoring/introduceParameter/beforeDelegateWithVarargs.java
new file mode 100644
index 0000000..0f1ab3e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeDelegateWithVarargs.java
@@ -0,0 +1,5 @@
+public class Test {
+        void m(int... ps) {
+                System.out.println(<selection>"asd"</selection>);
+        }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeDiamond2Raw.java b/java/java-tests/testData/refactoring/introduceParameter/beforeDiamond2Raw.java
new file mode 100644
index 0000000..2976ef4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeDiamond2Raw.java
@@ -0,0 +1,6 @@
+import java.util.ArrayList
+class Test {
+  void foo() {
+    ArrayList l = <selection>new ArrayList<>()</selection>;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeDiamondOccurrences.java b/java/java-tests/testData/refactoring/introduceParameter/beforeDiamondOccurrences.java
new file mode 100644
index 0000000..b96aa1a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeDiamondOccurrences.java
@@ -0,0 +1,13 @@
+import java.util.*;
+
+class Test {
+  void foo() {
+    List<String> ls = <selection>new ArrayList<>()</selection>;
+    List<String> lss = new ArrayList<>();
+    List<Integer> li = new ArrayList<>();
+  }
+  
+  void bar() {
+    foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeEnclosingWithParamDeletion.java b/java/java-tests/testData/refactoring/introduceParameter/beforeEnclosingWithParamDeletion.java
new file mode 100644
index 0000000..2319201
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeEnclosingWithParamDeletion.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2000-2011 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 AAAA {
+  void foo() {
+    sampleEnclosing("A");
+  }
+
+  private void sampleEnclosing(final String s) {
+    new AAAA() {
+      void bar() {
+        System.out.println(<selection>s + ""</selection>);
+      }
+    }.bar();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeEnums.java b/java/java-tests/testData/refactoring/introduceParameter/beforeEnums.java
new file mode 100644
index 0000000..bcfd7c4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeEnums.java
@@ -0,0 +1,6 @@
+public enum E{
+  a, b;
+  public E() {
+    System.out.print(<selection>2</selection>);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeExpectedType.java b/java/java-tests/testData/refactoring/introduceParameter/beforeExpectedType.java
new file mode 100644
index 0000000..d48fce0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeExpectedType.java
@@ -0,0 +1,12 @@
+class Test {
+    void f (String s) {}
+
+    void u () {
+        f(<selection>name</selection>);
+    }
+
+    void y () {
+        String name = "";
+        u();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeFieldAccess.java b/java/java-tests/testData/refactoring/introduceParameter/beforeFieldAccess.java
new file mode 100644
index 0000000..a2a9636
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeFieldAccess.java
@@ -0,0 +1,14 @@
+class Test {
+    int method(int a, int b) {
+        return <selection>i</selection>;
+    }
+    int i;
+}
+
+class XTest {
+    int n() {
+        Test t;
+        
+        return t.method(1, 2);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeFieldWithGetterReplacement.java b/java/java-tests/testData/refactoring/introduceParameter/beforeFieldWithGetterReplacement.java
new file mode 100644
index 0000000..425c99d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeFieldWithGetterReplacement.java
@@ -0,0 +1,16 @@
+class Test {
+    int i;
+    
+    public int getI() { return i; }
+    
+    int method(int a) {
+        return <selection>a + i</selection>;
+    }
+}
+
+class XXX {
+    public int m() {
+        Test t;
+        return t.method(1);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeFieldWithInaccessibleGetterReplacement.java b/java/java-tests/testData/refactoring/introduceParameter/beforeFieldWithInaccessibleGetterReplacement.java
new file mode 100644
index 0000000..24079f1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeFieldWithInaccessibleGetterReplacement.java
@@ -0,0 +1,16 @@
+class Test {
+    public int i;
+    
+    public int getI() { return i; }
+    
+    int method(int a) {
+        return <selection>a + i</selection>;
+    }
+}
+
+class XXX {
+    public int m() {
+        Test t;
+        return t.method(1);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeGenerateDelegate.java b/java/java-tests/testData/refactoring/introduceParameter/beforeGenerateDelegate.java
new file mode 100644
index 0000000..0ea6940
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeGenerateDelegate.java
@@ -0,0 +1,18 @@
+class Test {
+    public int m(int a, int b) {
+        if(a > b) {
+           return <selection>0</selection>;
+        }
+        else {
+           return 0;
+        }
+    }
+}
+
+class Test1 {
+  Test t;
+
+  public int n(int v) {
+    return t.m(v, 1);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeGenerateDelegateInSuperClass.java b/java/java-tests/testData/refactoring/introduceParameter/beforeGenerateDelegateInSuperClass.java
new file mode 100644
index 0000000..26a79f9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeGenerateDelegateInSuperClass.java
@@ -0,0 +1,14 @@
+abstract class A {
+  abstract void xxx();
+}
+
+class B implements A {
+  public void xxx() {
+    System.out.println(<selection>239</selection>);
+  }
+
+  static {
+    A a = new B();
+    a.xxx();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeGenerateDelegateInSuperInterface.java b/java/java-tests/testData/refactoring/introduceParameter/beforeGenerateDelegateInSuperInterface.java
new file mode 100644
index 0000000..2e6c20d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeGenerateDelegateInSuperInterface.java
@@ -0,0 +1,14 @@
+interface A {
+  void xxx();
+}
+
+class B implements A {
+  public void xxx() {
+    System.out.println(<selection>239</selection>);
+  }
+
+  static {
+    A a = new B();
+    a.xxx();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeGenerateDelegateNoArgs.java b/java/java-tests/testData/refactoring/introduceParameter/beforeGenerateDelegateNoArgs.java
new file mode 100644
index 0000000..d8195ff
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeGenerateDelegateNoArgs.java
@@ -0,0 +1,13 @@
+class Test {
+    public int m() {
+        return <selection>0</selection>;
+    }
+}
+
+class Test1 {
+  Test t;
+
+  public int n(int v) {
+    return t.m();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeGenerateDelegateRemoveParameter.java b/java/java-tests/testData/refactoring/introduceParameter/beforeGenerateDelegateRemoveParameter.java
new file mode 100644
index 0000000..7b6d585
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeGenerateDelegateRemoveParameter.java
@@ -0,0 +1,5 @@
+public class Bar {
+    public int baz(byte blah) {
+        return <selection><caret>blah + blah + 3</selection>;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeGetterQualifier.java b/java/java-tests/testData/refactoring/introduceParameter/beforeGetterQualifier.java
new file mode 100644
index 0000000..ac937dc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeGetterQualifier.java
@@ -0,0 +1,22 @@
+public class Test {
+    private String myStr;
+
+    public String getMyStr() {
+        return myStr;
+    }
+
+    void foo() {
+        new Runnable(){
+            @Override
+            public void run() {
+                  System.out.println(<selection>myStr</selection>);
+            }
+        };
+    }
+}
+
+class X {
+   public void n() {
+       new Test().foo();
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeImplicitDefaultConstructor.java b/java/java-tests/testData/refactoring/introduceParameter/beforeImplicitDefaultConstructor.java
new file mode 100644
index 0000000..90a06c0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeImplicitDefaultConstructor.java
@@ -0,0 +1,13 @@
+class A {
+    int i;
+    public A() {
+        i = <selection>27</selection>;
+    }
+}
+
+class B extends A {
+}
+
+class Usage {
+    A a = new B();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeImplicitSuperCall.java b/java/java-tests/testData/refactoring/introduceParameter/beforeImplicitSuperCall.java
new file mode 100644
index 0000000..c0d009b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeImplicitSuperCall.java
@@ -0,0 +1,18 @@
+class A {
+    int i;
+    public A() {
+        i = <selection>27</selection>;
+    }
+}
+
+class B extends A {
+    int k;
+
+    public B() {
+        k = 10;
+    }
+}
+
+class Usage {
+    A a = new B();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeIncompleteEnumDefinition.java b/java/java-tests/testData/refactoring/introduceParameter/beforeIncompleteEnumDefinition.java
new file mode 100644
index 0000000..21a3f7c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeIncompleteEnumDefinition.java
@@ -0,0 +1,10 @@
+enum Test {
+  Root();
+
+  public Test(String description, int position) {
+    System.out.println(description);
+    System.out.println(<selection>position + ""</selection>);
+  }
+
+}
+
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeIncompleteVararg.java b/java/java-tests/testData/refactoring/introduceParameter/beforeIncompleteVararg.java
new file mode 100644
index 0000000..886c913
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeIncompleteVararg.java
@@ -0,0 +1,10 @@
+class C {
+    void method(int k, String... s) {
+        System.out.println(s[<selection>k</selection>]);
+    }
+
+    {
+        method("a", "b", "c");
+        method();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeIncorrectScope.java b/java/java-tests/testData/refactoring/introduceParameter/beforeIncorrectScope.java
new file mode 100644
index 0000000..c701c15
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeIncorrectScope.java
@@ -0,0 +1,17 @@
+public class InnerOuter {
+  String anObject = "";
+
+  interface Inner {
+    void exec();
+  }
+
+  Inner instance = new Inner() {
+    public void exec() {
+      <selection>anObject</selection>.charAt(1);
+    }
+  };
+
+  void foo() {
+   instance.exec();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeInternalSideEffect.java b/java/java-tests/testData/refactoring/introduceParameter/beforeInternalSideEffect.java
new file mode 100644
index 0000000..7204448
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeInternalSideEffect.java
@@ -0,0 +1,21 @@
+import java.util.*;
+
+public class Test {
+    int field;
+    int method() {
+        return <selection>field</selection>;
+    }
+}
+
+public class Usage {
+    int usage(Test[] tests) {
+        int sum = 0;
+        for(int i = 0; i < tests.length;) {
+            sum += tests[i++].method();
+        }
+        List list = Arrays.asList(tests);
+        for(int i = 0; i < list.size();) {
+            sum += ((Test)list.get(i++)).method();        
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeLocalVarDeclaration.java b/java/java-tests/testData/refactoring/introduceParameter/beforeLocalVarDeclaration.java
new file mode 100644
index 0000000..a18a104
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeLocalVarDeclaration.java
@@ -0,0 +1,5 @@
+class Foo {
+    void f() {
+        int k = <selection>0</selection>;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeLocalVarSelection.java b/java/java-tests/testData/refactoring/introduceParameter/beforeLocalVarSelection.java
new file mode 100644
index 0000000..590611f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeLocalVarSelection.java
@@ -0,0 +1,10 @@
+class Test {
+    public void test() {
+        final String <selection>s</selection> = "";
+        System.out.println(s);
+    }
+
+    public void use() {
+        test();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeMethodAccess.java b/java/java-tests/testData/refactoring/introduceParameter/beforeMethodAccess.java
new file mode 100644
index 0000000..26d0c80
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeMethodAccess.java
@@ -0,0 +1,18 @@
+class Test {
+    int method(int a, int b) {
+        return <selection>anotherMethod(a + b)</selection>;
+    }
+    int i;
+    
+    int anotherMethod(int x) { 
+        return x;
+    }
+}
+
+class XTest {
+    int n() {
+        Test t;
+        
+        return t.method(1, 2);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeMethodUsageInThisMethodInheritor.java b/java/java-tests/testData/refactoring/introduceParameter/beforeMethodUsageInThisMethodInheritor.java
new file mode 100644
index 0000000..f3708af
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeMethodUsageInThisMethodInheritor.java
@@ -0,0 +1,11 @@
+class C {
+  int foo(int x) {
+     return <selection>x+1</selection>;
+  }
+}
+
+class D extends C {
+  int foo(int x) {
+    return super.foo(x);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeMethodWithoutParams.java b/java/java-tests/testData/refactoring/introduceParameter/beforeMethodWithoutParams.java
new file mode 100644
index 0000000..1f1df14
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeMethodWithoutParams.java
@@ -0,0 +1,12 @@
+class Test {
+    int m() {
+        return <selection>0</selection>;
+    }
+}
+
+class X3 {
+    int n() {
+        Test t;
+        return t.m();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeNoUsages.java b/java/java-tests/testData/refactoring/introduceParameter/beforeNoUsages.java
new file mode 100644
index 0000000..1ebe5c9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeNoUsages.java
@@ -0,0 +1,5 @@
+class Test {
+   public int m(int a, int b) {
+	return <selection>0</selection>;
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeNull.java b/java/java-tests/testData/refactoring/introduceParameter/beforeNull.java
new file mode 100644
index 0000000..7e0f200
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeNull.java
@@ -0,0 +1,6 @@
+class Test {
+    public Test method() {
+        return <selection>null</selection>;
+    }
+}
+
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeParameterInFor.java b/java/java-tests/testData/refactoring/introduceParameter/beforeParameterInFor.java
new file mode 100644
index 0000000..066c64c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeParameterInFor.java
@@ -0,0 +1,9 @@
+import java.util.*;
+
+class XX {
+    public void g(List l) {
+        for(Iterator <caret>it = l.iterator(); it.hasNext();) {
+            Object o = it.next():
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeParameterJavaDoc1.java b/java/java-tests/testData/refactoring/introduceParameter/beforeParameterJavaDoc1.java
new file mode 100644
index 0000000..87d8476
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeParameterJavaDoc1.java
@@ -0,0 +1,7 @@
+class Test {
+    /**
+     */
+    int method() {
+        return <selection>10</selection>;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeParameterJavaDoc2.java b/java/java-tests/testData/refactoring/introduceParameter/beforeParameterJavaDoc2.java
new file mode 100644
index 0000000..c5f7a4c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeParameterJavaDoc2.java
@@ -0,0 +1,8 @@
+class Test {
+    /**
+     * @param s
+     */
+    int method(String s) {
+        return <selection>10</selection>;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeParameterJavaDoc3.java b/java/java-tests/testData/refactoring/introduceParameter/beforeParameterJavaDoc3.java
new file mode 100644
index 0000000..22dfcd6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeParameterJavaDoc3.java
@@ -0,0 +1,8 @@
+class Test {
+    /**
+     *  Incomplete JavaDoc
+     */
+    int method(String s) {
+        return <selection>10</selection>;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeParameterJavaDocBeforeVararg.java b/java/java-tests/testData/refactoring/introduceParameter/beforeParameterJavaDocBeforeVararg.java
new file mode 100644
index 0000000..ff57652
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeParameterJavaDocBeforeVararg.java
@@ -0,0 +1,13 @@
+class C {
+    /**
+     * @param s
+     */
+    void method(String... s) {
+        System.out.println(s[<selection>0</selection>]);
+    }
+
+    {
+        method("a", "b", "c");
+        method();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeParameterSubstitution.java b/java/java-tests/testData/refactoring/introduceParameter/beforeParameterSubstitution.java
new file mode 100644
index 0000000..5f5455b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeParameterSubstitution.java
@@ -0,0 +1,13 @@
+class Test {
+    int method(int a, int b) {
+        return <selection>a + b</selection>;
+    }
+}
+
+class XTest {
+    int n() {
+        Test t;
+        
+        return t.method(1, 2);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforePreserveDiamondOccurrences.java b/java/java-tests/testData/refactoring/introduceParameter/beforePreserveDiamondOccurrences.java
new file mode 100644
index 0000000..2bf9a85
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforePreserveDiamondOccurrences.java
@@ -0,0 +1,22 @@
+
+public class TestCompletion {
+
+    public static <T, V> ParallelPipeline<T, V> test(T base, V newStage, T upstream) {
+        if (base != null){
+            return <selection>new ParallelPipeline<>(base, newStage)</selection>;
+        }
+        else {
+            return new ParallelPipeline<>(upstream, newStage);
+        }
+
+    }
+
+
+    void f() {
+        test(null, null, null);
+    }
+    private static class ParallelPipeline<T, V> {
+        public ParallelPipeline(T p0, V p1) {
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeQualifiedNew.java b/java/java-tests/testData/refactoring/introduceParameter/beforeQualifiedNew.java
new file mode 100644
index 0000000..0f70592
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeQualifiedNew.java
@@ -0,0 +1,10 @@
+class Test {
+    class A {
+        class B {
+        }
+    }
+ 
+    Object method() {
+        return <selection>new A().new B()</selection>;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeRemoveParameter.java b/java/java-tests/testData/refactoring/introduceParameter/beforeRemoveParameter.java
new file mode 100644
index 0000000..7b6d585
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeRemoveParameter.java
@@ -0,0 +1,5 @@
+public class Bar {
+    public int baz(byte blah) {
+        return <selection><caret>blah + blah + 3</selection>;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeRemoveParameterAfterVariable.java b/java/java-tests/testData/refactoring/introduceParameter/beforeRemoveParameterAfterVariable.java
new file mode 100644
index 0000000..df297d9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeRemoveParameterAfterVariable.java
@@ -0,0 +1,6 @@
+public class Bar {
+    public int baz(byte blah) {
+        int <caret><selection>var</selection> = blah + 5;
+        return var + 9;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeRemoveParameterInHierarchy.java b/java/java-tests/testData/refactoring/introduceParameter/beforeRemoveParameterInHierarchy.java
new file mode 100644
index 0000000..e404dd3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeRemoveParameterInHierarchy.java
@@ -0,0 +1,10 @@
+public class Bar {
+    public int baz(byte blah) {
+        return <selection>blah + 3</selection>;
+    }
+}
+class S extends Bar {
+    public int baz(byte blah) {
+        return super.baz((byte) 0);    //To change body of overridden methods use File | Settings | File Templates.
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeRemoveParameterWithJavadoc.java b/java/java-tests/testData/refactoring/introduceParameter/beforeRemoveParameterWithJavadoc.java
new file mode 100644
index 0000000..5f81740
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeRemoveParameterWithJavadoc.java
@@ -0,0 +1,11 @@
+public class Bar {
+
+    /**
+     *
+     * @param line
+     * @param file
+     */
+    public void printError(String detail, int line, String file) {
+        System.out.println(<selection>file + ":" +line</selection> + " error: " + detail);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeReplaceAllAndDeleteUnused.java b/java/java-tests/testData/refactoring/introduceParameter/beforeReplaceAllAndDeleteUnused.java
new file mode 100644
index 0000000..820f5e5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeReplaceAllAndDeleteUnused.java
@@ -0,0 +1,11 @@
+public class Parameters {
+        public void subject(int p) {
+                System.out.println(<selection>p+1</selection>);
+                System.out.println(p+1);
+        }
+
+        public void context() {
+                subject(1);
+                subject(2);
+        }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeSelfReference.java b/java/java-tests/testData/refactoring/introduceParameter/beforeSelfReference.java
new file mode 100644
index 0000000..11a05df
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeSelfReference.java
@@ -0,0 +1,9 @@
+class Test {
+  void foo(boolean flag, int i) {
+    if (flag) {
+      foo(false, i, <selection>i + 1</selection>);
+    }
+    System.out.println();
+    foo(false, i);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeSelfReferenceVarargs.java b/java/java-tests/testData/refactoring/introduceParameter/beforeSelfReferenceVarargs.java
new file mode 100644
index 0000000..407baf1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeSelfReferenceVarargs.java
@@ -0,0 +1,9 @@
+class Test {
+  void foo(boolean flag, int... i) {
+    if (flag) {
+      foo(false, <selection>""</selection>, i);
+    }
+    System.out.println();
+    foo(flag, i);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeSelfReferenceVarargs1.java b/java/java-tests/testData/refactoring/introduceParameter/beforeSelfReferenceVarargs1.java
new file mode 100644
index 0000000..197d75c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeSelfReferenceVarargs1.java
@@ -0,0 +1,6 @@
+class Test {
+  void foo(int... i) {
+    foo(<selection>""</selection>, 1);
+    foo(3);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeSimpleUsage.java b/java/java-tests/testData/refactoring/introduceParameter/beforeSimpleUsage.java
new file mode 100644
index 0000000..0a250d0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeSimpleUsage.java
@@ -0,0 +1,18 @@
+class Test {
+   public int m(int a, int b) {
+        if(a > b) {
+           return <selection>0</selection>;
+        }
+        else {
+           return 0;
+        }
+   }
+}
+
+class Test1 {
+  Test t;
+
+  public int n(int v) {
+    return t.m(v, 1);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeSimplifiedResultedType.java b/java/java-tests/testData/refactoring/introduceParameter/beforeSimplifiedResultedType.java
new file mode 100644
index 0000000..1a7e823
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeSimplifiedResultedType.java
@@ -0,0 +1,24 @@
+import java.util.*;
+public class IntroduceParameterProducesWarning {
+    private final List<Generic<?>> elements;
+
+    public IntroduceParameterProducesWarning() {
+        elements = <selection>newArrayList(new SomeGeneric(), new SomeOtherGeneric())</selection>;
+    }
+
+    public static <E> ArrayList<E> newArrayList(E... elements) {
+        ArrayList<E> list = new ArrayList<E>();
+        Collections.addAll(list, elements);
+        return list;
+    }
+
+    private static interface Generic<T>{
+
+    }
+
+    private static class SomeGeneric implements Generic<String> {
+    }
+
+    private static class SomeOtherGeneric implements Generic<Object> {
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeStaticFieldAccess.java b/java/java-tests/testData/refactoring/introduceParameter/beforeStaticFieldAccess.java
new file mode 100644
index 0000000..6d68a96
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeStaticFieldAccess.java
@@ -0,0 +1,16 @@
+class Test {
+    public static int i;
+    
+    int method(int a) {
+        return <selection>a + i</selection>;
+    }
+}
+
+class X {
+    public static int i;
+    
+    int yyy(int z) {
+        Test t;
+        return t.method(z);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeStaticFieldWithGetterReplacement.java b/java/java-tests/testData/refactoring/introduceParameter/beforeStaticFieldWithGetterReplacement.java
new file mode 100644
index 0000000..89135cc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeStaticFieldWithGetterReplacement.java
@@ -0,0 +1,17 @@
+public class R {
+  private static int ourInt;
+
+  public static int getOurInt() {
+    return ourInt;
+  }
+
+  public static void doSmth() {
+    System.out.println(<selection>ourInt</selection>);
+  }
+}
+
+class Usage {
+  void foo() {
+    R.doSmth();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeSubstituteTypeParams.java b/java/java-tests/testData/refactoring/introduceParameter/beforeSubstituteTypeParams.java
new file mode 100644
index 0000000..bb01ea7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeSubstituteTypeParams.java
@@ -0,0 +1,11 @@
+import java.util.*;
+class Test {
+ <T> void foo(T t) {
+    List<T> ls = <selection>new ArrayList<T>()</selection>;
+  }
+
+  void bar() {
+    String s = "";
+    foo(s);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeSuperInExpression.java b/java/java-tests/testData/refactoring/introduceParameter/beforeSuperInExpression.java
new file mode 100644
index 0000000..58d1657
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeSuperInExpression.java
@@ -0,0 +1,18 @@
+class T1 {
+    int method(int i) {
+        return 0;
+    }
+}
+
+class T2 extends T1 {
+    int method(int i) {
+        return <selection>super.method(i) + 1</selection>;
+    }
+}
+
+class Usage {
+    int m() {
+        T2 test;
+        return test.method(0);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeSuperWithSideEffect.java b/java/java-tests/testData/refactoring/introduceParameter/beforeSuperWithSideEffect.java
new file mode 100644
index 0000000..5568c5f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeSuperWithSideEffect.java
@@ -0,0 +1,17 @@
+class T1 {
+    int method(int i) {
+        return 0;
+    }
+}
+
+class T2 extends T1 {
+    int method(int i) {
+        return <selection>super.method(i) + 1</selection>;
+    }
+}
+
+class Usage {
+    int m() {
+        return new T2().method(0);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeThisSubstitution.java b/java/java-tests/testData/refactoring/introduceParameter/beforeThisSubstitution.java
new file mode 100644
index 0000000..3fc8f46
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeThisSubstitution.java
@@ -0,0 +1,14 @@
+class Test {
+    int method(int a, int b) {
+        return <selection>this</selection>.i;
+    }
+    private int i;
+}
+
+class XTest {
+    int n() {
+        Test t;
+        
+        return t.method(1, 2);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeThisSubstitutionInQualifier.java b/java/java-tests/testData/refactoring/introduceParameter/beforeThisSubstitutionInQualifier.java
new file mode 100644
index 0000000..f4dc05b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeThisSubstitutionInQualifier.java
@@ -0,0 +1,14 @@
+class Test {
+    int method(int a, int b) {
+        return <selection>this.i</selection>;
+    }
+    private int i;
+}
+
+class XTest {
+    int n() {
+        Test t;
+        
+        return t.method(1, 2);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeUseInInnerClass.java b/java/java-tests/testData/refactoring/introduceParameter/beforeUseInInnerClass.java
new file mode 100644
index 0000000..8427e94
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeUseInInnerClass.java
@@ -0,0 +1,14 @@
+class Test {
+    public void test() {
+        final String <caret>s = "";
+        new Runnable() {
+            public void run() {
+                System.out.println(s);
+            }
+        }.run();
+    }
+
+    public void use() {
+        test();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeVarargs.java b/java/java-tests/testData/refactoring/introduceParameter/beforeVarargs.java
new file mode 100644
index 0000000..6eca54b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeVarargs.java
@@ -0,0 +1,18 @@
+class Test {
+   public int m(int a, int... values) {
+        if(a > values.length) {
+           return <selection>0</selection>;
+        }
+        else {
+           return 0;
+        }
+   }
+}
+
+class Test1 {
+  Test t;
+
+  public int n(int v) {
+    return t.m(v, 1);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeVarargs1.java b/java/java-tests/testData/refactoring/introduceParameter/beforeVarargs1.java
new file mode 100644
index 0000000..819449b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeVarargs1.java
@@ -0,0 +1,8 @@
+import java.util.*;
+
+public class Collect {
+    public void m(String names) {
+       List strs = <selection>Arrays.asList(names)</selection>;
+   }
+
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeWeirdQualifier.java b/java/java-tests/testData/refactoring/introduceParameter/beforeWeirdQualifier.java
new file mode 100644
index 0000000..f061b0f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeWeirdQualifier.java
@@ -0,0 +1,15 @@
+public class Test {
+    int method(int i) {
+        return 0;
+    }
+
+    int m(int i, int j) {
+        return i + <selection>method(j)</selection>;
+    }
+}
+
+class X {
+   public int n(int a) {
+        return (new Test()).m(a, a * 2);
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeWeirdQualifierAndParameter.java b/java/java-tests/testData/refactoring/introduceParameter/beforeWeirdQualifierAndParameter.java
new file mode 100644
index 0000000..df50368
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameter/beforeWeirdQualifierAndParameter.java
@@ -0,0 +1,15 @@
+public class Test {    
+    int method(int i) {
+        return 0;
+    }
+
+    int m(int i, int j, Test t) {
+        return i + <selection>t.method(j)</selection>;
+    }
+}
+
+class X {
+   public int n(int a) {
+        return (new Test()).m(a, a * 2, new Test());
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/copyJavadoc/after/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/copyJavadoc/after/Test.java
new file mode 100644
index 0000000..3d9a4e0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/copyJavadoc/after/Test.java
@@ -0,0 +1,26 @@
+class Test {
+  /**
+   * foo comment
+   * @param param
+   */
+  void foo(Param param) {
+    bar(param.getS());
+  }
+
+  void bar(String s){}
+
+    private static class Param {
+        private final String s;
+
+        /**
+         * @param s long description
+         */
+        private Param(String s) {
+            this.s = s;
+        }
+
+        public String getS() {
+            return s;
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/copyJavadoc/before/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/copyJavadoc/before/Test.java
new file mode 100644
index 0000000..f9260f0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/copyJavadoc/before/Test.java
@@ -0,0 +1,11 @@
+class Test {
+  /**
+   * foo comment
+   * @param s long description
+   */
+  void foo(String s) {
+    bar(s);
+  }
+
+  void bar(String s){}
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/delegate/after/Param.java b/java/java-tests/testData/refactoring/introduceParameterObject/delegate/after/Param.java
new file mode 100644
index 0000000..0c888bf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/delegate/after/Param.java
@@ -0,0 +1,11 @@
+public class Param {
+    private final int[] i;
+
+    public Param(int... i) {
+        this.i = i;
+    }
+
+    public int[] getI() {
+        return i;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/delegate/after/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/delegate/after/Test.java
new file mode 100644
index 0000000..d9c551b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/delegate/after/Test.java
@@ -0,0 +1,14 @@
+class Test {
+    void foo(int... i) {
+        foo(new Param(i));
+    }
+
+    void foo(Param param) {
+    if (param.getI().lenght == 0) {
+    }
+  }
+
+  void bar(){
+    foo(1, 2);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/delegate/before/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/delegate/before/Test.java
new file mode 100644
index 0000000..c1117cc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/delegate/before/Test.java
@@ -0,0 +1,10 @@
+class Test {
+  void foo(int... i) {
+    if (i.lenght == 0) {
+    }
+  }
+
+  void bar(){
+    foo(1, 2);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/existentBean/after/Param.java b/java/java-tests/testData/refactoring/introduceParameterObject/existentBean/after/Param.java
new file mode 100644
index 0000000..0c888bf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/existentBean/after/Param.java
@@ -0,0 +1,11 @@
+public class Param {
+    private final int[] i;
+
+    public Param(int... i) {
+        this.i = i;
+    }
+
+    public int[] getI() {
+        return i;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/existentBean/after/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/existentBean/after/Test.java
new file mode 100644
index 0000000..8e0a4db
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/existentBean/after/Test.java
@@ -0,0 +1,10 @@
+class Test {
+  void foo(Param param) {
+    if (param.getI().lenght == 0) {
+    }
+  }
+
+  void bar(){
+    foo(new Param(1, 2));
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/existentBean/before/Param.java b/java/java-tests/testData/refactoring/introduceParameterObject/existentBean/before/Param.java
new file mode 100644
index 0000000..0c888bf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/existentBean/before/Param.java
@@ -0,0 +1,11 @@
+public class Param {
+    private final int[] i;
+
+    public Param(int... i) {
+        this.i = i;
+    }
+
+    public int[] getI() {
+        return i;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/existentBean/before/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/existentBean/before/Test.java
new file mode 100644
index 0000000..c1117cc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/existentBean/before/Test.java
@@ -0,0 +1,10 @@
+class Test {
+  void foo(int... i) {
+    if (i.lenght == 0) {
+    }
+  }
+
+  void bar(){
+    foo(1, 2);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/existingBeanIfNoGeneration/after/Param.java b/java/java-tests/testData/refactoring/introduceParameterObject/existingBeanIfNoGeneration/after/Param.java
new file mode 100644
index 0000000..0c888bf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/existingBeanIfNoGeneration/after/Param.java
@@ -0,0 +1,11 @@
+public class Param {
+    private final int[] i;
+
+    public Param(int... i) {
+        this.i = i;
+    }
+
+    public int[] getI() {
+        return i;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/existingBeanIfNoGeneration/after/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/existingBeanIfNoGeneration/after/Test.java
new file mode 100644
index 0000000..8e0a4db
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/existingBeanIfNoGeneration/after/Test.java
@@ -0,0 +1,10 @@
+class Test {
+  void foo(Param param) {
+    if (param.getI().lenght == 0) {
+    }
+  }
+
+  void bar(){
+    foo(new Param(1, 2));
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/existingBeanIfNoGeneration/before/Param.java b/java/java-tests/testData/refactoring/introduceParameterObject/existingBeanIfNoGeneration/before/Param.java
new file mode 100644
index 0000000..fb6c135
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/existingBeanIfNoGeneration/before/Param.java
@@ -0,0 +1,11 @@
+public class Param {
+    private final int i;
+
+    public Param(int i) {
+        this.i = i;
+    }
+
+    public int getI() {
+        return i;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/existingBeanIfNoGeneration/before/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/existingBeanIfNoGeneration/before/Test.java
new file mode 100644
index 0000000..9cf1f8c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/existingBeanIfNoGeneration/before/Test.java
@@ -0,0 +1,11 @@
+class Test {
+  void foo(int i) {
+    if (i == 0) {
+      i++;
+    }
+  }
+
+  void bar(){
+    foo(1, 2);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/existingBeanVisibility/after/p/Param.java b/java/java-tests/testData/refactoring/introduceParameterObject/existingBeanVisibility/after/p/Param.java
new file mode 100644
index 0000000..a295650
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/existingBeanVisibility/after/p/Param.java
@@ -0,0 +1,12 @@
+package p;
+public class Param {
+    private final int[] i;
+
+    public Param(int... i) {
+        this.i = i;
+    }
+
+    public int[] getI() {
+        return i;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/existingBeanVisibility/after/p2/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/existingBeanVisibility/after/p2/Test.java
new file mode 100644
index 0000000..7b6d6a5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/existingBeanVisibility/after/p2/Test.java
@@ -0,0 +1,14 @@
+package p2;
+
+import p.Param;
+
+class Test {
+  void foo(Param param) {
+    if (param.getI().lenght == 0) {
+    }
+  }
+
+  void bar(){
+    foo(new Param(1, 2));
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/existingBeanVisibility/before/p/Param.java b/java/java-tests/testData/refactoring/introduceParameterObject/existingBeanVisibility/before/p/Param.java
new file mode 100644
index 0000000..e9eb50c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/existingBeanVisibility/before/p/Param.java
@@ -0,0 +1,12 @@
+package p;
+class Param {
+    private final int[] i;
+
+    Param(int... i) {
+        this.i = i;
+    }
+
+    public int[] getI() {
+        return i;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/existingBeanVisibility/before/p2/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/existingBeanVisibility/before/p2/Test.java
new file mode 100644
index 0000000..ce60f49
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/existingBeanVisibility/before/p2/Test.java
@@ -0,0 +1,11 @@
+package p2;
+class Test {
+  void foo(int... i) {
+    if (i.lenght == 0) {
+    }
+  }
+
+  void bar(){
+    foo(1, 2);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/generateGetterSetterForExistingBean/after/Param.java b/java/java-tests/testData/refactoring/introduceParameterObject/generateGetterSetterForExistingBean/after/Param.java
new file mode 100644
index 0000000..4c8d9d1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/generateGetterSetterForExistingBean/after/Param.java
@@ -0,0 +1,15 @@
+public class Param {
+    private final int i;
+
+    public Param(int i) {
+        this.i = i;
+    }
+
+    public int getI() {
+        return i;
+    }
+
+    public void setI(int i) {
+        this.i = i;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/generateGetterSetterForExistingBean/after/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/generateGetterSetterForExistingBean/after/Test.java
new file mode 100644
index 0000000..4cf890b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/generateGetterSetterForExistingBean/after/Test.java
@@ -0,0 +1,11 @@
+class Test {
+  void foo(Param param) {
+    if (param.getI() == 0) {
+        param.setI(param.getI() + 1);
+    }
+  }
+
+  void bar(){
+    foo(new Param(1));
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/generateGetterSetterForExistingBean/before/Param.java b/java/java-tests/testData/refactoring/introduceParameterObject/generateGetterSetterForExistingBean/before/Param.java
new file mode 100644
index 0000000..4519460
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/generateGetterSetterForExistingBean/before/Param.java
@@ -0,0 +1,7 @@
+public class Param {
+    private final int i;
+
+    public Param(int i) {
+        this.i = i;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/generateGetterSetterForExistingBean/before/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/generateGetterSetterForExistingBean/before/Test.java
new file mode 100644
index 0000000..47791aec
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/generateGetterSetterForExistingBean/before/Test.java
@@ -0,0 +1,11 @@
+class Test {
+  void foo(int i) {
+    if (i == 0) {
+      i++;
+    }
+  }
+
+  void bar(){
+    foo(1);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/hierarchy/after/A.java b/java/java-tests/testData/refactoring/introduceParameterObject/hierarchy/after/A.java
new file mode 100644
index 0000000..c0a657e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/hierarchy/after/A.java
@@ -0,0 +1,9 @@
+class A extends Test{
+   void foo(Param param) {
+     System.out.println(param.setI(param.getI() + 1));
+   }
+
+   void bazz(){
+     foo(new Param(0));
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/hierarchy/after/B.java b/java/java-tests/testData/refactoring/introduceParameterObject/hierarchy/after/B.java
new file mode 100644
index 0000000..54411e7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/hierarchy/after/B.java
@@ -0,0 +1,9 @@
+class B extends Test {
+  void foo(Param param) {
+    System.err.println(param.setI(param.getI() - 1));
+  }
+
+  void bar() {
+    foo(new Param(1));
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/hierarchy/after/Param.java b/java/java-tests/testData/refactoring/introduceParameterObject/hierarchy/after/Param.java
new file mode 100644
index 0000000..4a9d2f9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/hierarchy/after/Param.java
@@ -0,0 +1,15 @@
+public class Param {
+    private int i;
+
+    public Param(int i) {
+        this.i = i;
+    }
+
+    public int getI() {
+        return i;
+    }
+
+    public void setI(int i) {
+        this.i = i;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/hierarchy/after/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/hierarchy/after/Test.java
new file mode 100644
index 0000000..d1fb8b5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/hierarchy/after/Test.java
@@ -0,0 +1,9 @@
+class Test {
+  void foo(Param param) {
+      param.setI(param.getI() + 1);
+  }
+
+  void bar(){
+    foo(new Param(1));
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/hierarchy/before/A.java b/java/java-tests/testData/refactoring/introduceParameterObject/hierarchy/before/A.java
new file mode 100644
index 0000000..78bf8ef
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/hierarchy/before/A.java
@@ -0,0 +1,9 @@
+class A extends Test{
+   void foo(int i) {
+     System.out.println(i++);
+   }
+
+   void bazz(){
+     foo(0);
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/hierarchy/before/B.java b/java/java-tests/testData/refactoring/introduceParameterObject/hierarchy/before/B.java
new file mode 100644
index 0000000..0d995a2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/hierarchy/before/B.java
@@ -0,0 +1,9 @@
+class B extends Test {
+  void foo(int i) {
+    System.err.println(--i);
+  }
+
+  void bar() {
+    foo(1);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/hierarchy/before/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/hierarchy/before/Test.java
new file mode 100644
index 0000000..36c8c94
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/hierarchy/before/Test.java
@@ -0,0 +1,9 @@
+class Test {
+  void foo(int i) {
+    i++;
+  }
+
+  void bar(){
+    foo(1);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/increment/after/Param.java b/java/java-tests/testData/refactoring/introduceParameterObject/increment/after/Param.java
new file mode 100644
index 0000000..4a9d2f9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/increment/after/Param.java
@@ -0,0 +1,15 @@
+public class Param {
+    private int i;
+
+    public Param(int i) {
+        this.i = i;
+    }
+
+    public int getI() {
+        return i;
+    }
+
+    public void setI(int i) {
+        this.i = i;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/increment/after/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/increment/after/Test.java
new file mode 100644
index 0000000..471f45f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/increment/after/Test.java
@@ -0,0 +1,10 @@
+class Test {
+  void foo(Param param) {
+      param.setI(param.getI() + 1);
+      if (param.getI() == 0) ;
+  }
+
+  void bar(){
+    foo(new Param(1));
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/increment/before/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/increment/before/Test.java
new file mode 100644
index 0000000..c21f89d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/increment/before/Test.java
@@ -0,0 +1,9 @@
+class Test {
+  void foo(int i) {
+    if (i++ == 0) ;
+  }
+
+  void bar(){
+    foo(1);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/innerClass/after/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/innerClass/after/Test.java
new file mode 100644
index 0000000..c819937
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/innerClass/after/Test.java
@@ -0,0 +1,19 @@
+class Test {
+  void foo(Param param) {
+    bar(param.getS());
+  }
+
+  void bar(String s){}
+
+    private static class Param {
+        private final String s;
+
+        private Param(String s) {
+            this.s = s;
+        }
+
+        public String getS() {
+            return s;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/innerClass/before/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/innerClass/before/Test.java
new file mode 100644
index 0000000..9a20bc4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/innerClass/before/Test.java
@@ -0,0 +1,7 @@
+class Test {
+  void foo(String s) {
+    bar(s);
+  }
+
+  void bar(String s){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/innerClassInInterface/after/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/innerClassInInterface/after/Test.java
new file mode 100644
index 0000000..dd973a6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/innerClassInInterface/after/Test.java
@@ -0,0 +1,20 @@
+public interface Test {
+  void foo(Param param);
+
+    private static class Param {
+        private final String s;
+
+        private Param(String s) {
+            this.s = s;
+        }
+
+        public String getS() {
+            return s;
+        }
+    }
+}
+
+class TestImpl implements Test {
+  void foo(Test.Param param){}
+}
+
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/innerClassInInterface/before/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/innerClassInInterface/before/Test.java
new file mode 100644
index 0000000..1f3aeba
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/innerClassInInterface/before/Test.java
@@ -0,0 +1,8 @@
+public interface Test {
+  void foo(String s);
+}
+
+class TestImpl implements Test {
+  void foo(String s){}
+}
+
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/integerIncremental/after/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/integerIncremental/after/Test.java
new file mode 100644
index 0000000..57735be
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/integerIncremental/after/Test.java
@@ -0,0 +1,9 @@
+class Test {
+  void foo(Integer integer) {
+    integer.intValue() + 1;
+  }
+
+  void bar(){
+    foo(new Integer(1));
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/integerIncremental/before/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/integerIncremental/before/Test.java
new file mode 100644
index 0000000..36c8c94
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/integerIncremental/before/Test.java
@@ -0,0 +1,9 @@
+class Test {
+  void foo(int i) {
+    i++;
+  }
+
+  void bar(){
+    foo(1);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/integerWrapper/after/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/integerWrapper/after/Test.java
new file mode 100644
index 0000000..1286e01
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/integerWrapper/after/Test.java
@@ -0,0 +1,10 @@
+class Test {
+  void foo(Integer integer) {
+    if (integer.intValue() == 0) {
+    }
+  }
+
+  void bar(){
+    foo(new Integer(1));
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/integerWrapper/before/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/integerWrapper/before/Test.java
new file mode 100644
index 0000000..f93d3ff
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/integerWrapper/before/Test.java
@@ -0,0 +1,10 @@
+class Test {
+  void foo(int i) {
+    if (i == 0) {
+    }
+  }
+
+  void bar(){
+    foo(1);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/lhassignment/after/Param.java b/java/java-tests/testData/refactoring/introduceParameterObject/lhassignment/after/Param.java
new file mode 100644
index 0000000..4a9d2f9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/lhassignment/after/Param.java
@@ -0,0 +1,15 @@
+public class Param {
+    private int i;
+
+    public Param(int i) {
+        this.i = i;
+    }
+
+    public int getI() {
+        return i;
+    }
+
+    public void setI(int i) {
+        this.i = i;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/lhassignment/after/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/lhassignment/after/Test.java
new file mode 100644
index 0000000..72fc3e4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/lhassignment/after/Test.java
@@ -0,0 +1,11 @@
+class Test {
+  void foo(Param param) {
+    if (param.getI() == 0) {
+        param.setI(9);
+    }
+  }
+
+  void bar(){
+    foo(new Param(1));
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/lhassignment/before/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/lhassignment/before/Test.java
new file mode 100644
index 0000000..f0bb380
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/lhassignment/before/Test.java
@@ -0,0 +1,11 @@
+class Test {
+  void foo(int i) {
+    if (i == 0) {
+        i = 9;
+    }
+  }
+
+  void bar(){
+    foo(1);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/multipleTypeParameters/after/A.java b/java/java-tests/testData/refactoring/introduceParameterObject/multipleTypeParameters/after/A.java
new file mode 100644
index 0000000..07eb529
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/multipleTypeParameters/after/A.java
@@ -0,0 +1,3 @@
+class A<G, T> extends Test<G, T>{
+  void foo(Param<T> param){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/multipleTypeParameters/after/Param.java b/java/java-tests/testData/refactoring/introduceParameterObject/multipleTypeParameters/after/Param.java
new file mode 100644
index 0000000..02c2e7d3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/multipleTypeParameters/after/Param.java
@@ -0,0 +1,11 @@
+public class Param<R> {
+    private final R r;
+
+    public Param(R r) {
+        this.r = r;
+    }
+
+    public R getR() {
+        return r;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/multipleTypeParameters/after/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/multipleTypeParameters/after/Test.java
new file mode 100644
index 0000000..e373af5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/multipleTypeParameters/after/Test.java
@@ -0,0 +1,10 @@
+class Test<G, R> {
+  void foo(Param<R> param) {
+    if (param.getR() == null) {
+    }
+  }
+
+  void bar(R r){
+    foo(new Param<R>(r));
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/multipleTypeParameters/before/A.java b/java/java-tests/testData/refactoring/introduceParameterObject/multipleTypeParameters/before/A.java
new file mode 100644
index 0000000..1e98d82
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/multipleTypeParameters/before/A.java
@@ -0,0 +1,3 @@
+class A<G, T> extends Test<G, T>{
+  void foo(T t){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/multipleTypeParameters/before/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/multipleTypeParameters/before/Test.java
new file mode 100644
index 0000000..c209b2f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/multipleTypeParameters/before/Test.java
@@ -0,0 +1,10 @@
+class Test<G, R> {
+  void foo(R r) {
+    if (r == null) {
+    }
+  }
+
+  void bar(R r){
+    foo(r);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/paramNameConflict/after/Param.java b/java/java-tests/testData/refactoring/introduceParameterObject/paramNameConflict/after/Param.java
new file mode 100644
index 0000000..0c888bf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/paramNameConflict/after/Param.java
@@ -0,0 +1,11 @@
+public class Param {
+    private final int[] i;
+
+    public Param(int... i) {
+        this.i = i;
+    }
+
+    public int[] getI() {
+        return i;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/paramNameConflict/after/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/paramNameConflict/after/Test.java
new file mode 100644
index 0000000..0f186b1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/paramNameConflict/after/Test.java
@@ -0,0 +1,11 @@
+class Test {
+  void foo(Param param1) {
+    if (param1.getI().lenght == 0) {
+    }
+    Param param = null;
+  }
+
+  void bar(){
+    foo(new Param(1, 2));
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/paramNameConflict/before/Param.java b/java/java-tests/testData/refactoring/introduceParameterObject/paramNameConflict/before/Param.java
new file mode 100644
index 0000000..0c888bf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/paramNameConflict/before/Param.java
@@ -0,0 +1,11 @@
+public class Param {
+    private final int[] i;
+
+    public Param(int... i) {
+        this.i = i;
+    }
+
+    public int[] getI() {
+        return i;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/paramNameConflict/before/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/paramNameConflict/before/Test.java
new file mode 100644
index 0000000..f5c585c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/paramNameConflict/before/Test.java
@@ -0,0 +1,11 @@
+class Test {
+  void foo(int... i) {
+    if (i.lenght == 0) {
+    }
+    Param param = null;
+  }
+
+  void bar(){
+    foo(1, 2);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/primitive/after/Param.java b/java/java-tests/testData/refactoring/introduceParameterObject/primitive/after/Param.java
new file mode 100644
index 0000000..fb6c135
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/primitive/after/Param.java
@@ -0,0 +1,11 @@
+public class Param {
+    private final int i;
+
+    public Param(int i) {
+        this.i = i;
+    }
+
+    public int getI() {
+        return i;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/primitive/after/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/primitive/after/Test.java
new file mode 100644
index 0000000..46b7da6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/primitive/after/Test.java
@@ -0,0 +1,10 @@
+class Test {
+  void foo(Param param) {
+    if (param.getI() == 0) {
+    }
+  }
+
+  void bar(){
+    foo(new Param(1));
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/primitive/before/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/primitive/before/Test.java
new file mode 100644
index 0000000..f93d3ff
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/primitive/before/Test.java
@@ -0,0 +1,10 @@
+class Test {
+  void foo(int i) {
+    if (i == 0) {
+    }
+  }
+
+  void bar(){
+    foo(1);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/sameTypeAndVarargs/after/Param.java b/java/java-tests/testData/refactoring/introduceParameterObject/sameTypeAndVarargs/after/Param.java
new file mode 100644
index 0000000..894b761
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/sameTypeAndVarargs/after/Param.java
@@ -0,0 +1,17 @@
+public class Param {
+    private final String a;
+    private final String b;
+
+    public Param(String a, String b) {
+        this.a = a;
+        this.b = b;
+    }
+
+    public String getA() {
+        return a;
+    }
+
+    public String getB() {
+        return b;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/sameTypeAndVarargs/after/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/sameTypeAndVarargs/after/Test.java
new file mode 100644
index 0000000..db7dbda
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/sameTypeAndVarargs/after/Test.java
@@ -0,0 +1,30 @@
+/*
+* Copyright 2000-2011 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.
+*/
+interface Test {
+  void foo(Param param, String... v);
+}
+
+class TestImpl implements Test {
+  @Override
+  public void foo(Param param, String... v) {
+  }
+
+  void bar(){
+     foo(new Param("a", "b"), "c");
+     foo(new Param("a", "b"));
+     foo(new Param("a", "b"), "c", "d");
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/sameTypeAndVarargs/before/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/sameTypeAndVarargs/before/Test.java
new file mode 100644
index 0000000..24bebbf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/sameTypeAndVarargs/before/Test.java
@@ -0,0 +1,30 @@
+/*
+* Copyright 2000-2011 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.
+*/
+interface Test {
+  void foo(String a, String b, String... v);
+}
+
+class TestImpl implements Test {
+  @Override
+  public void foo(String a, String b, String... v) {
+  }
+
+  void bar(){
+     foo("a", "b", "c");
+     foo("a", "b");
+     foo("a", "b", "c", "d");
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/superCalls/after/A.java b/java/java-tests/testData/refactoring/introduceParameterObject/superCalls/after/A.java
new file mode 100644
index 0000000..bd7b7d0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/superCalls/after/A.java
@@ -0,0 +1,10 @@
+class A extends Test{
+   void foo(Param param) {
+     super.foo(param);
+     System.out.println(param.setI(param.getI() + 1));
+   }
+
+   void bazz(){
+     foo(new Param(0));
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/superCalls/after/B.java b/java/java-tests/testData/refactoring/introduceParameterObject/superCalls/after/B.java
new file mode 100644
index 0000000..1db05e6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/superCalls/after/B.java
@@ -0,0 +1,10 @@
+class B extends Test {
+  void foo(Param param) {
+    super.foo(param);
+    System.err.println(param.setI(param.getI() - 1));
+  }
+
+  void bar() {
+    foo(new Param(1));
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/superCalls/after/Param.java b/java/java-tests/testData/refactoring/introduceParameterObject/superCalls/after/Param.java
new file mode 100644
index 0000000..4a9d2f9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/superCalls/after/Param.java
@@ -0,0 +1,15 @@
+public class Param {
+    private int i;
+
+    public Param(int i) {
+        this.i = i;
+    }
+
+    public int getI() {
+        return i;
+    }
+
+    public void setI(int i) {
+        this.i = i;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/superCalls/after/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/superCalls/after/Test.java
new file mode 100644
index 0000000..d1fb8b5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/superCalls/after/Test.java
@@ -0,0 +1,9 @@
+class Test {
+  void foo(Param param) {
+      param.setI(param.getI() + 1);
+  }
+
+  void bar(){
+    foo(new Param(1));
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/superCalls/before/A.java b/java/java-tests/testData/refactoring/introduceParameterObject/superCalls/before/A.java
new file mode 100644
index 0000000..a31ede5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/superCalls/before/A.java
@@ -0,0 +1,10 @@
+class A extends Test{
+   void foo(int i) {
+     super.foo(i);
+     System.out.println(i++);
+   }
+
+   void bazz(){
+     foo(0);
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/superCalls/before/B.java b/java/java-tests/testData/refactoring/introduceParameterObject/superCalls/before/B.java
new file mode 100644
index 0000000..95000ae
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/superCalls/before/B.java
@@ -0,0 +1,10 @@
+class B extends Test {
+  void foo(int i) {
+    super.foo(i);
+    System.err.println(--i);
+  }
+
+  void bar() {
+    foo(1);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/superCalls/before/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/superCalls/before/Test.java
new file mode 100644
index 0000000..36c8c94
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/superCalls/before/Test.java
@@ -0,0 +1,9 @@
+class Test {
+  void foo(int i) {
+    i++;
+  }
+
+  void bar(){
+    foo(1);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/typeParameters/after/A.java b/java/java-tests/testData/refactoring/introduceParameterObject/typeParameters/after/A.java
new file mode 100644
index 0000000..5094979
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/typeParameters/after/A.java
@@ -0,0 +1,3 @@
+class A<T> extends Test<T>{
+  void foo(Param<T> param){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/typeParameters/after/Param.java b/java/java-tests/testData/refactoring/introduceParameterObject/typeParameters/after/Param.java
new file mode 100644
index 0000000..02c2e7d3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/typeParameters/after/Param.java
@@ -0,0 +1,11 @@
+public class Param<R> {
+    private final R r;
+
+    public Param(R r) {
+        this.r = r;
+    }
+
+    public R getR() {
+        return r;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/typeParameters/after/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/typeParameters/after/Test.java
new file mode 100644
index 0000000..647ff10
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/typeParameters/after/Test.java
@@ -0,0 +1,10 @@
+class Test<R> {
+  void foo(Param<R> param) {
+    if (param.getR() == null) {
+    }
+  }
+
+  void bar(R r){
+    foo(new Param<R>(r));
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/typeParameters/before/A.java b/java/java-tests/testData/refactoring/introduceParameterObject/typeParameters/before/A.java
new file mode 100644
index 0000000..e70a9f3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/typeParameters/before/A.java
@@ -0,0 +1,3 @@
+class A<T> extends Test<T>{
+  void foo(T t){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/typeParameters/before/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/typeParameters/before/Test.java
new file mode 100644
index 0000000..dc94180
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/typeParameters/before/Test.java
@@ -0,0 +1,10 @@
+class Test<R> {
+  void foo(R r) {
+    if (r == null) {
+    }
+  }
+
+  void bar(R r){
+    foo(r);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/typeParametersWithChosenSubtype/after/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/typeParametersWithChosenSubtype/after/Test.java
new file mode 100644
index 0000000..2d54ebc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/typeParametersWithChosenSubtype/after/Test.java
@@ -0,0 +1,24 @@
+import java.util.Collection;
+import java.util.List;
+
+public class Test<U extends List> {
+	public Collection foo(Param param) {
+		return param.getP();
+	}
+
+	public void context1(U p) {
+		Collection v = foo(new Param(p));
+	}
+
+    private static class Param {
+        private final Collection p;
+
+        private Param(Collection p) {
+            this.p = p;
+        }
+
+        public Collection getP() {
+            return p;
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/typeParametersWithChosenSubtype/before/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/typeParametersWithChosenSubtype/before/Test.java
new file mode 100644
index 0000000..b2b4246
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/typeParametersWithChosenSubtype/before/Test.java
@@ -0,0 +1,12 @@
+import java.util.Collection;
+import java.util.List;
+
+public class Test<U extends List> {
+	public Collection foo(U p) {
+		return p;
+	}
+
+	public void context1(U p) {
+		Collection v = foo(p);
+	}
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/usedInnerClass/after/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/usedInnerClass/after/Test.java
new file mode 100644
index 0000000..4c8d318
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/usedInnerClass/after/Test.java
@@ -0,0 +1,19 @@
+class Test {
+  void foo(Param param) {
+    bar(param.getS());
+  }
+
+  void bar(String s){}
+
+    static class Param {
+        private final String s;
+
+        Param(String s) {
+            this.s = s;
+        }
+
+        public String getS() {
+            return s;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/usedInnerClass/after/Usage.java b/java/java-tests/testData/refactoring/introduceParameterObject/usedInnerClass/after/Usage.java
new file mode 100644
index 0000000..940289b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/usedInnerClass/after/Usage.java
@@ -0,0 +1,5 @@
+class Usage {
+  void barr(Test t) {
+    t.foo(new Test.Param(""));
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/usedInnerClass/before/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/usedInnerClass/before/Test.java
new file mode 100644
index 0000000..9a20bc4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/usedInnerClass/before/Test.java
@@ -0,0 +1,7 @@
+class Test {
+  void foo(String s) {
+    bar(s);
+  }
+
+  void bar(String s){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/usedInnerClass/before/Usage.java b/java/java-tests/testData/refactoring/introduceParameterObject/usedInnerClass/before/Usage.java
new file mode 100644
index 0000000..18f62ac
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/usedInnerClass/before/Usage.java
@@ -0,0 +1,5 @@
+class Usage {
+  void barr(Test t) {
+    t.foo("");
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/varargs/after/Param.java b/java/java-tests/testData/refactoring/introduceParameterObject/varargs/after/Param.java
new file mode 100644
index 0000000..0c888bf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/varargs/after/Param.java
@@ -0,0 +1,11 @@
+public class Param {
+    private final int[] i;
+
+    public Param(int... i) {
+        this.i = i;
+    }
+
+    public int[] getI() {
+        return i;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/varargs/after/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/varargs/after/Test.java
new file mode 100644
index 0000000..8e0a4db
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/varargs/after/Test.java
@@ -0,0 +1,10 @@
+class Test {
+  void foo(Param param) {
+    if (param.getI().lenght == 0) {
+    }
+  }
+
+  void bar(){
+    foo(new Param(1, 2));
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/varargs/before/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/varargs/before/Test.java
new file mode 100644
index 0000000..c1117cc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/varargs/before/Test.java
@@ -0,0 +1,10 @@
+class Test {
+  void foo(int... i) {
+    if (i.lenght == 0) {
+    }
+  }
+
+  void bar(){
+    foo(1, 2);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/wrongBean/after/Param.java b/java/java-tests/testData/refactoring/introduceParameterObject/wrongBean/after/Param.java
new file mode 100644
index 0000000..2d05211
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/wrongBean/after/Param.java
@@ -0,0 +1,7 @@
+public class Param {
+    private final int[] i;
+
+    public Param(int... i) {
+        this.i = i;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/wrongBean/after/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/wrongBean/after/Test.java
new file mode 100644
index 0000000..c1117cc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/wrongBean/after/Test.java
@@ -0,0 +1,10 @@
+class Test {
+  void foo(int... i) {
+    if (i.lenght == 0) {
+    }
+  }
+
+  void bar(){
+    foo(1, 2);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/wrongBean/before/Param.java b/java/java-tests/testData/refactoring/introduceParameterObject/wrongBean/before/Param.java
new file mode 100644
index 0000000..2d05211
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/wrongBean/before/Param.java
@@ -0,0 +1,7 @@
+public class Param {
+    private final int[] i;
+
+    public Param(int... i) {
+        this.i = i;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/wrongBean/before/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/wrongBean/before/Test.java
new file mode 100644
index 0000000..c1117cc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceParameterObject/wrongBean/before/Test.java
@@ -0,0 +1,10 @@
+class Test {
+  void foo(int... i) {
+    if (i.lenght == 0) {
+    }
+  }
+
+  void bar(){
+    foo(1, 2);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/AndAndSubexpression.after.java b/java/java-tests/testData/refactoring/introduceVariable/AndAndSubexpression.after.java
new file mode 100644
index 0000000..29b3ed5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/AndAndSubexpression.after.java
@@ -0,0 +1,6 @@
+class A {
+    public void test(boolean a, boolean b) {
+        final boolean ab = a && b;
+        if (true && ab);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/AndAndSubexpression.java b/java/java-tests/testData/refactoring/introduceVariable/AndAndSubexpression.java
new file mode 100644
index 0000000..25a0dc2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/AndAndSubexpression.java
@@ -0,0 +1,5 @@
+class A {
+    public void test(boolean a, boolean b) {
+        if (true && <selection>a && b</selection>);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/AnonymousClass.after.java b/java/java-tests/testData/refactoring/introduceVariable/AnonymousClass.after.java
new file mode 100644
index 0000000..b45ea8f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/AnonymousClass.after.java
@@ -0,0 +1,10 @@
+class Test {
+    public void method() {
+        final int temp = 1 + 2;
+        Runnable r = new Runnable() {
+            public void run() {
+                int i = temp;
+            }
+        };
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/AnonymousClass.java b/java/java-tests/testData/refactoring/introduceVariable/AnonymousClass.java
new file mode 100644
index 0000000..3e0b89e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/AnonymousClass.java
@@ -0,0 +1,10 @@
+class Test {
+    public void method() {
+        1 + 2 <caret>
+        Runnable r = new Runnable() {
+            public void run() {
+                int i = 1 + 2;
+            }
+        };
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/AnonymousClass1.after.java b/java/java-tests/testData/refactoring/introduceVariable/AnonymousClass1.after.java
new file mode 100644
index 0000000..4270d7d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/AnonymousClass1.after.java
@@ -0,0 +1,9 @@
+class A {
+    static {
+        Runnable runnable = new Runnable() {
+            public void run() {
+            }
+        };
+        System.out.println(runnable);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/AnonymousClass1.java b/java/java-tests/testData/refactoring/introduceVariable/AnonymousClass1.java
new file mode 100644
index 0000000..56a55d4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/AnonymousClass1.java
@@ -0,0 +1,8 @@
+class A {
+    static {
+        System.out.println(<selection>new Runnable() {
+            public void run() {
+            }
+        }</selection>);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/AnonymousClass2.after.java b/java/java-tests/testData/refactoring/introduceVariable/AnonymousClass2.after.java
new file mode 100644
index 0000000..bbda64c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/AnonymousClass2.after.java
@@ -0,0 +1,13 @@
+public class TestClass {
+    void x() {
+        new Exception() {
+            int doSomething() { return 1; }
+            void a() {
+                int j = doSomething();
+            }
+            void b() {
+                doSomething();
+            }
+        };
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/AnonymousClass2.java b/java/java-tests/testData/refactoring/introduceVariable/AnonymousClass2.java
new file mode 100644
index 0000000..fcf7a05
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/AnonymousClass2.java
@@ -0,0 +1,13 @@
+public class TestClass {
+    void x() {
+        new Exception() {
+            int doSomething() { return 1; }
+            void a() {
+                <selection>doSomething()</selection>;
+            }
+            void b() {
+                doSomething();
+            }
+        };
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/ArrayFromVarargs.after.java b/java/java-tests/testData/refactoring/introduceVariable/ArrayFromVarargs.after.java
new file mode 100644
index 0000000..b9edd91
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/ArrayFromVarargs.after.java
@@ -0,0 +1,8 @@
+import java.util.Arrays;
+
+class A {
+    public void test() {
+        String[] strs = {"scnd", "third"};
+        System.out.println(Arrays.asList("frst", strs, "4th"));
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/ArrayFromVarargs.java b/java/java-tests/testData/refactoring/introduceVariable/ArrayFromVarargs.java
new file mode 100644
index 0000000..c53adcb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/ArrayFromVarargs.java
@@ -0,0 +1,7 @@
+import java.util.Arrays;
+
+class A {
+    public void test() {
+      System.out.println(Arrays.asList("frst", <selection>"scnd", "third"</selection>, "4th"));
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/ArrayFromVarargs1.after.java b/java/java-tests/testData/refactoring/introduceVariable/ArrayFromVarargs1.after.java
new file mode 100644
index 0000000..cb85bbd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/ArrayFromVarargs1.after.java
@@ -0,0 +1,9 @@
+public class Foo {
+    public Foo(String ... strs) {}
+
+    public void test1(Foo o, String... foo) {}
+    void bar() {
+        String[] strs = {"", ""};
+        test1(new Foo(strs));
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/ArrayFromVarargs1.java b/java/java-tests/testData/refactoring/introduceVariable/ArrayFromVarargs1.java
new file mode 100644
index 0000000..dbdd977
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/ArrayFromVarargs1.java
@@ -0,0 +1,8 @@
+public class Foo {
+    public Foo(String ... strs) {}
+
+    public void test1(Foo o, String... foo) {}
+    void bar() {
+        test1(new Foo(<selection> "", ""</selection>));
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/AssignmentToUnresolvedReference.after.java b/java/java-tests/testData/refactoring/introduceVariable/AssignmentToUnresolvedReference.after.java
new file mode 100644
index 0000000..2163b52
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/AssignmentToUnresolvedReference.after.java
@@ -0,0 +1,15 @@
+import java.util.*;
+
+public class Test<T>
+{
+        List<Collection<T>> getList ()
+        {
+                return new ArrayList<Collection<T>> ();
+        }
+
+        public void test2 (Test<?> arg)
+        {
+            final List<? extends Collection<?>> collection = result;
+            collection = arg.getList ();
+        }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/AssignmentToUnresolvedReference.java b/java/java-tests/testData/refactoring/introduceVariable/AssignmentToUnresolvedReference.java
new file mode 100644
index 0000000..1d9ee6f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/AssignmentToUnresolvedReference.java
@@ -0,0 +1,14 @@
+import java.util.*;
+
+public class Test<T>
+{
+        List<Collection<T>> getList ()
+        {
+                return new ArrayList<Collection<T>> ();
+        }
+
+        public void test2 (Test<?> arg)
+        {
+                res<caret>ult = arg.getList ();
+        }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/BeforeVoidStatement.after.java b/java/java-tests/testData/refactoring/introduceVariable/BeforeVoidStatement.after.java
new file mode 100644
index 0000000..a03af87e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/BeforeVoidStatement.after.java
@@ -0,0 +1,8 @@
+class Test {
+  void foo() {
+      Object c = getObject();
+      c.notify();
+  }
+
+  Object getObject() {return null;}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/BeforeVoidStatement.java b/java/java-tests/testData/refactoring/introduceVariable/BeforeVoidStatement.java
new file mode 100644
index 0000000..73e1131
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/BeforeVoidStatement.java
@@ -0,0 +1,7 @@
+class Test {
+  void foo() {
+     <caret>getObject().notify();
+  }
+
+  Object getObject() {return null;}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/CantCollapsedToDiamond.after.java b/java/java-tests/testData/refactoring/introduceVariable/CantCollapsedToDiamond.after.java
new file mode 100644
index 0000000..8598dc4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/CantCollapsedToDiamond.after.java
@@ -0,0 +1,10 @@
+class Test {
+  void foo() {
+      final Foo<Number> a = new Foo<Number>(1);
+  }
+}
+
+class Foo<T> {
+  Foo(T t) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/CantCollapsedToDiamond.java b/java/java-tests/testData/refactoring/introduceVariable/CantCollapsedToDiamond.java
new file mode 100644
index 0000000..dd4cc71
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/CantCollapsedToDiamond.java
@@ -0,0 +1,10 @@
+class Test {
+  void foo() {
+      new Foo<Num<caret>ber>(1);
+  }
+}
+
+class Foo<T> {
+  Foo(T t) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/CollapsedToDiamond.after.java b/java/java-tests/testData/refactoring/introduceVariable/CollapsedToDiamond.after.java
new file mode 100644
index 0000000..c95d867
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/CollapsedToDiamond.after.java
@@ -0,0 +1,6 @@
+import java.util.ArrayList;
+class Test {
+  void foo() {
+      final ArrayList<String> a = new ArrayList<>();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/CollapsedToDiamond.java b/java/java-tests/testData/refactoring/introduceVariable/CollapsedToDiamond.java
new file mode 100644
index 0000000..0776cce
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/CollapsedToDiamond.java
@@ -0,0 +1,6 @@
+import java.util.ArrayList;
+class Test {
+  void foo() {
+    new Array<caret>List<String>()
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/ConflictingField.after.java b/java/java-tests/testData/refactoring/introduceVariable/ConflictingField.after.java
new file mode 100644
index 0000000..2358335
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/ConflictingField.after.java
@@ -0,0 +1,8 @@
+class A {
+    private int name;
+    public void method() {
+        System.out.println(name);
+        String name = "xyz";
+        System.out.println(this.name);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/ConflictingField.java b/java/java-tests/testData/refactoring/introduceVariable/ConflictingField.java
new file mode 100644
index 0000000..5aa0f41
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/ConflictingField.java
@@ -0,0 +1,8 @@
+class A {
+    private int name;
+    public void method() {
+        System.out.println(name);
+        <selection>"xyz"</selection>
+        System.out.println(name);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/ConflictingFieldInExpression.after.java b/java/java-tests/testData/refactoring/introduceVariable/ConflictingFieldInExpression.after.java
new file mode 100644
index 0000000..9689d3d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/ConflictingFieldInExpression.after.java
@@ -0,0 +1,8 @@
+class A {
+    private int name;
+    public void method() {
+        System.out.println(name);
+        int name = this.name;
+        System.out.println(this.name);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/ConflictingFieldInExpression.java b/java/java-tests/testData/refactoring/introduceVariable/ConflictingFieldInExpression.java
new file mode 100644
index 0000000..1c7808c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/ConflictingFieldInExpression.java
@@ -0,0 +1,8 @@
+class A {
+    private int name;
+    public void method() {
+        System.out.println(name);
+        <selection>name</selection>
+        System.out.println(name);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/ConflictingFieldInOuterClass.after.java b/java/java-tests/testData/refactoring/introduceVariable/ConflictingFieldInOuterClass.after.java
new file mode 100644
index 0000000..39a6ba8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/ConflictingFieldInOuterClass.after.java
@@ -0,0 +1,9 @@
+public class Test4 {
+    String text = "Hello world!";
+    private class Q {
+        void foo() {
+            final String text = Test4.this.text;
+            System.out.println("text = " + text);
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/ConflictingFieldInOuterClass.java b/java/java-tests/testData/refactoring/introduceVariable/ConflictingFieldInOuterClass.java
new file mode 100644
index 0000000..0a964fc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/ConflictingFieldInOuterClass.java
@@ -0,0 +1,8 @@
+public class Test4 {
+    String text = "Hello world!";
+    private class Q {
+        void foo() {
+            System.out.println("text = " + <selection>text</selection>);
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/DifferentForeachParameters.after.java b/java/java-tests/testData/refactoring/introduceVariable/DifferentForeachParameters.after.java
new file mode 100644
index 0000000..a021e09
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/DifferentForeachParameters.after.java
@@ -0,0 +1,12 @@
+class A {
+  {
+    List<Integer> l = new ArrayList<Integer>();
+    for (Integer i : l) {
+        final String tostr = i.toString();
+        System.out.println(tostr);
+    }
+    for (Integer i : l) {
+      System.out.println(i.toString());
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/DifferentForeachParameters.java b/java/java-tests/testData/refactoring/introduceVariable/DifferentForeachParameters.java
new file mode 100644
index 0000000..3683bfa
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/DifferentForeachParameters.java
@@ -0,0 +1,11 @@
+class A {
+  {
+    List<Integer> l = new ArrayList<Integer>();
+    for (Integer i : l) {
+      System.out.println(<selection>i.toString()</selection>);
+    }
+    for (Integer i : l) {
+      System.out.println(i.toString());
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/DuplicateGenericExpressions.after.java b/java/java-tests/testData/refactoring/introduceVariable/DuplicateGenericExpressions.after.java
new file mode 100644
index 0000000..bfa2e7e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/DuplicateGenericExpressions.after.java
@@ -0,0 +1,12 @@
+class Foo2<T> {
+    Foo2<? extends Runnable> getList() {
+        return null;
+    }
+
+    {
+        Foo2<T> f = new Foo2<T>();
+        Foo2<? extends Runnable> temp = f.getList();
+        Object a = temp;
+        Object b = temp;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceVariable/DuplicateGenericExpressions.java b/java/java-tests/testData/refactoring/introduceVariable/DuplicateGenericExpressions.java
new file mode 100644
index 0000000..658790b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/DuplicateGenericExpressions.java
@@ -0,0 +1,11 @@
+class Foo2<T> {
+    Foo2<? extends Runnable> getList() {
+        return null;
+    }
+
+    {
+        Foo2<T> f = new Foo2<T>();
+        Object a = <selection>f.getList()</selection>;
+        Object b = f.getList();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceVariable/DuplicatesAnonymousClassCreationWithSimilarParameters.after.java b/java/java-tests/testData/refactoring/introduceVariable/DuplicatesAnonymousClassCreationWithSimilarParameters.after.java
new file mode 100644
index 0000000..ffdfd83
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/DuplicatesAnonymousClassCreationWithSimilarParameters.after.java
@@ -0,0 +1,26 @@
+public class Foo {
+
+	public static void bazz(int i) {
+        final Foo foo1 = new Foo(new IBar() {
+            public void doSomething() {
+                System.out.println("hello");
+            }
+        });
+        final Foo foo = i != 0 ? foo1 : foo1;
+		foo.bla();
+	}
+
+	private final IBar bar;
+
+	public Foo(IBar bar) {
+		this.bar = bar;
+	}
+
+	public void bla() {
+		bar.doSomething();
+	}
+
+	public interface IBar {
+		void doSomething();
+	}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/DuplicatesAnonymousClassCreationWithSimilarParameters.java b/java/java-tests/testData/refactoring/introduceVariable/DuplicatesAnonymousClassCreationWithSimilarParameters.java
new file mode 100644
index 0000000..b6b1c26
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/DuplicatesAnonymousClassCreationWithSimilarParameters.java
@@ -0,0 +1,29 @@
+public class Foo {
+
+	public static void bazz(int i) {
+		final Foo foo = i != 0 ? <selection>new Foo(new IBar() {
+			public void doSomething() {
+				System.out.println("hello");
+			}
+		})</selection> : new Foo(new IBar() {
+			public void doSomething() {
+				System.out.println("hello");
+			}
+		});
+		foo.bla();
+	}
+
+	private final IBar bar;
+
+	public Foo(IBar bar) {
+		this.bar = bar;
+	}
+
+	public void bla() {
+		bar.doSomething();
+	}
+
+	public interface IBar {
+		void doSomething();
+	}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/EnumArrayFromVarargs.after.java b/java/java-tests/testData/refactoring/introduceVariable/EnumArrayFromVarargs.after.java
new file mode 100644
index 0000000..f407cfa
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/EnumArrayFromVarargs.after.java
@@ -0,0 +1,13 @@
+class Test {
+  void foo(E... e) {
+  }
+
+  void bar() {
+      E[] strs = {E.E1, E.E2};
+      foo(strs);
+  }
+}
+
+static enum E {
+  E1, E2;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/EnumArrayFromVarargs.java b/java/java-tests/testData/refactoring/introduceVariable/EnumArrayFromVarargs.java
new file mode 100644
index 0000000..733991c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/EnumArrayFromVarargs.java
@@ -0,0 +1,12 @@
+class Test {
+  void foo(E... e) {
+  }
+
+  void bar() {
+    foo(<selection>E.E1, E.E2</selection>);
+  }
+}
+
+static enum E {
+  E1, E2;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/FromFinalFieldOnAssignment.after.java b/java/java-tests/testData/refactoring/introduceVariable/FromFinalFieldOnAssignment.after.java
new file mode 100644
index 0000000..592dee6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/FromFinalFieldOnAssignment.after.java
@@ -0,0 +1,8 @@
+public class C {
+  private final String myStr;
+
+  public C() {
+    myStr = "";
+      String strs = myStr;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/introduceVariable/FromFinalFieldOnAssignment.java b/java/java-tests/testData/refactoring/introduceVariable/FromFinalFieldOnAssignment.java
new file mode 100644
index 0000000..032a05a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/FromFinalFieldOnAssignment.java
@@ -0,0 +1,7 @@
+public class C {
+  private final String myStr;
+
+  public C() {
+    <selection>myStr</selection> = "";
+  }
+}
diff --git a/java/java-tests/testData/refactoring/introduceVariable/FromForInitializer.after.java b/java/java-tests/testData/refactoring/introduceVariable/FromForInitializer.after.java
new file mode 100644
index 0000000..0a5fc11
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/FromForInitializer.after.java
@@ -0,0 +1,13 @@
+import java.util.*;
+
+public class SomeClass {
+
+    static List foo(){return null;}
+
+    public static void main(String[] args) {
+        final List list = foo();
+        for (Iterator it = list.listIterator(list.size()); it.hasNext(); ) {
+
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/FromForInitializer.java b/java/java-tests/testData/refactoring/introduceVariable/FromForInitializer.java
new file mode 100644
index 0000000..1b5587c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/FromForInitializer.java
@@ -0,0 +1,12 @@
+import java.util.*;
+
+public class SomeClass {
+
+    static List foo(){return null;}
+
+    public static void main(String[] args) {
+        for (Iterator it = <selection>foo()</selection>.listIterator(foo().size()); it.hasNext(); ) {
+
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/FromInjected.after.java b/java/java-tests/testData/refactoring/introduceVariable/FromInjected.after.java
new file mode 100644
index 0000000..1ebb7af
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/FromInjected.after.java
@@ -0,0 +1,6 @@
+class Test {
+  {
+      String regexp = "|\t";
+      String[] parts = "".split(regexp);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/FromInjected.java b/java/java-tests/testData/refactoring/introduceVariable/FromInjected.java
new file mode 100644
index 0000000..19df3d2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/FromInjected.java
@@ -0,0 +1,5 @@
+class Test {
+  {
+    String[] parts = "".split("|<caret>\t");
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/IDEADEV13369.after.java b/java/java-tests/testData/refactoring/introduceVariable/IDEADEV13369.after.java
new file mode 100644
index 0000000..f67f7fe
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/IDEADEV13369.after.java
@@ -0,0 +1,9 @@
+class Tester {
+    void method() {
+        final int[] ints = {1};
+        f(ints);
+    }
+
+    private void f(int[] ints) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/IDEADEV13369.java b/java/java-tests/testData/refactoring/introduceVariable/IDEADEV13369.java
new file mode 100644
index 0000000..87e627b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/IDEADEV13369.java
@@ -0,0 +1,8 @@
+class Tester {
+    void method() {
+        f(<selection>new int[]{1}</selection>);
+    }
+
+    private void f(int[] ints) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/IDEADEV3678.after.java b/java/java-tests/testData/refactoring/introduceVariable/IDEADEV3678.after.java
new file mode 100644
index 0000000..90ebb5e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/IDEADEV3678.after.java
@@ -0,0 +1,9 @@
+class Bar {
+    void bar(Object[] components) {
+        for (int i = 0; i < components.length; ++i) {
+            final Object component = components[i];
+            if (component != null)
+                addChildren(component);
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/IDEADEV3678.java b/java/java-tests/testData/refactoring/introduceVariable/IDEADEV3678.java
new file mode 100644
index 0000000..76dd5ee
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/IDEADEV3678.java
@@ -0,0 +1,7 @@
+class Bar {
+    void bar(Object[] components) {
+        for (int i = 0; i < components.length; ++i)
+            if (<selection>components[i]</selection> != null)
+                addChildren(components[i]);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/IncorrectExpressionSelected.java b/java/java-tests/testData/refactoring/introduceVariable/IncorrectExpressionSelected.java
new file mode 100644
index 0000000..a61d032
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/IncorrectExpressionSelected.java
@@ -0,0 +1,5 @@
+class Foo {
+  void bar() {
+    this.<selection>toString()</selection>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/InsideElse.after.java b/java/java-tests/testData/refactoring/introduceVariable/InsideElse.after.java
new file mode 100644
index 0000000..28c549c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/InsideElse.after.java
@@ -0,0 +1,12 @@
+public class C {
+    {
+        Object o = getO();
+        String s;
+        if (o == null)
+            s = "";
+        else {
+            String s1 = o.toString();
+            s = s1;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/InsideElse.java b/java/java-tests/testData/refactoring/introduceVariable/InsideElse.java
new file mode 100644
index 0000000..6a11196
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/InsideElse.java
@@ -0,0 +1,9 @@
+public class C {
+    {
+        Object o = getO();
+        String s;
+        if (o == null)
+            s = "";
+        else s = <selection>o.toString()</selection>;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/InsideFor.after.java b/java/java-tests/testData/refactoring/introduceVariable/InsideFor.after.java
new file mode 100644
index 0000000..f86f92d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/InsideFor.after.java
@@ -0,0 +1,8 @@
+class Test {
+    public void method() {
+        for(int i = 0; i < 100; i++) {
+            int temp = i * 2;
+            sum += temp;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/InsideFor.java b/java/java-tests/testData/refactoring/introduceVariable/InsideFor.java
new file mode 100644
index 0000000..b87dffc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/InsideFor.java
@@ -0,0 +1,6 @@
+class Test {
+    public void method() {
+        for(int i = 0; i < 100; i++)
+            sum += <selection>i * 2</selection>;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/InsideForLoop.after.java b/java/java-tests/testData/refactoring/introduceVariable/InsideForLoop.after.java
new file mode 100644
index 0000000..93ae967
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/InsideForLoop.after.java
@@ -0,0 +1,11 @@
+public class C {
+
+  public C(int[] ints) {
+    for (int i = 0; i < length && ints[i] > 0; i++) {
+        int temp = ints[i];
+        System.out.println(temp);
+      System.out.println(temp);
+      System.out.println(temp);
+    }
+  }
+}
diff --git a/java/java-tests/testData/refactoring/introduceVariable/InsideForLoop.java b/java/java-tests/testData/refactoring/introduceVariable/InsideForLoop.java
new file mode 100644
index 0000000..d5b64a2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/InsideForLoop.java
@@ -0,0 +1,10 @@
+public class C {
+
+  public C(int[] ints) {
+    for (int i = 0; i < length && ints[i] > 0; i++) {
+      System.out.println(ints[i]);
+      System.out.println(ints[i]);
+      System.out.println(<selection>ints[i]</selection>);
+    }
+  }
+}
diff --git a/java/java-tests/testData/refactoring/introduceVariable/InsideIf.after.java b/java/java-tests/testData/refactoring/introduceVariable/InsideIf.after.java
new file mode 100644
index 0000000..f6f70ca
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/InsideIf.after.java
@@ -0,0 +1,10 @@
+public class C {
+    {
+        Object o = getO();
+        String s = "";
+        if (o != null) {
+            String s1 = o.toString();
+            s += s1;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/InsideIf.java b/java/java-tests/testData/refactoring/introduceVariable/InsideIf.java
new file mode 100644
index 0000000..ada25c8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/InsideIf.java
@@ -0,0 +1,8 @@
+public class C {
+    {
+        Object o = getO();
+        String s = "";
+        if (o != null)
+            s += <selection>o.toString()</selection>;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/InsideWhile.after.java b/java/java-tests/testData/refactoring/introduceVariable/InsideWhile.after.java
new file mode 100644
index 0000000..8e069bb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/InsideWhile.after.java
@@ -0,0 +1,9 @@
+class Test {
+    public void method() {
+        int i = 0;
+        while(i < 100) {
+            int temp = i++ * 2;
+            sum += temp;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/InsideWhile.java b/java/java-tests/testData/refactoring/introduceVariable/InsideWhile.java
new file mode 100644
index 0000000..86bfd93
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/InsideWhile.java
@@ -0,0 +1,7 @@
+class Test {
+    public void method() {
+        int i = 0;
+        while(i < 100)
+            sum += <selection>i++ * 2</selection>;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/InvalidPostfixExpr.after.java b/java/java-tests/testData/refactoring/introduceVariable/InvalidPostfixExpr.after.java
new file mode 100644
index 0000000..ff2a6d1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/InvalidPostfixExpr.after.java
@@ -0,0 +1,8 @@
+public class SomeClass {
+    int[] a;
+    
+    {
+        int[] a1 = a;
+        a1++;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/InvalidPostfixExpr.java b/java/java-tests/testData/refactoring/introduceVariable/InvalidPostfixExpr.java
new file mode 100644
index 0000000..8f3125c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/InvalidPostfixExpr.java
@@ -0,0 +1,7 @@
+public class SomeClass {
+    int[] a;
+    
+    {
+        <selection>a</selection>++;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/LambdaExpr.after.java b/java/java-tests/testData/refactoring/introduceVariable/LambdaExpr.after.java
new file mode 100644
index 0000000..5858567
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/LambdaExpr.after.java
@@ -0,0 +1,11 @@
+interface SAM<X> {
+        X m(int i, int j);
+    }
+
+class Foo {  
+    void test() {
+        SAM<Integer> c = (i, j) -> i + j;
+        m(c);
+    }
+    void m(SAM<Integer> s) { }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/LambdaExpr.java b/java/java-tests/testData/refactoring/introduceVariable/LambdaExpr.java
new file mode 100644
index 0000000..0d77849
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/LambdaExpr.java
@@ -0,0 +1,10 @@
+interface SAM<X> {
+        X m(int i, int j);
+    }
+
+class Foo {  
+    void test() {
+        m(<selection>(i, j) -> i + j</selection>);
+    }
+    void m(SAM<Integer> s) { }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/LambdaExprNotAccepted.after.java b/java/java-tests/testData/refactoring/introduceVariable/LambdaExprNotAccepted.after.java
new file mode 100644
index 0000000..e8d7702
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/LambdaExprNotAccepted.after.java
@@ -0,0 +1,11 @@
+interface SAM<X> {
+        X m(int i, int j);
+    }
+
+class Foo {  
+    void test() {
+        SAM<String> c = (i, j) -> "" + i + j;
+        SAM<Integer> s3 = m(c);
+    }
+    <X> SAM<X> m(SAM<X> s) { return null; }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/LambdaExprNotAccepted.java b/java/java-tests/testData/refactoring/introduceVariable/LambdaExprNotAccepted.java
new file mode 100644
index 0000000..cbb47f9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/LambdaExprNotAccepted.java
@@ -0,0 +1,10 @@
+interface SAM<X> {
+        X m(int i, int j);
+    }
+
+class Foo {  
+    void test() {
+      SAM<Integer> s3 = m(<selection>(i, j) -> "" + i + j</selection>);
+    }
+    <X> SAM<X> m(SAM<X> s) { return null; }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/MethodCall.after.java b/java/java-tests/testData/refactoring/introduceVariable/MethodCall.after.java
new file mode 100644
index 0000000..b961f21
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/MethodCall.after.java
@@ -0,0 +1,11 @@
+class A {
+    Object getObject() {
+        return null;
+    }
+
+    void method() {
+        final Object temp = getObject();
+        Object o = temp;
+        return temp.hashCode();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/MethodCall.java b/java/java-tests/testData/refactoring/introduceVariable/MethodCall.java
new file mode 100644
index 0000000..446740a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/MethodCall.java
@@ -0,0 +1,10 @@
+class A {
+    Object getObject() {
+        return null;
+    }
+
+    void method() {
+        Object o = <selection>getObject()</selection>;
+        return getObject().hashCode();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/MethodCallInSwitch.after.java b/java/java-tests/testData/refactoring/introduceVariable/MethodCallInSwitch.after.java
new file mode 100644
index 0000000..4cfd67d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/MethodCallInSwitch.after.java
@@ -0,0 +1,12 @@
+class A {
+    int getContentElementType() {
+        return 0;
+    }
+
+    void method() {
+        final int i = getContentElementType();
+        switch (i) {
+            default: throw new IllegalArgumentException("Wrong content type: " + i);
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/MethodCallInSwitch.java b/java/java-tests/testData/refactoring/introduceVariable/MethodCallInSwitch.java
new file mode 100644
index 0000000..5826ad9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/MethodCallInSwitch.java
@@ -0,0 +1,11 @@
+class A {
+    int getContentElementType() {
+        return 0;
+    }
+
+    void method() {
+        switch (<selection>getContentElementType()</selection>) {
+            default: throw new IllegalArgumentException("Wrong content type: " + getContentElementType());
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/MethodRef.after.java b/java/java-tests/testData/refactoring/introduceVariable/MethodRef.after.java
new file mode 100644
index 0000000..f873bde
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/MethodRef.after.java
@@ -0,0 +1,15 @@
+class Test {
+  {
+      Bar c = Test::length;
+      bar(c);
+  }
+
+  public static Integer length(String s) {
+    return s.length();
+  }
+
+    static void bar(Bar bar) {}
+  interface Bar {
+    Integer _(String s);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/MethodRef.java b/java/java-tests/testData/refactoring/introduceVariable/MethodRef.java
new file mode 100644
index 0000000..f2e73ab
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/MethodRef.java
@@ -0,0 +1,14 @@
+class Test {
+  {
+      bar(<selection>Test::length</selection>);
+  }
+
+  public static Integer length(String s) {
+    return s.length();
+  }
+
+    static void bar(Bar bar) {}
+  interface Bar {
+    Integer _(String s);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/MultiCatchSimple.after.java b/java/java-tests/testData/refactoring/introduceVariable/MultiCatchSimple.after.java
new file mode 100644
index 0000000..cf16e0b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/MultiCatchSimple.after.java
@@ -0,0 +1,11 @@
+class C {
+    static class E1 extends Exception { }
+    static class E2 extends Exception { }
+
+    void m() {
+        try { }
+        catch (E1 | E2 ex) {
+            final Exception e = ex;
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceVariable/MultiCatchSimple.java b/java/java-tests/testData/refactoring/introduceVariable/MultiCatchSimple.java
new file mode 100644
index 0000000..582755c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/MultiCatchSimple.java
@@ -0,0 +1,11 @@
+class C {
+    static class E1 extends Exception { }
+    static class E2 extends Exception { }
+
+    void m() {
+        try { }
+        catch (E1 | E2 ex) {
+            <caret>ex;
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceVariable/MultiCatchTyped.after.java b/java/java-tests/testData/refactoring/introduceVariable/MultiCatchTyped.after.java
new file mode 100644
index 0000000..f4f6d90
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/MultiCatchTyped.after.java
@@ -0,0 +1,12 @@
+class C {
+    interface B<T> { }
+    static class E1 extends Exception implements B<Integer> { }
+    static class E2 extends Exception implements B<Long> { }
+
+    void m() {
+        try { }
+        catch (E1 | E2 ex) {
+            final Exception b = ex;
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceVariable/MultiCatchTyped.java b/java/java-tests/testData/refactoring/introduceVariable/MultiCatchTyped.java
new file mode 100644
index 0000000..6a8ce4f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/MultiCatchTyped.java
@@ -0,0 +1,12 @@
+class C {
+    interface B<T> { }
+    static class E1 extends Exception implements B<Integer> { }
+    static class E2 extends Exception implements B<Long> { }
+
+    void m() {
+        try { }
+        catch (E1 | E2 ex) {
+            <caret>ex;
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceVariable/NameSuggestion.after.java b/java/java-tests/testData/refactoring/introduceVariable/NameSuggestion.after.java
new file mode 100644
index 0000000..94ee12d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/NameSuggestion.after.java
@@ -0,0 +1,9 @@
+abstract class Path implements Iterable<Path>{}
+class Paths {
+  public static Path get(String s) {return null;}
+}
+class Usage {
+  public static void main(String[] args) {
+      Path path = Paths.get("");
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/NameSuggestion.java b/java/java-tests/testData/refactoring/introduceVariable/NameSuggestion.java
new file mode 100644
index 0000000..b68aa01
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/NameSuggestion.java
@@ -0,0 +1,9 @@
+abstract class Path implements Iterable<Path>{}
+class Paths {
+  public static Path get(String s) {return null;}
+}
+class Usage {
+  public static void main(String[] args) {
+    <selection>Paths.get("")</selection>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/NoArrayFromVarargs.java b/java/java-tests/testData/refactoring/introduceVariable/NoArrayFromVarargs.java
new file mode 100644
index 0000000..78041b2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/NoArrayFromVarargs.java
@@ -0,0 +1,7 @@
+import java.util.Arrays;
+
+class A {
+    public void test() {
+      System.out.println(Arrays.asList("fr<selection>st", "scnd", "third"</selection>, "4th"));
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/NoArrayFromVarargs1.java b/java/java-tests/testData/refactoring/introduceVariable/NoArrayFromVarargs1.java
new file mode 100644
index 0000000..c1098e2f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/NoArrayFromVarargs1.java
@@ -0,0 +1,7 @@
+import java.util.Arrays;
+
+class A {
+    public void test() {
+      System.out.println(Arrays.asList( 2 + <selection>3, "scnd", "third"</selection>, "4th"));
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/NonConflictingField.after.java b/java/java-tests/testData/refactoring/introduceVariable/NonConflictingField.after.java
new file mode 100644
index 0000000..d9859f4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/NonConflictingField.after.java
@@ -0,0 +1,9 @@
+class Base {
+  private int name = 0;
+}
+
+class Child extends Base {
+  void foo() {
+      int name = 1;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/NonConflictingField.java b/java/java-tests/testData/refactoring/introduceVariable/NonConflictingField.java
new file mode 100644
index 0000000..472122a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/NonConflictingField.java
@@ -0,0 +1,9 @@
+class Base {
+  private int name = 0;
+}
+
+class Child extends Base {
+  void foo() {
+    <selection>1</selection>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/NonExpression.after.java b/java/java-tests/testData/refactoring/introduceVariable/NonExpression.after.java
new file mode 100644
index 0000000..50e5ae9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/NonExpression.after.java
@@ -0,0 +1,7 @@
+class A {
+    public void test() {
+        int a = 0; int b = 0; int c = 0;
+        final int sum = b + c;
+        int d = a + sum;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/NonExpression.java b/java/java-tests/testData/refactoring/introduceVariable/NonExpression.java
new file mode 100644
index 0000000..8207e65
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/NonExpression.java
@@ -0,0 +1,6 @@
+class A {
+    public void test() {
+        int a = 0; int b = 0; int c = 0;
+        int d = a + <selection>b + c</selection>;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/NonExpressionPriorityFailure.after.java b/java/java-tests/testData/refactoring/introduceVariable/NonExpressionPriorityFailure.after.java
new file mode 100644
index 0000000..b00f97d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/NonExpressionPriorityFailure.after.java
@@ -0,0 +1,6 @@
+class A {
+    public void test() {
+        int a = 0; int b = 0; int c = 0;
+        int d = a - <selection>b + c</selection>;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/NonExpressionPriorityFailure.java b/java/java-tests/testData/refactoring/introduceVariable/NonExpressionPriorityFailure.java
new file mode 100644
index 0000000..b00f97d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/NonExpressionPriorityFailure.java
@@ -0,0 +1,6 @@
+class A {
+    public void test() {
+        int a = 0; int b = 0; int c = 0;
+        int d = a - <selection>b + c</selection>;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/NormalizeDeclarations.after.java b/java/java-tests/testData/refactoring/introduceVariable/NormalizeDeclarations.after.java
new file mode 100644
index 0000000..55b388f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/NormalizeDeclarations.after.java
@@ -0,0 +1,8 @@
+class X {
+    {
+        int i = 0;
+        int i3 = i;
+        int i1 = 0;
+        int i2 = i3;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/NormalizeDeclarations.java b/java/java-tests/testData/refactoring/introduceVariable/NormalizeDeclarations.java
new file mode 100644
index 0000000..4549160
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/NormalizeDeclarations.java
@@ -0,0 +1,5 @@
+class X {
+    {
+        int i = 0, i1 = 0, i2 = <selection>i</selection>;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/OneLineLambdaValueCompatible.after.java b/java/java-tests/testData/refactoring/introduceVariable/OneLineLambdaValueCompatible.after.java
new file mode 100644
index 0000000..a4dbe9c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/OneLineLambdaValueCompatible.after.java
@@ -0,0 +1,23 @@
+/*
+ * 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 Foo {  
+    void test() {
+        Comparable<String> java = o -> {
+            int c = o.length();
+            return c;
+        };
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/OneLineLambdaValueCompatible.java b/java/java-tests/testData/refactoring/introduceVariable/OneLineLambdaValueCompatible.java
new file mode 100644
index 0000000..104e522
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/OneLineLambdaValueCompatible.java
@@ -0,0 +1,20 @@
+/*
+ * 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 Foo {  
+    void test() {
+        Comparable<String> java = o -> <selection>o.length()</selection>;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/OneLineLambdaVoidCompatible.after.java b/java/java-tests/testData/refactoring/introduceVariable/OneLineLambdaVoidCompatible.after.java
new file mode 100644
index 0000000..33cf47d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/OneLineLambdaVoidCompatible.after.java
@@ -0,0 +1,8 @@
+class Foo {  
+    void test() {
+        Runnable java = () -> {
+            String c = "";
+            System.out.println(c);
+        };
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/OneLineLambdaVoidCompatible.java b/java/java-tests/testData/refactoring/introduceVariable/OneLineLambdaVoidCompatible.java
new file mode 100644
index 0000000..1905f6a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/OneLineLambdaVoidCompatible.java
@@ -0,0 +1,5 @@
+class Foo {  
+    void test() {
+        Runnable java = () -> System.out.println(<selection>""</selection>);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/Parenthized.after.java b/java/java-tests/testData/refactoring/introduceVariable/Parenthized.after.java
new file mode 100644
index 0000000..ace7027
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/Parenthized.after.java
@@ -0,0 +1,6 @@
+class A {
+    void method() {
+        int temp = 1 + 2;
+        int k = temp;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/Parenthized.java b/java/java-tests/testData/refactoring/introduceVariable/Parenthized.java
new file mode 100644
index 0000000..6d69851
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/Parenthized.java
@@ -0,0 +1,5 @@
+class A {
+    void method() {
+        int k = <selection>(1 + 2)</selection>;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/ParenthizedOccurence.after.java b/java/java-tests/testData/refactoring/introduceVariable/ParenthizedOccurence.after.java
new file mode 100644
index 0000000..36fab6b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/ParenthizedOccurence.after.java
@@ -0,0 +1,14 @@
+import java.util.*;
+
+public class Introduce {
+    private static List _list = new ArrayList();
+
+    public static void main(String[] args) {
+        final boolean empty = _list.isEmpty();
+        final boolean invisible = (!empty);
+        final boolean visible = empty;
+
+        if("".equals(_list.get(0)) || empty) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/ParenthizedOccurence.java b/java/java-tests/testData/refactoring/introduceVariable/ParenthizedOccurence.java
new file mode 100644
index 0000000..7e018f5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/ParenthizedOccurence.java
@@ -0,0 +1,13 @@
+import java.util.*;
+
+public class Introduce {
+    private static List _list = new ArrayList();
+
+    public static void main(String[] args) {
+        final boolean invisible = (!<selection>_list.isEmpty()</selection>);
+        final boolean visible = (_list.isEmpty());
+
+        if("".equals(_list.get(0)) || _list.isEmpty()) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/ParenthizedOccurence1.after.java b/java/java-tests/testData/refactoring/introduceVariable/ParenthizedOccurence1.after.java
new file mode 100644
index 0000000..b58aaf7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/ParenthizedOccurence1.after.java
@@ -0,0 +1,5 @@
+public class Introduce {
+    void foo(String str) {
+        final String s = (String) str;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/ParenthizedOccurence1.java b/java/java-tests/testData/refactoring/introduceVariable/ParenthizedOccurence1.java
new file mode 100644
index 0000000..5281ba2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/ParenthizedOccurence1.java
@@ -0,0 +1,5 @@
+public class Introduce {
+    void foo(String str) {
+      <selection>((String)str)</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/Polyadic.after.java b/java/java-tests/testData/refactoring/introduceVariable/Polyadic.after.java
new file mode 100644
index 0000000..f76ab1f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/Polyadic.after.java
@@ -0,0 +1,41 @@
+/*
+ * 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.
+ */
+public class C {
+  void foo(boolean a, boolean b, boolean c) {
+       boolean option1 = true;
+       boolean option2 = true;
+      final boolean b1 = a && b;
+      if (option1) {
+         if (option2) {
+           if (b1 && c) {
+             System.out.println("One");
+           }
+         }
+         else {
+           if (b1) {
+             System.out.println("two");
+           }
+         }
+       }
+       else {
+         if (b1) {
+           System.out.println("three");
+         }
+       }
+     }
+  
+    
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/Polyadic.java b/java/java-tests/testData/refactoring/introduceVariable/Polyadic.java
new file mode 100644
index 0000000..39592e8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/Polyadic.java
@@ -0,0 +1,40 @@
+/*
+ * 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.
+ */
+public class C {
+  void foo(boolean a, boolean b, boolean c) {
+       boolean option1 = true;
+       boolean option2 = true;
+       if (option1) {
+         if (option2) {
+           if (<selection>a && b</selection> && c) {
+             System.out.println("One");
+           }
+         }
+         else {
+           if (a && b) {
+             System.out.println("two");
+           }
+         }
+       }
+       else {
+         if (a && b) {
+           System.out.println("three");
+         }
+       }
+     }
+  
+    
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/ReplaceAll.after.java b/java/java-tests/testData/refactoring/introduceVariable/ReplaceAll.after.java
new file mode 100644
index 0000000..46d7bc0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/ReplaceAll.after.java
@@ -0,0 +1,8 @@
+class Test {
+    int method(String p1, int p2) {
+        final String s = p1 + p2;
+        int i = s;
+        for(int l = i; l <= s; l++) 
+            sum += s;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/ReplaceAll.java b/java/java-tests/testData/refactoring/introduceVariable/ReplaceAll.java
new file mode 100644
index 0000000..62f5650
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/ReplaceAll.java
@@ -0,0 +1,7 @@
+class Test {
+    int method(String p1, int p2) {
+        int i = <selection>p1 + p2</selection>;
+        for(int l = i; l <= p1 + p2; l++) 
+            sum += p1 + p2;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/ReturnStatementWithoutSemicolon.after.java b/java/java-tests/testData/refactoring/introduceVariable/ReturnStatementWithoutSemicolon.after.java
new file mode 100644
index 0000000..8059fe6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/ReturnStatementWithoutSemicolon.after.java
@@ -0,0 +1,6 @@
+class Test {
+  public String bla() {
+      final String b = String.format("foo.bar.%s", "");
+      return b
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/ReturnStatementWithoutSemicolon.java b/java/java-tests/testData/refactoring/introduceVariable/ReturnStatementWithoutSemicolon.java
new file mode 100644
index 0000000..79effe0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/ReturnStatementWithoutSemicolon.java
@@ -0,0 +1,5 @@
+class Test {
+  public String bla() {
+    return String.<caret>format("foo.bar.%s", "")
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/SCR10412.after.java b/java/java-tests/testData/refactoring/introduceVariable/SCR10412.after.java
new file mode 100644
index 0000000..b1c1edc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/SCR10412.after.java
@@ -0,0 +1,6 @@
+class Test {
+    {
+        String[] newVar = {"a", "b"};
+        String[] s = newVar;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/SCR10412.java b/java/java-tests/testData/refactoring/introduceVariable/SCR10412.java
new file mode 100644
index 0000000..0a4769d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/SCR10412.java
@@ -0,0 +1,5 @@
+class Test {
+    {
+        String[] s = <selection>{ "a", "b" }</selection>;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/SCR18295.after.java b/java/java-tests/testData/refactoring/introduceVariable/SCR18295.after.java
new file mode 100644
index 0000000..9d0e678
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/SCR18295.after.java
@@ -0,0 +1,9 @@
+public class Thing {
+
+    private String it;
+
+    private void dumb() {
+        String it = this.it;
+        it.length();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/SCR18295.java b/java/java-tests/testData/refactoring/introduceVariable/SCR18295.java
new file mode 100644
index 0000000..a483505
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/SCR18295.java
@@ -0,0 +1,8 @@
+public class Thing {
+
+    private String it;
+
+    private void dumb() {
+        <selection>it</selection>.length();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/SCR18295a.after.java b/java/java-tests/testData/refactoring/introduceVariable/SCR18295a.after.java
new file mode 100644
index 0000000..f06bc92
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/SCR18295a.after.java
@@ -0,0 +1,8 @@
+public class Thing {
+
+    private String it;
+
+    private void dumb() {
+        String it = this.it;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/SCR18295a.java b/java/java-tests/testData/refactoring/introduceVariable/SCR18295a.java
new file mode 100644
index 0000000..1ae9841
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/SCR18295a.java
@@ -0,0 +1,8 @@
+public class Thing {
+
+    private String it;
+
+    private void dumb() {
+        <selection>it</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/SCR22718.after.java b/java/java-tests/testData/refactoring/introduceVariable/SCR22718.after.java
new file mode 100644
index 0000000..c4928fc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/SCR22718.after.java
@@ -0,0 +1,8 @@
+class Test {
+    Object object;
+    void foo() {
+        final Object object = this.object;
+        Object o = object; // object is selected
+        Object p = object;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/SCR22718.java b/java/java-tests/testData/refactoring/introduceVariable/SCR22718.java
new file mode 100644
index 0000000..264e037
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/SCR22718.java
@@ -0,0 +1,7 @@
+class Test {
+    Object object;
+    void foo() {
+        Object o = <selection>object</selection>; // object is selected
+        Object p = object;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/SCR26075.after.java b/java/java-tests/testData/refactoring/introduceVariable/SCR26075.after.java
new file mode 100644
index 0000000..c93d770
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/SCR26075.after.java
@@ -0,0 +1,15 @@
+class C {
+    String f () {
+       return null;
+    }
+
+    C getParent() {return null;}
+
+    void test () {
+        C c = new C();
+        String wrong = c.f();
+        while (wrong != null) {
+            c = c.getParent();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/SCR26075.java b/java/java-tests/testData/refactoring/introduceVariable/SCR26075.java
new file mode 100644
index 0000000..9644126
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/SCR26075.java
@@ -0,0 +1,14 @@
+class C {
+    String f () {
+       return null;
+    }
+
+    C getParent() {return null;}
+
+    void test () {
+        C c = new C();
+        while (<selection>c.f()</selection> != null) {
+            c = c.getParent();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/SCR40281.after.java b/java/java-tests/testData/refactoring/introduceVariable/SCR40281.after.java
new file mode 100644
index 0000000..b1f17e1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/SCR40281.after.java
@@ -0,0 +1,13 @@
+class Set<T> {}
+
+class Map <K,V> {
+    class Entry<K,V> {
+    }
+    Set<Entry<K,V>> entries () { return null; }
+}
+
+class C {
+    void foo (Map<?, String> s) {
+        Set<? extends Map<?, String>.Entry<?, String>> temp = s.entries();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/SCR40281.java b/java/java-tests/testData/refactoring/introduceVariable/SCR40281.java
new file mode 100644
index 0000000..768986f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/SCR40281.java
@@ -0,0 +1,13 @@
+class Set<T> {}
+
+class Map <K,V> {
+    class Entry<K,V> {
+    }
+    Set<Entry<K,V>> entries () { return null; }
+}
+
+class C {
+    void foo (Map<?, String> s) {
+        <selection>s.entries()</selection>;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/Scr16910.after.java b/java/java-tests/testData/refactoring/introduceVariable/Scr16910.after.java
new file mode 100644
index 0000000..8a3007a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/Scr16910.after.java
@@ -0,0 +1,9 @@
+class C {
+  {
+    String s = "Text";
+    if (()) {
+        final int i = s.length();
+        System.out.println("Whatever" + i);
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/Scr16910.java b/java/java-tests/testData/refactoring/introduceVariable/Scr16910.java
new file mode 100644
index 0000000..def02b5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/Scr16910.java
@@ -0,0 +1,7 @@
+class C {
+  {
+    String s = "Text";
+    if (())
+      System.out.println("Whatever" + <selection>s.length()</selection>);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/SiblingInnerClassType.after.java b/java/java-tests/testData/refactoring/introduceVariable/SiblingInnerClassType.after.java
new file mode 100644
index 0000000..a9f94eb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/SiblingInnerClassType.after.java
@@ -0,0 +1,10 @@
+class A {
+  class B {
+  }
+
+  class C {
+     void testHere() {
+         B vari = new B();
+     }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/SiblingInnerClassType.java b/java/java-tests/testData/refactoring/introduceVariable/SiblingInnerClassType.java
new file mode 100644
index 0000000..5aaed1e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/SiblingInnerClassType.java
@@ -0,0 +1,10 @@
+class A {
+  class B {
+  }
+
+  class C {
+     void testHere() {
+       new <caret>B()
+     }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/SimpleExpression.after.java b/java/java-tests/testData/refactoring/introduceVariable/SimpleExpression.after.java
new file mode 100644
index 0000000..3098b65
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/SimpleExpression.after.java
@@ -0,0 +1,5 @@
+public class Test {
+    public void method() {
+        int i = 1 + 2;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/SimpleExpression.java b/java/java-tests/testData/refactoring/introduceVariable/SimpleExpression.java
new file mode 100644
index 0000000..75e12d3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/SimpleExpression.java
@@ -0,0 +1,5 @@
+public class Test {
+    public void method() {
+        1 + 2 <caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/SkipSemicolon.after.java b/java/java-tests/testData/refactoring/introduceVariable/SkipSemicolon.after.java
new file mode 100644
index 0000000..877ba1c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/SkipSemicolon.after.java
@@ -0,0 +1,6 @@
+class Test {
+  void foo() {
+      int mi5 = 0;
+      int i = mi5;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/SkipSemicolon.java b/java/java-tests/testData/refactoring/introduceVariable/SkipSemicolon.java
new file mode 100644
index 0000000..d80ce36
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/SkipSemicolon.java
@@ -0,0 +1,5 @@
+class Test {
+  void foo() {
+    int i = <selection>0;</selection>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/StaticConflictingField.after.java b/java/java-tests/testData/refactoring/introduceVariable/StaticConflictingField.after.java
new file mode 100644
index 0000000..91a13f2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/StaticConflictingField.after.java
@@ -0,0 +1,9 @@
+class XYZ {
+    static int name;
+
+    void method() {
+        System.out.println(name);
+        int name = 27;
+        System.out.println(XYZ.name);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/StaticConflictingField.java b/java/java-tests/testData/refactoring/introduceVariable/StaticConflictingField.java
new file mode 100644
index 0000000..88b2ab13
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/StaticConflictingField.java
@@ -0,0 +1,9 @@
+class XYZ {
+    static int name;
+
+    void method() {
+        System.out.println(name);
+        <selection>27</selection>
+        System.out.println(name);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/StaticImport.after.java b/java/java-tests/testData/refactoring/introduceVariable/StaticImport.after.java
new file mode 100644
index 0000000..390e99f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/StaticImport.after.java
@@ -0,0 +1,7 @@
+import static java.lang.Integer.*;
+
+class A {
+    public void test() {
+        final int i = MAX_VALUE;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/StaticImport.java b/java/java-tests/testData/refactoring/introduceVariable/StaticImport.java
new file mode 100644
index 0000000..5397bf4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/StaticImport.java
@@ -0,0 +1,7 @@
+import static java.lang.Integer.*;
+
+class A {
+    public void test() {
+        <selection>MAX_VALUE</selection>; 
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/SubExpressionFromIntellijidearulezzz.after.java b/java/java-tests/testData/refactoring/introduceVariable/SubExpressionFromIntellijidearulezzz.after.java
new file mode 100644
index 0000000..a7277f4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/SubExpressionFromIntellijidearulezzz.after.java
@@ -0,0 +1,6 @@
+class A {
+    public void test() {
+        String str = "sintellijidearulezzzs";
+        String s = "intellijidearulezzz" + str + "sintellijidearulezzz";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/SubExpressionFromIntellijidearulezzz.java b/java/java-tests/testData/refactoring/introduceVariable/SubExpressionFromIntellijidearulezzz.java
new file mode 100644
index 0000000..55d687e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/SubExpressionFromIntellijidearulezzz.java
@@ -0,0 +1,5 @@
+class A {
+    public void test() {
+        String s = "intellijidearulezzz<selection>sintellijidearulezzzs</selection>sintellijidearulezzz";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/SubLiteral.after.java b/java/java-tests/testData/refactoring/introduceVariable/SubLiteral.after.java
new file mode 100644
index 0000000..df0efa2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/SubLiteral.after.java
@@ -0,0 +1,6 @@
+class A {
+    public void test() {
+        String str = "ss";
+        String s = "s" + str + "s";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/SubLiteral.java b/java/java-tests/testData/refactoring/introduceVariable/SubLiteral.java
new file mode 100644
index 0000000..350afec
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/SubLiteral.java
@@ -0,0 +1,5 @@
+class A {
+    public void test() {
+        String s = "s<selection>ss</selection>s";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/SubLiteral1.after.java b/java/java-tests/testData/refactoring/introduceVariable/SubLiteral1.after.java
new file mode 100644
index 0000000..aea109f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/SubLiteral1.after.java
@@ -0,0 +1,6 @@
+class A {
+    public void test() {
+        String str = "ss";
+        String s = str;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/SubLiteral1.java b/java/java-tests/testData/refactoring/introduceVariable/SubLiteral1.java
new file mode 100644
index 0000000..bb6061b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/SubLiteral1.java
@@ -0,0 +1,5 @@
+class A {
+    public void test() {
+        String s = "<selection>ss</selection>";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/SubLiteralFromExpression.after.java b/java/java-tests/testData/refactoring/introduceVariable/SubLiteralFromExpression.after.java
new file mode 100644
index 0000000..3b4350b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/SubLiteralFromExpression.after.java
@@ -0,0 +1,7 @@
+class A {
+    public void test() {
+        int i = 0;
+        String str = i + "sss";
+        String s = str + "s";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/SubLiteralFromExpression.java b/java/java-tests/testData/refactoring/introduceVariable/SubLiteralFromExpression.java
new file mode 100644
index 0000000..0c4aa3d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/SubLiteralFromExpression.java
@@ -0,0 +1,6 @@
+class A {
+    public void test() {
+        int i = 0;
+        String s = <selection>i + "sss</selection>s";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/SubPrimitiveLiteral.after.java b/java/java-tests/testData/refactoring/introduceVariable/SubPrimitiveLiteral.after.java
new file mode 100644
index 0000000..63c604c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/SubPrimitiveLiteral.after.java
@@ -0,0 +1,6 @@
+class A {
+    public void test() {
+        boolean str = true;
+        String s = "ss" + str;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/SubPrimitiveLiteral.java b/java/java-tests/testData/refactoring/introduceVariable/SubPrimitiveLiteral.java
new file mode 100644
index 0000000..e11ca29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/SubPrimitiveLiteral.java
@@ -0,0 +1,5 @@
+class A {
+    public void test() {
+        String s = "ss<selection>true</selection>";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/SubexpressionWithSpacesInSelection.after.java b/java/java-tests/testData/refactoring/introduceVariable/SubexpressionWithSpacesInSelection.after.java
new file mode 100644
index 0000000..8d577b1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/SubexpressionWithSpacesInSelection.after.java
@@ -0,0 +1,10 @@
+class A {
+    public void test(boolean a, boolean b) {
+        final boolean ab = a &&
+                b;
+        if (true && ab
+//some comment
+
+      );
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/SubexpressionWithSpacesInSelection.java b/java/java-tests/testData/refactoring/introduceVariable/SubexpressionWithSpacesInSelection.java
new file mode 100644
index 0000000..f0475fa
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/SubexpressionWithSpacesInSelection.java
@@ -0,0 +1,9 @@
+class A {
+    public void test(boolean a, boolean b) {
+        if (true && <selection>a &&
+                     b
+//some comment
+</selection>
+      );
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/ThisQualifier.after.java b/java/java-tests/testData/refactoring/introduceVariable/ThisQualifier.after.java
new file mode 100644
index 0000000..b25eddd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/ThisQualifier.after.java
@@ -0,0 +1,12 @@
+public class Test9 {
+    protected int count;
+}
+
+class Test10 extends Test9 {
+    private class Test10i {
+        void test() {
+            final int count = Test10.this.count;
+            System.out.println(count);
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceVariable/ThisQualifier.java b/java/java-tests/testData/refactoring/introduceVariable/ThisQualifier.java
new file mode 100644
index 0000000..eb8ee04
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/ThisQualifier.java
@@ -0,0 +1,11 @@
+public class Test9 {
+    protected int count;
+}
+
+class Test10 extends Test9 {
+    private class Test10i {
+        void test() {
+            System.out.println(<selection>count</selection>);
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceVariable/TypeAnnotations.after.java b/java/java-tests/testData/refactoring/introduceVariable/TypeAnnotations.after.java
new file mode 100644
index 0000000..13598a7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/TypeAnnotations.after.java
@@ -0,0 +1,13 @@
+import java.lang.annotation.*;
+
+@Target({ElementType.TYPE_USE/*, ElementType.TYPE*/})
+@interface TA {
+
+}
+
+class C {
+    void foo () {
+        @TA C y = null;
+        @TA C y1 = y;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceVariable/TypeAnnotations.java b/java/java-tests/testData/refactoring/introduceVariable/TypeAnnotations.java
new file mode 100644
index 0000000..bba9d94
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/TypeAnnotations.java
@@ -0,0 +1,13 @@
+import java.lang.annotation.*;
+
+@Target({ElementType.TYPE_USE/*, ElementType.TYPE*/})
+@interface TA {
+
+}
+
+class C {
+    void foo () {
+        @TA C y = null;
+        <selection>y</selection>;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/introduceVariable/WithIfBranches.after.java b/java/java-tests/testData/refactoring/introduceVariable/WithIfBranches.after.java
new file mode 100644
index 0000000..ba57de1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/WithIfBranches.after.java
@@ -0,0 +1,22 @@
+class A {
+    private class Inner {
+        public void innerMethod() {
+            new Runnable() {
+                public void run() {
+                    if (true) {
+                        if (true) {
+                            int i = 0;
+                            int temp = i * i;
+                            if (i == 0) {
+                                System.out.println("" + temp);
+                            } else {
+                                System.out.println("" + temp);
+                                i = temp;
+                            }
+                        }
+                    }
+                }
+            }.run();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/WithIfBranches.java b/java/java-tests/testData/refactoring/introduceVariable/WithIfBranches.java
new file mode 100644
index 0000000..6b0d690
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/WithIfBranches.java
@@ -0,0 +1,21 @@
+class A {
+    private class Inner {
+        public void innerMethod() {
+            new Runnable() {
+                public void run() {
+                    if (true) {
+                        if (true) {
+                            int i = 0;
+                            if (i == 0) {
+                                System.out.println("" + <selection>i * i</selection>);
+                            } else {
+                                System.out.println("" + i * i);
+                                i = i * i;
+                            }
+                        }
+                    }
+                }
+            }.run();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/genericTypeWithInner/after/test/A.java b/java/java-tests/testData/refactoring/introduceVariable/genericTypeWithInner/after/test/A.java
new file mode 100644
index 0000000..0243bf8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/genericTypeWithInner/after/test/A.java
@@ -0,0 +1,6 @@
+package test;
+
+public class A {
+    public static class B {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/genericTypeWithInner/after/test/Client.java b/java/java-tests/testData/refactoring/introduceVariable/genericTypeWithInner/after/test/Client.java
new file mode 100644
index 0000000..e7effa4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/genericTypeWithInner/after/test/Client.java
@@ -0,0 +1,9 @@
+package test;
+
+public class Client {
+    public static List<A.B> getList() { return null; }
+    
+    public static void method() {
+        final List<A.B> l = getList();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/genericTypeWithInner/after/test/List.java b/java/java-tests/testData/refactoring/introduceVariable/genericTypeWithInner/after/test/List.java
new file mode 100644
index 0000000..554f3a0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/genericTypeWithInner/after/test/List.java
@@ -0,0 +1,4 @@
+package test;
+
+public class List<E> {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/genericTypeWithInner/before/test/A.java b/java/java-tests/testData/refactoring/introduceVariable/genericTypeWithInner/before/test/A.java
new file mode 100644
index 0000000..0243bf8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/genericTypeWithInner/before/test/A.java
@@ -0,0 +1,6 @@
+package test;
+
+public class A {
+    public static class B {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/genericTypeWithInner/before/test/Client.java b/java/java-tests/testData/refactoring/introduceVariable/genericTypeWithInner/before/test/Client.java
new file mode 100644
index 0000000..c6531ff
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/genericTypeWithInner/before/test/Client.java
@@ -0,0 +1,9 @@
+package test;
+
+public class Client {
+    public static List<A.B> getList() { return null; }
+    
+    public static void method() {
+         <selection>getList()</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/genericTypeWithInner/before/test/List.java b/java/java-tests/testData/refactoring/introduceVariable/genericTypeWithInner/before/test/List.java
new file mode 100644
index 0000000..554f3a0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/genericTypeWithInner/before/test/List.java
@@ -0,0 +1,4 @@
+package test;
+
+public class List<E> {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/genericTypeWithInner1/after/test/A.java b/java/java-tests/testData/refactoring/introduceVariable/genericTypeWithInner1/after/test/A.java
new file mode 100644
index 0000000..0243bf8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/genericTypeWithInner1/after/test/A.java
@@ -0,0 +1,6 @@
+package test;
+
+public class A {
+    public static class B {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/genericTypeWithInner1/after/test/Client.java b/java/java-tests/testData/refactoring/introduceVariable/genericTypeWithInner1/after/test/Client.java
new file mode 100644
index 0000000..8d82a0a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/genericTypeWithInner1/after/test/Client.java
@@ -0,0 +1,7 @@
+package test;
+
+public class Client {
+    public static void method() {
+        final List<A.B> l = X.getList();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/genericTypeWithInner1/after/test/List.java b/java/java-tests/testData/refactoring/introduceVariable/genericTypeWithInner1/after/test/List.java
new file mode 100644
index 0000000..554f3a0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/genericTypeWithInner1/after/test/List.java
@@ -0,0 +1,4 @@
+package test;
+
+public class List<E> {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/genericTypeWithInner1/after/test/X.java b/java/java-tests/testData/refactoring/introduceVariable/genericTypeWithInner1/after/test/X.java
new file mode 100644
index 0000000..3b7bf52
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/genericTypeWithInner1/after/test/X.java
@@ -0,0 +1,5 @@
+package test;
+
+public class X {
+    public static List<A.B> getList() { return null; } 
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/genericTypeWithInner1/before/test/A.java b/java/java-tests/testData/refactoring/introduceVariable/genericTypeWithInner1/before/test/A.java
new file mode 100644
index 0000000..0243bf8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/genericTypeWithInner1/before/test/A.java
@@ -0,0 +1,6 @@
+package test;
+
+public class A {
+    public static class B {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/genericTypeWithInner1/before/test/Client.java b/java/java-tests/testData/refactoring/introduceVariable/genericTypeWithInner1/before/test/Client.java
new file mode 100644
index 0000000..a5df100
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/genericTypeWithInner1/before/test/Client.java
@@ -0,0 +1,7 @@
+package test;
+
+public class Client {
+    public static void method() {
+         <selection>X.getList()</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/genericTypeWithInner1/before/test/List.java b/java/java-tests/testData/refactoring/introduceVariable/genericTypeWithInner1/before/test/List.java
new file mode 100644
index 0000000..554f3a0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/genericTypeWithInner1/before/test/List.java
@@ -0,0 +1,4 @@
+package test;
+
+public class List<E> {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/genericTypeWithInner1/before/test/X.java b/java/java-tests/testData/refactoring/introduceVariable/genericTypeWithInner1/before/test/X.java
new file mode 100644
index 0000000..3b7bf52
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/genericTypeWithInner1/before/test/X.java
@@ -0,0 +1,5 @@
+package test;
+
+public class X {
+    public static List<A.B> getList() { return null; } 
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/genericWithTwoParameters/after/Client.java b/java/java-tests/testData/refactoring/introduceVariable/genericWithTwoParameters/after/Client.java
new file mode 100644
index 0000000..4760e5e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/genericWithTwoParameters/after/Client.java
@@ -0,0 +1,7 @@
+import util.Pair;
+
+class Client {
+    void method() {
+        Pair<String,Pair<Integer,Boolean>> p = PairProvider.getPair();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/genericWithTwoParameters/after/PairProvider.java b/java/java-tests/testData/refactoring/introduceVariable/genericWithTwoParameters/after/PairProvider.java
new file mode 100644
index 0000000..5b6d9ab
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/genericWithTwoParameters/after/PairProvider.java
@@ -0,0 +1,7 @@
+import util.Pair;
+
+class PairProvider {
+    public static Pair<String, Pair<Integer, Boolean>> getPair() {
+        return null;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/genericWithTwoParameters/after/util/Pair.java b/java/java-tests/testData/refactoring/introduceVariable/genericWithTwoParameters/after/util/Pair.java
new file mode 100644
index 0000000..7c095c5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/genericWithTwoParameters/after/util/Pair.java
@@ -0,0 +1,13 @@
+package util;
+
+class Pair<L,R> {
+    public Pair(L l, R r) {
+
+    }
+    public L getL() {
+        return null;
+    }
+    public R getR() {
+        return null;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/genericWithTwoParameters/before/Client.java b/java/java-tests/testData/refactoring/introduceVariable/genericWithTwoParameters/before/Client.java
new file mode 100644
index 0000000..fa5369d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/genericWithTwoParameters/before/Client.java
@@ -0,0 +1,5 @@
+class Client {
+    void method() {
+        <selection>PairProvider.getPair()</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/genericWithTwoParameters/before/PairProvider.java b/java/java-tests/testData/refactoring/introduceVariable/genericWithTwoParameters/before/PairProvider.java
new file mode 100644
index 0000000..5b6d9ab
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/genericWithTwoParameters/before/PairProvider.java
@@ -0,0 +1,7 @@
+import util.Pair;
+
+class PairProvider {
+    public static Pair<String, Pair<Integer, Boolean>> getPair() {
+        return null;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/genericWithTwoParameters/before/util/Pair.java b/java/java-tests/testData/refactoring/introduceVariable/genericWithTwoParameters/before/util/Pair.java
new file mode 100644
index 0000000..7c095c5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/genericWithTwoParameters/before/util/Pair.java
@@ -0,0 +1,13 @@
+package util;
+
+class Pair<L,R> {
+    public Pair(L l, R r) {
+
+    }
+    public L getL() {
+        return null;
+    }
+    public R getR() {
+        return null;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/genericWithTwoParameters2/after/Client.java b/java/java-tests/testData/refactoring/introduceVariable/genericWithTwoParameters2/after/Client.java
new file mode 100644
index 0000000..543df40
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/genericWithTwoParameters2/after/Client.java
@@ -0,0 +1,5 @@
+class Client {
+    void method() {
+        Pair<String, Pair<Integer, Boolean>> p = new PairProvider<String, Integer, Boolean>().getPair();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/genericWithTwoParameters2/after/Pair.java b/java/java-tests/testData/refactoring/introduceVariable/genericWithTwoParameters2/after/Pair.java
new file mode 100644
index 0000000..e5ba61c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/genericWithTwoParameters2/after/Pair.java
@@ -0,0 +1,10 @@
+class Pair<L,R> {
+    public Pair(L l, R r) {
+    }
+    public L getL() {
+        return null;
+    }
+    public R getR() {
+        return null;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/genericWithTwoParameters2/after/PairProvider.java b/java/java-tests/testData/refactoring/introduceVariable/genericWithTwoParameters2/after/PairProvider.java
new file mode 100644
index 0000000..7eed25a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/genericWithTwoParameters2/after/PairProvider.java
@@ -0,0 +1,5 @@
+class PairProvider <U, V, W>{
+    public Pair<U, Pair<V, W>> getPair() {
+        return null;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/genericWithTwoParameters2/before/Client.java b/java/java-tests/testData/refactoring/introduceVariable/genericWithTwoParameters2/before/Client.java
new file mode 100644
index 0000000..881c465
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/genericWithTwoParameters2/before/Client.java
@@ -0,0 +1,5 @@
+class Client {
+    void method() {
+        <selection>new PairProvider<String, Integer, Boolean>().getPair()</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/genericWithTwoParameters2/before/Pair.java b/java/java-tests/testData/refactoring/introduceVariable/genericWithTwoParameters2/before/Pair.java
new file mode 100644
index 0000000..e5ba61c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/genericWithTwoParameters2/before/Pair.java
@@ -0,0 +1,10 @@
+class Pair<L,R> {
+    public Pair(L l, R r) {
+    }
+    public L getL() {
+        return null;
+    }
+    public R getR() {
+        return null;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/genericWithTwoParameters2/before/PairProvider.java b/java/java-tests/testData/refactoring/introduceVariable/genericWithTwoParameters2/before/PairProvider.java
new file mode 100644
index 0000000..7eed25a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/genericWithTwoParameters2/before/PairProvider.java
@@ -0,0 +1,5 @@
+class PairProvider <U, V, W>{
+    public Pair<U, Pair<V, W>> getPair() {
+        return null;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/samePackageRef/after/pack1/A.java b/java/java-tests/testData/refactoring/introduceVariable/samePackageRef/after/pack1/A.java
new file mode 100644
index 0000000..096f73a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/samePackageRef/after/pack1/A.java
@@ -0,0 +1,7 @@
+package pack1;
+
+public class A {
+    void method() {
+        B b = new B();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/samePackageRef/after/pack1/B.java b/java/java-tests/testData/refactoring/introduceVariable/samePackageRef/after/pack1/B.java
new file mode 100644
index 0000000..8799ce1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/samePackageRef/after/pack1/B.java
@@ -0,0 +1,4 @@
+package pack1;
+
+class B {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/samePackageRef/before/pack1/A.java b/java/java-tests/testData/refactoring/introduceVariable/samePackageRef/before/pack1/A.java
new file mode 100644
index 0000000..6298fd6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/samePackageRef/before/pack1/A.java
@@ -0,0 +1,7 @@
+package pack1;
+
+public class A {
+    void method() {
+        <selection>new B()</selection>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/samePackageRef/before/pack1/B.java b/java/java-tests/testData/refactoring/introduceVariable/samePackageRef/before/pack1/B.java
new file mode 100644
index 0000000..8799ce1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/introduceVariable/samePackageRef/before/pack1/B.java
@@ -0,0 +1,4 @@
+package pack1;
+
+class B {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/invertBoolean/1.java b/java/java-tests/testData/refactoring/invertBoolean/1.java
new file mode 100644
index 0000000..a5ca5b7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/invertBoolean/1.java
@@ -0,0 +1,17 @@
+interface I {
+    boolean <caret>isFoo();
+}
+
+class RRR implements I {
+    public boolean isFoo() {
+        return true;
+    }
+
+    {
+        boolean foo = isFoo();
+    }
+
+    void g(I i) {
+        boolean foo = i.isFoo();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/invertBoolean/1_after.java b/java/java-tests/testData/refactoring/invertBoolean/1_after.java
new file mode 100644
index 0000000..84ad527
--- /dev/null
+++ b/java/java-tests/testData/refactoring/invertBoolean/1_after.java
@@ -0,0 +1,17 @@
+interface I {
+    boolean isFooInverted();
+}
+
+class RRR implements I {
+    public boolean isFooInverted() {
+        return false;
+    }
+
+    {
+        boolean foo = !isFooInverted();
+    }
+
+    void g(I i) {
+        boolean foo = !i.isFooInverted();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/invertBoolean/2.java b/java/java-tests/testData/refactoring/invertBoolean/2.java
new file mode 100644
index 0000000..1a833f4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/invertBoolean/2.java
@@ -0,0 +1,17 @@
+interface I {
+    boolean isFoo();
+}
+
+class RRR implements I {
+    public boolean <caret>isFoo() {
+        return true;
+    }
+
+    {
+        boolean foo = isFoo();
+    }
+
+    void g(I i) {
+        boolean foo = i.isFoo();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/invertBoolean/2_after.java b/java/java-tests/testData/refactoring/invertBoolean/2_after.java
new file mode 100644
index 0000000..39b40b1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/invertBoolean/2_after.java
@@ -0,0 +1,17 @@
+interface I {
+    boolean isFoo();
+}
+
+class RRR implements I {
+    public boolean isFooInverted() {
+        return false;
+    }
+
+    {
+        boolean foo = !isFooInverted();
+    }
+
+    void g(I i) {
+        boolean foo = i.isFoo();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/invertBoolean/anonymousClasses.java b/java/java-tests/testData/refactoring/invertBoolean/anonymousClasses.java
new file mode 100644
index 0000000..36ebd62
--- /dev/null
+++ b/java/java-tests/testData/refactoring/invertBoolean/anonymousClasses.java
@@ -0,0 +1,23 @@
+abstract class DemoInvertBoolean {
+
+    boolean b;
+
+    DemoInvertBoolean(boolean <caret>b) {
+        this.b = b;
+    }
+
+    DemoInvertBoolean() {
+        this(true);//this true will be inverted
+    }
+
+    abstract void f1();
+
+    public static void main(String[] args) {
+        DemoInvertBoolean demo = new DemoInvertBoolean(true) {//this true will not be inverted
+            @Override
+            public void f1() {
+
+            }
+        };
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/invertBoolean/anonymousClasses_after.java b/java/java-tests/testData/refactoring/invertBoolean/anonymousClasses_after.java
new file mode 100644
index 0000000..57bc301
--- /dev/null
+++ b/java/java-tests/testData/refactoring/invertBoolean/anonymousClasses_after.java
@@ -0,0 +1,23 @@
+abstract class DemoInvertBoolean {
+
+    boolean b;
+
+    DemoInvertBoolean(boolean <caret>bInverted) {
+        this.b = !bInverted;
+    }
+
+    DemoInvertBoolean() {
+        this(false);//this true will be inverted
+    }
+
+    abstract void f1();
+
+    public static void main(String[] args) {
+        DemoInvertBoolean demo = new DemoInvertBoolean(false) {//this true will not be inverted
+            @Override
+            public void f1() {
+
+            }
+        };
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/invertBoolean/innerClasses.java b/java/java-tests/testData/refactoring/invertBoolean/innerClasses.java
new file mode 100644
index 0000000..85cf1d4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/invertBoolean/innerClasses.java
@@ -0,0 +1,16 @@
+public class Convert2AtomicTest {
+  public boolean f<caret>oo() {
+    Processor processor = new Processor() {
+      @Override
+      public boolean process(Object o) {
+        return false; // Changes false to true here, WRONG!!!
+      }
+    };
+
+    return false; // Changes false to true here, right
+  }
+}
+
+interface Processor {
+  boolean process(Object object);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/invertBoolean/innerClasses_after.java b/java/java-tests/testData/refactoring/invertBoolean/innerClasses_after.java
new file mode 100644
index 0000000..643ce9e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/invertBoolean/innerClasses_after.java
@@ -0,0 +1,16 @@
+public class Convert2AtomicTest {
+  public boolean fooInverted() {
+    Processor processor = new Processor() {
+      @Override
+      public boolean process(Object o) {
+        return false; // Changes false to true here, WRONG!!!
+      }
+    };
+
+    return true; // Changes false to true here, right
+  }
+}
+
+interface Processor {
+  boolean process(Object object);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/invertBoolean/parameter.java b/java/java-tests/testData/refactoring/invertBoolean/parameter.java
new file mode 100644
index 0000000..600cc74
--- /dev/null
+++ b/java/java-tests/testData/refactoring/invertBoolean/parameter.java
@@ -0,0 +1,9 @@
+class InvertBooleanParameterTest {
+    void foo(boolean <caret>b) {
+        boolean c = !b;
+    }
+
+    {
+        foo(true);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/invertBoolean/parameter1.java b/java/java-tests/testData/refactoring/invertBoolean/parameter1.java
new file mode 100644
index 0000000..32aa870
--- /dev/null
+++ b/java/java-tests/testData/refactoring/invertBoolean/parameter1.java
@@ -0,0 +1,16 @@
+class InvertBooleanParameterTest {
+    void foo(boolean <caret>b) {
+        boolean c = !b;
+        b = false;
+    }
+
+    {
+        foo(true);
+    }
+}
+
+class Drv extends InvertBooleanParameterTest {
+    void foo(boolean b) {
+        super.foo(b);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/invertBoolean/parameter1_after.java b/java/java-tests/testData/refactoring/invertBoolean/parameter1_after.java
new file mode 100644
index 0000000..10bd410
--- /dev/null
+++ b/java/java-tests/testData/refactoring/invertBoolean/parameter1_after.java
@@ -0,0 +1,16 @@
+class InvertBooleanParameterTest {
+    void foo(boolean bInverted) {
+        boolean c = bInverted;
+        bInverted = true;
+    }
+
+    {
+        foo(false);
+    }
+}
+
+class Drv extends InvertBooleanParameterTest {
+    void foo(boolean bInverted) {
+        super.foo(bInverted);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/invertBoolean/parameter_after.java b/java/java-tests/testData/refactoring/invertBoolean/parameter_after.java
new file mode 100644
index 0000000..fe5b624
--- /dev/null
+++ b/java/java-tests/testData/refactoring/invertBoolean/parameter_after.java
@@ -0,0 +1,9 @@
+class InvertBooleanParameterTest {
+    void foo(boolean bInverted) {
+        boolean c = bInverted;
+    }
+
+    {
+        foo(false);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/invertBoolean/unusedReturnValue.java b/java/java-tests/testData/refactoring/invertBoolean/unusedReturnValue.java
new file mode 100644
index 0000000..162ec48
--- /dev/null
+++ b/java/java-tests/testData/refactoring/invertBoolean/unusedReturnValue.java
@@ -0,0 +1,9 @@
+class C {
+  boolean f<caret>oo() {
+    return false;
+  }
+
+  void bar() {
+    foo();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/invertBoolean/unusedReturnValue_after.java b/java/java-tests/testData/refactoring/invertBoolean/unusedReturnValue_after.java
new file mode 100644
index 0000000..4741aeb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/invertBoolean/unusedReturnValue_after.java
@@ -0,0 +1,9 @@
+class C {
+  boolean fooInverted() {
+    return true;
+  }
+
+  void bar() {
+    fooInverted();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/makeClassStatic/DefaultConstructorAnonymousClass.java b/java/java-tests/testData/refactoring/makeClassStatic/DefaultConstructorAnonymousClass.java
new file mode 100644
index 0000000..7ceb92f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeClassStatic/DefaultConstructorAnonymousClass.java
@@ -0,0 +1,14 @@
+public class A {
+  class <caret>B {
+  }
+}
+
+class C {
+  void foo() {
+    new A().new B() {
+      public String toString() {
+        return super.toString();
+      }
+    }.toString();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeClassStatic/DefaultConstructorAnonymousClass_after.java b/java/java-tests/testData/refactoring/makeClassStatic/DefaultConstructorAnonymousClass_after.java
new file mode 100644
index 0000000..8f15deb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeClassStatic/DefaultConstructorAnonymousClass_after.java
@@ -0,0 +1,16 @@
+public class A {
+  static class B {
+      public B() {
+      }
+  }
+}
+
+class C {
+  void foo() {
+    new A().new B() {
+      public String toString() {
+        return super.toString();
+      }
+    }.toString();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeClassStatic/FieldInitializerMovedToTheConstructor.java b/java/java-tests/testData/refactoring/makeClassStatic/FieldInitializerMovedToTheConstructor.java
new file mode 100644
index 0000000..d9ac859
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeClassStatic/FieldInitializerMovedToTheConstructor.java
@@ -0,0 +1,13 @@
+public class YoYo {
+    Object y;
+    class <caret>YoYoYo {
+        Object x = y;
+        Object[] xx = {y}; 
+        void foo (){
+            YoYo yoYoy = YoYo.this;
+            Object t = y;
+            Object t1 = yoYoy.y;
+        }
+    }
+}
+
diff --git a/java/java-tests/testData/refactoring/makeClassStatic/FieldInitializerMovedToTheConstructor_after.java b/java/java-tests/testData/refactoring/makeClassStatic/FieldInitializerMovedToTheConstructor_after.java
new file mode 100644
index 0000000..964a4e0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeClassStatic/FieldInitializerMovedToTheConstructor_after.java
@@ -0,0 +1,23 @@
+public class YoYo {
+    Object y;
+    static class YoYoYo {
+        Object x;
+        Object[] xx;
+        private YoYo anObject;
+        private Object y;
+
+        public YoYoYo(YoYo anObject, Object y) {
+            this.anObject = anObject;
+            this.y = y;
+            this.x = y;
+            this.xx = new Object[]{y};
+        }
+
+        void foo (){
+            YoYo yoYoy = anObject;
+            Object t = y;
+            Object t1 = yoYoy.y;
+        }
+    }
+}
+
diff --git a/java/java-tests/testData/refactoring/makeClassStatic/FieldInitializerSplit.java b/java/java-tests/testData/refactoring/makeClassStatic/FieldInitializerSplit.java
new file mode 100644
index 0000000..6e77f1f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeClassStatic/FieldInitializerSplit.java
@@ -0,0 +1,6 @@
+class Outer {
+  class In<caret>ner {
+    Object x = Outer.this.getClass();
+
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeClassStatic/FieldInitializerSplit_after.java b/java/java-tests/testData/refactoring/makeClassStatic/FieldInitializerSplit_after.java
new file mode 100644
index 0000000..005259e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeClassStatic/FieldInitializerSplit_after.java
@@ -0,0 +1,12 @@
+class Outer {
+  static class Inner {
+    Object x;
+
+      private Outer anObject;
+
+      public Inner(Outer anObject) {
+          this.anObject = anObject;
+          this.x = anObject.getClass();
+      }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeClassStatic/FieldWithMyPrefix.java b/java/java-tests/testData/refactoring/makeClassStatic/FieldWithMyPrefix.java
new file mode 100644
index 0000000..c6cdc4f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeClassStatic/FieldWithMyPrefix.java
@@ -0,0 +1,13 @@
+class T {
+    Object myObject;
+
+    void test() {
+        new MyRunnable().run();
+    }
+
+    private class <caret>MyRunnable implements Runnable {
+        public void run() {
+            myObject.toString();
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/makeClassStatic/FieldWithMyPrefix_after.java b/java/java-tests/testData/refactoring/makeClassStatic/FieldWithMyPrefix_after.java
new file mode 100644
index 0000000..e455f1b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeClassStatic/FieldWithMyPrefix_after.java
@@ -0,0 +1,19 @@
+class T {
+    Object myObject;
+
+    void test() {
+        new MyRunnable(myObject).run();
+    }
+
+    private static class <caret>MyRunnable implements Runnable {
+        private Object myObject;
+
+        public MyRunnable(Object object) {
+            this.myObject = object;
+        }
+
+        public void run() {
+            myObject.toString();
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/makeClassStatic/IDEADEV11595.java b/java/java-tests/testData/refactoring/makeClassStatic/IDEADEV11595.java
new file mode 100644
index 0000000..f2dd635
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeClassStatic/IDEADEV11595.java
@@ -0,0 +1,7 @@
+class Test {
+    private class <caret>A {
+        private B b = new B();
+        private class B {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeClassStatic/IDEADEV11595_after.java b/java/java-tests/testData/refactoring/makeClassStatic/IDEADEV11595_after.java
new file mode 100644
index 0000000..3ce594a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeClassStatic/IDEADEV11595_after.java
@@ -0,0 +1,11 @@
+class Test {
+    private static class A {
+        private B b = new B();
+
+        public A() {
+        }
+
+        private class B {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeClassStatic/IDEADEV12762.java b/java/java-tests/testData/refactoring/makeClassStatic/IDEADEV12762.java
new file mode 100644
index 0000000..1b38a3f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeClassStatic/IDEADEV12762.java
@@ -0,0 +1,16 @@
+class Test18 {
+
+    String str;
+
+    class <caret>A {
+        boolean flag;
+
+        public A(boolean flag) {
+            this.flag = flag;
+        }
+
+        void foo() {
+            System.out.println("str = " + str);
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeClassStatic/IDEADEV12762_after.java b/java/java-tests/testData/refactoring/makeClassStatic/IDEADEV12762_after.java
new file mode 100644
index 0000000..b74c6e0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeClassStatic/IDEADEV12762_after.java
@@ -0,0 +1,18 @@
+class Test18 {
+
+    String str;
+
+    static class A {
+        boolean flag;
+        private Test18 anObject;
+
+        public A(Test18 anObject, boolean flag) {
+            this.flag = flag;
+            this.anObject = anObject;
+        }
+
+        void foo() {
+            System.out.println("str = " + anObject.str);
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeClassStatic/IDEADEV3247.java b/java/java-tests/testData/refactoring/makeClassStatic/IDEADEV3247.java
new file mode 100644
index 0000000..6469ad7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeClassStatic/IDEADEV3247.java
@@ -0,0 +1,15 @@
+class Test8 {
+
+    void bar() {
+    }
+
+    class <caret>B {
+
+        int c;
+
+        void foo() {
+            c = 10;
+            bar();
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/makeClassStatic/IDEADEV3247_after.java b/java/java-tests/testData/refactoring/makeClassStatic/IDEADEV3247_after.java
new file mode 100644
index 0000000..dfee484
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeClassStatic/IDEADEV3247_after.java
@@ -0,0 +1,20 @@
+class Test8 {
+
+    void bar() {
+    }
+
+    static class B {
+
+        int c;
+        private Test8 anObject;
+
+        public B(Test8 anObject) {
+            this.anObject = anObject;
+        }
+
+        void foo() {
+            c = 10;
+            anObject.bar();
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/makeClassStatic/NewExpressionQualifier.java b/java/java-tests/testData/refactoring/makeClassStatic/NewExpressionQualifier.java
new file mode 100644
index 0000000..37bdf69
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeClassStatic/NewExpressionQualifier.java
@@ -0,0 +1,17 @@
+public class A {
+  private class <caret>B {
+      public B() {
+      }
+  }
+
+  static void m(A a) {
+    B b = new A().new B();
+    B b1 = a.new B();
+    B b2 = new B();
+    B b3 = getA().new B();
+  }
+
+  static A getA(){return null;}
+
+
+}
diff --git a/java/java-tests/testData/refactoring/makeClassStatic/NewExpressionQualifier_after.java b/java/java-tests/testData/refactoring/makeClassStatic/NewExpressionQualifier_after.java
new file mode 100644
index 0000000..9f56c56
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeClassStatic/NewExpressionQualifier_after.java
@@ -0,0 +1,17 @@
+public class A {
+  private static class B {
+      public B() {
+      }
+  }
+
+  static void m(A a) {
+    B b = new B();
+    B b1 = new B();
+    B b2 = new B();
+    B b3 = new B();
+  }
+
+  static A getA(){return null;}
+
+
+}
diff --git a/java/java-tests/testData/refactoring/makeClassStatic/NonDefaultConstructorAnonymousClass.java b/java/java-tests/testData/refactoring/makeClassStatic/NonDefaultConstructorAnonymousClass.java
new file mode 100644
index 0000000..e1efa62
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeClassStatic/NonDefaultConstructorAnonymousClass.java
@@ -0,0 +1,16 @@
+public class A {
+  class <caret>B {
+    B() {
+    }
+  }
+}
+
+class C {
+  void foo() {
+    new A().new B() {
+      public String toString() {
+        return super.toString();
+      }
+    }.toString();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeClassStatic/NonDefaultConstructorAnonymousClass_after.java b/java/java-tests/testData/refactoring/makeClassStatic/NonDefaultConstructorAnonymousClass_after.java
new file mode 100644
index 0000000..679e79e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeClassStatic/NonDefaultConstructorAnonymousClass_after.java
@@ -0,0 +1,16 @@
+public class A {
+  static class B {
+    B() {
+    }
+  }
+}
+
+class C {
+  void foo() {
+    new A.B() {
+      public String toString() {
+        return super.toString();
+      }
+    }.toString();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeClassStatic/QualifiedThis.java b/java/java-tests/testData/refactoring/makeClassStatic/QualifiedThis.java
new file mode 100644
index 0000000..3f0d009
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeClassStatic/QualifiedThis.java
@@ -0,0 +1,13 @@
+public class YoYo {
+    class <caret>YoYoYo {
+        void foo (){
+            YoYo yoYoy = YoYo.this;
+        }
+    }
+
+    class Other {
+        {
+            new YoYoYo();
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/makeClassStatic/QualifiedThis_after.java b/java/java-tests/testData/refactoring/makeClassStatic/QualifiedThis_after.java
new file mode 100644
index 0000000..8e596ab
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeClassStatic/QualifiedThis_after.java
@@ -0,0 +1,19 @@
+public class YoYo {
+    static class YoYoYo {
+        private YoYo anObject;
+
+        public YoYoYo(YoYo anObject) {
+            this.anObject = anObject;
+        }
+
+        void foo (){
+            YoYo yoYoy = anObject;
+        }
+    }
+
+    class Other {
+        {
+            new YoYoYo(YoYo.this);
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/makeClassStatic/RegReference.java b/java/java-tests/testData/refactoring/makeClassStatic/RegReference.java
new file mode 100644
index 0000000..5e28cff
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeClassStatic/RegReference.java
@@ -0,0 +1,7 @@
+public class A {
+  public void test(Inner i) {
+  }
+
+  private class <caret>Inner {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeClassStatic/RegReference_after.java b/java/java-tests/testData/refactoring/makeClassStatic/RegReference_after.java
new file mode 100644
index 0000000..c7754c4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeClassStatic/RegReference_after.java
@@ -0,0 +1,9 @@
+public class A {
+  public void test(Inner i) {
+  }
+
+  private static class <caret>Inner {
+      public Inner() {
+      }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeClassStatic/Simple1.java b/java/java-tests/testData/refactoring/makeClassStatic/Simple1.java
new file mode 100644
index 0000000..ff0af2f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeClassStatic/Simple1.java
@@ -0,0 +1,14 @@
+public class YoYo {
+    int y;
+    class <caret>YoYoYo {
+        void foo (){
+            YoYo yoYoy = YoYo.this;
+            int t = y;
+            int t1 = yoYoy.y;
+            new Other();
+        }
+    }
+
+    class Other {}
+}
+
diff --git a/java/java-tests/testData/refactoring/makeClassStatic/Simple1_after.java b/java/java-tests/testData/refactoring/makeClassStatic/Simple1_after.java
new file mode 100644
index 0000000..6eb3769
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeClassStatic/Simple1_after.java
@@ -0,0 +1,20 @@
+public class YoYo {
+    int y;
+    static class YoYoYo {
+        private YoYo anObject;
+
+        public YoYoYo(YoYo anObject) {
+            this.anObject = anObject;
+        }
+
+        void foo (){
+            YoYo yoYoy = anObject;
+            int t = anObject.y;
+            int t1 = yoYoy.y;
+            anObject.new Other();
+        }
+    }
+
+    class Other {}
+}
+
diff --git a/java/java-tests/testData/refactoring/makeClassStatic/SimpleFields.java b/java/java-tests/testData/refactoring/makeClassStatic/SimpleFields.java
new file mode 100644
index 0000000..44dfb7a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeClassStatic/SimpleFields.java
@@ -0,0 +1,11 @@
+public class YoYo {
+    int y;
+    class <caret>YoYoYo {
+        void foo (){
+            YoYo yoYoy = YoYo.this;
+            int t = y;
+            int t1 = yoYoy.y;
+        }
+    }
+}
+
diff --git a/java/java-tests/testData/refactoring/makeClassStatic/SimpleFields_after.java b/java/java-tests/testData/refactoring/makeClassStatic/SimpleFields_after.java
new file mode 100644
index 0000000..16eb2c1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeClassStatic/SimpleFields_after.java
@@ -0,0 +1,19 @@
+public class YoYo {
+    int y;
+    static class YoYoYo {
+        private YoYo anObject;
+        private int y;
+
+        public YoYoYo(YoYo anObject, int y) {
+            this.anObject = anObject;
+            this.y = y;
+        }
+
+        void foo (){
+            YoYo yoYoy = anObject;
+            int t = y;
+            int t1 = yoYoy.y;
+        }
+    }
+}
+
diff --git a/java/java-tests/testData/refactoring/makeClassStatic/ThisSuperExpressions.java b/java/java-tests/testData/refactoring/makeClassStatic/ThisSuperExpressions.java
new file mode 100644
index 0000000..8c57c1d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeClassStatic/ThisSuperExpressions.java
@@ -0,0 +1,20 @@
+public class m {
+    void aa(){}
+}
+
+class Outer extends m{
+    class I<caret>nner extends Super {
+        void bar(){
+
+        }
+        void foo() {
+            super.foo();
+            this.bar();
+            Outer.super.aa();
+            Outer.this.aa();
+        }
+    }
+}
+class Super {
+    void foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeClassStatic/ThisSuperExpressions_after.java b/java/java-tests/testData/refactoring/makeClassStatic/ThisSuperExpressions_after.java
new file mode 100644
index 0000000..5604630
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeClassStatic/ThisSuperExpressions_after.java
@@ -0,0 +1,26 @@
+public class m {
+    void aa(){}
+}
+
+class Outer extends m{
+    static class Inner extends Super {
+        private Outer anObject;
+
+        public Inner(Outer anObject) {
+            this.anObject = anObject;
+        }
+
+        void bar(){
+
+        }
+        void foo() {
+            super.foo();
+            this.bar();
+            anObject.aa();
+            anObject.aa();
+        }
+    }
+}
+class Super {
+    void foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/after1.java b/java/java-tests/testData/refactoring/makeMethodStatic/after1.java
new file mode 100644
index 0000000..4c16989
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/after1.java
@@ -0,0 +1,4 @@
+public class Foo {
+    public static void <caret>method(Foo anObject) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/after10-np.java b/java/java-tests/testData/refactoring/makeMethodStatic/after10-np.java
new file mode 100644
index 0000000..1632a38
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/after10-np.java
@@ -0,0 +1,13 @@
+public class Foo {
+    public int myData;
+    static int method(int i) {
+        return myData + i;
+    }
+}
+
+class Bar {
+    public Foo myFoo;    
+    int a(int b) {
+        return Foo.method(b * 2);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/after10.java b/java/java-tests/testData/refactoring/makeMethodStatic/after10.java
new file mode 100644
index 0000000..c1d51cc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/after10.java
@@ -0,0 +1,13 @@
+public class Foo {
+    public int myData;
+    static int <caret>method(Foo anObject, int i) {
+        return anObject.myData + i;
+    }
+}
+
+class Bar {
+    public Foo myFoo;    
+    int a(int b) {
+        return Foo.method(myFoo, b * 2);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/after11.java b/java/java-tests/testData/refactoring/makeMethodStatic/after11.java
new file mode 100644
index 0000000..bba1779
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/after11.java
@@ -0,0 +1,12 @@
+public class Foo {
+    public int myData;
+    static int <caret>method(Foo anObject, int i) {
+        return anObject.myData + i;
+    }
+}
+
+public class Bar extends Foo {
+    int method(int b) {
+        return super.method(this, b*2);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/after12.java b/java/java-tests/testData/refactoring/makeMethodStatic/after12.java
new file mode 100644
index 0000000..18e7a23
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/after12.java
@@ -0,0 +1,6 @@
+class Foo extends java.util.Vector {
+    static int <caret>method(Foo anObject) {
+        return anObject.toString();
+    }
+}
+
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/after13.java b/java/java-tests/testData/refactoring/makeMethodStatic/after13.java
new file mode 100644
index 0000000..dd1c65b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/after13.java
@@ -0,0 +1,5 @@
+class Foo {
+   static Foo bar(Foo anObject) {
+       return anObject;
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/after14.java b/java/java-tests/testData/refactoring/makeMethodStatic/after14.java
new file mode 100644
index 0000000..439ba36
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/after14.java
@@ -0,0 +1,11 @@
+public class Test {
+   static Test <caret>method(final Test anObject) {
+     final Test[] result = new int[1];
+     new Runnable() {
+         public void run() {
+            result[0] = anObject;
+         }         
+     }.run();
+     return result[0];
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/after15.java b/java/java-tests/testData/refactoring/makeMethodStatic/after15.java
new file mode 100644
index 0000000..098312d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/after15.java
@@ -0,0 +1,9 @@
+public class Foo {
+  Foo getAnotherFoo() {}
+  
+  static void tryMakeMeStatic(Foo anObject, boolean b) {
+    if (b) {
+        Foo.tryMakeMeStatic(anObject.getAnotherFoo(), !b);
+    }
+  }
+}
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/after16.java b/java/java-tests/testData/refactoring/makeMethodStatic/after16.java
new file mode 100644
index 0000000..a80e3eb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/after16.java
@@ -0,0 +1,11 @@
+public class Test {
+    void anotherMethod(String s);
+    String field;
+    /**
+     * @param anObject
+     * @param field
+     */
+    static void method(Test anObject, String field) {
+        anObject.anotherMethod(field);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/after17.java b/java/java-tests/testData/refactoring/makeMethodStatic/after17.java
new file mode 100644
index 0000000..ff42cc3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/after17.java
@@ -0,0 +1,10 @@
+public class Test {
+    String field;
+
+    /**
+     * @param field
+     */
+    static String method(String field) {
+        return field;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/after18.java b/java/java-tests/testData/refactoring/makeMethodStatic/after18.java
new file mode 100644
index 0000000..c3cefbb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/after18.java
@@ -0,0 +1,5 @@
+class C<T> {
+    static <T> void method(C<T> anObject)  {
+        System.out.println(anObject);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/after19.java b/java/java-tests/testData/refactoring/makeMethodStatic/after19.java
new file mode 100644
index 0000000..73ea169
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/after19.java
@@ -0,0 +1,7 @@
+class C {
+    int myField;
+
+    static void method(C anObject, int i) {
+        anObject.myField = i;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/after2.java b/java/java-tests/testData/refactoring/makeMethodStatic/after2.java
new file mode 100644
index 0000000..42f2479
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/after2.java
@@ -0,0 +1,6 @@
+public class Foo {
+    static int i;
+    public static int <caret>method(Foo anObject) {
+	return i;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/after20.java b/java/java-tests/testData/refactoring/makeMethodStatic/after20.java
new file mode 100644
index 0000000..e650a46
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/after20.java
@@ -0,0 +1,20 @@
+import javax.swing.*;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+
+final class Bug
+   extends JFrame {
+    public Bug() {
+        foo(this);
+    }
+
+    public static void foo(Bug anObject) {
+        anObject.addWindowListener(anObject.new MyWindowListener());
+    }
+
+    private class MyWindowListener
+       extends WindowAdapter {
+        public void windowActivated(WindowEvent e) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/after21.java b/java/java-tests/testData/refactoring/makeMethodStatic/after21.java
new file mode 100644
index 0000000..f425180
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/after21.java
@@ -0,0 +1,5 @@
+class Bar1 {
+    public static void Foo() {
+        Foo();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/after22.java b/java/java-tests/testData/refactoring/makeMethodStatic/after22.java
new file mode 100644
index 0000000..4f2ce43
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/after22.java
@@ -0,0 +1,15 @@
+class Test {
+
+    public static void foo(Test anObject) {
+        anObject.bar();
+    }
+
+    void bar() {
+    }
+
+    class A {
+        void blah() {
+            foo(Test.this);
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/after23.java b/java/java-tests/testData/refactoring/makeMethodStatic/after23.java
new file mode 100644
index 0000000..8b276eb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/after23.java
@@ -0,0 +1,6 @@
+class MethodOwner6<T> {
+    public static <T> T foo(T t)
+    {
+        return t;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/after3.java b/java/java-tests/testData/refactoring/makeMethodStatic/after3.java
new file mode 100644
index 0000000..6497b0d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/after3.java
@@ -0,0 +1,6 @@
+public class Foo {
+    int i;
+    public static int method(Foo anObject) {
+        return anObject.i;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/after4.java b/java/java-tests/testData/refactoring/makeMethodStatic/after4.java
new file mode 100644
index 0000000..658455a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/after4.java
@@ -0,0 +1,6 @@
+public class Foo {
+    public int i;
+    public static int method(Foo anObject) {
+        return anObject.i;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/after5.java b/java/java-tests/testData/refactoring/makeMethodStatic/after5.java
new file mode 100644
index 0000000..b24fd43
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/after5.java
@@ -0,0 +1,6 @@
+public class Foo {
+    public int i;
+    public static int <caret>method(Foo anObject) {
+        return anObject.i;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/after6.java b/java/java-tests/testData/refactoring/makeMethodStatic/after6.java
new file mode 100644
index 0000000..1d6dffa
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/after6.java
@@ -0,0 +1,6 @@
+public class Foo extends Bar {
+    public int i;
+    public static int <caret>method(Foo anObject) {
+        return anObject.i;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/after7.java b/java/java-tests/testData/refactoring/makeMethodStatic/after7.java
new file mode 100644
index 0000000..8d37037
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/after7.java
@@ -0,0 +1,10 @@
+public class Foo {
+            
+    public int f(int i) {
+        return 0;
+    }
+
+    public static int <caret>method(Foo anObject, int i) {
+        return anObject.f(i);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/after8.java b/java/java-tests/testData/refactoring/makeMethodStatic/after8.java
new file mode 100644
index 0000000..8dcfc43
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/after8.java
@@ -0,0 +1,12 @@
+public class Foo {
+    public int myData;
+    static int method(final Foo anObject, int i) {
+        new Runnable () {
+            void f() {};
+            public void run() {
+                this.f(anObject.myData);    
+            }
+        }
+        return anObject.myData + anObject.myData;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/after9.java b/java/java-tests/testData/refactoring/makeMethodStatic/after9.java
new file mode 100644
index 0000000..e2fd294
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/after9.java
@@ -0,0 +1,12 @@
+public class Foo {
+    public int myData;
+    static int <caret>method(Foo anObject, int i) {
+        return anObject.myData + i;
+    }
+}
+
+public class Bar extends Foo {
+    int a(int b) {
+        return method(this, b*2);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/afterMethodReference.java b/java/java-tests/testData/refactoring/makeMethodStatic/afterMethodReference.java
new file mode 100644
index 0000000..0331859
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/afterMethodReference.java
@@ -0,0 +1,9 @@
+class Test4 {
+    void test() {
+        Foo2<Test4> f = Test4::yyy;
+    }
+    static void yyy(Test4 anObject) {}
+}
+interface Foo2<T> {
+    void bar(T j);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/afterPreserveParametersAlignment.java b/java/java-tests/testData/refactoring/makeMethodStatic/afterPreserveParametersAlignment.java
new file mode 100644
index 0000000..8d7272d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/afterPreserveParametersAlignment.java
@@ -0,0 +1,5 @@
+public class Test {
+    public static void test123(int i,
+                               int j) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/afterPreserveTypeParams.java b/java/java-tests/testData/refactoring/makeMethodStatic/afterPreserveTypeParams.java
new file mode 100644
index 0000000..65f279a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/afterPreserveTypeParams.java
@@ -0,0 +1,5 @@
+class C {
+  private static <T> List<T> getTopLevelItems() {
+    return null;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/before1.java b/java/java-tests/testData/refactoring/makeMethodStatic/before1.java
new file mode 100644
index 0000000..8d95715
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/before1.java
@@ -0,0 +1,4 @@
+public class Foo {
+    public void <caret>method() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/before10.java b/java/java-tests/testData/refactoring/makeMethodStatic/before10.java
new file mode 100644
index 0000000..3ebf230
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/before10.java
@@ -0,0 +1,13 @@
+public class Foo {
+    public int myData;
+    int <caret>method(int i) {
+        return myData + i;
+    }
+}
+
+class Bar {
+    public Foo myFoo;    
+    int a(int b) {
+        return myFoo.method(b * 2);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/before11.java b/java/java-tests/testData/refactoring/makeMethodStatic/before11.java
new file mode 100644
index 0000000..a0d077d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/before11.java
@@ -0,0 +1,12 @@
+public class Foo {
+    public int myData;
+    int <caret>method(int i) {
+        return myData + i;
+    }
+}
+
+public class Bar extends Foo {
+    int method(int b) {
+        return super.method(b*2);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/before12.java b/java/java-tests/testData/refactoring/makeMethodStatic/before12.java
new file mode 100644
index 0000000..daaa57d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/before12.java
@@ -0,0 +1,6 @@
+class Foo extends java.util.Vector {
+    int <caret>method() {
+        return super.toString();
+    }
+}
+
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/before13.java b/java/java-tests/testData/refactoring/makeMethodStatic/before13.java
new file mode 100644
index 0000000..9d253c9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/before13.java
@@ -0,0 +1,5 @@
+class Foo {
+   Foo <caret>bar() {
+       return this;
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/before14.java b/java/java-tests/testData/refactoring/makeMethodStatic/before14.java
new file mode 100644
index 0000000..47a6733
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/before14.java
@@ -0,0 +1,11 @@
+public class Test {
+   Test <caret>method() {
+     final Test[] result = new int[1];
+     new Runnable() {
+         public void run() {
+            result[0] = Test.this;
+         }         
+     }.run();
+     return result[0];
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/before15.java b/java/java-tests/testData/refactoring/makeMethodStatic/before15.java
new file mode 100644
index 0000000..4f35aeb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/before15.java
@@ -0,0 +1,9 @@
+public class Foo {
+  Foo getAnotherFoo() {}
+  
+  void <caret>tryMakeMeStatic(boolean b) {
+    if (b) {
+        getAnotherFoo().tryMakeMeStatic(!b);
+    }
+  }
+}
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/before16.java b/java/java-tests/testData/refactoring/makeMethodStatic/before16.java
new file mode 100644
index 0000000..569694a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/before16.java
@@ -0,0 +1,9 @@
+public class Test {
+    void anotherMethod(String s);
+    String field;
+    /**
+     */
+    void <caret>method() {
+        anotherMethod(field);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/before17.java b/java/java-tests/testData/refactoring/makeMethodStatic/before17.java
new file mode 100644
index 0000000..ca5e0aa
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/before17.java
@@ -0,0 +1,9 @@
+public class Test {
+    String field;
+
+    /**
+     */
+    String <caret>method() {
+        return field;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/before18.java b/java/java-tests/testData/refactoring/makeMethodStatic/before18.java
new file mode 100644
index 0000000..bde40fd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/before18.java
@@ -0,0 +1,5 @@
+class C<T> {
+    void <caret>method()  {
+        System.out.println(this);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/before19.java b/java/java-tests/testData/refactoring/makeMethodStatic/before19.java
new file mode 100644
index 0000000..e110e1a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/before19.java
@@ -0,0 +1,7 @@
+class C {
+    int myField;
+
+    void <caret>method(int i) {
+        myField = i;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/before2.java b/java/java-tests/testData/refactoring/makeMethodStatic/before2.java
new file mode 100644
index 0000000..2432f2d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/before2.java
@@ -0,0 +1,6 @@
+public class Foo {
+    static int i;
+    public int <caret>method() {
+	return i;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/before20.java b/java/java-tests/testData/refactoring/makeMethodStatic/before20.java
new file mode 100644
index 0000000..7e31c82
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/before20.java
@@ -0,0 +1,20 @@
+import javax.swing.*;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+
+final class Bug
+   extends JFrame {
+    public Bug() {
+        foo();
+    }
+
+    public void <caret>foo() {
+        addWindowListener(new MyWindowListener());
+    }
+
+    private class MyWindowListener
+       extends WindowAdapter {
+        public void windowActivated(WindowEvent e) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/before21.java b/java/java-tests/testData/refactoring/makeMethodStatic/before21.java
new file mode 100644
index 0000000..c27f763
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/before21.java
@@ -0,0 +1,5 @@
+class Bar1 {
+    public void <caret>Foo() {
+        this.Foo();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/before22.java b/java/java-tests/testData/refactoring/makeMethodStatic/before22.java
new file mode 100644
index 0000000..884beca
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/before22.java
@@ -0,0 +1,15 @@
+class Test {
+
+    public void <caret>foo() {
+        bar();
+    }
+
+    void bar() {
+    }
+
+    class A {
+        void blah() {
+            foo();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/before23.java b/java/java-tests/testData/refactoring/makeMethodStatic/before23.java
new file mode 100644
index 0000000..c06bf3a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/before23.java
@@ -0,0 +1,6 @@
+class MethodOwner6<T> {
+    public T <caret>foo(T t)
+    {
+        return t;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/before3.java b/java/java-tests/testData/refactoring/makeMethodStatic/before3.java
new file mode 100644
index 0000000..421a8e5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/before3.java
@@ -0,0 +1,6 @@
+public class Foo {
+    int i;
+    public int <caret>method() {
+        return i;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/before4.java b/java/java-tests/testData/refactoring/makeMethodStatic/before4.java
new file mode 100644
index 0000000..68153f1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/before4.java
@@ -0,0 +1,6 @@
+public class Foo {
+    public int i;
+    public int <caret>method() {
+        return this.i;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/before5.java b/java/java-tests/testData/refactoring/makeMethodStatic/before5.java
new file mode 100644
index 0000000..1a7ed45
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/before5.java
@@ -0,0 +1,6 @@
+public class Foo {
+    public int i;
+    public int <caret>method() {
+        return super.i;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/before6.java b/java/java-tests/testData/refactoring/makeMethodStatic/before6.java
new file mode 100644
index 0000000..240fa31
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/before6.java
@@ -0,0 +1,6 @@
+public class Foo extends Bar {
+    public int i;
+    public int <caret>method() {
+        return super.i;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/before7.java b/java/java-tests/testData/refactoring/makeMethodStatic/before7.java
new file mode 100644
index 0000000..333c0cac
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/before7.java
@@ -0,0 +1,10 @@
+public class Foo {
+            
+    public int f(int i) {
+        return 0;
+    }
+
+    public int <caret>method(int i) {
+        return f(i);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/before8.java b/java/java-tests/testData/refactoring/makeMethodStatic/before8.java
new file mode 100644
index 0000000..aa9bf47
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/before8.java
@@ -0,0 +1,12 @@
+public class Foo {
+    public int myData;
+    int <caret>method(int i) {
+        new Runnable () {
+            void f() {};
+            public void run() {
+                this.f(myData);    
+            }
+        }
+        return this.myData + myData;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/before9.java b/java/java-tests/testData/refactoring/makeMethodStatic/before9.java
new file mode 100644
index 0000000..6d4a1e5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/before9.java
@@ -0,0 +1,12 @@
+public class Foo {
+    public int myData;
+    int <caret>method(int i) {
+        return myData + i;
+    }
+}
+
+public class Bar extends Foo {
+    int a(int b) {
+        return method(b*2);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/beforeInnerStaticClassUsed.java b/java/java-tests/testData/refactoring/makeMethodStatic/beforeInnerStaticClassUsed.java
new file mode 100644
index 0000000..836ec36
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/beforeInnerStaticClassUsed.java
@@ -0,0 +1,7 @@
+class C {
+  private void f<caret>oo() {
+    Bar bar = new Bar();
+  }
+  
+  static class Bar {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/beforeMethodReference.java b/java/java-tests/testData/refactoring/makeMethodStatic/beforeMethodReference.java
new file mode 100644
index 0000000..15f3172
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/beforeMethodReference.java
@@ -0,0 +1,9 @@
+class Test4 {
+    void test() {
+        Foo2<Test4> f = Test4::yyy;
+    }
+    void yy<caret>y() {}
+}
+interface Foo2<T> {
+    void bar(T j);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/beforePreserveParametersAlignment.java b/java/java-tests/testData/refactoring/makeMethodStatic/beforePreserveParametersAlignment.java
new file mode 100644
index 0000000..6a4e4fb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/beforePreserveParametersAlignment.java
@@ -0,0 +1,5 @@
+public class Test {
+    public void <caret>test123(int i,
+                        int j) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/makeMethodStatic/beforePreserveTypeParams.java b/java/java-tests/testData/refactoring/makeMethodStatic/beforePreserveTypeParams.java
new file mode 100644
index 0000000..a84c76e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/makeMethodStatic/beforePreserveTypeParams.java
@@ -0,0 +1,5 @@
+class C {
+  private <T> List<T> ge<caret>tTopLevelItems() {
+    return null;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/AddStaticTest.java b/java/java-tests/testData/refactoring/methodDuplicates/AddStaticTest.java
new file mode 100644
index 0000000..3c92940
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/AddStaticTest.java
@@ -0,0 +1,9 @@
+class AddStaticTest {
+  static main(){
+   System.out.println("");
+  }
+
+  void <caret>foo(){
+   System.out.println("");
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/AddStaticTest.java.after b/java/java-tests/testData/refactoring/methodDuplicates/AddStaticTest.java.after
new file mode 100644
index 0000000..dd1d6d0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/AddStaticTest.java.after
@@ -0,0 +1,9 @@
+class AddStaticTest {
+  static main(){
+      foo();
+  }
+
+  static void foo(){
+   System.out.println("");
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/AnonymousTest.java b/java/java-tests/testData/refactoring/methodDuplicates/AnonymousTest.java
new file mode 100644
index 0000000..05544bd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/AnonymousTest.java
@@ -0,0 +1,21 @@
+class AnonymousTest {
+  interface Thing {
+    boolean thing();
+  }
+
+  void dupeHolder() {
+    Thing thing = new Thing() {
+      public boolean thing() {
+        return false;
+      }
+    };
+  }
+
+  Thing <caret>duplicator(final boolean thingReturn) {
+    return new Thing() {
+      public boolean thing() {
+        return thingReturn;
+      }
+    };
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/AnonymousTest.java.after b/java/java-tests/testData/refactoring/methodDuplicates/AnonymousTest.java.after
new file mode 100644
index 0000000..7010fa4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/AnonymousTest.java.after
@@ -0,0 +1,17 @@
+class AnonymousTest {
+  interface Thing {
+    boolean thing();
+  }
+
+  void dupeHolder() {
+    Thing thing = duplicator(false);
+  }
+
+  Thing duplicator(final boolean thingReturn) {
+    return new Thing() {
+      public boolean thing() {
+        return thingReturn;
+      }
+    };
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/AnonymousTest1.java b/java/java-tests/testData/refactoring/methodDuplicates/AnonymousTest1.java
new file mode 100644
index 0000000..75d6299
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/AnonymousTest1.java
@@ -0,0 +1,21 @@
+class AnonymousTest1 {
+  interface Thing {
+    boolean thing();
+  }
+
+  void dupeHolder() {
+    if (new Thing() {
+      public boolean thing() {
+        return false;
+      }
+    }.thing());
+  }
+
+  void <caret>duplicator(final boolean thingReturn) {
+    if (new Thing() {
+      public boolean thing() {
+        return thingReturn;
+      }
+    }.thing());
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/AnonymousTest1.java.after b/java/java-tests/testData/refactoring/methodDuplicates/AnonymousTest1.java.after
new file mode 100644
index 0000000..4a9b943
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/AnonymousTest1.java.after
@@ -0,0 +1,17 @@
+class AnonymousTest1 {
+  interface Thing {
+    boolean thing();
+  }
+
+  void dupeHolder() {
+      duplicator(false);
+  }
+
+  void duplicator(final boolean thingReturn) {
+    if (new Thing() {
+      public boolean thing() {
+        return thingReturn;
+      }
+    }.thing());
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/AnonymousTest2.java b/java/java-tests/testData/refactoring/methodDuplicates/AnonymousTest2.java
new file mode 100644
index 0000000..768c163
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/AnonymousTest2.java
@@ -0,0 +1,20 @@
+class A {
+
+    class I {
+    }
+
+    class I1 {
+    }
+
+    public void foo() {
+        Object innerOne = new I1() {
+        };
+        innerOne.toString();
+    }
+
+    public void <caret>bar() {
+        Object innerTwo = new I() {
+        };
+        innerTwo.toString();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/ChangingReturnType.java b/java/java-tests/testData/refactoring/methodDuplicates/ChangingReturnType.java
new file mode 100644
index 0000000..0bbcb8c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/ChangingReturnType.java
@@ -0,0 +1,19 @@
+public class A {
+    private B myField;
+
+    public void method() {
+        String a = myField.bbb.xxx();
+    }
+
+    public B get<caret>Field() {
+        return myField;
+    }
+
+    private static class B {
+        private C bbb;
+    }
+
+    private static class C {
+        String xxx() {return null;}
+    }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/ChangingReturnType.java.after b/java/java-tests/testData/refactoring/methodDuplicates/ChangingReturnType.java.after
new file mode 100644
index 0000000..1ffa441
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/ChangingReturnType.java.after
@@ -0,0 +1,19 @@
+public class A {
+    private B myField;
+
+    public void method() {
+        String a = getField().bbb.xxx();
+    }
+
+    public B getField() {
+        return myField;
+    }
+
+    private static class B {
+        private C bbb;
+    }
+
+    private static class C {
+        String xxx() {return null;}
+    }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/DeclarationUsage.java b/java/java-tests/testData/refactoring/methodDuplicates/DeclarationUsage.java
new file mode 100644
index 0000000..e72a287
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/DeclarationUsage.java
@@ -0,0 +1,11 @@
+public class DeclarationUsage {
+	private int myField;
+	public void met<caret>hod(int p) {
+		int v = 0;
+		myField += p;
+	}
+	public void context() {
+		int v = 0;
+		myField += v;
+	}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/GenmethExtends.java b/java/java-tests/testData/refactoring/methodDuplicates/GenmethExtends.java
new file mode 100644
index 0000000..c2aa35c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/GenmethExtends.java
@@ -0,0 +1,20 @@
+import java.util.AbstractList;
+import java.util.ArrayList;
+import java.util.List;
+
+public class Genmeth {
+	public void context() {
+		Integer v1 = 0;
+		int v1a = v1.hashCode();
+		AbstractList<String> v2 = new ArrayList<String>(0);
+		int v2a = v2.hashCode();
+		AbstractList<Double> v3 = new ArrayList<Double>(0);
+		int v3a = v3.hashCode();
+		AbstractList<Integer> v4 = new ArrayList<Integer>(0);
+		int v4a = v4.hashCode();
+	}
+
+	public <T extends List> int <caret>method(T t) {
+		return t.hashCode();
+	}
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/GenmethExtends.java.after b/java/java-tests/testData/refactoring/methodDuplicates/GenmethExtends.java.after
new file mode 100644
index 0000000..b5e664d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/GenmethExtends.java.after
@@ -0,0 +1,20 @@
+import java.util.AbstractList;
+import java.util.ArrayList;
+import java.util.List;
+
+public class Genmeth {
+	public void context() {
+		Integer v1 = 0;
+		int v1a = v1.hashCode();
+		AbstractList<String> v2 = new ArrayList<String>(0);
+		int v2a = method(v2);
+		AbstractList<Double> v3 = new ArrayList<Double>(0);
+		int v3a = method(v3);
+		AbstractList<Integer> v4 = new ArrayList<Integer>(0);
+		int v4a = method(v4);
+	}
+
+	public <T extends List> int method(T t) {
+		return t.hashCode();
+	}
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/GenmethExtendsGenericExact.java b/java/java-tests/testData/refactoring/methodDuplicates/GenmethExtendsGenericExact.java
new file mode 100644
index 0000000..ac24743
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/GenmethExtendsGenericExact.java
@@ -0,0 +1,20 @@
+import java.util.AbstractList;
+import java.util.ArrayList;
+import java.util.List;
+
+public class Genmeth {
+	public void context() {
+		Integer v1 = 0;
+		int v1a = v1.hashCode();
+		AbstractList<String> v2 = new ArrayList<String>(0);
+		int v2a = v2.hashCode();
+		AbstractList<Double> v3 = new ArrayList<Double>(0);
+		int v3a = v3.hashCode();
+		AbstractList<Integer> v4 = new ArrayList<Integer>(0);
+		int v4a = v4.hashCode();
+	}
+
+	public <T extends List<Integer>> int <caret>method(T t) {
+		return t.hashCode();
+	}
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/GenmethExtendsGenericExact.java.after b/java/java-tests/testData/refactoring/methodDuplicates/GenmethExtendsGenericExact.java.after
new file mode 100644
index 0000000..806aa6a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/GenmethExtendsGenericExact.java.after
@@ -0,0 +1,20 @@
+import java.util.AbstractList;
+import java.util.ArrayList;
+import java.util.List;
+
+public class Genmeth {
+	public void context() {
+		Integer v1 = 0;
+		int v1a = v1.hashCode();
+		AbstractList<String> v2 = new ArrayList<String>(0);
+		int v2a = v2.hashCode();
+		AbstractList<Double> v3 = new ArrayList<Double>(0);
+		int v3a = v3.hashCode();
+		AbstractList<Integer> v4 = new ArrayList<Integer>(0);
+		int v4a = method(v4);
+	}
+
+	public <T extends List<Integer>> int method(T t) {
+		return t.hashCode();
+	}
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/GenmethExtendsGenericWildcard.java b/java/java-tests/testData/refactoring/methodDuplicates/GenmethExtendsGenericWildcard.java
new file mode 100644
index 0000000..98269b1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/GenmethExtendsGenericWildcard.java
@@ -0,0 +1,20 @@
+import java.util.AbstractList;
+import java.util.ArrayList;
+import java.util.List;
+
+public class Genmeth {
+	public void context() {
+		Integer v1 = 0;
+		int v1a = v1.hashCode();
+		AbstractList<String> v2 = new ArrayList<String>(0);
+		int v2a = v2.hashCode();
+		AbstractList<Double> v3 = new ArrayList<Double>(0);
+		int v3a = v3.hashCode();
+		AbstractList<Integer> v4 = new ArrayList<Integer>(0);
+		int v4a = v4.hashCode();
+	}
+
+	public <T extends List<? extends Number>> int <caret>method(T t) {
+		return t.hashCode();
+	}
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/GenmethExtendsGenericWildcard.java.after b/java/java-tests/testData/refactoring/methodDuplicates/GenmethExtendsGenericWildcard.java.after
new file mode 100644
index 0000000..b06b862
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/GenmethExtendsGenericWildcard.java.after
@@ -0,0 +1,20 @@
+import java.util.AbstractList;
+import java.util.ArrayList;
+import java.util.List;
+
+public class Genmeth {
+	public void context() {
+		Integer v1 = 0;
+		int v1a = v1.hashCode();
+		AbstractList<String> v2 = new ArrayList<String>(0);
+		int v2a = v2.hashCode();
+		AbstractList<Double> v3 = new ArrayList<Double>(0);
+		int v3a = method(v3);
+		AbstractList<Integer> v4 = new ArrayList<Integer>(0);
+		int v4a = method(v4);
+	}
+
+	public <T extends List<? extends Number>> int method(T t) {
+		return t.hashCode();
+	}
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/GenmethGeneral.java b/java/java-tests/testData/refactoring/methodDuplicates/GenmethGeneral.java
new file mode 100644
index 0000000..e6ff4e1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/GenmethGeneral.java
@@ -0,0 +1,20 @@
+import java.util.AbstractList;
+import java.util.ArrayList;
+import java.util.List;
+
+public class Genmeth {
+	public void context() {
+		Integer v1 = 0;
+		int v1a = v1.hashCode();
+		AbstractList<String> v2 = new ArrayList<String>(0);
+		int v2a = v2.hashCode();
+		AbstractList<Double> v3 = new ArrayList<Double>(0);
+		int v3a = v3.hashCode();
+		AbstractList<Integer> v4 = new ArrayList<Integer>(0);
+		int v4a = v4.hashCode();
+	}
+
+	public <T> int <caret>method(T t) {
+		return t.hashCode();
+	}
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/GenmethGeneral.java.after b/java/java-tests/testData/refactoring/methodDuplicates/GenmethGeneral.java.after
new file mode 100644
index 0000000..1a6f8c1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/GenmethGeneral.java.after
@@ -0,0 +1,20 @@
+import java.util.AbstractList;
+import java.util.ArrayList;
+import java.util.List;
+
+public class Genmeth {
+	public void context() {
+		Integer v1 = 0;
+		int v1a = method(v1);
+		AbstractList<String> v2 = new ArrayList<String>(0);
+		int v2a = method(v2);
+		AbstractList<Double> v3 = new ArrayList<Double>(0);
+		int v3a = method(v3);
+		AbstractList<Integer> v4 = new ArrayList<Integer>(0);
+		int v4a = method(v4);
+	}
+
+	public <T> int method(T t) {
+		return t.hashCode();
+	}
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/GenmethSeveral.java b/java/java-tests/testData/refactoring/methodDuplicates/GenmethSeveral.java
new file mode 100644
index 0000000..0505d33
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/GenmethSeveral.java
@@ -0,0 +1,15 @@
+import java.util.AbstractList;
+import java.util.ArrayList;
+import java.util.List;
+
+public class Genmeth {
+	public void context() {
+		Integer v1 = 0;
+		AbstractList<String> v2 = new ArrayList<String>(0);
+		int res = v1.hashCode() + v2.size();
+	}
+
+	public <T, U extends List> int <caret>method(T t, U u) {
+		return t.hashCode() + u.size();
+	}
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/GenmethSeveral.java.after b/java/java-tests/testData/refactoring/methodDuplicates/GenmethSeveral.java.after
new file mode 100644
index 0000000..fb915a0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/GenmethSeveral.java.after
@@ -0,0 +1,15 @@
+import java.util.AbstractList;
+import java.util.ArrayList;
+import java.util.List;
+
+public class Genmeth {
+	public void context() {
+		Integer v1 = 0;
+		AbstractList<String> v2 = new ArrayList<String>(0);
+		int res = method(v1, v2);
+	}
+
+	public <T, U extends List> int <caret>method(T t, U u) {
+		return t.hashCode() + u.size();
+	}
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/IdentityComment.java b/java/java-tests/testData/refactoring/methodDuplicates/IdentityComment.java
new file mode 100644
index 0000000..a03a912
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/IdentityComment.java
@@ -0,0 +1,17 @@
+class IdentityComplete {
+  private int myField;
+
+  public void <caret>method(boolean bp) {
+    // method begins
+    String /*egg*/ var = /*egg*/"var value"; // inside method
+    myField += bp ?/*egg*/ var.length() : /*egg*/ this.hashCode();  /* inside method */
+    /* method ends */
+  }
+
+  public void context(boolean bp) {
+    /* before fragment */
+    String var/*egg*/ = "var value"/*egg*/; // inside context
+    myField += /*egg*/ bp ? var.length() : this.hashCode(/*egg*/); /* inside context */
+    // after fragment
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/IdentityComment.java.after b/java/java-tests/testData/refactoring/methodDuplicates/IdentityComment.java.after
new file mode 100644
index 0000000..18049b8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/IdentityComment.java.after
@@ -0,0 +1,16 @@
+class IdentityComplete {
+  private int myField;
+
+  public void method(boolean bp) {
+    // method begins
+    String /*egg*/ var = /*egg*/"var value"; // inside method
+    myField += bp ?/*egg*/ var.length() : /*egg*/ this.hashCode();  /* inside method */
+    /* method ends */
+  }
+
+  public void context(boolean bp) {
+    /* before fragment */
+      method(bp);
+    // after fragment
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/IdentityComplete.java b/java/java-tests/testData/refactoring/methodDuplicates/IdentityComplete.java
new file mode 100644
index 0000000..94768d6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/IdentityComplete.java
@@ -0,0 +1,13 @@
+class IdentityComplete {
+  private int myField;
+
+  public void <caret>method(boolean bp) {
+    String var = "var value";
+    myField += bp ? var.length() : this.hashCode();
+  }
+
+  public void context(boolean bp) {
+    String var = "var value";
+    myField += bp ? var.length() : this.hashCode();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/IdentityComplete.java.after b/java/java-tests/testData/refactoring/methodDuplicates/IdentityComplete.java.after
new file mode 100644
index 0000000..6947f89
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/IdentityComplete.java.after
@@ -0,0 +1,12 @@
+class IdentityComplete {
+  private int myField;
+
+  public void method(boolean bp) {
+    String var = "var value";
+    myField += bp ? var.length() : this.hashCode();
+  }
+
+  public void context(boolean bp) {
+      method(bp);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/IdentityName.java b/java/java-tests/testData/refactoring/methodDuplicates/IdentityName.java
new file mode 100644
index 0000000..844a55f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/IdentityName.java
@@ -0,0 +1,23 @@
+import javax.swing.JComponent;
+
+class IdentityComplete {
+  private int myField;
+
+  public void <caret>method(boolean methodPar) {
+    String methodVar = "var value";
+    myField += methodPar ? methodVar.length() : this.hashCode();
+
+    JComponent methodAnonymous = new JComponent() {
+      private int myMethodAnonymousInt;
+    };
+  }
+
+  public void context(boolean contextPar) {
+    String contextVar = "var value";
+    myField += contextPar ? contextVar.length() : this.hashCode();
+
+    JComponent contextAnonymous = new JComponent() {
+      private int myContextAnonymousInt;
+    };
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/IdentityName.java.after b/java/java-tests/testData/refactoring/methodDuplicates/IdentityName.java.after
new file mode 100644
index 0000000..505c0f0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/IdentityName.java.after
@@ -0,0 +1,18 @@
+import javax.swing.JComponent;
+
+class IdentityComplete {
+  private int myField;
+
+  public void method(boolean methodPar) {
+    String methodVar = "var value";
+    myField += methodPar ? methodVar.length() : this.hashCode();
+
+    JComponent methodAnonymous = new JComponent() {
+      private int myMethodAnonymousInt;
+    };
+  }
+
+  public void context(boolean contextPar) {
+      method(contextPar);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/IdentityNameFailures.java b/java/java-tests/testData/refactoring/methodDuplicates/IdentityNameFailures.java
new file mode 100644
index 0000000..6fcfc97
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/IdentityNameFailures.java
@@ -0,0 +1,37 @@
+import javax.swing.JComponent;
+
+class IdentityComplete {
+  private int myField;
+
+  public void <caret>method() {
+    class MethodLocal {
+      private int myMethodLocalInt;
+      public void methodLocalInc() {
+        myMethodLocalInt++;
+      }
+    }
+
+    JComponent methodAnonymous = new JComponent() {
+      private int myMethodAnonymousInt;
+      public void methodAnonymousInc() {
+        myMethodAnonymousInt++;
+      }
+    };
+  }
+
+  public void context() {
+    class ContextLocal {
+      private int myContextLocalInt;
+      public void contextLocalInc() {
+        myContextLocalInt++;
+      }
+    }
+
+    JComponent contextAnonymous = new JComponent() {
+      private int myContextAnonymousInt;
+      public void contextAnonymousInc() {
+        myContextAnonymousInt++;
+      }
+    };
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/IdentityNameFailures.java.after b/java/java-tests/testData/refactoring/methodDuplicates/IdentityNameFailures.java.after
new file mode 100644
index 0000000..b0d02d4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/IdentityNameFailures.java.after
@@ -0,0 +1,25 @@
+import javax.swing.JComponent;
+
+class IdentityComplete {
+  private int myField;
+
+  public void method() {
+    class MethodLocal {
+      private int myMethodLocalInt;
+      public void methodLocalInc() {
+        myMethodLocalInt++;
+      }
+    }
+
+    JComponent methodAnonymous = new JComponent() {
+      private int myMethodAnonymousInt;
+      public void methodAnonymousInc() {
+        myMethodAnonymousInt++;
+      }
+    };
+  }
+
+  public void context() {
+      method();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/IdentityWhitespace.java b/java/java-tests/testData/refactoring/methodDuplicates/IdentityWhitespace.java
new file mode 100644
index 0000000..1379f03
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/IdentityWhitespace.java
@@ -0,0 +1,19 @@
+class IdentityComplete {
+  private int myField;
+
+  public void <caret>method(boolean bp) {
+    String var="var value" ;
+myField +=
+bp	?	var.
+	length( ):this. hashCode () ;
+  }
+
+  public void context(boolean bp) {
+    String	var
+    =
+	"var value"
+;myField
+	+=bp?var  . length ( )	:
+	this	.hashCode();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/IdentityWhitespace.java.after b/java/java-tests/testData/refactoring/methodDuplicates/IdentityWhitespace.java.after
new file mode 100644
index 0000000..9cad4e1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/IdentityWhitespace.java.after
@@ -0,0 +1,14 @@
+class IdentityComplete {
+  private int myField;
+
+  public void method(boolean bp) {
+    String var="var value" ;
+myField +=
+bp	?	var.
+	length( ):this. hashCode () ;
+  }
+
+  public void context(boolean bp) {
+      method(bp);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/Inheritance.java b/java/java-tests/testData/refactoring/methodDuplicates/Inheritance.java
new file mode 100644
index 0000000..8993cb7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/Inheritance.java
@@ -0,0 +1,13 @@
+public class Inheritance {}
+
+class Base {
+  void f<caret>oo(){
+    System.out.println("");
+  }
+}
+
+class Child extends Base {
+   void bar() {
+     System.out.println("");
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/Inheritance.java.after b/java/java-tests/testData/refactoring/methodDuplicates/Inheritance.java.after
new file mode 100644
index 0000000..ffa566f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/Inheritance.java.after
@@ -0,0 +1,13 @@
+public class Inheritance {}
+
+class Base {
+  void foo(){
+    System.out.println("");
+  }
+}
+
+class Child extends Base {
+   void bar() {
+       foo();
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/LocationQuantity.java b/java/java-tests/testData/refactoring/methodDuplicates/LocationQuantity.java
new file mode 100644
index 0000000..dd57f92
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/LocationQuantity.java
@@ -0,0 +1,33 @@
+class LocationQuantity {
+  public final int myInt = 3;
+
+  public int <caret>method(int p) {
+    return myInt + p;
+  }
+
+  public void sameClassContext() {
+    int v = 1;
+    v++;
+    int v2 = myInt + v;
+    Object o = new Object() {
+      public void anonymousClassContext() {
+         int av = myInt + 2;
+      }
+    };
+  }
+
+  public class Inner {
+    private boolean myFlag;
+    public int innerClassContext(int ip) {
+      return myFlag ? myInt + ip : 0;
+    }
+  }
+}
+
+class DifferentClass {
+  private int myInt;
+  private void differentClassContext() {
+    LocationQuantity lq = new LocationQuantity();
+    int v = lq.myInt + myInt;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/LocationQuantity.java.after b/java/java-tests/testData/refactoring/methodDuplicates/LocationQuantity.java.after
new file mode 100644
index 0000000..581081f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/LocationQuantity.java.after
@@ -0,0 +1,33 @@
+class LocationQuantity {
+  public final int myInt = 3;
+
+  public int method(int p) {
+    return myInt + p;
+  }
+
+  public void sameClassContext() {
+    int v = 1;
+    v++;
+    int v2 = method(v);
+    Object o = new Object() {
+      public void anonymousClassContext() {
+         int av = method(2);
+      }
+    };
+  }
+
+  public class Inner {
+    private boolean myFlag;
+    public int innerClassContext(int ip) {
+      return myFlag ? method(ip) : 0;
+    }
+  }
+}
+
+class DifferentClass {
+  private int myInt;
+  private void differentClassContext() {
+    LocationQuantity lq = new LocationQuantity();
+    int v = lq.method(myInt);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/MappingAny2ParameterPrimitiveLvalue.java b/java/java-tests/testData/refactoring/methodDuplicates/MappingAny2ParameterPrimitiveLvalue.java
new file mode 100644
index 0000000..c83a5f2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/MappingAny2ParameterPrimitiveLvalue.java
@@ -0,0 +1,11 @@
+class Mapping {
+  private int myField;
+
+  public void <caret>method(int p) {
+    p++;
+  }
+
+  public void context() {
+    myField;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/MappingExpression2Field.java b/java/java-tests/testData/refactoring/methodDuplicates/MappingExpression2Field.java
new file mode 100644
index 0000000..a75b9bda
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/MappingExpression2Field.java
@@ -0,0 +1,11 @@
+class Mapping {
+  private Mapping myMapping;
+
+  public void <caret>method() {
+    Mapping m2 = myMapping;
+  }
+
+  public void context() {
+    Mapping m2 = new Mapping();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/MappingExpression2LocalVar.java b/java/java-tests/testData/refactoring/methodDuplicates/MappingExpression2LocalVar.java
new file mode 100644
index 0000000..99681df
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/MappingExpression2LocalVar.java
@@ -0,0 +1,10 @@
+class Mapping {
+  public void <caret>method() {
+    Mapping m = new Mapping();
+    Mapping m2 = m;
+  }
+
+  public void context() {
+    Mapping m2 = new Mapping();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/MappingExpression2ParameterLValues.java b/java/java-tests/testData/refactoring/methodDuplicates/MappingExpression2ParameterLValues.java
new file mode 100644
index 0000000..1b63a1c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/MappingExpression2ParameterLValues.java
@@ -0,0 +1,11 @@
+class Mapping {
+  private Mapping myMapping;
+
+  public void <caret>method(Mapping m) {
+    m = null;
+  }
+
+  public void context() {
+    this.myMapping = null;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/MappingExpression2ParameterLValues.java.after b/java/java-tests/testData/refactoring/methodDuplicates/MappingExpression2ParameterLValues.java.after
new file mode 100644
index 0000000..3de4fef
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/MappingExpression2ParameterLValues.java.after
@@ -0,0 +1,11 @@
+class Mapping {
+  private Mapping myMapping;
+
+  public void <caret>method(Mapping m) {
+    m = null;
+  }
+
+  public void context() {
+      method(this.myMapping);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/MappingExpression2ParameterLiterals.java b/java/java-tests/testData/refactoring/methodDuplicates/MappingExpression2ParameterLiterals.java
new file mode 100644
index 0000000..e1819a0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/MappingExpression2ParameterLiterals.java
@@ -0,0 +1,11 @@
+class Mapping {
+  private int myInt;
+
+  public void <caret>method(boolean b, int i, char c, double d, int[] ia, String s) {
+    myInt = b ? i + c - (int)d: ia.length + s.hashCode();
+  }
+
+  public void context() {
+    myInt = true || false ? 5 + 'z' - (int)3.14 : new int[] { 0, 1 }.length + "abc".hashCode();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/MappingExpression2ParameterLiterals.java.after b/java/java-tests/testData/refactoring/methodDuplicates/MappingExpression2ParameterLiterals.java.after
new file mode 100644
index 0000000..3076fd2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/MappingExpression2ParameterLiterals.java.after
@@ -0,0 +1,11 @@
+class Mapping {
+  private int myInt;
+
+  public void method(boolean b, int i, char c, double d, int[] ia, String s) {
+    myInt = b ? i + c - (int)d: ia.length + s.hashCode();
+  }
+
+  public void context() {
+      method(true || false, 5, 'z', 3.14, new int[] { 0, 1 }, "abc");
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/MappingExpression2ParameterMultiple.java b/java/java-tests/testData/refactoring/methodDuplicates/MappingExpression2ParameterMultiple.java
new file mode 100644
index 0000000..cb7a8a7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/MappingExpression2ParameterMultiple.java
@@ -0,0 +1,21 @@
+class Mapping {
+  private int myInt;
+
+  public void <caret>method(int p1, boolean p2) {
+    myInt = p2 ? p1 : 0;
+    if (!p2) {
+      myInt *= p1;
+    }
+  }
+
+  public boolean sayYes() {
+    return true;
+  }
+
+  public void context() {
+    myInt = sayYes() ? 15 / 5 : 0;
+    if (!sayYes()) {
+      myInt *= 15 / 5;
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/MappingExpression2ParameterMultiple.java.after b/java/java-tests/testData/refactoring/methodDuplicates/MappingExpression2ParameterMultiple.java.after
new file mode 100644
index 0000000..0758118
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/MappingExpression2ParameterMultiple.java.after
@@ -0,0 +1,18 @@
+class Mapping {
+  private int myInt;
+
+  public void <caret>method(int p1, boolean p2) {
+    myInt = p2 ? p1 : 0;
+    if (!p2) {
+      myInt *= p1;
+    }
+  }
+
+  public boolean sayYes() {
+    return true;
+  }
+
+  public void context() {
+      method(15 / 5, sayYes());
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/MappingExpression2This.java b/java/java-tests/testData/refactoring/methodDuplicates/MappingExpression2This.java
new file mode 100644
index 0000000..37af81c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/MappingExpression2This.java
@@ -0,0 +1,9 @@
+class Mapping {
+  public void <caret>method() {
+    Mapping m2 = this;
+  }
+
+  public void context() {
+    Mapping m2 = new Mapping();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/MappingField2Field.java b/java/java-tests/testData/refactoring/methodDuplicates/MappingField2Field.java
new file mode 100644
index 0000000..5010597
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/MappingField2Field.java
@@ -0,0 +1,16 @@
+class Mapping1 {
+  private int myInt;
+  public void <caret>method() {
+    int i = myInt;
+  }
+  public void context() {
+    int i = myInt;
+  }
+}
+
+class Mapping2 {
+  private int myInt;
+  public void context() {
+    int i = myInt;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/MappingField2Field.java.after b/java/java-tests/testData/refactoring/methodDuplicates/MappingField2Field.java.after
new file mode 100644
index 0000000..dc4189a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/MappingField2Field.java.after
@@ -0,0 +1,16 @@
+class Mapping1 {
+  private int myInt;
+  public void method() {
+    int i = myInt;
+  }
+  public void context() {
+      method();
+  }
+}
+
+class Mapping2 {
+  private int myInt;
+  public void context() {
+    int i = myInt;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/MappingField2LocalVar.java b/java/java-tests/testData/refactoring/methodDuplicates/MappingField2LocalVar.java
new file mode 100644
index 0000000..597004d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/MappingField2LocalVar.java
@@ -0,0 +1,11 @@
+class Mapping {
+  private int myInt;
+  private Mapping myMapping = new Mapping();
+  public void <caret>method() {
+    Mapping m = new Mapping();
+    myInt += m.hashCode();
+  }
+  public void context() {
+    myInt += myMapping.hashCode();  
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/MappingField2Parameter.java b/java/java-tests/testData/refactoring/methodDuplicates/MappingField2Parameter.java
new file mode 100644
index 0000000..cec5a52
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/MappingField2Parameter.java
@@ -0,0 +1,15 @@
+class Mapping {
+  private int myInt;
+
+  public void <caret>method(int p) {
+    myInt = p + 1;
+  }
+
+  public void context1() {
+    myInt = myInt + 1;
+  }
+
+  public void context2() {
+    myInt = this.myInt + 1;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/MappingField2Parameter.java.after b/java/java-tests/testData/refactoring/methodDuplicates/MappingField2Parameter.java.after
new file mode 100644
index 0000000..078a380
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/MappingField2Parameter.java.after
@@ -0,0 +1,15 @@
+class Mapping {
+  private int myInt;
+
+  public void method(int p) {
+    myInt = p + 1;
+  }
+
+  public void context1() {
+      method(myInt);
+  }
+
+  public void context2() {
+      method(this.myInt);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/MappingField2This.java b/java/java-tests/testData/refactoring/methodDuplicates/MappingField2This.java
new file mode 100644
index 0000000..3f8cc77
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/MappingField2This.java
@@ -0,0 +1,12 @@
+class Mapping {
+  private int myInt;
+  private Mapping myField;
+
+  public void <caret>method() {
+    myInt = hashCode();
+  }
+
+  public void context() {
+    myInt = myField.hashCode();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/MappingLocalVar2Expression.java b/java/java-tests/testData/refactoring/methodDuplicates/MappingLocalVar2Expression.java
new file mode 100644
index 0000000..b235d8a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/MappingLocalVar2Expression.java
@@ -0,0 +1,13 @@
+class Mapping {
+  private int myInt;
+
+  public void <caret>method() {
+    int contextVar = 1;
+    myInt += contextVar + 1;
+  }
+
+  public void context() {
+    int contextVar = 1;
+    myInt += contextVar;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/MappingLocalVar2Field.java b/java/java-tests/testData/refactoring/methodDuplicates/MappingLocalVar2Field.java
new file mode 100644
index 0000000..3077449
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/MappingLocalVar2Field.java
@@ -0,0 +1,12 @@
+class Mapping {
+  private Mapping myMapping;
+
+  public void <caret>method() {
+    Mapping m2 = myMapping;
+  }
+
+  public void context() {
+    Mapping m = new Mapping();
+    Mapping m2 = m;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/MappingLocalVar2LocalVar.java b/java/java-tests/testData/refactoring/methodDuplicates/MappingLocalVar2LocalVar.java
new file mode 100644
index 0000000..a0ab7bb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/MappingLocalVar2LocalVar.java
@@ -0,0 +1,11 @@
+class Mapping {
+  public void <caret>method() {
+    Mapping methodVar = new Mapping();
+    methodVar.hashCode();
+  }
+
+  public void context() {
+    Mapping contextVar = new Mapping();
+    contextVar.hashCode();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/MappingLocalVar2LocalVar.java.after b/java/java-tests/testData/refactoring/methodDuplicates/MappingLocalVar2LocalVar.java.after
new file mode 100644
index 0000000..e269ad8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/MappingLocalVar2LocalVar.java.after
@@ -0,0 +1,10 @@
+class Mapping {
+  public void method() {
+    Mapping methodVar = new Mapping();
+    methodVar.hashCode();
+  }
+
+  public void context() {
+      method();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/MappingLocalVar2Parameter.java b/java/java-tests/testData/refactoring/methodDuplicates/MappingLocalVar2Parameter.java
new file mode 100644
index 0000000..7c196ec
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/MappingLocalVar2Parameter.java
@@ -0,0 +1,10 @@
+class Mapping {
+  public void <caret>method(Mapping methodPar) {
+    methodPar.hashCode();
+  }
+
+  public void context() {
+    Mapping contextVar = new Mapping();
+    contextVar.hashCode();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/MappingLocalVar2Parameter.java.after b/java/java-tests/testData/refactoring/methodDuplicates/MappingLocalVar2Parameter.java.after
new file mode 100644
index 0000000..d2a84d7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/MappingLocalVar2Parameter.java.after
@@ -0,0 +1,10 @@
+class Mapping {
+  public void method(Mapping methodPar) {
+    methodPar.hashCode();
+  }
+
+  public void context() {
+    Mapping contextVar = new Mapping();
+      method(contextVar);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/MappingLocalVar2This.java b/java/java-tests/testData/refactoring/methodDuplicates/MappingLocalVar2This.java
new file mode 100644
index 0000000..76449c5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/MappingLocalVar2This.java
@@ -0,0 +1,10 @@
+class Mapping {
+  public void <caret>method() {
+    Mapping m2 = this;
+  }
+
+  public void context() {
+    Mapping m = new Mapping();
+    Mapping m2 = m;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/MappingMember2MemberDifferent.java b/java/java-tests/testData/refactoring/methodDuplicates/MappingMember2MemberDifferent.java
new file mode 100644
index 0000000..a152d98
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/MappingMember2MemberDifferent.java
@@ -0,0 +1,10 @@
+class Mapping {
+  public void <caret>method() {
+    toString();
+  }
+
+  public void context() {
+    Mapping m = new Mapping();
+    m.toString();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/MappingMember2MemberDifferent.java.after b/java/java-tests/testData/refactoring/methodDuplicates/MappingMember2MemberDifferent.java.after
new file mode 100644
index 0000000..f9159e8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/MappingMember2MemberDifferent.java.after
@@ -0,0 +1,10 @@
+class Mapping {
+  public void method() {
+    toString();
+  }
+
+  public void context() {
+    Mapping m = new Mapping();
+      m.method();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/MappingParameter2Field.java b/java/java-tests/testData/refactoring/methodDuplicates/MappingParameter2Field.java
new file mode 100644
index 0000000..9986d20
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/MappingParameter2Field.java
@@ -0,0 +1,11 @@
+class Mapping {
+  private Mapping myMapping;
+
+  public void <caret>method() {
+    Mapping m2 = myMapping;
+  }
+
+  public void context(Mapping m) {
+    Mapping m2 = m;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/MappingParameter2LocalVar.java b/java/java-tests/testData/refactoring/methodDuplicates/MappingParameter2LocalVar.java
new file mode 100644
index 0000000..61fd22a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/MappingParameter2LocalVar.java
@@ -0,0 +1,10 @@
+class Mapping {
+  public void <caret>method() {
+    Mapping m = new Mapping();
+    Mapping m2 = m;
+  }
+
+  public void context(Mapping m) {
+    Mapping m2 = m;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/MappingParameter2Parameter.java b/java/java-tests/testData/refactoring/methodDuplicates/MappingParameter2Parameter.java
new file mode 100644
index 0000000..b98cb18
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/MappingParameter2Parameter.java
@@ -0,0 +1,9 @@
+class Mapping {
+  public void <caret>method(Mapping methodMapping) {
+    methodMapping.hashCode();
+  }
+
+  public void context(Mapping contextMapping) {
+    contextMapping.hashCode();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/MappingParameter2Parameter.java.after b/java/java-tests/testData/refactoring/methodDuplicates/MappingParameter2Parameter.java.after
new file mode 100644
index 0000000..915c234
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/MappingParameter2Parameter.java.after
@@ -0,0 +1,9 @@
+class Mapping {
+  public void <caret>method(Mapping methodMapping) {
+    methodMapping.hashCode();
+  }
+
+  public void context(Mapping contextMapping) {
+      method(contextMapping);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/MappingParameter2This.java b/java/java-tests/testData/refactoring/methodDuplicates/MappingParameter2This.java
new file mode 100644
index 0000000..c4a2d12
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/MappingParameter2This.java
@@ -0,0 +1,9 @@
+class Mapping {
+  public void <caret>method() {
+    Mapping m2 = this;
+  }
+
+  public void context(Mapping m) {
+    Mapping m2 = m;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/MappingThis2Field.java b/java/java-tests/testData/refactoring/methodDuplicates/MappingThis2Field.java
new file mode 100644
index 0000000..c6e235d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/MappingThis2Field.java
@@ -0,0 +1,16 @@
+class Mapping {
+  private int myInt;
+  private Mapping myField;
+
+  public void <caret>method() {
+    myInt = myField.hashCode();
+  }
+
+  public void context1() {
+    myInt = hashCode();
+  }
+
+  public void context2() {
+    myInt = this.hashCode();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/MappingThis2LocalVar.java b/java/java-tests/testData/refactoring/methodDuplicates/MappingThis2LocalVar.java
new file mode 100644
index 0000000..0c0c88b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/MappingThis2LocalVar.java
@@ -0,0 +1,10 @@
+class Mapping {
+  private int myInt;
+  public void <caret>method() {
+    Mapping m = new Mapping();
+    myInt += m.hashCode();
+  }
+  public void context() {
+    myInt += hashCode();  
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/MappingThis2Parameter.java b/java/java-tests/testData/refactoring/methodDuplicates/MappingThis2Parameter.java
new file mode 100644
index 0000000..9f90c65
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/MappingThis2Parameter.java
@@ -0,0 +1,16 @@
+class Mapping {
+  private int myInt;
+  private Mapping myField;
+
+  public void <caret>method(Mapping m) {
+    myInt = m.hashCode();
+  }
+
+  public void context1() {
+    myInt = hashCode();
+  }
+
+  public void context2() {
+    myInt = this.hashCode();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/MappingThis2Parameter.java.after b/java/java-tests/testData/refactoring/methodDuplicates/MappingThis2Parameter.java.after
new file mode 100644
index 0000000..9cd2ac4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/MappingThis2Parameter.java.after
@@ -0,0 +1,16 @@
+class Mapping {
+  private int myInt;
+  private Mapping myField;
+
+  public void method(Mapping m) {
+    myInt = m.hashCode();
+  }
+
+  public void context1() {
+      method(Mapping.this);
+  }
+
+  public void context2() {
+      method(this);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/MappingThis2ThisDifferent.java b/java/java-tests/testData/refactoring/methodDuplicates/MappingThis2ThisDifferent.java
new file mode 100644
index 0000000..c99db8e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/MappingThis2ThisDifferent.java
@@ -0,0 +1,16 @@
+class Mapping1 {
+  private int myInt;
+  public void <caret>method() {
+    Object o = this;
+  }
+  public void context() {
+    Object o = this;
+  }
+}
+
+class Mapping2 {
+  private int myInt;
+  public void context() {
+    Object o = this;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/MappingThis2ThisDifferent.java.after b/java/java-tests/testData/refactoring/methodDuplicates/MappingThis2ThisDifferent.java.after
new file mode 100644
index 0000000..b1285f5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/MappingThis2ThisDifferent.java.after
@@ -0,0 +1,16 @@
+class Mapping1 {
+  private int myInt;
+  public void method() {
+    Object o = this;
+  }
+  public void context() {
+      method();
+  }
+}
+
+class Mapping2 {
+  private int myInt;
+  public void context() {
+    Object o = this;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/MappingThis2ThisQualified.java b/java/java-tests/testData/refactoring/methodDuplicates/MappingThis2ThisQualified.java
new file mode 100644
index 0000000..c10b9b7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/MappingThis2ThisQualified.java
@@ -0,0 +1,15 @@
+class Mapping {
+  private int myInt;
+
+  public void <caret>method() {
+    this.myInt++;
+    Mapping.this.myInt--;
+    myInt += hashCode();
+  }
+
+  public void context() {
+    myInt++;
+    this.myInt--;
+    myInt += hashCode();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/MappingThis2ThisQualified.java.after b/java/java-tests/testData/refactoring/methodDuplicates/MappingThis2ThisQualified.java.after
new file mode 100644
index 0000000..a622828
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/MappingThis2ThisQualified.java.after
@@ -0,0 +1,13 @@
+class Mapping {
+  private int myInt;
+
+  public void method() {
+    this.myInt++;
+    Mapping.this.myInt--;
+    myInt += hashCode();
+  }
+
+  public void context() {
+      method();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/PostFragmentUsage.java b/java/java-tests/testData/refactoring/methodDuplicates/PostFragmentUsage.java
new file mode 100644
index 0000000..a1c18b9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/PostFragmentUsage.java
@@ -0,0 +1,43 @@
+class Post {
+  private int myField;
+
+  public int <caret>method(int param, int varFree) {
+    int varIncapsulated = 2;
+    return varFree + varIncapsulated + param + myField + this.hashCode();
+  }
+
+  public void contextVarFree(int param) {
+    int varFree = 1;
+    int varIncapsulated = 2;
+    int var = varFree + varIncapsulated + param + myField + this.hashCode();
+    int varPost = varFree;
+  }
+
+  public void contextVarIncapsulated(int param) {
+    int varFree = 1;
+    int varIncapsulated = 2;
+    int var = varFree + varIncapsulated + param + myField + this.hashCode();
+    int varPost = varIncapsulated;
+  }
+
+  public void contextParam(int param) {
+    int varFree = 1;
+    int varIncapsulated = 2;
+    int var = varFree + varIncapsulated + param + myField + this.hashCode();
+    int varPost = param;
+  }
+
+  public void contextField(int param) {
+    int varFree = 1;
+    int varIncapsulated = 2;
+    int var = varFree + varIncapsulated + param + myField + this.hashCode();
+    int varPost = myField;
+  }
+
+  public void contextThis(int param) {
+    int varFree = 1;
+    int varIncapsulated = 2;
+    int var = varFree + varIncapsulated + param + myField + this.hashCode();
+    int varPost = this.hashCode();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/PostFragmentUsage.java.after b/java/java-tests/testData/refactoring/methodDuplicates/PostFragmentUsage.java.after
new file mode 100644
index 0000000..f87b470
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/PostFragmentUsage.java.after
@@ -0,0 +1,39 @@
+class Post {
+  private int myField;
+
+  public int method(int param, int varFree) {
+    int varIncapsulated = 2;
+    return varFree + varIncapsulated + param + myField + this.hashCode();
+  }
+
+  public void contextVarFree(int param) {
+    int varFree = 1;
+      int var = method(param, varFree);
+    int varPost = varFree;
+  }
+
+  public void contextVarIncapsulated(int param) {
+    int varFree = 1;
+    int varIncapsulated = 2;
+    int var = varFree + varIncapsulated + param + myField + this.hashCode();
+    int varPost = varIncapsulated;
+  }
+
+  public void contextParam(int param) {
+    int varFree = 1;
+      int var = method(param, varFree);
+    int varPost = param;
+  }
+
+  public void contextField(int param) {
+    int varFree = 1;
+      int var = method(param, varFree);
+    int varPost = myField;
+  }
+
+  public void contextThis(int param) {
+    int varFree = 1;
+      int var = method(param, varFree);
+    int varPost = this.hashCode();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/RefReplacement.java b/java/java-tests/testData/refactoring/methodDuplicates/RefReplacement.java
new file mode 100644
index 0000000..d668d2a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/RefReplacement.java
@@ -0,0 +1,13 @@
+class Test {
+  static void <caret>main(Test t){
+    if (true) t.foo();
+  }
+
+  void foo(){}
+}
+
+class Test1 {
+  void bar(Test t) {
+    if (true) {t.foo();}
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/RefReplacement.java.after b/java/java-tests/testData/refactoring/methodDuplicates/RefReplacement.java.after
new file mode 100644
index 0000000..5264533
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/RefReplacement.java.after
@@ -0,0 +1,13 @@
+class Test {
+  static void main(Test t){
+    if (true) t.foo();
+  }
+
+  void foo(){}
+}
+
+class Test1 {
+  void bar(Test t) {
+      Test.main(t);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/RefReplacement1.java b/java/java-tests/testData/refactoring/methodDuplicates/RefReplacement1.java
new file mode 100644
index 0000000..5f772c0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/RefReplacement1.java
@@ -0,0 +1,13 @@
+class Test {
+    void bar() {}
+
+    public void main() {
+        bar();
+    }
+}
+
+class Test1 {
+  void <caret>foo(Test t) {
+      t.bar();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/RefReplacement1.java.after b/java/java-tests/testData/refactoring/methodDuplicates/RefReplacement1.java.after
new file mode 100644
index 0000000..e7810d2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/RefReplacement1.java.after
@@ -0,0 +1,13 @@
+class Test {
+    void bar() {}
+
+    public void main() {
+        Test1.foo(Test.this);
+    }
+}
+
+class Test1 {
+  static void foo(Test t) {
+      t.bar();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/ReturnExpression.java b/java/java-tests/testData/refactoring/methodDuplicates/ReturnExpression.java
new file mode 100644
index 0000000..c460285
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/ReturnExpression.java
@@ -0,0 +1,32 @@
+class Return {
+  private Return myReturn;
+  public Return getReturn() {
+    return myReturn;
+  }
+  private int myInt;
+
+  public Return <caret>method() {
+    Return r = new Return();
+    r.myInt >>= 1;
+    return r.getReturn();
+  }
+
+  public void contextLValue() {
+    // Could be processed, but now it is not.
+    Return r = new Return();
+    r.myInt >>= 1;
+    r.getReturn().myInt = 0;
+  }
+
+  public void contextNoUsage() {
+    // Could be processed, but now it is not.
+    Return r = new Return();
+    r.myInt >>= 1;
+  }
+
+  public void contextRValue() {
+    Return r = new Return();
+    r.myInt >>= 1;
+    Return r2 = r.getReturn();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/ReturnExpression.java.after b/java/java-tests/testData/refactoring/methodDuplicates/ReturnExpression.java.after
new file mode 100644
index 0000000..027b148
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/ReturnExpression.java.after
@@ -0,0 +1,30 @@
+class Return {
+  private Return myReturn;
+  public Return getReturn() {
+    return myReturn;
+  }
+  private int myInt;
+
+  public Return method() {
+    Return r = new Return();
+    r.myInt >>= 1;
+    return r.getReturn();
+  }
+
+  public void contextLValue() {
+    // Could be processed, but now it is not.
+    Return r = new Return();
+    r.myInt >>= 1;
+    r.getReturn().myInt = 0;
+  }
+
+  public void contextNoUsage() {
+    // Could be processed, but now it is not.
+    Return r = new Return();
+    r.myInt >>= 1;
+  }
+
+  public void contextRValue() {
+      Return r2 = method();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/ReturnExpressionDifferent.java b/java/java-tests/testData/refactoring/methodDuplicates/ReturnExpressionDifferent.java
new file mode 100644
index 0000000..70bc6bb0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/ReturnExpressionDifferent.java
@@ -0,0 +1,12 @@
+class ReturnExpression {
+  int <caret>bar(String s) {
+    s = s + "";
+    return s.length();
+  }
+
+  void foo() {
+    String s1 = "";
+    s1 = s1 + "";
+    System.out.println(s1);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/ReturnField.java b/java/java-tests/testData/refactoring/methodDuplicates/ReturnField.java
new file mode 100644
index 0000000..545a56b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/ReturnField.java
@@ -0,0 +1,33 @@
+class Return {
+  private Return myReturn;
+  private int myInt;
+
+  public Return <caret>method() {
+    myReturn = new Return();
+    myReturn.myInt++;
+    return myReturn;
+  }
+
+  public void contextLValue() {
+    myReturn = new Return();
+    myReturn.myInt++;
+    myReturn = null;
+  }
+
+  public void contextNoUsage() {
+    myReturn = new Return();
+    myReturn.myInt++;
+  }
+
+  public void contextRValue() {
+    myReturn = new Return();
+    myReturn.myInt++;
+    Return r = myReturn;
+  }
+
+  public void contextRValueQualified() {
+    myReturn = new Return();
+    myReturn.myInt++;
+    Return r = this.myReturn;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/ReturnField.java.after b/java/java-tests/testData/refactoring/methodDuplicates/ReturnField.java.after
new file mode 100644
index 0000000..f7599cf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/ReturnField.java.after
@@ -0,0 +1,29 @@
+class Return {
+  private Return myReturn;
+  private int myInt;
+
+  public Return method() {
+    myReturn = new Return();
+    myReturn.myInt++;
+    return myReturn;
+  }
+
+  public void contextLValue() {
+      myReturn = method();
+    myReturn = null;
+  }
+
+  public void contextNoUsage() {
+      myReturn = method();
+  }
+
+  public void contextRValue() {
+      myReturn = method();
+    Return r = myReturn;
+  }
+
+  public void contextRValueQualified() {
+      myReturn = method();
+    Return r = this.myReturn;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/ReturnLocalVar.java b/java/java-tests/testData/refactoring/methodDuplicates/ReturnLocalVar.java
new file mode 100644
index 0000000..c490c94
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/ReturnLocalVar.java
@@ -0,0 +1,27 @@
+class Return {
+  private Return myReturn;
+  private int myInt;
+
+  public Return <caret>method() {
+    Return r = new Return();
+    r.myInt >>= 1;
+    return r;
+  }
+
+  public void contextLValue() {
+    Return r = new Return();
+    r.myInt >>= 1;
+    r = null;
+  }
+
+  public void contextNoUsage() {
+    Return r = new Return();
+    r.myInt >>= 1;
+  }
+
+  public void contextRValue() {
+    Return r = new Return();
+    r.myInt >>= 1;
+    Return r2 = r;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/ReturnLocalVar.java.after b/java/java-tests/testData/refactoring/methodDuplicates/ReturnLocalVar.java.after
new file mode 100644
index 0000000..b7bed76
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/ReturnLocalVar.java.after
@@ -0,0 +1,24 @@
+class Return {
+  private Return myReturn;
+  private int myInt;
+
+  public Return method() {
+    Return r = new Return();
+    r.myInt >>= 1;
+    return r;
+  }
+
+  public void contextLValue() {
+      Return r = method();
+    r = null;
+  }
+
+  public void contextNoUsage() {
+      Return r = method();
+  }
+
+  public void contextRValue() {
+      Return r = method();
+    Return r2 = r;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/ReturnParameter.java b/java/java-tests/testData/refactoring/methodDuplicates/ReturnParameter.java
new file mode 100644
index 0000000..2ecc930
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/ReturnParameter.java
@@ -0,0 +1,28 @@
+class Return {
+  private Return myReturn;
+  private int myInt;
+
+  public Return <caret>method(Return p) {
+    p.myInt--;
+    return p;
+  }
+
+  public void contextLValue() {
+    myReturn.myInt--;
+    myReturn = null;
+  }
+
+  public void contextNoUsage() {
+    myReturn.myInt--;
+  }
+
+  public void contextRValue() {
+    myReturn.myInt--;
+    Return r = myReturn;
+  }
+
+  public void contextRValueQualified() {
+    myReturn.myInt--;
+    Return r = this.myReturn;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/ReturnParameter.java.after b/java/java-tests/testData/refactoring/methodDuplicates/ReturnParameter.java.after
new file mode 100644
index 0000000..f3c95ed
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/ReturnParameter.java.after
@@ -0,0 +1,28 @@
+class Return {
+  private Return myReturn;
+  private int myInt;
+
+  public Return method(Return p) {
+    p.myInt--;
+    return p;
+  }
+
+  public void contextLValue() {
+      myReturn = method(myReturn);
+      myReturn = null;
+  }
+
+  public void contextNoUsage() {
+      myReturn = method(myReturn);
+  }
+
+  public void contextRValue() {
+      myReturn = method(myReturn);
+      Return r = myReturn;
+  }
+
+  public void contextRValueQualified() {
+      myReturn = method(myReturn);
+      Return r = this.myReturn;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/ReturnThis.java b/java/java-tests/testData/refactoring/methodDuplicates/ReturnThis.java
new file mode 100644
index 0000000..c0f5be7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/ReturnThis.java
@@ -0,0 +1,15 @@
+class Return {
+  private int myInt;
+
+  public Return <caret>method() {
+    myInt++;
+    return this;
+  }
+
+  public void context() {
+    myInt++;
+    Return r = this;
+    // Currently the statement below could be replaced, but it's not. Nobody has requested this.
+    myInt++;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/ReturnThis.java.after b/java/java-tests/testData/refactoring/methodDuplicates/ReturnThis.java.after
new file mode 100644
index 0000000..a4bd797
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/ReturnThis.java.after
@@ -0,0 +1,14 @@
+class Return {
+  private int myInt;
+
+  public Return method() {
+    myInt++;
+    return this;
+  }
+
+  public void context() {
+      Return r = method();
+    // Currently the statement below could be replaced, but it's not. Nobody has requested this.
+    myInt++;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/ReturnVariable.java b/java/java-tests/testData/refactoring/methodDuplicates/ReturnVariable.java
new file mode 100644
index 0000000..90ce91a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/ReturnVariable.java
@@ -0,0 +1,12 @@
+class ReturnVariable {
+  String <caret>bar(String s) {
+    s = s + "";
+    return s;
+  }
+
+  void foo() {
+    String s1 = "";
+    s1 = s1 + "";
+    System.out.println(s1);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/ReturnVariable.java.after b/java/java-tests/testData/refactoring/methodDuplicates/ReturnVariable.java.after
new file mode 100644
index 0000000..90eecf6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/ReturnVariable.java.after
@@ -0,0 +1,12 @@
+class ReturnVariable {
+  String bar(String s) {
+    s = s + "";
+    return s;
+  }
+
+  void foo() {
+    String s1 = "";
+      s1 = bar(s1);
+      System.out.println(s1);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/ReturnVoidTest.java b/java/java-tests/testData/refactoring/methodDuplicates/ReturnVoidTest.java
new file mode 100644
index 0000000..f4e155e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/ReturnVoidTest.java
@@ -0,0 +1,13 @@
+class ReturnVoidTest {
+  interface Thing {
+    boolean thing();
+  }
+
+  void dupeHolder() {
+    if (false) return;
+  }
+
+  void <caret>duplicator(final boolean thingReturn) {
+    if (thingReturn ) return;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/ReturnVoidTest.java.after b/java/java-tests/testData/refactoring/methodDuplicates/ReturnVoidTest.java.after
new file mode 100644
index 0000000..5ef4ff2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/ReturnVoidTest.java.after
@@ -0,0 +1,13 @@
+class ReturnVoidTest {
+  interface Thing {
+    boolean thing();
+  }
+
+  void dupeHolder() {
+      duplicator(false);
+  }
+
+  void duplicator(final boolean thingReturn) {
+    if (thingReturn ) return;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/StaticMethodReplacement.java b/java/java-tests/testData/refactoring/methodDuplicates/StaticMethodReplacement.java
new file mode 100644
index 0000000..23835fc2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/StaticMethodReplacement.java
@@ -0,0 +1,11 @@
+class StaticMethodReplacement {
+  static void <caret>main(StaticMethodReplacement r) {
+    r.bar();
+  }
+
+  void bar(){}
+
+  void foo() {
+    bar();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/StaticMethodReplacement.java.after b/java/java-tests/testData/refactoring/methodDuplicates/StaticMethodReplacement.java.after
new file mode 100644
index 0000000..b25023b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/StaticMethodReplacement.java.after
@@ -0,0 +1,11 @@
+class StaticMethodReplacement {
+  static void main(StaticMethodReplacement r) {
+    r.bar();
+  }
+
+  void bar(){}
+
+  void foo() {
+      main(StaticMethodReplacement.this);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/ThisReferenceTest.java b/java/java-tests/testData/refactoring/methodDuplicates/ThisReferenceTest.java
new file mode 100644
index 0000000..833e8ae
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/ThisReferenceTest.java
@@ -0,0 +1,9 @@
+class ThisReferenceTest {
+  void foo(){}
+
+  void <caret>bar(){this.foo();}
+
+  static void main(ThisReferenceTest t){
+    t.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/ThisReferenceTest.java.after b/java/java-tests/testData/refactoring/methodDuplicates/ThisReferenceTest.java.after
new file mode 100644
index 0000000..c76586c1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/ThisReferenceTest.java.after
@@ -0,0 +1,9 @@
+class ThisReferenceTest {
+  void foo(){}
+
+  void bar(){this.foo();}
+
+  static void main(ThisReferenceTest t){
+      t.bar();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/TypeInheritance.java b/java/java-tests/testData/refactoring/methodDuplicates/TypeInheritance.java
new file mode 100644
index 0000000..ba61cf1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/TypeInheritance.java
@@ -0,0 +1,13 @@
+class Test {
+  class I {}
+  class I1 extends I {}
+
+  void <caret>foo(I i){
+    System.out.println(i);
+  }
+
+  void bar(I1 i){
+    System.out.println(i);
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/TypeInheritance.java.after b/java/java-tests/testData/refactoring/methodDuplicates/TypeInheritance.java.after
new file mode 100644
index 0000000..fa025ef
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/TypeInheritance.java.after
@@ -0,0 +1,13 @@
+class Test {
+  class I {}
+  class I1 extends I {}
+
+  void foo(I i){
+    System.out.println(i);
+  }
+
+  void bar(I1 i){
+      foo(i);
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/TypeInheritance1.java b/java/java-tests/testData/refactoring/methodDuplicates/TypeInheritance1.java
new file mode 100644
index 0000000..2874b1c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/TypeInheritance1.java
@@ -0,0 +1,13 @@
+class Test {
+  class I {}
+  class I1 extends I {}
+
+  void foo(I i){
+    System.out.println(i);
+  }
+
+  void <caret>bar(I1 i){
+    System.out.println(i);
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/TypesExtends.java b/java/java-tests/testData/refactoring/methodDuplicates/TypesExtends.java
new file mode 100644
index 0000000..c6caabd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/TypesExtends.java
@@ -0,0 +1,10 @@
+class Types {
+  public void <caret>method(Object v) {
+    int i = v.hashCode();
+  }
+
+  public void context() {
+    String v = "child type";
+    int i = v.hashCode();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/TypesExtends.java.after b/java/java-tests/testData/refactoring/methodDuplicates/TypesExtends.java.after
new file mode 100644
index 0000000..c9ee8fc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/TypesExtends.java.after
@@ -0,0 +1,10 @@
+class Types {
+  public void method(Object v) {
+    int i = v.hashCode();
+  }
+
+  public void context() {
+    String v = "child type";
+      method(v);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/TypesExtendsReturn.java b/java/java-tests/testData/refactoring/methodDuplicates/TypesExtendsReturn.java
new file mode 100644
index 0000000..acd4b23
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/TypesExtendsReturn.java
@@ -0,0 +1,10 @@
+class Types {
+  public String <caret>method(Object v) {
+    return v.toString();
+  }
+
+  public void context() {
+    String v = "child type";
+    Object o = v.toString();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/TypesExtendsReturn.java.after b/java/java-tests/testData/refactoring/methodDuplicates/TypesExtendsReturn.java.after
new file mode 100644
index 0000000..e97b589
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/TypesExtendsReturn.java.after
@@ -0,0 +1,10 @@
+class Types {
+  public String method(Object v) {
+    return v.toString();
+  }
+
+  public void context() {
+    String v = "child type";
+    Object o = method(v);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/TypesExtendsReturnDifferentArray.java b/java/java-tests/testData/refactoring/methodDuplicates/TypesExtendsReturnDifferentArray.java
new file mode 100644
index 0000000..85bafd4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/TypesExtendsReturnDifferentArray.java
@@ -0,0 +1,9 @@
+class Types {
+	public static Object[] <caret>arrayMethod(String s) {
+		return new String[] {s};
+	}
+	public static void arrayContext(String s) {
+		String[] sa = new String[] {s.substring(0)};
+		Object[] oa = new String[] {s};
+	}
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/TypesExtendsReturnDifferentArray.java.after b/java/java-tests/testData/refactoring/methodDuplicates/TypesExtendsReturnDifferentArray.java.after
new file mode 100644
index 0000000..fdc4e0e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/TypesExtendsReturnDifferentArray.java.after
@@ -0,0 +1,9 @@
+class Types {
+	public static String[] arrayMethod(String s) {
+		return new String[] {s};
+	}
+	public static void arrayContext(String s) {
+		String[] sa = arrayMethod(s.substring(0));
+		Object[] oa = arrayMethod(s);
+	}
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/TypesExtendsReturnDifferentGeneric.java b/java/java-tests/testData/refactoring/methodDuplicates/TypesExtendsReturnDifferentGeneric.java
new file mode 100644
index 0000000..3f70f3d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/TypesExtendsReturnDifferentGeneric.java
@@ -0,0 +1,12 @@
+import java.util.Collection;
+import java.util.List;
+
+class Types {
+	public Collection<String> <caret>genericMethod() {
+		return new ArrayList<String>();
+	}
+	public void genericContext() {
+		List<String> sl = new ArrayList<String>();
+		Collection<String> sc = genericMethod();
+	}
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/TypesExtendsReturnDifferentGeneric.java.after b/java/java-tests/testData/refactoring/methodDuplicates/TypesExtendsReturnDifferentGeneric.java.after
new file mode 100644
index 0000000..1dd5972
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/TypesExtendsReturnDifferentGeneric.java.after
@@ -0,0 +1,12 @@
+import java.util.Collection;
+import java.util.List;
+
+class Types {
+	public List<String> genericMethod() {
+		return new ArrayList<String>();
+	}
+	public void genericContext() {
+		List<String> sl = genericMethod();
+		Collection<String> sc = genericMethod();
+	}
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/TypesExtendsReturnDifferentPrimitive.java b/java/java-tests/testData/refactoring/methodDuplicates/TypesExtendsReturnDifferentPrimitive.java
new file mode 100644
index 0000000..fb51e50
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/TypesExtendsReturnDifferentPrimitive.java
@@ -0,0 +1,9 @@
+class Types {
+	public long <caret>primitiveMethod(boolean b) {
+		return b ? 1 : 0;
+	}
+	public void primitiveContext(boolean b) {
+		int i = !b ? 1 : 0;
+		long l = b ? 1 : 0;
+	}
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/TypesExtendsReturnDifferentPrimitive.java.after b/java/java-tests/testData/refactoring/methodDuplicates/TypesExtendsReturnDifferentPrimitive.java.after
new file mode 100644
index 0000000..7c0ab0b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/TypesExtendsReturnDifferentPrimitive.java.after
@@ -0,0 +1,9 @@
+class Types {
+	public int primitiveMethod(boolean b) {
+		return b ? 1 : 0;
+	}
+	public void primitiveContext(boolean b) {
+		int i = primitiveMethod(!b);
+		long l = primitiveMethod(b);
+	}
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/TypesExtendsReturnDifferentReference.java b/java/java-tests/testData/refactoring/methodDuplicates/TypesExtendsReturnDifferentReference.java
new file mode 100644
index 0000000..c5b3026
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/TypesExtendsReturnDifferentReference.java
@@ -0,0 +1,9 @@
+class Types {
+	public static Object <caret>referenceMethod(Object o) {
+		return o.toString();
+	}
+	public static void referenceContext(Object o) {
+		String s = o.getClass().toString();
+		Object v = o.toString();
+	}
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/TypesExtendsReturnDifferentReference.java.after b/java/java-tests/testData/refactoring/methodDuplicates/TypesExtendsReturnDifferentReference.java.after
new file mode 100644
index 0000000..f39e7ed
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/TypesExtendsReturnDifferentReference.java.after
@@ -0,0 +1,9 @@
+class Types {
+	public static String referenceMethod(Object o) {
+		return o.toString();
+	}
+	public static void referenceContext(Object o) {
+		String s = referenceMethod(o.getClass());
+		Object v = referenceMethod(o);
+	}
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsConcrete2Concrete.java b/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsConcrete2Concrete.java
new file mode 100644
index 0000000..c6dee43
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsConcrete2Concrete.java
@@ -0,0 +1,13 @@
+import java.util.List;
+
+class Types {
+  private List<String> myList;
+
+  public String <caret>method(List<String> v) {
+    return v.get(0);
+  }
+
+  public void context() {
+    String s = myList.get(0);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsConcrete2Concrete.java.after b/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsConcrete2Concrete.java.after
new file mode 100644
index 0000000..c19fb18
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsConcrete2Concrete.java.after
@@ -0,0 +1,13 @@
+import java.util.List;
+
+class Types {
+  private List<String> myList;
+
+  public String method(List<String> v) {
+    return v.get(0);
+  }
+
+  public void context() {
+    String s = method(myList);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsConcrete2ConcreteDifferent.java b/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsConcrete2ConcreteDifferent.java
new file mode 100644
index 0000000..9ea44ff
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsConcrete2ConcreteDifferent.java
@@ -0,0 +1,13 @@
+import java.util.List;
+
+class Types {
+  private List<Boolean> myList;
+
+  public void <caret>method(List<Integer> v) {
+    v.clear();
+  }
+
+  public void context() {
+    myList.clear();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsConcrete2Extends.java b/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsConcrete2Extends.java
new file mode 100644
index 0000000..1c2171a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsConcrete2Extends.java
@@ -0,0 +1,12 @@
+import java.util.ArrayList;
+import java.util.List;
+
+class Types {
+    public void <caret>method(List<? extends List> v) {
+        int i = v.get(0).getX();
+    }
+    public void context() {
+        List<ArrayList> list = new ArrayList<ArrayList>();
+        int j = list.get(0).getX();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsConcrete2Extends.java.after b/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsConcrete2Extends.java.after
new file mode 100644
index 0000000..299cba7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsConcrete2Extends.java.after
@@ -0,0 +1,12 @@
+import java.util.ArrayList;
+import java.util.List;
+
+class Types {
+    public void method(List<? extends List> v) {
+        int i = v.get(0).getX();
+    }
+    public void context() {
+        List<ArrayList> list = new ArrayList<ArrayList>();
+        method(list);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsConcrete2ExtendsDifferent.java b/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsConcrete2ExtendsDifferent.java
new file mode 100644
index 0000000..090bfb3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsConcrete2ExtendsDifferent.java
@@ -0,0 +1,12 @@
+import java.util.ArrayList;
+import java.util.List;
+
+class Types {
+    public void <caret>method(List<? extends ArrayList> v) {
+        Object o = v.get(0);
+    }
+    public void context() {
+        List<List> list = new ArrayList<List>();
+        Object o = v.get(0);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsConcrete2Raw.java b/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsConcrete2Raw.java
new file mode 100644
index 0000000..058f166
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsConcrete2Raw.java
@@ -0,0 +1,13 @@
+import java.util.List;
+
+class Types {
+  private List<String> myList;
+
+  public void <caret>method(List v) {
+    v.clear();
+  }
+
+  public void context() {
+    myList.clear();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsConcrete2Raw.java.after b/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsConcrete2Raw.java.after
new file mode 100644
index 0000000..5d210e7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsConcrete2Raw.java.after
@@ -0,0 +1,13 @@
+import java.util.List;
+
+class Types {
+  private List<String> myList;
+
+  public void method(List v) {
+    v.clear();
+  }
+
+  public void context() {
+      method(myList);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsConcrete2Super.java b/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsConcrete2Super.java
new file mode 100644
index 0000000..8ebd4a7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsConcrete2Super.java
@@ -0,0 +1,14 @@
+import java.awt.Component;
+import javax.swing.JComponent;
+import java.util.ArrayList;
+import java.util.List;
+
+class Types {
+    public void <caret>method(List<? super JComponent> v) {
+        Object o = v.get(0);
+    }
+    public void context() {
+        List<Component> list = new ArrayList<Component>();
+        Object o = list.get(0);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsConcrete2Super.java.after b/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsConcrete2Super.java.after
new file mode 100644
index 0000000..94d7e52
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsConcrete2Super.java.after
@@ -0,0 +1,14 @@
+import java.awt.Component;
+import javax.swing.JComponent;
+import java.util.ArrayList;
+import java.util.List;
+
+class Types {
+    public void method(List<? super JComponent> v) {
+        Object o = v.get(0);
+    }
+    public void context() {
+        List<Component> list = new ArrayList<Component>();
+        method(list);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsConcrete2SuperDifferent.java b/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsConcrete2SuperDifferent.java
new file mode 100644
index 0000000..099d3c7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsConcrete2SuperDifferent.java
@@ -0,0 +1,14 @@
+import java.awt.Window;
+import javax.swing.JComponent;
+import java.util.ArrayList;
+import java.util.List;
+
+class Types {
+    public void <caret>method(List<? super JComponent> v) {
+        Object o = v.get(0);
+    }
+    public void context() {
+        List<Window> list = new ArrayList<Window>();
+        Object o = list.get(0);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsRaw2Concrete.java b/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsRaw2Concrete.java
new file mode 100644
index 0000000..7eab8b4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsRaw2Concrete.java
@@ -0,0 +1,13 @@
+import java.util.List;
+
+class Types {
+  private List myList;
+
+  public void <caret>method(List<String> v) {
+    v.clear();
+  }
+
+  public void context() {
+    myList.clear();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsRaw2Concrete.java.after b/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsRaw2Concrete.java.after
new file mode 100644
index 0000000..c4a934b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsRaw2Concrete.java.after
@@ -0,0 +1,13 @@
+import java.util.List;
+
+class Types {
+  private List myList;
+
+  public void method(List<String> v) {
+    v.clear();
+  }
+
+  public void context() {
+      method(myList);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsRaw2Raw.java b/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsRaw2Raw.java
new file mode 100644
index 0000000..9660194
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsRaw2Raw.java
@@ -0,0 +1,13 @@
+import java.util.List;
+
+class Types {
+  private List myList;
+
+  public void <caret>method(List v) {
+    v.clear();
+  }
+
+  public void context() {
+    myList.clear();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsRaw2Raw.java.after b/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsRaw2Raw.java.after
new file mode 100644
index 0000000..f482d08
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/TypesGenericsRaw2Raw.java.after
@@ -0,0 +1,13 @@
+import java.util.List;
+
+class Types {
+  private List myList;
+
+  public void method(List v) {
+    v.clear();
+  }
+
+  public void context() {
+      method(myList);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/TypesImplements.java b/java/java-tests/testData/refactoring/methodDuplicates/TypesImplements.java
new file mode 100644
index 0000000..0a99a6b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/TypesImplements.java
@@ -0,0 +1,10 @@
+class Types {
+  public char <caret>method(CharSequence v) {
+    return v.charAt(0);
+  }
+
+  public void context() {
+    String v = "child type";
+    char c = v.charAt(0);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/TypesImplements.java.after b/java/java-tests/testData/refactoring/methodDuplicates/TypesImplements.java.after
new file mode 100644
index 0000000..034b231
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/TypesImplements.java.after
@@ -0,0 +1,10 @@
+class Types {
+  public char method(CharSequence v) {
+    return v.charAt(0);
+  }
+
+  public void context() {
+    String v = "child type";
+    char c = method(v);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/TypesNoRelationship.java b/java/java-tests/testData/refactoring/methodDuplicates/TypesNoRelationship.java
new file mode 100644
index 0000000..225b951
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/TypesNoRelationship.java
@@ -0,0 +1,9 @@
+class Types {
+  public void <caret>method(Integer v) {
+    int i = v.hashCode();
+  }
+
+  public void context(Boolean v) {
+    int i = v.hashCode();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/UnusedParameter.java b/java/java-tests/testData/refactoring/methodDuplicates/UnusedParameter.java
new file mode 100644
index 0000000..ecdc858
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/UnusedParameter.java
@@ -0,0 +1,9 @@
+class Test {
+  void <caret>foo(int i) {
+    System.out.println("hello");
+  }
+
+  void bar() {
+    System.out.println("hello");
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/UnusedParameter.java.after b/java/java-tests/testData/refactoring/methodDuplicates/UnusedParameter.java.after
new file mode 100644
index 0000000..fd5b12e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/UnusedParameter.java.after
@@ -0,0 +1,9 @@
+class Test {
+  void foo(int i) {
+    System.out.println("hello");
+  }
+
+  void bar() {
+      foo(0);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/UnusedParameter1.java b/java/java-tests/testData/refactoring/methodDuplicates/UnusedParameter1.java
new file mode 100644
index 0000000..3a33248
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/UnusedParameter1.java
@@ -0,0 +1,9 @@
+class Test {
+  void <caret>foo(String s) {
+    System.out.println("hello");
+  }
+
+  void bar() {
+    System.out.println("hello");
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/UnusedParameter1.java.after b/java/java-tests/testData/refactoring/methodDuplicates/UnusedParameter1.java.after
new file mode 100644
index 0000000..48fc0ec
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/UnusedParameter1.java.after
@@ -0,0 +1,9 @@
+class Test {
+  void foo(String s) {
+    System.out.println("hello");
+  }
+
+  void bar() {
+      foo(null);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/Varargs.java b/java/java-tests/testData/refactoring/methodDuplicates/Varargs.java
new file mode 100644
index 0000000..8d3aefd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/Varargs.java
@@ -0,0 +1,16 @@
+import java.util.*;
+
+public class Varargs {
+	private List<String> <caret>method(String... values) {
+		return Arrays.asList(values);
+	}
+	private void context() {
+		List<String> list1 = Arrays.asList("hi", "bye");
+		List<String> list2 = Arrays.asList("hi");
+		List<String> list3 = Arrays.asList(new String[] {});
+		String[] sa = new String[] {};
+		List<String> list4 = Arrays.asList(sa);
+
+		List listA = Arrays.asList(0);
+	}
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicates/Varargs.java.after b/java/java-tests/testData/refactoring/methodDuplicates/Varargs.java.after
new file mode 100644
index 0000000..82a9d95
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicates/Varargs.java.after
@@ -0,0 +1,16 @@
+import java.util.*;
+
+public class Varargs {
+	private List<String> method(String... values) {
+		return Arrays.asList(values);
+	}
+	private void context() {
+		List<String> list1 = method("hi", "bye");
+		List<String> list2 = method("hi");
+		List<String> list3 = method(new String[] {});
+		String[] sa = new String[] {};
+		List<String> list4 = method(sa);
+
+		List listA = Arrays.asList(0);
+	}
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/AnonymousInitializer.java b/java/java-tests/testData/refactoring/methodDuplicatesMisc/AnonymousInitializer.java
new file mode 100644
index 0000000..d331f3a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/AnonymousInitializer.java
@@ -0,0 +1,15 @@
+public class Model {
+  public static final Runnable FO<caret>O = new Runnable() {
+    public void run() {
+      System.out.println("abc");
+    }
+  };
+
+  public void foo() {
+    new Runnable() {
+      public void run() {
+        System.out.println("abc");
+      }
+    }.run();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/AnonymousInitializer.java.after b/java/java-tests/testData/refactoring/methodDuplicatesMisc/AnonymousInitializer.java.after
new file mode 100644
index 0000000..a52116c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/AnonymousInitializer.java.after
@@ -0,0 +1,11 @@
+public class Model {
+  public static final Runnable FOO = new Runnable() {
+    public void run() {
+      System.out.println("abc");
+    }
+  };
+
+  public void foo() {
+    FOO.run();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/CandidateUnqualifiedStaticAccess.java b/java/java-tests/testData/refactoring/methodDuplicatesMisc/CandidateUnqualifiedStaticAccess.java
new file mode 100644
index 0000000..b084a06
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/CandidateUnqualifiedStaticAccess.java
@@ -0,0 +1,17 @@
+public class aa {
+    public static boolean isVis<caret>ualUpdate(int update_type) {
+        return update_type <= Iaaa.FULL_QUOTE_VISUAL;
+    }
+}
+
+interface Iaaa {
+    int FULL_QUOTE_VISUAL = 0;
+}
+
+class a implements Iaaa {
+    int update_type = 8;
+
+    public static boolean blabla(int update_type) {
+        return update_type <= FULL_QUOTE_VISUAL;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/CandidateUnqualifiedStaticAccess.java.after b/java/java-tests/testData/refactoring/methodDuplicatesMisc/CandidateUnqualifiedStaticAccess.java.after
new file mode 100644
index 0000000..ee79c53
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/CandidateUnqualifiedStaticAccess.java.after
@@ -0,0 +1,17 @@
+public class aa {
+    public static boolean isVisualUpdate(int update_type) {
+        return update_type <= Iaaa.FULL_QUOTE_VISUAL;
+    }
+}
+
+interface Iaaa {
+    int FULL_QUOTE_VISUAL = 0;
+}
+
+class a implements Iaaa {
+    int update_type = 8;
+
+    public static boolean blabla(int update_type) {
+        return aa.isVisualUpdate(update_type);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/ChangeReturnTypeByField.java b/java/java-tests/testData/refactoring/methodDuplicatesMisc/ChangeReturnTypeByField.java
new file mode 100644
index 0000000..a081437
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/ChangeReturnTypeByField.java
@@ -0,0 +1,21 @@
+class Test {
+    private B myField;
+
+    public void method() {
+        Object o = myField;
+        String a = myField.bbb.xxx();
+    }
+
+    private Object f<caret>oo(){
+        return myField;
+    }
+
+    private static class B {
+        private C bbb;
+    }
+
+    private static class C {
+        String xxx() {return "";}
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/ChangeReturnTypeByField.java.after b/java/java-tests/testData/refactoring/methodDuplicatesMisc/ChangeReturnTypeByField.java.after
new file mode 100644
index 0000000..8577a0d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/ChangeReturnTypeByField.java.after
@@ -0,0 +1,21 @@
+class Test {
+    private B myField;
+
+    public void method() {
+        Object o = foo();
+        String a = foo().bbb.xxx();
+    }
+
+    private B foo(){
+        return myField;
+    }
+
+    private static class B {
+        private C bbb;
+    }
+
+    private static class C {
+        String xxx() {return "";}
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/ChangeReturnTypeByParameter.java b/java/java-tests/testData/refactoring/methodDuplicatesMisc/ChangeReturnTypeByParameter.java
new file mode 100644
index 0000000..d0067e9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/ChangeReturnTypeByParameter.java
@@ -0,0 +1,12 @@
+class A {
+
+    public void bar() {
+        m("");
+    }
+
+    private Object f<caret>oo() {
+        return "";
+    }
+
+    public void m(String ss) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/ChangeReturnTypeByParameter.java.after b/java/java-tests/testData/refactoring/methodDuplicatesMisc/ChangeReturnTypeByParameter.java.after
new file mode 100644
index 0000000..fe6c4fa
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/ChangeReturnTypeByParameter.java.after
@@ -0,0 +1,12 @@
+class A {
+
+    public void bar() {
+        m(foo());
+    }
+
+    private String foo() {
+        return "";
+    }
+
+    public void m(String ss) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/ChangeReturnTypeByReturnExpression.java b/java/java-tests/testData/refactoring/methodDuplicatesMisc/ChangeReturnTypeByReturnExpression.java
new file mode 100644
index 0000000..c1ca85d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/ChangeReturnTypeByReturnExpression.java
@@ -0,0 +1,21 @@
+import java.util.Map;
+import java.util.Set;
+
+public class A {
+    public String get(String k) {
+        return buildMap().get(k);
+    }
+
+    public Set<String> getAll(String x) {
+        return buildMap().keySet();
+    }
+
+    public Map<String, String> fo<caret>o() {
+      return buildMap();
+    }
+
+    public Map<String, String> buildMap() {
+        return null;
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/ChangeReturnTypeByReturnExpression.java.after b/java/java-tests/testData/refactoring/methodDuplicatesMisc/ChangeReturnTypeByReturnExpression.java.after
new file mode 100644
index 0000000..5b8e384
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/ChangeReturnTypeByReturnExpression.java.after
@@ -0,0 +1,21 @@
+import java.util.Map;
+import java.util.Set;
+
+public class A {
+    public String get(String k) {
+        return foo().get(k);
+    }
+
+    public Set<String> getAll(String x) {
+        return foo().keySet();
+    }
+
+    public Map<String, String> foo() {
+      return buildMap();
+    }
+
+    public Map<String, String> buildMap() {
+        return null;
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/ChangeReturnTypeByReturnValue.java b/java/java-tests/testData/refactoring/methodDuplicatesMisc/ChangeReturnTypeByReturnValue.java
new file mode 100644
index 0000000..972e0f0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/ChangeReturnTypeByReturnValue.java
@@ -0,0 +1,13 @@
+
+public class A {
+
+
+    public Object fo<caret>o() {
+      return null;
+    }
+
+    public String bar() {
+        return null;
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/ChangeReturnTypeByReturnValue.java.after b/java/java-tests/testData/refactoring/methodDuplicatesMisc/ChangeReturnTypeByReturnValue.java.after
new file mode 100644
index 0000000..0492deb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/ChangeReturnTypeByReturnValue.java.after
@@ -0,0 +1,13 @@
+
+public class A {
+
+
+    public String foo() {
+      return null;
+    }
+
+    public String bar() {
+        return foo();
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/CorrectThis.java b/java/java-tests/testData/refactoring/methodDuplicatesMisc/CorrectThis.java
new file mode 100644
index 0000000..3b99a58
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/CorrectThis.java
@@ -0,0 +1,14 @@
+public class BaseClass extends JComponent {
+}
+
+class SubClass extends BaseClass {
+ void a() {
+  System.out.println(getLocation());
+ }
+}
+
+class Util {
+ public static void met<caret>hod(BaseClass base) {
+  System.out.println(base.getLocation());
+ }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/CorrectThis.java.after b/java/java-tests/testData/refactoring/methodDuplicatesMisc/CorrectThis.java.after
new file mode 100644
index 0000000..181a189
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/CorrectThis.java.after
@@ -0,0 +1,14 @@
+public class BaseClass extends JComponent {
+}
+
+class SubClass extends BaseClass {
+ void a() {
+     Util.method(SubClass.this);
+ }
+}
+
+class Util {
+ public static void method(BaseClass base) {
+  System.out.println(base.getLocation());
+ }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/DetectNameConflicts.java b/java/java-tests/testData/refactoring/methodDuplicatesMisc/DetectNameConflicts.java
new file mode 100644
index 0000000..809873a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/DetectNameConflicts.java
@@ -0,0 +1,17 @@
+class Test {
+  public Foo createFoo() {
+        return new Foo() {
+            public void bar() {
+                System.out.println(1);
+            }
+        };
+    }
+
+    public void b<caret>ar() {
+        System.out.println(1);
+    }
+
+    public interface Foo {
+        void bar();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/DetectNameConflicts.java.after b/java/java-tests/testData/refactoring/methodDuplicatesMisc/DetectNameConflicts.java.after
new file mode 100644
index 0000000..f7bc960
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/DetectNameConflicts.java.after
@@ -0,0 +1,17 @@
+class Test {
+  public Foo createFoo() {
+        return new Foo() {
+            public void bar() {
+                Test.this.bar();
+            }
+        };
+    }
+
+    public void bar() {
+        System.out.println(1);
+    }
+
+    public interface Foo {
+        void bar();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/DetectNameConflictsWithStatic.java b/java/java-tests/testData/refactoring/methodDuplicatesMisc/DetectNameConflictsWithStatic.java
new file mode 100644
index 0000000..8e1cd01
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/DetectNameConflictsWithStatic.java
@@ -0,0 +1,17 @@
+class Test {
+  public Foo createFoo() {
+        return new Foo() {
+            public void bar() {
+                System.out.println(1);
+            }
+        };
+    }
+
+    public static void b<caret>ar() {
+        System.out.println(1);
+    }
+
+    public interface Foo {
+        void bar();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/DetectNameConflictsWithStatic.java.after b/java/java-tests/testData/refactoring/methodDuplicatesMisc/DetectNameConflictsWithStatic.java.after
new file mode 100644
index 0000000..d7a1e5c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/DetectNameConflictsWithStatic.java.after
@@ -0,0 +1,17 @@
+class Test {
+  public Foo createFoo() {
+        return new Foo() {
+            public void bar() {
+                Test.bar();
+            }
+        };
+    }
+
+    public static void bar() {
+        System.out.println(1);
+    }
+
+    public interface Foo {
+        void bar();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/IncorrectVarargsAccess.java b/java/java-tests/testData/refactoring/methodDuplicatesMisc/IncorrectVarargsAccess.java
new file mode 100644
index 0000000..563dddc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/IncorrectVarargsAccess.java
@@ -0,0 +1,14 @@
+class A {
+  void bar(int i){
+    method(1);
+    method(i, "a");
+    method(1, "a", "b");
+  }
+
+  void m<caret>(String... args) {
+    method(1, args);
+  }
+
+  void method(int i, String... args) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/IncorrectVarargsAccess.java.after b/java/java-tests/testData/refactoring/methodDuplicatesMisc/IncorrectVarargsAccess.java.after
new file mode 100644
index 0000000..dfe6214
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/IncorrectVarargsAccess.java.after
@@ -0,0 +1,14 @@
+class A {
+  void bar(int i){
+      m(new String[0]);
+      method(i, "a");
+      m("a", "b");
+  }
+
+  void m(String... args) {
+    method(1, args);
+  }
+
+  void method(int i, String... args) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/InsertSuperQualifierWhenNameConflicts.java b/java/java-tests/testData/refactoring/methodDuplicatesMisc/InsertSuperQualifierWhenNameConflicts.java
new file mode 100644
index 0000000..4683cf7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/InsertSuperQualifierWhenNameConflicts.java
@@ -0,0 +1,11 @@
+public class a {
+  void f<caret>oo() {
+    System.out.println();
+  }
+}
+
+class b extends a {
+  void foo() {
+    System.out.println();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/InsertSuperQualifierWhenNameConflicts.java.after b/java/java-tests/testData/refactoring/methodDuplicatesMisc/InsertSuperQualifierWhenNameConflicts.java.after
new file mode 100644
index 0000000..a0d7c57
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/InsertSuperQualifierWhenNameConflicts.java.after
@@ -0,0 +1,11 @@
+public class a {
+  void foo() {
+    System.out.println();
+  }
+}
+
+class b extends a {
+  void foo() {
+      super.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/MethodTypeParameters.java b/java/java-tests/testData/refactoring/methodDuplicatesMisc/MethodTypeParameters.java
new file mode 100644
index 0000000..25e4892
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/MethodTypeParameters.java
@@ -0,0 +1,14 @@
+import java.util.*;
+
+class Test {
+     <E extends A> List<E> met<caret>hod() {
+        return new ArrayList<E>();
+    }
+
+    void duplicated() {
+        List<B> l = new ArrayList<B>();
+    }
+
+    class A {}
+    class B extends A {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/MethodTypeParameters.java.after b/java/java-tests/testData/refactoring/methodDuplicatesMisc/MethodTypeParameters.java.after
new file mode 100644
index 0000000..0dbe466
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/MethodTypeParameters.java.after
@@ -0,0 +1,14 @@
+import java.util.*;
+
+class Test {
+     <E extends A> List<E> method() {
+        return new ArrayList<E>();
+    }
+
+    void duplicated() {
+        List<B> l = method();
+    }
+
+    class A {}
+    class B extends A {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/NoDetectNameConflicts.java b/java/java-tests/testData/refactoring/methodDuplicatesMisc/NoDetectNameConflicts.java
new file mode 100644
index 0000000..6698ea4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/NoDetectNameConflicts.java
@@ -0,0 +1,17 @@
+class Test {
+  public Foo createFoo() {
+        return new Foo() {
+            public void bar() {
+                System.out.println(1);
+            }
+        };
+    }
+
+    public void b<caret>ar(int i) {
+        System.out.println(i);
+    }
+
+    public interface Foo {
+        void bar();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/NoDetectNameConflicts.java.after b/java/java-tests/testData/refactoring/methodDuplicatesMisc/NoDetectNameConflicts.java.after
new file mode 100644
index 0000000..8cc0c81
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/NoDetectNameConflicts.java.after
@@ -0,0 +1,17 @@
+class Test {
+  public Foo createFoo() {
+        return new Foo() {
+            public void bar() {
+                bar(1);
+            }
+        };
+    }
+
+    public void bar(int i) {
+        System.out.println(i);
+    }
+
+    public interface Foo {
+        void bar();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/ParametersModification.java b/java/java-tests/testData/refactoring/methodDuplicatesMisc/ParametersModification.java
new file mode 100644
index 0000000..7aaf7e8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/ParametersModification.java
@@ -0,0 +1,24 @@
+class Test {
+  private double d<caret>d1(int index, double compVal, int numDays) {
+    double aveSlope = 0;
+
+    for (int i = 0; condition(index, numDays, i); i++) {
+      --index;
+      aveSlope = comminSending(index, compVal, aveSlope, i);
+    }
+    return aveSlope;
+  }
+
+  private double ss2(int index, double compVal, int numDays) {
+    double aveSlope = 0;
+
+    for (int i = 0; condition(index, numDays, i); i++) {
+      --index;
+      aveSlope = comminSending(index, compVal, aveSlope, i);
+    }
+    return aveSlope;
+  }
+
+  private boolean condition(int idx, int n, int i){return false;}
+  private double comminSending(int idx, double d, double a, int i){return 0;}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/ParametersModification.java.after b/java/java-tests/testData/refactoring/methodDuplicatesMisc/ParametersModification.java.after
new file mode 100644
index 0000000..a4c553e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/ParametersModification.java.after
@@ -0,0 +1,19 @@
+class Test {
+  private double dd1(int index, double compVal, int numDays) {
+    double aveSlope = 0;
+
+    for (int i = 0; condition(index, numDays, i); i++) {
+      --index;
+      aveSlope = comminSending(index, compVal, aveSlope, i);
+    }
+    return aveSlope;
+  }
+
+  private double ss2(int index, double compVal, int numDays) {
+      double aveSlope = dd1(index, compVal, numDays);
+    return aveSlope;
+  }
+
+  private boolean condition(int idx, int n, int i){return false;}
+  private double comminSending(int idx, double d, double a, int i){return 0;}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/PassArray2VarargMethodCall.java b/java/java-tests/testData/refactoring/methodDuplicatesMisc/PassArray2VarargMethodCall.java
new file mode 100644
index 0000000..29de00e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/PassArray2VarargMethodCall.java
@@ -0,0 +1,13 @@
+class Test {
+  public void print<caret>Array(String... p) {
+    System.out.println(p[0]);
+    System.out.println(p[1]);
+  }
+
+  public void doSmth() {
+    String[] arr = {"smth1", "smth2", "smth3"};
+    System.out.println(arr[0]);
+    System.out.println(arr[1]);
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/PassArray2VarargMethodCall.java.after b/java/java-tests/testData/refactoring/methodDuplicatesMisc/PassArray2VarargMethodCall.java.after
new file mode 100644
index 0000000..8690575
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/PassArray2VarargMethodCall.java.after
@@ -0,0 +1,12 @@
+class Test {
+  public void printArray(String... p) {
+    System.out.println(p[0]);
+    System.out.println(p[1]);
+  }
+
+  public void doSmth() {
+    String[] arr = {"smth1", "smth2", "smth3"};
+      printArray(arr);
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/Qualifiers.java b/java/java-tests/testData/refactoring/methodDuplicatesMisc/Qualifiers.java
new file mode 100644
index 0000000..33d05b3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/Qualifiers.java
@@ -0,0 +1,20 @@
+class Utilz {
+    static int func(){
+        return 1;
+    }
+
+    static int foo1(){
+        return 2*Utilz.func();
+    }
+
+    static int fo<caret>o2(){
+        return 2*func();
+    }
+
+}
+
+class Something {
+    Something(){
+        int x = 2*Utilz.func();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/Qualifiers.java.after b/java/java-tests/testData/refactoring/methodDuplicatesMisc/Qualifiers.java.after
new file mode 100644
index 0000000..aebe8e7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/Qualifiers.java.after
@@ -0,0 +1,20 @@
+class Utilz {
+    static int func(){
+        return 1;
+    }
+
+    static int foo1(){
+        return foo2();
+    }
+
+    static int foo2(){
+        return 2*func();
+    }
+
+}
+
+class Something {
+    Something(){
+        int x = Utilz.foo2();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/SimpleConstant.java b/java/java-tests/testData/refactoring/methodDuplicatesMisc/SimpleConstant.java
new file mode 100644
index 0000000..4f7de36
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/SimpleConstant.java
@@ -0,0 +1,12 @@
+class Test {
+    public static final String A<caret>BC = "abc";
+    void foo() {
+        System.out.println("abc");
+    }
+}
+
+class Foo {
+    void bar() {
+        System.out.println("abc");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/SimpleConstant.java.after b/java/java-tests/testData/refactoring/methodDuplicatesMisc/SimpleConstant.java.after
new file mode 100644
index 0000000..c15a790
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/SimpleConstant.java.after
@@ -0,0 +1,12 @@
+class Test {
+    public static final String ABC = "abc";
+    void foo() {
+        System.out.println(ABC);
+    }
+}
+
+class Foo {
+    void bar() {
+        System.out.println(Test.ABC);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/SkipNotAccessible.java b/java/java-tests/testData/refactoring/methodDuplicatesMisc/SkipNotAccessible.java
new file mode 100644
index 0000000..6145799
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/SkipNotAccessible.java
@@ -0,0 +1,18 @@
+class B {
+    private void <caret>g() {
+           f();
+       }
+
+       private void f() {
+       }
+}
+
+
+class C extends B {
+    private void g() {
+        f();
+    }
+
+    private void f() {
+    }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/SuperInTheSameContext.java b/java/java-tests/testData/refactoring/methodDuplicatesMisc/SuperInTheSameContext.java
new file mode 100644
index 0000000..a1d887e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/SuperInTheSameContext.java
@@ -0,0 +1,17 @@
+public class a {
+    public void login() {
+        System.out.println();
+    }
+}
+
+class b extends a {
+    public void doL<caret>ogin() throws Exception {
+        super.login();
+    }
+}
+
+class c extends a {
+    public void doLogin() throws Exception {
+        super.login();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/SuperInTheSameContextQualified.java b/java/java-tests/testData/refactoring/methodDuplicatesMisc/SuperInTheSameContextQualified.java
new file mode 100644
index 0000000..cfa8195
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/SuperInTheSameContextQualified.java
@@ -0,0 +1,20 @@
+public class a {
+    public void login() {
+        System.out.println();
+    }
+}
+
+class b extends a {
+    public void doL<caret>ogin() throws Exception {
+        super.login();
+    }
+
+    public void foo() throws Exception {
+      new Runnable() {
+        public void run() {
+          b.super.login();
+        }
+      }.run();
+    }
+}
+
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/SuperInTheSameContextQualified.java.after b/java/java-tests/testData/refactoring/methodDuplicatesMisc/SuperInTheSameContextQualified.java.after
new file mode 100644
index 0000000..8fdb60b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/SuperInTheSameContextQualified.java.after
@@ -0,0 +1,20 @@
+public class a {
+    public void login() {
+        System.out.println();
+    }
+}
+
+class b extends a {
+    public void doLogin() throws Exception {
+        super.login();
+    }
+
+    public void foo() throws Exception {
+      new Runnable() {
+        public void run() {
+            doLogin();
+        }
+      }.run();
+    }
+}
+
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/UnqualifiedStaticAccess.java b/java/java-tests/testData/refactoring/methodDuplicatesMisc/UnqualifiedStaticAccess.java
new file mode 100644
index 0000000..0fba02b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/UnqualifiedStaticAccess.java
@@ -0,0 +1,17 @@
+public class aa {
+    public static boolean isVisualUpdate(int update_type) {
+        return update_type <= Iaaa.FULL_QUOTE_VISUAL;
+    }
+}
+
+interface Iaaa {
+    int FULL_QUOTE_VISUAL = 0;
+}
+
+class a implements Iaaa {
+    int update_type = 8;
+
+    public static boolean blab<caret>la(int update_type) {
+        return update_type <= FULL_QUOTE_VISUAL;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/UnqualifiedStaticAccess.java.after b/java/java-tests/testData/refactoring/methodDuplicatesMisc/UnqualifiedStaticAccess.java.after
new file mode 100644
index 0000000..440f2b0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/UnqualifiedStaticAccess.java.after
@@ -0,0 +1,17 @@
+public class aa {
+    public static boolean isVisualUpdate(int update_type) {
+        return a.blabla(update_type);
+    }
+}
+
+interface Iaaa {
+    int FULL_QUOTE_VISUAL = 0;
+}
+
+class a implements Iaaa {
+    int update_type = 8;
+
+    public static boolean blabla(int update_type) {
+        return update_type <= FULL_QUOTE_VISUAL;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/VarVarargsAccess.java b/java/java-tests/testData/refactoring/methodDuplicatesMisc/VarVarargsAccess.java
new file mode 100644
index 0000000..c031ecf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/VarVarargsAccess.java
@@ -0,0 +1,14 @@
+class A {
+  void bar(int i){
+    method(i);
+    method(i, "a");
+    method(i, "a", "b");
+  }
+
+  void m<caret>(int i, String... args) {
+    method(i, args);
+  }
+
+  void method(int i, String... args) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/VarVarargsAccess.java.after b/java/java-tests/testData/refactoring/methodDuplicatesMisc/VarVarargsAccess.java.after
new file mode 100644
index 0000000..447b90c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/VarVarargsAccess.java.after
@@ -0,0 +1,14 @@
+class A {
+  void bar(int i){
+      m(i, new String[0]);
+      m(i, "a");
+      m(i, "a", "b");
+  }
+
+  void m(int i, String... args) {
+    method(i, args);
+  }
+
+  void method(int i, String... args) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/VarargsAccess.java b/java/java-tests/testData/refactoring/methodDuplicatesMisc/VarargsAccess.java
new file mode 100644
index 0000000..4f9cacc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/VarargsAccess.java
@@ -0,0 +1,14 @@
+class A {
+  {
+    method(1);
+    method(1, "a");
+    method(1, "a", "b");
+  }
+
+  void m<caret>(String... args) {
+    method(1, args);
+  }
+
+  void method(int i, String... args) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/VarargsAccess.java.after b/java/java-tests/testData/refactoring/methodDuplicatesMisc/VarargsAccess.java.after
new file mode 100644
index 0000000..645d7c5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/VarargsAccess.java.after
@@ -0,0 +1,14 @@
+class A {
+  {
+      m(new String[0]);
+      m("a");
+      m("a", "b");
+  }
+
+  void m(String... args) {
+    method(1, args);
+  }
+
+  void method(int i, String... args) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/migration/package/after/p1/C.java b/java/java-tests/testData/refactoring/migration/package/after/p1/C.java
new file mode 100644
index 0000000..7f6f25b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/migration/package/after/p1/C.java
@@ -0,0 +1,7 @@
+package p1;
+
+import java.lang.AAA;
+
+class C {
+  AAA a = new AAA();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/migration/package/after/p1/C1.java b/java/java-tests/testData/refactoring/migration/package/after/p1/C1.java
new file mode 100644
index 0000000..cd00c1b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/migration/package/after/p1/C1.java
@@ -0,0 +1,5 @@
+package p1;
+
+class C {
+  java.lang.AAA a = new java.lang.AAA();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/migration/package/before/p1/C.java b/java/java-tests/testData/refactoring/migration/package/before/p1/C.java
new file mode 100644
index 0000000..93161dc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/migration/package/before/p1/C.java
@@ -0,0 +1,7 @@
+package p1;
+
+import qqq.AAA;
+
+class C {
+  AAA a = new AAA();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/migration/package/before/p1/C1.java b/java/java-tests/testData/refactoring/migration/package/before/p1/C1.java
new file mode 100644
index 0000000..447164b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/migration/package/before/p1/C1.java
@@ -0,0 +1,7 @@
+package p1;
+
+import qqq.*;
+
+class C {
+  qqq.AAA a = new qqq.AAA();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/migration/packageToNonExistentPackage/after/p1/C.java b/java/java-tests/testData/refactoring/migration/packageToNonExistentPackage/after/p1/C.java
new file mode 100644
index 0000000..e531d54
--- /dev/null
+++ b/java/java-tests/testData/refactoring/migration/packageToNonExistentPackage/after/p1/C.java
@@ -0,0 +1,7 @@
+package p1;
+
+import zzz.bbb.AAA;
+
+class C {
+  AAA a = new AAA();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/migration/packageToNonExistentPackage/after/p1/C1.java b/java/java-tests/testData/refactoring/migration/packageToNonExistentPackage/after/p1/C1.java
new file mode 100644
index 0000000..bd90b58
--- /dev/null
+++ b/java/java-tests/testData/refactoring/migration/packageToNonExistentPackage/after/p1/C1.java
@@ -0,0 +1,7 @@
+package p1;
+
+import zzz.bbb.*;
+
+class C {
+  zzz.bbb.AAA a = new zzz.bbb.AAA();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/migration/packageToNonExistentPackage/before/p1/C.java b/java/java-tests/testData/refactoring/migration/packageToNonExistentPackage/before/p1/C.java
new file mode 100644
index 0000000..93161dc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/migration/packageToNonExistentPackage/before/p1/C.java
@@ -0,0 +1,7 @@
+package p1;
+
+import qqq.AAA;
+
+class C {
+  AAA a = new AAA();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/migration/packageToNonExistentPackage/before/p1/C1.java b/java/java-tests/testData/refactoring/migration/packageToNonExistentPackage/before/p1/C1.java
new file mode 100644
index 0000000..447164b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/migration/packageToNonExistentPackage/before/p1/C1.java
@@ -0,0 +1,7 @@
+package p1;
+
+import qqq.*;
+
+class C {
+  qqq.AAA a = new qqq.AAA();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/migration/toNonExistentClass/after/p1/C.java b/java/java-tests/testData/refactoring/migration/toNonExistentClass/after/p1/C.java
new file mode 100644
index 0000000..197b103
--- /dev/null
+++ b/java/java-tests/testData/refactoring/migration/toNonExistentClass/after/p1/C.java
@@ -0,0 +1,7 @@
+package p1;
+
+import zzz.bbb.QQQ;
+
+class C {
+  QQQ you = new QQQ();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/migration/toNonExistentClass/after/p1/C1.java b/java/java-tests/testData/refactoring/migration/toNonExistentClass/after/p1/C1.java
new file mode 100644
index 0000000..7ba4302
--- /dev/null
+++ b/java/java-tests/testData/refactoring/migration/toNonExistentClass/after/p1/C1.java
@@ -0,0 +1,8 @@
+package p1;
+
+import qqq.aaa.*;
+import zzz.bbb.QQQ;
+
+class C1 {
+  QQQ you = new QQQ();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/migration/toNonExistentClass/before/p1/C.java b/java/java-tests/testData/refactoring/migration/toNonExistentClass/before/p1/C.java
new file mode 100644
index 0000000..c8927ef
--- /dev/null
+++ b/java/java-tests/testData/refactoring/migration/toNonExistentClass/before/p1/C.java
@@ -0,0 +1,7 @@
+package p1;
+
+import qqq.aaa.Yahoo;
+
+class C {
+  Yahoo you = new Yahoo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/migration/toNonExistentClass/before/p1/C1.java b/java/java-tests/testData/refactoring/migration/toNonExistentClass/before/p1/C1.java
new file mode 100644
index 0000000..55a71bd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/migration/toNonExistentClass/before/p1/C1.java
@@ -0,0 +1,7 @@
+package p1;
+
+import qqq.aaa.*;
+
+class C1 {
+  Yahoo you = new Yahoo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/migration/twoClasses/after/Test.java b/java/java-tests/testData/refactoring/migration/twoClasses/after/Test.java
new file mode 100644
index 0000000..4e689ea
--- /dev/null
+++ b/java/java-tests/testData/refactoring/migration/twoClasses/after/Test.java
@@ -0,0 +1,10 @@
+class A {}
+class A1 {}
+
+class B {}
+class B1 {}
+
+public class Test {
+  A1 a;
+  B1 b;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/migration/twoClasses/before/Test.java b/java/java-tests/testData/refactoring/migration/twoClasses/before/Test.java
new file mode 100644
index 0000000..c05389a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/migration/twoClasses/before/Test.java
@@ -0,0 +1,10 @@
+class A {}
+class A1 {}
+
+class B {}
+class B1 {}
+
+public class Test {
+  A a;
+  B b;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/migration/unexistingClassInUnexistingPackage/after/p1/C.java b/java/java-tests/testData/refactoring/migration/unexistingClassInUnexistingPackage/after/p1/C.java
new file mode 100644
index 0000000..3183a0f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/migration/unexistingClassInUnexistingPackage/after/p1/C.java
@@ -0,0 +1,7 @@
+package p1;
+
+import java.lang.String;
+
+class C {
+  String you = new String();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/migration/unexistingClassInUnexistingPackage/after/p1/C1.java b/java/java-tests/testData/refactoring/migration/unexistingClassInUnexistingPackage/after/p1/C1.java
new file mode 100644
index 0000000..f9533bb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/migration/unexistingClassInUnexistingPackage/after/p1/C1.java
@@ -0,0 +1,7 @@
+package p1;
+
+import qqq.aaa.*;
+
+class C1 {
+  String you = new String();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/migration/unexistingClassInUnexistingPackage/before/p1/C.java b/java/java-tests/testData/refactoring/migration/unexistingClassInUnexistingPackage/before/p1/C.java
new file mode 100644
index 0000000..c8927ef
--- /dev/null
+++ b/java/java-tests/testData/refactoring/migration/unexistingClassInUnexistingPackage/before/p1/C.java
@@ -0,0 +1,7 @@
+package p1;
+
+import qqq.aaa.Yahoo;
+
+class C {
+  Yahoo you = new Yahoo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/migration/unexistingClassInUnexistingPackage/before/p1/C1.java b/java/java-tests/testData/refactoring/migration/unexistingClassInUnexistingPackage/before/p1/C1.java
new file mode 100644
index 0000000..55a71bd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/migration/unexistingClassInUnexistingPackage/before/p1/C1.java
@@ -0,0 +1,7 @@
+package p1;
+
+import qqq.aaa.*;
+
+class C1 {
+  Yahoo you = new Yahoo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClass/classAndSecondary/after/pack1/User.java b/java/java-tests/testData/refactoring/moveClass/classAndSecondary/after/pack1/User.java
new file mode 100644
index 0000000..a431bcb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/classAndSecondary/after/pack1/User.java
@@ -0,0 +1,9 @@
+package pack1;
+
+import pack2.Class1;
+import pack2.Class2;
+
+public class User {
+  Class1 class1;
+  Class2 class2;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClass/classAndSecondary/after/pack2/Class1.java b/java/java-tests/testData/refactoring/moveClass/classAndSecondary/after/pack2/Class1.java
new file mode 100644
index 0000000..1fe416c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/classAndSecondary/after/pack2/Class1.java
@@ -0,0 +1,11 @@
+package pack2;
+
+public class Class1 {
+}
+
+/**
+ * Javadoc.
+ */
+class Class2 {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClass/classAndSecondary/after/pack2/empty.txt b/java/java-tests/testData/refactoring/moveClass/classAndSecondary/after/pack2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/classAndSecondary/after/pack2/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClass/classAndSecondary/before/pack1/Class1.java b/java/java-tests/testData/refactoring/moveClass/classAndSecondary/before/pack1/Class1.java
new file mode 100644
index 0000000..2563579
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/classAndSecondary/before/pack1/Class1.java
@@ -0,0 +1,11 @@
+package pack1;
+
+public class Class1 {
+}
+
+/**
+ * Javadoc.
+ */
+class Class2 {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClass/classAndSecondary/before/pack1/User.java b/java/java-tests/testData/refactoring/moveClass/classAndSecondary/before/pack1/User.java
new file mode 100644
index 0000000..5e461ad
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/classAndSecondary/before/pack1/User.java
@@ -0,0 +1,6 @@
+package pack1;
+
+public class User {
+  Class1 class1;
+  Class2 class2;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClass/classAndSecondary/before/pack2/empty.txt b/java/java-tests/testData/refactoring/moveClass/classAndSecondary/before/pack2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/classAndSecondary/before/pack2/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClass/contextChange1/after/pack1/Class2.java b/java/java-tests/testData/refactoring/moveClass/contextChange1/after/pack1/Class2.java
new file mode 100644
index 0000000..f9df1b3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/contextChange1/after/pack1/Class2.java
@@ -0,0 +1,4 @@
+package pack1;
+
+public class Class2 {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClass/contextChange1/after/pack1/empty.txt b/java/java-tests/testData/refactoring/moveClass/contextChange1/after/pack1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/contextChange1/after/pack1/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClass/contextChange1/after/pack2/Class1.java b/java/java-tests/testData/refactoring/moveClass/contextChange1/after/pack2/Class1.java
new file mode 100644
index 0000000..51582a6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/contextChange1/after/pack2/Class1.java
@@ -0,0 +1,7 @@
+package pack2;
+
+import pack1.Class2;
+
+public class Class1 {
+  Class2 a;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClass/contextChange1/after/pack2/empty.txt b/java/java-tests/testData/refactoring/moveClass/contextChange1/after/pack2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/contextChange1/after/pack2/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClass/contextChange1/before/pack1/Class1.java b/java/java-tests/testData/refactoring/moveClass/contextChange1/before/pack1/Class1.java
new file mode 100644
index 0000000..52baf91
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/contextChange1/before/pack1/Class1.java
@@ -0,0 +1,5 @@
+package pack1;
+
+public class Class1 {
+  Class2 a;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClass/contextChange1/before/pack1/Class2.java b/java/java-tests/testData/refactoring/moveClass/contextChange1/before/pack1/Class2.java
new file mode 100644
index 0000000..f9df1b3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/contextChange1/before/pack1/Class2.java
@@ -0,0 +1,4 @@
+package pack1;
+
+public class Class2 {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClass/contextChange1/before/pack1/empty.txt b/java/java-tests/testData/refactoring/moveClass/contextChange1/before/pack1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/contextChange1/before/pack1/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClass/contextChange1/before/pack2/empty.txt b/java/java-tests/testData/refactoring/moveClass/contextChange1/before/pack2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/contextChange1/before/pack2/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClass/contextChange2/after/pack1/Class2.java b/java/java-tests/testData/refactoring/moveClass/contextChange2/after/pack1/Class2.java
new file mode 100644
index 0000000..f9df1b3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/contextChange2/after/pack1/Class2.java
@@ -0,0 +1,4 @@
+package pack1;
+
+public class Class2 {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClass/contextChange2/after/pack1/empty.txt b/java/java-tests/testData/refactoring/moveClass/contextChange2/after/pack1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/contextChange2/after/pack1/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClass/contextChange2/after/pack2/Class1.java b/java/java-tests/testData/refactoring/moveClass/contextChange2/after/pack2/Class1.java
new file mode 100644
index 0000000..a35a0b3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/contextChange2/after/pack2/Class1.java
@@ -0,0 +1,9 @@
+package pack2;
+
+import pack1.Class2;
+
+public class Class1 {
+  void foo(){
+    Class2.xxx();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClass/contextChange2/after/pack2/empty.txt b/java/java-tests/testData/refactoring/moveClass/contextChange2/after/pack2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/contextChange2/after/pack2/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClass/contextChange2/before/pack1/Class1.java b/java/java-tests/testData/refactoring/moveClass/contextChange2/before/pack1/Class1.java
new file mode 100644
index 0000000..ce4014f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/contextChange2/before/pack1/Class1.java
@@ -0,0 +1,7 @@
+package pack1;
+
+public class Class1 {
+  void foo(){
+    Class2.xxx();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClass/contextChange2/before/pack1/Class2.java b/java/java-tests/testData/refactoring/moveClass/contextChange2/before/pack1/Class2.java
new file mode 100644
index 0000000..f9df1b3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/contextChange2/before/pack1/Class2.java
@@ -0,0 +1,4 @@
+package pack1;
+
+public class Class2 {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClass/contextChange2/before/pack1/empty.txt b/java/java-tests/testData/refactoring/moveClass/contextChange2/before/pack1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/contextChange2/before/pack1/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClass/contextChange2/before/pack2/empty.txt b/java/java-tests/testData/refactoring/moveClass/contextChange2/before/pack2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/contextChange2/before/pack2/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClass/ideadev27996/after/pack1/X.java b/java/java-tests/testData/refactoring/moveClass/ideadev27996/after/pack1/X.java
new file mode 100644
index 0000000..9db4d3e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/ideadev27996/after/pack1/X.java
@@ -0,0 +1,3 @@
+package pack1;
+
+class Y {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClass/ideadev27996/after/pack2/X.java b/java/java-tests/testData/refactoring/moveClass/ideadev27996/after/pack2/X.java
new file mode 100644
index 0000000..470ade2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/ideadev27996/after/pack2/X.java
@@ -0,0 +1,5 @@
+package pack2;
+
+public class X {
+    public void foo(X x) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClass/ideadev27996/after/pack2/empty.txt b/java/java-tests/testData/refactoring/moveClass/ideadev27996/after/pack2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/ideadev27996/after/pack2/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClass/ideadev27996/before/pack1/X.java b/java/java-tests/testData/refactoring/moveClass/ideadev27996/before/pack1/X.java
new file mode 100644
index 0000000..a2f4b81
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/ideadev27996/before/pack1/X.java
@@ -0,0 +1,6 @@
+package pack1;
+
+public class X {
+    public void foo(X x) {}
+}
+class Y {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClass/ideadev27996/before/pack2/empty.txt b/java/java-tests/testData/refactoring/moveClass/ideadev27996/before/pack2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/ideadev27996/before/pack2/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClass/jsp/after/WEB-INF/TestTEI.java b/java/java-tests/testData/refactoring/moveClass/jsp/after/WEB-INF/TestTEI.java
new file mode 100644
index 0000000..17e0dfd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/jsp/after/WEB-INF/TestTEI.java
@@ -0,0 +1,13 @@
+
+import javax.servlet.jsp.tagext.TagExtraInfo;
+import javax.servlet.jsp.tagext.VariableInfo;
+import javax.servlet.jsp.tagext.TagData;
+
+/**
+ * @author mike
+ */
+public class TestTEI extends TagExtraInfo {
+  public VariableInfo[] getVariableInfo(TagData tagData) {
+    return new VariableInfo[] { new VariableInfo("testVar", tagData.getAttributeString("class"), true, VariableInfo.AT_BEGIN) };
+  }
+}
diff --git a/java/java-tests/testData/refactoring/moveClass/jsp/after/WEB-INF/classes/TestTEI.class b/java/java-tests/testData/refactoring/moveClass/jsp/after/WEB-INF/classes/TestTEI.class
new file mode 100644
index 0000000..60f40cf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/jsp/after/WEB-INF/classes/TestTEI.class
Binary files differ
diff --git a/java/java-tests/testData/refactoring/moveClass/jsp/after/WEB-INF/test.tld b/java/java-tests/testData/refactoring/moveClass/jsp/after/WEB-INF/test.tld
new file mode 100644
index 0000000..794729a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/jsp/after/WEB-INF/test.tld
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
+
+<!-- a tab library descriptor -->
+
+<taglib>
+	<tag>	
+		<name>test</name>
+		<tagclass>TestTag</tagclass>
+		<teiclass>TestTEI</teiclass>
+		<bodycontent>jsp</bodycontent>
+	</tag>
+</taglib>
diff --git a/java/java-tests/testData/refactoring/moveClass/jsp/after/pack1/empty.txt b/java/java-tests/testData/refactoring/moveClass/jsp/after/pack1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/jsp/after/pack1/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClass/jsp/after/pack2/TestClass.java b/java/java-tests/testData/refactoring/moveClass/jsp/after/pack2/TestClass.java
new file mode 100644
index 0000000..61b88da
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/jsp/after/pack2/TestClass.java
@@ -0,0 +1,4 @@
+package pack2;
+
+public class TestClass {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClass/jsp/after/pack2/empty.txt b/java/java-tests/testData/refactoring/moveClass/jsp/after/pack2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/jsp/after/pack2/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClass/jsp/after/test.jsp b/java/java-tests/testData/refactoring/moveClass/jsp/after/test.jsp
new file mode 100644
index 0000000..cd7706c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/jsp/after/test.jsp
@@ -0,0 +1,7 @@
+<%@ taglib uri="/WEB-INF/test.tld" prefix="test" %>
+
+<test:test class="pack2.TestClass"/>
+
+<%
+    System.out.println(testVar);
+%>
diff --git a/java/java-tests/testData/refactoring/moveClass/jsp/before/WEB-INF/TestTEI.java b/java/java-tests/testData/refactoring/moveClass/jsp/before/WEB-INF/TestTEI.java
new file mode 100644
index 0000000..17e0dfd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/jsp/before/WEB-INF/TestTEI.java
@@ -0,0 +1,13 @@
+
+import javax.servlet.jsp.tagext.TagExtraInfo;
+import javax.servlet.jsp.tagext.VariableInfo;
+import javax.servlet.jsp.tagext.TagData;
+
+/**
+ * @author mike
+ */
+public class TestTEI extends TagExtraInfo {
+  public VariableInfo[] getVariableInfo(TagData tagData) {
+    return new VariableInfo[] { new VariableInfo("testVar", tagData.getAttributeString("class"), true, VariableInfo.AT_BEGIN) };
+  }
+}
diff --git a/java/java-tests/testData/refactoring/moveClass/jsp/before/WEB-INF/classes/TestTEI.class b/java/java-tests/testData/refactoring/moveClass/jsp/before/WEB-INF/classes/TestTEI.class
new file mode 100644
index 0000000..60f40cf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/jsp/before/WEB-INF/classes/TestTEI.class
Binary files differ
diff --git a/java/java-tests/testData/refactoring/moveClass/jsp/before/WEB-INF/test.tld b/java/java-tests/testData/refactoring/moveClass/jsp/before/WEB-INF/test.tld
new file mode 100644
index 0000000..794729a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/jsp/before/WEB-INF/test.tld
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
+
+<!-- a tab library descriptor -->
+
+<taglib>
+	<tag>	
+		<name>test</name>
+		<tagclass>TestTag</tagclass>
+		<teiclass>TestTEI</teiclass>
+		<bodycontent>jsp</bodycontent>
+	</tag>
+</taglib>
diff --git a/java/java-tests/testData/refactoring/moveClass/jsp/before/pack1/TestClass.java b/java/java-tests/testData/refactoring/moveClass/jsp/before/pack1/TestClass.java
new file mode 100644
index 0000000..b4a713e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/jsp/before/pack1/TestClass.java
@@ -0,0 +1,4 @@
+package pack1;
+
+public class TestClass {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClass/jsp/before/pack1/empty.txt b/java/java-tests/testData/refactoring/moveClass/jsp/before/pack1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/jsp/before/pack1/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClass/jsp/before/pack2/empty.txt b/java/java-tests/testData/refactoring/moveClass/jsp/before/pack2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/jsp/before/pack2/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClass/jsp/before/test.jsp b/java/java-tests/testData/refactoring/moveClass/jsp/before/test.jsp
new file mode 100644
index 0000000..6dca140
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/jsp/before/test.jsp
@@ -0,0 +1,7 @@
+<%@ taglib uri="/WEB-INF/test.tld" prefix="test" %>
+
+<test:test class="pack1.TestClass"/>
+
+<%
+    System.out.println(testVar);
+%>
diff --git a/java/java-tests/testData/refactoring/moveClass/localClass/after/pack1/empty.txt b/java/java-tests/testData/refactoring/moveClass/localClass/after/pack1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/localClass/after/pack1/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClass/localClass/after/pack2/A.java b/java/java-tests/testData/refactoring/moveClass/localClass/after/pack2/A.java
new file mode 100644
index 0000000..360dfe3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/localClass/after/pack2/A.java
@@ -0,0 +1,9 @@
+package pack2;
+
+public class A {
+    public void method () {
+        class X {
+        }
+        X x = new X();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClass/localClass/after/pack2/empty.txt b/java/java-tests/testData/refactoring/moveClass/localClass/after/pack2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/localClass/after/pack2/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClass/localClass/before/pack1/A.java b/java/java-tests/testData/refactoring/moveClass/localClass/before/pack1/A.java
new file mode 100644
index 0000000..af81f5c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/localClass/before/pack1/A.java
@@ -0,0 +1,9 @@
+package pack1;
+
+public class A {
+    public void method () {
+        class X {
+        }
+        X x = new X();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClass/localClass/before/pack1/empty.txt b/java/java-tests/testData/refactoring/moveClass/localClass/before/pack1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/localClass/before/pack1/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClass/localClass/before/pack2/empty.txt b/java/java-tests/testData/refactoring/moveClass/localClass/before/pack2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/localClass/before/pack2/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClass/moveMultiple1/after/pack1/empty.txt b/java/java-tests/testData/refactoring/moveClass/moveMultiple1/after/pack1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/moveMultiple1/after/pack1/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClass/moveMultiple1/after/pack2/Class1.java b/java/java-tests/testData/refactoring/moveClass/moveMultiple1/after/pack2/Class1.java
new file mode 100644
index 0000000..02b02d6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/moveMultiple1/after/pack2/Class1.java
@@ -0,0 +1,6 @@
+package pack2;
+
+public class Class1 {
+  Class2 a;
+  Class2 b;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClass/moveMultiple1/after/pack2/Class2.java b/java/java-tests/testData/refactoring/moveClass/moveMultiple1/after/pack2/Class2.java
new file mode 100644
index 0000000..107efb8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/moveMultiple1/after/pack2/Class2.java
@@ -0,0 +1,4 @@
+package pack2;
+
+public class Class2 {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClass/moveMultiple1/after/pack2/empty.txt b/java/java-tests/testData/refactoring/moveClass/moveMultiple1/after/pack2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/moveMultiple1/after/pack2/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClass/moveMultiple1/before/pack1/Class1.java b/java/java-tests/testData/refactoring/moveClass/moveMultiple1/before/pack1/Class1.java
new file mode 100644
index 0000000..2346fc1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/moveMultiple1/before/pack1/Class1.java
@@ -0,0 +1,6 @@
+package pack1;
+
+public class Class1 {
+  Class2 a;
+  Class2 b;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClass/moveMultiple1/before/pack1/Class2.java b/java/java-tests/testData/refactoring/moveClass/moveMultiple1/before/pack1/Class2.java
new file mode 100644
index 0000000..f9df1b3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/moveMultiple1/before/pack1/Class2.java
@@ -0,0 +1,4 @@
+package pack1;
+
+public class Class2 {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClass/moveMultiple1/before/pack1/empty.txt b/java/java-tests/testData/refactoring/moveClass/moveMultiple1/before/pack1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/moveMultiple1/before/pack1/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClass/moveMultiple1/before/pack2/empty.txt b/java/java-tests/testData/refactoring/moveClass/moveMultiple1/before/pack2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/moveMultiple1/before/pack2/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClass/nonJava/after/pack1/empty.txt b/java/java-tests/testData/refactoring/moveClass/nonJava/after/pack1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/nonJava/after/pack1/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClass/nonJava/after/pack2/Class1.java b/java/java-tests/testData/refactoring/moveClass/nonJava/after/pack2/Class1.java
new file mode 100644
index 0000000..9ad5269
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/nonJava/after/pack2/Class1.java
@@ -0,0 +1,4 @@
+package pack2;
+
+public class Class1 {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClass/nonJava/after/pack2/empty.txt b/java/java-tests/testData/refactoring/moveClass/nonJava/after/pack2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/nonJava/after/pack2/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClass/nonJava/after/qqq.txt b/java/java-tests/testData/refactoring/moveClass/nonJava/after/qqq.txt
new file mode 100644
index 0000000..b4cc0c2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/nonJava/after/qqq.txt
@@ -0,0 +1,3 @@
+pack2.Class1
+Class1
+pack1.Class1a
diff --git a/java/java-tests/testData/refactoring/moveClass/nonJava/before/pack1/Class1.java b/java/java-tests/testData/refactoring/moveClass/nonJava/before/pack1/Class1.java
new file mode 100644
index 0000000..231fe06
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/nonJava/before/pack1/Class1.java
@@ -0,0 +1,4 @@
+package pack1;
+
+public class Class1 {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClass/nonJava/before/pack1/empty.txt b/java/java-tests/testData/refactoring/moveClass/nonJava/before/pack1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/nonJava/before/pack1/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClass/nonJava/before/pack2/empty.txt b/java/java-tests/testData/refactoring/moveClass/nonJava/before/pack2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/nonJava/before/pack2/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClass/nonJava/before/qqq.txt b/java/java-tests/testData/refactoring/moveClass/nonJava/before/qqq.txt
new file mode 100644
index 0000000..d60dc7e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/nonJava/before/qqq.txt
@@ -0,0 +1,3 @@
+pack1.Class1
+Class1
+pack1.Class1a
diff --git a/java/java-tests/testData/refactoring/moveClass/refInPropertiesFile/after/my.properties b/java/java-tests/testData/refactoring/moveClass/refInPropertiesFile/after/my.properties
new file mode 100644
index 0000000..9b640d2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/refInPropertiesFile/after/my.properties
@@ -0,0 +1 @@
+ref = p.MyClass
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClass/refInPropertiesFile/after/p/MyClass.java b/java/java-tests/testData/refactoring/moveClass/refInPropertiesFile/after/p/MyClass.java
new file mode 100644
index 0000000..8a413bc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/refInPropertiesFile/after/p/MyClass.java
@@ -0,0 +1,2 @@
+package p;
+class MyClass{}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClass/refInPropertiesFile/after/p/empty.txt b/java/java-tests/testData/refactoring/moveClass/refInPropertiesFile/after/p/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/refInPropertiesFile/after/p/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClass/refInPropertiesFile/after/p1/empty.txt b/java/java-tests/testData/refactoring/moveClass/refInPropertiesFile/after/p1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/refInPropertiesFile/after/p1/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClass/refInPropertiesFile/before/my.properties b/java/java-tests/testData/refactoring/moveClass/refInPropertiesFile/before/my.properties
new file mode 100644
index 0000000..0804a13
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/refInPropertiesFile/before/my.properties
@@ -0,0 +1 @@
+ref = p1.MyClass
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClass/refInPropertiesFile/before/p/empty.txt b/java/java-tests/testData/refactoring/moveClass/refInPropertiesFile/before/p/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/refInPropertiesFile/before/p/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClass/refInPropertiesFile/before/p1/MyClass.java b/java/java-tests/testData/refactoring/moveClass/refInPropertiesFile/before/p1/MyClass.java
new file mode 100644
index 0000000..0864c9a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/refInPropertiesFile/before/p1/MyClass.java
@@ -0,0 +1,2 @@
+package p1;
+class MyClass{}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClass/refInPropertiesFile/before/p1/empty.txt b/java/java-tests/testData/refactoring/moveClass/refInPropertiesFile/before/p1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/refInPropertiesFile/before/p1/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClass/secondaryClass/after/pack1/Class1.java b/java/java-tests/testData/refactoring/moveClass/secondaryClass/after/pack1/Class1.java
new file mode 100644
index 0000000..1f53825
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/secondaryClass/after/pack1/Class1.java
@@ -0,0 +1,5 @@
+package pack1;
+
+public class Class1 {
+}
+
diff --git a/java/java-tests/testData/refactoring/moveClass/secondaryClass/after/pack1/Class2.java b/java/java-tests/testData/refactoring/moveClass/secondaryClass/after/pack1/Class2.java
new file mode 100644
index 0000000..8118c1a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/secondaryClass/after/pack1/Class2.java
@@ -0,0 +1,5 @@
+package pack1;
+
+class Class2 {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClass/secondaryClass/after/pack1/User.java b/java/java-tests/testData/refactoring/moveClass/secondaryClass/after/pack1/User.java
new file mode 100644
index 0000000..5e461ad
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/secondaryClass/after/pack1/User.java
@@ -0,0 +1,6 @@
+package pack1;
+
+public class User {
+  Class1 class1;
+  Class2 class2;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClass/secondaryClass/before/pack1/Class1.java b/java/java-tests/testData/refactoring/moveClass/secondaryClass/before/pack1/Class1.java
new file mode 100644
index 0000000..cbe0d00
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/secondaryClass/before/pack1/Class1.java
@@ -0,0 +1,8 @@
+package pack1;
+
+public class Class1 {
+}
+
+class Class2 {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClass/secondaryClass/before/pack1/User.java b/java/java-tests/testData/refactoring/moveClass/secondaryClass/before/pack1/User.java
new file mode 100644
index 0000000..5e461ad
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/secondaryClass/before/pack1/User.java
@@ -0,0 +1,6 @@
+package pack1;
+
+public class User {
+  Class1 class1;
+  Class2 class2;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClass/stringsAndComments/after/Client.java b/java/java-tests/testData/refactoring/moveClass/stringsAndComments/after/Client.java
new file mode 100644
index 0000000..5e86faf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/stringsAndComments/after/Client.java
@@ -0,0 +1,6 @@
+public class Client {
+  String s = "pack2.Class1";
+  // pack2.Class1
+  // apack1.Class1
+  // Class1
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClass/stringsAndComments/after/pack1/empty.txt b/java/java-tests/testData/refactoring/moveClass/stringsAndComments/after/pack1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/stringsAndComments/after/pack1/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClass/stringsAndComments/after/pack2/Class1.java b/java/java-tests/testData/refactoring/moveClass/stringsAndComments/after/pack2/Class1.java
new file mode 100644
index 0000000..9ad5269
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/stringsAndComments/after/pack2/Class1.java
@@ -0,0 +1,4 @@
+package pack2;
+
+public class Class1 {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClass/stringsAndComments/after/pack2/empty.txt b/java/java-tests/testData/refactoring/moveClass/stringsAndComments/after/pack2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/stringsAndComments/after/pack2/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClass/stringsAndComments/before/Client.java b/java/java-tests/testData/refactoring/moveClass/stringsAndComments/before/Client.java
new file mode 100644
index 0000000..85a7232
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/stringsAndComments/before/Client.java
@@ -0,0 +1,6 @@
+public class Client {
+  String s = "pack1.Class1";
+  // pack1.Class1
+  // apack1.Class1
+  // Class1
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClass/stringsAndComments/before/pack1/Class1.java b/java/java-tests/testData/refactoring/moveClass/stringsAndComments/before/pack1/Class1.java
new file mode 100644
index 0000000..231fe06
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/stringsAndComments/before/pack1/Class1.java
@@ -0,0 +1,4 @@
+package pack1;
+
+public class Class1 {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClass/stringsAndComments/before/pack1/empty.txt b/java/java-tests/testData/refactoring/moveClass/stringsAndComments/before/pack1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/stringsAndComments/before/pack1/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClass/stringsAndComments/before/pack2/empty.txt b/java/java-tests/testData/refactoring/moveClass/stringsAndComments/before/pack2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/stringsAndComments/before/pack2/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClass/stringsAndComments2/after/pack1/empty.txt b/java/java-tests/testData/refactoring/moveClass/stringsAndComments2/after/pack1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/stringsAndComments2/after/pack1/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClass/stringsAndComments2/after/pack2/AClass.java b/java/java-tests/testData/refactoring/moveClass/stringsAndComments2/after/pack2/AClass.java
new file mode 100644
index 0000000..4e4dc16
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/stringsAndComments2/after/pack2/AClass.java
@@ -0,0 +1,5 @@
+package pack2;
+
+public class AClass {
+  String s = "pack2.AClass";
+}
diff --git a/java/java-tests/testData/refactoring/moveClass/stringsAndComments2/after/pack2/empty.txt b/java/java-tests/testData/refactoring/moveClass/stringsAndComments2/after/pack2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/stringsAndComments2/after/pack2/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClass/stringsAndComments2/before/pack1/AClass.java b/java/java-tests/testData/refactoring/moveClass/stringsAndComments2/before/pack1/AClass.java
new file mode 100644
index 0000000..7cde37c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/stringsAndComments2/before/pack1/AClass.java
@@ -0,0 +1,5 @@
+package pack1;
+
+public class AClass {
+  String s = "pack1.AClass";
+}
diff --git a/java/java-tests/testData/refactoring/moveClass/stringsAndComments2/before/pack1/empty.txt b/java/java-tests/testData/refactoring/moveClass/stringsAndComments2/before/pack1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/stringsAndComments2/before/pack1/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClass/stringsAndComments2/before/pack2/empty.txt b/java/java-tests/testData/refactoring/moveClass/stringsAndComments2/before/pack2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/stringsAndComments2/before/pack2/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClass/unusedImport/after/p1/F1.java b/java/java-tests/testData/refactoring/moveClass/unusedImport/after/p1/F1.java
new file mode 100644
index 0000000..a91bb55
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/unusedImport/after/p1/F1.java
@@ -0,0 +1,5 @@
+package p1;
+
+class F1 {
+  F2 f2;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClass/unusedImport/after/p1/F2.java b/java/java-tests/testData/refactoring/moveClass/unusedImport/after/p1/F2.java
new file mode 100644
index 0000000..11d0ffd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/unusedImport/after/p1/F2.java
@@ -0,0 +1,3 @@
+package p1;
+
+public class F2 {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClass/unusedImport/after/p2/empty.txt b/java/java-tests/testData/refactoring/moveClass/unusedImport/after/p2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/unusedImport/after/p2/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClass/unusedImport/before/p1/F1.java b/java/java-tests/testData/refactoring/moveClass/unusedImport/before/p1/F1.java
new file mode 100644
index 0000000..dcbc613
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/unusedImport/before/p1/F1.java
@@ -0,0 +1,7 @@
+package p1;
+
+import p2.F2;
+
+class F1 {
+  F2 f2;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClass/unusedImport/before/p2/F2.java b/java/java-tests/testData/refactoring/moveClass/unusedImport/before/p2/F2.java
new file mode 100644
index 0000000..5edd27d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/unusedImport/before/p2/F2.java
@@ -0,0 +1,3 @@
+package p2;
+
+public class F2 {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClass/unusedImport/before/p2/empty.txt b/java/java-tests/testData/refactoring/moveClass/unusedImport/before/p2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClass/unusedImport/before/p2/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/after/s/empty.txt b/java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/after/s/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/after/s/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/after/t/MyClass.java b/java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/after/t/MyClass.java
new file mode 100644
index 0000000..d16c196
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/after/t/MyClass.java
@@ -0,0 +1,3 @@
+package t;
+class MyClass{}
+class MyOneMoreClass{}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/after/t/empty.txt b/java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/after/t/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/after/t/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/after/t/txt2move.txt b/java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/after/t/txt2move.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/after/t/txt2move.txt
diff --git a/java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/before/s/MyClass.java b/java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/before/s/MyClass.java
new file mode 100644
index 0000000..222b6d2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/before/s/MyClass.java
@@ -0,0 +1,3 @@
+package s;
+class MyClass{}
+class MyOneMoreClass{}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/before/s/empty.txt b/java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/before/s/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/before/s/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/before/s/txt2move.txt b/java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/before/s/txt2move.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/before/s/txt2move.txt
diff --git a/java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/before/t/empty.txt b/java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/before/t/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/before/t/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/after/s/MyLocal.java b/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/after/s/MyLocal.java
new file mode 100644
index 0000000..2f4a3c1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/after/s/MyLocal.java
@@ -0,0 +1,3 @@
+package s;
+
+class MyLocal{}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/after/s/empty.txt b/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/after/s/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/after/s/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/after/t/MyClass.java b/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/after/t/MyClass.java
new file mode 100644
index 0000000..c6cc48a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/after/t/MyClass.java
@@ -0,0 +1,2 @@
+package t;
+public class MyClass{}
diff --git a/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/after/t/empty.txt b/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/after/t/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/after/t/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/after/t/txt2move.txt b/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/after/t/txt2move.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/after/t/txt2move.txt
diff --git a/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/before/s/MyClass.java b/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/before/s/MyClass.java
new file mode 100644
index 0000000..04f95fa
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/before/s/MyClass.java
@@ -0,0 +1,3 @@
+package s;
+public class MyClass{}
+class MyLocal{}
diff --git a/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/before/s/empty.txt b/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/before/s/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/before/s/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/before/s/txt2move.txt b/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/before/s/txt2move.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/before/s/txt2move.txt
diff --git a/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/before/t/empty.txt b/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/before/t/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/before/t/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassAndFile/onlyPackageLocalClass/after/s/MyClass.java b/java/java-tests/testData/refactoring/moveClassAndFile/onlyPackageLocalClass/after/s/MyClass.java
new file mode 100644
index 0000000..5bcead3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassAndFile/onlyPackageLocalClass/after/s/MyClass.java
@@ -0,0 +1,2 @@
+package s;
+public class MyClass{}
diff --git a/java/java-tests/testData/refactoring/moveClassAndFile/onlyPackageLocalClass/after/s/empty.txt b/java/java-tests/testData/refactoring/moveClassAndFile/onlyPackageLocalClass/after/s/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassAndFile/onlyPackageLocalClass/after/s/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassAndFile/onlyPackageLocalClass/after/t/MyLocal.java b/java/java-tests/testData/refactoring/moveClassAndFile/onlyPackageLocalClass/after/t/MyLocal.java
new file mode 100644
index 0000000..91dd34d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassAndFile/onlyPackageLocalClass/after/t/MyLocal.java
@@ -0,0 +1,3 @@
+package t;
+
+class MyLocal{}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassAndFile/onlyPackageLocalClass/after/t/empty.txt b/java/java-tests/testData/refactoring/moveClassAndFile/onlyPackageLocalClass/after/t/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassAndFile/onlyPackageLocalClass/after/t/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassAndFile/onlyPackageLocalClass/after/t/txt2move.txt b/java/java-tests/testData/refactoring/moveClassAndFile/onlyPackageLocalClass/after/t/txt2move.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassAndFile/onlyPackageLocalClass/after/t/txt2move.txt
diff --git a/java/java-tests/testData/refactoring/moveClassAndFile/onlyPackageLocalClass/before/s/MyClass.java b/java/java-tests/testData/refactoring/moveClassAndFile/onlyPackageLocalClass/before/s/MyClass.java
new file mode 100644
index 0000000..04f95fa
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassAndFile/onlyPackageLocalClass/before/s/MyClass.java
@@ -0,0 +1,3 @@
+package s;
+public class MyClass{}
+class MyLocal{}
diff --git a/java/java-tests/testData/refactoring/moveClassAndFile/onlyPackageLocalClass/before/s/empty.txt b/java/java-tests/testData/refactoring/moveClassAndFile/onlyPackageLocalClass/before/s/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassAndFile/onlyPackageLocalClass/before/s/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassAndFile/onlyPackageLocalClass/before/s/txt2move.txt b/java/java-tests/testData/refactoring/moveClassAndFile/onlyPackageLocalClass/before/s/txt2move.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassAndFile/onlyPackageLocalClass/before/s/txt2move.txt
diff --git a/java/java-tests/testData/refactoring/moveClassAndFile/onlyPackageLocalClass/before/t/empty.txt b/java/java-tests/testData/refactoring/moveClassAndFile/onlyPackageLocalClass/before/t/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassAndFile/onlyPackageLocalClass/before/t/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/contextChange1/after/pack1/Class2.java b/java/java-tests/testData/refactoring/moveClassToInner/contextChange1/after/pack1/Class2.java
new file mode 100644
index 0000000..f9df1b3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/contextChange1/after/pack1/Class2.java
@@ -0,0 +1,4 @@
+package pack1;
+
+public class Class2 {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/contextChange1/after/pack1/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/contextChange1/after/pack1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/contextChange1/after/pack1/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/contextChange1/after/pack2/A.java b/java/java-tests/testData/refactoring/moveClassToInner/contextChange1/after/pack2/A.java
new file mode 100644
index 0000000..3b7c5a9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/contextChange1/after/pack2/A.java
@@ -0,0 +1,9 @@
+package pack2;
+
+import pack1.Class2;
+
+public class A {
+    public static class Class1 {
+        Class2 a;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/contextChange1/after/pack2/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/contextChange1/after/pack2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/contextChange1/after/pack2/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/contextChange1/before/pack1/Class1.java b/java/java-tests/testData/refactoring/moveClassToInner/contextChange1/before/pack1/Class1.java
new file mode 100644
index 0000000..d7115cf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/contextChange1/before/pack1/Class1.java
@@ -0,0 +1,5 @@
+package pack1;
+
+public class Class1 {
+    Class2 a;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/contextChange1/before/pack1/Class2.java b/java/java-tests/testData/refactoring/moveClassToInner/contextChange1/before/pack1/Class2.java
new file mode 100644
index 0000000..f9df1b3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/contextChange1/before/pack1/Class2.java
@@ -0,0 +1,4 @@
+package pack1;
+
+public class Class2 {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/contextChange1/before/pack1/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/contextChange1/before/pack1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/contextChange1/before/pack1/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/contextChange1/before/pack2/A.java b/java/java-tests/testData/refactoring/moveClassToInner/contextChange1/before/pack2/A.java
new file mode 100644
index 0000000..e1886e5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/contextChange1/before/pack2/A.java
@@ -0,0 +1,4 @@
+package pack2;
+
+public class A {
+}
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/contextChange1/before/pack2/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/contextChange1/before/pack2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/contextChange1/before/pack2/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/contextChange2/after/pack1/Class2.java b/java/java-tests/testData/refactoring/moveClassToInner/contextChange2/after/pack1/Class2.java
new file mode 100644
index 0000000..f9df1b3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/contextChange2/after/pack1/Class2.java
@@ -0,0 +1,4 @@
+package pack1;
+
+public class Class2 {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/contextChange2/after/pack1/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/contextChange2/after/pack1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/contextChange2/after/pack1/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/contextChange2/after/pack2/A.java b/java/java-tests/testData/refactoring/moveClassToInner/contextChange2/after/pack2/A.java
new file mode 100644
index 0000000..305a9c7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/contextChange2/after/pack2/A.java
@@ -0,0 +1,11 @@
+package pack2;
+
+import pack1.Class2;
+
+public class A {
+    public static class Class1 {
+      void foo(){
+        Class2.xxx();
+      }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/contextChange2/after/pack2/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/contextChange2/after/pack2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/contextChange2/after/pack2/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/contextChange2/before/pack1/Class1.java b/java/java-tests/testData/refactoring/moveClassToInner/contextChange2/before/pack1/Class1.java
new file mode 100644
index 0000000..ce4014f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/contextChange2/before/pack1/Class1.java
@@ -0,0 +1,7 @@
+package pack1;
+
+public class Class1 {
+  void foo(){
+    Class2.xxx();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/contextChange2/before/pack1/Class2.java b/java/java-tests/testData/refactoring/moveClassToInner/contextChange2/before/pack1/Class2.java
new file mode 100644
index 0000000..f9df1b3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/contextChange2/before/pack1/Class2.java
@@ -0,0 +1,4 @@
+package pack1;
+
+public class Class2 {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/contextChange2/before/pack1/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/contextChange2/before/pack1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/contextChange2/before/pack1/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/contextChange2/before/pack2/A.java b/java/java-tests/testData/refactoring/moveClassToInner/contextChange2/before/pack2/A.java
new file mode 100644
index 0000000..e1886e5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/contextChange2/before/pack2/A.java
@@ -0,0 +1,4 @@
+package pack2;
+
+public class A {
+}
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/contextChange2/before/pack2/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/contextChange2/before/pack2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/contextChange2/before/pack2/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/duplicateInner/before/pack1/Class1.java b/java/java-tests/testData/refactoring/moveClassToInner/duplicateInner/before/pack1/Class1.java
new file mode 100644
index 0000000..37758f6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/duplicateInner/before/pack1/Class1.java
@@ -0,0 +1,4 @@
+package pack1;
+
+public class Class1 {
+}
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/duplicateInner/before/pack2/A.java b/java/java-tests/testData/refactoring/moveClassToInner/duplicateInner/before/pack2/A.java
new file mode 100644
index 0000000..47c4c54
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/duplicateInner/before/pack2/A.java
@@ -0,0 +1,6 @@
+package pack2;
+
+class A {
+  private class Class1 {
+  }
+}
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/innerImport/after/pack1/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/innerImport/after/pack1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/innerImport/after/pack1/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/innerImport/after/pack2/A.java b/java/java-tests/testData/refactoring/moveClassToInner/innerImport/after/pack2/A.java
new file mode 100644
index 0000000..c8900d9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/innerImport/after/pack2/A.java
@@ -0,0 +1,6 @@
+package pack2;
+
+public class A {
+    public static class Class1 {
+    }
+}
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/innerImport/after/pack2/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/innerImport/after/pack2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/innerImport/after/pack2/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/innerImport/after/packUser/Class2.java b/java/java-tests/testData/refactoring/moveClassToInner/innerImport/after/packUser/Class2.java
new file mode 100644
index 0000000..8ce4603
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/innerImport/after/packUser/Class2.java
@@ -0,0 +1,7 @@
+package packUser;
+
+import pack2.A;
+
+public class Class2 {
+  A.Class1 myClass1;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/innerImport/before/pack1/Class1.java b/java/java-tests/testData/refactoring/moveClassToInner/innerImport/before/pack1/Class1.java
new file mode 100644
index 0000000..231fe06
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/innerImport/before/pack1/Class1.java
@@ -0,0 +1,4 @@
+package pack1;
+
+public class Class1 {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/innerImport/before/pack1/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/innerImport/before/pack1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/innerImport/before/pack1/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/innerImport/before/pack2/A.java b/java/java-tests/testData/refactoring/moveClassToInner/innerImport/before/pack2/A.java
new file mode 100644
index 0000000..e1886e5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/innerImport/before/pack2/A.java
@@ -0,0 +1,4 @@
+package pack2;
+
+public class A {
+}
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/innerImport/before/pack2/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/innerImport/before/pack2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/innerImport/before/pack2/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/innerImport/before/packUser/Class2.java b/java/java-tests/testData/refactoring/moveClassToInner/innerImport/before/packUser/Class2.java
new file mode 100644
index 0000000..155cfe0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/innerImport/before/packUser/Class2.java
@@ -0,0 +1,7 @@
+package packUser;
+
+import pack1.Class1;
+
+public class Class2 {
+  Class1 myClass1;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/after/pack1/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/after/pack1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/after/pack1/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/after/pack2/A.java b/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/after/pack2/A.java
new file mode 100644
index 0000000..c8900d9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/after/pack2/A.java
@@ -0,0 +1,6 @@
+package pack2;
+
+public class A {
+    public static class Class1 {
+    }
+}
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/after/pack2/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/after/pack2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/after/pack2/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/after/packUser/Class2.java b/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/after/packUser/Class2.java
new file mode 100644
index 0000000..db5d64d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/after/packUser/Class2.java
@@ -0,0 +1,7 @@
+package packUser;
+
+import pack2.A.Class1;
+
+public class Class2 {
+  Class1 myClass1;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/before/pack1/Class1.java b/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/before/pack1/Class1.java
new file mode 100644
index 0000000..231fe06
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/before/pack1/Class1.java
@@ -0,0 +1,4 @@
+package pack1;
+
+public class Class1 {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/before/pack1/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/before/pack1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/before/pack1/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/before/pack2/A.java b/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/before/pack2/A.java
new file mode 100644
index 0000000..e1886e5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/before/pack2/A.java
@@ -0,0 +1,4 @@
+package pack2;
+
+public class A {
+}
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/before/pack2/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/before/pack2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/before/pack2/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/before/packUser/Class2.java b/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/before/packUser/Class2.java
new file mode 100644
index 0000000..155cfe0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/before/packUser/Class2.java
@@ -0,0 +1,7 @@
+package packUser;
+
+import pack1.Class1;
+
+public class Class2 {
+  Class1 myClass1;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/after/pack1/Usage.java b/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/after/pack1/Usage.java
new file mode 100644
index 0000000..94cfc26
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/after/pack1/Usage.java
@@ -0,0 +1,7 @@
+package pack1;
+
+import pack2.A;
+
+class Usage {
+  A.Class1 cl1;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/after/pack1/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/after/pack1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/after/pack1/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/after/pack2/A.java b/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/after/pack2/A.java
new file mode 100644
index 0000000..afe56184
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/after/pack2/A.java
@@ -0,0 +1,6 @@
+package pack2;
+
+public interface A {
+    class Class1 {
+    }
+}
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/after/pack2/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/after/pack2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/after/pack2/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/before/pack1/Class1.java b/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/before/pack1/Class1.java
new file mode 100644
index 0000000..9fb4668
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/before/pack1/Class1.java
@@ -0,0 +1,4 @@
+package pack1;
+
+class Class1 {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/before/pack1/Usage.java b/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/before/pack1/Usage.java
new file mode 100644
index 0000000..d7e8ed6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/before/pack1/Usage.java
@@ -0,0 +1,4 @@
+package pack1;
+class Usage {
+  Class1 cl1;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/before/pack1/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/before/pack1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/before/pack1/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/before/pack2/A.java b/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/before/pack2/A.java
new file mode 100644
index 0000000..abd77b4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/before/pack2/A.java
@@ -0,0 +1,4 @@
+package pack2;
+
+public interface A {
+}
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/before/pack2/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/before/pack2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/before/pack2/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/moveIntoPackageLocalClass/before/pack1/Class1.java b/java/java-tests/testData/refactoring/moveClassToInner/moveIntoPackageLocalClass/before/pack1/Class1.java
new file mode 100644
index 0000000..37758f6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/moveIntoPackageLocalClass/before/pack1/Class1.java
@@ -0,0 +1,4 @@
+package pack1;
+
+public class Class1 {
+}
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/moveIntoPackageLocalClass/before/pack1/Class2.java b/java/java-tests/testData/refactoring/moveClassToInner/moveIntoPackageLocalClass/before/pack1/Class2.java
new file mode 100644
index 0000000..64c3f5b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/moveIntoPackageLocalClass/before/pack1/Class2.java
@@ -0,0 +1,5 @@
+package pack1;
+
+class Class2 {
+   Class1 c1;
+}
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/moveIntoPackageLocalClass/before/pack2/A.java b/java/java-tests/testData/refactoring/moveClassToInner/moveIntoPackageLocalClass/before/pack2/A.java
new file mode 100644
index 0000000..b3f0fbe
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/moveIntoPackageLocalClass/before/pack2/A.java
@@ -0,0 +1,4 @@
+package pack2;
+
+class A {
+}
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/moveIntoPrivateInnerClass/before/pack1/A.java b/java/java-tests/testData/refactoring/moveClassToInner/moveIntoPrivateInnerClass/before/pack1/A.java
new file mode 100644
index 0000000..e426c20
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/moveIntoPrivateInnerClass/before/pack1/A.java
@@ -0,0 +1,6 @@
+package pack1;
+
+public class A {
+  private static class PrivateInner {
+  }
+}
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/moveIntoPrivateInnerClass/before/pack1/Class1.java b/java/java-tests/testData/refactoring/moveClassToInner/moveIntoPrivateInnerClass/before/pack1/Class1.java
new file mode 100644
index 0000000..37758f6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/moveIntoPrivateInnerClass/before/pack1/Class1.java
@@ -0,0 +1,4 @@
+package pack1;
+
+public class Class1 {
+}
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/moveIntoPrivateInnerClass/before/pack1/Class2.java b/java/java-tests/testData/refactoring/moveClassToInner/moveIntoPrivateInnerClass/before/pack1/Class2.java
new file mode 100644
index 0000000..ef50b97
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/moveIntoPrivateInnerClass/before/pack1/Class2.java
@@ -0,0 +1,5 @@
+package pack1;
+
+public class Class2 {
+   Class1 c1;
+}
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/moveMultiple1/after/pack1/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/moveMultiple1/after/pack1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/moveMultiple1/after/pack1/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/moveMultiple1/after/pack2/A.java b/java/java-tests/testData/refactoring/moveClassToInner/moveMultiple1/after/pack2/A.java
new file mode 100644
index 0000000..b3a02ac
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/moveMultiple1/after/pack2/A.java
@@ -0,0 +1,11 @@
+package pack2;
+
+public class A {
+    public static class Class1 {
+      Class2 a;
+      Class2 b;
+    }
+
+    public static class Class2 {
+    }
+}
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/moveMultiple1/after/pack2/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/moveMultiple1/after/pack2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/moveMultiple1/after/pack2/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/moveMultiple1/before/pack1/Class1.java b/java/java-tests/testData/refactoring/moveClassToInner/moveMultiple1/before/pack1/Class1.java
new file mode 100644
index 0000000..2346fc1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/moveMultiple1/before/pack1/Class1.java
@@ -0,0 +1,6 @@
+package pack1;
+
+public class Class1 {
+  Class2 a;
+  Class2 b;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/moveMultiple1/before/pack1/Class2.java b/java/java-tests/testData/refactoring/moveClassToInner/moveMultiple1/before/pack1/Class2.java
new file mode 100644
index 0000000..f9df1b3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/moveMultiple1/before/pack1/Class2.java
@@ -0,0 +1,4 @@
+package pack1;
+
+public class Class2 {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/moveMultiple1/before/pack1/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/moveMultiple1/before/pack1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/moveMultiple1/before/pack1/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/moveMultiple1/before/pack2/A.java b/java/java-tests/testData/refactoring/moveClassToInner/moveMultiple1/before/pack2/A.java
new file mode 100644
index 0000000..e1886e5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/moveMultiple1/before/pack2/A.java
@@ -0,0 +1,4 @@
+package pack2;
+
+public class A {
+}
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/moveMultiple1/before/pack2/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/moveMultiple1/before/pack2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/moveMultiple1/before/pack2/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/moveOfPackageLocalClass/before/pack1/Class1.java b/java/java-tests/testData/refactoring/moveClassToInner/moveOfPackageLocalClass/before/pack1/Class1.java
new file mode 100644
index 0000000..8dce441
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/moveOfPackageLocalClass/before/pack1/Class1.java
@@ -0,0 +1,4 @@
+package pack1;
+
+class Class1 {
+}
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/moveOfPackageLocalClass/before/pack1/Class2.java b/java/java-tests/testData/refactoring/moveClassToInner/moveOfPackageLocalClass/before/pack1/Class2.java
new file mode 100644
index 0000000..64c3f5b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/moveOfPackageLocalClass/before/pack1/Class2.java
@@ -0,0 +1,5 @@
+package pack1;
+
+class Class2 {
+   Class1 c1;
+}
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/moveOfPackageLocalClass/before/pack2/A.java b/java/java-tests/testData/refactoring/moveClassToInner/moveOfPackageLocalClass/before/pack2/A.java
new file mode 100644
index 0000000..e1886e5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/moveOfPackageLocalClass/before/pack2/A.java
@@ -0,0 +1,4 @@
+package pack2;
+
+public class A {
+}
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/moveWithPackageLocalMember/before/pack1/Class1.java b/java/java-tests/testData/refactoring/moveClassToInner/moveWithPackageLocalMember/before/pack1/Class1.java
new file mode 100644
index 0000000..4480d5f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/moveWithPackageLocalMember/before/pack1/Class1.java
@@ -0,0 +1,6 @@
+package pack1;
+
+public class Class1 {
+  void doStuff() {
+  }
+}
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/moveWithPackageLocalMember/before/pack1/Class2.java b/java/java-tests/testData/refactoring/moveClassToInner/moveWithPackageLocalMember/before/pack1/Class2.java
new file mode 100644
index 0000000..53e253b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/moveWithPackageLocalMember/before/pack1/Class2.java
@@ -0,0 +1,8 @@
+package pack1;
+
+class Class2 {
+   public void test() {
+     Class1 c1 = new Class1();
+     c1.doStuff();
+   }
+}
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/moveWithPackageLocalMember/before/pack2/A.java b/java/java-tests/testData/refactoring/moveClassToInner/moveWithPackageLocalMember/before/pack2/A.java
new file mode 100644
index 0000000..e1886e5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/moveWithPackageLocalMember/before/pack2/A.java
@@ -0,0 +1,4 @@
+package pack2;
+
+public class A {
+}
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/nonJava/after/pack1/A.java b/java/java-tests/testData/refactoring/moveClassToInner/nonJava/after/pack1/A.java
new file mode 100644
index 0000000..64974c0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/nonJava/after/pack1/A.java
@@ -0,0 +1,6 @@
+package pack1;
+
+public class A {
+    public static class Class1 {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/nonJava/after/pack1/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/nonJava/after/pack1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/nonJava/after/pack1/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/nonJava/after/qqq.txt b/java/java-tests/testData/refactoring/moveClassToInner/nonJava/after/qqq.txt
new file mode 100644
index 0000000..311c9b9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/nonJava/after/qqq.txt
@@ -0,0 +1,3 @@
+pack1.A.Class1
+Class1
+pack1.Class1a
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/nonJava/before/pack1/A.java b/java/java-tests/testData/refactoring/moveClassToInner/nonJava/before/pack1/A.java
new file mode 100644
index 0000000..46fc78f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/nonJava/before/pack1/A.java
@@ -0,0 +1,4 @@
+package pack1;
+
+public class A {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/nonJava/before/pack1/Class1.java b/java/java-tests/testData/refactoring/moveClassToInner/nonJava/before/pack1/Class1.java
new file mode 100644
index 0000000..231fe06
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/nonJava/before/pack1/Class1.java
@@ -0,0 +1,4 @@
+package pack1;
+
+public class Class1 {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/nonJava/before/pack1/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/nonJava/before/pack1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/nonJava/before/pack1/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/nonJava/before/qqq.txt b/java/java-tests/testData/refactoring/moveClassToInner/nonJava/before/qqq.txt
new file mode 100644
index 0000000..d60dc7e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/nonJava/before/qqq.txt
@@ -0,0 +1,3 @@
+pack1.Class1
+Class1
+pack1.Class1a
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/packageLocalClass/before/pack1/Class1.java b/java/java-tests/testData/refactoring/moveClassToInner/packageLocalClass/before/pack1/Class1.java
new file mode 100644
index 0000000..49899f5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/packageLocalClass/before/pack1/Class1.java
@@ -0,0 +1,5 @@
+package pack1;
+
+public class Class1 {
+  private Class2 c2;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/packageLocalClass/before/pack1/Class2.java b/java/java-tests/testData/refactoring/moveClassToInner/packageLocalClass/before/pack1/Class2.java
new file mode 100644
index 0000000..19c1202
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/packageLocalClass/before/pack1/Class2.java
@@ -0,0 +1,4 @@
+package pack1;
+
+class Class2 {
+}
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/packageLocalClass/before/pack2/A.java b/java/java-tests/testData/refactoring/moveClassToInner/packageLocalClass/before/pack2/A.java
new file mode 100644
index 0000000..e1886e5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/packageLocalClass/before/pack2/A.java
@@ -0,0 +1,4 @@
+package pack2;
+
+public class A {
+}
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/refToConstructor/after/pack1/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/refToConstructor/after/pack1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/refToConstructor/after/pack1/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/refToConstructor/after/pack2/A.java b/java/java-tests/testData/refactoring/moveClassToInner/refToConstructor/after/pack2/A.java
new file mode 100644
index 0000000..22a76e8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/refToConstructor/after/pack2/A.java
@@ -0,0 +1,9 @@
+package pack2;
+
+public class A {
+    public static class Class1 {
+        public static Class1 createInstance() {
+            return new Class1();
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/refToConstructor/after/pack2/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/refToConstructor/after/pack2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/refToConstructor/after/pack2/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/refToConstructor/before/pack1/Class1.java b/java/java-tests/testData/refactoring/moveClassToInner/refToConstructor/before/pack1/Class1.java
new file mode 100644
index 0000000..c4ba809
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/refToConstructor/before/pack1/Class1.java
@@ -0,0 +1,7 @@
+package pack1;
+
+public class Class1 {
+    public static Class1 createInstance() {
+        return new Class1();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/refToConstructor/before/pack1/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/refToConstructor/before/pack1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/refToConstructor/before/pack1/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/refToConstructor/before/pack2/A.java b/java/java-tests/testData/refactoring/moveClassToInner/refToConstructor/before/pack2/A.java
new file mode 100644
index 0000000..e1886e5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/refToConstructor/before/pack2/A.java
@@ -0,0 +1,4 @@
+package pack2;
+
+public class A {
+}
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/refToConstructor/before/pack2/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/refToConstructor/before/pack2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/refToConstructor/before/pack2/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/refToInner/after/pack1/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/refToInner/after/pack1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/refToInner/after/pack1/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/refToInner/after/pack2/A.java b/java/java-tests/testData/refactoring/moveClassToInner/refToInner/after/pack2/A.java
new file mode 100644
index 0000000..2ebfa67
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/refToInner/after/pack2/A.java
@@ -0,0 +1,11 @@
+package pack2;
+
+public class A {
+    public static class Class1 {
+        private class Inner {
+
+        }
+
+        private Inner i;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/refToInner/after/pack2/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/refToInner/after/pack2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/refToInner/after/pack2/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/refToInner/before/pack1/Class1.java b/java/java-tests/testData/refactoring/moveClassToInner/refToInner/before/pack1/Class1.java
new file mode 100644
index 0000000..431cdb8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/refToInner/before/pack1/Class1.java
@@ -0,0 +1,9 @@
+package pack1;
+
+public class Class1 {
+    private class Inner {
+
+    }
+
+    private Inner i;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/refToInner/before/pack1/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/refToInner/before/pack1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/refToInner/before/pack1/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/refToInner/before/pack2/A.java b/java/java-tests/testData/refactoring/moveClassToInner/refToInner/before/pack2/A.java
new file mode 100644
index 0000000..e1886e5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/refToInner/before/pack2/A.java
@@ -0,0 +1,4 @@
+package pack2;
+
+public class A {
+}
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/refToInner/before/pack2/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/refToInner/before/pack2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/refToInner/before/pack2/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/secondaryClass/after/pack1/Class1.java b/java/java-tests/testData/refactoring/moveClassToInner/secondaryClass/after/pack1/Class1.java
new file mode 100644
index 0000000..1f53825
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/secondaryClass/after/pack1/Class1.java
@@ -0,0 +1,5 @@
+package pack1;
+
+public class Class1 {
+}
+
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/secondaryClass/after/pack1/User.java b/java/java-tests/testData/refactoring/moveClassToInner/secondaryClass/after/pack1/User.java
new file mode 100644
index 0000000..879fff7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/secondaryClass/after/pack1/User.java
@@ -0,0 +1,10 @@
+package pack1;
+
+public class User {
+  Class1 class1;
+  Class2 class2;
+
+    static class Class2 {
+
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/secondaryClass/before/pack1/Class1.java b/java/java-tests/testData/refactoring/moveClassToInner/secondaryClass/before/pack1/Class1.java
new file mode 100644
index 0000000..cbe0d00
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/secondaryClass/before/pack1/Class1.java
@@ -0,0 +1,8 @@
+package pack1;
+
+public class Class1 {
+}
+
+class Class2 {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/secondaryClass/before/pack1/User.java b/java/java-tests/testData/refactoring/moveClassToInner/secondaryClass/before/pack1/User.java
new file mode 100644
index 0000000..5e461ad
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/secondaryClass/before/pack1/User.java
@@ -0,0 +1,6 @@
+package pack1;
+
+public class User {
+  Class1 class1;
+  Class2 class2;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/simultaneousMove/after/pack0/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/simultaneousMove/after/pack0/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/simultaneousMove/after/pack0/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/simultaneousMove/after/pack1/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/simultaneousMove/after/pack1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/simultaneousMove/after/pack1/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/simultaneousMove/after/pack2/A.java b/java/java-tests/testData/refactoring/moveClassToInner/simultaneousMove/after/pack2/A.java
new file mode 100644
index 0000000..bb3f1f9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/simultaneousMove/after/pack2/A.java
@@ -0,0 +1,17 @@
+package pack2;
+
+public class A {
+    /**
+     * pack2.A.Class0
+     */
+    public static class Class1 {
+      Class0 cl0;
+    }
+
+    /**
+     * pack2.A.Class1
+     */
+    public static class Class0 {
+      Class1 cl1;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/simultaneousMove/after/pack2/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/simultaneousMove/after/pack2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/simultaneousMove/after/pack2/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/simultaneousMove/after/packUser/Class2.java b/java/java-tests/testData/refactoring/moveClassToInner/simultaneousMove/after/packUser/Class2.java
new file mode 100644
index 0000000..b29e5c6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/simultaneousMove/after/packUser/Class2.java
@@ -0,0 +1,12 @@
+package packUser;
+
+import pack2.A;
+
+/**
+ * pack2.A.Class1
+ * pack2.A.Class0
+ */
+public class Class2 {
+  A.Class1 myClass1;
+  A.Class0 myClass0;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/simultaneousMove/before/pack0/Class0.java b/java/java-tests/testData/refactoring/moveClassToInner/simultaneousMove/before/pack0/Class0.java
new file mode 100644
index 0000000..2a4bd48
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/simultaneousMove/before/pack0/Class0.java
@@ -0,0 +1,10 @@
+package pack0;
+
+import pack1.*;
+
+/**
+ * pack1.Class1
+ */
+public class Class0 {
+  Class1 cl1;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/simultaneousMove/before/pack0/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/simultaneousMove/before/pack0/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/simultaneousMove/before/pack0/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/simultaneousMove/before/pack1/Class1.java b/java/java-tests/testData/refactoring/moveClassToInner/simultaneousMove/before/pack1/Class1.java
new file mode 100644
index 0000000..f655559
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/simultaneousMove/before/pack1/Class1.java
@@ -0,0 +1,10 @@
+package pack1;
+
+import pack0.*;
+
+/**
+ * pack0.Class0
+ */
+public class Class1 {
+  Class0 cl0;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/simultaneousMove/before/pack1/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/simultaneousMove/before/pack1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/simultaneousMove/before/pack1/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/simultaneousMove/before/pack2/A.java b/java/java-tests/testData/refactoring/moveClassToInner/simultaneousMove/before/pack2/A.java
new file mode 100644
index 0000000..e1886e5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/simultaneousMove/before/pack2/A.java
@@ -0,0 +1,4 @@
+package pack2;
+
+public class A {
+}
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/simultaneousMove/before/pack2/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/simultaneousMove/before/pack2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/simultaneousMove/before/pack2/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/simultaneousMove/before/packUser/Class2.java b/java/java-tests/testData/refactoring/moveClassToInner/simultaneousMove/before/packUser/Class2.java
new file mode 100644
index 0000000..36f76c2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/simultaneousMove/before/packUser/Class2.java
@@ -0,0 +1,13 @@
+package packUser;
+
+import pack1.Class1;
+import pack0.Class0;
+
+/**
+ * pack1.Class1
+ * pack0.Class0
+ */
+public class Class2 {
+  Class1 myClass1;
+  Class0 myClass0;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/stringsAndComments/after/Client.java b/java/java-tests/testData/refactoring/moveClassToInner/stringsAndComments/after/Client.java
new file mode 100644
index 0000000..a250a54
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/stringsAndComments/after/Client.java
@@ -0,0 +1,6 @@
+public class Client {
+  String s = "pack1.A.Class1";
+  // pack1.A.Class1
+  // apack1.Class1
+  // Class1
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/stringsAndComments/after/pack1/A.java b/java/java-tests/testData/refactoring/moveClassToInner/stringsAndComments/after/pack1/A.java
new file mode 100644
index 0000000..64974c0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/stringsAndComments/after/pack1/A.java
@@ -0,0 +1,6 @@
+package pack1;
+
+public class A {
+    public static class Class1 {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/stringsAndComments/after/pack1/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/stringsAndComments/after/pack1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/stringsAndComments/after/pack1/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/stringsAndComments/before/Client.java b/java/java-tests/testData/refactoring/moveClassToInner/stringsAndComments/before/Client.java
new file mode 100644
index 0000000..85a7232
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/stringsAndComments/before/Client.java
@@ -0,0 +1,6 @@
+public class Client {
+  String s = "pack1.Class1";
+  // pack1.Class1
+  // apack1.Class1
+  // Class1
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/stringsAndComments/before/pack1/A.java b/java/java-tests/testData/refactoring/moveClassToInner/stringsAndComments/before/pack1/A.java
new file mode 100644
index 0000000..46fc78f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/stringsAndComments/before/pack1/A.java
@@ -0,0 +1,4 @@
+package pack1;
+
+public class A {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/stringsAndComments/before/pack1/Class1.java b/java/java-tests/testData/refactoring/moveClassToInner/stringsAndComments/before/pack1/Class1.java
new file mode 100644
index 0000000..231fe06
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/stringsAndComments/before/pack1/Class1.java
@@ -0,0 +1,4 @@
+package pack1;
+
+public class Class1 {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/stringsAndComments/before/pack1/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/stringsAndComments/before/pack1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/stringsAndComments/before/pack1/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/stringsAndComments2/after/pack1/A.java b/java/java-tests/testData/refactoring/moveClassToInner/stringsAndComments2/after/pack1/A.java
new file mode 100644
index 0000000..dd4ccaa
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/stringsAndComments2/after/pack1/A.java
@@ -0,0 +1,7 @@
+package pack1;
+
+public class A {
+    public static class Class1 {
+      String s = "pack1.A.Class1";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/stringsAndComments2/after/pack1/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/stringsAndComments2/after/pack1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/stringsAndComments2/after/pack1/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/stringsAndComments2/before/pack1/A.java b/java/java-tests/testData/refactoring/moveClassToInner/stringsAndComments2/before/pack1/A.java
new file mode 100644
index 0000000..46fc78f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/stringsAndComments2/before/pack1/A.java
@@ -0,0 +1,4 @@
+package pack1;
+
+public class A {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/stringsAndComments2/before/pack1/Class1.java b/java/java-tests/testData/refactoring/moveClassToInner/stringsAndComments2/before/pack1/Class1.java
new file mode 100644
index 0000000..12f94fd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/stringsAndComments2/before/pack1/Class1.java
@@ -0,0 +1,5 @@
+package pack1;
+
+public class Class1 {
+  String s = "pack1.Class1";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassToInner/stringsAndComments2/before/pack1/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/stringsAndComments2/before/pack1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveClassToInner/stringsAndComments2/before/pack1/empty.txt
diff --git a/java/java-tests/testData/refactoring/moveInner/constructorVisibility/after/p/A.java b/java/java-tests/testData/refactoring/moveInner/constructorVisibility/after/p/A.java
new file mode 100644
index 0000000..edd28c0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/constructorVisibility/after/p/A.java
@@ -0,0 +1,8 @@
+package p;
+
+class A {
+    public void test() {
+        B b = new B();
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/constructorVisibility/after/p/B.java b/java/java-tests/testData/refactoring/moveInner/constructorVisibility/after/p/B.java
new file mode 100644
index 0000000..3fed3291
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/constructorVisibility/after/p/B.java
@@ -0,0 +1,7 @@
+package p;
+
+class B {
+    B() {
+        System.out.println("Constructor");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/constructorVisibility/before/p/A.java b/java/java-tests/testData/refactoring/moveInner/constructorVisibility/before/p/A.java
new file mode 100644
index 0000000..4df3ebc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/constructorVisibility/before/p/A.java
@@ -0,0 +1,13 @@
+package p;
+
+class A {
+    public void test() {
+        B b = new B();
+    }
+
+    private class B {
+        private B() {
+            System.out.println("Constructor");
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/enumConstructorVisibility/after/p/A.java b/java/java-tests/testData/refactoring/moveInner/enumConstructorVisibility/after/p/A.java
new file mode 100644
index 0000000..149bb90
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/enumConstructorVisibility/after/p/A.java
@@ -0,0 +1,4 @@
+package p;
+
+public class A {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/enumConstructorVisibility/after/p2/E.java b/java/java-tests/testData/refactoring/moveInner/enumConstructorVisibility/after/p2/E.java
new file mode 100644
index 0000000..dec99c7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/enumConstructorVisibility/after/p2/E.java
@@ -0,0 +1,12 @@
+package p2;
+
+public enum E {
+     EA("a"),
+     EB("b")
+
+     public final String PRESENTABLE_TEXT;
+
+     E(final String presentableText) {
+       PRESENTABLE_TEXT = presentableText;
+     }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/enumConstructorVisibility/after/p2/U.java b/java/java-tests/testData/refactoring/moveInner/enumConstructorVisibility/after/p2/U.java
new file mode 100644
index 0000000..244a7e2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/enumConstructorVisibility/after/p2/U.java
@@ -0,0 +1,5 @@
+package p2;
+
+public class U {
+    E myE;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/enumConstructorVisibility/before/p/A.java b/java/java-tests/testData/refactoring/moveInner/enumConstructorVisibility/before/p/A.java
new file mode 100644
index 0000000..fb80ac5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/enumConstructorVisibility/before/p/A.java
@@ -0,0 +1,14 @@
+package p;
+
+public class A {
+    public enum E {
+         EA("a"),
+         EB("b")
+
+         public final String PRESENTABLE_TEXT;
+
+         E(final String presentableText) {
+           PRESENTABLE_TEXT = presentableText;
+         }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/enumConstructorVisibility/before/p2/U.java b/java/java-tests/testData/refactoring/moveInner/enumConstructorVisibility/before/p2/U.java
new file mode 100644
index 0000000..41257f7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/enumConstructorVisibility/before/p2/U.java
@@ -0,0 +1,7 @@
+package p2;
+
+import static p.A.E;
+
+public class U {
+    E myE;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/fieldAccessInSuper/after/p/A.java b/java/java-tests/testData/refactoring/moveInner/fieldAccessInSuper/after/p/A.java
new file mode 100644
index 0000000..d1c2d66
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/fieldAccessInSuper/after/p/A.java
@@ -0,0 +1,5 @@
+package p;
+
+class A {
+    int foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/fieldAccessInSuper/after/p/B.java b/java/java-tests/testData/refactoring/moveInner/fieldAccessInSuper/after/p/B.java
new file mode 100644
index 0000000..5d03047
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/fieldAccessInSuper/after/p/B.java
@@ -0,0 +1,10 @@
+package p;
+
+class B extends S{
+    private A a;
+
+    public B(A a) {
+    super(a.foo());
+        this.a = a;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/fieldAccessInSuper/after/p/S.java b/java/java-tests/testData/refactoring/moveInner/fieldAccessInSuper/after/p/S.java
new file mode 100644
index 0000000..8a9aee6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/fieldAccessInSuper/after/p/S.java
@@ -0,0 +1,5 @@
+package p;
+
+class S {
+  public S(int i){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/fieldAccessInSuper/before/p/A.java b/java/java-tests/testData/refactoring/moveInner/fieldAccessInSuper/before/p/A.java
new file mode 100644
index 0000000..0b67afd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/fieldAccessInSuper/before/p/A.java
@@ -0,0 +1,10 @@
+package p;
+
+class A {
+    int foo(){}
+    private class B extends S{
+      public B() {
+        super(A.this.foo());
+      } 
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/fieldAccessInSuper/before/p/S.java b/java/java-tests/testData/refactoring/moveInner/fieldAccessInSuper/before/p/S.java
new file mode 100644
index 0000000..8a9aee6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/fieldAccessInSuper/before/p/S.java
@@ -0,0 +1,5 @@
+package p;
+
+class S {
+  public S(int i){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/importStaticOfEnum/after/p/A.java b/java/java-tests/testData/refactoring/moveInner/importStaticOfEnum/after/p/A.java
new file mode 100644
index 0000000..149bb90
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/importStaticOfEnum/after/p/A.java
@@ -0,0 +1,4 @@
+package p;
+
+public class A {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/importStaticOfEnum/after/p/E.java b/java/java-tests/testData/refactoring/moveInner/importStaticOfEnum/after/p/E.java
new file mode 100644
index 0000000..0a1a2f6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/importStaticOfEnum/after/p/E.java
@@ -0,0 +1,4 @@
+package p;
+
+public enum E {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/importStaticOfEnum/after/p2/U.java b/java/java-tests/testData/refactoring/moveInner/importStaticOfEnum/after/p2/U.java
new file mode 100644
index 0000000..9177ecf5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/importStaticOfEnum/after/p2/U.java
@@ -0,0 +1,7 @@
+package p2;
+
+import p.E;
+
+public class U {
+    E myE;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/importStaticOfEnum/before/p/A.java b/java/java-tests/testData/refactoring/moveInner/importStaticOfEnum/before/p/A.java
new file mode 100644
index 0000000..0cfa11d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/importStaticOfEnum/before/p/A.java
@@ -0,0 +1,6 @@
+package p;
+
+public class A {
+    public enum E {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/importStaticOfEnum/before/p2/U.java b/java/java-tests/testData/refactoring/moveInner/importStaticOfEnum/before/p2/U.java
new file mode 100644
index 0000000..41257f7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/importStaticOfEnum/before/p2/U.java
@@ -0,0 +1,7 @@
+package p2;
+
+import static p.A.E;
+
+public class U {
+    E myE;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/innerClassInheritance/after/p/A.java b/java/java-tests/testData/refactoring/moveInner/innerClassInheritance/after/p/A.java
new file mode 100644
index 0000000..b3d8334
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/innerClassInheritance/after/p/A.java
@@ -0,0 +1,8 @@
+package p;
+
+class A {
+    private static class C {
+
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/innerClassInheritance/after/p/B.java b/java/java-tests/testData/refactoring/moveInner/innerClassInheritance/after/p/B.java
new file mode 100644
index 0000000..7d34f79
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/innerClassInheritance/after/p/B.java
@@ -0,0 +1,5 @@
+package p;
+
+class B extends A.C {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/innerClassInheritance/before/p/A.java b/java/java-tests/testData/refactoring/moveInner/innerClassInheritance/before/p/A.java
new file mode 100644
index 0000000..e22caf0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/innerClassInheritance/before/p/A.java
@@ -0,0 +1,11 @@
+package p;
+
+class A {
+    private static class C {
+
+    }
+
+    private static class B extends C{
+
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/innerClassSelfRef/after/p/A.java b/java/java-tests/testData/refactoring/moveInner/innerClassSelfRef/after/p/A.java
new file mode 100644
index 0000000..23fae3e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/innerClassSelfRef/after/p/A.java
@@ -0,0 +1,4 @@
+package p;
+
+class A {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/innerClassSelfRef/after/p/B.java b/java/java-tests/testData/refactoring/moveInner/innerClassSelfRef/after/p/B.java
new file mode 100644
index 0000000..9742afa
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/innerClassSelfRef/after/p/B.java
@@ -0,0 +1,7 @@
+package p;
+
+class B {
+  public static B create() {
+    return new B();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/innerClassSelfRef/before/p/A.java b/java/java-tests/testData/refactoring/moveInner/innerClassSelfRef/before/p/A.java
new file mode 100644
index 0000000..aa6c2e3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/innerClassSelfRef/before/p/A.java
@@ -0,0 +1,9 @@
+package p;
+
+class A {
+    private static class B {
+      public static B create() {
+        return new B();
+      }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/nonJavaFiles/after/pack1/Inner.java b/java/java-tests/testData/refactoring/moveInner/nonJavaFiles/after/pack1/Inner.java
new file mode 100644
index 0000000..39ded8a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/nonJavaFiles/after/pack1/Inner.java
@@ -0,0 +1,4 @@
+package pack1;
+
+public class Inner {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/nonJavaFiles/after/pack1/Outer.java b/java/java-tests/testData/refactoring/moveInner/nonJavaFiles/after/pack1/Outer.java
new file mode 100644
index 0000000..d772ed9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/nonJavaFiles/after/pack1/Outer.java
@@ -0,0 +1,6 @@
+package pack1;
+
+public class Outer {
+    // pack1.Inner
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/nonJavaFiles/after/pack1/x.txt b/java/java-tests/testData/refactoring/moveInner/nonJavaFiles/after/pack1/x.txt
new file mode 100644
index 0000000..f97d92d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/nonJavaFiles/after/pack1/x.txt
@@ -0,0 +1 @@
+pack1.Inner
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/nonJavaFiles/before/pack1/Outer.java b/java/java-tests/testData/refactoring/moveInner/nonJavaFiles/before/pack1/Outer.java
new file mode 100644
index 0000000..97879ca
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/nonJavaFiles/before/pack1/Outer.java
@@ -0,0 +1,8 @@
+package pack1;
+
+public class Outer {
+    // pack1.Outer.Inner
+
+    public class Inner {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/nonJavaFiles/before/pack1/x.txt b/java/java-tests/testData/refactoring/moveInner/nonJavaFiles/before/pack1/x.txt
new file mode 100644
index 0000000..ca1c390
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/nonJavaFiles/before/pack1/x.txt
@@ -0,0 +1 @@
+pack1.Outer.Inner
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/qualifyThisHierarchy/after/pack1/DImpl.java b/java/java-tests/testData/refactoring/moveInner/qualifyThisHierarchy/after/pack1/DImpl.java
new file mode 100644
index 0000000..c769d8a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/qualifyThisHierarchy/after/pack1/DImpl.java
@@ -0,0 +1,9 @@
+package pack1;
+class D {
+  protected void iAmProtected() {
+  }
+}
+
+public class DImpl extends D {
+}
+
diff --git a/java/java-tests/testData/refactoring/moveInner/qualifyThisHierarchy/after/pack1/MyRunnable.java b/java/java-tests/testData/refactoring/moveInner/qualifyThisHierarchy/after/pack1/MyRunnable.java
new file mode 100644
index 0000000..f8a4670
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/qualifyThisHierarchy/after/pack1/MyRunnable.java
@@ -0,0 +1,13 @@
+package pack1;
+
+public class MyRunnable {
+    private DImpl d;
+
+    public MyRunnable(DImpl d) {
+        this.d = d;
+    }
+
+    public void run() {
+    d.iAmProtected();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/qualifyThisHierarchy/before/pack1/DImpl.java b/java/java-tests/testData/refactoring/moveInner/qualifyThisHierarchy/before/pack1/DImpl.java
new file mode 100644
index 0000000..b9b75f7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/qualifyThisHierarchy/before/pack1/DImpl.java
@@ -0,0 +1,14 @@
+package pack1;
+class D {
+  protected void iAmProtected() {
+  }
+}
+
+public class DImpl extends D {
+  public class MyRunnable {     
+    public void run() {
+      iAmProtected();
+    }
+  }
+}
+
diff --git a/java/java-tests/testData/refactoring/moveInner/scr13730/after/pack1/Client.java b/java/java-tests/testData/refactoring/moveInner/scr13730/after/pack1/Client.java
new file mode 100644
index 0000000..c7a48d6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/scr13730/after/pack1/Client.java
@@ -0,0 +1,12 @@
+package pack1;
+
+public class Client { 
+    public static void main(String[] args) {
+        StaticInner staticInner = new StaticInner();
+ 
+        StaticInner.NonStaticInnerInner nonStaticInnerInner
+            = staticInner.new NonStaticInnerInner("Joe");
+ 
+        System.out.println(nonStaticInnerInner.toString());
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/scr13730/after/pack1/StaticInner.java b/java/java-tests/testData/refactoring/moveInner/scr13730/after/pack1/StaticInner.java
new file mode 100644
index 0000000..d381eba
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/scr13730/after/pack1/StaticInner.java
@@ -0,0 +1,15 @@
+package pack1;
+
+public class StaticInner {
+    public class NonStaticInnerInner {
+        private String name;
+
+        public NonStaticInnerInner(String name) {
+            this.name = name;
+        }
+
+        public String toString() {
+            return name;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/scr13730/after/pack1/TopLevel.java b/java/java-tests/testData/refactoring/moveInner/scr13730/after/pack1/TopLevel.java
new file mode 100644
index 0000000..755ed74
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/scr13730/after/pack1/TopLevel.java
@@ -0,0 +1,4 @@
+package pack1;
+
+public class TopLevel {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/scr13730/before/pack1/Client.java b/java/java-tests/testData/refactoring/moveInner/scr13730/before/pack1/Client.java
new file mode 100644
index 0000000..f6c343a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/scr13730/before/pack1/Client.java
@@ -0,0 +1,12 @@
+package pack1;
+
+public class Client { 
+    public static void main(String[] args) {
+        TopLevel.StaticInner staticInner = new TopLevel.StaticInner();
+ 
+        TopLevel.StaticInner.NonStaticInnerInner nonStaticInnerInner
+            = staticInner.new NonStaticInnerInner("Joe");
+ 
+        System.out.println(nonStaticInnerInner.toString());
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/scr13730/before/pack1/TopLevel.java b/java/java-tests/testData/refactoring/moveInner/scr13730/before/pack1/TopLevel.java
new file mode 100644
index 0000000..a61492c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/scr13730/before/pack1/TopLevel.java
@@ -0,0 +1,17 @@
+package pack1;
+
+public class TopLevel { 
+    public static class StaticInner {
+        public class NonStaticInnerInner {
+            private String name;
+            
+            public NonStaticInnerInner(String name) {
+                this.name = name;
+            }
+            
+            public String toString() {
+                return name;
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/scr15142/after/xxx/Inner.java b/java/java-tests/testData/refactoring/moveInner/scr15142/after/xxx/Inner.java
new file mode 100644
index 0000000..d81fca0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/scr15142/after/xxx/Inner.java
@@ -0,0 +1,4 @@
+package xxx;
+
+public class Inner {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/scr15142/after/xxx/Outer.java b/java/java-tests/testData/refactoring/moveInner/scr15142/after/xxx/Outer.java
new file mode 100644
index 0000000..0a40297
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/scr15142/after/xxx/Outer.java
@@ -0,0 +1,8 @@
+package xxx;
+
+public class Outer {
+  {
+    Inner inner = new Inner();
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/scr15142/before/xxx/Outer.java b/java/java-tests/testData/refactoring/moveInner/scr15142/before/xxx/Outer.java
new file mode 100644
index 0000000..8ba873b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/scr15142/before/xxx/Outer.java
@@ -0,0 +1,10 @@
+package xxx;
+
+public class Outer {
+  {
+    Inner inner = new Inner();
+  }
+
+  public class Inner {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/scr22592/after/xxx/Inner.java b/java/java-tests/testData/refactoring/moveInner/scr22592/after/xxx/Inner.java
new file mode 100644
index 0000000..22289af
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/scr22592/after/xxx/Inner.java
@@ -0,0 +1,9 @@
+package xxx;
+
+class Inner {
+    private Outer outer;
+
+    public Inner(Outer outer) {
+        this.outer = outer;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/scr22592/after/xxx/Outer.java b/java/java-tests/testData/refactoring/moveInner/scr22592/after/xxx/Outer.java
new file mode 100644
index 0000000..74ee17e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/scr22592/after/xxx/Outer.java
@@ -0,0 +1,7 @@
+package xxx;
+class Outer {
+
+    {
+        Object o = new Inner;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/scr22592/before/xxx/Outer.java b/java/java-tests/testData/refactoring/moveInner/scr22592/before/xxx/Outer.java
new file mode 100644
index 0000000..02629ef
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/scr22592/before/xxx/Outer.java
@@ -0,0 +1,9 @@
+package xxx;
+class Outer {
+    class Inner {
+    }
+
+    {
+        Object o = new Inner;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/scr30106/after/p/A.java b/java/java-tests/testData/refactoring/moveInner/scr30106/after/p/A.java
new file mode 100644
index 0000000..a3a0903
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/scr30106/after/p/A.java
@@ -0,0 +1,4 @@
+package p;
+
+public class A extends X {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/scr30106/after/p/B.java b/java/java-tests/testData/refactoring/moveInner/scr30106/after/p/B.java
new file mode 100644
index 0000000..6fa9162
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/scr30106/after/p/B.java
@@ -0,0 +1,13 @@
+package p;
+
+public class B extends X {
+    {
+        method();
+    }
+
+    private A outer;
+
+    public B(A outer) {
+        this.outer = outer;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/scr30106/after/p/X.java b/java/java-tests/testData/refactoring/moveInner/scr30106/after/p/X.java
new file mode 100644
index 0000000..f133448
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/scr30106/after/p/X.java
@@ -0,0 +1,5 @@
+package p;
+
+public class X {
+    void method();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/scr30106/before/p/A.java b/java/java-tests/testData/refactoring/moveInner/scr30106/before/p/A.java
new file mode 100644
index 0000000..387bf4b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/scr30106/before/p/A.java
@@ -0,0 +1,9 @@
+package p;
+
+public class A extends X {
+    public class B extends X {
+        {
+            method();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/scr30106/before/p/X.java b/java/java-tests/testData/refactoring/moveInner/scr30106/before/p/X.java
new file mode 100644
index 0000000..f133448
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/scr30106/before/p/X.java
@@ -0,0 +1,5 @@
+package p;
+
+public class X {
+    void method();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/toOtherPackage/after/package1/OuterClass.java b/java/java-tests/testData/refactoring/moveInner/toOtherPackage/after/package1/OuterClass.java
new file mode 100644
index 0000000..8908136
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/toOtherPackage/after/package1/OuterClass.java
@@ -0,0 +1,8 @@
+package package1;
+
+import package2.InnerClass;
+
+public class OuterClass {
+    private InnerClass instance = new InnerClass();
+
+}
diff --git a/java/java-tests/testData/refactoring/moveInner/toOtherPackage/after/package2/InnerClass.java b/java/java-tests/testData/refactoring/moveInner/toOtherPackage/after/package2/InnerClass.java
new file mode 100644
index 0000000..c5894fa
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/toOtherPackage/after/package2/InnerClass.java
@@ -0,0 +1,3 @@
+package package2;
+
+public class InnerClass { }
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/toOtherPackage/after/package2/emptyFile.txt b/java/java-tests/testData/refactoring/moveInner/toOtherPackage/after/package2/emptyFile.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/toOtherPackage/after/package2/emptyFile.txt
diff --git a/java/java-tests/testData/refactoring/moveInner/toOtherPackage/before/package1/OuterClass.java b/java/java-tests/testData/refactoring/moveInner/toOtherPackage/before/package1/OuterClass.java
new file mode 100644
index 0000000..0694e7d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/toOtherPackage/before/package1/OuterClass.java
@@ -0,0 +1,7 @@
+package package1;
+
+public class OuterClass {
+    private InnerClass instance = new InnerClass();
+
+    private static class InnerClass { }
+}
diff --git a/java/java-tests/testData/refactoring/moveInner/toOtherPackage/before/package2/emptyFile.txt b/java/java-tests/testData/refactoring/moveInner/toOtherPackage/before/package2/emptyFile.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/toOtherPackage/before/package2/emptyFile.txt
diff --git a/java/java-tests/testData/refactoring/moveInner/xmlReferences/after/pack1/Inner.java b/java/java-tests/testData/refactoring/moveInner/xmlReferences/after/pack1/Inner.java
new file mode 100644
index 0000000..39ded8a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/xmlReferences/after/pack1/Inner.java
@@ -0,0 +1,4 @@
+package pack1;
+
+public class Inner {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/xmlReferences/after/pack1/Outer.java b/java/java-tests/testData/refactoring/moveInner/xmlReferences/after/pack1/Outer.java
new file mode 100644
index 0000000..90d8f9c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/xmlReferences/after/pack1/Outer.java
@@ -0,0 +1,4 @@
+package pack1;
+
+public class Outer {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/xmlReferences/after/pack1/x.xml b/java/java-tests/testData/refactoring/moveInner/xmlReferences/after/pack1/x.xml
new file mode 100644
index 0000000..1f746d0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/xmlReferences/after/pack1/x.xml
@@ -0,0 +1 @@
+<x>pack1.Inner</x>
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/xmlReferences/before/pack1/Outer.java b/java/java-tests/testData/refactoring/moveInner/xmlReferences/before/pack1/Outer.java
new file mode 100644
index 0000000..762024a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/xmlReferences/before/pack1/Outer.java
@@ -0,0 +1,6 @@
+package pack1;
+
+public class Outer {
+    public static class Inner {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInner/xmlReferences/before/pack1/x.xml b/java/java-tests/testData/refactoring/moveInner/xmlReferences/before/pack1/x.xml
new file mode 100644
index 0000000..341939e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInner/xmlReferences/before/pack1/x.xml
@@ -0,0 +1 @@
+<x>pack1.Outer$Inner</x>
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/AnonymousHierarchy.java b/java/java-tests/testData/refactoring/moveInstanceMethod/AnonymousHierarchy.java
new file mode 100644
index 0000000..b750e39
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/AnonymousHierarchy.java
@@ -0,0 +1,31 @@
+public class Test {
+
+    public boolean per<caret>form(Bar l) {
+        final Dialog dialog = new Dialog() {
+                    protected void invokeRefactoring() {
+                         doRefactor();
+                    }
+
+                };
+        dialog.show();
+        return dialog.isOK();
+    }
+}
+
+class Bar {
+}
+
+class ID {
+    void doRefactor() {
+
+    }
+}
+
+class Dialog extends ID {
+    public void show() {
+    }
+
+    public boolean isOK() {
+        return false;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/AnonymousHierarchy.java.after b/java/java-tests/testData/refactoring/moveInstanceMethod/AnonymousHierarchy.java.after
new file mode 100644
index 0000000..9fee918
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/AnonymousHierarchy.java.after
@@ -0,0 +1,31 @@
+public class Test {
+
+}
+
+class Bar {
+    public boolean perform() {
+        final Dialog dialog = new Dialog() {
+                    protected void invokeRefactoring() {
+                         doRefactor();
+                    }
+
+                };
+        dialog.show();
+        return dialog.isOK();
+    }
+}
+
+class ID {
+    void doRefactor() {
+
+    }
+}
+
+class Dialog extends ID {
+    public void show() {
+    }
+
+    public boolean isOK() {
+        return false;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/CorrectThisRefs.java b/java/java-tests/testData/refactoring/moveInstanceMethod/CorrectThisRefs.java
new file mode 100644
index 0000000..7d2a75f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/CorrectThisRefs.java
@@ -0,0 +1,14 @@
+class A {
+  void ba<caret>r(B b) {
+    new Runnable() {
+      @Override
+      public void run() {
+        System.out.println(b);
+      }
+    }.run();
+  }
+}
+
+class B {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/CorrectThisRefs.java.after b/java/java-tests/testData/refactoring/moveInstanceMethod/CorrectThisRefs.java.after
new file mode 100644
index 0000000..98d9b8f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/CorrectThisRefs.java.after
@@ -0,0 +1,14 @@
+class A {
+}
+
+class B {
+
+    void bar() {
+      new Runnable() {
+        @Override
+        public void run() {
+          System.out.println(B.this);
+        }
+      }.run();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/EscalateVisibility.java b/java/java-tests/testData/refactoring/moveInstanceMethod/EscalateVisibility.java
new file mode 100644
index 0000000..3c1da57
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/EscalateVisibility.java
@@ -0,0 +1,9 @@
+public class EscalateVisibility {
+  public void x(B b){
+    yy(b);
+  }
+  private void y<caret>y(B b){
+  }
+}
+
+class B {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/EscalateVisibility.java.after b/java/java-tests/testData/refactoring/moveInstanceMethod/EscalateVisibility.java.after
new file mode 100644
index 0000000..707d808
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/EscalateVisibility.java.after
@@ -0,0 +1,10 @@
+public class EscalateVisibility {
+  public void x(B b){
+    b.yy();
+  }
+}
+
+class B {
+    void yy(){
+}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/IDEADEV11257.java b/java/java-tests/testData/refactoring/moveInstanceMethod/IDEADEV11257.java
new file mode 100644
index 0000000..f25b528
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/IDEADEV11257.java
@@ -0,0 +1,7 @@
+class Test1 {
+}
+class Test2 {
+    public void <caret>test(Test1 t) {
+        System.out.println("test");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/IDEADEV11257.java.after b/java/java-tests/testData/refactoring/moveInstanceMethod/IDEADEV11257.java.after
new file mode 100644
index 0000000..19e28d5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/IDEADEV11257.java.after
@@ -0,0 +1,7 @@
+class Test1 {
+    public void test() {
+        System.out.println("test");
+    }
+}
+class Test2 {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/Interface.java b/java/java-tests/testData/refactoring/moveInstanceMethod/Interface.java
new file mode 100644
index 0000000..ad33d80
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/Interface.java
@@ -0,0 +1,18 @@
+interface Foreign {
+}
+
+class ForeignImpl implements Foreign {
+}
+
+
+public abstract class Test1 {
+    int field;
+
+    void <caret>foo (Foreign f) {
+        field++;
+    }
+
+    void bar () {
+        foo(new ForeignImpl());
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/Interface.java.after b/java/java-tests/testData/refactoring/moveInstanceMethod/Interface.java.after
new file mode 100644
index 0000000..265142a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/Interface.java.after
@@ -0,0 +1,19 @@
+interface Foreign {
+    void foo(Test1 test1);
+}
+
+class ForeignImpl implements Foreign {
+    @Override
+    public void foo(Test1 test1) {
+        test1.field++;
+    }
+}
+
+
+public abstract class Test1 {
+    int field;
+
+    void bar () {
+        new ForeignImpl().foo(this);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/Javadoc.java b/java/java-tests/testData/refactoring/moveInstanceMethod/Javadoc.java
new file mode 100644
index 0000000..248d5ca7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/Javadoc.java
@@ -0,0 +1,18 @@
+class Foreign {
+}
+
+public abstract class Test1 {
+
+    /**
+     * @param f
+     */
+    void <caret>foo (Foreign f) {
+      bar();
+    }
+
+    /**
+     * @see #foo(Foreign)
+     */
+    void bar () {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/Javadoc.java.after b/java/java-tests/testData/refactoring/moveInstanceMethod/Javadoc.java.after
new file mode 100644
index 0000000..8170dbd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/Javadoc.java.after
@@ -0,0 +1,17 @@
+class Foreign {
+    /**
+     * @param test1
+     */
+    void foo(Test1 test1) {
+      test1.bar();
+    }
+}
+
+public abstract class Test1 {
+
+    /**
+     * @see Foreign#foo(Test1)
+     */
+    void bar () {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/MethodReference.java b/java/java-tests/testData/refactoring/moveInstanceMethod/MethodReference.java
new file mode 100644
index 0000000..b212381
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/MethodReference.java
@@ -0,0 +1,16 @@
+interface SAM {
+  String m(MethodReference<String> f, F f1);
+}
+
+
+class F {}
+
+class MethodReference<X> {
+  String ge<caret>tX(F f1) {
+    return null;
+  }
+
+  static void test() {
+    SAM s = MethodReference<String>::getX;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/NoGenerics.java b/java/java-tests/testData/refactoring/moveInstanceMethod/NoGenerics.java
new file mode 100644
index 0000000..522ec13
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/NoGenerics.java
@@ -0,0 +1,9 @@
+class YoYo<T> {
+    private YoYoYo myYoYoYo;
+
+    void <caret>foo () {
+        myYoYoYo.getClass();
+    }
+}
+
+class YoYoYo extends YoYo {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/NoGenerics.java.after b/java/java-tests/testData/refactoring/moveInstanceMethod/NoGenerics.java.after
new file mode 100644
index 0000000..df7a322
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/NoGenerics.java.after
@@ -0,0 +1,10 @@
+class YoYo<T> {
+    private YoYoYo myYoYoYo;
+
+}
+
+class YoYoYo extends YoYo {
+    void foo () {
+        getClass();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/NoThisParam.java b/java/java-tests/testData/refactoring/moveInstanceMethod/NoThisParam.java
new file mode 100644
index 0000000..9193e76
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/NoThisParam.java
@@ -0,0 +1,9 @@
+class YoYo {
+    private YoYoYo myYoYoYo;
+
+    void <caret>foo () {
+        myYoYoYo.getClass();
+    }
+}
+
+class YoYoYo extends YoYo {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/NoThisParam.java.after b/java/java-tests/testData/refactoring/moveInstanceMethod/NoThisParam.java.after
new file mode 100644
index 0000000..e8eeb02
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/NoThisParam.java.after
@@ -0,0 +1,10 @@
+class YoYo {
+    private YoYoYo myYoYoYo;
+
+}
+
+class YoYoYo extends YoYo {
+    void foo () {
+        getClass();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/OverloadingMethods.java b/java/java-tests/testData/refactoring/moveInstanceMethod/OverloadingMethods.java
new file mode 100644
index 0000000..08cbe7b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/OverloadingMethods.java
@@ -0,0 +1,18 @@
+public class A {
+
+    public void m<caret>(B b){
+        System.out.println(this);
+    }
+
+    public void show(B b){
+        m(b);
+    }
+
+    public void m (C c){
+        System.out.println(this);
+    }
+
+}
+
+class B{}
+class C{}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/OverloadingMethods.java.after b/java/java-tests/testData/refactoring/moveInstanceMethod/OverloadingMethods.java.after
new file mode 100644
index 0000000..f5aea34
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/OverloadingMethods.java.after
@@ -0,0 +1,18 @@
+public class A {
+
+    public void show(B b){
+        b.m(this);
+    }
+
+    public void m (C c){
+        System.out.println(this);
+    }
+
+}
+
+class B{
+    public void m(A a){
+        System.out.println(a);
+    }
+}
+class C{}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/OverloadingMethods1.java b/java/java-tests/testData/refactoring/moveInstanceMethod/OverloadingMethods1.java
new file mode 100644
index 0000000..e3b7902
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/OverloadingMethods1.java
@@ -0,0 +1,11 @@
+class B extends A {
+  void n<caret>(C c){
+    m();
+  }
+}
+
+class A {
+  void m(){}
+}
+
+class C {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/OverloadingMethods1.java.after b/java/java-tests/testData/refactoring/moveInstanceMethod/OverloadingMethods1.java.after
new file mode 100644
index 0000000..2b17705
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/OverloadingMethods1.java.after
@@ -0,0 +1,12 @@
+class B extends A {
+}
+
+class A {
+  void m(){}
+}
+
+class C {
+    void n(B b){
+      b.m();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/PolyadicExpr.java b/java/java-tests/testData/refactoring/moveInstanceMethod/PolyadicExpr.java
new file mode 100644
index 0000000..387ed5d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/PolyadicExpr.java
@@ -0,0 +1,23 @@
+class A {
+
+    void n(B b) {
+        m(b);
+    }
+
+    void m<caret>(B b) {
+        System.out.print("display for me the shape" + this + " " + b.getI() + "times");
+    }
+}
+
+class B {
+    private final int i;
+
+    public B(int i) {
+        this.i = i;
+    }
+
+
+    public int getI() {
+        return i;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/PolyadicExpr.java.after b/java/java-tests/testData/refactoring/moveInstanceMethod/PolyadicExpr.java.after
new file mode 100644
index 0000000..4cd4987
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/PolyadicExpr.java.after
@@ -0,0 +1,24 @@
+class A {
+
+    void n(B b) {
+        b.m(this);
+    }
+
+}
+
+class B {
+    private final int i;
+
+    public B(int i) {
+        this.i = i;
+    }
+
+
+    public int getI() {
+        return i;
+    }
+
+    void m(A a) {
+        System.out.print("display for me the shape" + a + " " + getI() + "times");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/QualifiedThis.java b/java/java-tests/testData/refactoring/moveInstanceMethod/QualifiedThis.java
new file mode 100644
index 0000000..e143b08
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/QualifiedThis.java
@@ -0,0 +1,14 @@
+class Foreign {
+}
+
+class MoveMethodTest {
+    void bar() {}
+
+    void <caret>foo(final Foreign foreign) {
+        class Inner {
+            {
+                MoveMethodTest.this.bar();
+            }
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/QualifiedThis.java.after b/java/java-tests/testData/refactoring/moveInstanceMethod/QualifiedThis.java.after
new file mode 100644
index 0000000..fb5940b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/QualifiedThis.java.after
@@ -0,0 +1,14 @@
+class Foreign {
+    void foo(MoveMethodTest moveMethodTest) {
+        class Inner {
+            {
+                moveMethodTest.bar();
+            }
+        }
+    }
+}
+
+class MoveMethodTest {
+    void bar() {}
+
+}
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/QualifierToArg1.java b/java/java-tests/testData/refactoring/moveInstanceMethod/QualifierToArg1.java
new file mode 100644
index 0000000..1d3ccf8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/QualifierToArg1.java
@@ -0,0 +1,23 @@
+class CommandQueue {
+
+}
+
+class CommandManager {
+    void <caret>f(CommandQueue q) {
+    }
+
+    void g() {
+
+    }
+
+    CommandQueue getCommandQueue() {
+        return null;
+    }
+}
+
+class Application {
+    CommandManager myManager;
+    {
+        myManager.f(myManager.getCommandQueue());
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/QualifierToArg1.java.after b/java/java-tests/testData/refactoring/moveInstanceMethod/QualifierToArg1.java.after
new file mode 100644
index 0000000..2fa312f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/QualifierToArg1.java.after
@@ -0,0 +1,23 @@
+class CommandQueue {
+
+    void f() {
+    }
+}
+
+class CommandManager {
+
+    void g() {
+
+    }
+
+    CommandQueue getCommandQueue() {
+        return null;
+    }
+}
+
+class Application {
+    CommandManager myManager;
+    {
+        myManager.getCommandQueue().f();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/QualifierToArg2.java b/java/java-tests/testData/refactoring/moveInstanceMethod/QualifierToArg2.java
new file mode 100644
index 0000000..63020fb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/QualifierToArg2.java
@@ -0,0 +1,24 @@
+class CommandQueue {
+
+}
+
+class CommandManager {
+    void <caret>f(CommandQueue q) {
+      g();
+    }
+
+    void g() {
+
+    }
+
+    CommandQueue getCommandQueue() {
+        return null;
+    }
+}
+
+class Application {
+    CommandManager myManager;
+    {
+        myManager.f(myManager.getCommandQueue());
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/QualifierToArg2.java.after b/java/java-tests/testData/refactoring/moveInstanceMethod/QualifierToArg2.java.after
new file mode 100644
index 0000000..55bf5e7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/QualifierToArg2.java.after
@@ -0,0 +1,24 @@
+class CommandQueue {
+
+    void f(CommandManager commandManager) {
+      commandManager.g();
+    }
+}
+
+class CommandManager {
+
+    void g() {
+
+    }
+
+    CommandQueue getCommandQueue() {
+        return null;
+    }
+}
+
+class Application {
+    CommandManager myManager;
+    {
+        myManager.getCommandQueue().f(myManager);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/QualifierToArg3.java b/java/java-tests/testData/refactoring/moveInstanceMethod/QualifierToArg3.java
new file mode 100644
index 0000000..1c4bd78
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/QualifierToArg3.java
@@ -0,0 +1,24 @@
+class CommandQueue {
+
+}
+
+class CommandManager {
+    void <caret>f(CommandQueue q) {
+      notify();
+    }
+
+    void g() {
+
+    }
+
+    CommandQueue getCommandQueue() {
+        return null;
+    }
+}
+
+class Application {
+    CommandManager myManager;
+    {
+        myManager.f(myManager.getCommandQueue());
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/QualifierToArg3.java.after b/java/java-tests/testData/refactoring/moveInstanceMethod/QualifierToArg3.java.after
new file mode 100644
index 0000000..5c35c7b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/QualifierToArg3.java.after
@@ -0,0 +1,24 @@
+class CommandQueue {
+
+    void f(CommandManager commandManager) {
+      commandManager.notify();
+    }
+}
+
+class CommandManager {
+
+    void g() {
+
+    }
+
+    CommandQueue getCommandQueue() {
+        return null;
+    }
+}
+
+class Application {
+    CommandManager myManager;
+    {
+        myManager.getCommandQueue().f(myManager);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/QualifyField.java b/java/java-tests/testData/refactoring/moveInstanceMethod/QualifyField.java
new file mode 100644
index 0000000..f397273
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/QualifyField.java
@@ -0,0 +1,13 @@
+class Flim {
+    Flam flam = new Flam();
+
+    void be<caret>ep() {}
+
+    public static void main(String[] args) {
+        Flim flim = new Flim();
+        flim.beep();
+    }
+}
+
+class Flam {
+}
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/QualifyField.java.after b/java/java-tests/testData/refactoring/moveInstanceMethod/QualifyField.java.after
new file mode 100644
index 0000000..5aa0095
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/QualifyField.java.after
@@ -0,0 +1,12 @@
+class Flim {
+    Flam flam = new Flam();
+
+    public static void main(String[] args) {
+        Flim flim = new Flim();
+        flim.flam.beep();
+    }
+}
+
+class Flam {
+    void beep() {}
+}
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/QualifyFieldAccess.java b/java/java-tests/testData/refactoring/moveInstanceMethod/QualifyFieldAccess.java
new file mode 100644
index 0000000..bb32bcf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/QualifyFieldAccess.java
@@ -0,0 +1,12 @@
+public class Test {
+
+    private Bar bar = new Bar();
+
+    public void <caret>foo(int x) {
+        bar.x = x;
+    }
+
+    private static class Bar {
+        private int x;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/QualifyFieldAccess.java.after b/java/java-tests/testData/refactoring/moveInstanceMethod/QualifyFieldAccess.java.after
new file mode 100644
index 0000000..e3fdd3a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/QualifyFieldAccess.java.after
@@ -0,0 +1,12 @@
+public class Test {
+
+    private Bar bar = new Bar();
+
+    private static class Bar {
+        private int x;
+
+        public void foo(int x) {
+            this.x = x;
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/QualifyThisHierarchy.java b/java/java-tests/testData/refactoring/moveInstanceMethod/QualifyThisHierarchy.java
new file mode 100644
index 0000000..81fc7e0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/QualifyThisHierarchy.java
@@ -0,0 +1,18 @@
+public class D {
+  protected void iAmProtected() {
+  }
+}
+
+class DImpl extends D {
+  void f<caret>oo(F f) {
+    class MyRunnable {
+      public void run() {
+        iAmProtected();
+      }
+    }
+  }
+}
+
+class F {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/QualifyThisHierarchy.java.after b/java/java-tests/testData/refactoring/moveInstanceMethod/QualifyThisHierarchy.java.after
new file mode 100644
index 0000000..ce2da10
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/QualifyThisHierarchy.java.after
@@ -0,0 +1,18 @@
+public class D {
+  protected void iAmProtected() {
+  }
+}
+
+class DImpl extends D {
+}
+
+class F {
+
+    void foo(D d) {
+      class MyRunnable {
+        public void run() {
+          d.iAmProtected();
+        }
+      }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/Recursive.java b/java/java-tests/testData/refactoring/moveInstanceMethod/Recursive.java
new file mode 100644
index 0000000..0e81ef5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/Recursive.java
@@ -0,0 +1,6 @@
+public class MoveMethodTest {
+  void <caret>foo (MoveMethodTest f) {
+    foo(f);
+    f.foo(f);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/Recursive.java.after b/java/java-tests/testData/refactoring/moveInstanceMethod/Recursive.java.after
new file mode 100644
index 0000000..52cbb7b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/Recursive.java.after
@@ -0,0 +1,6 @@
+public class MoveMethodTest {
+    void foo() {
+      foo();
+      foo();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/Recursive1.java b/java/java-tests/testData/refactoring/moveInstanceMethod/Recursive1.java
new file mode 100644
index 0000000..7d4cb58
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/Recursive1.java
@@ -0,0 +1,13 @@
+class FirstClass {
+    void <caret>x(SecondClass sc) {
+        if (sc != null) x(sc.g());
+    }
+
+    void y() {
+        x(new SecondClass());
+    }
+}
+
+class SecondClass {
+    SecondClass g() { return null; }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/Recursive1.java.after b/java/java-tests/testData/refactoring/moveInstanceMethod/Recursive1.java.after
new file mode 100644
index 0000000..19ce84d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/Recursive1.java.after
@@ -0,0 +1,14 @@
+class FirstClass {
+
+    void y() {
+        new SecondClass().x();
+    }
+}
+
+class SecondClass {
+    SecondClass g() { return null; }
+
+    void x() {
+        if (this != null) g().x();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/SameNames.java b/java/java-tests/testData/refactoring/moveInstanceMethod/SameNames.java
new file mode 100644
index 0000000..8e4f612
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/SameNames.java
@@ -0,0 +1,13 @@
+public class A {
+    void f<caret>oo(B b) {
+      b.foo("");
+    }
+}
+
+class B {
+  void foo(String s) {
+    System.out.println(s);
+  }
+}
+
+
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/SameNames.java.after b/java/java-tests/testData/refactoring/moveInstanceMethod/SameNames.java.after
new file mode 100644
index 0000000..4f43b5a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/SameNames.java.after
@@ -0,0 +1,14 @@
+public class A {
+}
+
+class B {
+  void foo(String s) {
+    System.out.println(s);
+  }
+
+    void foo() {
+      foo("");
+    }
+}
+
+
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/SameNamesRecursion.java b/java/java-tests/testData/refactoring/moveInstanceMethod/SameNamesRecursion.java
new file mode 100644
index 0000000..432d05c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/SameNamesRecursion.java
@@ -0,0 +1,16 @@
+public class A {
+    void f<caret>oo(B b) {
+      b.foo("");
+      if (false) {
+        foo(b);
+      }
+  }
+}
+
+class B {
+  void foo(String s) {
+    System.out.println(s);
+  }
+}
+
+
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/SameNamesRecursion.java.after b/java/java-tests/testData/refactoring/moveInstanceMethod/SameNamesRecursion.java.after
new file mode 100644
index 0000000..645c95c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/SameNamesRecursion.java.after
@@ -0,0 +1,17 @@
+public class A {
+}
+
+class B {
+  void foo(String s) {
+    System.out.println(s);
+  }
+
+    void foo() {
+      foo("");
+      if (false) {
+        foo();
+      }
+  }
+}
+
+
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/Simple.java b/java/java-tests/testData/refactoring/moveInstanceMethod/Simple.java
new file mode 100644
index 0000000..0435d50
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/Simple.java
@@ -0,0 +1,14 @@
+class Foreign {
+}
+
+class Test {
+    int field;
+
+    void <caret>foo (Foreign f) {
+        field++;
+    }
+
+    void bar () {
+        foo(new Foreign());
+    }
+}
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/Simple.java.after b/java/java-tests/testData/refactoring/moveInstanceMethod/Simple.java.after
new file mode 100644
index 0000000..61f81b6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/Simple.java.after
@@ -0,0 +1,13 @@
+class Foreign {
+    void foo(Test test) {
+        test.field++;
+    }
+}
+
+class Test {
+    int field;
+
+    void bar () {
+        new Foreign().foo(this);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/SimpleWithTargetField.java b/java/java-tests/testData/refactoring/moveInstanceMethod/SimpleWithTargetField.java
new file mode 100644
index 0000000..12d3757
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/SimpleWithTargetField.java
@@ -0,0 +1,15 @@
+class Foreign {
+}
+
+public abstract class Test1 {
+    int field;
+    Foreign myForeign;
+
+    void <caret>foo () {
+        field++;
+    }
+
+    void bar () {
+        foo();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/SimpleWithTargetField.java.after b/java/java-tests/testData/refactoring/moveInstanceMethod/SimpleWithTargetField.java.after
new file mode 100644
index 0000000..bfa8382
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/SimpleWithTargetField.java.after
@@ -0,0 +1,14 @@
+class Foreign {
+    void foo(Test1 test1) {
+        test1.field++;
+    }
+}
+
+public abstract class Test1 {
+    int field;
+    Foreign myForeign;
+
+    void bar () {
+        myForeign.foo(this);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/StripFieldQualifier.java b/java/java-tests/testData/refactoring/moveInstanceMethod/StripFieldQualifier.java
new file mode 100644
index 0000000..93769aa
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/StripFieldQualifier.java
@@ -0,0 +1,12 @@
+public class Test {
+
+    private Bar bar = new Bar();
+
+    public void <caret>foo(int y) {
+        bar.x = y;
+    }
+
+    private static class Bar {
+        private int x;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/StripFieldQualifier.java.after b/java/java-tests/testData/refactoring/moveInstanceMethod/StripFieldQualifier.java.after
new file mode 100644
index 0000000..8a1abf0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/StripFieldQualifier.java.after
@@ -0,0 +1,12 @@
+public class Test {
+
+    private Bar bar = new Bar();
+
+    private static class Bar {
+        private int x;
+
+        public void foo(int y) {
+            x = y;
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/ThisInAnonymous.java b/java/java-tests/testData/refactoring/moveInstanceMethod/ThisInAnonymous.java
new file mode 100644
index 0000000..875475d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/ThisInAnonymous.java
@@ -0,0 +1,16 @@
+public class Test {
+    private void prepare<caret>AnonymousClasses(JetElement aClass) {
+        aClass.acceptChildren(new JetVisitor() {
+            public void visitJetElement(JetElement element) {
+                element.acceptChildren(this);
+            }
+        });
+    }
+}
+
+
+class JetElement {
+    void acceptChildren(JetVisitor v) {}
+}
+
+class JetVisitor {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/ThisInAnonymous.java.after b/java/java-tests/testData/refactoring/moveInstanceMethod/ThisInAnonymous.java.after
new file mode 100644
index 0000000..918098f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/ThisInAnonymous.java.after
@@ -0,0 +1,17 @@
+public class Test {
+}
+
+
+class JetElement {
+    void acceptChildren(JetVisitor v) {}
+
+    private void prepareAnonymousClasses() {
+        acceptChildren(new JetVisitor() {
+            public void visitJetElement(JetElement element) {
+                element.acceptChildren(this);
+            }
+        });
+    }
+}
+
+class JetVisitor {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/TwoParams.java b/java/java-tests/testData/refactoring/moveInstanceMethod/TwoParams.java
new file mode 100644
index 0000000..5d1e5e5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/TwoParams.java
@@ -0,0 +1,12 @@
+class Foreign {
+}
+
+class MoveMethodTest {
+    void bar(Inner inner) {}
+
+    class Inner {
+      void <caret>foo(final Foreign foreign) {
+         bar (this);
+      }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/TwoParams.java.after b/java/java-tests/testData/refactoring/moveInstanceMethod/TwoParams.java.after
new file mode 100644
index 0000000..6dc0df4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/TwoParams.java.after
@@ -0,0 +1,12 @@
+class Foreign {
+    void foo(MoveMethodTest moveMethodTest, MoveMethodTest.Inner inner) {
+       moveMethodTest.bar (inner);
+    }
+}
+
+class MoveMethodTest {
+    void bar(Inner inner) {}
+
+    class Inner {
+    }
+}
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/WithInner.java b/java/java-tests/testData/refactoring/moveInstanceMethod/WithInner.java
new file mode 100644
index 0000000..e0dc3d4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/WithInner.java
@@ -0,0 +1,16 @@
+class Foreign {
+    class Inner {}
+}
+
+
+public abstract class Test1 {
+    void <caret>foo (Foreign f, Inner i) {
+      new Inner();
+    }
+
+    class Inner {}
+
+    void bar () {
+        foo(new Foreign(), new Inner());
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/WithInner.java.after b/java/java-tests/testData/refactoring/moveInstanceMethod/WithInner.java.after
new file mode 100644
index 0000000..ac07170
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveInstanceMethod/WithInner.java.after
@@ -0,0 +1,17 @@
+class Foreign {
+    void foo(Test1.Inner i, Test1 test1) {
+      test1.new Inner();
+    }
+
+    class Inner {}
+}
+
+
+public abstract class Test1 {
+
+    class Inner {}
+
+    void bar () {
+        new Foreign().foo(new Inner(), this);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/IDEADEV11416/after/Y.java b/java/java-tests/testData/refactoring/moveMembers/IDEADEV11416/after/Y.java
new file mode 100644
index 0000000..4e78f0f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/IDEADEV11416/after/Y.java
@@ -0,0 +1,6 @@
+class X {
+    public static final String A = "IDEA is the best";
+}
+
+interface Y {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/IDEADEV11416/before/Y.java b/java/java-tests/testData/refactoring/moveMembers/IDEADEV11416/before/Y.java
new file mode 100644
index 0000000..30a792c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/IDEADEV11416/before/Y.java
@@ -0,0 +1,6 @@
+class X {
+}
+
+interface Y {
+    String A = "IDEA is the best";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/IDEADEV12448/after/Test.java b/java/java-tests/testData/refactoring/moveMembers/IDEADEV12448/after/Test.java
new file mode 100644
index 0000000..a12f5b7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/IDEADEV12448/after/Test.java
@@ -0,0 +1,11 @@
+@interface SomeAnnotation {
+    String value();
+}
+
+@SomeAnnotation(A.CONST)
+interface A {
+    String CONST = "42";
+}
+
+interface B {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/IDEADEV12448/before/Test.java b/java/java-tests/testData/refactoring/moveMembers/IDEADEV12448/before/Test.java
new file mode 100644
index 0000000..9e62c00
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/IDEADEV12448/before/Test.java
@@ -0,0 +1,8 @@
+@interface SomeAnnotation {
+    String value();
+}
+
+@SomeAnnotation(B.CONST)
+interface A {}
+
+interface B { String CONST = "42"; }
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/dependantFields/after/A.java b/java/java-tests/testData/refactoring/moveMembers/dependantFields/after/A.java
new file mode 100644
index 0000000..6213d12
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/dependantFields/after/A.java
@@ -0,0 +1,6 @@
+public class A {
+    void foo(){}
+
+    public static final String ONE = "";
+    public static final String TWO = ONE + "";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/dependantFields/after/B.java b/java/java-tests/testData/refactoring/moveMembers/dependantFields/after/B.java
new file mode 100644
index 0000000..ebbe4dc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/dependantFields/after/B.java
@@ -0,0 +1,2 @@
+public class B {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/dependantFields/before/A.java b/java/java-tests/testData/refactoring/moveMembers/dependantFields/before/A.java
new file mode 100644
index 0000000..617cbfc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/dependantFields/before/A.java
@@ -0,0 +1,4 @@
+public class A {
+    void foo(){}
+    public static final String TWO = B.ONE + "";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/dependantFields/before/B.java b/java/java-tests/testData/refactoring/moveMembers/dependantFields/before/B.java
new file mode 100644
index 0000000..acf3478
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/dependantFields/before/B.java
@@ -0,0 +1,3 @@
+public class B {
+    public static final String ONE = ""; 
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/enumConstant/after/A.java b/java/java-tests/testData/refactoring/moveMembers/enumConstant/after/A.java
new file mode 100644
index 0000000..a333059
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/enumConstant/after/A.java
@@ -0,0 +1,4 @@
+public enum A {
+    ONE("");
+  A(String s){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/enumConstant/after/B.java b/java/java-tests/testData/refactoring/moveMembers/enumConstant/after/B.java
new file mode 100644
index 0000000..ebbe4dc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/enumConstant/after/B.java
@@ -0,0 +1,2 @@
+public class B {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/enumConstant/before/A.java b/java/java-tests/testData/refactoring/moveMembers/enumConstant/before/A.java
new file mode 100644
index 0000000..e67f4be
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/enumConstant/before/A.java
@@ -0,0 +1,4 @@
+public enum A {
+  ;
+  A(String s){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/enumConstant/before/B.java b/java/java-tests/testData/refactoring/moveMembers/enumConstant/before/B.java
new file mode 100644
index 0000000..acf3478
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/enumConstant/before/B.java
@@ -0,0 +1,3 @@
+public class B {
+    public static final String ONE = ""; 
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/enumConstantFromCaseStatement/after/A.java b/java/java-tests/testData/refactoring/moveMembers/enumConstantFromCaseStatement/after/A.java
new file mode 100644
index 0000000..e7628d4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/enumConstantFromCaseStatement/after/A.java
@@ -0,0 +1,4 @@
+public enum A {
+    ONE(1);
+  A(int i){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/enumConstantFromCaseStatement/after/B.java b/java/java-tests/testData/refactoring/moveMembers/enumConstantFromCaseStatement/after/B.java
new file mode 100644
index 0000000..2ae14a3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/enumConstantFromCaseStatement/after/B.java
@@ -0,0 +1,17 @@
+public class B {
+    void foo(A i) {
+        switch (i) {
+            case ONE :
+              break;
+        }
+    }
+}
+
+class Usage {
+    void foo(A i) {
+        switch (i) {
+            case ONE :
+              break;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/enumConstantFromCaseStatement/before/A.java b/java/java-tests/testData/refactoring/moveMembers/enumConstantFromCaseStatement/before/A.java
new file mode 100644
index 0000000..86e9632
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/enumConstantFromCaseStatement/before/A.java
@@ -0,0 +1,4 @@
+public enum A {
+  ;
+  A(int i){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/enumConstantFromCaseStatement/before/B.java b/java/java-tests/testData/refactoring/moveMembers/enumConstantFromCaseStatement/before/B.java
new file mode 100644
index 0000000..215d0ea
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/enumConstantFromCaseStatement/before/B.java
@@ -0,0 +1,18 @@
+public class B {
+    public static final int ONE = 1;
+    void foo(A i) {
+        switch (i) {
+            case ONE :
+              break;
+        }
+    }
+}
+
+class Usage {
+    void foo(A i) {
+        switch (i) {
+            case B.ONE :
+              break;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/escalateVisibility/after/pack1/A.java b/java/java-tests/testData/refactoring/moveMembers/escalateVisibility/after/pack1/A.java
new file mode 100644
index 0000000..30fd5bb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/escalateVisibility/after/pack1/A.java
@@ -0,0 +1,8 @@
+package pack1;
+
+public class A {
+
+    public static void foo() {
+        C.bar();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/escalateVisibility/after/pack1/C.java b/java/java-tests/testData/refactoring/moveMembers/escalateVisibility/after/pack1/C.java
new file mode 100644
index 0000000..adb942f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/escalateVisibility/after/pack1/C.java
@@ -0,0 +1,4 @@
+package pack1;
+public class C {
+    static void bar(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/escalateVisibility/before/pack1/A.java b/java/java-tests/testData/refactoring/moveMembers/escalateVisibility/before/pack1/A.java
new file mode 100644
index 0000000..d0ae49f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/escalateVisibility/before/pack1/A.java
@@ -0,0 +1,9 @@
+package pack1;
+
+public class A {
+    private static void bar(){}
+
+    public static void foo() {
+        bar();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/escalateVisibility/before/pack1/C.java b/java/java-tests/testData/refactoring/moveMembers/escalateVisibility/before/pack1/C.java
new file mode 100644
index 0000000..d145a38
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/escalateVisibility/before/pack1/C.java
@@ -0,0 +1,2 @@
+package pack1;
+public class C {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/escalateVisibility1/after/A.java b/java/java-tests/testData/refactoring/moveMembers/escalateVisibility1/after/A.java
new file mode 100644
index 0000000..4695645
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/escalateVisibility1/after/A.java
@@ -0,0 +1,5 @@
+public interface A {
+    void bar() {
+    B.foo("");
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/escalateVisibility1/after/B.java b/java/java-tests/testData/refactoring/moveMembers/escalateVisibility1/after/B.java
new file mode 100644
index 0000000..6ad3ee6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/escalateVisibility1/after/B.java
@@ -0,0 +1,6 @@
+public class B {
+    static void foo(String s) {}
+
+    void foo(int x) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/escalateVisibility1/before/A.java b/java/java-tests/testData/refactoring/moveMembers/escalateVisibility1/before/A.java
new file mode 100644
index 0000000..670841b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/escalateVisibility1/before/A.java
@@ -0,0 +1,6 @@
+public interface A {
+  private static void foo(String s) {}
+  void bar() {
+    foo("");
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/escalateVisibility1/before/B.java b/java/java-tests/testData/refactoring/moveMembers/escalateVisibility1/before/B.java
new file mode 100644
index 0000000..4c599e1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/escalateVisibility1/before/B.java
@@ -0,0 +1,4 @@
+public class B {
+  void foo(int x) {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/explicitStaticImport/after/A.java b/java/java-tests/testData/refactoring/moveMembers/explicitStaticImport/after/A.java
new file mode 100644
index 0000000..87b235a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/explicitStaticImport/after/A.java
@@ -0,0 +1,7 @@
+import static B.Z;
+
+public class A {
+  public static void main(String[] args) {
+    System.out.println("Z = " + Z);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/explicitStaticImport/after/B.java b/java/java-tests/testData/refactoring/moveMembers/explicitStaticImport/after/B.java
new file mode 100644
index 0000000..b8f95e5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/explicitStaticImport/after/B.java
@@ -0,0 +1,3 @@
+public class B {
+    public static final String Z = "z";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/explicitStaticImport/after/C.java b/java/java-tests/testData/refactoring/moveMembers/explicitStaticImport/after/C.java
new file mode 100644
index 0000000..f5ef01c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/explicitStaticImport/after/C.java
@@ -0,0 +1,2 @@
+public class C {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/explicitStaticImport/before/A.java b/java/java-tests/testData/refactoring/moveMembers/explicitStaticImport/before/A.java
new file mode 100644
index 0000000..5b919ad
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/explicitStaticImport/before/A.java
@@ -0,0 +1,7 @@
+import static C.Z;
+
+public class A {
+  public static void main(String[] args) {
+    System.out.println("Z = " + Z);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/explicitStaticImport/before/B.java b/java/java-tests/testData/refactoring/moveMembers/explicitStaticImport/before/B.java
new file mode 100644
index 0000000..ebbe4dc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/explicitStaticImport/before/B.java
@@ -0,0 +1,2 @@
+public class B {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/explicitStaticImport/before/C.java b/java/java-tests/testData/refactoring/moveMembers/explicitStaticImport/before/C.java
new file mode 100644
index 0000000..a2d0e76
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/explicitStaticImport/before/C.java
@@ -0,0 +1,3 @@
+public class C {
+  public static final String Z = "z";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/fieldForwardRef/after/A.java b/java/java-tests/testData/refactoring/moveMembers/fieldForwardRef/after/A.java
new file mode 100644
index 0000000..eb61624
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/fieldForwardRef/after/A.java
@@ -0,0 +1,3 @@
+public class A {
+
+}
diff --git a/java/java-tests/testData/refactoring/moveMembers/fieldForwardRef/after/Constants.java b/java/java-tests/testData/refactoring/moveMembers/fieldForwardRef/after/Constants.java
new file mode 100644
index 0000000..b6e2dac
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/fieldForwardRef/after/Constants.java
@@ -0,0 +1,7 @@
+public class Constants {
+    private static void init() { }
+
+    public static final String A = "a";
+    public static final String B = "b";
+    public static final String[] A_OR_B = new String[]{A, B};
+}
diff --git a/java/java-tests/testData/refactoring/moveMembers/fieldForwardRef/before/A.java b/java/java-tests/testData/refactoring/moveMembers/fieldForwardRef/before/A.java
new file mode 100644
index 0000000..00c9b45
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/fieldForwardRef/before/A.java
@@ -0,0 +1,4 @@
+public class A {
+  public static final String[] A_OR_B = new String[]{ Constants.A, Constants.B };
+
+}
diff --git a/java/java-tests/testData/refactoring/moveMembers/fieldForwardRef/before/Constants.java b/java/java-tests/testData/refactoring/moveMembers/fieldForwardRef/before/Constants.java
new file mode 100644
index 0000000..fab7881
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/fieldForwardRef/before/Constants.java
@@ -0,0 +1,6 @@
+public class Constants {
+    private static void init() { }
+
+    public static final String A = "a";
+    public static final String B = "b";
+}
diff --git a/java/java-tests/testData/refactoring/moveMembers/innerClass/after/A.java b/java/java-tests/testData/refactoring/moveMembers/innerClass/after/A.java
new file mode 100644
index 0000000..61ff2ab
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/innerClass/after/A.java
@@ -0,0 +1,2 @@
+public class A {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/innerClass/after/B.java b/java/java-tests/testData/refactoring/moveMembers/innerClass/after/B.java
new file mode 100644
index 0000000..05e1b2c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/innerClass/after/B.java
@@ -0,0 +1,9 @@
+public class B {
+    Inner i = new Inner();
+
+    public static class Inner {
+        public boolean equals(Object o) {
+            return o instanceof Inner;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/innerClass/after/C.java b/java/java-tests/testData/refactoring/moveMembers/innerClass/after/C.java
new file mode 100644
index 0000000..b19d005
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/innerClass/after/C.java
@@ -0,0 +1,3 @@
+public class C {
+    B.Inner i = new B.Inner();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/innerClass/before/A.java b/java/java-tests/testData/refactoring/moveMembers/innerClass/before/A.java
new file mode 100644
index 0000000..f36406d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/innerClass/before/A.java
@@ -0,0 +1,7 @@
+public class A {
+    public static class Inner {
+        public boolean equals(Object o) {
+            return o instanceof Inner;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/innerClass/before/B.java b/java/java-tests/testData/refactoring/moveMembers/innerClass/before/B.java
new file mode 100644
index 0000000..56d29d8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/innerClass/before/B.java
@@ -0,0 +1,3 @@
+public class B {
+    A.Inner i = new A.Inner();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/innerClass/before/C.java b/java/java-tests/testData/refactoring/moveMembers/innerClass/before/C.java
new file mode 100644
index 0000000..66d09a5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/innerClass/before/C.java
@@ -0,0 +1,3 @@
+public class C {
+    A.Inner i = new A.Inner();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/innerToInterface/after/A.java b/java/java-tests/testData/refactoring/moveMembers/innerToInterface/after/A.java
new file mode 100644
index 0000000..61ff2ab
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/innerToInterface/after/A.java
@@ -0,0 +1,2 @@
+public class A {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/innerToInterface/after/B.java b/java/java-tests/testData/refactoring/moveMembers/innerToInterface/after/B.java
new file mode 100644
index 0000000..bc81c5f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/innerToInterface/after/B.java
@@ -0,0 +1,9 @@
+public interface B {
+    Inner i = new Inner();
+
+    class Inner {
+        public boolean equals(Object o) {
+            return o instanceof Inner;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/innerToInterface/after/C.java b/java/java-tests/testData/refactoring/moveMembers/innerToInterface/after/C.java
new file mode 100644
index 0000000..b19d005
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/innerToInterface/after/C.java
@@ -0,0 +1,3 @@
+public class C {
+    B.Inner i = new B.Inner();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/innerToInterface/before/A.java b/java/java-tests/testData/refactoring/moveMembers/innerToInterface/before/A.java
new file mode 100644
index 0000000..f36406d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/innerToInterface/before/A.java
@@ -0,0 +1,7 @@
+public class A {
+    public static class Inner {
+        public boolean equals(Object o) {
+            return o instanceof Inner;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/innerToInterface/before/B.java b/java/java-tests/testData/refactoring/moveMembers/innerToInterface/before/B.java
new file mode 100644
index 0000000..c313de6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/innerToInterface/before/B.java
@@ -0,0 +1,3 @@
+public interface B {
+    A.Inner i = new A.Inner();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/innerToInterface/before/C.java b/java/java-tests/testData/refactoring/moveMembers/innerToInterface/before/C.java
new file mode 100644
index 0000000..66d09a5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/innerToInterface/before/C.java
@@ -0,0 +1,3 @@
+public class C {
+    A.Inner i = new A.Inner();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/javadocRefs/after/Class1.java b/java/java-tests/testData/refactoring/moveMembers/javadocRefs/after/Class1.java
new file mode 100644
index 0000000..960a378
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/javadocRefs/after/Class1.java
@@ -0,0 +1,9 @@
+
+public class Class1 {
+
+    /**
+     * @see Class2#foo Some text {@link Class2#foo label}
+     */
+    void test() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/javadocRefs/after/Class2.java b/java/java-tests/testData/refactoring/moveMembers/javadocRefs/after/Class2.java
new file mode 100644
index 0000000..845fda1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/javadocRefs/after/Class2.java
@@ -0,0 +1,5 @@
+
+public class Class2 {
+    public static void foo(){
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/javadocRefs/after/User.java b/java/java-tests/testData/refactoring/moveMembers/javadocRefs/after/User.java
new file mode 100644
index 0000000..d676cce
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/javadocRefs/after/User.java
@@ -0,0 +1,6 @@
+
+/**
+ * @see Class2#foo Some text {@link Class2#foo label}
+ */
+public class User {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/javadocRefs/before/Class1.java b/java/java-tests/testData/refactoring/moveMembers/javadocRefs/before/Class1.java
new file mode 100644
index 0000000..2a0f543
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/javadocRefs/before/Class1.java
@@ -0,0 +1,11 @@
+
+public class Class1 {
+    public static void foo(){
+    }
+
+    /**
+     * @see #foo Some text {@link #foo label}
+     */
+    void test() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/javadocRefs/before/Class2.java b/java/java-tests/testData/refactoring/moveMembers/javadocRefs/before/Class2.java
new file mode 100644
index 0000000..2999267
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/javadocRefs/before/Class2.java
@@ -0,0 +1,3 @@
+
+public class Class2 {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/javadocRefs/before/User.java b/java/java-tests/testData/refactoring/moveMembers/javadocRefs/before/User.java
new file mode 100644
index 0000000..b726fd5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/javadocRefs/before/User.java
@@ -0,0 +1,6 @@
+
+/**
+ * @see Class1#foo Some text {@link Class1#foo label}
+ */
+public class User {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/multipleWithDependencies/after/A.java b/java/java-tests/testData/refactoring/moveMembers/multipleWithDependencies/after/A.java
new file mode 100644
index 0000000..f7e8cc3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/multipleWithDependencies/after/A.java
@@ -0,0 +1,2 @@
+public class A {
+}
diff --git a/java/java-tests/testData/refactoring/moveMembers/multipleWithDependencies/after/B.java b/java/java-tests/testData/refactoring/moveMembers/multipleWithDependencies/after/B.java
new file mode 100644
index 0000000..a6ed9bd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/multipleWithDependencies/after/B.java
@@ -0,0 +1,6 @@
+public class B {
+    public static final String SRT1 = "";
+    public static final String SRT = "";
+    private static String[] ALL = {SRT, SRT1};
+    private static String[] ALL_1 = {SRT, SRT1};
+}
diff --git a/java/java-tests/testData/refactoring/moveMembers/multipleWithDependencies/before/A.java b/java/java-tests/testData/refactoring/moveMembers/multipleWithDependencies/before/A.java
new file mode 100644
index 0000000..b154dbe
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/multipleWithDependencies/before/A.java
@@ -0,0 +1,4 @@
+public class A {
+    public static final String SRT = "";
+    public static final String SRT1 = "";
+}
diff --git a/java/java-tests/testData/refactoring/moveMembers/multipleWithDependencies/before/B.java b/java/java-tests/testData/refactoring/moveMembers/multipleWithDependencies/before/B.java
new file mode 100644
index 0000000..552d1e3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/multipleWithDependencies/before/B.java
@@ -0,0 +1,4 @@
+public class B {
+    private static String[] ALL = {A.SRT, A.SRT1};
+    private static String[] ALL_1 = {A.SRT, A.SRT1};
+}
diff --git a/java/java-tests/testData/refactoring/moveMembers/otherPackageImport/after/pack1/ClassWithStaticMethod.java b/java/java-tests/testData/refactoring/moveMembers/otherPackageImport/after/pack1/ClassWithStaticMethod.java
new file mode 100644
index 0000000..6c4238e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/otherPackageImport/after/pack1/ClassWithStaticMethod.java
@@ -0,0 +1,11 @@
+package pack1;
+
+import pack2.OtherClass;
+
+public class ClassWithStaticMethod {
+
+    public static void main(String[] args) {
+        OtherClass.callee();
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/otherPackageImport/after/pack2/OtherClass.java b/java/java-tests/testData/refactoring/moveMembers/otherPackageImport/after/pack2/OtherClass.java
new file mode 100644
index 0000000..60693f3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/otherPackageImport/after/pack2/OtherClass.java
@@ -0,0 +1,7 @@
+package pack2;
+
+public class OtherClass {
+    public static void callee() {
+
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/otherPackageImport/before/pack1/ClassWithStaticMethod.java b/java/java-tests/testData/refactoring/moveMembers/otherPackageImport/before/pack1/ClassWithStaticMethod.java
new file mode 100644
index 0000000..6a40470
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/otherPackageImport/before/pack1/ClassWithStaticMethod.java
@@ -0,0 +1,12 @@
+package pack1;
+
+public class ClassWithStaticMethod {
+
+    public static void main(String[] args) {
+        callee();
+    }
+
+    public static void callee() {
+
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/otherPackageImport/before/pack2/OtherClass.java b/java/java-tests/testData/refactoring/moveMembers/otherPackageImport/before/pack2/OtherClass.java
new file mode 100644
index 0000000..1eb5250
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/otherPackageImport/before/pack2/OtherClass.java
@@ -0,0 +1,4 @@
+package pack2;
+
+public class OtherClass {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/outerClassTypeParameters/after/pack1/A.java b/java/java-tests/testData/refactoring/moveMembers/outerClassTypeParameters/after/pack1/A.java
new file mode 100644
index 0000000..b53d354
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/outerClassTypeParameters/after/pack1/A.java
@@ -0,0 +1,7 @@
+package pack1;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class A {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/outerClassTypeParameters/after/pack1/Outer.java b/java/java-tests/testData/refactoring/moveMembers/outerClassTypeParameters/after/pack1/Outer.java
new file mode 100644
index 0000000..528ed8f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/outerClassTypeParameters/after/pack1/Outer.java
@@ -0,0 +1,6 @@
+package pack1;
+
+public class Outer <T>{
+    public static class Inner<T>{
+    }
+}
diff --git a/java/java-tests/testData/refactoring/moveMembers/outerClassTypeParameters/after/pack2/B.java b/java/java-tests/testData/refactoring/moveMembers/outerClassTypeParameters/after/pack2/B.java
new file mode 100644
index 0000000..f36b623
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/outerClassTypeParameters/after/pack2/B.java
@@ -0,0 +1,12 @@
+package pack2;
+
+import pack1.Outer;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class B {
+    public static void foo(){
+        Outer<ArrayList>.Inner<List> x;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/outerClassTypeParameters/before/pack1/A.java b/java/java-tests/testData/refactoring/moveMembers/outerClassTypeParameters/before/pack1/A.java
new file mode 100644
index 0000000..9b6b73ff
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/outerClassTypeParameters/before/pack1/A.java
@@ -0,0 +1,10 @@
+package pack1;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class A {
+    public static void foo(){
+        Outer<ArrayList>.Inner<List> x;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/outerClassTypeParameters/before/pack1/Outer.java b/java/java-tests/testData/refactoring/moveMembers/outerClassTypeParameters/before/pack1/Outer.java
new file mode 100644
index 0000000..528ed8f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/outerClassTypeParameters/before/pack1/Outer.java
@@ -0,0 +1,6 @@
+package pack1;
+
+public class Outer <T>{
+    public static class Inner<T>{
+    }
+}
diff --git a/java/java-tests/testData/refactoring/moveMembers/outerClassTypeParameters/before/pack2/B.java b/java/java-tests/testData/refactoring/moveMembers/outerClassTypeParameters/before/pack2/B.java
new file mode 100644
index 0000000..0f963b5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/outerClassTypeParameters/before/pack2/B.java
@@ -0,0 +1,4 @@
+package pack2;
+
+public class B {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/parameterizedRefOn/after/pack1/A.java b/java/java-tests/testData/refactoring/moveMembers/parameterizedRefOn/after/pack1/A.java
new file mode 100644
index 0000000..0b6baaf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/parameterizedRefOn/after/pack1/A.java
@@ -0,0 +1,16 @@
+package pack1;
+
+interface Eff<A, B> {
+    B f(A a);
+}
+
+abstract class POne<A> {
+    abstract A _1();
+
+}
+
+final class Hooray<A> {
+    public <B> Hooray<B> map(final Eff<A, B> f) {
+        return null;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/moveMembers/parameterizedRefOn/after/pack1/C.java b/java/java-tests/testData/refactoring/moveMembers/parameterizedRefOn/after/pack1/C.java
new file mode 100644
index 0000000..c1d4bd5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/parameterizedRefOn/after/pack1/C.java
@@ -0,0 +1,15 @@
+package pack1;
+
+public class C {
+    static <A> POne<Hooray<A>> sequence(final Hooray<POne<A>> as) {
+        return new POne<Hooray<A>>() {
+            public Hooray<A> _1() {
+                return as.map(C.<A>__1());
+            }
+        };
+    }
+
+    static <A> Eff<POne<A>, A> __1() {
+        return POne::_1;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/parameterizedRefOn/before/pack1/A.java b/java/java-tests/testData/refactoring/moveMembers/parameterizedRefOn/before/pack1/A.java
new file mode 100644
index 0000000..6bdd2e6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/parameterizedRefOn/before/pack1/A.java
@@ -0,0 +1,28 @@
+package pack1;
+
+interface Eff<A, B> {
+    B f(A a);
+}
+
+abstract class POne<A> {
+    abstract A _1();
+
+    static <A> POne<Hooray<A>> sequence(final Hooray<POne<A>> as) {
+        return new POne<Hooray<A>>() {
+            public Hooray<A> _1() {
+                return as.map(POne.<A>__1());
+            }
+        };
+    }
+
+    static <A> Eff<POne<A>, A> __1() {
+        return POne::_1;
+    }
+
+}
+
+final class Hooray<A> {
+    public <B> Hooray<B> map(final Eff<A, B> f) {
+        return null;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/moveMembers/parameterizedRefOn/before/pack1/C.java b/java/java-tests/testData/refactoring/moveMembers/parameterizedRefOn/before/pack1/C.java
new file mode 100644
index 0000000..bb7e3e0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/parameterizedRefOn/before/pack1/C.java
@@ -0,0 +1,4 @@
+package pack1;
+
+public class C {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/protectedConstructor/after/pack1/A.java b/java/java-tests/testData/refactoring/moveMembers/protectedConstructor/after/pack1/A.java
new file mode 100644
index 0000000..46fc78f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/protectedConstructor/after/pack1/A.java
@@ -0,0 +1,4 @@
+package pack1;
+
+public class A {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/protectedConstructor/after/pack1/C.java b/java/java-tests/testData/refactoring/moveMembers/protectedConstructor/after/pack1/C.java
new file mode 100644
index 0000000..9ecf606
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/protectedConstructor/after/pack1/C.java
@@ -0,0 +1,7 @@
+package pack1;
+
+public class C {
+    public static void foo() {
+        new B(){};
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/protectedConstructor/after/pack2/B.java b/java/java-tests/testData/refactoring/moveMembers/protectedConstructor/after/pack2/B.java
new file mode 100644
index 0000000..2dccb4e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/protectedConstructor/after/pack2/B.java
@@ -0,0 +1,5 @@
+package pack2;
+
+public class B {
+  protected B(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/protectedConstructor/before/pack1/A.java b/java/java-tests/testData/refactoring/moveMembers/protectedConstructor/before/pack1/A.java
new file mode 100644
index 0000000..9877661b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/protectedConstructor/before/pack1/A.java
@@ -0,0 +1,7 @@
+package pack1;
+
+public class A {
+    public static void foo() {
+        new B(){};
+    }    
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/protectedConstructor/before/pack1/C.java b/java/java-tests/testData/refactoring/moveMembers/protectedConstructor/before/pack1/C.java
new file mode 100644
index 0000000..bb7e3e0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/protectedConstructor/before/pack1/C.java
@@ -0,0 +1,4 @@
+package pack1;
+
+public class C {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/protectedConstructor/before/pack2/B.java b/java/java-tests/testData/refactoring/moveMembers/protectedConstructor/before/pack2/B.java
new file mode 100644
index 0000000..2dccb4e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/protectedConstructor/before/pack2/B.java
@@ -0,0 +1,5 @@
+package pack2;
+
+public class B {
+  protected B(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/scr11871/after/pack1/A.java b/java/java-tests/testData/refactoring/moveMembers/scr11871/after/pack1/A.java
new file mode 100644
index 0000000..9ab38d2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/scr11871/after/pack1/A.java
@@ -0,0 +1,7 @@
+package pack1;
+
+public class A {
+
+    class Inner {
+    } 
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/scr11871/after/pack1/B.java b/java/java-tests/testData/refactoring/moveMembers/scr11871/after/pack1/B.java
new file mode 100644
index 0000000..6897475
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/scr11871/after/pack1/B.java
@@ -0,0 +1,7 @@
+package pack1;
+
+public class B {
+    static void method() {
+        A.Inner i = new A.Inner();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/scr11871/before/pack1/A.java b/java/java-tests/testData/refactoring/moveMembers/scr11871/before/pack1/A.java
new file mode 100644
index 0000000..8d90f92
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/scr11871/before/pack1/A.java
@@ -0,0 +1,10 @@
+package pack1;
+
+public class A {
+    static void method() {
+        Inner i = new Inner();
+    }
+
+    class Inner {
+    } 
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/scr11871/before/pack1/B.java b/java/java-tests/testData/refactoring/moveMembers/scr11871/before/pack1/B.java
new file mode 100644
index 0000000..078a6fc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/scr11871/before/pack1/B.java
@@ -0,0 +1,4 @@
+package pack1;
+
+public class B {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/scr40064/after/Test.java b/java/java-tests/testData/refactoring/moveMembers/scr40064/after/Test.java
new file mode 100644
index 0000000..bf7239b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/scr40064/after/Test.java
@@ -0,0 +1,14 @@
+class Test {
+
+    void u() {
+
+    }
+}
+
+class Test1 {
+    {
+        i = 0;
+    }
+
+    static int i;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/scr40064/before/Test.java b/java/java-tests/testData/refactoring/moveMembers/scr40064/before/Test.java
new file mode 100644
index 0000000..10cd1b9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/scr40064/before/Test.java
@@ -0,0 +1,15 @@
+import static Test.i;
+
+class Test {
+    static int i;
+
+    void u() {
+
+    }
+}
+
+class Test1 {
+    {
+        i = 0;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/scr40947/after/Test.java b/java/java-tests/testData/refactoring/moveMembers/scr40947/after/Test.java
new file mode 100644
index 0000000..b8ac759
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/scr40947/after/Test.java
@@ -0,0 +1,11 @@
+class A {
+}
+
+class Test {
+
+    static void foo() {
+      bar(); // note redundant "A" qualifier
+    }
+
+    static void bar() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/scr40947/before/Test.java b/java/java-tests/testData/refactoring/moveMembers/scr40947/before/Test.java
new file mode 100644
index 0000000..0ebf7c5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/scr40947/before/Test.java
@@ -0,0 +1,10 @@
+class A {
+  static void foo() {
+    A.bar(); // note redundant "A" qualifier
+  }
+  static void bar() {}
+}
+
+class Test {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/staticImport/after/A.java b/java/java-tests/testData/refactoring/moveMembers/staticImport/after/A.java
new file mode 100644
index 0000000..13a57ca
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/staticImport/after/A.java
@@ -0,0 +1,8 @@
+import static B.*;
+
+public class A {
+  public static void main(String[] args) {
+    System.out.println("X = " + X);
+    System.out.println("Z = " + Z);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/staticImport/after/B.java b/java/java-tests/testData/refactoring/moveMembers/staticImport/after/B.java
new file mode 100644
index 0000000..5b65822
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/staticImport/after/B.java
@@ -0,0 +1,4 @@
+public class B {
+    public static final String X = "x";
+    public static final String Z = "z";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/staticImport/after/C.java b/java/java-tests/testData/refactoring/moveMembers/staticImport/after/C.java
new file mode 100644
index 0000000..f5ef01c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/staticImport/after/C.java
@@ -0,0 +1,2 @@
+public class C {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/staticImport/before/A.java b/java/java-tests/testData/refactoring/moveMembers/staticImport/before/A.java
new file mode 100644
index 0000000..0500df1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/staticImport/before/A.java
@@ -0,0 +1,9 @@
+import static C.*;
+import static B.*;
+
+public class A {
+  public static void main(String[] args) {
+    System.out.println("X = " + X);
+    System.out.println("Z = " + Z);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/staticImport/before/B.java b/java/java-tests/testData/refactoring/moveMembers/staticImport/before/B.java
new file mode 100644
index 0000000..26598ce
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/staticImport/before/B.java
@@ -0,0 +1,3 @@
+public class B {
+    public static final String X = "x";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/staticImport/before/C.java b/java/java-tests/testData/refactoring/moveMembers/staticImport/before/C.java
new file mode 100644
index 0000000..a2d0e76
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/staticImport/before/C.java
@@ -0,0 +1,3 @@
+public class C {
+  public static final String Z = "z";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/staticImportAndOverridenMethods/after/bar/A.java b/java/java-tests/testData/refactoring/moveMembers/staticImportAndOverridenMethods/after/bar/A.java
new file mode 100644
index 0000000..dc0831b5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/staticImportAndOverridenMethods/after/bar/A.java
@@ -0,0 +1,5 @@
+package bar;
+
+public class A {
+    public static void foo() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/staticImportAndOverridenMethods/after/bar/B.java b/java/java-tests/testData/refactoring/moveMembers/staticImportAndOverridenMethods/after/bar/B.java
new file mode 100644
index 0000000..010f00c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/staticImportAndOverridenMethods/after/bar/B.java
@@ -0,0 +1,5 @@
+package bar;
+
+public class B {
+    public static void foo(String s) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/staticImportAndOverridenMethods/after/bar/U.java b/java/java-tests/testData/refactoring/moveMembers/staticImportAndOverridenMethods/after/bar/U.java
new file mode 100644
index 0000000..ba41fd8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/staticImportAndOverridenMethods/after/bar/U.java
@@ -0,0 +1,7 @@
+import bar.A;
+
+class Usage {
+  void bar() {
+    A.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/staticImportAndOverridenMethods/before/bar/A.java b/java/java-tests/testData/refactoring/moveMembers/staticImportAndOverridenMethods/before/bar/A.java
new file mode 100644
index 0000000..e173147
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/staticImportAndOverridenMethods/before/bar/A.java
@@ -0,0 +1,4 @@
+package bar;
+
+public class A {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/staticImportAndOverridenMethods/before/bar/B.java b/java/java-tests/testData/refactoring/moveMembers/staticImportAndOverridenMethods/before/bar/B.java
new file mode 100644
index 0000000..b5ff307
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/staticImportAndOverridenMethods/before/bar/B.java
@@ -0,0 +1,6 @@
+package bar;
+
+public class B {
+    public static void foo() {}
+    public static void foo(String s) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/staticImportAndOverridenMethods/before/bar/U.java b/java/java-tests/testData/refactoring/moveMembers/staticImportAndOverridenMethods/before/bar/U.java
new file mode 100644
index 0000000..b7caf73
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/staticImportAndOverridenMethods/before/bar/U.java
@@ -0,0 +1,7 @@
+import static bar.B.foo;
+
+class Usage {
+  void bar() {
+    foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/twoMethods/after/pack1/A.java b/java/java-tests/testData/refactoring/moveMembers/twoMethods/after/pack1/A.java
new file mode 100644
index 0000000..526099a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/twoMethods/after/pack1/A.java
@@ -0,0 +1,5 @@
+package pack1;
+
+public class A {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/twoMethods/after/pack1/C.java b/java/java-tests/testData/refactoring/moveMembers/twoMethods/after/pack1/C.java
new file mode 100644
index 0000000..fa2b3eb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/twoMethods/after/pack1/C.java
@@ -0,0 +1,14 @@
+package pack1;
+
+public class C {
+    public static int ourField = 10;
+
+    private static void bar() {
+        foo();
+        ourField = 11;
+    }
+
+    public static void foo() {
+        bar();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/twoMethods/after/pack2/B.java b/java/java-tests/testData/refactoring/moveMembers/twoMethods/after/pack2/B.java
new file mode 100644
index 0000000..0f963b5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/twoMethods/after/pack2/B.java
@@ -0,0 +1,4 @@
+package pack2;
+
+public class B {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/twoMethods/before/pack1/A.java b/java/java-tests/testData/refactoring/moveMembers/twoMethods/before/pack1/A.java
new file mode 100644
index 0000000..5d8b7288
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/twoMethods/before/pack1/A.java
@@ -0,0 +1,13 @@
+package pack1;
+
+public class A {
+    public static int ourField = 10;
+    private static void bar() {
+        foo();
+        ourField = 11;
+    }
+
+    public static void foo() {
+        bar();
+    }    
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/twoMethods/before/pack1/C.java b/java/java-tests/testData/refactoring/moveMembers/twoMethods/before/pack1/C.java
new file mode 100644
index 0000000..bb7e3e0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/twoMethods/before/pack1/C.java
@@ -0,0 +1,4 @@
+package pack1;
+
+public class C {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/twoMethods/before/pack2/B.java b/java/java-tests/testData/refactoring/moveMembers/twoMethods/before/pack2/B.java
new file mode 100644
index 0000000..0f963b5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/twoMethods/before/pack2/B.java
@@ -0,0 +1,4 @@
+package pack2;
+
+public class B {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/untouchedVisibility/after/pack1/A.java b/java/java-tests/testData/refactoring/moveMembers/untouchedVisibility/after/pack1/A.java
new file mode 100644
index 0000000..fdfc70d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/untouchedVisibility/after/pack1/A.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2000-2011 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.
+ */
+package pack1;
+
+public class A {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/untouchedVisibility/after/pack1/C.java b/java/java-tests/testData/refactoring/moveMembers/untouchedVisibility/after/pack1/C.java
new file mode 100644
index 0000000..ac200b1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/untouchedVisibility/after/pack1/C.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright 2000-2011 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.
+ */
+package pack1;
+public class C {
+    public static void foo() {
+        bar();
+    }
+
+    private static void bar(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/untouchedVisibility/after/pack2/B.java b/java/java-tests/testData/refactoring/moveMembers/untouchedVisibility/after/pack2/B.java
new file mode 100644
index 0000000..53d549a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/untouchedVisibility/after/pack2/B.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2000-2011 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.
+ */
+package pack2;
+import pack1.*;
+public class B {
+  protected B(){
+    C.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/untouchedVisibility/before/pack1/A.java b/java/java-tests/testData/refactoring/moveMembers/untouchedVisibility/before/pack1/A.java
new file mode 100644
index 0000000..69c6a9c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/untouchedVisibility/before/pack1/A.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2000-2011 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.
+ */
+package pack1;
+
+public class A {
+    public static void foo() {
+        bar();
+    }
+
+    private static void bar(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/untouchedVisibility/before/pack1/C.java b/java/java-tests/testData/refactoring/moveMembers/untouchedVisibility/before/pack1/C.java
new file mode 100644
index 0000000..c77f204
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/untouchedVisibility/before/pack1/C.java
@@ -0,0 +1,17 @@
+/*
+ * Copyright 2000-2011 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.
+ */
+package pack1;
+public class C {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/untouchedVisibility/before/pack2/B.java b/java/java-tests/testData/refactoring/moveMembers/untouchedVisibility/before/pack2/B.java
new file mode 100644
index 0000000..e41703d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/untouchedVisibility/before/pack2/B.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2000-2011 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.
+ */
+package pack2;
+import pack1.*;
+public class B {
+  protected B(){
+    A.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/weirdDeclaration/after/A.java b/java/java-tests/testData/refactoring/moveMembers/weirdDeclaration/after/A.java
new file mode 100644
index 0000000..5bd71b2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/weirdDeclaration/after/A.java
@@ -0,0 +1,3 @@
+public class A {
+    final static String RIGHT_JUSTIFIED_PREFIX  =   "%l" ;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/weirdDeclaration/after/B.java b/java/java-tests/testData/refactoring/moveMembers/weirdDeclaration/after/B.java
new file mode 100644
index 0000000..dbe6eca
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/weirdDeclaration/after/B.java
@@ -0,0 +1,4 @@
+public class B {
+    final static String
+            LEFT_JUSTIFIED_PREFIX   =   "%r";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/weirdDeclaration/before/A.java b/java/java-tests/testData/refactoring/moveMembers/weirdDeclaration/before/A.java
new file mode 100644
index 0000000..841c5cb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/weirdDeclaration/before/A.java
@@ -0,0 +1,5 @@
+public class A {
+   final static String
+           LEFT_JUSTIFIED_PREFIX   =   "%r" ,
+           RIGHT_JUSTIFIED_PREFIX  =   "%l" ;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/weirdDeclaration/before/B.java b/java/java-tests/testData/refactoring/moveMembers/weirdDeclaration/before/B.java
new file mode 100644
index 0000000..ebbe4dc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/weirdDeclaration/before/B.java
@@ -0,0 +1,2 @@
+public class B {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/writableField/after/A.java b/java/java-tests/testData/refactoring/moveMembers/writableField/after/A.java
new file mode 100644
index 0000000..9772fb1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/writableField/after/A.java
@@ -0,0 +1,4 @@
+public interface A {
+
+    String ONE = "";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/writableField/after/B.java b/java/java-tests/testData/refactoring/moveMembers/writableField/after/B.java
new file mode 100644
index 0000000..0a70a25
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/writableField/after/B.java
@@ -0,0 +1,6 @@
+public class B {
+
+    void foo() {
+    A.ONE = "foo";
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/writableField/before/A.java b/java/java-tests/testData/refactoring/moveMembers/writableField/before/A.java
new file mode 100644
index 0000000..39abc028
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/writableField/before/A.java
@@ -0,0 +1,3 @@
+public interface A {
+    
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/writableField/before/B.java b/java/java-tests/testData/refactoring/moveMembers/writableField/before/B.java
new file mode 100644
index 0000000..c5933dc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/writableField/before/B.java
@@ -0,0 +1,7 @@
+public class B {
+  public static String ONE = "";
+
+  void foo() {
+    ONE = "foo";
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/movePackage/insidePackage/after/a/b/a/A.java b/java/java-tests/testData/refactoring/movePackage/insidePackage/after/a/b/a/A.java
new file mode 100644
index 0000000..e2f77b1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackage/insidePackage/after/a/b/a/A.java
@@ -0,0 +1,4 @@
+package a.b.a;
+
+class A {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/movePackage/insidePackage/after/a/b/a/b/empty.txt b/java/java-tests/testData/refactoring/movePackage/insidePackage/after/a/b/a/b/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackage/insidePackage/after/a/b/a/b/empty.txt
diff --git a/java/java-tests/testData/refactoring/movePackage/insidePackage/before/a/A.java b/java/java-tests/testData/refactoring/movePackage/insidePackage/before/a/A.java
new file mode 100644
index 0000000..de9985c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackage/insidePackage/before/a/A.java
@@ -0,0 +1,4 @@
+package a;
+
+class A {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/movePackage/insidePackage/before/a/b/empty.txt b/java/java-tests/testData/refactoring/movePackage/insidePackage/before/a/b/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackage/insidePackage/before/a/b/empty.txt
diff --git a/java/java-tests/testData/refactoring/movePackage/moveSingle/after/pack2/User1.java b/java/java-tests/testData/refactoring/movePackage/moveSingle/after/pack2/User1.java
new file mode 100644
index 0000000..47a6d0f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackage/moveSingle/after/pack2/User1.java
@@ -0,0 +1,7 @@
+package pack2;
+
+import target.pack1.Class1;
+
+public class User1 {
+  Class1 a;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/movePackage/moveSingle/after/pack2/User2.java b/java/java-tests/testData/refactoring/movePackage/moveSingle/after/pack2/User2.java
new file mode 100644
index 0000000..7e78194
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackage/moveSingle/after/pack2/User2.java
@@ -0,0 +1,7 @@
+package pack2;
+
+import target.pack1.*;
+
+public class User1 {
+  Class1 a;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/movePackage/moveSingle/after/target/empty.txt b/java/java-tests/testData/refactoring/movePackage/moveSingle/after/target/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackage/moveSingle/after/target/empty.txt
diff --git a/java/java-tests/testData/refactoring/movePackage/moveSingle/after/target/pack1/Class1.java b/java/java-tests/testData/refactoring/movePackage/moveSingle/after/target/pack1/Class1.java
new file mode 100644
index 0000000..094eaad
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackage/moveSingle/after/target/pack1/Class1.java
@@ -0,0 +1,4 @@
+package target.pack1;
+
+public class Class1 {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/movePackage/moveSingle/before/pack1/Class1.java b/java/java-tests/testData/refactoring/movePackage/moveSingle/before/pack1/Class1.java
new file mode 100644
index 0000000..231fe06
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackage/moveSingle/before/pack1/Class1.java
@@ -0,0 +1,4 @@
+package pack1;
+
+public class Class1 {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/movePackage/moveSingle/before/pack2/User1.java b/java/java-tests/testData/refactoring/movePackage/moveSingle/before/pack2/User1.java
new file mode 100644
index 0000000..07287a4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackage/moveSingle/before/pack2/User1.java
@@ -0,0 +1,7 @@
+package pack2;
+
+import pack1.Class1;
+
+public class User1 {
+  Class1 a;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/movePackage/moveSingle/before/pack2/User2.java b/java/java-tests/testData/refactoring/movePackage/moveSingle/before/pack2/User2.java
new file mode 100644
index 0000000..acf3ce5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackage/moveSingle/before/pack2/User2.java
@@ -0,0 +1,7 @@
+package pack2;
+
+import pack1.*;
+
+public class User1 {
+  Class1 a;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/movePackage/moveSingle/before/target/empty.txt b/java/java-tests/testData/refactoring/movePackage/moveSingle/before/target/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackage/moveSingle/before/target/empty.txt
diff --git a/java/java-tests/testData/refactoring/movePackage/qualifiedRef/after/Usage.java b/java/java-tests/testData/refactoring/movePackage/qualifiedRef/after/Usage.java
new file mode 100644
index 0000000..023411e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackage/qualifiedRef/after/Usage.java
@@ -0,0 +1,5 @@
+public class Usage {
+    Object method() {
+        return package2.test.A.method();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/movePackage/qualifiedRef/after/package1/empty.txt b/java/java-tests/testData/refactoring/movePackage/qualifiedRef/after/package1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackage/qualifiedRef/after/package1/empty.txt
diff --git a/java/java-tests/testData/refactoring/movePackage/qualifiedRef/after/package2/empty.txt b/java/java-tests/testData/refactoring/movePackage/qualifiedRef/after/package2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackage/qualifiedRef/after/package2/empty.txt
diff --git a/java/java-tests/testData/refactoring/movePackage/qualifiedRef/after/package2/test/A.java b/java/java-tests/testData/refactoring/movePackage/qualifiedRef/after/package2/test/A.java
new file mode 100644
index 0000000..fe0e58d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackage/qualifiedRef/after/package2/test/A.java
@@ -0,0 +1,7 @@
+package package2.test;
+
+public class A {
+    static Object method() {
+        return null;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/movePackage/qualifiedRef/before/Usage.java b/java/java-tests/testData/refactoring/movePackage/qualifiedRef/before/Usage.java
new file mode 100644
index 0000000..ab22a55
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackage/qualifiedRef/before/Usage.java
@@ -0,0 +1,5 @@
+public class Usage {
+    Object method() {
+        return package1.test.A.method();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/movePackage/qualifiedRef/before/package1/empty.txt b/java/java-tests/testData/refactoring/movePackage/qualifiedRef/before/package1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackage/qualifiedRef/before/package1/empty.txt
diff --git a/java/java-tests/testData/refactoring/movePackage/qualifiedRef/before/package1/test/A.java b/java/java-tests/testData/refactoring/movePackage/qualifiedRef/before/package1/test/A.java
new file mode 100644
index 0000000..b48961d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackage/qualifiedRef/before/package1/test/A.java
@@ -0,0 +1,7 @@
+package package1.test;
+
+public class A {
+    static Object method() {
+        return null;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/movePackage/qualifiedRef/before/package2/empty.txt b/java/java-tests/testData/refactoring/movePackage/qualifiedRef/before/package2/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackage/qualifiedRef/before/package2/empty.txt
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/movePackage/after/src1/pack2/UsagesFromBoth.java b/java/java-tests/testData/refactoring/movePackageAsDir/movePackage/after/src1/pack2/UsagesFromBoth.java
new file mode 100644
index 0000000..6d4410f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/movePackage/after/src1/pack2/UsagesFromBoth.java
@@ -0,0 +1,9 @@
+package pack2;
+
+import pack1.*;
+import target.pack1.S1;
+
+public class UsagesFromBoth {
+  S1 s1;
+  S2 s2;
+}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/movePackage/after/src1/target/empty.txt b/java/java-tests/testData/refactoring/movePackageAsDir/movePackage/after/src1/target/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/movePackage/after/src1/target/empty.txt
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/movePackage/after/src1/target/pack1/S1.java b/java/java-tests/testData/refactoring/movePackageAsDir/movePackage/after/src1/target/pack1/S1.java
new file mode 100644
index 0000000..bafd60d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/movePackage/after/src1/target/pack1/S1.java
@@ -0,0 +1,3 @@
+package target.pack1;
+
+public class S1{}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/movePackage/after/src2/pack1/S2.java b/java/java-tests/testData/refactoring/movePackageAsDir/movePackage/after/src2/pack1/S2.java
new file mode 100644
index 0000000..0bd2d20
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/movePackage/after/src2/pack1/S2.java
@@ -0,0 +1,3 @@
+package pack1;
+
+public class S2{}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/movePackage/after/src2/pack2/UsagesFromBoth2.java b/java/java-tests/testData/refactoring/movePackageAsDir/movePackage/after/src2/pack2/UsagesFromBoth2.java
new file mode 100644
index 0000000..9b53f385
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/movePackage/after/src2/pack2/UsagesFromBoth2.java
@@ -0,0 +1,9 @@
+package pack2;
+
+import pack1.*;
+import target.pack1.S1;
+
+public class UsagesFromBoth2 {
+  S1 s1;
+  S2 s2;
+}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/movePackage/before/src1/pack1/S1.java b/java/java-tests/testData/refactoring/movePackageAsDir/movePackage/before/src1/pack1/S1.java
new file mode 100644
index 0000000..c0a5f31
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/movePackage/before/src1/pack1/S1.java
@@ -0,0 +1,3 @@
+package pack1;
+
+public class S1{}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/movePackage/before/src1/pack2/UsagesFromBoth.java b/java/java-tests/testData/refactoring/movePackageAsDir/movePackage/before/src1/pack2/UsagesFromBoth.java
new file mode 100644
index 0000000..906b1fe
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/movePackage/before/src1/pack2/UsagesFromBoth.java
@@ -0,0 +1,8 @@
+package pack2;
+
+import pack1.*;
+
+public class UsagesFromBoth {
+  S1 s1;
+  S2 s2;
+}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/movePackage/before/src1/target/empty.txt b/java/java-tests/testData/refactoring/movePackageAsDir/movePackage/before/src1/target/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/movePackage/before/src1/target/empty.txt
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/movePackage/before/src2/pack1/S2.java b/java/java-tests/testData/refactoring/movePackageAsDir/movePackage/before/src2/pack1/S2.java
new file mode 100644
index 0000000..0bd2d20
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/movePackage/before/src2/pack1/S2.java
@@ -0,0 +1,3 @@
+package pack1;
+
+public class S2{}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/movePackage/before/src2/pack2/UsagesFromBoth2.java b/java/java-tests/testData/refactoring/movePackageAsDir/movePackage/before/src2/pack2/UsagesFromBoth2.java
new file mode 100644
index 0000000..d8ece1c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/movePackage/before/src2/pack2/UsagesFromBoth2.java
@@ -0,0 +1,8 @@
+package pack2;
+
+import pack1.*;
+
+public class UsagesFromBoth2 {
+  S1 s1;
+  S2 s2;
+}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/movePackageWithTxtFilesInside/after/src1/pack2/UsagesFromBoth.java b/java/java-tests/testData/refactoring/movePackageAsDir/movePackageWithTxtFilesInside/after/src1/pack2/UsagesFromBoth.java
new file mode 100644
index 0000000..6d4410f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/movePackageWithTxtFilesInside/after/src1/pack2/UsagesFromBoth.java
@@ -0,0 +1,9 @@
+package pack2;
+
+import pack1.*;
+import target.pack1.S1;
+
+public class UsagesFromBoth {
+  S1 s1;
+  S2 s2;
+}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/movePackageWithTxtFilesInside/after/src1/target/empty.txt b/java/java-tests/testData/refactoring/movePackageAsDir/movePackageWithTxtFilesInside/after/src1/target/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/movePackageWithTxtFilesInside/after/src1/target/empty.txt
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/movePackageWithTxtFilesInside/after/src1/target/pack1/S1.java b/java/java-tests/testData/refactoring/movePackageAsDir/movePackageWithTxtFilesInside/after/src1/target/pack1/S1.java
new file mode 100644
index 0000000..bafd60d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/movePackageWithTxtFilesInside/after/src1/target/pack1/S1.java
@@ -0,0 +1,3 @@
+package target.pack1;
+
+public class S1{}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/movePackageWithTxtFilesInside/after/src1/target/pack1/test_readme.txt b/java/java-tests/testData/refactoring/movePackageAsDir/movePackageWithTxtFilesInside/after/src1/target/pack1/test_readme.txt
new file mode 100644
index 0000000..ea786ff
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/movePackageWithTxtFilesInside/after/src1/target/pack1/test_readme.txt
@@ -0,0 +1 @@
+readme
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/movePackageWithTxtFilesInside/after/src2/pack1/S2.java b/java/java-tests/testData/refactoring/movePackageAsDir/movePackageWithTxtFilesInside/after/src2/pack1/S2.java
new file mode 100644
index 0000000..0bd2d20
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/movePackageWithTxtFilesInside/after/src2/pack1/S2.java
@@ -0,0 +1,3 @@
+package pack1;
+
+public class S2{}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/movePackageWithTxtFilesInside/after/src2/pack2/UsagesFromBoth2.java b/java/java-tests/testData/refactoring/movePackageAsDir/movePackageWithTxtFilesInside/after/src2/pack2/UsagesFromBoth2.java
new file mode 100644
index 0000000..9b53f385
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/movePackageWithTxtFilesInside/after/src2/pack2/UsagesFromBoth2.java
@@ -0,0 +1,9 @@
+package pack2;
+
+import pack1.*;
+import target.pack1.S1;
+
+public class UsagesFromBoth2 {
+  S1 s1;
+  S2 s2;
+}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/movePackageWithTxtFilesInside/before/src1/pack1/S1.java b/java/java-tests/testData/refactoring/movePackageAsDir/movePackageWithTxtFilesInside/before/src1/pack1/S1.java
new file mode 100644
index 0000000..c0a5f31
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/movePackageWithTxtFilesInside/before/src1/pack1/S1.java
@@ -0,0 +1,3 @@
+package pack1;
+
+public class S1{}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/movePackageWithTxtFilesInside/before/src1/pack1/test_readme.txt b/java/java-tests/testData/refactoring/movePackageAsDir/movePackageWithTxtFilesInside/before/src1/pack1/test_readme.txt
new file mode 100644
index 0000000..ea786ff
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/movePackageWithTxtFilesInside/before/src1/pack1/test_readme.txt
@@ -0,0 +1 @@
+readme
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/movePackageWithTxtFilesInside/before/src1/pack2/UsagesFromBoth.java b/java/java-tests/testData/refactoring/movePackageAsDir/movePackageWithTxtFilesInside/before/src1/pack2/UsagesFromBoth.java
new file mode 100644
index 0000000..906b1fe
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/movePackageWithTxtFilesInside/before/src1/pack2/UsagesFromBoth.java
@@ -0,0 +1,8 @@
+package pack2;
+
+import pack1.*;
+
+public class UsagesFromBoth {
+  S1 s1;
+  S2 s2;
+}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/movePackageWithTxtFilesInside/before/src1/target/empty.txt b/java/java-tests/testData/refactoring/movePackageAsDir/movePackageWithTxtFilesInside/before/src1/target/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/movePackageWithTxtFilesInside/before/src1/target/empty.txt
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/movePackageWithTxtFilesInside/before/src2/pack1/S2.java b/java/java-tests/testData/refactoring/movePackageAsDir/movePackageWithTxtFilesInside/before/src2/pack1/S2.java
new file mode 100644
index 0000000..0bd2d20
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/movePackageWithTxtFilesInside/before/src2/pack1/S2.java
@@ -0,0 +1,3 @@
+package pack1;
+
+public class S2{}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/movePackageWithTxtFilesInside/before/src2/pack2/UsagesFromBoth2.java b/java/java-tests/testData/refactoring/movePackageAsDir/movePackageWithTxtFilesInside/before/src2/pack2/UsagesFromBoth2.java
new file mode 100644
index 0000000..d8ece1c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/movePackageWithTxtFilesInside/before/src2/pack2/UsagesFromBoth2.java
@@ -0,0 +1,8 @@
+package pack2;
+
+import pack1.*;
+
+public class UsagesFromBoth2 {
+  S1 s1;
+  S2 s2;
+}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/multipleClassesInOneFile/after/src1/pack2/UsagesFromBoth.java b/java/java-tests/testData/refactoring/movePackageAsDir/multipleClassesInOneFile/after/src1/pack2/UsagesFromBoth.java
new file mode 100644
index 0000000..6d4410f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/multipleClassesInOneFile/after/src1/pack2/UsagesFromBoth.java
@@ -0,0 +1,9 @@
+package pack2;
+
+import pack1.*;
+import target.pack1.S1;
+
+public class UsagesFromBoth {
+  S1 s1;
+  S2 s2;
+}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/multipleClassesInOneFile/after/src1/target/empty.txt b/java/java-tests/testData/refactoring/movePackageAsDir/multipleClassesInOneFile/after/src1/target/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/multipleClassesInOneFile/after/src1/target/empty.txt
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/multipleClassesInOneFile/after/src1/target/pack1/S1.java b/java/java-tests/testData/refactoring/movePackageAsDir/multipleClassesInOneFile/after/src1/target/pack1/S1.java
new file mode 100644
index 0000000..2b93a5b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/multipleClassesInOneFile/after/src1/target/pack1/S1.java
@@ -0,0 +1,11 @@
+package target.pack1;
+
+public class S1{
+  S11 s11;
+}
+
+class S11{}
+
+class S12{}
+
+class S13{}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/multipleClassesInOneFile/after/src1/target/pack1/US.java b/java/java-tests/testData/refactoring/movePackageAsDir/multipleClassesInOneFile/after/src1/target/pack1/US.java
new file mode 100644
index 0000000..31b3384
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/multipleClassesInOneFile/after/src1/target/pack1/US.java
@@ -0,0 +1,5 @@
+package target.pack1;
+
+class US {
+  S11 myS11WithoutImport;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/multipleClassesInOneFile/after/src2/pack1/S2.java b/java/java-tests/testData/refactoring/movePackageAsDir/multipleClassesInOneFile/after/src2/pack1/S2.java
new file mode 100644
index 0000000..0bd2d20
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/multipleClassesInOneFile/after/src2/pack1/S2.java
@@ -0,0 +1,3 @@
+package pack1;
+
+public class S2{}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/multipleClassesInOneFile/after/src2/pack2/UsagesFromBoth2.java b/java/java-tests/testData/refactoring/movePackageAsDir/multipleClassesInOneFile/after/src2/pack2/UsagesFromBoth2.java
new file mode 100644
index 0000000..9b53f385
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/multipleClassesInOneFile/after/src2/pack2/UsagesFromBoth2.java
@@ -0,0 +1,9 @@
+package pack2;
+
+import pack1.*;
+import target.pack1.S1;
+
+public class UsagesFromBoth2 {
+  S1 s1;
+  S2 s2;
+}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/multipleClassesInOneFile/before/src1/pack1/S1.java b/java/java-tests/testData/refactoring/movePackageAsDir/multipleClassesInOneFile/before/src1/pack1/S1.java
new file mode 100644
index 0000000..78e22ab
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/multipleClassesInOneFile/before/src1/pack1/S1.java
@@ -0,0 +1,11 @@
+package pack1;
+
+public class S1{
+  S11 s11;
+}
+
+class S11{}
+
+class S12{}
+
+class S13{}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/multipleClassesInOneFile/before/src1/pack1/US.java b/java/java-tests/testData/refactoring/movePackageAsDir/multipleClassesInOneFile/before/src1/pack1/US.java
new file mode 100644
index 0000000..b4f7dc8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/multipleClassesInOneFile/before/src1/pack1/US.java
@@ -0,0 +1,5 @@
+package pack1;
+
+class US {
+  S11 myS11WithoutImport;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/multipleClassesInOneFile/before/src1/pack2/UsagesFromBoth.java b/java/java-tests/testData/refactoring/movePackageAsDir/multipleClassesInOneFile/before/src1/pack2/UsagesFromBoth.java
new file mode 100644
index 0000000..906b1fe
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/multipleClassesInOneFile/before/src1/pack2/UsagesFromBoth.java
@@ -0,0 +1,8 @@
+package pack2;
+
+import pack1.*;
+
+public class UsagesFromBoth {
+  S1 s1;
+  S2 s2;
+}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/multipleClassesInOneFile/before/src1/target/empty.txt b/java/java-tests/testData/refactoring/movePackageAsDir/multipleClassesInOneFile/before/src1/target/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/multipleClassesInOneFile/before/src1/target/empty.txt
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/multipleClassesInOneFile/before/src2/pack1/S2.java b/java/java-tests/testData/refactoring/movePackageAsDir/multipleClassesInOneFile/before/src2/pack1/S2.java
new file mode 100644
index 0000000..0bd2d20
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/multipleClassesInOneFile/before/src2/pack1/S2.java
@@ -0,0 +1,3 @@
+package pack1;
+
+public class S2{}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/multipleClassesInOneFile/before/src2/pack2/UsagesFromBoth2.java b/java/java-tests/testData/refactoring/movePackageAsDir/multipleClassesInOneFile/before/src2/pack2/UsagesFromBoth2.java
new file mode 100644
index 0000000..d8ece1c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/multipleClassesInOneFile/before/src2/pack2/UsagesFromBoth2.java
@@ -0,0 +1,8 @@
+package pack2;
+
+import pack1.*;
+
+public class UsagesFromBoth2 {
+  S1 s1;
+  S2 s2;
+}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/removeUnresolvedImports/after/src1/pack2/UsagesFromBoth.java b/java/java-tests/testData/refactoring/movePackageAsDir/removeUnresolvedImports/after/src1/pack2/UsagesFromBoth.java
new file mode 100644
index 0000000..e21505a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/removeUnresolvedImports/after/src1/pack2/UsagesFromBoth.java
@@ -0,0 +1,11 @@
+package pack2;
+
+import pack1.*;
+import target.pack1.S1;
+import target.pack1.subpack.SS;
+
+public class UsagesFromBoth {
+  S1 s1;
+  S2 s2;
+  SS ss;
+}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/removeUnresolvedImports/after/src1/target/empty.txt b/java/java-tests/testData/refactoring/movePackageAsDir/removeUnresolvedImports/after/src1/target/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/removeUnresolvedImports/after/src1/target/empty.txt
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/removeUnresolvedImports/after/src1/target/pack1/S1.java b/java/java-tests/testData/refactoring/movePackageAsDir/removeUnresolvedImports/after/src1/target/pack1/S1.java
new file mode 100644
index 0000000..bafd60d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/removeUnresolvedImports/after/src1/target/pack1/S1.java
@@ -0,0 +1,3 @@
+package target.pack1;
+
+public class S1{}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/removeUnresolvedImports/after/src1/target/pack1/subpack/SS.java b/java/java-tests/testData/refactoring/movePackageAsDir/removeUnresolvedImports/after/src1/target/pack1/subpack/SS.java
new file mode 100644
index 0000000..39cf0b6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/removeUnresolvedImports/after/src1/target/pack1/subpack/SS.java
@@ -0,0 +1,3 @@
+package target.pack1.subpack;
+
+public class SS {}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/removeUnresolvedImports/after/src2/pack1/S2.java b/java/java-tests/testData/refactoring/movePackageAsDir/removeUnresolvedImports/after/src2/pack1/S2.java
new file mode 100644
index 0000000..0bd2d20
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/removeUnresolvedImports/after/src2/pack1/S2.java
@@ -0,0 +1,3 @@
+package pack1;
+
+public class S2{}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/removeUnresolvedImports/after/src2/pack2/UsagesFromBoth2.java b/java/java-tests/testData/refactoring/movePackageAsDir/removeUnresolvedImports/after/src2/pack2/UsagesFromBoth2.java
new file mode 100644
index 0000000..9b53f385
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/removeUnresolvedImports/after/src2/pack2/UsagesFromBoth2.java
@@ -0,0 +1,9 @@
+package pack2;
+
+import pack1.*;
+import target.pack1.S1;
+
+public class UsagesFromBoth2 {
+  S1 s1;
+  S2 s2;
+}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/removeUnresolvedImports/before/src1/pack1/S1.java b/java/java-tests/testData/refactoring/movePackageAsDir/removeUnresolvedImports/before/src1/pack1/S1.java
new file mode 100644
index 0000000..c0a5f31
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/removeUnresolvedImports/before/src1/pack1/S1.java
@@ -0,0 +1,3 @@
+package pack1;
+
+public class S1{}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/removeUnresolvedImports/before/src1/pack1/subpack/SS.java b/java/java-tests/testData/refactoring/movePackageAsDir/removeUnresolvedImports/before/src1/pack1/subpack/SS.java
new file mode 100644
index 0000000..869423c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/removeUnresolvedImports/before/src1/pack1/subpack/SS.java
@@ -0,0 +1,3 @@
+package pack1.subpack;
+
+public class SS {}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/removeUnresolvedImports/before/src1/pack2/UsagesFromBoth.java b/java/java-tests/testData/refactoring/movePackageAsDir/removeUnresolvedImports/before/src1/pack2/UsagesFromBoth.java
new file mode 100644
index 0000000..b0f9a94
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/removeUnresolvedImports/before/src1/pack2/UsagesFromBoth.java
@@ -0,0 +1,10 @@
+package pack2;
+
+import pack1.*;
+import pack1.subpack.*;
+
+public class UsagesFromBoth {
+  S1 s1;
+  S2 s2;
+  SS ss;
+}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/removeUnresolvedImports/before/src1/target/empty.txt b/java/java-tests/testData/refactoring/movePackageAsDir/removeUnresolvedImports/before/src1/target/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/removeUnresolvedImports/before/src1/target/empty.txt
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/removeUnresolvedImports/before/src2/pack1/S2.java b/java/java-tests/testData/refactoring/movePackageAsDir/removeUnresolvedImports/before/src2/pack1/S2.java
new file mode 100644
index 0000000..0bd2d20
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/removeUnresolvedImports/before/src2/pack1/S2.java
@@ -0,0 +1,3 @@
+package pack1;
+
+public class S2{}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/removeUnresolvedImports/before/src2/pack2/UsagesFromBoth2.java b/java/java-tests/testData/refactoring/movePackageAsDir/removeUnresolvedImports/before/src2/pack2/UsagesFromBoth2.java
new file mode 100644
index 0000000..d8ece1c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/removeUnresolvedImports/before/src2/pack2/UsagesFromBoth2.java
@@ -0,0 +1,8 @@
+package pack2;
+
+import pack1.*;
+
+public class UsagesFromBoth2 {
+  S1 s1;
+  S2 s2;
+}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/xmlDirRefs/after/src1/pack2/UsagesFromBoth.java b/java/java-tests/testData/refactoring/movePackageAsDir/xmlDirRefs/after/src1/pack2/UsagesFromBoth.java
new file mode 100644
index 0000000..6d4410f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/xmlDirRefs/after/src1/pack2/UsagesFromBoth.java
@@ -0,0 +1,9 @@
+package pack2;
+
+import pack1.*;
+import target.pack1.S1;
+
+public class UsagesFromBoth {
+  S1 s1;
+  S2 s2;
+}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/xmlDirRefs/after/src1/target/empty.txt b/java/java-tests/testData/refactoring/movePackageAsDir/xmlDirRefs/after/src1/target/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/xmlDirRefs/after/src1/target/empty.txt
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/xmlDirRefs/after/src1/target/pack1/S1.java b/java/java-tests/testData/refactoring/movePackageAsDir/xmlDirRefs/after/src1/target/pack1/S1.java
new file mode 100644
index 0000000..bafd60d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/xmlDirRefs/after/src1/target/pack1/S1.java
@@ -0,0 +1,3 @@
+package target.pack1;
+
+public class S1{}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/xmlDirRefs/after/src2/pack1/S2.java b/java/java-tests/testData/refactoring/movePackageAsDir/xmlDirRefs/after/src2/pack1/S2.java
new file mode 100644
index 0000000..0bd2d20
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/xmlDirRefs/after/src2/pack1/S2.java
@@ -0,0 +1,3 @@
+package pack1;
+
+public class S2{}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/xmlDirRefs/after/src2/pack2/UsagesFromBoth2.java b/java/java-tests/testData/refactoring/movePackageAsDir/xmlDirRefs/after/src2/pack2/UsagesFromBoth2.java
new file mode 100644
index 0000000..9b53f385
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/xmlDirRefs/after/src2/pack2/UsagesFromBoth2.java
@@ -0,0 +1,9 @@
+package pack2;
+
+import pack1.*;
+import target.pack1.S1;
+
+public class UsagesFromBoth2 {
+  S1 s1;
+  S2 s2;
+}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/xmlDirRefs/after/src2/pack2/u.xml b/java/java-tests/testData/refactoring/movePackageAsDir/xmlDirRefs/after/src2/pack2/u.xml
new file mode 100644
index 0000000..be82fb7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/xmlDirRefs/after/src2/pack2/u.xml
@@ -0,0 +1,3 @@
+<root xmlns:xi="http://www.w3.org/2001/XInclude">
+  <xi:include href="../../src1/target/pack1/S1.java" xpointer="xpointer(/components/*)"/>
+</root>
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/xmlDirRefs/before/src1/pack1/S1.java b/java/java-tests/testData/refactoring/movePackageAsDir/xmlDirRefs/before/src1/pack1/S1.java
new file mode 100644
index 0000000..c0a5f31
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/xmlDirRefs/before/src1/pack1/S1.java
@@ -0,0 +1,3 @@
+package pack1;
+
+public class S1{}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/xmlDirRefs/before/src1/pack2/UsagesFromBoth.java b/java/java-tests/testData/refactoring/movePackageAsDir/xmlDirRefs/before/src1/pack2/UsagesFromBoth.java
new file mode 100644
index 0000000..906b1fe
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/xmlDirRefs/before/src1/pack2/UsagesFromBoth.java
@@ -0,0 +1,8 @@
+package pack2;
+
+import pack1.*;
+
+public class UsagesFromBoth {
+  S1 s1;
+  S2 s2;
+}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/xmlDirRefs/before/src1/target/empty.txt b/java/java-tests/testData/refactoring/movePackageAsDir/xmlDirRefs/before/src1/target/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/xmlDirRefs/before/src1/target/empty.txt
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/xmlDirRefs/before/src2/pack1/S2.java b/java/java-tests/testData/refactoring/movePackageAsDir/xmlDirRefs/before/src2/pack1/S2.java
new file mode 100644
index 0000000..0bd2d20
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/xmlDirRefs/before/src2/pack1/S2.java
@@ -0,0 +1,3 @@
+package pack1;
+
+public class S2{}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/xmlDirRefs/before/src2/pack2/UsagesFromBoth2.java b/java/java-tests/testData/refactoring/movePackageAsDir/xmlDirRefs/before/src2/pack2/UsagesFromBoth2.java
new file mode 100644
index 0000000..d8ece1c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/xmlDirRefs/before/src2/pack2/UsagesFromBoth2.java
@@ -0,0 +1,8 @@
+package pack2;
+
+import pack1.*;
+
+public class UsagesFromBoth2 {
+  S1 s1;
+  S2 s2;
+}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/xmlDirRefs/before/src2/pack2/u.xml b/java/java-tests/testData/refactoring/movePackageAsDir/xmlDirRefs/before/src2/pack2/u.xml
new file mode 100644
index 0000000..47926cb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/xmlDirRefs/before/src2/pack2/u.xml
@@ -0,0 +1,3 @@
+<root xmlns:xi="http://www.w3.org/2001/XInclude">
+  <xi:include href="../../src1/pack1/S1.java" xpointer="xpointer(/components/*)"/>
+</root>
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/xmlEmptyDirRefs/after/src1/target/empty.txt b/java/java-tests/testData/refactoring/movePackageAsDir/xmlEmptyDirRefs/after/src1/target/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/xmlEmptyDirRefs/after/src1/target/empty.txt
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/xmlEmptyDirRefs/after/src1/target/pack1/empty.txt b/java/java-tests/testData/refactoring/movePackageAsDir/xmlEmptyDirRefs/after/src1/target/pack1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/xmlEmptyDirRefs/after/src1/target/pack1/empty.txt
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/xmlEmptyDirRefs/after/src2/pack1/S2.java b/java/java-tests/testData/refactoring/movePackageAsDir/xmlEmptyDirRefs/after/src2/pack1/S2.java
new file mode 100644
index 0000000..0bd2d20
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/xmlEmptyDirRefs/after/src2/pack1/S2.java
@@ -0,0 +1,3 @@
+package pack1;
+
+public class S2{}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/xmlEmptyDirRefs/after/src2/pack2/u.xml b/java/java-tests/testData/refactoring/movePackageAsDir/xmlEmptyDirRefs/after/src2/pack2/u.xml
new file mode 100644
index 0000000..1236d3c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/xmlEmptyDirRefs/after/src2/pack2/u.xml
@@ -0,0 +1,3 @@
+<root xmlns:xi="http://www.w3.org/2001/XInclude">
+  <xi:include href="../../src1/target/pack1" xpointer="xpointer(/components/*)"/>
+</root>
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/xmlEmptyDirRefs/before/src1/pack1/empty.txt b/java/java-tests/testData/refactoring/movePackageAsDir/xmlEmptyDirRefs/before/src1/pack1/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/xmlEmptyDirRefs/before/src1/pack1/empty.txt
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/xmlEmptyDirRefs/before/src1/target/empty.txt b/java/java-tests/testData/refactoring/movePackageAsDir/xmlEmptyDirRefs/before/src1/target/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/xmlEmptyDirRefs/before/src1/target/empty.txt
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/xmlEmptyDirRefs/before/src2/pack1/S2.java b/java/java-tests/testData/refactoring/movePackageAsDir/xmlEmptyDirRefs/before/src2/pack1/S2.java
new file mode 100644
index 0000000..0bd2d20
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/xmlEmptyDirRefs/before/src2/pack1/S2.java
@@ -0,0 +1,3 @@
+package pack1;
+
+public class S2{}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/xmlEmptyDirRefs/before/src2/pack2/u.xml b/java/java-tests/testData/refactoring/movePackageAsDir/xmlEmptyDirRefs/before/src2/pack2/u.xml
new file mode 100644
index 0000000..04a46e2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/xmlEmptyDirRefs/before/src2/pack2/u.xml
@@ -0,0 +1,3 @@
+<root xmlns:xi="http://www.w3.org/2001/XInclude">
+  <xi:include href="../../src1/pack1" xpointer="xpointer(/components/*)"/>
+</root>
diff --git a/java/java-tests/testData/refactoring/movePackageMultiroot/movePackage/after/src1/target/empty.txt b/java/java-tests/testData/refactoring/movePackageMultiroot/movePackage/after/src1/target/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageMultiroot/movePackage/after/src1/target/empty.txt
diff --git a/java/java-tests/testData/refactoring/movePackageMultiroot/movePackage/after/src1/target/pack1/A.java b/java/java-tests/testData/refactoring/movePackageMultiroot/movePackage/after/src1/target/pack1/A.java
new file mode 100644
index 0000000..7911f652
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageMultiroot/movePackage/after/src1/target/pack1/A.java
@@ -0,0 +1,4 @@
+package target.pack1;
+
+class A {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/movePackageMultiroot/movePackage/after/src2/target/pack1/B.java b/java/java-tests/testData/refactoring/movePackageMultiroot/movePackage/after/src2/target/pack1/B.java
new file mode 100644
index 0000000..e4cdd31
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageMultiroot/movePackage/after/src2/target/pack1/B.java
@@ -0,0 +1,4 @@
+package pack2;
+
+class B {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/movePackageMultiroot/movePackage/before/src1/pack1/A.java b/java/java-tests/testData/refactoring/movePackageMultiroot/movePackage/before/src1/pack1/A.java
new file mode 100644
index 0000000..20aa810
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageMultiroot/movePackage/before/src1/pack1/A.java
@@ -0,0 +1,4 @@
+package pack1;
+
+class A {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/movePackageMultiroot/movePackage/before/src1/target/empty.txt b/java/java-tests/testData/refactoring/movePackageMultiroot/movePackage/before/src1/target/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageMultiroot/movePackage/before/src1/target/empty.txt
diff --git a/java/java-tests/testData/refactoring/movePackageMultiroot/movePackage/before/src2/pack1/B.java b/java/java-tests/testData/refactoring/movePackageMultiroot/movePackage/before/src2/pack1/B.java
new file mode 100644
index 0000000..e4cdd31
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageMultiroot/movePackage/before/src2/pack1/B.java
@@ -0,0 +1,4 @@
+package pack2;
+
+class B {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pullUp/EscalateVisibility.java b/java/java-tests/testData/refactoring/pullUp/EscalateVisibility.java
new file mode 100644
index 0000000..cf7514f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/EscalateVisibility.java
@@ -0,0 +1,10 @@
+class Foo {
+  
+}
+
+class FooImpl extends Foo {
+  private void fo<caret>o(){}
+  void bar() {
+    foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pullUp/EscalateVisibility_after.java b/java/java-tests/testData/refactoring/pullUp/EscalateVisibility_after.java
new file mode 100644
index 0000000..3a24c9d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/EscalateVisibility_after.java
@@ -0,0 +1,10 @@
+class Foo {
+
+    protected void foo(){}
+}
+
+class FooImpl extends Foo {
+    void bar() {
+    foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pullUp/ExtensionMethod.java b/java/java-tests/testData/refactoring/pullUp/ExtensionMethod.java
new file mode 100644
index 0000000..46ec211
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/ExtensionMethod.java
@@ -0,0 +1,8 @@
+interface Base {
+}
+
+interface I2 extends Base {
+    void foo<caret>() default {
+        System.out.println("Hi there.");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pullUp/ExtensionMethod_after.java b/java/java-tests/testData/refactoring/pullUp/ExtensionMethod_after.java
new file mode 100644
index 0000000..3387645
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/ExtensionMethod_after.java
@@ -0,0 +1,8 @@
+interface Base {
+    void foo() default {
+        System.out.println("Hi there.");
+    }
+}
+
+interface I2 extends Base {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pullUp/GenericsInAbstractMethod.java b/java/java-tests/testData/refactoring/pullUp/GenericsInAbstractMethod.java
new file mode 100644
index 0000000..bd2f499
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/GenericsInAbstractMethod.java
@@ -0,0 +1,5 @@
+public abstract class Parent<S> {}
+
+class Child<T> extends Parent<T> {
+   void <caret>method(T t){}
+}
diff --git a/java/java-tests/testData/refactoring/pullUp/GenericsInAbstractMethod_after.java b/java/java-tests/testData/refactoring/pullUp/GenericsInAbstractMethod_after.java
new file mode 100644
index 0000000..2988117
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/GenericsInAbstractMethod_after.java
@@ -0,0 +1,8 @@
+public abstract class Parent<S> {
+    abstract void method(S t);
+}
+
+class Child<T> extends Parent<T> {
+   @Override
+   void method(T t){}
+}
diff --git a/java/java-tests/testData/refactoring/pullUp/GenericsInImplements.java b/java/java-tests/testData/refactoring/pullUp/GenericsInImplements.java
new file mode 100644
index 0000000..07e1f89a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/GenericsInImplements.java
@@ -0,0 +1,10 @@
+public class Parent<S> {}
+
+interface I<IT> {
+  void method(IT t);
+}
+
+class Child<T> extends Parent<T> implements I<T>{
+  <caret>
+  public void method(T t){}
+}
diff --git a/java/java-tests/testData/refactoring/pullUp/GenericsInImplements_after.java b/java/java-tests/testData/refactoring/pullUp/GenericsInImplements_after.java
new file mode 100644
index 0000000..3aca9f8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/GenericsInImplements_after.java
@@ -0,0 +1,10 @@
+public class Parent<S> implements I<S> {}
+
+interface I<IT> {
+  void method(IT t);
+}
+
+class Child<T> extends Parent<T> {
+  
+  public void method(T t){}
+}
diff --git a/java/java-tests/testData/refactoring/pullUp/IfFieldInitializationWithNonMovedField.java b/java/java-tests/testData/refactoring/pullUp/IfFieldInitializationWithNonMovedField.java
new file mode 100644
index 0000000..ba3609d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/IfFieldInitializationWithNonMovedField.java
@@ -0,0 +1,18 @@
+public class A {
+}
+
+class B extends A {
+    final String <caret>f;
+    final String foo;
+
+    B(String fi, String foo) {
+        this.foo = foo;
+        if (fi == this.foo) {
+            f = foo;
+        } else {
+            f = "";
+        }
+    }
+
+
+}
diff --git a/java/java-tests/testData/refactoring/pullUp/IfFieldInitializationWithNonMovedField_after.java b/java/java-tests/testData/refactoring/pullUp/IfFieldInitializationWithNonMovedField_after.java
new file mode 100644
index 0000000..5bec568
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/IfFieldInitializationWithNonMovedField_after.java
@@ -0,0 +1,18 @@
+public class A {
+    final String f;
+}
+
+class B extends A {
+    final String foo;
+
+    B(String fi, String foo) {
+        this.foo = foo;
+        if (fi == this.foo) {
+            f = foo;
+        } else {
+            f = "";
+        }
+    }
+
+
+}
diff --git a/java/java-tests/testData/refactoring/pullUp/IfFieldMovedInitialization.java b/java/java-tests/testData/refactoring/pullUp/IfFieldMovedInitialization.java
new file mode 100644
index 0000000..f541f0e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/IfFieldMovedInitialization.java
@@ -0,0 +1,18 @@
+public class A {
+}
+
+class B extends A {
+    final String <caret>f;
+    final String foo;
+
+    B(String fi, String foo) {
+        this.foo = foo;
+        if (fi == foo) {
+            f = foo;
+        } else {
+            f = "";
+        }
+    }
+
+
+}
diff --git a/java/java-tests/testData/refactoring/pullUp/IfFieldMovedInitialization_after.java b/java/java-tests/testData/refactoring/pullUp/IfFieldMovedInitialization_after.java
new file mode 100644
index 0000000..4000fdc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/IfFieldMovedInitialization_after.java
@@ -0,0 +1,22 @@
+public class A {
+    final String f;
+
+    public A(String fi, String foo) {
+        if (fi == foo) {
+            f = foo;
+        } else {
+            f = "";
+        }
+    }
+}
+
+class B extends A {
+    final String foo;
+
+    B(String fi, String foo) {
+        super(fi, foo);
+        this.foo = foo;
+    }
+
+
+}
diff --git a/java/java-tests/testData/refactoring/pullUp/MergeInterfaces.java b/java/java-tests/testData/refactoring/pullUp/MergeInterfaces.java
new file mode 100644
index 0000000..68f3d11
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/MergeInterfaces.java
@@ -0,0 +1,3 @@
+class Base implements I<String> {}
+class Te<caret>st extends Base implements I<String> {}
+interface I<T>{}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pullUp/MergeInterfaces_after.java b/java/java-tests/testData/refactoring/pullUp/MergeInterfaces_after.java
new file mode 100644
index 0000000..dfad6f6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/MergeInterfaces_after.java
@@ -0,0 +1,3 @@
+class Base implements I<String> {}
+class Test extends Base {}
+interface I<T>{}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pullUp/MultipleConstructorsFieldInitialization.java b/java/java-tests/testData/refactoring/pullUp/MultipleConstructorsFieldInitialization.java
new file mode 100644
index 0000000..f884f48
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/MultipleConstructorsFieldInitialization.java
@@ -0,0 +1,17 @@
+public class A {
+}
+
+class B extends A {
+    final String <caret>f;
+    final String foo;
+
+    B(String fi, String foo) {
+        this.foo = foo;
+        f = "";
+    }
+
+    B(String foo) {
+        this.foo = foo;
+        f = "";
+    }
+}
diff --git a/java/java-tests/testData/refactoring/pullUp/MultipleConstructorsFieldInitializationNoGood.java b/java/java-tests/testData/refactoring/pullUp/MultipleConstructorsFieldInitializationNoGood.java
new file mode 100644
index 0000000..25117fc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/MultipleConstructorsFieldInitializationNoGood.java
@@ -0,0 +1,21 @@
+public class A {
+}
+
+class B extends A {
+    final String <caret>f;
+    final String foo;
+
+    B(String fi, String foo) {
+        this.foo = foo;
+        if (fi == this.foo) {
+            f = foo;
+        } else {
+            f = "";
+        }
+    }
+
+    B(String f) {
+        this.f = f;
+        foo = "";
+    }
+}
diff --git a/java/java-tests/testData/refactoring/pullUp/MultipleConstructorsFieldInitializationNoGood_after.java b/java/java-tests/testData/refactoring/pullUp/MultipleConstructorsFieldInitializationNoGood_after.java
new file mode 100644
index 0000000..b66ba0b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/MultipleConstructorsFieldInitializationNoGood_after.java
@@ -0,0 +1,21 @@
+public class A {
+    final String f;
+}
+
+class B extends A {
+    final String foo;
+
+    B(String fi, String foo) {
+        this.foo = foo;
+        if (fi == this.foo) {
+            f = foo;
+        } else {
+            f = "";
+        }
+    }
+
+    B(String f) {
+        this.f = f;
+        foo = "";
+    }
+}
diff --git a/java/java-tests/testData/refactoring/pullUp/MultipleConstructorsFieldInitialization_after.java b/java/java-tests/testData/refactoring/pullUp/MultipleConstructorsFieldInitialization_after.java
new file mode 100644
index 0000000..7c19de1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/MultipleConstructorsFieldInitialization_after.java
@@ -0,0 +1,21 @@
+public class A {
+    final String f;
+
+    public A() {
+        f = "";
+    }
+}
+
+class B extends A {
+    final String foo;
+
+    B(String fi, String foo) {
+        super();
+        this.foo = foo;
+    }
+
+    B(String foo) {
+        super();
+        this.foo = foo;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/pullUp/PreserveOverride.java b/java/java-tests/testData/refactoring/pullUp/PreserveOverride.java
new file mode 100644
index 0000000..84f2f18
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/PreserveOverride.java
@@ -0,0 +1,12 @@
+abstract class Bazz {
+    public abstract void foo();
+}
+
+abstract class Foo extends Bazz {}
+
+class Bar extends Foo {
+    @Override
+    public void f<caret>oo() {
+    }
+}
+
diff --git a/java/java-tests/testData/refactoring/pullUp/PreserveOverrideInPulledMethod.java b/java/java-tests/testData/refactoring/pullUp/PreserveOverrideInPulledMethod.java
new file mode 100644
index 0000000..f24091f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/PreserveOverrideInPulledMethod.java
@@ -0,0 +1,12 @@
+public class Test {
+  abstract class Base extends IntImpl {
+    @Override
+    public abstract String<caret> foo();
+  }
+
+  class IntImpl extends Int {}
+  
+  class Int {
+    public abstract String foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pullUp/PreserveOverrideInPulledMethod_after.java b/java/java-tests/testData/refactoring/pullUp/PreserveOverrideInPulledMethod_after.java
new file mode 100644
index 0000000..c17800d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/PreserveOverrideInPulledMethod_after.java
@@ -0,0 +1,13 @@
+public class Test {
+  abstract class Base extends IntImpl {
+  }
+
+  abstract class IntImpl extends Int {
+      @Override
+      public abstract String foo();
+  }
+  
+  class Int {
+    public abstract String foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pullUp/PreserveOverride_after.java b/java/java-tests/testData/refactoring/pullUp/PreserveOverride_after.java
new file mode 100644
index 0000000..ea553c1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/PreserveOverride_after.java
@@ -0,0 +1,13 @@
+abstract class Bazz {
+    public abstract void foo();
+}
+
+abstract class Foo extends Bazz {
+    @Override
+    public void foo() {
+    }
+}
+
+class Bar extends Foo {
+}
+
diff --git a/java/java-tests/testData/refactoring/pullUp/PullUpAndMakeAbstract.java b/java/java-tests/testData/refactoring/pullUp/PullUpAndMakeAbstract.java
new file mode 100644
index 0000000..111cfbe
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/PullUpAndMakeAbstract.java
@@ -0,0 +1,11 @@
+public class A2 {
+}
+
+class B2 extends A2 {
+  public void <caret>a() {
+    b();
+  }
+
+  private void b() {
+  }
+}
diff --git a/java/java-tests/testData/refactoring/pullUp/PullUpAndMakeAbstract_after.java b/java/java-tests/testData/refactoring/pullUp/PullUpAndMakeAbstract_after.java
new file mode 100644
index 0000000..7f14f8e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/PullUpAndMakeAbstract_after.java
@@ -0,0 +1,14 @@
+public abstract class A2 {
+    public void a() {
+      b();
+    }
+
+    protected abstract void b();
+}
+
+class B2 extends A2 {
+
+    @Override
+    protected void b() {
+  }
+}
diff --git a/java/java-tests/testData/refactoring/pullUp/PullUpInheritedStaticClasses.java b/java/java-tests/testData/refactoring/pullUp/PullUpInheritedStaticClasses.java
new file mode 100644
index 0000000..48cc506
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/PullUpInheritedStaticClasses.java
@@ -0,0 +1,8 @@
+public class A extends AA {
+  <caret>
+  static class C extends D {}
+  static class D extends B {}
+  static class B {}
+}
+
+class AA {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pullUp/PullUpInheritedStaticClasses_after.java b/java/java-tests/testData/refactoring/pullUp/PullUpInheritedStaticClasses_after.java
new file mode 100644
index 0000000..f11aabb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/PullUpInheritedStaticClasses_after.java
@@ -0,0 +1,10 @@
+public class A extends AA {
+
+    static class B {}
+}
+
+class AA {
+    static class C extends D {}
+
+    static class D extends A.B {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pullUp/PullUpPrivateInnerClassWithPrivateConstructor.java b/java/java-tests/testData/refactoring/pullUp/PullUpPrivateInnerClassWithPrivateConstructor.java
new file mode 100644
index 0000000..40e3e39
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/PullUpPrivateInnerClassWithPrivateConstructor.java
@@ -0,0 +1,15 @@
+public class B extends A {
+    private void f(){
+        new C();
+    }
+      <caret>
+    private static class C{
+        private C(){
+
+        }
+    }
+}
+
+//A.java
+class A {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pullUp/PullUpPrivateInnerClassWithPrivateConstructor_after.java b/java/java-tests/testData/refactoring/pullUp/PullUpPrivateInnerClassWithPrivateConstructor_after.java
new file mode 100644
index 0000000..0c9baaf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/PullUpPrivateInnerClassWithPrivateConstructor_after.java
@@ -0,0 +1,15 @@
+public class B extends A {
+    private void f(){
+        new C();
+    }
+
+}
+
+//A.java
+class A {
+    protected static class C{
+        protected C(){
+
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pullUp/QualifiedReference.java b/java/java-tests/testData/refactoring/pullUp/QualifiedReference.java
new file mode 100644
index 0000000..a2330f7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/QualifiedReference.java
@@ -0,0 +1,13 @@
+class X {}
+
+class <caret>Y extends X {
+    private static int x = 0;
+
+    public static int getX() {
+        return x;
+    }
+
+    public static void setX(int x) {
+        Y.x = x;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pullUp/QualifiedReference_after.java b/java/java-tests/testData/refactoring/pullUp/QualifiedReference_after.java
new file mode 100644
index 0000000..26a9777
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/QualifiedReference_after.java
@@ -0,0 +1,15 @@
+class X {
+    private static int x = 0;
+
+    public static int getX() {
+        return x;
+    }
+
+    public static void setX(int x) {
+        X.x = x;
+    }
+}
+
+class Y extends X {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pullUp/QualifiedSuper.java b/java/java-tests/testData/refactoring/pullUp/QualifiedSuper.java
new file mode 100644
index 0000000..6c58661
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/QualifiedSuper.java
@@ -0,0 +1,12 @@
+class <caret>QualifiedSuper extends Base {
+    class Inner {
+        void goo() {
+            QualifiedSuper.super.toString();
+        }
+    }
+}
+
+class Base {
+
+
+}
diff --git a/java/java-tests/testData/refactoring/pullUp/QualifiedSuper_after.java b/java/java-tests/testData/refactoring/pullUp/QualifiedSuper_after.java
new file mode 100644
index 0000000..08e7250
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/QualifiedSuper_after.java
@@ -0,0 +1,12 @@
+class QualifiedSuper extends Base {
+}
+
+class Base {
+
+
+    class Inner {
+        void goo() {
+            Base.this.toString();
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/pullUp/QualifiedThis.java b/java/java-tests/testData/refactoring/pullUp/QualifiedThis.java
new file mode 100644
index 0000000..ccc2d3b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/QualifiedThis.java
@@ -0,0 +1,15 @@
+class Base {
+    void foo() {
+    }
+}
+
+public class <caret>QualifiedThis extends Base {
+    void foo() {
+    }
+
+    class Inner {
+        void bar() {
+            QualifiedThis.this.foo();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pullUp/QualifiedThis_after.java b/java/java-tests/testData/refactoring/pullUp/QualifiedThis_after.java
new file mode 100644
index 0000000..ea40d7c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/QualifiedThis_after.java
@@ -0,0 +1,16 @@
+class Base {
+    void foo() {
+    }
+
+    class Inner {
+        void bar() {
+            Base.this.foo();
+        }
+    }
+}
+
+public class QualifiedThis extends Base {
+    void foo() {
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pullUp/RemoveOverride.java b/java/java-tests/testData/refactoring/pullUp/RemoveOverride.java
new file mode 100644
index 0000000..3197716
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/RemoveOverride.java
@@ -0,0 +1,16 @@
+public class Test {
+    class Impl extends Base {
+        @Override
+        public String get() {
+            return "239";
+        }
+    }
+
+    abstract class Base implements Int {
+        public abstract String <caret>get();
+
+    }
+
+    interface Int {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pullUp/RemoveOverrideFromPulledMethod.java b/java/java-tests/testData/refactoring/pullUp/RemoveOverrideFromPulledMethod.java
new file mode 100644
index 0000000..555f2e5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/RemoveOverrideFromPulledMethod.java
@@ -0,0 +1,9 @@
+public class Test {
+  abstract class Base extends Int {
+    @Override
+    public abstract String<caret> foo();
+  }
+
+  class Int {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pullUp/RemoveOverrideFromPulledMethod_after.java b/java/java-tests/testData/refactoring/pullUp/RemoveOverrideFromPulledMethod_after.java
new file mode 100644
index 0000000..7388dd1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/RemoveOverrideFromPulledMethod_after.java
@@ -0,0 +1,8 @@
+public class Test {
+  abstract class Base extends Int {
+  }
+
+  abstract class Int {
+      public abstract String foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pullUp/RemoveOverride_after.java b/java/java-tests/testData/refactoring/pullUp/RemoveOverride_after.java
new file mode 100644
index 0000000..adee033
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/RemoveOverride_after.java
@@ -0,0 +1,15 @@
+public class Test {
+    class Impl extends Base {
+        public String get() {
+            return "239";
+        }
+    }
+
+    abstract class Base implements Int {
+
+    }
+
+    interface Int {
+        String get();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pullUp/ReplaceDuplicatesInInheritors.java b/java/java-tests/testData/refactoring/pullUp/ReplaceDuplicatesInInheritors.java
new file mode 100644
index 0000000..27e4c2f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/ReplaceDuplicatesInInheritors.java
@@ -0,0 +1,18 @@
+class A {}
+class AImpl1 extends A{
+  void f<caret>oo() {
+    System.out.println("hello");
+    System.out.println("hello");
+    System.out.println("hello");
+    System.out.println("hello");
+  }
+}
+
+class AImpl2 extends A {
+  void bar() {
+    System.out.println("hello");
+    System.out.println("hello");
+    System.out.println("hello");
+    System.out.println("hello");
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pullUp/ReplaceDuplicatesInInheritors_after.java b/java/java-tests/testData/refactoring/pullUp/ReplaceDuplicatesInInheritors_after.java
new file mode 100644
index 0000000..34e9003
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/ReplaceDuplicatesInInheritors_after.java
@@ -0,0 +1,16 @@
+class A {
+    void foo() {
+      System.out.println("hello");
+      System.out.println("hello");
+      System.out.println("hello");
+      System.out.println("hello");
+    }
+}
+class AImpl1 extends A{
+}
+
+class AImpl2 extends A {
+  void bar() {
+      foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pullUp/TryCatchFieldInitializer.java b/java/java-tests/testData/refactoring/pullUp/TryCatchFieldInitializer.java
new file mode 100644
index 0000000..0401b6e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/TryCatchFieldInitializer.java
@@ -0,0 +1,19 @@
+public class Sup {
+
+}
+
+class ExtractSuperClass extends Sup {
+
+  private final String <caret>field;
+
+  public ExtractSuperClass() {
+
+
+    try {
+      field = (String)"text";
+    }
+    catch (RuntimeException e) {
+      throw new RuntimeException();
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pullUp/TryCatchFieldInitializer_after.java b/java/java-tests/testData/refactoring/pullUp/TryCatchFieldInitializer_after.java
new file mode 100644
index 0000000..9704f8a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/TryCatchFieldInitializer_after.java
@@ -0,0 +1,22 @@
+public class Sup {
+
+    protected final String field;
+
+    public Sup() {
+        try {
+          field = (String)"text";
+        }
+        catch (RuntimeException e) {
+          throw new RuntimeException();
+        }
+    }
+}
+
+class ExtractSuperClass extends Sup {
+
+    public ExtractSuperClass() {
+        super();
+
+
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pullUp/TypeArgument.java b/java/java-tests/testData/refactoring/pullUp/TypeArgument.java
new file mode 100644
index 0000000..21140c8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/TypeArgument.java
@@ -0,0 +1,5 @@
+public class Parent<S> {}
+
+class Child extends Parent<String> {
+   String <caret>f;
+}
diff --git a/java/java-tests/testData/refactoring/pullUp/TypeArgument_after.java b/java/java-tests/testData/refactoring/pullUp/TypeArgument_after.java
new file mode 100644
index 0000000..6530ecf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/TypeArgument_after.java
@@ -0,0 +1,6 @@
+public class Parent<S> {
+    String f;
+}
+
+class Child extends Parent<String> {
+}
diff --git a/java/java-tests/testData/refactoring/pullUp/TypeParamErasure.java b/java/java-tests/testData/refactoring/pullUp/TypeParamErasure.java
new file mode 100644
index 0000000..0dbc24f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/TypeParamErasure.java
@@ -0,0 +1,5 @@
+public class Parent {}
+
+class Child<T> extends Parent {
+   T <caret>f;
+}
diff --git a/java/java-tests/testData/refactoring/pullUp/TypeParamErasure_after.java b/java/java-tests/testData/refactoring/pullUp/TypeParamErasure_after.java
new file mode 100644
index 0000000..fbe98da
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/TypeParamErasure_after.java
@@ -0,0 +1,6 @@
+public class Parent {
+    Object f;
+}
+
+class Child<T> extends Parent {
+}
diff --git a/java/java-tests/testData/refactoring/pullUp/TypeParamSubst.java b/java/java-tests/testData/refactoring/pullUp/TypeParamSubst.java
new file mode 100644
index 0000000..f2ad0c7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/TypeParamSubst.java
@@ -0,0 +1,5 @@
+public class Parent<S> {}
+
+class Child<T> extends Parent<T> {
+   T <caret>f;
+}
diff --git a/java/java-tests/testData/refactoring/pullUp/TypeParamSubst_after.java b/java/java-tests/testData/refactoring/pullUp/TypeParamSubst_after.java
new file mode 100644
index 0000000..bc74745
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/TypeParamSubst_after.java
@@ -0,0 +1,6 @@
+public class Parent<S> {
+    S f;
+}
+
+class Child<T> extends Parent<T> {
+}
diff --git a/java/java-tests/testData/refactoring/pullUp/TypeParamsConflictingNames.java b/java/java-tests/testData/refactoring/pullUp/TypeParamsConflictingNames.java
new file mode 100644
index 0000000..d7b4dff
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/TypeParamsConflictingNames.java
@@ -0,0 +1,7 @@
+interface Bar<T> { }
+
+interface Base<T> { }
+
+class Foo<T,U> implements Base<U> {
+    void fo<caret>o(Bar<U> bar) { }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pullUp/TypeParamsConflictingNames_after.java b/java/java-tests/testData/refactoring/pullUp/TypeParamsConflictingNames_after.java
new file mode 100644
index 0000000..9841218
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/TypeParamsConflictingNames_after.java
@@ -0,0 +1,10 @@
+interface Bar<T> { }
+
+interface Base<T> {
+    void foo(Bar<T> bar);
+}
+
+class Foo<T,U> implements Base<U> {
+    @Override
+    public void foo(Bar<U> bar) { }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pullUp/UpdateStaticRefs.java b/java/java-tests/testData/refactoring/pullUp/UpdateStaticRefs.java
new file mode 100644
index 0000000..0d15177
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/UpdateStaticRefs.java
@@ -0,0 +1,10 @@
+class Foo {}
+class FooImpl extends Foo {
+  public static void foo(){}
+  <caret>
+}
+class U {
+  public static void main(String[] args) {
+    FooImpl.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pullUp/UpdateStaticRefs_after.java b/java/java-tests/testData/refactoring/pullUp/UpdateStaticRefs_after.java
new file mode 100644
index 0000000..a267d99
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/UpdateStaticRefs_after.java
@@ -0,0 +1,11 @@
+class Foo {
+    public static void foo(){}
+}
+class FooImpl extends Foo {
+
+}
+class U {
+  public static void main(String[] args) {
+    Foo.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pullUp/inaccessible/after/a/A.java b/java/java-tests/testData/refactoring/pullUp/inaccessible/after/a/A.java
new file mode 100644
index 0000000..f61709a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/inaccessible/after/a/A.java
@@ -0,0 +1,5 @@
+package a;
+import b.B;
+public class A extends B {
+    void foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pullUp/inaccessible/after/b/B.java b/java/java-tests/testData/refactoring/pullUp/inaccessible/after/b/B.java
new file mode 100644
index 0000000..c9cf796
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/inaccessible/after/b/B.java
@@ -0,0 +1,6 @@
+package b;
+public class B {
+    void method2Move() {
+      foo();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pullUp/inaccessible/before/a/A.java b/java/java-tests/testData/refactoring/pullUp/inaccessible/before/a/A.java
new file mode 100644
index 0000000..c74ba7c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/inaccessible/before/a/A.java
@@ -0,0 +1,8 @@
+package a;
+import b.B;
+public class A extends B {
+  void method2Move() {
+    foo();
+  }
+  void foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pullUp/inaccessible/before/b/B.java b/java/java-tests/testData/refactoring/pullUp/inaccessible/before/b/B.java
new file mode 100644
index 0000000..482ce43
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/inaccessible/before/b/B.java
@@ -0,0 +1,2 @@
+package b;
+public class B {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pullUp/reuseSuperMethod/after/a/A.java b/java/java-tests/testData/refactoring/pullUp/reuseSuperMethod/after/a/A.java
new file mode 100644
index 0000000..504a699
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/reuseSuperMethod/after/a/A.java
@@ -0,0 +1,5 @@
+package a;
+import b.B;
+public class A extends B {
+    protected void foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pullUp/reuseSuperMethod/after/b/B.java b/java/java-tests/testData/refactoring/pullUp/reuseSuperMethod/after/b/B.java
new file mode 100644
index 0000000..de579f8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/reuseSuperMethod/after/b/B.java
@@ -0,0 +1,8 @@
+package b;
+public class B {
+  protected void foo(){}
+
+    void method2Move() {
+      foo();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pullUp/reuseSuperMethod/before/a/A.java b/java/java-tests/testData/refactoring/pullUp/reuseSuperMethod/before/a/A.java
new file mode 100644
index 0000000..008a40e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/reuseSuperMethod/before/a/A.java
@@ -0,0 +1,8 @@
+package a;
+import b.B;
+public class A extends B {
+  void method2Move() {
+    foo();
+  }
+  protected void foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pullUp/reuseSuperMethod/before/b/B.java b/java/java-tests/testData/refactoring/pullUp/reuseSuperMethod/before/b/B.java
new file mode 100644
index 0000000..2efb571
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/reuseSuperMethod/before/b/B.java
@@ -0,0 +1,4 @@
+package b;
+public class B {
+  protected void foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pullUp/reuseSuperSuperMethod/after/a/A.java b/java/java-tests/testData/refactoring/pullUp/reuseSuperSuperMethod/after/a/A.java
new file mode 100644
index 0000000..504a699
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/reuseSuperSuperMethod/after/a/A.java
@@ -0,0 +1,5 @@
+package a;
+import b.B;
+public class A extends B {
+    protected void foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pullUp/reuseSuperSuperMethod/after/b/B.java b/java/java-tests/testData/refactoring/pullUp/reuseSuperSuperMethod/after/b/B.java
new file mode 100644
index 0000000..227a4e6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/reuseSuperSuperMethod/after/b/B.java
@@ -0,0 +1,7 @@
+package b;
+import c.C;
+public class B extends C {
+    void method2Move() {
+      foo();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pullUp/reuseSuperSuperMethod/after/c/C.java b/java/java-tests/testData/refactoring/pullUp/reuseSuperSuperMethod/after/c/C.java
new file mode 100644
index 0000000..eb5a1a6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/reuseSuperSuperMethod/after/c/C.java
@@ -0,0 +1,4 @@
+package c;
+public class C {
+  protected void foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pullUp/reuseSuperSuperMethod/before/a/A.java b/java/java-tests/testData/refactoring/pullUp/reuseSuperSuperMethod/before/a/A.java
new file mode 100644
index 0000000..008a40e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/reuseSuperSuperMethod/before/a/A.java
@@ -0,0 +1,8 @@
+package a;
+import b.B;
+public class A extends B {
+  void method2Move() {
+    foo();
+  }
+  protected void foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pullUp/reuseSuperSuperMethod/before/b/B.java b/java/java-tests/testData/refactoring/pullUp/reuseSuperSuperMethod/before/b/B.java
new file mode 100644
index 0000000..b7797d4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/reuseSuperSuperMethod/before/b/B.java
@@ -0,0 +1,4 @@
+package b;
+import c.C;
+public class B extends C {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pullUp/reuseSuperSuperMethod/before/c/C.java b/java/java-tests/testData/refactoring/pullUp/reuseSuperSuperMethod/before/c/C.java
new file mode 100644
index 0000000..eb5a1a6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pullUp/reuseSuperSuperMethod/before/c/C.java
@@ -0,0 +1,4 @@
+package c;
+public class C {
+  protected void foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/BodyTypeParameter.java b/java/java-tests/testData/refactoring/pushDown/BodyTypeParameter.java
new file mode 100644
index 0000000..3b5ace3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/BodyTypeParameter.java
@@ -0,0 +1,7 @@
+class Test <T> {
+   void <caret>foo(T t) {
+     T tt = t;
+   }
+}
+
+class I extends Test<String>{}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/BodyTypeParameter_after.java b/java/java-tests/testData/refactoring/pushDown/BodyTypeParameter_after.java
new file mode 100644
index 0000000..cc70277
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/BodyTypeParameter_after.java
@@ -0,0 +1,8 @@
+class Test <T> {
+}
+
+class I extends Test<String>{
+    void foo(String t) {
+      String tt = t;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/DisagreeTypeParameter.java b/java/java-tests/testData/refactoring/pushDown/DisagreeTypeParameter.java
new file mode 100644
index 0000000..98fff96
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/DisagreeTypeParameter.java
@@ -0,0 +1,12 @@
+class Test <T> {
+   void <caret>foo(T t) {
+   }
+}
+
+class I extends Test<String>{}
+
+class Usage {
+  void bar() {
+    new Test<Integer>().foo(1);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/DisagreeTypeParameter_after.java b/java/java-tests/testData/refactoring/pushDown/DisagreeTypeParameter_after.java
new file mode 100644
index 0000000..b287995
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/DisagreeTypeParameter_after.java
@@ -0,0 +1,13 @@
+class Test <T> {
+}
+
+class I extends Test<String>{
+    void foo(String t) {
+    }
+}
+
+class Usage {
+  void bar() {
+    new Test<Integer>().foo(1);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/ExtensionMethodToClass.java b/java/java-tests/testData/refactoring/pushDown/ExtensionMethodToClass.java
new file mode 100644
index 0000000..2b074cb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/ExtensionMethodToClass.java
@@ -0,0 +1,8 @@
+interface Base {
+    void foo<caret>() default {
+        System.out.println("Hi there.");
+    }
+}
+
+class C implements Base {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/ExtensionMethodToClass_after.java b/java/java-tests/testData/refactoring/pushDown/ExtensionMethodToClass_after.java
new file mode 100644
index 0000000..ca5d06f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/ExtensionMethodToClass_after.java
@@ -0,0 +1,8 @@
+interface Base {
+}
+
+class C implements Base {
+    public void foo() {
+        System.out.println("Hi there.");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/ExtensionMethodToInterface.java b/java/java-tests/testData/refactoring/pushDown/ExtensionMethodToInterface.java
new file mode 100644
index 0000000..7bf94ea
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/ExtensionMethodToInterface.java
@@ -0,0 +1,8 @@
+interface Base {
+    void foo<caret>() default {
+        System.out.println("Hi there.");
+    }
+}
+
+interface I2 extends Base {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/ExtensionMethodToInterface_after.java b/java/java-tests/testData/refactoring/pushDown/ExtensionMethodToInterface_after.java
new file mode 100644
index 0000000..4d5f9b7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/ExtensionMethodToInterface_after.java
@@ -0,0 +1,8 @@
+interface Base {
+}
+
+interface I2 extends Base {
+    void foo() default {
+        System.out.println("Hi there.");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/FieldAndReferencedClass.java b/java/java-tests/testData/refactoring/pushDown/FieldAndReferencedClass.java
new file mode 100644
index 0000000..4eb4bb3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/FieldAndReferencedClass.java
@@ -0,0 +1,13 @@
+public class Test {
+  class <caret>C {
+    BOOL;
+  }
+
+  Runnable fieldToMove = new Runnable(){
+    public void run(){
+       if (new C().BOOL){}
+    }
+  };
+}
+
+class B extends Test{}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/FieldAndReferencedClass_after.java b/java/java-tests/testData/refactoring/pushDown/FieldAndReferencedClass_after.java
new file mode 100644
index 0000000..6c39353
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/FieldAndReferencedClass_after.java
@@ -0,0 +1,15 @@
+public class Test {
+
+}
+
+class B extends Test{
+    Runnable fieldToMove = new Runnable(){
+      public void run(){
+         if (new C().BOOL){}
+      }
+    };
+
+    class C {
+      BOOL;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/FieldAndStaticReferencedClass.java b/java/java-tests/testData/refactoring/pushDown/FieldAndStaticReferencedClass.java
new file mode 100644
index 0000000..5d3b37c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/FieldAndStaticReferencedClass.java
@@ -0,0 +1,13 @@
+public class Test {
+  static class <caret>C {
+    static BOOL;
+  }
+
+  Runnable fieldToMove = new Runnable(){
+    public void run(){
+       if (C.BOOL){}
+    }
+  };
+}
+
+class B extends Test{}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/FieldAndStaticReferencedClass_after.java b/java/java-tests/testData/refactoring/pushDown/FieldAndStaticReferencedClass_after.java
new file mode 100644
index 0000000..22b58c2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/FieldAndStaticReferencedClass_after.java
@@ -0,0 +1,15 @@
+public class Test {
+
+}
+
+class B extends Test{
+    Runnable fieldToMove = new Runnable(){
+      public void run(){
+         if (C.BOOL){}
+      }
+    };
+
+    static class C {
+      static BOOL;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/FieldTypeParameter.java b/java/java-tests/testData/refactoring/pushDown/FieldTypeParameter.java
new file mode 100644
index 0000000..bac4b14
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/FieldTypeParameter.java
@@ -0,0 +1,6 @@
+class Test <T> {
+   T <caret>t;
+   T tt;
+}
+
+class I extends Test<String>{}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/FieldTypeParameter_after.java b/java/java-tests/testData/refactoring/pushDown/FieldTypeParameter_after.java
new file mode 100644
index 0000000..9f9a57a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/FieldTypeParameter_after.java
@@ -0,0 +1,7 @@
+class Test <T> {
+    T tt;
+}
+
+class I extends Test<String>{
+    String t;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/MethodFromInterfaceToAbstractClass.java b/java/java-tests/testData/refactoring/pushDown/MethodFromInterfaceToAbstractClass.java
new file mode 100644
index 0000000..d860383
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/MethodFromInterfaceToAbstractClass.java
@@ -0,0 +1,7 @@
+abstract class StraightLine implements Inline {
+}
+
+interface Inline {
+
+  void g<caret>o(); // inline this method
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/MethodFromInterfaceToAbstractClass_after.java b/java/java-tests/testData/refactoring/pushDown/MethodFromInterfaceToAbstractClass_after.java
new file mode 100644
index 0000000..d7aa98f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/MethodFromInterfaceToAbstractClass_after.java
@@ -0,0 +1,7 @@
+abstract class StraightLine implements Inline {
+    public abstract void go(); // inline this method
+}
+
+interface Inline {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/MethodTypeParametersList.java b/java/java-tests/testData/refactoring/pushDown/MethodTypeParametersList.java
new file mode 100644
index 0000000..dcfa668
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/MethodTypeParametersList.java
@@ -0,0 +1,6 @@
+public class Test<T> {
+  <S extends T> void f<caret>oo(){}
+}
+
+class B extends Test<Throwable>{
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/MethodTypeParametersList_after.java b/java/java-tests/testData/refactoring/pushDown/MethodTypeParametersList_after.java
new file mode 100644
index 0000000..6995fca
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/MethodTypeParametersList_after.java
@@ -0,0 +1,6 @@
+public class Test<T> {
+}
+
+class B extends Test<Throwable>{
+    <S extends Throwable> void foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/OverridingMethodWithSubst.java b/java/java-tests/testData/refactoring/pushDown/OverridingMethodWithSubst.java
new file mode 100644
index 0000000..7292155
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/OverridingMethodWithSubst.java
@@ -0,0 +1,13 @@
+abstract class BaseTask<T, S extends BaseTask<T, S>> {
+  public abstract S make<caret>Task(int depth, ParallelStream<T> coll);
+}
+
+
+class ForEachTask<T> extends BaseTask<T, ForEachTask<T>> {
+  public ForEachTask<T> makeTask(int depth, ParallelStream<T> coll) {
+    return new ForEachTask<T>();
+  }
+}
+
+class ParallelStream<T> {
+}
diff --git a/java/java-tests/testData/refactoring/pushDown/OverridingMethodWithSubst_after.java b/java/java-tests/testData/refactoring/pushDown/OverridingMethodWithSubst_after.java
new file mode 100644
index 0000000..4a34fba
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/OverridingMethodWithSubst_after.java
@@ -0,0 +1,12 @@
+abstract class BaseTask<T, S extends BaseTask<T, S>> {
+}
+
+
+class ForEachTask<T> extends BaseTask<T, ForEachTask<T>> {
+  public ForEachTask<T> makeTask(int depth, ParallelStream<T> coll) {
+    return new ForEachTask<T>();
+  }
+}
+
+class ParallelStream<T> {
+}
diff --git a/java/java-tests/testData/refactoring/pushDown/PreserveTypeArgs.java b/java/java-tests/testData/refactoring/pushDown/PreserveTypeArgs.java
new file mode 100644
index 0000000..dbf4610
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/PreserveTypeArgs.java
@@ -0,0 +1,6 @@
+import java.util.*;
+abstract class Test implements List<String> {
+}
+
+abstract class B extends Test {
+}
diff --git a/java/java-tests/testData/refactoring/pushDown/PreserveTypeArgs_after.java b/java/java-tests/testData/refactoring/pushDown/PreserveTypeArgs_after.java
new file mode 100644
index 0000000..1e26dd3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/PreserveTypeArgs_after.java
@@ -0,0 +1,6 @@
+import java.util.*;
+abstract class Test {
+}
+
+abstract class B extends Test implements List<String> {
+}
diff --git a/java/java-tests/testData/refactoring/pushDown/SameClassInterface.java b/java/java-tests/testData/refactoring/pushDown/SameClassInterface.java
new file mode 100644
index 0000000..5f5a5ca
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/SameClassInterface.java
@@ -0,0 +1,3 @@
+interface Int {}
+public class Test implements In<caret>t {}
+class B extends Test implements Int {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/SameClassInterface_after.java b/java/java-tests/testData/refactoring/pushDown/SameClassInterface_after.java
new file mode 100644
index 0000000..65379b7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/SameClassInterface_after.java
@@ -0,0 +1,3 @@
+interface Int {}
+public class Test {}
+class B extends Test implements Int {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/SubstTypeArgs.java b/java/java-tests/testData/refactoring/pushDown/SubstTypeArgs.java
new file mode 100644
index 0000000..4b90ba6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/SubstTypeArgs.java
@@ -0,0 +1,6 @@
+import java.util.*;
+abstract class Test<T> implements List<T> {
+}
+
+abstract class B extends Test<String> {
+}
diff --git a/java/java-tests/testData/refactoring/pushDown/SubstTypeArgs_after.java b/java/java-tests/testData/refactoring/pushDown/SubstTypeArgs_after.java
new file mode 100644
index 0000000..bee78b9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/SubstTypeArgs_after.java
@@ -0,0 +1,6 @@
+import java.util.*;
+abstract class Test<T> {
+}
+
+abstract class B extends Test<String> implements List<String> {
+}
diff --git a/java/java-tests/testData/refactoring/pushDown/SuperOverHierarchy.java b/java/java-tests/testData/refactoring/pushDown/SuperOverHierarchy.java
new file mode 100644
index 0000000..980725c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/SuperOverHierarchy.java
@@ -0,0 +1,25 @@
+class A {
+  void k() {
+    System.out.println(23);
+  }
+}
+
+class B extends A {
+  void k() {
+    System.out.println(42);
+  }
+
+  void <caret>m() {
+    new C() {
+      void foo() {
+        super.k();
+      }
+    };
+  }
+}
+
+public class C extends B {
+  public static void main(String[] args) {
+    new C().m();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/SuperOverHierarchyConflict.java b/java/java-tests/testData/refactoring/pushDown/SuperOverHierarchyConflict.java
new file mode 100644
index 0000000..83e4b04
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/SuperOverHierarchyConflict.java
@@ -0,0 +1,21 @@
+class A {
+  void k() {
+    System.out.println(23);
+  }
+}
+
+class B extends A {
+  void k() {
+    System.out.println(42);
+  }
+
+  void <caret>m() {
+    super.k();
+  }
+}
+
+public class C extends B {
+  public static void main(String[] args) {
+    new C().m();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/SuperOverHierarchyConflict_after.java b/java/java-tests/testData/refactoring/pushDown/SuperOverHierarchyConflict_after.java
new file mode 100644
index 0000000..d4089ec
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/SuperOverHierarchyConflict_after.java
@@ -0,0 +1,22 @@
+class A {
+  void k() {
+    System.out.println(23);
+  }
+}
+
+class B extends A {
+  void k() {
+    System.out.println(42);
+  }
+
+}
+
+public class C extends B {
+  public static void main(String[] args) {
+    new C().m();
+  }
+
+    void m() {
+      super.k();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/SuperOverHierarchy_after.java b/java/java-tests/testData/refactoring/pushDown/SuperOverHierarchy_after.java
new file mode 100644
index 0000000..f71c958
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/SuperOverHierarchy_after.java
@@ -0,0 +1,26 @@
+class A {
+  void k() {
+    System.out.println(23);
+  }
+}
+
+class B extends A {
+  void k() {
+    System.out.println(42);
+  }
+
+}
+
+public class C extends B {
+  public static void main(String[] args) {
+    new C().m();
+  }
+
+    void m() {
+      new C() {
+        void foo() {
+          super.k();
+        }
+      };
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/ThisRefInAnonymous.java b/java/java-tests/testData/refactoring/pushDown/ThisRefInAnonymous.java
new file mode 100644
index 0000000..886e169
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/ThisRefInAnonymous.java
@@ -0,0 +1,20 @@
+class A {
+  void <caret>foo() {
+    new Runnable() {
+      public void run() {
+        A.this.toString();
+      }
+    }
+  }
+
+  void leaveIt() {
+    new Runnable() {
+      public void run() {
+        A.this.toString();
+      }
+    }
+  }
+}
+
+class B extends A {
+}
diff --git a/java/java-tests/testData/refactoring/pushDown/ThisRefInAnonymous_after.java b/java/java-tests/testData/refactoring/pushDown/ThisRefInAnonymous_after.java
new file mode 100644
index 0000000..4ec36e0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/ThisRefInAnonymous_after.java
@@ -0,0 +1,20 @@
+class A {
+
+    void leaveIt() {
+    new Runnable() {
+      public void run() {
+        A.this.toString();
+      }
+    }
+  }
+}
+
+class B extends A {
+    void foo() {
+      new Runnable() {
+        public void run() {
+          B.this.toString();
+        }
+      }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/pushDown/TypeParameter.java b/java/java-tests/testData/refactoring/pushDown/TypeParameter.java
new file mode 100644
index 0000000..7793e2e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/TypeParameter.java
@@ -0,0 +1,7 @@
+class Test <T> {
+   void <caret>foo(T t) {
+
+   }
+}
+
+class I extends Test<String>{}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/TypeParameterErasure.java b/java/java-tests/testData/refactoring/pushDown/TypeParameterErasure.java
new file mode 100644
index 0000000..c27db98
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/TypeParameterErasure.java
@@ -0,0 +1,5 @@
+public class Parent<T> {
+  void <caret>foo(T t){}
+}
+
+class Child extends Parent {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/TypeParameterErasure_after.java b/java/java-tests/testData/refactoring/pushDown/TypeParameterErasure_after.java
new file mode 100644
index 0000000..5a00eaf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/TypeParameterErasure_after.java
@@ -0,0 +1,6 @@
+public class Parent<T> {
+}
+
+class Child extends Parent {
+    void foo(Object t){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/TypeParameter_after.java b/java/java-tests/testData/refactoring/pushDown/TypeParameter_after.java
new file mode 100644
index 0000000..5eb5cd6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/TypeParameter_after.java
@@ -0,0 +1,8 @@
+class Test <T> {
+}
+
+class I extends Test<String>{
+    void foo(String t) {
+ 
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/fromInterface/after/a/I.java b/java/java-tests/testData/refactoring/pushDown/fromInterface/after/a/I.java
new file mode 100644
index 0000000..1be4a48
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/fromInterface/after/a/I.java
@@ -0,0 +1,3 @@
+package a;
+public interface I {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/fromInterface/after/a/I1.java b/java/java-tests/testData/refactoring/pushDown/fromInterface/after/a/I1.java
new file mode 100644
index 0000000..141ef18
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/fromInterface/after/a/I1.java
@@ -0,0 +1,4 @@
+package a;
+public interface I1 extends I {
+    void foo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/fromInterface/after/b/B.java b/java/java-tests/testData/refactoring/pushDown/fromInterface/after/b/B.java
new file mode 100644
index 0000000..d1a35d5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/fromInterface/after/b/B.java
@@ -0,0 +1,7 @@
+package b;
+import a.*;
+class B {
+  void f(I1 i1) {
+    i1.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/fromInterface/before/a/I.java b/java/java-tests/testData/refactoring/pushDown/fromInterface/before/a/I.java
new file mode 100644
index 0000000..def983e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/fromInterface/before/a/I.java
@@ -0,0 +1,4 @@
+package a;
+public interface I {
+  void foo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/fromInterface/before/a/I1.java b/java/java-tests/testData/refactoring/pushDown/fromInterface/before/a/I1.java
new file mode 100644
index 0000000..87c70e6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/fromInterface/before/a/I1.java
@@ -0,0 +1,2 @@
+package a;
+public interface I1 extends I {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/fromInterface/before/b/B.java b/java/java-tests/testData/refactoring/pushDown/fromInterface/before/b/B.java
new file mode 100644
index 0000000..d1a35d5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/fromInterface/before/b/B.java
@@ -0,0 +1,7 @@
+package b;
+import a.*;
+class B {
+  void f(I1 i1) {
+    i1.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/reuseOverrideMethod/after/a/A.java b/java/java-tests/testData/refactoring/pushDown/reuseOverrideMethod/after/a/A.java
new file mode 100644
index 0000000..018a7cd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/reuseOverrideMethod/after/a/A.java
@@ -0,0 +1,4 @@
+package a;
+public class A {
+    protected void bar(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/reuseOverrideMethod/after/b/B.java b/java/java-tests/testData/refactoring/pushDown/reuseOverrideMethod/after/b/B.java
new file mode 100644
index 0000000..0912f86
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/reuseOverrideMethod/after/b/B.java
@@ -0,0 +1,10 @@
+package b;
+import a.A;
+
+public class B extends A {
+  protected void bar(){}
+
+    public void foo(){
+      bar();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/reuseOverrideMethod/before/a/A.java b/java/java-tests/testData/refactoring/pushDown/reuseOverrideMethod/before/a/A.java
new file mode 100644
index 0000000..da41023
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/reuseOverrideMethod/before/a/A.java
@@ -0,0 +1,7 @@
+package a;
+public class A {
+  public void foo(){
+    bar();
+  }
+  protected void bar(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/reuseOverrideMethod/before/b/B.java b/java/java-tests/testData/refactoring/pushDown/reuseOverrideMethod/before/b/B.java
new file mode 100644
index 0000000..1564865
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/reuseOverrideMethod/before/b/B.java
@@ -0,0 +1,6 @@
+package b;
+import a.A;
+
+public class B extends A {
+  protected void bar(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/staticImportOfPushedMethod/after/a/A.java b/java/java-tests/testData/refactoring/pushDown/staticImportOfPushedMethod/after/a/A.java
new file mode 100644
index 0000000..7e84311
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/staticImportOfPushedMethod/after/a/A.java
@@ -0,0 +1,3 @@
+package a;
+public class A {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/staticImportOfPushedMethod/after/b/B.java b/java/java-tests/testData/refactoring/pushDown/staticImportOfPushedMethod/after/b/B.java
new file mode 100644
index 0000000..4f246d6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/staticImportOfPushedMethod/after/b/B.java
@@ -0,0 +1,7 @@
+package b;
+import a.*;
+
+public class B extends A {
+    public static void foo(){
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/staticImportOfPushedMethod/after/u/U.java b/java/java-tests/testData/refactoring/pushDown/staticImportOfPushedMethod/after/u/U.java
new file mode 100644
index 0000000..8302453
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/staticImportOfPushedMethod/after/u/U.java
@@ -0,0 +1,7 @@
+package u;
+import static b.B.foo;
+public class U {
+  public static void main(String[] args) {
+    foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/staticImportOfPushedMethod/before/a/A.java b/java/java-tests/testData/refactoring/pushDown/staticImportOfPushedMethod/before/a/A.java
new file mode 100644
index 0000000..d801300
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/staticImportOfPushedMethod/before/a/A.java
@@ -0,0 +1,5 @@
+package a;
+public class A {
+  public static void foo(){
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/staticImportOfPushedMethod/before/b/B.java b/java/java-tests/testData/refactoring/pushDown/staticImportOfPushedMethod/before/b/B.java
new file mode 100644
index 0000000..3b5dac6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/staticImportOfPushedMethod/before/b/B.java
@@ -0,0 +1,4 @@
+package b;
+import a.*;
+
+public class B extends A {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/staticImportOfPushedMethod/before/u/U.java b/java/java-tests/testData/refactoring/pushDown/staticImportOfPushedMethod/before/u/U.java
new file mode 100644
index 0000000..3e4a034
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/staticImportOfPushedMethod/before/u/U.java
@@ -0,0 +1,7 @@
+package u;
+import static a.A.foo;
+public class U {
+  public static void main(String[] args) {
+    foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/staticImportsInsidePushedMethod/after/a/A.java b/java/java-tests/testData/refactoring/pushDown/staticImportsInsidePushedMethod/after/a/A.java
new file mode 100644
index 0000000..eb5ae9f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/staticImportsInsidePushedMethod/after/a/A.java
@@ -0,0 +1,4 @@
+package a;
+import static u.U.C;
+public class A {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/staticImportsInsidePushedMethod/after/b/B.java b/java/java-tests/testData/refactoring/pushDown/staticImportsInsidePushedMethod/after/b/B.java
new file mode 100644
index 0000000..b152d21
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/staticImportsInsidePushedMethod/after/b/B.java
@@ -0,0 +1,10 @@
+package b;
+import a.*;
+
+import static u.U.C;
+
+public class B extends A {
+    public static void foo(){
+      System.out.println(C);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/staticImportsInsidePushedMethod/after/u/U.java b/java/java-tests/testData/refactoring/pushDown/staticImportsInsidePushedMethod/after/u/U.java
new file mode 100644
index 0000000..603ed14
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/staticImportsInsidePushedMethod/after/u/U.java
@@ -0,0 +1,4 @@
+package u;
+public class U {
+  public static final String C = "CONSTANT";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/staticImportsInsidePushedMethod/before/a/A.java b/java/java-tests/testData/refactoring/pushDown/staticImportsInsidePushedMethod/before/a/A.java
new file mode 100644
index 0000000..905c150
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/staticImportsInsidePushedMethod/before/a/A.java
@@ -0,0 +1,7 @@
+package a;
+import static u.U.C;
+public class A {
+  public static void foo(){
+    System.out.println(C);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/staticImportsInsidePushedMethod/before/b/B.java b/java/java-tests/testData/refactoring/pushDown/staticImportsInsidePushedMethod/before/b/B.java
new file mode 100644
index 0000000..3b5dac6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/staticImportsInsidePushedMethod/before/b/B.java
@@ -0,0 +1,4 @@
+package b;
+import a.*;
+
+public class B extends A {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/staticImportsInsidePushedMethod/before/u/U.java b/java/java-tests/testData/refactoring/pushDown/staticImportsInsidePushedMethod/before/u/U.java
new file mode 100644
index 0000000..603ed14
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/staticImportsInsidePushedMethod/before/u/U.java
@@ -0,0 +1,4 @@
+package u;
+public class U {
+  public static final String C = "CONSTANT";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/usagesInXml/before/a/A.form b/java/java-tests/testData/refactoring/pushDown/usagesInXml/before/a/A.form
new file mode 100644
index 0000000..e49f0fe7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/usagesInXml/before/a/A.form
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="a.A">
+  <grid id="27dc6" layout-manager="GridLayoutManager" row-count="2" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
+    <margin top="0" left="0" bottom="0" right="0"/>
+    <constraints>
+      <xy x="20" y="20" width="500" height="400"/>
+    </constraints>
+    <properties/>
+    <border type="none"/>
+    <children>
+      <component id="3ec2f" class="javax.swing.JTextField" binding="textField1" default-binding="true">
+        <constraints>
+          <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="6" anchor="8" fill="1" indent="0" use-parent-layout="false">
+            <preferred-size width="150" height="-1"/>
+          </grid>
+        </constraints>
+        <properties/>
+      </component>
+      <hspacer id="38a16">
+        <constraints>
+          <grid row="0" column="1" row-span="1" col-span="1" vsize-policy="1" hsize-policy="6" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
+        </constraints>
+      </hspacer>
+      <vspacer id="e9ce3">
+        <constraints>
+          <grid row="1" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+        </constraints>
+      </vspacer>
+    </children>
+  </grid>
+</form>
diff --git a/java/java-tests/testData/refactoring/pushDown/usagesInXml/before/a/A.java b/java/java-tests/testData/refactoring/pushDown/usagesInXml/before/a/A.java
new file mode 100644
index 0000000..c762127
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/usagesInXml/before/a/A.java
@@ -0,0 +1,4 @@
+package a;
+public class A {
+  private JTextField textField1;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/pushDown/usagesInXml/before/b/B.java b/java/java-tests/testData/refactoring/pushDown/usagesInXml/before/b/B.java
new file mode 100644
index 0000000..399835a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/pushDown/usagesInXml/before/b/B.java
@@ -0,0 +1,4 @@
+package b;
+
+import a.*;
+class B extends A {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/removemiddleman/interface/after/A.java b/java/java-tests/testData/refactoring/removemiddleman/interface/after/A.java
new file mode 100644
index 0000000..c4ed8d0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/removemiddleman/interface/after/A.java
@@ -0,0 +1,3 @@
+class A {
+  void foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/removemiddleman/interface/after/D.java b/java/java-tests/testData/refactoring/removemiddleman/interface/after/D.java
new file mode 100644
index 0000000..17ebd9b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/removemiddleman/interface/after/D.java
@@ -0,0 +1,5 @@
+class D {
+   void bar(I i) {
+     i.foo();
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/removemiddleman/interface/after/I.java b/java/java-tests/testData/refactoring/removemiddleman/interface/after/I.java
new file mode 100644
index 0000000..e8d3fe5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/removemiddleman/interface/after/I.java
@@ -0,0 +1,3 @@
+interface I {
+  void foo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/removemiddleman/interface/after/Test.java b/java/java-tests/testData/refactoring/removemiddleman/interface/after/Test.java
new file mode 100644
index 0000000..7d04043
--- /dev/null
+++ b/java/java-tests/testData/refactoring/removemiddleman/interface/after/Test.java
@@ -0,0 +1,6 @@
+class Test implements I {
+  A myField;
+  void foo() {
+    myField.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/removemiddleman/interface/before/A.java b/java/java-tests/testData/refactoring/removemiddleman/interface/before/A.java
new file mode 100644
index 0000000..c4ed8d0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/removemiddleman/interface/before/A.java
@@ -0,0 +1,3 @@
+class A {
+  void foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/removemiddleman/interface/before/D.java b/java/java-tests/testData/refactoring/removemiddleman/interface/before/D.java
new file mode 100644
index 0000000..17ebd9b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/removemiddleman/interface/before/D.java
@@ -0,0 +1,5 @@
+class D {
+   void bar(I i) {
+     i.foo();
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/removemiddleman/interface/before/I.java b/java/java-tests/testData/refactoring/removemiddleman/interface/before/I.java
new file mode 100644
index 0000000..e8d3fe5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/removemiddleman/interface/before/I.java
@@ -0,0 +1,3 @@
+interface I {
+  void foo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/removemiddleman/interface/before/Test.java b/java/java-tests/testData/refactoring/removemiddleman/interface/before/Test.java
new file mode 100644
index 0000000..7d04043
--- /dev/null
+++ b/java/java-tests/testData/refactoring/removemiddleman/interface/before/Test.java
@@ -0,0 +1,6 @@
+class Test implements I {
+  A myField;
+  void foo() {
+    myField.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/removemiddleman/interfaceDelegation/after/A.java b/java/java-tests/testData/refactoring/removemiddleman/interfaceDelegation/after/A.java
new file mode 100644
index 0000000..e4baad9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/removemiddleman/interfaceDelegation/after/A.java
@@ -0,0 +1,3 @@
+interface A {
+  void foo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/removemiddleman/interfaceDelegation/after/I.java b/java/java-tests/testData/refactoring/removemiddleman/interfaceDelegation/after/I.java
new file mode 100644
index 0000000..776cea2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/removemiddleman/interfaceDelegation/after/I.java
@@ -0,0 +1,4 @@
+interface I {
+  A getMyField();
+  void foo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/removemiddleman/interfaceDelegation/after/Test.java b/java/java-tests/testData/refactoring/removemiddleman/interfaceDelegation/after/Test.java
new file mode 100644
index 0000000..2b9a406
--- /dev/null
+++ b/java/java-tests/testData/refactoring/removemiddleman/interfaceDelegation/after/Test.java
@@ -0,0 +1,14 @@
+class Test implements I {
+  A myField;
+  A getMyField(){
+    return myField;
+  }
+
+  void foo() {
+    myField.foo();
+  }
+
+  void bar(I i) {
+    i.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/removemiddleman/interfaceDelegation/before/A.java b/java/java-tests/testData/refactoring/removemiddleman/interfaceDelegation/before/A.java
new file mode 100644
index 0000000..e4baad9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/removemiddleman/interfaceDelegation/before/A.java
@@ -0,0 +1,3 @@
+interface A {
+  void foo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/removemiddleman/interfaceDelegation/before/I.java b/java/java-tests/testData/refactoring/removemiddleman/interfaceDelegation/before/I.java
new file mode 100644
index 0000000..776cea2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/removemiddleman/interfaceDelegation/before/I.java
@@ -0,0 +1,4 @@
+interface I {
+  A getMyField();
+  void foo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/removemiddleman/interfaceDelegation/before/Test.java b/java/java-tests/testData/refactoring/removemiddleman/interfaceDelegation/before/Test.java
new file mode 100644
index 0000000..2b9a406
--- /dev/null
+++ b/java/java-tests/testData/refactoring/removemiddleman/interfaceDelegation/before/Test.java
@@ -0,0 +1,14 @@
+class Test implements I {
+  A myField;
+  A getMyField(){
+    return myField;
+  }
+
+  void foo() {
+    myField.foo();
+  }
+
+  void bar(I i) {
+    i.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/removemiddleman/noGetter/after/Test.java b/java/java-tests/testData/refactoring/removemiddleman/noGetter/after/Test.java
new file mode 100644
index 0000000..d2a7e28
--- /dev/null
+++ b/java/java-tests/testData/refactoring/removemiddleman/noGetter/after/Test.java
@@ -0,0 +1,12 @@
+class Test {
+  A myField;
+
+    void bar(){
+        myField.foo();
+  }
+
+}
+
+class A {
+  void foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/removemiddleman/noGetter/before/Test.java b/java/java-tests/testData/refactoring/removemiddleman/noGetter/before/Test.java
new file mode 100644
index 0000000..a04a701
--- /dev/null
+++ b/java/java-tests/testData/refactoring/removemiddleman/noGetter/before/Test.java
@@ -0,0 +1,15 @@
+class Test {
+  A myField;
+  void foo(){
+    myField.foo();
+  }
+
+  void bar(){
+    foo();
+  }
+
+}
+
+class A {
+  void foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/removemiddleman/presentGetter/after/A.java b/java/java-tests/testData/refactoring/removemiddleman/presentGetter/after/A.java
new file mode 100644
index 0000000..c4ed8d0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/removemiddleman/presentGetter/after/A.java
@@ -0,0 +1,3 @@
+class A {
+  void foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/removemiddleman/presentGetter/after/I.java b/java/java-tests/testData/refactoring/removemiddleman/presentGetter/after/I.java
new file mode 100644
index 0000000..776cea2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/removemiddleman/presentGetter/after/I.java
@@ -0,0 +1,4 @@
+interface I {
+  A getMyField();
+  void foo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/removemiddleman/presentGetter/after/Test.java b/java/java-tests/testData/refactoring/removemiddleman/presentGetter/after/Test.java
new file mode 100644
index 0000000..2b9a406
--- /dev/null
+++ b/java/java-tests/testData/refactoring/removemiddleman/presentGetter/after/Test.java
@@ -0,0 +1,14 @@
+class Test implements I {
+  A myField;
+  A getMyField(){
+    return myField;
+  }
+
+  void foo() {
+    myField.foo();
+  }
+
+  void bar(I i) {
+    i.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/removemiddleman/presentGetter/before/A.java b/java/java-tests/testData/refactoring/removemiddleman/presentGetter/before/A.java
new file mode 100644
index 0000000..c4ed8d0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/removemiddleman/presentGetter/before/A.java
@@ -0,0 +1,3 @@
+class A {
+  void foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/removemiddleman/presentGetter/before/I.java b/java/java-tests/testData/refactoring/removemiddleman/presentGetter/before/I.java
new file mode 100644
index 0000000..776cea2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/removemiddleman/presentGetter/before/I.java
@@ -0,0 +1,4 @@
+interface I {
+  A getMyField();
+  void foo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/removemiddleman/presentGetter/before/Test.java b/java/java-tests/testData/refactoring/removemiddleman/presentGetter/before/Test.java
new file mode 100644
index 0000000..2b9a406
--- /dev/null
+++ b/java/java-tests/testData/refactoring/removemiddleman/presentGetter/before/Test.java
@@ -0,0 +1,14 @@
+class Test implements I {
+  A myField;
+  A getMyField(){
+    return myField;
+  }
+
+  void foo() {
+    myField.foo();
+  }
+
+  void bar(I i) {
+    i.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/removemiddleman/siblings/after/A.java b/java/java-tests/testData/refactoring/removemiddleman/siblings/after/A.java
new file mode 100644
index 0000000..113d165
--- /dev/null
+++ b/java/java-tests/testData/refactoring/removemiddleman/siblings/after/A.java
@@ -0,0 +1,3 @@
+abstract class A{
+  abstract void foo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/removemiddleman/siblings/after/D.java b/java/java-tests/testData/refactoring/removemiddleman/siblings/after/D.java
new file mode 100644
index 0000000..076d50a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/removemiddleman/siblings/after/D.java
@@ -0,0 +1,11 @@
+class D {
+  void foo(){}
+
+  void bar(A a){
+    a.foo();
+  }
+
+  void bazz(Test t){
+    t.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/removemiddleman/siblings/after/Test.java b/java/java-tests/testData/refactoring/removemiddleman/siblings/after/Test.java
new file mode 100644
index 0000000..9066078
--- /dev/null
+++ b/java/java-tests/testData/refactoring/removemiddleman/siblings/after/Test.java
@@ -0,0 +1,10 @@
+class Test extends A {
+  D myField;
+  void foo(){
+    myField.foo();
+  }
+
+  void ff(){
+    foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/removemiddleman/siblings/before/A.java b/java/java-tests/testData/refactoring/removemiddleman/siblings/before/A.java
new file mode 100644
index 0000000..113d165
--- /dev/null
+++ b/java/java-tests/testData/refactoring/removemiddleman/siblings/before/A.java
@@ -0,0 +1,3 @@
+abstract class A{
+  abstract void foo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/removemiddleman/siblings/before/D.java b/java/java-tests/testData/refactoring/removemiddleman/siblings/before/D.java
new file mode 100644
index 0000000..076d50a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/removemiddleman/siblings/before/D.java
@@ -0,0 +1,11 @@
+class D {
+  void foo(){}
+
+  void bar(A a){
+    a.foo();
+  }
+
+  void bazz(Test t){
+    t.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/removemiddleman/siblings/before/Test.java b/java/java-tests/testData/refactoring/removemiddleman/siblings/before/Test.java
new file mode 100644
index 0000000..9066078
--- /dev/null
+++ b/java/java-tests/testData/refactoring/removemiddleman/siblings/before/Test.java
@@ -0,0 +1,10 @@
+class Test extends A {
+  D myField;
+  void foo(){
+    myField.foo();
+  }
+
+  void ff(){
+    foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameClass/automaticRenameInheritors/after/X.java b/java/java-tests/testData/refactoring/renameClass/automaticRenameInheritors/after/X.java
new file mode 100644
index 0000000..daf6dbc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameClass/automaticRenameInheritors/after/X.java
@@ -0,0 +1,12 @@
+public class X {
+}
+
+class MyClass1 {}
+
+/**
+ * {@link #MyClass1Impl()}
+ */
+class MyClass1Impl extends MyClass1 {
+    MyClass1Impl() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameClass/automaticRenameInheritors/before/X.java b/java/java-tests/testData/refactoring/renameClass/automaticRenameInheritors/before/X.java
new file mode 100644
index 0000000..b480756
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameClass/automaticRenameInheritors/before/X.java
@@ -0,0 +1,12 @@
+public class X {
+}
+
+class MyClass {}
+
+/**
+ * {@link #MyClassImpl()}
+ */
+class MyClassImpl extends MyClass {
+    MyClassImpl() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameClass/automaticRenameVars/after/X.java b/java/java-tests/testData/refactoring/renameClass/automaticRenameVars/after/X.java
new file mode 100644
index 0000000..106bf0b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameClass/automaticRenameVars/after/X.java
@@ -0,0 +1,6 @@
+class Y { // rename me to Y and let the refactoring rename the variables too.
+	void foo(Y y) {
+		String yz = "asdf";
+		System.out.println("x: " + y + yz);
+	}
+}
diff --git a/java/java-tests/testData/refactoring/renameClass/automaticRenameVars/before/X.java b/java/java-tests/testData/refactoring/renameClass/automaticRenameVars/before/X.java
new file mode 100644
index 0000000..9fc0065
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameClass/automaticRenameVars/before/X.java
@@ -0,0 +1,6 @@
+class XX { // rename me to Y and let the refactoring rename the variables too.
+	void foo(XX xx) {
+		String yz = "asdf";
+		System.out.println("x: " + xx + yz);
+	}
+}
diff --git a/java/java-tests/testData/refactoring/renameClass/automaticRenameVarsCollision/after/X.java b/java/java-tests/testData/refactoring/renameClass/automaticRenameVarsCollision/after/X.java
new file mode 100644
index 0000000..0008807
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameClass/automaticRenameVarsCollision/after/X.java
@@ -0,0 +1,6 @@
+class Y { // rename me to Y and let the refactoring rename the variables too.
+	void foo(Y x) {
+		String y = "asdf";
+		System.out.println("x: " + x + y);
+	}
+}
diff --git a/java/java-tests/testData/refactoring/renameClass/automaticRenameVarsCollision/before/X.java b/java/java-tests/testData/refactoring/renameClass/automaticRenameVarsCollision/before/X.java
new file mode 100644
index 0000000..e659df1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameClass/automaticRenameVarsCollision/before/X.java
@@ -0,0 +1,6 @@
+class XX { // rename me to Y and let the refactoring rename the variables too.
+	void foo(XX x) {
+		String y = "asdf";
+		System.out.println("x: " + x + y);
+	}
+}
diff --git a/java/java-tests/testData/refactoring/renameClass/collision/after/pack1/List.java b/java/java-tests/testData/refactoring/renameClass/collision/after/pack1/List.java
new file mode 100644
index 0000000..68b821c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameClass/collision/after/pack1/List.java
@@ -0,0 +1,4 @@
+package pack1;
+
+public class List {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameClass/collision/after/pack2/Usage.java b/java/java-tests/testData/refactoring/renameClass/collision/after/pack2/Usage.java
new file mode 100644
index 0000000..9921023
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameClass/collision/after/pack2/Usage.java
@@ -0,0 +1,9 @@
+package pack2;
+import pack1.*;
+
+public class Usage {
+    int method() {
+        java.util.List list = null;
+        List myList = null;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameClass/collision/after/pack2/Usage2.java b/java/java-tests/testData/refactoring/renameClass/collision/after/pack2/Usage2.java
new file mode 100644
index 0000000..8f57745
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameClass/collision/after/pack2/Usage2.java
@@ -0,0 +1,10 @@
+package pack2;
+
+import java.util.List;
+
+public class Usage2 {
+    int method() {
+        List list = null;
+        pack1.List myList = null;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameClass/collision/before/pack1/MyList.java b/java/java-tests/testData/refactoring/renameClass/collision/before/pack1/MyList.java
new file mode 100644
index 0000000..e988724
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameClass/collision/before/pack1/MyList.java
@@ -0,0 +1,4 @@
+package pack1;
+
+public class MyList {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameClass/collision/before/pack2/Usage.java b/java/java-tests/testData/refactoring/renameClass/collision/before/pack2/Usage.java
new file mode 100644
index 0000000..902c87b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameClass/collision/before/pack2/Usage.java
@@ -0,0 +1,10 @@
+package pack2;
+import java.util.List;
+import pack1.*;
+
+public class Usage {
+    int method() {
+        List list = null;
+        MyList myList = null;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameClass/collision/before/pack2/Usage2.java b/java/java-tests/testData/refactoring/renameClass/collision/before/pack2/Usage2.java
new file mode 100644
index 0000000..0cd1bea
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameClass/collision/before/pack2/Usage2.java
@@ -0,0 +1,9 @@
+package pack2;
+import java.util.*;
+
+public class Usage2 {
+    int method() {
+        List list = null;
+        pack1.MyList myList = null;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameClass/collision1/after/Test.java b/java/java-tests/testData/refactoring/renameClass/collision1/after/Test.java
new file mode 100644
index 0000000..76fe079
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameClass/collision1/after/Test.java
@@ -0,0 +1,6 @@
+import java.io.*;
+
+class Reader {
+   java.io.Reader reader;
+// more code
+}
diff --git a/java/java-tests/testData/refactoring/renameClass/collision1/before/Test.java b/java/java-tests/testData/refactoring/renameClass/collision1/before/Test.java
new file mode 100644
index 0000000..1942153
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameClass/collision1/before/Test.java
@@ -0,0 +1,6 @@
+import java.io.*;
+
+class Loader {
+   Reader reader;
+// more code
+}
diff --git a/java/java-tests/testData/refactoring/renameClass/constructorJavadoc/after/Test1.java b/java/java-tests/testData/refactoring/renameClass/constructorJavadoc/after/Test1.java
new file mode 100644
index 0000000..bc6c183
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameClass/constructorJavadoc/after/Test1.java
@@ -0,0 +1,11 @@
+/**
+ * @see #Test1
+ */
+class Test1 {
+    public Test1() {
+        this(0);
+        new Test1();
+    }
+
+    public Test1(int i) {}
+}
diff --git a/java/java-tests/testData/refactoring/renameClass/constructorJavadoc/before/Test.java b/java/java-tests/testData/refactoring/renameClass/constructorJavadoc/before/Test.java
new file mode 100644
index 0000000..e9038d5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameClass/constructorJavadoc/before/Test.java
@@ -0,0 +1,11 @@
+/**
+ * @see #Test
+ */
+class Test {
+    public Test() {
+        this(0);
+        new Test();
+    }
+
+    public Test(int i) {}
+}
diff --git a/java/java-tests/testData/refactoring/renameClass/implicitReferenceToDefaultCtr/after/pack1/Derived.java b/java/java-tests/testData/refactoring/renameClass/implicitReferenceToDefaultCtr/after/pack1/Derived.java
new file mode 100644
index 0000000..6cceeb7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameClass/implicitReferenceToDefaultCtr/after/pack1/Derived.java
@@ -0,0 +1,4 @@
+package pack1;
+
+public class Derived extends ParentXXX {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameClass/implicitReferenceToDefaultCtr/after/pack1/ParentXXX.java b/java/java-tests/testData/refactoring/renameClass/implicitReferenceToDefaultCtr/after/pack1/ParentXXX.java
new file mode 100644
index 0000000..5e28e85
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameClass/implicitReferenceToDefaultCtr/after/pack1/ParentXXX.java
@@ -0,0 +1,6 @@
+package pack1;
+
+public class ParentXXX {
+    public ParentXXX() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameClass/implicitReferenceToDefaultCtr/before/pack1/Derived.java b/java/java-tests/testData/refactoring/renameClass/implicitReferenceToDefaultCtr/before/pack1/Derived.java
new file mode 100644
index 0000000..d97d28b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameClass/implicitReferenceToDefaultCtr/before/pack1/Derived.java
@@ -0,0 +1,4 @@
+package pack1;
+
+public class Derived extends Parent {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameClass/implicitReferenceToDefaultCtr/before/pack1/Parent.java b/java/java-tests/testData/refactoring/renameClass/implicitReferenceToDefaultCtr/before/pack1/Parent.java
new file mode 100644
index 0000000..ff06eea
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameClass/implicitReferenceToDefaultCtr/before/pack1/Parent.java
@@ -0,0 +1,6 @@
+package pack1;
+
+public class Parent {
+    public Parent() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameClass/implicitlyImported/after/B.java b/java/java-tests/testData/refactoring/renameClass/implicitlyImported/after/B.java
new file mode 100644
index 0000000..cf63235
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameClass/implicitlyImported/after/B.java
@@ -0,0 +1,5 @@
+import pack1.Object;
+
+class B {
+  Object a;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameClass/implicitlyImported/after/pack1/Object.java b/java/java-tests/testData/refactoring/renameClass/implicitlyImported/after/pack1/Object.java
new file mode 100644
index 0000000..427dde2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameClass/implicitlyImported/after/pack1/Object.java
@@ -0,0 +1,3 @@
+package pack1;
+
+public class Object {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameClass/implicitlyImported/before/B.java b/java/java-tests/testData/refactoring/renameClass/implicitlyImported/before/B.java
new file mode 100644
index 0000000..3fde0b4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameClass/implicitlyImported/before/B.java
@@ -0,0 +1,7 @@
+import java.lang.Object;
+
+import pack1.*;
+
+class B {
+  A a;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameClass/implicitlyImported/before/pack1/A.java b/java/java-tests/testData/refactoring/renameClass/implicitlyImported/before/pack1/A.java
new file mode 100644
index 0000000..d8d0e6a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameClass/implicitlyImported/before/pack1/A.java
@@ -0,0 +1,3 @@
+package pack1;
+
+public class A {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameClass/import/after/FooBar.java b/java/java-tests/testData/refactoring/renameClass/import/after/FooBar.java
new file mode 100644
index 0000000..e3c0dfb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameClass/import/after/FooBar.java
@@ -0,0 +1,5 @@
+import a.BlubFoo;
+
+public class FooBar {
+    BlubFoo blubfoo;
+}
diff --git a/java/java-tests/testData/refactoring/renameClass/import/after/a/BlubFoo.java b/java/java-tests/testData/refactoring/renameClass/import/after/a/BlubFoo.java
new file mode 100644
index 0000000..f319ceb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameClass/import/after/a/BlubFoo.java
@@ -0,0 +1,4 @@
+package a;
+
+public class BlubFoo {
+}
diff --git a/java/java-tests/testData/refactoring/renameClass/import/before/FooBar.java b/java/java-tests/testData/refactoring/renameClass/import/before/FooBar.java
new file mode 100644
index 0000000..1a29547
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameClass/import/before/FooBar.java
@@ -0,0 +1,5 @@
+import a.Blubfoo;
+
+public class FooBar {
+    Blubfoo blubfoo;
+}
diff --git a/java/java-tests/testData/refactoring/renameClass/import/before/a/Blubfoo.java b/java/java-tests/testData/refactoring/renameClass/import/before/a/Blubfoo.java
new file mode 100644
index 0000000..d5c7747
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameClass/import/before/a/Blubfoo.java
@@ -0,0 +1,4 @@
+package a;
+
+public class Blubfoo {
+}
diff --git a/java/java-tests/testData/refactoring/renameClass/inSameFile/after/Test.java b/java/java-tests/testData/refactoring/renameClass/inSameFile/after/Test.java
new file mode 100644
index 0000000..5241da0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameClass/inSameFile/after/Test.java
@@ -0,0 +1,5 @@
+class One extends java.lang.Object {
+}
+
+class Object {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameClass/inSameFile/before/Test.java b/java/java-tests/testData/refactoring/renameClass/inSameFile/before/Test.java
new file mode 100644
index 0000000..6b2f233
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameClass/inSameFile/before/Test.java
@@ -0,0 +1,5 @@
+class One extends Object {
+}
+
+class Two {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameClass/innerClass/after/pack1/OuterClass.java b/java/java-tests/testData/refactoring/renameClass/innerClass/after/pack1/OuterClass.java
new file mode 100644
index 0000000..270c884
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameClass/innerClass/after/pack1/OuterClass.java
@@ -0,0 +1,9 @@
+package pack1;
+
+public class OuterClass {
+    public static class NewInnerClass {
+        
+    }
+   
+    String classLoaderString = "pack1.OuterClass$NewInnerClass";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameClass/innerClass/after/qqq.txt b/java/java-tests/testData/refactoring/renameClass/innerClass/after/qqq.txt
new file mode 100644
index 0000000..36a83f8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameClass/innerClass/after/qqq.txt
@@ -0,0 +1,3 @@
+pack1.OuterClass.NewInnerClass
+pack1.OuterClass$NewInnerClass
+pack1.OuterClass$InnerClassX
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameClass/innerClass/before/pack1/OuterClass.java b/java/java-tests/testData/refactoring/renameClass/innerClass/before/pack1/OuterClass.java
new file mode 100644
index 0000000..1317739
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameClass/innerClass/before/pack1/OuterClass.java
@@ -0,0 +1,9 @@
+package pack1;
+
+public class OuterClass {
+    public static class InnerClass {
+        
+    }
+   
+    String classLoaderString = "pack1.OuterClass$InnerClass";
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameClass/innerClass/before/qqq.txt b/java/java-tests/testData/refactoring/renameClass/innerClass/before/qqq.txt
new file mode 100644
index 0000000..6a2cdc3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameClass/innerClass/before/qqq.txt
@@ -0,0 +1,3 @@
+pack1.OuterClass.InnerClass
+pack1.OuterClass$InnerClass
+pack1.OuterClass$InnerClassX
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameClass/nonJava/after/pack1/Class1New.java b/java/java-tests/testData/refactoring/renameClass/nonJava/after/pack1/Class1New.java
new file mode 100644
index 0000000..cde84a7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameClass/nonJava/after/pack1/Class1New.java
@@ -0,0 +1,3 @@
+package pack1;
+
+public class Class1New {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameClass/nonJava/after/qqq.txt b/java/java-tests/testData/refactoring/renameClass/nonJava/after/qqq.txt
new file mode 100644
index 0000000..ac1f3d3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameClass/nonJava/after/qqq.txt
@@ -0,0 +1,3 @@
+pack1.Class1New
+Class1
+pack1.Class1a
diff --git a/java/java-tests/testData/refactoring/renameClass/nonJava/before/pack1/Class1.java b/java/java-tests/testData/refactoring/renameClass/nonJava/before/pack1/Class1.java
new file mode 100644
index 0000000..3080b68
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameClass/nonJava/before/pack1/Class1.java
@@ -0,0 +1,3 @@
+package pack1;
+
+public class Class1{}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameClass/nonJava/before/qqq.txt b/java/java-tests/testData/refactoring/renameClass/nonJava/before/qqq.txt
new file mode 100644
index 0000000..d60dc7e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameClass/nonJava/before/qqq.txt
@@ -0,0 +1,3 @@
+pack1.Class1
+Class1
+pack1.Class1a
diff --git a/java/java-tests/testData/refactoring/renameCollisions/AllUsagesInCode.java b/java/java-tests/testData/refactoring/renameCollisions/AllUsagesInCode.java
new file mode 100644
index 0000000..0314cee
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/AllUsagesInCode.java
@@ -0,0 +1,5 @@
+public class T<caret>oFind {
+  void foo() {
+    new ToFind();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameClassInnerToLocal.java b/java/java-tests/testData/refactoring/renameCollisions/RenameClassInnerToLocal.java
new file mode 100644
index 0000000..389c7d2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameClassInnerToLocal.java
@@ -0,0 +1,29 @@
+package renameCollisions;
+
+class LocalClass {
+	public static final int SN_STATIC_FIELD = 2;
+	public static void snStaticMethod() {
+	}
+}
+
+public class RenameCollisions {
+	class Inner<caret>Class {
+		public static final int SN_STATIC_FIELD = 14;
+		public void snMethod() {
+		}
+	}
+
+	public void instanceContext() {
+		LocalClass localClass = new LocalClass();
+		int var1 = LocalClass.SN_STATIC_FIELD;
+		LocalClass.snStaticMethod();
+
+		InnerClass innerClass = new InnerClass();
+		int var4 = InnerClass.SN_STATIC_FIELD;
+	}
+
+	public static void staticContext() {
+		InnerClass innerClass = new RenameCollisions().new InnerClass();
+		int var3 = InnerClass.SN_STATIC_FIELD;
+	}
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameClassInnerToLocal.java.after b/java/java-tests/testData/refactoring/renameCollisions/RenameClassInnerToLocal.java.after
new file mode 100644
index 0000000..54a65a8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameClassInnerToLocal.java.after
@@ -0,0 +1,29 @@
+package renameCollisions;
+
+class LocalClass {
+	public static final int SN_STATIC_FIELD = 2;
+	public static void snStaticMethod() {
+	}
+}
+
+public class RenameCollisions {
+	class Local<caret>Class {
+		public static final int SN_STATIC_FIELD = 14;
+		public void snMethod() {
+		}
+	}
+
+	public void instanceContext() {
+		renameCollisions.LocalClass localClass = new renameCollisions.LocalClass();
+		int var1 = renameCollisions.LocalClass.SN_STATIC_FIELD;
+		renameCollisions.LocalClass.snStaticMethod();
+
+		renameCollisions.RenameCollisions.LocalClass innerClass = new renameCollisions.RenameCollisions.LocalClass();
+		int var4 = renameCollisions.RenameCollisions.LocalClass.SN_STATIC_FIELD;
+	}
+
+	public static void staticContext() {
+		renameCollisions.RenameCollisions.LocalClass innerClass = new RenameCollisions().new LocalClass();
+		int var3 = renameCollisions.RenameCollisions.LocalClass.SN_STATIC_FIELD;
+	}
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameClassLocalToAlien.java b/java/java-tests/testData/refactoring/renameCollisions/RenameClassLocalToAlien.java
new file mode 100644
index 0000000..df0af6c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameClassLocalToAlien.java
@@ -0,0 +1,35 @@
+package renameCollisions;
+
+import static java.lang.String.CASE_INSENSITIVE_ORDER;
+import static java.lang.String.valueOf;
+
+class <caret>LocalClass {
+	public static final int STATIC_FIELD = 5;
+	public static void staticMethod() {
+	}
+	int myField;
+	public void method() {
+	}
+}
+
+public class RenameCollisions {
+	private String myDeclarationUsage;
+	public String declarationUsage(String s) {
+		return s + myDeclarationUsage;
+	}
+
+	public static void staticContext() {
+		CASE_INSENSITIVE_ORDER.getClass();
+		valueOf(0);
+
+		String.CASE_INSENSITIVE_ORDER.getClass();
+		String.valueOf(0);
+
+		int var6 = LocalClass.STATIC_FIELD;
+		LocalClass.staticMethod();
+
+		LocalClass localClass = new LocalClass();
+		localClass.myField++;
+		localClass.method();
+	}
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameClassLocalToAlien.java.after b/java/java-tests/testData/refactoring/renameCollisions/RenameClassLocalToAlien.java.after
new file mode 100644
index 0000000..419c65f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameClassLocalToAlien.java.after
@@ -0,0 +1,35 @@
+package renameCollisions;
+
+import static java.lang.String.CASE_INSENSITIVE_ORDER;
+import static java.lang.String.valueOf;
+
+class <caret>String {
+	public static final int STATIC_FIELD = 5;
+	public static void staticMethod() {
+	}
+	int myField;
+	public void method() {
+	}
+}
+
+public class RenameCollisions {
+	private java.lang.String myDeclarationUsage;
+	public java.lang.String declarationUsage(java.lang.String s) {
+		return s + myDeclarationUsage;
+	}
+
+	public static void staticContext() {
+		CASE_INSENSITIVE_ORDER.getClass();
+		valueOf(0);
+
+		java.lang.String.CASE_INSENSITIVE_ORDER.getClass();
+		java.lang.String.valueOf(0);
+
+		int var6 = renameCollisions.String.STATIC_FIELD;
+		renameCollisions.String.staticMethod();
+
+		renameCollisions.String localClass = new renameCollisions.String();
+		localClass.myField++;
+		localClass.method();
+	}
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameClassLocalToAlienNoImports.java b/java/java-tests/testData/refactoring/renameCollisions/RenameClassLocalToAlienNoImports.java
new file mode 100644
index 0000000..151983e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameClassLocalToAlienNoImports.java
@@ -0,0 +1,20 @@
+class <caret>LocalClass {
+	public static final int STATIC_FIELD = 5;
+	public static void staticMethod() {
+	}
+	int myField;
+	public void method() {
+	}
+}
+
+public class RenameCollisions {
+	private String myDeclarationUsage;
+	public String declarationUsage(String s) {
+		return s + myDeclarationUsage;
+	}
+
+	public static void staticContext() {
+		String.CASE_INSENSITIVE_ORDER.getClass();
+		String.valueOf(0);
+	}
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameClassLocalToAlienNoImports.java.after b/java/java-tests/testData/refactoring/renameCollisions/RenameClassLocalToAlienNoImports.java.after
new file mode 100644
index 0000000..771f7d7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameClassLocalToAlienNoImports.java.after
@@ -0,0 +1,20 @@
+class <caret>String {
+	public static final int STATIC_FIELD = 5;
+	public static void staticMethod() {
+	}
+	int myField;
+	public void method() {
+	}
+}
+
+public class RenameCollisions {
+	private java.lang.String myDeclarationUsage;
+	public java.lang.String declarationUsage(java.lang.String s) {
+		return s + myDeclarationUsage;
+	}
+
+	public static void staticContext() {
+		java.lang.String.CASE_INSENSITIVE_ORDER.getClass();
+		java.lang.String.valueOf(0);
+	}
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameClassLocalToInner.java b/java/java-tests/testData/refactoring/renameCollisions/RenameClassLocalToInner.java
new file mode 100644
index 0000000..399983e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameClassLocalToInner.java
@@ -0,0 +1,31 @@
+package renameCollisions;
+
+class <caret>LocalClass {
+	public static final int SN_STATIC_FIELD = 2;
+	public static void snStaticMethod() {
+	}
+}
+
+public class RenameCollisions {
+	public static class StaticInnerClass {
+		public static final int SN_STATIC_FIELD = 10;
+		public static void snStaticMethod() {
+		}
+	}
+
+	public void instanceContext() {
+		LocalClass localClass = new LocalClass();
+		int var1 = LocalClass.SN_STATIC_FIELD;
+		LocalClass.snStaticMethod();
+
+		StaticInnerClass staticInnerClass = new StaticInnerClass();
+		int var3 = StaticInnerClass.SN_STATIC_FIELD;
+		StaticInnerClass.snStaticMethod();
+	}
+
+	public static void staticContext() {
+		StaticInnerClass staticInnerClass = new StaticInnerClass();
+		int var2 = StaticInnerClass.SN_STATIC_FIELD;
+		StaticInnerClass.snStaticMethod();
+	}
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameClassLocalToInner.java.after b/java/java-tests/testData/refactoring/renameCollisions/RenameClassLocalToInner.java.after
new file mode 100644
index 0000000..18e3bdf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameClassLocalToInner.java.after
@@ -0,0 +1,31 @@
+package renameCollisions;
+
+class StaticInnerClass {
+	public static final int SN_STATIC_FIELD = 2;
+	public static void snStaticMethod() {
+	}
+}
+
+public class RenameCollisions {
+	public static class StaticInnerClass {
+		public static final int SN_STATIC_FIELD = 10;
+		public static void snStaticMethod() {
+		}
+	}
+
+	public void instanceContext() {
+		renameCollisions.StaticInnerClass localClass = new renameCollisions.StaticInnerClass();
+		int var1 = renameCollisions.StaticInnerClass.SN_STATIC_FIELD;
+		renameCollisions.StaticInnerClass.snStaticMethod();
+
+		renameCollisions.RenameCollisions.StaticInnerClass staticInnerClass = new renameCollisions.RenameCollisions.StaticInnerClass();
+		int var3 = renameCollisions.RenameCollisions.StaticInnerClass.SN_STATIC_FIELD;
+		renameCollisions.RenameCollisions.StaticInnerClass.snStaticMethod();
+	}
+
+	public static void staticContext() {
+		renameCollisions.RenameCollisions.StaticInnerClass staticInnerClass = new renameCollisions.RenameCollisions.StaticInnerClass();
+		int var2 = renameCollisions.RenameCollisions.StaticInnerClass.SN_STATIC_FIELD;
+		renameCollisions.RenameCollisions.StaticInnerClass.snStaticMethod();
+	}
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameClassThisFqnToAlien.java b/java/java-tests/testData/refactoring/renameCollisions/RenameClassThisFqnToAlien.java
new file mode 100644
index 0000000..d392ff5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameClassThisFqnToAlien.java
@@ -0,0 +1,36 @@
+import static java.lang.String.CASE_INSENSITIVE_ORDER;
+import static java.lang.String.valueOf;
+
+public class RenameCollisions<caret> {
+	public static final int STATIC_FIELD = 5;
+	public static void staticMethod() {
+	}
+	private int myField;
+	public void method() {
+	}
+
+	public void instanceContext() {
+		CASE_INSENSITIVE_ORDER.getClass();
+		valueOf(0);
+
+		String.CASE_INSENSITIVE_ORDER.getClass();
+		String.valueOf(0);
+
+		int var6 = RenameCollisions.STATIC_FIELD;
+		RenameCollisions.staticMethod();
+
+		this.myField++;
+		this.method();
+	}
+
+	public static void staticContext() {
+		CASE_INSENSITIVE_ORDER.getClass();
+		valueOf(0);
+
+		String.CASE_INSENSITIVE_ORDER.getClass();
+		String.valueOf(0);
+
+		int var6 = RenameCollisions.STATIC_FIELD;
+		RenameCollisions.staticMethod();
+	}
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameClassThisFqnToAlien.java.after b/java/java-tests/testData/refactoring/renameCollisions/RenameClassThisFqnToAlien.java.after
new file mode 100644
index 0000000..d913dd7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameClassThisFqnToAlien.java.after
@@ -0,0 +1,36 @@
+import static java.lang.String.CASE_INSENSITIVE_ORDER;
+import static java.lang.String.valueOf;
+
+public class String<caret> {
+	public static final int STATIC_FIELD = 5;
+	public static void staticMethod() {
+	}
+	private int myField;
+	public void method() {
+	}
+
+	public void instanceContext() {
+		CASE_INSENSITIVE_ORDER.getClass();
+		valueOf(0);
+
+		java.lang.String.CASE_INSENSITIVE_ORDER.getClass();
+		java.lang.String.valueOf(0);
+
+		int var6 = String.STATIC_FIELD;
+		String.staticMethod();
+
+		this.myField++;
+		this.method();
+	}
+
+	public static void staticContext() {
+		CASE_INSENSITIVE_ORDER.getClass();
+		valueOf(0);
+
+		java.lang.String.CASE_INSENSITIVE_ORDER.getClass();
+		java.lang.String.valueOf(0);
+
+		int var6 = String.STATIC_FIELD;
+		String.staticMethod();
+	}
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameClassThisToAlien.java b/java/java-tests/testData/refactoring/renameCollisions/RenameClassThisToAlien.java
new file mode 100644
index 0000000..4757d0a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameClassThisToAlien.java
@@ -0,0 +1,41 @@
+import static java.lang.String.CASE_INSENSITIVE_ORDER;
+import static java.lang.String.valueOf;
+
+public class RenameCollisions<caret> {
+	public static final int STATIC_FIELD = 5;
+	public static void staticMethod() {
+	}
+	private int myField;
+	public void method() {
+	}
+
+	private String myDeclarationUsage;
+	public String declarationUsage(String s) {
+		return s + myDeclarationUsage;
+	}
+
+	public void instanceContext() {
+		CASE_INSENSITIVE_ORDER.getClass();
+		valueOf(0);
+
+		String.CASE_INSENSITIVE_ORDER.getClass();
+		String.valueOf(0);
+
+		int var6 = STATIC_FIELD;
+		staticMethod();
+
+		myField++;
+		method();
+	}
+
+	public static void staticContext() {
+		CASE_INSENSITIVE_ORDER.getClass();
+		valueOf(0);
+
+		String.CASE_INSENSITIVE_ORDER.getClass();
+		String.valueOf(0);
+
+		int var6 = STATIC_FIELD;
+		staticMethod();
+	}
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameClassThisToAlien.java.after b/java/java-tests/testData/refactoring/renameCollisions/RenameClassThisToAlien.java.after
new file mode 100644
index 0000000..690e596
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameClassThisToAlien.java.after
@@ -0,0 +1,41 @@
+import static java.lang.String.CASE_INSENSITIVE_ORDER;
+import static java.lang.String.valueOf;
+
+public class String<caret> {
+	public static final int STATIC_FIELD = 5;
+	public static void staticMethod() {
+	}
+	private int myField;
+	public void method() {
+	}
+
+	private java.lang.String myDeclarationUsage;
+	public java.lang.String declarationUsage(java.lang.String s) {
+		return s + myDeclarationUsage;
+	}
+
+	public void instanceContext() {
+		CASE_INSENSITIVE_ORDER.getClass();
+		valueOf(0);
+
+		java.lang.String.CASE_INSENSITIVE_ORDER.getClass();
+		java.lang.String.valueOf(0);
+
+		int var6 = STATIC_FIELD;
+		staticMethod();
+
+		myField++;
+		method();
+	}
+
+	public static void staticContext() {
+		CASE_INSENSITIVE_ORDER.getClass();
+		valueOf(0);
+
+		java.lang.String.CASE_INSENSITIVE_ORDER.getClass();
+		java.lang.String.valueOf(0);
+
+		int var6 = STATIC_FIELD;
+		staticMethod();
+	}
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameFieldInSuper.java b/java/java-tests/testData/refactoring/renameCollisions/RenameFieldInSuper.java
new file mode 100644
index 0000000..2a99523
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameFieldInSuper.java
@@ -0,0 +1,12 @@
+class A {
+    boolean _g<caret>g;
+}
+
+class B extends A {
+    class FF {
+        public void setGG(boolean gg) {
+                _gg = gg;
+            }
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameFieldInSuper.java.after b/java/java-tests/testData/refactoring/renameCollisions/RenameFieldInSuper.java.after
new file mode 100644
index 0000000..d30799b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameFieldInSuper.java.after
@@ -0,0 +1,12 @@
+class A {
+    boolean gg;
+}
+
+class B extends A {
+    class FF {
+        public void setGG(boolean gg) {
+                B.this.gg = gg;
+            }
+    }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameInnerInSuperClass.java b/java/java-tests/testData/refactoring/renameCollisions/RenameInnerInSuperClass.java
new file mode 100644
index 0000000..522cf66a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameInnerInSuperClass.java
@@ -0,0 +1,19 @@
+class A {
+  class <caret>B {
+    int x = 42;
+  }
+}
+
+public class D {
+  static class C extends A {
+    int x = 23;
+
+    int m() {
+      return C.this.x;
+    }
+  }
+
+  public static void main(String[] args) {
+    System.out.println(new C().m());
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameInnerInSuperClass.java.after b/java/java-tests/testData/refactoring/renameCollisions/RenameInnerInSuperClass.java.after
new file mode 100644
index 0000000..c21671a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameInnerInSuperClass.java.after
@@ -0,0 +1,19 @@
+class A {
+  class C {
+    int x = 42;
+  }
+}
+
+public class D {
+  static class C extends A {
+    int x = 23;
+
+    int m() {
+      return D.C.this.x;
+    }
+  }
+
+  public static void main(String[] args) {
+    System.out.println(new C().m());
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameInnerInSuperClassStatic.java b/java/java-tests/testData/refactoring/renameCollisions/RenameInnerInSuperClassStatic.java
new file mode 100644
index 0000000..5b5d729
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameInnerInSuperClassStatic.java
@@ -0,0 +1,19 @@
+class A {
+  static class <caret>B {
+    static int x = 42;
+  }
+}
+
+public class D {
+  static class C extends A {
+    static int x = 23;
+
+    static int m() {
+      return C.x;
+    }
+  }
+
+  public static void main(String[] args) {
+    System.out.println(C.m());
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameInnerInSuperClassStatic.java.after b/java/java-tests/testData/refactoring/renameCollisions/RenameInnerInSuperClassStatic.java.after
new file mode 100644
index 0000000..701997b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameInnerInSuperClassStatic.java.after
@@ -0,0 +1,19 @@
+class A {
+  static class C {
+    static int x = 42;
+  }
+}
+
+public class D {
+  static class C extends A {
+    static int x = 23;
+
+    static int m() {
+      return D.C.x;
+    }
+  }
+
+  public static void main(String[] args) {
+    System.out.println(D.C.m());
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameLocalVariableHidesFieldInAnonymous.java b/java/java-tests/testData/refactoring/renameCollisions/RenameLocalVariableHidesFieldInAnonymous.java
new file mode 100644
index 0000000..e8d17c29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameLocalVariableHidesFieldInAnonymous.java
@@ -0,0 +1,16 @@
+public class A {
+  Thread m() {
+    final int x<caret> = 42;
+    return new Thread() {
+      int y = 23;
+
+      public void run() {
+        System.out.println(x);
+      }
+    };
+  }
+
+  public static void main(String[] args) {
+    new A().m().start();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameMethodCollisionWithOtherSignature.java b/java/java-tests/testData/refactoring/renameCollisions/RenameMethodCollisionWithOtherSignature.java
new file mode 100644
index 0000000..b6273cc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameMethodCollisionWithOtherSignature.java
@@ -0,0 +1,12 @@
+class RenameTest {
+    static void fo<caret>o1(Number n) {
+        System.out.println("1");
+    }
+    static void foo2(Long i) {
+        System.out.println("2");
+    }
+    public static void main(String[] args) {
+        long n = 0;
+        foo1(n);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameMethodIndiInstancesInnerToOuter.java b/java/java-tests/testData/refactoring/renameCollisions/RenameMethodIndiInstancesInnerToOuter.java
new file mode 100644
index 0000000..43947aa
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameMethodIndiInstancesInnerToOuter.java
@@ -0,0 +1,16 @@
+public class RenameCollisions {
+    public void method() {
+    }
+
+    public static class StaticInnerClass {
+        public void <caret>siMethod() {
+        }
+        public void instanceContext() {
+            siMethod();
+        }
+    }
+
+    public void instanceContext() {
+        method();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameMethodIndiInstancesInnerToOuter.java.after b/java/java-tests/testData/refactoring/renameCollisions/RenameMethodIndiInstancesInnerToOuter.java.after
new file mode 100644
index 0000000..fada9d5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameMethodIndiInstancesInnerToOuter.java.after
@@ -0,0 +1,16 @@
+public class RenameCollisions {
+    public void method() {
+    }
+
+    public static class StaticInnerClass {
+        public void <caret>method() {
+        }
+        public void instanceContext() {
+            method();
+        }
+    }
+
+    public void instanceContext() {
+        method();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameMethodIndiInstancesOuterToInner.java b/java/java-tests/testData/refactoring/renameCollisions/RenameMethodIndiInstancesOuterToInner.java
new file mode 100644
index 0000000..5813bd9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameMethodIndiInstancesOuterToInner.java
@@ -0,0 +1,16 @@
+public class RenameCollisions {
+    public void <caret>method() {
+    }
+
+    public static class StaticInnerClass {
+        public void siMethod() {
+        }
+        public void instanceContext() {
+            siMethod();
+        }
+    }
+
+    public void instanceContext() {
+        method();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameMethodIndiInstancesOuterToInner.java.after b/java/java-tests/testData/refactoring/renameCollisions/RenameMethodIndiInstancesOuterToInner.java.after
new file mode 100644
index 0000000..17f61bc3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameMethodIndiInstancesOuterToInner.java.after
@@ -0,0 +1,16 @@
+public class RenameCollisions {
+    public void <caret>siMethod() {
+    }
+
+    public static class StaticInnerClass {
+        public void siMethod() {
+        }
+        public void instanceContext() {
+            siMethod();
+        }
+    }
+
+    public void instanceContext() {
+        siMethod();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameMethodInnerInstanceToOuterInstance.java b/java/java-tests/testData/refactoring/renameCollisions/RenameMethodInnerInstanceToOuterInstance.java
new file mode 100644
index 0000000..f993c61
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameMethodInnerInstanceToOuterInstance.java
@@ -0,0 +1,12 @@
+public class RenameCollisions {
+    public void method() {
+    }
+    class InnerClass {
+        public void <caret>innerMethod() {
+        }
+        public void instanceContext() {
+            method();
+            innerMethod();
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameMethodInnerInstanceToOuterInstance.java.after b/java/java-tests/testData/refactoring/renameCollisions/RenameMethodInnerInstanceToOuterInstance.java.after
new file mode 100644
index 0000000..6141ccb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameMethodInnerInstanceToOuterInstance.java.after
@@ -0,0 +1,12 @@
+public class RenameCollisions {
+    public void method() {
+    }
+    class InnerClass {
+        public void <caret>method() {
+        }
+        public void instanceContext() {
+            RenameCollisions.this.method();
+            method();
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameMethodInnerStaticToOuterStatic.java b/java/java-tests/testData/refactoring/renameCollisions/RenameMethodInnerStaticToOuterStatic.java
new file mode 100644
index 0000000..20ef074
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameMethodInnerStaticToOuterStatic.java
@@ -0,0 +1,16 @@
+public class RenameCollisions {
+    public static void staticMethod() {
+    }
+    public static class StaticInnerClass {
+        public static void siStaticMethod<caret>() {
+        }
+        public void instanceContext() {
+            staticMethod();
+            siStaticMethod();
+        }
+        public static void staticContext() {
+            staticMethod();
+            siStaticMethod();
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameMethodInnerStaticToOuterStatic.java.after b/java/java-tests/testData/refactoring/renameCollisions/RenameMethodInnerStaticToOuterStatic.java.after
new file mode 100644
index 0000000..dc491bb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameMethodInnerStaticToOuterStatic.java.after
@@ -0,0 +1,16 @@
+public class RenameCollisions {
+    public static void staticMethod() {
+    }
+    public static class StaticInnerClass {
+        public static void staticMethod<caret>() {
+        }
+        public void instanceContext() {
+            RenameCollisions.staticMethod();
+            staticMethod();
+        }
+        public static void staticContext() {
+            RenameCollisions.staticMethod();
+            staticMethod();
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameMethodNoCollisionWithOtherSignature.java b/java/java-tests/testData/refactoring/renameCollisions/RenameMethodNoCollisionWithOtherSignature.java
new file mode 100644
index 0000000..f61861a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameMethodNoCollisionWithOtherSignature.java
@@ -0,0 +1,27 @@
+/*
+ * 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 RenameTest {
+    static void fo<caret>o1(Number n) {
+        System.out.println("1");
+    }
+    static void foo2(String i) {
+        System.out.println("2");
+    }
+    public static void main(String[] args) {
+        long n = 0;
+        foo1(n);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameMethodNoCollisionWithOtherSignature.java.after b/java/java-tests/testData/refactoring/renameCollisions/RenameMethodNoCollisionWithOtherSignature.java.after
new file mode 100644
index 0000000..657d42a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameMethodNoCollisionWithOtherSignature.java.after
@@ -0,0 +1,27 @@
+/*
+ * 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 RenameTest {
+    static void foo2(Number n) {
+        System.out.println("1");
+    }
+    static void foo2(String i) {
+        System.out.println("2");
+    }
+    public static void main(String[] args) {
+        long n = 0;
+        foo2(n);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameMethodOuterInstanceToInnerInstance.java b/java/java-tests/testData/refactoring/renameCollisions/RenameMethodOuterInstanceToInnerInstance.java
new file mode 100644
index 0000000..72a2136
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameMethodOuterInstanceToInnerInstance.java
@@ -0,0 +1,12 @@
+public class RenameCollisions {
+    public void <caret>method() {
+    }
+    class InnerClass {
+        public void innerMethod() {
+        }
+        public void instanceContext() {
+            method();
+            innerMethod();
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameMethodOuterInstanceToInnerInstance.java.after b/java/java-tests/testData/refactoring/renameCollisions/RenameMethodOuterInstanceToInnerInstance.java.after
new file mode 100644
index 0000000..a704348
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameMethodOuterInstanceToInnerInstance.java.after
@@ -0,0 +1,12 @@
+public class RenameCollisions {
+    public void <caret>innerMethod() {
+    }
+    class InnerClass {
+        public void innerMethod() {
+        }
+        public void instanceContext() {
+            RenameCollisions.this.innerMethod();
+            innerMethod();
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameMethodOuterStaticToInnerStatic.java b/java/java-tests/testData/refactoring/renameCollisions/RenameMethodOuterStaticToInnerStatic.java
new file mode 100644
index 0000000..1fda19d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameMethodOuterStaticToInnerStatic.java
@@ -0,0 +1,17 @@
+public class RenameCollisions {
+    public static void staticMethod<caret>() {
+    }
+
+    public static class StaticInnerClass {
+        public static void siStaticMethod() {
+        }
+        public void instanceContext() {
+            staticMethod();
+            siStaticMethod();
+        }
+        public static void staticContext() {
+            staticMethod();
+            siStaticMethod();
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameMethodOuterStaticToInnerStatic.java.after b/java/java-tests/testData/refactoring/renameCollisions/RenameMethodOuterStaticToInnerStatic.java.after
new file mode 100644
index 0000000..2da8116
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameMethodOuterStaticToInnerStatic.java.after
@@ -0,0 +1,17 @@
+public class RenameCollisions {
+    public static void siStaticMethod<caret>() {
+    }
+
+    public static class StaticInnerClass {
+        public static void siStaticMethod() {
+        }
+        public void instanceContext() {
+            RenameCollisions.siStaticMethod();
+            siStaticMethod();
+        }
+        public static void staticContext() {
+            RenameCollisions.siStaticMethod();
+            siStaticMethod();
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameMethodStaticToAlien.java b/java/java-tests/testData/refactoring/renameCollisions/RenameMethodStaticToAlien.java
new file mode 100644
index 0000000..ec20e52
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameMethodStaticToAlien.java
@@ -0,0 +1,10 @@
+import static java.lang.String.valueOf;
+
+public class RenameCollisions {
+    public static class StaticInnerClass {
+        public static void siMethod<caret>() {}
+        public static void staticContext() {
+            valueOf(0);
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameMethodStaticToAlien.java.after b/java/java-tests/testData/refactoring/renameCollisions/RenameMethodStaticToAlien.java.after
new file mode 100644
index 0000000..c15a070
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameMethodStaticToAlien.java.after
@@ -0,0 +1,10 @@
+import static java.lang.String.valueOf;
+
+public class RenameCollisions {
+    public static class StaticInnerClass {
+        public static void valueOf<caret>() {}
+        public static void staticContext() {
+            String.valueOf(0);
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameStaticMethodTypeParameter.java b/java/java-tests/testData/refactoring/renameCollisions/RenameStaticMethodTypeParameter.java
new file mode 100644
index 0000000..f4f4c21
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameStaticMethodTypeParameter.java
@@ -0,0 +1,7 @@
+public class Holder<E> {
+  private final E elem;
+
+  private Holder(E elem) { this.elem = elem; }
+
+  public static <<caret>X> Holder<X> of(X elem) { return new Holder<X>(elem); }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameStaticMethodTypeParameter.java.after b/java/java-tests/testData/refactoring/renameCollisions/RenameStaticMethodTypeParameter.java.after
new file mode 100644
index 0000000..f0b4f81
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameStaticMethodTypeParameter.java.after
@@ -0,0 +1,7 @@
+public class Holder<E> {
+  private final E elem;
+
+  private Holder(E elem) { this.elem = elem; }
+
+  public static <E> Holder<E> of(E elem) { return new Holder<E>(elem); }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameTypeParameterToExistingClassName.java b/java/java-tests/testData/refactoring/renameCollisions/RenameTypeParameterToExistingClassName.java
new file mode 100644
index 0000000..2bc8f20
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameTypeParameterToExistingClassName.java
@@ -0,0 +1,3 @@
+public class Test<T<caret> extends String> {}
+
+class P {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameTypeParameterToExistingClassName.java.after b/java/java-tests/testData/refactoring/renameCollisions/RenameTypeParameterToExistingClassName.java.after
new file mode 100644
index 0000000..b4f9ab0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameTypeParameterToExistingClassName.java.after
@@ -0,0 +1,3 @@
+public class Test<P extends String> {}
+
+class P {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameVarConstToAlien.java b/java/java-tests/testData/refactoring/renameCollisions/RenameVarConstToAlien.java
new file mode 100644
index 0000000..5acc0ba
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameVarConstToAlien.java
@@ -0,0 +1,10 @@
+import static java.lang.String.CASE_INSENSITIVE_ORDER;
+
+public class RenameCollisions {
+    public static class StaticInnerClass {
+        public static final int SI_STATIC_FIELD<caret> = 9;
+        public static void staticContext() {
+            CASE_INSENSITIVE_ORDER.getClass();
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameVarConstToAlien.java.after b/java/java-tests/testData/refactoring/renameCollisions/RenameVarConstToAlien.java.after
new file mode 100644
index 0000000..9691701
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameVarConstToAlien.java.after
@@ -0,0 +1,8 @@
+public class RenameCollisions {
+    public static class StaticInnerClass {
+        public static final int CASE_INSENSITIVE_ORDER<caret> = 9;
+        public static void staticContext() {
+            String.CASE_INSENSITIVE_ORDER.getClass();
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameVarConstToAlien1.java b/java/java-tests/testData/refactoring/renameCollisions/RenameVarConstToAlien1.java
new file mode 100644
index 0000000..fec1079
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameVarConstToAlien1.java
@@ -0,0 +1,10 @@
+import static java.lang.String.valueOf;
+
+public class RenameCollisions {
+    public static class StaticInnerClass {
+        public static final int SI_STATIC_FIELD<caret> = 9;
+        public static void staticContext() {
+            valueOf(null);
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameVarConstToAlien1.java.after b/java/java-tests/testData/refactoring/renameCollisions/RenameVarConstToAlien1.java.after
new file mode 100644
index 0000000..9006fb6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameVarConstToAlien1.java.after
@@ -0,0 +1,10 @@
+import static java.lang.String.valueOf;
+
+public class RenameCollisions {
+    public static class StaticInnerClass {
+        public static final int CASE_INSENSITIVE_ORDER<caret> = 9;
+        public static void staticContext() {
+            valueOf(null);
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameVarConstToParam.java b/java/java-tests/testData/refactoring/renameCollisions/RenameVarConstToParam.java
new file mode 100644
index 0000000..42674d3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameVarConstToParam.java
@@ -0,0 +1,9 @@
+public class RenameCollisions {
+    private class InnerClass {
+        public static final int INNER_STATIC_FIELD<caret> = 13;
+        public void instanceContext(int param3) {
+            int localVar3 = 0;
+            int var1 = localVar3 + param3 + INNER_STATIC_FIELD;
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameVarConstToParam.java.after b/java/java-tests/testData/refactoring/renameCollisions/RenameVarConstToParam.java.after
new file mode 100644
index 0000000..caeaa95
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameVarConstToParam.java.after
@@ -0,0 +1,9 @@
+public class RenameCollisions {
+    private class InnerClass {
+        public static final int param3<caret> = 13;
+        public void instanceContext(int param3) {
+            int localVar3 = 0;
+            int var1 = localVar3 + param3 + InnerClass.param3;
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameVarFieldToLocal.java b/java/java-tests/testData/refactoring/renameCollisions/RenameVarFieldToLocal.java
new file mode 100644
index 0000000..275f4f7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameVarFieldToLocal.java
@@ -0,0 +1,9 @@
+public class RenameCollisions {
+    private class InnerClass {
+        private int myInnerField<caret> = 15;
+        public void instanceContext(int param3) {
+            int localVar3 = 0;
+            int var1 = localVar3 + param3 + myInnerField;
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameVarFieldToLocal.java.after b/java/java-tests/testData/refactoring/renameCollisions/RenameVarFieldToLocal.java.after
new file mode 100644
index 0000000..11881c6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameVarFieldToLocal.java.after
@@ -0,0 +1,9 @@
+public class RenameCollisions {
+    private class InnerClass {
+        private int localVar3<caret> = 15;
+        public void instanceContext(int param3) {
+            int localVar3 = 0;
+            int var1 = localVar3 + param3 + this.localVar3;
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameVarInnerConstToOuterConst.java b/java/java-tests/testData/refactoring/renameCollisions/RenameVarInnerConstToOuterConst.java
new file mode 100644
index 0000000..d491807
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameVarInnerConstToOuterConst.java
@@ -0,0 +1,10 @@
+public class RenameCollisions {
+    public static final int STATIC_FIELD = 5;
+    private class InnerClass {
+        public static final int INNER_STATIC_FIELD<caret> = 13;
+        public void instanceContext(int param3) {
+            int localVar3 = 0;
+            int var1 = localVar3 + param3 + INNER_STATIC_FIELD + STATIC_FIELD;
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameVarInnerConstToOuterConst.java.after b/java/java-tests/testData/refactoring/renameCollisions/RenameVarInnerConstToOuterConst.java.after
new file mode 100644
index 0000000..17456c1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameVarInnerConstToOuterConst.java.after
@@ -0,0 +1,10 @@
+public class RenameCollisions {
+    public static final int STATIC_FIELD = 5;
+    private class InnerClass {
+        public static final int STATIC_FIELD<caret> = 13;
+        public void instanceContext(int param3) {
+            int localVar3 = 0;
+            int var1 = localVar3 + param3 + STATIC_FIELD + RenameCollisions.STATIC_FIELD;
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameVarInnerFieldToOuterField.java b/java/java-tests/testData/refactoring/renameCollisions/RenameVarInnerFieldToOuterField.java
new file mode 100644
index 0000000..0750ba5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameVarInnerFieldToOuterField.java
@@ -0,0 +1,10 @@
+public class RenameCollisions {
+    private int myField = 7;
+    private class InnerClass {
+        private int myInnerField<caret> = 15;
+        public void instanceContext(int param3) {
+            int localVar3 = 0;
+            int var1 = localVar3 + param3 + myInnerField + myField;
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameVarInnerFieldToOuterField.java.after b/java/java-tests/testData/refactoring/renameCollisions/RenameVarInnerFieldToOuterField.java.after
new file mode 100644
index 0000000..39fb6e1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameVarInnerFieldToOuterField.java.after
@@ -0,0 +1,10 @@
+public class RenameCollisions {
+    private int myField = 7;
+    private class InnerClass {
+        private int myField<caret> = 15;
+        public void instanceContext(int param3) {
+            int localVar3 = 0;
+            int var1 = localVar3 + param3 + myField + RenameCollisions.this.myField;
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameVarLocalToAlien.java b/java/java-tests/testData/refactoring/renameCollisions/RenameVarLocalToAlien.java
new file mode 100644
index 0000000..8e37f92
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameVarLocalToAlien.java
@@ -0,0 +1,10 @@
+import static javax.swing.SwingConstants.BOTTOM;
+
+public class RenameCollisions {
+	public static class StaticInnerClass {
+		public static void staticContext() {
+			int localVar<caret> = 0;
+			int var1 = BOTTOM;
+		}
+	}
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameVarLocalToAlien.java.after b/java/java-tests/testData/refactoring/renameCollisions/RenameVarLocalToAlien.java.after
new file mode 100644
index 0000000..6260732
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameVarLocalToAlien.java.after
@@ -0,0 +1,10 @@
+import javax.swing.*;
+
+public class RenameCollisions {
+	public static class StaticInnerClass {
+		public static void staticContext() {
+			int BOTTOM<caret> = 0;
+			int var1 = SwingConstants.BOTTOM;
+		}
+	}
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameVarLocalToConst.java b/java/java-tests/testData/refactoring/renameCollisions/RenameVarLocalToConst.java
new file mode 100644
index 0000000..6336075
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameVarLocalToConst.java
@@ -0,0 +1,9 @@
+public class RenameCollisions {
+	class InnerClass {
+		public static final int INNER_STATIC_FIELD = 13;
+		public void instanceContext(int param) {
+			int <caret>localVar = 0;
+			int var1 = localVar + param + INNER_STATIC_FIELD;
+		}
+	}
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameVarLocalToConst.java.after b/java/java-tests/testData/refactoring/renameCollisions/RenameVarLocalToConst.java.after
new file mode 100644
index 0000000..f0a1a9d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameVarLocalToConst.java.after
@@ -0,0 +1,9 @@
+public class RenameCollisions {
+	class InnerClass {
+		public static final int INNER_STATIC_FIELD = 13;
+		public void instanceContext(int param) {
+			int <caret>INNER_STATIC_FIELD = 0;
+			int var1 = INNER_STATIC_FIELD + param + InnerClass.INNER_STATIC_FIELD;
+		}
+	}
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameVarLocalToOuterField.java b/java/java-tests/testData/refactoring/renameCollisions/RenameVarLocalToOuterField.java
new file mode 100644
index 0000000..3828c79
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameVarLocalToOuterField.java
@@ -0,0 +1,9 @@
+public class RenameCollisions {
+	private int myField = 7;
+	class InnerClass {
+		public void instanceContext(int param) {
+			int localVar<caret> = 0;
+			int var1 = localVar + param + myField;
+		}
+	}
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameVarLocalToOuterField.java.after b/java/java-tests/testData/refactoring/renameCollisions/RenameVarLocalToOuterField.java.after
new file mode 100644
index 0000000..c7bc0e1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameVarLocalToOuterField.java.after
@@ -0,0 +1,9 @@
+public class RenameCollisions {
+	private int myField = 7;
+	class InnerClass {
+		public void instanceContext(int param) {
+			int myField<caret> = 0;
+			int var1 = myField + param + RenameCollisions.this.myField;
+		}
+	}
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameVarOuterConstToInnerConst.java b/java/java-tests/testData/refactoring/renameCollisions/RenameVarOuterConstToInnerConst.java
new file mode 100644
index 0000000..28d10df
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameVarOuterConstToInnerConst.java
@@ -0,0 +1,17 @@
+public class RenameCollisions {
+    public static final int <caret>STATIC_FIELD = 5;
+
+    public static class StaticInnerClass {
+        public static final int SI_STATIC_FIELD = 9;
+        public static void staticContext(int param) {
+            int var1 = SI_STATIC_FIELD + STATIC_FIELD;
+        }
+    }
+
+    private class InnerClass {
+        public static final int INNER_STATIC_FIELD = 13;
+        public void instanceContext(int param) {
+            int var1 = INNER_STATIC_FIELD + STATIC_FIELD;
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameVarOuterConstToInnerConst.java.after b/java/java-tests/testData/refactoring/renameCollisions/RenameVarOuterConstToInnerConst.java.after
new file mode 100644
index 0000000..5c918eb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameVarOuterConstToInnerConst.java.after
@@ -0,0 +1,17 @@
+public class RenameCollisions {
+    public static final int <caret>SI_STATIC_FIELD = 5;
+
+    public static class StaticInnerClass {
+        public static final int SI_STATIC_FIELD = 9;
+        public static void staticContext(int param) {
+            int var1 = SI_STATIC_FIELD + RenameCollisions.SI_STATIC_FIELD;
+        }
+    }
+
+    private class InnerClass {
+        public static final int INNER_STATIC_FIELD = 13;
+        public void instanceContext(int param) {
+            int var1 = INNER_STATIC_FIELD + SI_STATIC_FIELD;
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameVarOuterConstToLocal.java b/java/java-tests/testData/refactoring/renameCollisions/RenameVarOuterConstToLocal.java
new file mode 100644
index 0000000..eb286e2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameVarOuterConstToLocal.java
@@ -0,0 +1,28 @@
+public class RenameCollisions {
+    public static final int <caret>STATIC_FIELD = 5;
+    private int myField = 7;
+
+    public static class StaticInnerClass {
+        public static final int SI_STATIC_FIELD = 9;
+        private int mySiField = 11;
+
+        public void instanceContext(int param1) {
+            int localVar1 = 0;
+            int var1 = localVar1 + param1 + SI_STATIC_FIELD + mySiField + STATIC_FIELD;
+        }
+        public static void staticContext(int param2) {
+            int localVar2 = 0;
+            int var1 = localVar2 + param2 + SI_STATIC_FIELD + STATIC_FIELD;
+        }
+    }
+
+    private class InnerClass {
+        public static final int INNER_STATIC_FIELD = 13;
+        private int myInnerField = 15;
+
+        public void instanceContext(int param3) {
+            int localVar3 = 0;
+            int var1 = localVar3 + param3 + INNER_STATIC_FIELD + myInnerField + STATIC_FIELD + myField;
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameVarOuterConstToLocal.java.after b/java/java-tests/testData/refactoring/renameCollisions/RenameVarOuterConstToLocal.java.after
new file mode 100644
index 0000000..402d5f4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameVarOuterConstToLocal.java.after
@@ -0,0 +1,28 @@
+public class RenameCollisions {
+    public static final int <caret>localVar3 = 5;
+    private int myField = 7;
+
+    public static class StaticInnerClass {
+        public static final int SI_STATIC_FIELD = 9;
+        private int mySiField = 11;
+
+        public void instanceContext(int param1) {
+            int localVar1 = 0;
+            int var1 = localVar1 + param1 + SI_STATIC_FIELD + mySiField + localVar3;
+        }
+        public static void staticContext(int param2) {
+            int localVar2 = 0;
+            int var1 = localVar2 + param2 + SI_STATIC_FIELD + localVar3;
+        }
+    }
+
+    private class InnerClass {
+        public static final int INNER_STATIC_FIELD = 13;
+        private int myInnerField = 15;
+
+        public void instanceContext(int param3) {
+            int localVar3 = 0;
+            int var1 = localVar3 + param3 + INNER_STATIC_FIELD + myInnerField + RenameCollisions.localVar3 + myField;
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameVarOuterConstToParam.java b/java/java-tests/testData/refactoring/renameCollisions/RenameVarOuterConstToParam.java
new file mode 100644
index 0000000..eb286e2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameVarOuterConstToParam.java
@@ -0,0 +1,28 @@
+public class RenameCollisions {
+    public static final int <caret>STATIC_FIELD = 5;
+    private int myField = 7;
+
+    public static class StaticInnerClass {
+        public static final int SI_STATIC_FIELD = 9;
+        private int mySiField = 11;
+
+        public void instanceContext(int param1) {
+            int localVar1 = 0;
+            int var1 = localVar1 + param1 + SI_STATIC_FIELD + mySiField + STATIC_FIELD;
+        }
+        public static void staticContext(int param2) {
+            int localVar2 = 0;
+            int var1 = localVar2 + param2 + SI_STATIC_FIELD + STATIC_FIELD;
+        }
+    }
+
+    private class InnerClass {
+        public static final int INNER_STATIC_FIELD = 13;
+        private int myInnerField = 15;
+
+        public void instanceContext(int param3) {
+            int localVar3 = 0;
+            int var1 = localVar3 + param3 + INNER_STATIC_FIELD + myInnerField + STATIC_FIELD + myField;
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameVarOuterConstToParam.java.after b/java/java-tests/testData/refactoring/renameCollisions/RenameVarOuterConstToParam.java.after
new file mode 100644
index 0000000..36bdc72
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameVarOuterConstToParam.java.after
@@ -0,0 +1,28 @@
+public class RenameCollisions {
+    public static final int <caret>param2 = 5;
+    private int myField = 7;
+
+    public static class StaticInnerClass {
+        public static final int SI_STATIC_FIELD = 9;
+        private int mySiField = 11;
+
+        public void instanceContext(int param1) {
+            int localVar1 = 0;
+            int var1 = localVar1 + param1 + SI_STATIC_FIELD + mySiField + param2;
+        }
+        public static void staticContext(int param2) {
+            int localVar2 = 0;
+            int var1 = localVar2 + param2 + SI_STATIC_FIELD + RenameCollisions.param2;
+        }
+    }
+
+    private class InnerClass {
+        public static final int INNER_STATIC_FIELD = 13;
+        private int myInnerField = 15;
+
+        public void instanceContext(int param3) {
+            int localVar3 = 0;
+            int var1 = localVar3 + param3 + INNER_STATIC_FIELD + myInnerField + param2 + myField;
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameVarOuterFieldToLocal.java b/java/java-tests/testData/refactoring/renameCollisions/RenameVarOuterFieldToLocal.java
new file mode 100644
index 0000000..6d4210f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameVarOuterFieldToLocal.java
@@ -0,0 +1,10 @@
+public class RenameCollisions {
+    private int <caret>myField = 7;
+
+    private class InnerClass {
+        public void instanceContext(int param3) {
+            int localVar3 = 0;
+            int var1 = localVar3 + param3 + myField;
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameVarOuterFieldToLocal.java.after b/java/java-tests/testData/refactoring/renameCollisions/RenameVarOuterFieldToLocal.java.after
new file mode 100644
index 0000000..7ccd186
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameVarOuterFieldToLocal.java.after
@@ -0,0 +1,10 @@
+public class RenameCollisions {
+    private int <caret>localVar3 = 7;
+
+    private class InnerClass {
+        public void instanceContext(int param3) {
+            int localVar3 = 0;
+            int var1 = localVar3 + param3 + RenameCollisions.this.localVar3;
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameVarOuterFieldToParam.java b/java/java-tests/testData/refactoring/renameCollisions/RenameVarOuterFieldToParam.java
new file mode 100644
index 0000000..6d4210f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameVarOuterFieldToParam.java
@@ -0,0 +1,10 @@
+public class RenameCollisions {
+    private int <caret>myField = 7;
+
+    private class InnerClass {
+        public void instanceContext(int param3) {
+            int localVar3 = 0;
+            int var1 = localVar3 + param3 + myField;
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameVarOuterFieldToParam.java.after b/java/java-tests/testData/refactoring/renameCollisions/RenameVarOuterFieldToParam.java.after
new file mode 100644
index 0000000..95c79cd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameVarOuterFieldToParam.java.after
@@ -0,0 +1,10 @@
+public class RenameCollisions {
+    private int <caret>param3 = 7;
+
+    private class InnerClass {
+        public void instanceContext(int param3) {
+            int localVar3 = 0;
+            int var1 = localVar3 + param3 + RenameCollisions.this.param3;
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameVarParamToAlien.java b/java/java-tests/testData/refactoring/renameCollisions/RenameVarParamToAlien.java
new file mode 100644
index 0000000..0aaf16e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameVarParamToAlien.java
@@ -0,0 +1,9 @@
+import static javax.swing.SwingConstants.BOTTOM;
+
+public class RenameCollisions {
+	public static class StaticInnerClass {
+		public static void staticContext(int param<caret>) {
+			int var1 = BOTTOM;
+		}
+	}
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameVarParamToAlien.java.after b/java/java-tests/testData/refactoring/renameCollisions/RenameVarParamToAlien.java.after
new file mode 100644
index 0000000..17f66c7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameVarParamToAlien.java.after
@@ -0,0 +1,9 @@
+import javax.swing.*;
+
+public class RenameCollisions {
+	public static class StaticInnerClass {
+		public static void staticContext(int BOTTOM<caret>) {
+			int var1 = SwingConstants.BOTTOM;
+		}
+	}
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameVarParamToField.java b/java/java-tests/testData/refactoring/renameCollisions/RenameVarParamToField.java
new file mode 100644
index 0000000..36881f0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameVarParamToField.java
@@ -0,0 +1,9 @@
+public class RenameCollisions {
+	class InnerClass {
+		private int myInnerField = 15;
+		public void instanceContext(int param<caret>) {
+			int localVar = 0;
+			int var1 = localVar + param + myInnerField;
+		}
+	}
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameVarParamToField.java.after b/java/java-tests/testData/refactoring/renameCollisions/RenameVarParamToField.java.after
new file mode 100644
index 0000000..fe78336
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameVarParamToField.java.after
@@ -0,0 +1,9 @@
+public class RenameCollisions {
+	class InnerClass {
+		private int myInnerField = 15;
+		public void instanceContext(int myInnerField<caret>) {
+			int localVar = 0;
+			int var1 = localVar + myInnerField + this.myInnerField;
+		}
+	}
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameVarParamToOuterConst.java b/java/java-tests/testData/refactoring/renameCollisions/RenameVarParamToOuterConst.java
new file mode 100644
index 0000000..0042902
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameVarParamToOuterConst.java
@@ -0,0 +1,9 @@
+public class RenameCollisions {
+	public static final int STATIC_FIELD = 5;
+	public static class StaticInnerClass {
+		public void instanceContext(int param<caret>) {
+			int localVar = 0;
+			int var1 = localVar + param + STATIC_FIELD;
+		}
+	}
+}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameVarParamToOuterConst.java.after b/java/java-tests/testData/refactoring/renameCollisions/RenameVarParamToOuterConst.java.after
new file mode 100644
index 0000000..177711d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameVarParamToOuterConst.java.after
@@ -0,0 +1,9 @@
+public class RenameCollisions {
+	public static final int STATIC_FIELD = 5;
+	public static class StaticInnerClass {
+		public void instanceContext(int STATIC_FIELD<caret>) {
+			int localVar = 0;
+			int var1 = localVar + STATIC_FIELD + RenameCollisions.STATIC_FIELD;
+		}
+	}
+}
diff --git a/java/java-tests/testData/refactoring/renameField/afterCollisionsInMethod.java b/java/java-tests/testData/refactoring/renameField/afterCollisionsInMethod.java
new file mode 100644
index 0000000..d8e0229
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameField/afterCollisionsInMethod.java
@@ -0,0 +1,14 @@
+class A {
+    int newFieldName;
+
+    int method(int newFieldName) {
+        if(newFieldName == 0) {
+                return this.newFieldName;
+        }
+        else {
+            int newFieldName = this.newFieldName;
+            return this.newFieldName + newFieldName;
+        }
+   }
+}
+
diff --git a/java/java-tests/testData/refactoring/renameField/afterCollisionsInMethodOfSubClass.java b/java/java-tests/testData/refactoring/renameField/afterCollisionsInMethodOfSubClass.java
new file mode 100644
index 0000000..4afd18e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameField/afterCollisionsInMethodOfSubClass.java
@@ -0,0 +1,16 @@
+class A {
+   int newFieldName;
+}
+   
+class B extends A {
+   int method(int newFieldName) {
+        if(newFieldName == 0) {
+                return this.newFieldName;
+        }
+        else {
+            int newFieldName = this.newFieldName;
+            return this.newFieldName + newFieldName;
+        }
+   }
+}
+
diff --git a/java/java-tests/testData/refactoring/renameField/afterCollisionsRenamingFieldWithSetter.java b/java/java-tests/testData/refactoring/renameField/afterCollisionsRenamingFieldWithSetter.java
new file mode 100644
index 0000000..190c513
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameField/afterCollisionsRenamingFieldWithSetter.java
@@ -0,0 +1,7 @@
+public class Test {
+    private boolean utm;
+
+    public void setUtm(boolean utm) {
+        this.utm = utm;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameField/afterEnumConstantWithConstructor.java b/java/java-tests/testData/refactoring/renameField/afterEnumConstantWithConstructor.java
new file mode 100644
index 0000000..854eefc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameField/afterEnumConstantWithConstructor.java
@@ -0,0 +1,8 @@
+public enum Foo {
+
+  newName(69);
+
+  Foo(int bar)
+  {
+  }
+};
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameField/afterEnumConstantWithInitializer.java b/java/java-tests/testData/refactoring/renameField/afterEnumConstantWithInitializer.java
new file mode 100644
index 0000000..3cc1dd4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameField/afterEnumConstantWithInitializer.java
@@ -0,0 +1,11 @@
+public enum MyEnum
+{
+    AAA {
+        @Override
+        public String toString() {
+            return "a";
+        }
+    },
+    B,
+    C
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameField/afterFieldInColumns.java b/java/java-tests/testData/refactoring/renameField/afterFieldInColumns.java
new file mode 100644
index 0000000..b2f7397
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameField/afterFieldInColumns.java
@@ -0,0 +1,23 @@
+/*
+ * 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 Test {
+    int jj                = 1;
+    int fieldWithLongName = 2;
+
+    void test() {
+        jj = 3;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameField/afterHidesOuter.java b/java/java-tests/testData/refactoring/renameField/afterHidesOuter.java
new file mode 100644
index 0000000..25f9d43
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameField/afterHidesOuter.java
@@ -0,0 +1,17 @@
+class Foo {
+    public int x;
+
+    public void foo() {
+        int y = 0;
+        y = x + 1;
+    }
+
+    public class Inner {
+        public int <caret>x;
+
+        public void foo() {
+            x = new Foo().x + 1;
+            x = Foo.this.x + 1;
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameField/afterNonNormalizedFields.java b/java/java-tests/testData/refactoring/renameField/afterNonNormalizedFields.java
new file mode 100644
index 0000000..c637213
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameField/afterNonNormalizedFields.java
@@ -0,0 +1,8 @@
+public class TestRefactor
+{
+public String uiTest1 = new String("Test1"),
+newField = new String("Test2"),
+uiTest3 = new String("Test1");
+{ System.out.println(newField);}
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameField/afterSimpleFieldRenaming.java b/java/java-tests/testData/refactoring/renameField/afterSimpleFieldRenaming.java
new file mode 100644
index 0000000..45022ec
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameField/afterSimpleFieldRenaming.java
@@ -0,0 +1,9 @@
+class A {
+    int myNewField;
+}
+
+class B {
+    int method(A a) {
+        return A.myNewField;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameField/beforeCollisionsInMethod.java b/java/java-tests/testData/refactoring/renameField/beforeCollisionsInMethod.java
new file mode 100644
index 0000000..825b180
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameField/beforeCollisionsInMethod.java
@@ -0,0 +1,14 @@
+class A {
+    int <caret>fieldToBeRenamed;
+
+    int method(int newFieldName) {
+        if(newFieldName == 0) {
+                return fieldToBeRenamed;
+        }
+        else {
+            int newFieldName = fieldToBeRenamed;
+            return fieldToBeRenamed + newFieldName;
+        }
+   }
+}
+
diff --git a/java/java-tests/testData/refactoring/renameField/beforeCollisionsInMethodOfSubClass.java b/java/java-tests/testData/refactoring/renameField/beforeCollisionsInMethodOfSubClass.java
new file mode 100644
index 0000000..4cbfb85
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameField/beforeCollisionsInMethodOfSubClass.java
@@ -0,0 +1,16 @@
+class A {
+   int <caret>fieldToBeRenamed;
+}
+   
+class B extends A {
+   int method(int newFieldName) {
+        if(newFieldName == 0) {
+                return fieldToBeRenamed;
+        }
+        else {
+            int newFieldName = fieldToBeRenamed;
+            return fieldToBeRenamed + newFieldName;
+        }
+   }
+}
+
diff --git a/java/java-tests/testData/refactoring/renameField/beforeCollisionsRenamingFieldWithSetter.java b/java/java-tests/testData/refactoring/renameField/beforeCollisionsRenamingFieldWithSetter.java
new file mode 100644
index 0000000..e951126
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameField/beforeCollisionsRenamingFieldWithSetter.java
@@ -0,0 +1,7 @@
+public class Test {
+    private boolean <caret>isUTM;
+
+    public void setUTM(boolean UTM) {
+        isUTM = UTM;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameField/beforeEnumConstantWithConstructor.java b/java/java-tests/testData/refactoring/renameField/beforeEnumConstantWithConstructor.java
new file mode 100644
index 0000000..006d270
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameField/beforeEnumConstantWithConstructor.java
@@ -0,0 +1,8 @@
+public enum Foo {
+
+  <caret>member(69);
+
+  Foo(int bar)
+  {
+  }
+};
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameField/beforeEnumConstantWithInitializer.java b/java/java-tests/testData/refactoring/renameField/beforeEnumConstantWithInitializer.java
new file mode 100644
index 0000000..f66346c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameField/beforeEnumConstantWithInitializer.java
@@ -0,0 +1,11 @@
+public enum MyEnum
+{
+    <caret>A {
+        @Override
+        public String toString() {
+            return "a";
+        }
+    },
+    B,
+    C
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameField/beforeFieldInColumns.java b/java/java-tests/testData/refactoring/renameField/beforeFieldInColumns.java
new file mode 100644
index 0000000..9e214201
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameField/beforeFieldInColumns.java
@@ -0,0 +1,23 @@
+/*
+ * 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 Test {
+    int i                 = 1;
+    int fieldWithLongName = 2;
+
+    void test() {
+        <caret>i = 3;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameField/beforeHidesOuter.java b/java/java-tests/testData/refactoring/renameField/beforeHidesOuter.java
new file mode 100644
index 0000000..85007fd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameField/beforeHidesOuter.java
@@ -0,0 +1,17 @@
+class Foo {
+    public int x;
+
+    public void foo() {
+        int y = 0;
+        y = x + 1;
+    }
+
+    public class Inner {
+        public int <caret>z;
+
+        public void foo() {
+            z = new Foo().x + 1;
+            z = x + 1;
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameField/beforeNonNormalizedFields.java b/java/java-tests/testData/refactoring/renameField/beforeNonNormalizedFields.java
new file mode 100644
index 0000000..16282ac
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameField/beforeNonNormalizedFields.java
@@ -0,0 +1,8 @@
+public class TestRefactor
+{
+public String uiTest1 = new String("Test1"),
+uiTest2<caret> = new String("Test2"),
+uiTest3 = new String("Test1");
+{ System.out.println(uiTest2);}
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameField/beforeRenameWrongRefDisabled.java b/java/java-tests/testData/refactoring/renameField/beforeRenameWrongRefDisabled.java
new file mode 100644
index 0000000..ce063f2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameField/beforeRenameWrongRefDisabled.java
@@ -0,0 +1,9 @@
+class A {
+    private int myField;
+}
+
+class B extends A {
+    void method() {
+        myFi<caret>eld;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameField/beforeSimpleFieldRenaming.java b/java/java-tests/testData/refactoring/renameField/beforeSimpleFieldRenaming.java
new file mode 100644
index 0000000..f20fc87
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameField/beforeSimpleFieldRenaming.java
@@ -0,0 +1,9 @@
+class A {
+    int <caret>myField;
+}
+
+class B {
+    int method(A a) {
+        return A.myField;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameInplace/ClassWithMultipleConstructors.java b/java/java-tests/testData/refactoring/renameInplace/ClassWithMultipleConstructors.java
new file mode 100644
index 0000000..710ffd5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameInplace/ClassWithMultipleConstructors.java
@@ -0,0 +1,13 @@
+public class Constructor {
+  public Constructor() {
+  }
+
+  public Constructor(int i) {
+    System.out.println(i);
+  }
+
+  void foo() {
+    final Constr<caret>uctor constructor = new Constructor();
+    System.out.println(constructor);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameInplace/ClassWithMultipleConstructors_after.java b/java/java-tests/testData/refactoring/renameInplace/ClassWithMultipleConstructors_after.java
new file mode 100644
index 0000000..417098d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameInplace/ClassWithMultipleConstructors_after.java
@@ -0,0 +1,13 @@
+public class Bar {
+  public Bar() {
+  }
+
+  public Bar(int i) {
+    System.out.println(i);
+  }
+
+  void foo() {
+    final Bar bar = new Bar();
+    System.out.println(bar);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameInplace/ConflictingMethodName.java b/java/java-tests/testData/refactoring/renameInplace/ConflictingMethodName.java
new file mode 100644
index 0000000..fb12d11
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameInplace/ConflictingMethodName.java
@@ -0,0 +1,12 @@
+class Foo {
+  void foo(){}
+  void bar() {
+    foo();
+  }
+}
+
+class FooImpl extends Foo {
+  void f<caret>oo() {
+    super.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameInplace/ConflictingMethodName_after.java b/java/java-tests/testData/refactoring/renameInplace/ConflictingMethodName_after.java
new file mode 100644
index 0000000..8b7607e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameInplace/ConflictingMethodName_after.java
@@ -0,0 +1,12 @@
+class Foo {
+  void foo(){}
+  void bar() {
+    foo();
+  }
+}
+
+class FooImpl extends Foo {
+  void foo() {
+    super.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameInplace/Constructor.java b/java/java-tests/testData/refactoring/renameInplace/Constructor.java
new file mode 100644
index 0000000..47a716b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameInplace/Constructor.java
@@ -0,0 +1,8 @@
+public class Constructor {
+  public Constructor() {
+  }
+  void foo() {
+    final Constructor constructor = new Co<caret>nstructor();
+    System.out.println(constructor);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameInplace/Constructor_after.java b/java/java-tests/testData/refactoring/renameInplace/Constructor_after.java
new file mode 100644
index 0000000..c594341
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameInplace/Constructor_after.java
@@ -0,0 +1,8 @@
+public class Bar {
+  public Bar() {
+  }
+  void foo() {
+    final Bar bar = new Bar();
+    System.out.println(bar);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameInplace/EnumConstructor.java b/java/java-tests/testData/refactoring/renameInplace/EnumConstructor.java
new file mode 100644
index 0000000..b25ef10
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameInplace/EnumConstructor.java
@@ -0,0 +1,8 @@
+enum Foo {
+  BAR,
+  BAZ
+  ;
+
+  Fo<caret>o() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameInplace/EnumConstructor_after.java b/java/java-tests/testData/refactoring/renameInplace/EnumConstructor_after.java
new file mode 100644
index 0000000..83fd662
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameInplace/EnumConstructor_after.java
@@ -0,0 +1,8 @@
+enum Bar {
+  BAR,
+  BAZ
+  ;
+
+  Bar() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameInplace/InnerClass.java b/java/java-tests/testData/refactoring/renameInplace/InnerClass.java
new file mode 100644
index 0000000..edf7da2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameInplace/InnerClass.java
@@ -0,0 +1,15 @@
+public class ResourceLocator {
+    private ContentContainsChecker myContentContainsChecker;
+    private DeltaI<caret>nfoGetter myDeltaInfoGetter;
+
+
+    private class ContentContainsChecker {
+
+    }
+
+    private class RevisionInfoContainsChecker {
+    }
+
+    private class DeltaInfoGetter {
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameInplace/InnerClass_after.java b/java/java-tests/testData/refactoring/renameInplace/InnerClass_after.java
new file mode 100644
index 0000000..d5e5d1f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameInplace/InnerClass_after.java
@@ -0,0 +1,15 @@
+public class ResourceLocator {
+    private ContentContainsChecker myContentContainsChecker;
+    private NEW_NAME myNEWNAME;
+
+
+    private class ContentContainsChecker {
+
+    }
+
+    private class RevisionInfoContainsChecker {
+    }
+
+    private class NEW_NAME {
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameInplace/MethodWithJavadocRef.java b/java/java-tests/testData/refactoring/renameInplace/MethodWithJavadocRef.java
new file mode 100644
index 0000000..f807afc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameInplace/MethodWithJavadocRef.java
@@ -0,0 +1,11 @@
+public class RefactorBug {
+    public static void som<caret>ething(int a, float b) {
+    }
+
+    /**
+     * @see #something(int, float)
+     */
+    public static void somethingElse() {
+
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameInplace/MethodWithJavadocRef_after.java b/java/java-tests/testData/refactoring/renameInplace/MethodWithJavadocRef_after.java
new file mode 100644
index 0000000..3fb1fc2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameInplace/MethodWithJavadocRef_after.java
@@ -0,0 +1,11 @@
+public class RefactorBug {
+    public static void bar(int a, float b) {
+    }
+
+    /**
+     * @see #bar(int, float)
+     */
+    public static void somethingElse() {
+
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameInplace/MethodWithMethodRef.java b/java/java-tests/testData/refactoring/renameInplace/MethodWithMethodRef.java
new file mode 100644
index 0000000..7901adf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameInplace/MethodWithMethodRef.java
@@ -0,0 +1,14 @@
+class MyTest {
+    
+    static class Foo {
+    }
+    
+    interface I {
+        Foo m();
+    }
+    static Foo f<caret>oo() { return null; }
+
+    public static void main(String[] args) {
+        I i = MyTest::foo;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameInplace/MethodWithMethodRef_after.java b/java/java-tests/testData/refactoring/renameInplace/MethodWithMethodRef_after.java
new file mode 100644
index 0000000..b507698
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameInplace/MethodWithMethodRef_after.java
@@ -0,0 +1,14 @@
+class MyTest {
+    
+    static class Foo {
+    }
+    
+    interface I {
+        Foo m();
+    }
+    static Foo bar() { return null; }
+
+    public static void main(String[] args) {
+        I i = MyTest::bar;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameInplace/MultipleConstructors.java b/java/java-tests/testData/refactoring/renameInplace/MultipleConstructors.java
new file mode 100644
index 0000000..26f0986
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameInplace/MultipleConstructors.java
@@ -0,0 +1,13 @@
+public class Constructor {
+  public Constructor() {
+  }
+
+  public Constructor(int i) {
+    System.out.println(i);
+  }
+
+  void foo() {
+    final Constructor constructor = new Co<caret>nstructor();
+    System.out.println(constructor);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameInplace/MultipleConstructors_after.java b/java/java-tests/testData/refactoring/renameInplace/MultipleConstructors_after.java
new file mode 100644
index 0000000..417098d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameInplace/MultipleConstructors_after.java
@@ -0,0 +1,13 @@
+public class Bar {
+  public Bar() {
+  }
+
+  public Bar(int i) {
+    System.out.println(i);
+  }
+
+  void foo() {
+    final Bar bar = new Bar();
+    System.out.println(bar);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameInplace/SuperMethod.java b/java/java-tests/testData/refactoring/renameInplace/SuperMethod.java
new file mode 100644
index 0000000..fb12d11
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameInplace/SuperMethod.java
@@ -0,0 +1,12 @@
+class Foo {
+  void foo(){}
+  void bar() {
+    foo();
+  }
+}
+
+class FooImpl extends Foo {
+  void f<caret>oo() {
+    super.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameInplace/SuperMethodAnonymousInheritor.java b/java/java-tests/testData/refactoring/renameInplace/SuperMethodAnonymousInheritor.java
new file mode 100644
index 0000000..d30f2da
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameInplace/SuperMethodAnonymousInheritor.java
@@ -0,0 +1,16 @@
+class Demo {
+    class MyEvent<T> {}
+    interface MyEventListener<T> {
+        void action(MyEvent<T> event);
+    }
+
+    class Driver {
+        void method() {
+            MyEventListener<Object> l = new MyEventListener<Object>() {
+                public void ac<caret>tion(MyEvent<Object> event) {
+                    //To change body of implemented methods use File | Settings | File Templates.
+                }
+            };
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameInplace/SuperMethodAnonymousInheritor_after.java b/java/java-tests/testData/refactoring/renameInplace/SuperMethodAnonymousInheritor_after.java
new file mode 100644
index 0000000..ee9f9c6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameInplace/SuperMethodAnonymousInheritor_after.java
@@ -0,0 +1,16 @@
+class Demo {
+    class MyEvent<T> {}
+    interface MyEventListener<T> {
+        void xxx(MyEvent<T> event);
+    }
+
+    class Driver {
+        void method() {
+            MyEventListener<Object> l = new MyEventListener<Object>() {
+                public void xxx(MyEvent<Object> event) {
+                    //To change body of implemented methods use File | Settings | File Templates.
+                }
+            };
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameInplace/SuperMethod_after.java b/java/java-tests/testData/refactoring/renameInplace/SuperMethod_after.java
new file mode 100644
index 0000000..b1d28cee
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameInplace/SuperMethod_after.java
@@ -0,0 +1,12 @@
+class Foo {
+  void xxx(){}
+  void bar() {
+    xxx();
+  }
+}
+
+class FooImpl extends Foo {
+  void xxx() {
+    super.xxx();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameLocal/ClassNameUsedInMethodRefs.java b/java/java-tests/testData/refactoring/renameLocal/ClassNameUsedInMethodRefs.java
new file mode 100644
index 0000000..982d640
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameLocal/ClassNameUsedInMethodRefs.java
@@ -0,0 +1,17 @@
+public class FooBar {
+    private static final class B<caret>ar {
+        private Bar() {
+        }
+    }
+
+    private interface I<T> {
+        T create();
+    }
+
+    static void foo(I intf) {}
+
+
+    public static void main(String[] args) throws Exception {
+        foo(Bar::new);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameLocal/ClassNameUsedInMethodRefs_after.java b/java/java-tests/testData/refactoring/renameLocal/ClassNameUsedInMethodRefs_after.java
new file mode 100644
index 0000000..6ec908b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameLocal/ClassNameUsedInMethodRefs_after.java
@@ -0,0 +1,17 @@
+public class FooBar {
+    private static final class Bar1 {
+        private Bar1() {
+        }
+    }
+
+    private interface I<T> {
+        T create();
+    }
+
+    static void foo(I intf) {}
+
+
+    public static void main(String[] args) throws Exception {
+        foo(Bar1::new);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameLocal/ConflictWithJavadocTag.java b/java/java-tests/testData/refactoring/renameLocal/ConflictWithJavadocTag.java
new file mode 100644
index 0000000..e3d905b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameLocal/ConflictWithJavadocTag.java
@@ -0,0 +1,9 @@
+public class ConflictWithJavadocTag {
+  /**
+   * Receives some param.
+   * @param param some param
+   */
+  public void my(int <caret>param) {
+    System.out.println("param=" + param);  // print param
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameLocal/ConflictWithJavadocTag_after.java b/java/java-tests/testData/refactoring/renameLocal/ConflictWithJavadocTag_after.java
new file mode 100644
index 0000000..c032063
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameLocal/ConflictWithJavadocTag_after.java
@@ -0,0 +1,9 @@
+public class ConflictWithJavadocTag {
+  /**
+   * Receives some i.
+   * @param i some i
+   */
+  public void my(int i) {
+    System.out.println("i=" + i);  // print i
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameLocal/ConflictWithOuterClassField.java b/java/java-tests/testData/refactoring/renameLocal/ConflictWithOuterClassField.java
new file mode 100644
index 0000000..65e3374
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameLocal/ConflictWithOuterClassField.java
@@ -0,0 +1,10 @@
+public class HelloWorld {
+    private String f;
+
+    public class A {
+
+        public void test() {
+            String <caret>s = f;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameLocal/ConflictWithOuterClassField_after.java b/java/java-tests/testData/refactoring/renameLocal/ConflictWithOuterClassField_after.java
new file mode 100644
index 0000000..1d992d8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameLocal/ConflictWithOuterClassField_after.java
@@ -0,0 +1,10 @@
+public class HelloWorld {
+    private String f;
+
+    public class A {
+
+        public void test() {
+            String f = HelloWorld.this.f;
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameLocal/IDEADEV13849.java b/java/java-tests/testData/refactoring/renameLocal/IDEADEV13849.java
new file mode 100644
index 0000000..9a754ae
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameLocal/IDEADEV13849.java
@@ -0,0 +1,7 @@
+class Test {
+
+    private void test() {
+        String <caret>aaaa = "sdf";
+        System.out.println("\taaaa");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameLocal/IDEADEV13849_after.java b/java/java-tests/testData/refactoring/renameLocal/IDEADEV13849_after.java
new file mode 100644
index 0000000..3876904
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameLocal/IDEADEV13849_after.java
@@ -0,0 +1,7 @@
+class Test {
+
+    private void test() {
+        String <caret>aaaaa = "sdf";
+        System.out.println("\taaaaa");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameLocal/IDEADEV3320.java b/java/java-tests/testData/refactoring/renameLocal/IDEADEV3320.java
new file mode 100644
index 0000000..02c75dd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameLocal/IDEADEV3320.java
@@ -0,0 +1,8 @@
+class C {
+    int f;
+
+    {
+        int <caret>j = 0;
+        int k = f;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameLocal/IDEADEV3320_after.java b/java/java-tests/testData/refactoring/renameLocal/IDEADEV3320_after.java
new file mode 100644
index 0000000..4765eed
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameLocal/IDEADEV3320_after.java
@@ -0,0 +1,8 @@
+class C {
+    int f;
+
+    {
+        int f = 0;
+        int k = this.f;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameLocal/RenameFieldWithConstructorParamAutomatic.java b/java/java-tests/testData/refactoring/renameLocal/RenameFieldWithConstructorParamAutomatic.java
new file mode 100644
index 0000000..578b24b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameLocal/RenameFieldWithConstructorParamAutomatic.java
@@ -0,0 +1,7 @@
+class Test {
+  private boolean is<caret>Flag = false;
+
+  public Test(boolean isFlag) {
+    this.isFlag = isFlag;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/renameLocal/RenameFieldWithConstructorParamAutomatic_after.java b/java/java-tests/testData/refactoring/renameLocal/RenameFieldWithConstructorParamAutomatic_after.java
new file mode 100644
index 0000000..3474332
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameLocal/RenameFieldWithConstructorParamAutomatic_after.java
@@ -0,0 +1,7 @@
+class Test {
+  private boolean pp = false;
+
+  public Test(boolean pp) {
+    this.pp = pp;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/renameLocal/RenameInPlaceInStaticContextWithConflictingField.java b/java/java-tests/testData/refactoring/renameLocal/RenameInPlaceInStaticContextWithConflictingField.java
new file mode 100644
index 0000000..195766b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameLocal/RenameInPlaceInStaticContextWithConflictingField.java
@@ -0,0 +1,7 @@
+class X {
+  public static final String s = "s";
+
+  public static void main(String... args) {
+    String s<caret>1 = s;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/renameLocal/RenameInPlaceInStaticContextWithConflictingField_after.java b/java/java-tests/testData/refactoring/renameLocal/RenameInPlaceInStaticContextWithConflictingField_after.java
new file mode 100644
index 0000000..de862f2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameLocal/RenameInPlaceInStaticContextWithConflictingField_after.java
@@ -0,0 +1,7 @@
+class X {
+  public static final String s = "s";
+
+  public static void main(String... args) {
+    String s = X.s;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/renameLocal/RenameInPlaceParamInOverriderAutomaticRenamer.java b/java/java-tests/testData/refactoring/renameLocal/RenameInPlaceParamInOverriderAutomaticRenamer.java
new file mode 100644
index 0000000..1638431
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameLocal/RenameInPlaceParamInOverriderAutomaticRenamer.java
@@ -0,0 +1,12 @@
+public class Test {
+  int myI;
+  void foo(int <caret>i){
+    myI = i;
+  }
+}
+
+class TestImpl extends Test {
+  void foo(int i){
+    super.foo(i);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameLocal/RenameInPlaceParamInOverriderAutomaticRenamerConflict.java b/java/java-tests/testData/refactoring/renameLocal/RenameInPlaceParamInOverriderAutomaticRenamerConflict.java
new file mode 100644
index 0000000..65a6152
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameLocal/RenameInPlaceParamInOverriderAutomaticRenamerConflict.java
@@ -0,0 +1,14 @@
+public class Test {
+  int myI;
+  void foo(int <caret>i){
+    myI = i;
+  }
+}
+
+class TestImpl extends Test {
+  void foo(int i){
+    super.foo(i);
+    int pp = 0;
+    System.out.println(pp);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameLocal/RenameInPlaceParamInOverriderAutomaticRenamerConflict_after.java b/java/java-tests/testData/refactoring/renameLocal/RenameInPlaceParamInOverriderAutomaticRenamerConflict_after.java
new file mode 100644
index 0000000..259c45e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameLocal/RenameInPlaceParamInOverriderAutomaticRenamerConflict_after.java
@@ -0,0 +1,14 @@
+public class Test {
+  int myI;
+  void foo(int pp){
+    myI = pp;
+  }
+}
+
+class TestImpl extends Test {
+  void foo(int i){
+    super.foo(i);
+    int pp = 0;
+    System.out.println(pp);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameLocal/RenameInPlaceParamInOverriderAutomaticRenamer_after.java b/java/java-tests/testData/refactoring/renameLocal/RenameInPlaceParamInOverriderAutomaticRenamer_after.java
new file mode 100644
index 0000000..2a3d9aa
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameLocal/RenameInPlaceParamInOverriderAutomaticRenamer_after.java
@@ -0,0 +1,12 @@
+public class Test {
+  int myI;
+  void foo(int pp){
+    myI = pp;
+  }
+}
+
+class TestImpl extends Test {
+  void foo(int pp){
+    super.foo(pp);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameLocal/RenameInPlaceQualifyFieldReference.java b/java/java-tests/testData/refactoring/renameLocal/RenameInPlaceQualifyFieldReference.java
new file mode 100644
index 0000000..f6268b3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameLocal/RenameInPlaceQualifyFieldReference.java
@@ -0,0 +1,6 @@
+class Test {
+  int myI;
+  void foo(int <caret>i){
+    myI = i;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameLocal/RenameInPlaceQualifyFieldReferenceInChild.java b/java/java-tests/testData/refactoring/renameLocal/RenameInPlaceQualifyFieldReferenceInChild.java
new file mode 100644
index 0000000..902517f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameLocal/RenameInPlaceQualifyFieldReferenceInChild.java
@@ -0,0 +1,10 @@
+interface F {
+  void foo(int <caret>i);
+}
+
+class A implements F {
+  int myI;
+  public void foo(int i){
+    myI = i;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/renameLocal/RenameInPlaceQualifyFieldReferenceInChild_after.java b/java/java-tests/testData/refactoring/renameLocal/RenameInPlaceQualifyFieldReferenceInChild_after.java
new file mode 100644
index 0000000..633886e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameLocal/RenameInPlaceQualifyFieldReferenceInChild_after.java
@@ -0,0 +1,10 @@
+interface F {
+  void foo(int myI);
+}
+
+class A implements F {
+  int myI;
+  public void foo(int myI){
+    this.myI = myI;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/renameLocal/RenameInPlaceQualifyFieldReference_after.java b/java/java-tests/testData/refactoring/renameLocal/RenameInPlaceQualifyFieldReference_after.java
new file mode 100644
index 0000000..9fcf57b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameLocal/RenameInPlaceQualifyFieldReference_after.java
@@ -0,0 +1,6 @@
+class Test {
+  int myI;
+  void foo(int myI){
+    this.myI = myI;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameLocal/RenameInPlaceThisNeeded.java b/java/java-tests/testData/refactoring/renameLocal/RenameInPlaceThisNeeded.java
new file mode 100644
index 0000000..2e4c855
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameLocal/RenameInPlaceThisNeeded.java
@@ -0,0 +1,25 @@
+/*
+ * 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 Test1 {
+    class A {
+        int a;
+    }
+    class B extends A {
+        B(int <caret>b) {
+            a = b;
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameLocal/RenameInPlaceThisNeeded_after.java b/java/java-tests/testData/refactoring/renameLocal/RenameInPlaceThisNeeded_after.java
new file mode 100644
index 0000000..dcb10a8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameLocal/RenameInPlaceThisNeeded_after.java
@@ -0,0 +1,25 @@
+/*
+ * 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 Test1 {
+    class A {
+        int a;
+    }
+    class B extends A {
+        B(int a) {
+            this.a = a;
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/renameLocal/RenameLocalIncomplete.java b/java/java-tests/testData/refactoring/renameLocal/RenameLocalIncomplete.java
new file mode 100644
index 0000000..864112d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameLocal/RenameLocalIncomplete.java
@@ -0,0 +1,7 @@
+public class RenameLocalIncomplete {
+  public void test() {
+    Integer <caret>integer = 0;
+    integer.
+    Double x = 3;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameLocal/RenameLocalIncomplete_after.java b/java/java-tests/testData/refactoring/renameLocal/RenameLocalIncomplete_after.java
new file mode 100644
index 0000000..cc3d637
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameLocal/RenameLocalIncomplete_after.java
@@ -0,0 +1,7 @@
+public class RenameLocalIncomplete {
+  public void test() {
+    Integer _i = 0;
+    _i.
+    Double x = 3;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameLocal/RenameParamIncomplete.java b/java/java-tests/testData/refactoring/renameLocal/RenameParamIncomplete.java
new file mode 100644
index 0000000..e56a9d5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameLocal/RenameParamIncomplete.java
@@ -0,0 +1,6 @@
+public class RenameLocalIncomplete {
+  public void test(Integer <caret>integer) {
+    integer.
+    Double x = 3;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameLocal/RenameParamIncomplete_after.java b/java/java-tests/testData/refactoring/renameLocal/RenameParamIncomplete_after.java
new file mode 100644
index 0000000..da18a7a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameLocal/RenameParamIncomplete_after.java
@@ -0,0 +1,6 @@
+public class RenameLocalIncomplete {
+  public void test(Integer _i) {
+    _i.
+    Double x = 3;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameLocal/RenameParamUniqueName.java b/java/java-tests/testData/refactoring/renameLocal/RenameParamUniqueName.java
new file mode 100644
index 0000000..080da39
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameLocal/RenameParamUniqueName.java
@@ -0,0 +1,24 @@
+import java.awt.*;
+
+/**
+ * @author pegov
+ */
+public class MacMessages {
+
+
+  public static void showOkMessageDialog(String title, String message, String okText, Window co<caret>mponent) {
+    showMessageDialog(title, okText, null, null, message, component);
+  }
+
+
+
+  public static int showMessageDialog(String title,
+                                    String okText,
+                                    String alternateText,
+                                    String cancelText,
+                                    String message,
+                                    Window window) {
+    return 1;
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameLocal/RenameResource.java b/java/java-tests/testData/refactoring/renameLocal/RenameResource.java
new file mode 100644
index 0000000..37476de
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameLocal/RenameResource.java
@@ -0,0 +1,7 @@
+public class Test {
+  void m() throws Exception {
+    try (AutoCloseable <caret>r = null; AutoCloseable r2 = r) {
+      System.out.println(r + ", " + r2);
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameLocal/RenameResourceInPlace.java b/java/java-tests/testData/refactoring/renameLocal/RenameResourceInPlace.java
new file mode 100644
index 0000000..37476de
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameLocal/RenameResourceInPlace.java
@@ -0,0 +1,7 @@
+public class Test {
+  void m() throws Exception {
+    try (AutoCloseable <caret>r = null; AutoCloseable r2 = r) {
+      System.out.println(r + ", " + r2);
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameLocal/RenameResourceInPlace_after.java b/java/java-tests/testData/refactoring/renameLocal/RenameResourceInPlace_after.java
new file mode 100644
index 0000000..d44feeb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameLocal/RenameResourceInPlace_after.java
@@ -0,0 +1,7 @@
+public class Test {
+  void m() throws Exception {
+    try (AutoCloseable r1 = null; AutoCloseable r2 = r1) {
+      System.out.println(r1 + ", " + r2);
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameLocal/RenameResource_after.java b/java/java-tests/testData/refactoring/renameLocal/RenameResource_after.java
new file mode 100644
index 0000000..d44feeb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameLocal/RenameResource_after.java
@@ -0,0 +1,7 @@
+public class Test {
+  void m() throws Exception {
+    try (AutoCloseable r1 = null; AutoCloseable r2 = r1) {
+      System.out.println(r1 + ", " + r2);
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameLocal/RenameWrongRef.java b/java/java-tests/testData/refactoring/renameLocal/RenameWrongRef.java
new file mode 100644
index 0000000..40be70b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameLocal/RenameWrongRef.java
@@ -0,0 +1,7 @@
+class Test {
+  void foo() {
+    int i = 0;
+    System.out.println(<caret>k);
+    System.out.println(k);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameLocal/RenameWrongRef_after.java b/java/java-tests/testData/refactoring/renameLocal/RenameWrongRef_after.java
new file mode 100644
index 0000000..9fdea8e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameLocal/RenameWrongRef_after.java
@@ -0,0 +1,7 @@
+class Test {
+  void foo() {
+    int i = 0;
+    System.out.println(i);
+    System.out.println(i);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameMethod/multi/alignedMultilineParameters/after/AlignedMultilineParameters.java b/java/java-tests/testData/refactoring/renameMethod/multi/alignedMultilineParameters/after/AlignedMultilineParameters.java
new file mode 100644
index 0000000..61b61e1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameMethod/multi/alignedMultilineParameters/after/AlignedMultilineParameters.java
@@ -0,0 +1,11 @@
+public class AlignedMultilineParameters {
+
+  public void test123asd(int i,
+                         int j) {
+  }
+
+  public void foo() {
+    test123asd(1,
+               2);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameMethod/multi/alignedMultilineParameters/before/AlignedMultilineParameters.java b/java/java-tests/testData/refactoring/renameMethod/multi/alignedMultilineParameters/before/AlignedMultilineParameters.java
new file mode 100644
index 0000000..db8bda8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameMethod/multi/alignedMultilineParameters/before/AlignedMultilineParameters.java
@@ -0,0 +1,11 @@
+public class AlignedMultilineParameters {
+
+  public void test123(int i,
+                      int j) {
+  }
+
+  public void foo() {
+    test123(1,
+            2);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameMethod/multi/defaultAnnotationMethod/after/pack1/A.java b/java/java-tests/testData/refactoring/renameMethod/multi/defaultAnnotationMethod/after/pack1/A.java
new file mode 100644
index 0000000..a877c4f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameMethod/multi/defaultAnnotationMethod/after/pack1/A.java
@@ -0,0 +1,5 @@
+package pack1;
+
+public @interface A {
+    int intValue();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameMethod/multi/defaultAnnotationMethod/after/pack1/Usage.java b/java/java-tests/testData/refactoring/renameMethod/multi/defaultAnnotationMethod/after/pack1/Usage.java
new file mode 100644
index 0000000..2a24f0a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameMethod/multi/defaultAnnotationMethod/after/pack1/Usage.java
@@ -0,0 +1,11 @@
+package pack1;
+
+class Usage {
+    @A(intValue = 11)
+    void foo() {
+    }
+
+    @A(intValue = 42)
+    void bar() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameMethod/multi/defaultAnnotationMethod/before/pack1/A.java b/java/java-tests/testData/refactoring/renameMethod/multi/defaultAnnotationMethod/before/pack1/A.java
new file mode 100644
index 0000000..5777614
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameMethod/multi/defaultAnnotationMethod/before/pack1/A.java
@@ -0,0 +1,5 @@
+package pack1;
+
+public @interface A {
+    int value();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameMethod/multi/defaultAnnotationMethod/before/pack1/Usage.java b/java/java-tests/testData/refactoring/renameMethod/multi/defaultAnnotationMethod/before/pack1/Usage.java
new file mode 100644
index 0000000..5188eeb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameMethod/multi/defaultAnnotationMethod/before/pack1/Usage.java
@@ -0,0 +1,11 @@
+package pack1;
+
+class Usage {
+    @A(11)
+    void foo() {
+    }
+
+    @A(value = 42)
+    void bar() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameMethod/multi/rename2HideFromAnonymous/after/p/Foo.java b/java/java-tests/testData/refactoring/renameMethod/multi/rename2HideFromAnonymous/after/p/Foo.java
new file mode 100644
index 0000000..1250f80
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameMethod/multi/rename2HideFromAnonymous/after/p/Foo.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2000-2011 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.
+ */
+package p;
+
+class Foo {
+  public Bar createBar() {
+    return new Bar() {
+      public void bazz(int i) {
+        Foo.this.bazz(i);
+      }
+    };
+  }
+
+  private void bazz(int i) {
+  }
+
+  public interface Bar {
+    void bazz(int i);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/renameMethod/multi/rename2HideFromAnonymous/before/p/Foo.java b/java/java-tests/testData/refactoring/renameMethod/multi/rename2HideFromAnonymous/before/p/Foo.java
new file mode 100644
index 0000000..4e9acc8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameMethod/multi/rename2HideFromAnonymous/before/p/Foo.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2000-2011 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.
+ */
+package p;
+
+class Foo {
+  public Bar createBar() {
+    return new Bar() {
+      public void bazz(int i) {
+        buzz(i);
+      }
+    };
+  }
+
+  private void buzz(int i) {
+  }
+
+  public interface Bar {
+    void bazz(int i);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/renameMethod/multi/rename2OverrideFinal/after/p/A.java b/java/java-tests/testData/refactoring/renameMethod/multi/rename2OverrideFinal/after/p/A.java
new file mode 100644
index 0000000..3676de4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameMethod/multi/rename2OverrideFinal/after/p/A.java
@@ -0,0 +1,16 @@
+package p;
+public class A {
+
+        public final void finalMethod() {
+        }
+}
+
+class B extends A implements I {
+
+        public void method() {
+        }
+}
+
+interface I {
+        void method();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameMethod/multi/rename2OverrideFinal/before/p/A.java b/java/java-tests/testData/refactoring/renameMethod/multi/rename2OverrideFinal/before/p/A.java
new file mode 100644
index 0000000..3676de4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameMethod/multi/rename2OverrideFinal/before/p/A.java
@@ -0,0 +1,16 @@
+package p;
+public class A {
+
+        public final void finalMethod() {
+        }
+}
+
+class B extends A implements I {
+
+        public void method() {
+        }
+}
+
+interface I {
+        void method();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameMethod/multi/staticImport1/after/pack1/A.java b/java/java-tests/testData/refactoring/renameMethod/multi/staticImport1/after/pack1/A.java
new file mode 100644
index 0000000..659a2d2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameMethod/multi/staticImport1/after/pack1/A.java
@@ -0,0 +1,6 @@
+package pack1;
+
+public class A {
+    public static void renamedStaticMethod(int i) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameMethod/multi/staticImport1/after/pack2/Usage.java b/java/java-tests/testData/refactoring/renameMethod/multi/staticImport1/after/pack2/Usage.java
new file mode 100644
index 0000000..1ac9fbe
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameMethod/multi/staticImport1/after/pack2/Usage.java
@@ -0,0 +1,9 @@
+package pack2;
+
+import static pack1.A.renamedStaticMethod;
+
+class Usage {
+    {
+        renamedStaticMethod(27);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameMethod/multi/staticImport1/before/pack1/A.java b/java/java-tests/testData/refactoring/renameMethod/multi/staticImport1/before/pack1/A.java
new file mode 100644
index 0000000..293f4d3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameMethod/multi/staticImport1/before/pack1/A.java
@@ -0,0 +1,6 @@
+package pack1;
+
+public class A {
+    public static void staticMethod(int i) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameMethod/multi/staticImport1/before/pack2/Usage.java b/java/java-tests/testData/refactoring/renameMethod/multi/staticImport1/before/pack2/Usage.java
new file mode 100644
index 0000000..2338779
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameMethod/multi/staticImport1/before/pack2/Usage.java
@@ -0,0 +1,9 @@
+package pack2;
+
+import static pack1.A.staticMethod;
+
+class Usage {
+    {
+        staticMethod(27);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameMethod/multi/staticImport2/after/pack1/A.java b/java/java-tests/testData/refactoring/renameMethod/multi/staticImport2/after/pack1/A.java
new file mode 100644
index 0000000..659a2d2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameMethod/multi/staticImport2/after/pack1/A.java
@@ -0,0 +1,6 @@
+package pack1;
+
+public class A {
+    public static void renamedStaticMethod(int i) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameMethod/multi/staticImport2/after/pack2/Usage.java b/java/java-tests/testData/refactoring/renameMethod/multi/staticImport2/after/pack2/Usage.java
new file mode 100644
index 0000000..08707ee
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameMethod/multi/staticImport2/after/pack2/Usage.java
@@ -0,0 +1,9 @@
+package pack2;
+
+import static pack1.A.*;
+
+class Usage {
+    {
+        renamedStaticMethod(27);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameMethod/multi/staticImport2/before/pack1/A.java b/java/java-tests/testData/refactoring/renameMethod/multi/staticImport2/before/pack1/A.java
new file mode 100644
index 0000000..293f4d3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameMethod/multi/staticImport2/before/pack1/A.java
@@ -0,0 +1,6 @@
+package pack1;
+
+public class A {
+    public static void staticMethod(int i) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameMethod/multi/staticImport2/before/pack2/Usage.java b/java/java-tests/testData/refactoring/renameMethod/multi/staticImport2/before/pack2/Usage.java
new file mode 100644
index 0000000..b50b933
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameMethod/multi/staticImport2/before/pack2/Usage.java
@@ -0,0 +1,9 @@
+package pack2;
+
+import static pack1.A.*;
+
+class Usage {
+    {
+        staticMethod(27);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameMethod/multi/staticImport3/after/pack1/A.java b/java/java-tests/testData/refactoring/renameMethod/multi/staticImport3/after/pack1/A.java
new file mode 100644
index 0000000..ece5517
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameMethod/multi/staticImport3/after/pack1/A.java
@@ -0,0 +1,9 @@
+package pack1;
+
+public class A {
+    public static void renamedStaticMethod(int i) {
+    }
+
+    public static void staticMethod(String s) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameMethod/multi/staticImport3/after/pack2/Usage.java b/java/java-tests/testData/refactoring/renameMethod/multi/staticImport3/after/pack2/Usage.java
new file mode 100644
index 0000000..c965e22
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameMethod/multi/staticImport3/after/pack2/Usage.java
@@ -0,0 +1,9 @@
+package pack2;
+
+import pack1.A;
+
+class Usage {
+    {
+        A.renamedStaticMethod(27);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameMethod/multi/staticImport3/before/pack1/A.java b/java/java-tests/testData/refactoring/renameMethod/multi/staticImport3/before/pack1/A.java
new file mode 100644
index 0000000..bfff831
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameMethod/multi/staticImport3/before/pack1/A.java
@@ -0,0 +1,9 @@
+package pack1;
+
+public class A {
+    public static void staticMethod(int i) {
+    }
+
+    public static void staticMethod(String s) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameMethod/multi/staticImport3/before/pack2/Usage.java b/java/java-tests/testData/refactoring/renameMethod/multi/staticImport3/before/pack2/Usage.java
new file mode 100644
index 0000000..2338779
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameMethod/multi/staticImport3/before/pack2/Usage.java
@@ -0,0 +1,9 @@
+package pack2;
+
+import static pack1.A.staticMethod;
+
+class Usage {
+    {
+        staticMethod(27);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameMethod/multi/staticImport4/after/pack1/A.java b/java/java-tests/testData/refactoring/renameMethod/multi/staticImport4/after/pack1/A.java
new file mode 100644
index 0000000..edf51cd5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameMethod/multi/staticImport4/after/pack1/A.java
@@ -0,0 +1,9 @@
+package pack1;
+
+public class A {
+    public static void renamedStaticMethod(int i) {
+    }
+
+    private static void staticMethod(String s) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameMethod/multi/staticImport4/after/pack2/Usage.java b/java/java-tests/testData/refactoring/renameMethod/multi/staticImport4/after/pack2/Usage.java
new file mode 100644
index 0000000..1ac9fbe
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameMethod/multi/staticImport4/after/pack2/Usage.java
@@ -0,0 +1,9 @@
+package pack2;
+
+import static pack1.A.renamedStaticMethod;
+
+class Usage {
+    {
+        renamedStaticMethod(27);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameMethod/multi/staticImport4/before/pack1/A.java b/java/java-tests/testData/refactoring/renameMethod/multi/staticImport4/before/pack1/A.java
new file mode 100644
index 0000000..e9b34eb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameMethod/multi/staticImport4/before/pack1/A.java
@@ -0,0 +1,9 @@
+package pack1;
+
+public class A {
+    public static void staticMethod(int i) {
+    }
+
+    private static void staticMethod(String s) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameMethod/multi/staticImport4/before/pack2/Usage.java b/java/java-tests/testData/refactoring/renameMethod/multi/staticImport4/before/pack2/Usage.java
new file mode 100644
index 0000000..2338779
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameMethod/multi/staticImport4/before/pack2/Usage.java
@@ -0,0 +1,9 @@
+package pack2;
+
+import static pack1.A.staticMethod;
+
+class Usage {
+    {
+        staticMethod(27);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/constructorChain/after/Builder.java b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/constructorChain/after/Builder.java
new file mode 100644
index 0000000..7395f96
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/constructorChain/after/Builder.java
@@ -0,0 +1,12 @@
+public class Builder {
+    private int i = 2;
+
+    public Builder setI(int i) {
+        this.i = i;
+        return this;
+    }
+
+    public Test createTest() {
+        return new Test(i);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/constructorChain/after/Test.java b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/constructorChain/after/Test.java
new file mode 100644
index 0000000..bc6bfdf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/constructorChain/after/Test.java
@@ -0,0 +1,10 @@
+public class Test {
+  public Test(int i){}
+  public Test(){
+    this(2);
+  }
+  void foo(){}
+  public static void main(String[] args){
+    new Builder().setI(1).createTest().foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/constructorChain/before/Test.java b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/constructorChain/before/Test.java
new file mode 100644
index 0000000..ab8ea18
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/constructorChain/before/Test.java
@@ -0,0 +1,10 @@
+public class Test {
+  public Test(int i){}
+  public Test(){
+    this(2);
+  }
+  void foo(){}
+  public static void main(String[] args){
+    new Test(1).foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/constructorChainWithoutDefaults/after/Builder.java b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/constructorChainWithoutDefaults/after/Builder.java
new file mode 100644
index 0000000..347dfc9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/constructorChainWithoutDefaults/after/Builder.java
@@ -0,0 +1,18 @@
+public class Builder {
+    private int i = 2;
+    private int j;
+
+    public Builder setI(int i) {
+        this.i = i;
+        return this;
+    }
+
+    public Builder setJ(int j) {
+        this.j = j;
+        return this;
+    }
+
+    public Test createTest() {
+        return new Test(i, j);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/constructorChainWithoutDefaults/after/Test.java b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/constructorChainWithoutDefaults/after/Test.java
new file mode 100644
index 0000000..07c1679
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/constructorChainWithoutDefaults/after/Test.java
@@ -0,0 +1,11 @@
+public class Test {
+  public Test(int i, int j){}
+  public Test(int j){
+    this(2, j);
+  }
+  void foo(){}
+  public static void main(String[] args){
+    new Builder().setJ(1).createTest().foo();
+    new Builder().setI(2).setJ(3).createTest().foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/constructorChainWithoutDefaults/before/Test.java b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/constructorChainWithoutDefaults/before/Test.java
new file mode 100644
index 0000000..5d62250
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/constructorChainWithoutDefaults/before/Test.java
@@ -0,0 +1,11 @@
+public class Test {
+  public Test(int i, int j){}
+  public Test(int j){
+    this(2, j);
+  }
+  void foo(){}
+  public static void main(String[] args){
+    new Test(1).foo();
+    new Test(2, 3).foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/constructorTree/after/Test.java b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/constructorTree/after/Test.java
new file mode 100644
index 0000000..6b9b657
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/constructorTree/after/Test.java
@@ -0,0 +1,15 @@
+public class Test {
+  String str;
+  public Test(int i){}
+  public Test(){
+    this(2);
+  }
+  public Test(String s){
+    this(3);
+    str = s;
+  }
+  void foo(){}
+  public static void main(String[] args){
+    new Test(1).foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/constructorTree/before/Test.java b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/constructorTree/before/Test.java
new file mode 100644
index 0000000..6b9b657
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/constructorTree/before/Test.java
@@ -0,0 +1,15 @@
+public class Test {
+  String str;
+  public Test(int i){}
+  public Test(){
+    this(2);
+  }
+  public Test(String s){
+    this(3);
+    str = s;
+  }
+  void foo(){}
+  public static void main(String[] args){
+    new Test(1).foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/existingEmptyBuilder/after/Builder.java b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/existingEmptyBuilder/after/Builder.java
new file mode 100644
index 0000000..c130ec8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/existingEmptyBuilder/after/Builder.java
@@ -0,0 +1,13 @@
+public class Builder {
+
+    private int[] i;
+
+    public Builder setI(int... i) {
+        this.i = i;
+        return this;
+    }
+
+    public Test createTest() {
+        return new Test(i);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/existingEmptyBuilder/after/Test.java b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/existingEmptyBuilder/after/Test.java
new file mode 100644
index 0000000..9efc7ff
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/existingEmptyBuilder/after/Test.java
@@ -0,0 +1,7 @@
+public class Test {
+  public Test(int... i){}
+  void foo(){}
+  public static void main(String[] args){
+    new Builder().setI(1, 2, 3).createTest().foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/existingEmptyBuilder/before/Builder.java b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/existingEmptyBuilder/before/Builder.java
new file mode 100644
index 0000000..11ff461
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/existingEmptyBuilder/before/Builder.java
@@ -0,0 +1,3 @@
+public class Builder {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/existingEmptyBuilder/before/Test.java b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/existingEmptyBuilder/before/Test.java
new file mode 100644
index 0000000..be0ebb4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/existingEmptyBuilder/before/Test.java
@@ -0,0 +1,7 @@
+public class Test {
+  public Test(int... i){}
+  void foo(){}
+  public static void main(String[] args){
+    new Test(1, 2, 3).foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/existingHalfEmptyBuilder/after/Builder.java b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/existingHalfEmptyBuilder/after/Builder.java
new file mode 100644
index 0000000..e2f83a7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/existingHalfEmptyBuilder/after/Builder.java
@@ -0,0 +1,18 @@
+public class Builder {
+    private int[] i;
+    private int j;
+
+    public Builder setI(int... i) {
+        this.i = i;
+        return this;
+    }
+
+    public Test createTest() {
+        return new Test(j, i);
+    }
+
+    public Builder setJ(int j) {
+        this.j = j;
+        return this;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/existingHalfEmptyBuilder/after/Test.java b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/existingHalfEmptyBuilder/after/Test.java
new file mode 100644
index 0000000..1403d56
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/existingHalfEmptyBuilder/after/Test.java
@@ -0,0 +1,7 @@
+public class Test {
+  public Test(int j, int... i){}
+  void foo(){}
+  public static void main(String[] args){
+    new Builder().setJ(1).setI(2, 3).createTest().foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/existingHalfEmptyBuilder/before/Builder.java b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/existingHalfEmptyBuilder/before/Builder.java
new file mode 100644
index 0000000..e88a151
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/existingHalfEmptyBuilder/before/Builder.java
@@ -0,0 +1,12 @@
+public class Builder {
+    private int[] i;
+
+    public Builder setI(int... i) {
+        this.i = i;
+        return this;
+    }
+
+    public Test createTest() {
+        return new Test(j, i);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/existingHalfEmptyBuilder/before/Test.java b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/existingHalfEmptyBuilder/before/Test.java
new file mode 100644
index 0000000..113af66
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/existingHalfEmptyBuilder/before/Test.java
@@ -0,0 +1,7 @@
+public class Test {
+  public Test(int j, int... i){}
+  void foo(){}
+  public static void main(String[] args){
+    new Test(1, 2, 3).foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/existingVoidSettersBuilder/after/Builder.java b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/existingVoidSettersBuilder/after/Builder.java
new file mode 100644
index 0000000..e2f83a7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/existingVoidSettersBuilder/after/Builder.java
@@ -0,0 +1,18 @@
+public class Builder {
+    private int[] i;
+    private int j;
+
+    public Builder setI(int... i) {
+        this.i = i;
+        return this;
+    }
+
+    public Test createTest() {
+        return new Test(j, i);
+    }
+
+    public Builder setJ(int j) {
+        this.j = j;
+        return this;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/existingVoidSettersBuilder/after/Test.java b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/existingVoidSettersBuilder/after/Test.java
new file mode 100644
index 0000000..1403d56
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/existingVoidSettersBuilder/after/Test.java
@@ -0,0 +1,7 @@
+public class Test {
+  public Test(int j, int... i){}
+  void foo(){}
+  public static void main(String[] args){
+    new Builder().setJ(1).setI(2, 3).createTest().foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/existingVoidSettersBuilder/before/Builder.java b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/existingVoidSettersBuilder/before/Builder.java
new file mode 100644
index 0000000..1ed4e67
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/existingVoidSettersBuilder/before/Builder.java
@@ -0,0 +1,11 @@
+public class Builder {
+    private int[] i;
+
+    public void setI(int... i) {
+        this.i = i;
+    }
+
+    public Test createTest() {
+        return new Test(j, i);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/existingVoidSettersBuilder/before/Test.java b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/existingVoidSettersBuilder/before/Test.java
new file mode 100644
index 0000000..113af66
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/existingVoidSettersBuilder/before/Test.java
@@ -0,0 +1,7 @@
+public class Test {
+  public Test(int j, int... i){}
+  void foo(){}
+  public static void main(String[] args){
+    new Test(1, 2, 3).foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/generics/after/Builder.java b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/generics/after/Builder.java
new file mode 100644
index 0000000..ce435c3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/generics/after/Builder.java
@@ -0,0 +1,12 @@
+public class Builder<T> {
+    private T t;
+
+    public Builder setT(T t) {
+        this.t = t;
+        return this;
+    }
+
+    public Test createTest() {
+        return new Test(t);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/generics/after/Test.java b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/generics/after/Test.java
new file mode 100644
index 0000000..732c6d1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/generics/after/Test.java
@@ -0,0 +1,7 @@
+public class Test<T> {
+  public Test(T t){}
+  void foo(){}
+  public static void main(T args){
+    new Builder().setT(args).createTest().foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/generics/before/Test.java b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/generics/before/Test.java
new file mode 100644
index 0000000..4bf6285
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/generics/before/Test.java
@@ -0,0 +1,7 @@
+public class Test<T> {
+  public Test(T t){}
+  void foo(){}
+  public static void main(T args){
+    new Test(args).foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/imports/after/Bar.java b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/imports/after/Bar.java
new file mode 100644
index 0000000..4722e51
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/imports/after/Bar.java
@@ -0,0 +1,5 @@
+import foo.Builder;
+
+public class Bar {
+    final Test foo = new Builder().setBar("bar").createTest();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/imports/after/Test.java b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/imports/after/Test.java
new file mode 100644
index 0000000..3cc05c4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/imports/after/Test.java
@@ -0,0 +1,7 @@
+public class Test {
+    private final String bar;
+
+    public Test(final String bar) {
+        this.bar = bar;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/imports/after/foo/Builder.java b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/imports/after/foo/Builder.java
new file mode 100644
index 0000000..0887c55
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/imports/after/foo/Builder.java
@@ -0,0 +1,14 @@
+package foo;
+
+public class Builder {
+    private String bar;
+
+    public Builder setBar(String bar) {
+        this.bar = bar;
+        return this;
+    }
+
+    public Test createTest() {
+        return new Test(bar);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/imports/before/Bar.java b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/imports/before/Bar.java
new file mode 100644
index 0000000..9c0c5a9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/imports/before/Bar.java
@@ -0,0 +1,3 @@
+public class Bar {
+    final Test foo = new Test("bar");
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/imports/before/Test.java b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/imports/before/Test.java
new file mode 100644
index 0000000..3cc05c4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/imports/before/Test.java
@@ -0,0 +1,7 @@
+public class Test {
+    private final String bar;
+
+    public Test(final String bar) {
+        this.bar = bar;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/multipleParams/after/Builder.java b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/multipleParams/after/Builder.java
new file mode 100644
index 0000000..4f578db
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/multipleParams/after/Builder.java
@@ -0,0 +1,18 @@
+public class Builder {
+    private int j;
+    private int[] i;
+
+    public Builder setJ(int j) {
+        this.j = j;
+        return this;
+    }
+
+    public Builder setI(int... i) {
+        this.i = i;
+        return this;
+    }
+
+    public Test createTest() {
+        return new Test(j, i);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/multipleParams/after/Test.java b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/multipleParams/after/Test.java
new file mode 100644
index 0000000..1403d56
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/multipleParams/after/Test.java
@@ -0,0 +1,7 @@
+public class Test {
+  public Test(int j, int... i){}
+  void foo(){}
+  public static void main(String[] args){
+    new Builder().setJ(1).setI(2, 3).createTest().foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/multipleParams/before/Test.java b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/multipleParams/before/Test.java
new file mode 100644
index 0000000..113af66
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/multipleParams/before/Test.java
@@ -0,0 +1,7 @@
+public class Test {
+  public Test(int j, int... i){}
+  void foo(){}
+  public static void main(String[] args){
+    new Test(1, 2, 3).foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/varargs/after/Builder.java b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/varargs/after/Builder.java
new file mode 100644
index 0000000..aa1ee87
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/varargs/after/Builder.java
@@ -0,0 +1,12 @@
+public class Builder {
+    private int[] i;
+
+    public Builder setI(int... i) {
+        this.i = i;
+        return this;
+    }
+
+    public Test createTest() {
+        return new Test(i);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/varargs/after/Test.java b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/varargs/after/Test.java
new file mode 100644
index 0000000..4486a59
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/varargs/after/Test.java
@@ -0,0 +1,8 @@
+public class Test {
+  public Test(int... i){}
+  void foo(){}
+  public static void main(String[] args){
+    new Builder().setI(1, 2, 3).createTest().foo();
+    new Builder().createTest().foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/varargs/before/Test.java b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/varargs/before/Test.java
new file mode 100644
index 0000000..47e68a5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithBuilder/varargs/before/Test.java
@@ -0,0 +1,8 @@
+public class Test {
+  public Test(int... i){}
+  void foo(){}
+  public static void main(String[] args){
+    new Test(1, 2, 3).foo();
+    new Test().foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithFactory/after01.java b/java/java-tests/testData/refactoring/replaceConstructorWithFactory/after01.java
new file mode 100644
index 0000000..55ba35c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithFactory/after01.java
@@ -0,0 +1,8 @@
+class A {
+    private A() {
+    }
+
+    static A newA() {
+        return new A();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithFactory/after02.java b/java/java-tests/testData/refactoring/replaceConstructorWithFactory/after02.java
new file mode 100644
index 0000000..d3565b0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithFactory/after02.java
@@ -0,0 +1,22 @@
+class A {
+    A(int i) {
+    }
+
+    public static A newA(int i) {
+        return new A(i);
+    }
+
+    A method() {
+        return newA(10);
+    }
+}
+
+class B extends A {
+    B(int j) {
+        super(j+1);
+    }
+}
+
+class Usage {
+    A a = A.newA(2);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithFactory/after03.java b/java/java-tests/testData/refactoring/replaceConstructorWithFactory/after03.java
new file mode 100644
index 0000000..691d925
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithFactory/after03.java
@@ -0,0 +1,12 @@
+class A<caret> {
+    private A() {
+    }
+
+    static A newA() {
+        return new A();
+    }
+}
+
+public class B {
+    A a = A.newA();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithFactory/after04.java b/java/java-tests/testData/refactoring/replaceConstructorWithFactory/after04.java
new file mode 100644
index 0000000..e3c874d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithFactory/after04.java
@@ -0,0 +1,17 @@
+class OuterClass {
+    InnerClass newInnerClass(int _i) {
+        return new InnerClass(_i);
+    }
+
+    class InnerClass {
+        int i;
+        private InnerClass(int _i) {
+            i = _i;
+        }
+    }
+    InnerClass myInner = newInnerClass(27);
+    static int method() {
+        OuterClass test = new OuterClass();
+        InnerClass inner = test.newInnerClass(15);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithFactory/after05.java b/java/java-tests/testData/refactoring/replaceConstructorWithFactory/after05.java
new file mode 100644
index 0000000..1dbd44a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithFactory/after05.java
@@ -0,0 +1,14 @@
+class A {
+    A(int i) {
+    }
+
+    static A newA(int i) {
+        return new A(i);
+    }
+}
+
+class B extends A {
+    B(int i) {
+      super(i);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithFactory/after06.java b/java/java-tests/testData/refactoring/replaceConstructorWithFactory/after06.java
new file mode 100644
index 0000000..91fbd4d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithFactory/after06.java
@@ -0,0 +1,13 @@
+class A {
+    A() {
+    }
+
+    static A newA() {
+        return new A();
+    }
+}
+
+class B extends A {
+    B() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithFactory/after07.java b/java/java-tests/testData/refactoring/replaceConstructorWithFactory/after07.java
new file mode 100644
index 0000000..55ba35c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithFactory/after07.java
@@ -0,0 +1,8 @@
+class A {
+    private A() {
+    }
+
+    static A newA() {
+        return new A();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithFactory/after08.java b/java/java-tests/testData/refactoring/replaceConstructorWithFactory/after08.java
new file mode 100644
index 0000000..ca8bfe8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithFactory/after08.java
@@ -0,0 +1,8 @@
+class Test<A,B,C> {
+    private Test() {
+    }
+
+    public static <A, B, C> Test<A, B, C> newTest() {
+        return new Test<A, B, C>();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithFactory/before01.java b/java/java-tests/testData/refactoring/replaceConstructorWithFactory/before01.java
new file mode 100644
index 0000000..ff426d1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithFactory/before01.java
@@ -0,0 +1,4 @@
+class A {
+    A() {<caret>
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithFactory/before02.java b/java/java-tests/testData/refactoring/replaceConstructorWithFactory/before02.java
new file mode 100644
index 0000000..1223112
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithFactory/before02.java
@@ -0,0 +1,18 @@
+class A {
+    public A(int i) {<caret>
+    }
+
+    A method() {
+        return new A(10);
+    }
+}
+
+class B extends A {
+    B(int j) {
+        super(j+1);
+    }
+}
+
+class Usage {
+    A a = new A(2);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithFactory/before03.java b/java/java-tests/testData/refactoring/replaceConstructorWithFactory/before03.java
new file mode 100644
index 0000000..813c536
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithFactory/before03.java
@@ -0,0 +1,6 @@
+class A<caret> {
+}
+
+public class B {
+    A a = new A();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithFactory/before04.java b/java/java-tests/testData/refactoring/replaceConstructorWithFactory/before04.java
new file mode 100644
index 0000000..2260e2f3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithFactory/before04.java
@@ -0,0 +1,13 @@
+class OuterClass {
+    class InnerClass {
+        int i;
+        InnerClass(int _i) {<caret>
+            i = _i;
+        }
+    }
+    InnerClass myInner = new InnerClass(27);
+    static int method() {
+        OuterClass test = new OuterClass();
+        InnerClass inner = test.new InnerClass(15);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithFactory/before05.java b/java/java-tests/testData/refactoring/replaceConstructorWithFactory/before05.java
new file mode 100644
index 0000000..398322d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithFactory/before05.java
@@ -0,0 +1,10 @@
+class A {
+    A(int i) {<caret>
+    }
+}
+
+class B extends A {
+    B(int i) {
+      super(i);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithFactory/before06.java b/java/java-tests/testData/refactoring/replaceConstructorWithFactory/before06.java
new file mode 100644
index 0000000..dd50cca0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithFactory/before06.java
@@ -0,0 +1,9 @@
+class A {
+    A() {<caret>
+    }
+}
+
+class B extends A {
+    B() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithFactory/before07.java b/java/java-tests/testData/refactoring/replaceConstructorWithFactory/before07.java
new file mode 100644
index 0000000..928a664
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithFactory/before07.java
@@ -0,0 +1,2 @@
+class A {<caret>
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/replaceConstructorWithFactory/before08.java b/java/java-tests/testData/refactoring/replaceConstructorWithFactory/before08.java
new file mode 100644
index 0000000..7f4840b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/replaceConstructorWithFactory/before08.java
@@ -0,0 +1,4 @@
+class Test<A,B,C> {
+    public <caret>Test() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/safeDelete/LastResourceVariable.java b/java/java-tests/testData/refactoring/safeDelete/LastResourceVariable.java
new file mode 100644
index 0000000..9fed105
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/LastResourceVariable.java
@@ -0,0 +1,6 @@
+class ARM {
+  void f() {
+    try (AutoCloseable <caret>r = null) {
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/safeDelete/LastResourceVariable_after.java b/java/java-tests/testData/refactoring/safeDelete/LastResourceVariable_after.java
new file mode 100644
index 0000000..299e83c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/LastResourceVariable_after.java
@@ -0,0 +1,6 @@
+class ARM {
+  void f() {
+    try {
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/safeDelete/LastTypeParam.java b/java/java-tests/testData/refactoring/safeDelete/LastTypeParam.java
new file mode 100644
index 0000000..d6f03a4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/LastTypeParam.java
@@ -0,0 +1,8 @@
+public class Test<T<caret>T> {}
+
+class Foo {
+        void test() {
+                Test<String> test = new Test<>();
+                Test<String> test2 = new Test<String>();
+        }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/safeDelete/LastTypeParam_after.java b/java/java-tests/testData/refactoring/safeDelete/LastTypeParam_after.java
new file mode 100644
index 0000000..52e4dcf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/LastTypeParam_after.java
@@ -0,0 +1,8 @@
+public class Test {}
+
+class Foo {
+        void test() {
+                Test test = new Test();
+                Test test2 = new Test();
+        }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/safeDelete/StripOverride.java b/java/java-tests/testData/refactoring/safeDelete/StripOverride.java
new file mode 100644
index 0000000..ce3dd44
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/StripOverride.java
@@ -0,0 +1,14 @@
+interface Am {
+    String getIc<caret>on();
+}
+
+class AIIm implements Am {
+    @Override
+    public String getIcon() {
+        return null;
+    }
+
+    public static void main(String[] args) {
+        new AIIm().getIcon();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/safeDelete/StripOverride_after.java b/java/java-tests/testData/refactoring/safeDelete/StripOverride_after.java
new file mode 100644
index 0000000..4fdf0a1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/StripOverride_after.java
@@ -0,0 +1,12 @@
+interface Am {
+}
+
+class AIIm implements Am {
+    private String getIcon() {
+        return null;
+    }
+
+    public static void main(String[] args) {
+        new AIIm().getIcon();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/safeDelete/TypeParamFromDiamond.java b/java/java-tests/testData/refactoring/safeDelete/TypeParamFromDiamond.java
new file mode 100644
index 0000000..3b55c21
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/TypeParamFromDiamond.java
@@ -0,0 +1,8 @@
+public class Test<<caret>T, U> {}
+
+class Foo {
+        void test() {
+                Test<String, Long> test = new Test<>();
+                Test<String, Long> test2 = new Test<String, Long>();
+        }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/safeDelete/TypeParamFromDiamond_after.java b/java/java-tests/testData/refactoring/safeDelete/TypeParamFromDiamond_after.java
new file mode 100644
index 0000000..30b0727
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/TypeParamFromDiamond_after.java
@@ -0,0 +1,8 @@
+public class Test<U> {}
+
+class Foo {
+        void test() {
+                Test<Long> test = new Test<>();
+                Test<Long> test2 = new Test<Long>();
+        }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/safeDelete/enumConstructorParameter/after/UserFlags.java b/java/java-tests/testData/refactoring/safeDelete/enumConstructorParameter/after/UserFlags.java
new file mode 100644
index 0000000..fe296e2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/enumConstructorParameter/after/UserFlags.java
@@ -0,0 +1,12 @@
+public enum UserFlags {
+    Root("Has super administrative powers"),
+    Blacklisted("Probably a spammer");
+
+    public final String description;
+    public final int mask;
+
+    UserFlags(String description) {
+        this.description = description;
+        this.mask = 1 << ordinal();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/safeDelete/enumConstructorParameter/before/UserFlags.java b/java/java-tests/testData/refactoring/safeDelete/enumConstructorParameter/before/UserFlags.java
new file mode 100644
index 0000000..e5eb31c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/enumConstructorParameter/before/UserFlags.java
@@ -0,0 +1,12 @@
+public enum UserFlags {
+    Root("Has super administrative powers", 0),
+    Blacklisted("Probably a spammer", 1);
+
+    public final String description;
+    public final int mask;
+
+    UserFlags(String description, int <caret>position) {
+        this.description = description;
+        this.mask = 1 << ordinal();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/safeDelete/extendsList/after/A.java b/java/java-tests/testData/refactoring/safeDelete/extendsList/after/A.java
new file mode 100644
index 0000000..abcd4c3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/extendsList/after/A.java
@@ -0,0 +1 @@
+class A<TA>{}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/safeDelete/extendsList/after/C.java b/java/java-tests/testData/refactoring/safeDelete/extendsList/after/C.java
new file mode 100644
index 0000000..de34419
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/extendsList/after/C.java
@@ -0,0 +1 @@
+class C<TC> extends A<TC> {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/safeDelete/extendsList/before/A.java b/java/java-tests/testData/refactoring/safeDelete/extendsList/before/A.java
new file mode 100644
index 0000000..abcd4c3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/extendsList/before/A.java
@@ -0,0 +1 @@
+class A<TA>{}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/safeDelete/extendsList/before/B.java b/java/java-tests/testData/refactoring/safeDelete/extendsList/before/B.java
new file mode 100644
index 0000000..c8e8447
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/extendsList/before/B.java
@@ -0,0 +1,5 @@
+class B<caret><TB> extends A<TB>{
+  public B() {
+    super();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/safeDelete/extendsList/before/C.java b/java/java-tests/testData/refactoring/safeDelete/extendsList/before/C.java
new file mode 100644
index 0000000..60f8faf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/extendsList/before/C.java
@@ -0,0 +1 @@
+class C<TC> extends B<TC>{}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/safeDelete/implicitCtrCall/before/Sub.java b/java/java-tests/testData/refactoring/safeDelete/implicitCtrCall/before/Sub.java
new file mode 100644
index 0000000..c88af50
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/implicitCtrCall/before/Sub.java
@@ -0,0 +1,4 @@
+    class Sub extends Super {
+        public Sub() {
+        }
+    }
diff --git a/java/java-tests/testData/refactoring/safeDelete/implicitCtrCall/before/Super.java b/java/java-tests/testData/refactoring/safeDelete/implicitCtrCall/before/Super.java
new file mode 100644
index 0000000..76da723
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/implicitCtrCall/before/Super.java
@@ -0,0 +1,7 @@
+    class Super {
+        public <caret>Super() {
+        } //Safe Delete should not allow this to be deleted without first changing class Sub's constructors to use Super(String)
+
+        public Super(String name) {
+        }
+    }
diff --git a/java/java-tests/testData/refactoring/safeDelete/implicitCtrCall2/before/Sub.java b/java/java-tests/testData/refactoring/safeDelete/implicitCtrCall2/before/Sub.java
new file mode 100644
index 0000000..011539a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/implicitCtrCall2/before/Sub.java
@@ -0,0 +1,2 @@
+    class Sub extends Super {
+    }
diff --git a/java/java-tests/testData/refactoring/safeDelete/implicitCtrCall2/before/Super.java b/java/java-tests/testData/refactoring/safeDelete/implicitCtrCall2/before/Super.java
new file mode 100644
index 0000000..76da723
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/implicitCtrCall2/before/Super.java
@@ -0,0 +1,7 @@
+    class Super {
+        public <caret>Super() {
+        } //Safe Delete should not allow this to be deleted without first changing class Sub's constructors to use Super(String)
+
+        public Super(String name) {
+        }
+    }
diff --git a/java/java-tests/testData/refactoring/safeDelete/javadocParamRef/after/Super.java b/java/java-tests/testData/refactoring/safeDelete/javadocParamRef/after/Super.java
new file mode 100644
index 0000000..9db29bb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/javadocParamRef/after/Super.java
@@ -0,0 +1,8 @@
+class Super {
+  void m1(String p2) {}
+
+    /**
+     * @see #m1(String)
+     */
+    void m2() {}
+}
diff --git a/java/java-tests/testData/refactoring/safeDelete/javadocParamRef/before/Super.java b/java/java-tests/testData/refactoring/safeDelete/javadocParamRef/before/Super.java
new file mode 100644
index 0000000..8ec740f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/javadocParamRef/before/Super.java
@@ -0,0 +1,8 @@
+class Super {
+  void m1(String p<caret>1, String p2) {}
+
+    /**
+     * @see #m1(String, String)
+     */
+    void m2() {}
+}
diff --git a/java/java-tests/testData/refactoring/safeDelete/localVariable/after/Super.java b/java/java-tests/testData/refactoring/safeDelete/localVariable/after/Super.java
new file mode 100644
index 0000000..2270f5b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/localVariable/after/Super.java
@@ -0,0 +1,5 @@
+class Super {
+    void foo() {
+    }
+
+}
diff --git a/java/java-tests/testData/refactoring/safeDelete/localVariable/before/Super.java b/java/java-tests/testData/refactoring/safeDelete/localVariable/before/Super.java
new file mode 100644
index 0000000..64296e2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/localVariable/before/Super.java
@@ -0,0 +1,8 @@
+class Super {
+    void foo() {
+        int var<caret>Name = 0;
+        varName++;
+        varName = 10;
+    }
+
+}
diff --git a/java/java-tests/testData/refactoring/safeDelete/localVariableSideEffect/after/Super.java b/java/java-tests/testData/refactoring/safeDelete/localVariableSideEffect/after/Super.java
new file mode 100644
index 0000000..9104168
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/localVariableSideEffect/after/Super.java
@@ -0,0 +1,5 @@
+class Super {
+    void foo() {
+        }
+
+}
diff --git a/java/java-tests/testData/refactoring/safeDelete/localVariableSideEffect/before/Super.java b/java/java-tests/testData/refactoring/safeDelete/localVariableSideEffect/before/Super.java
new file mode 100644
index 0000000..f47b144
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/localVariableSideEffect/before/Super.java
@@ -0,0 +1,9 @@
+class Super {
+    void foo() {
+        int var<caret>Name = 0;
+        varName++;
+        varName = bar();
+    }
+    int bar() {return 0;}
+
+}
diff --git a/java/java-tests/testData/refactoring/safeDelete/methodDeepHierarchy/after/Super.java b/java/java-tests/testData/refactoring/safeDelete/methodDeepHierarchy/after/Super.java
new file mode 100644
index 0000000..c49024c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/methodDeepHierarchy/after/Super.java
@@ -0,0 +1,9 @@
+public class Super {
+
+}
+
+class Child extends Super {
+}
+
+class ChildChild extends Child {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/safeDelete/methodDeepHierarchy/before/Super.java b/java/java-tests/testData/refactoring/safeDelete/methodDeepHierarchy/before/Super.java
new file mode 100644
index 0000000..ee8fa04
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/methodDeepHierarchy/before/Super.java
@@ -0,0 +1,19 @@
+public class Super {
+    void f<caret>oo() {
+    }
+
+}
+
+class Child extends Super {
+    void foo(){
+      super.foo();
+      System.out.println("do some staff");
+    }
+}
+
+class ChildChild extends Child {
+    void foo(){
+      super.foo();
+      System.out.println("here do smth else");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/safeDelete/multipleInterfacesImplementation/after/Bar.java b/java/java-tests/testData/refactoring/safeDelete/multipleInterfacesImplementation/after/Bar.java
new file mode 100644
index 0000000..1e2187e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/multipleInterfacesImplementation/after/Bar.java
@@ -0,0 +1,9 @@
+public class Bar implements IFoo, IBar {
+    public String getText() {
+        return "hello";
+    }
+
+    public IBar getIBar() {
+        return this;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/safeDelete/multipleInterfacesImplementation/after/IBar.java b/java/java-tests/testData/refactoring/safeDelete/multipleInterfacesImplementation/after/IBar.java
new file mode 100644
index 0000000..ead66e8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/multipleInterfacesImplementation/after/IBar.java
@@ -0,0 +1,3 @@
+public interface IBar {
+    String getText();
+}
diff --git a/java/java-tests/testData/refactoring/safeDelete/multipleInterfacesImplementation/after/IFoo.java b/java/java-tests/testData/refactoring/safeDelete/multipleInterfacesImplementation/after/IFoo.java
new file mode 100644
index 0000000..233bfed
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/multipleInterfacesImplementation/after/IFoo.java
@@ -0,0 +1,3 @@
+public interface IFoo {
+    IBar getIBar();
+}
diff --git a/java/java-tests/testData/refactoring/safeDelete/multipleInterfacesImplementation/before/Bar.java b/java/java-tests/testData/refactoring/safeDelete/multipleInterfacesImplementation/before/Bar.java
new file mode 100644
index 0000000..1e2187e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/multipleInterfacesImplementation/before/Bar.java
@@ -0,0 +1,9 @@
+public class Bar implements IFoo, IBar {
+    public String getText() {
+        return "hello";
+    }
+
+    public IBar getIBar() {
+        return this;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/safeDelete/multipleInterfacesImplementation/before/IBar.java b/java/java-tests/testData/refactoring/safeDelete/multipleInterfacesImplementation/before/IBar.java
new file mode 100644
index 0000000..ead66e8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/multipleInterfacesImplementation/before/IBar.java
@@ -0,0 +1,3 @@
+public interface IBar {
+    String getText();
+}
diff --git a/java/java-tests/testData/refactoring/safeDelete/multipleInterfacesImplementation/before/IFoo.java b/java/java-tests/testData/refactoring/safeDelete/multipleInterfacesImplementation/before/IFoo.java
new file mode 100644
index 0000000..4c23896
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/multipleInterfacesImplementation/before/IFoo.java
@@ -0,0 +1,4 @@
+public interface IFoo {
+    String <caret>getText();
+    IBar getIBar();
+}
diff --git a/java/java-tests/testData/refactoring/safeDelete/multipleInterfacesImplementationThroughCommonInterface/after/Bar.java b/java/java-tests/testData/refactoring/safeDelete/multipleInterfacesImplementationThroughCommonInterface/after/Bar.java
new file mode 100644
index 0000000..4ce69e6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/multipleInterfacesImplementationThroughCommonInterface/after/Bar.java
@@ -0,0 +1,2 @@
+public interface Bar extends IFoo, IBar {
+}
diff --git a/java/java-tests/testData/refactoring/safeDelete/multipleInterfacesImplementationThroughCommonInterface/after/BarImpl.java b/java/java-tests/testData/refactoring/safeDelete/multipleInterfacesImplementationThroughCommonInterface/after/BarImpl.java
new file mode 100644
index 0000000..04d6e04
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/multipleInterfacesImplementationThroughCommonInterface/after/BarImpl.java
@@ -0,0 +1,9 @@
+public class BarImpl implements Bar {
+    public String getText() {
+        return "hello";
+    }
+
+    public IBar getIBar() {
+        return this;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/safeDelete/multipleInterfacesImplementationThroughCommonInterface/after/IBar.java b/java/java-tests/testData/refactoring/safeDelete/multipleInterfacesImplementationThroughCommonInterface/after/IBar.java
new file mode 100644
index 0000000..ead66e8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/multipleInterfacesImplementationThroughCommonInterface/after/IBar.java
@@ -0,0 +1,3 @@
+public interface IBar {
+    String getText();
+}
diff --git a/java/java-tests/testData/refactoring/safeDelete/multipleInterfacesImplementationThroughCommonInterface/after/IFoo.java b/java/java-tests/testData/refactoring/safeDelete/multipleInterfacesImplementationThroughCommonInterface/after/IFoo.java
new file mode 100644
index 0000000..233bfed
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/multipleInterfacesImplementationThroughCommonInterface/after/IFoo.java
@@ -0,0 +1,3 @@
+public interface IFoo {
+    IBar getIBar();
+}
diff --git a/java/java-tests/testData/refactoring/safeDelete/multipleInterfacesImplementationThroughCommonInterface/before/Bar.java b/java/java-tests/testData/refactoring/safeDelete/multipleInterfacesImplementationThroughCommonInterface/before/Bar.java
new file mode 100644
index 0000000..4ce69e6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/multipleInterfacesImplementationThroughCommonInterface/before/Bar.java
@@ -0,0 +1,2 @@
+public interface Bar extends IFoo, IBar {
+}
diff --git a/java/java-tests/testData/refactoring/safeDelete/multipleInterfacesImplementationThroughCommonInterface/before/BarImpl.java b/java/java-tests/testData/refactoring/safeDelete/multipleInterfacesImplementationThroughCommonInterface/before/BarImpl.java
new file mode 100644
index 0000000..04d6e04
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/multipleInterfacesImplementationThroughCommonInterface/before/BarImpl.java
@@ -0,0 +1,9 @@
+public class BarImpl implements Bar {
+    public String getText() {
+        return "hello";
+    }
+
+    public IBar getIBar() {
+        return this;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/safeDelete/multipleInterfacesImplementationThroughCommonInterface/before/IBar.java b/java/java-tests/testData/refactoring/safeDelete/multipleInterfacesImplementationThroughCommonInterface/before/IBar.java
new file mode 100644
index 0000000..ead66e8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/multipleInterfacesImplementationThroughCommonInterface/before/IBar.java
@@ -0,0 +1,3 @@
+public interface IBar {
+    String getText();
+}
diff --git a/java/java-tests/testData/refactoring/safeDelete/multipleInterfacesImplementationThroughCommonInterface/before/IFoo.java b/java/java-tests/testData/refactoring/safeDelete/multipleInterfacesImplementationThroughCommonInterface/before/IFoo.java
new file mode 100644
index 0000000..4c23896
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/multipleInterfacesImplementationThroughCommonInterface/before/IFoo.java
@@ -0,0 +1,4 @@
+public interface IFoo {
+    String <caret>getText();
+    IBar getIBar();
+}
diff --git a/java/java-tests/testData/refactoring/safeDelete/parameterInHierarchy/after/C1.java b/java/java-tests/testData/refactoring/safeDelete/parameterInHierarchy/after/C1.java
new file mode 100644
index 0000000..e6bf0c8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/parameterInHierarchy/after/C1.java
@@ -0,0 +1,5 @@
+public class C1 implements I {
+  public void f(int a1) {
+
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/safeDelete/parameterInHierarchy/after/I.java b/java/java-tests/testData/refactoring/safeDelete/parameterInHierarchy/after/I.java
new file mode 100644
index 0000000..20296d9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/parameterInHierarchy/after/I.java
@@ -0,0 +1,3 @@
+public interface I {
+  void f(int a1);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/safeDelete/parameterInHierarchy/after/Super.java b/java/java-tests/testData/refactoring/safeDelete/parameterInHierarchy/after/Super.java
new file mode 100644
index 0000000..80996b9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/parameterInHierarchy/after/Super.java
@@ -0,0 +1,5 @@
+public class C2 extends C1 {
+  public void f(int a1) {
+    super.f(a1);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/safeDelete/parameterInHierarchy/before/C1.java b/java/java-tests/testData/refactoring/safeDelete/parameterInHierarchy/before/C1.java
new file mode 100644
index 0000000..e203f99
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/parameterInHierarchy/before/C1.java
@@ -0,0 +1,5 @@
+public class C1 implements I {
+  public void f(int a1, int a2) {
+
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/safeDelete/parameterInHierarchy/before/I.java b/java/java-tests/testData/refactoring/safeDelete/parameterInHierarchy/before/I.java
new file mode 100644
index 0000000..47e45075
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/parameterInHierarchy/before/I.java
@@ -0,0 +1,3 @@
+public interface I {
+  void f(int a1, int a2);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/safeDelete/parameterInHierarchy/before/Super.java b/java/java-tests/testData/refactoring/safeDelete/parameterInHierarchy/before/Super.java
new file mode 100644
index 0000000..cda02b4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/parameterInHierarchy/before/Super.java
@@ -0,0 +1,5 @@
+public class C2 extends C1 {
+  public void f(int a1, int a<caret>2) {
+    super.f(a1, a2);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/safeDelete/removeOverridersInspiteOfUnsafeUsages/after/A.java b/java/java-tests/testData/refactoring/safeDelete/removeOverridersInspiteOfUnsafeUsages/after/A.java
new file mode 100644
index 0000000..c740454
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/removeOverridersInspiteOfUnsafeUsages/after/A.java
@@ -0,0 +1,9 @@
+public class A {
+  void foo() {
+    bar();
+  }
+
+}
+
+class B extends A {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/safeDelete/removeOverridersInspiteOfUnsafeUsages/before/A.java b/java/java-tests/testData/refactoring/safeDelete/removeOverridersInspiteOfUnsafeUsages/before/A.java
new file mode 100644
index 0000000..fb2a6c1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/removeOverridersInspiteOfUnsafeUsages/before/A.java
@@ -0,0 +1,13 @@
+public class A {
+  void foo() {
+    bar();
+  }
+
+  void b<caret>ar() {}
+}
+
+class B extends A {
+  void bar(){
+    super.bar();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/safeDelete/safeDeleteStaticImports/after/A.java b/java/java-tests/testData/refactoring/safeDelete/safeDeleteStaticImports/after/A.java
new file mode 100644
index 0000000..73e270d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/safeDeleteStaticImports/after/A.java
@@ -0,0 +1,3 @@
+public class A {
+}
+
diff --git a/java/java-tests/testData/refactoring/safeDelete/safeDeleteStaticImports/after/B.java b/java/java-tests/testData/refactoring/safeDelete/safeDeleteStaticImports/after/B.java
new file mode 100644
index 0000000..d44bef5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/safeDeleteStaticImports/after/B.java
@@ -0,0 +1,3 @@
+class B {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/safeDelete/safeDeleteStaticImports/before/A.java b/java/java-tests/testData/refactoring/safeDelete/safeDeleteStaticImports/before/A.java
new file mode 100644
index 0000000..73f3445
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/safeDeleteStaticImports/before/A.java
@@ -0,0 +1,4 @@
+public class A {
+  static void b<caret>ar() {}
+}
+
diff --git a/java/java-tests/testData/refactoring/safeDelete/safeDeleteStaticImports/before/B.java b/java/java-tests/testData/refactoring/safeDelete/safeDeleteStaticImports/before/B.java
new file mode 100644
index 0000000..5ba90f1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/safeDeleteStaticImports/before/B.java
@@ -0,0 +1,4 @@
+import static A.bar;
+class B {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/safeDelete/topParameterInHierarchy/after/C1.java b/java/java-tests/testData/refactoring/safeDelete/topParameterInHierarchy/after/C1.java
new file mode 100644
index 0000000..e6bf0c8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/topParameterInHierarchy/after/C1.java
@@ -0,0 +1,5 @@
+public class C1 implements I {
+  public void f(int a1) {
+
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/safeDelete/topParameterInHierarchy/after/I.java b/java/java-tests/testData/refactoring/safeDelete/topParameterInHierarchy/after/I.java
new file mode 100644
index 0000000..20296d9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/topParameterInHierarchy/after/I.java
@@ -0,0 +1,3 @@
+public interface I {
+  void f(int a1);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/safeDelete/topParameterInHierarchy/after/Super.java b/java/java-tests/testData/refactoring/safeDelete/topParameterInHierarchy/after/Super.java
new file mode 100644
index 0000000..80996b9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/topParameterInHierarchy/after/Super.java
@@ -0,0 +1,5 @@
+public class C2 extends C1 {
+  public void f(int a1) {
+    super.f(a1);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/safeDelete/topParameterInHierarchy/before/C1.java b/java/java-tests/testData/refactoring/safeDelete/topParameterInHierarchy/before/C1.java
new file mode 100644
index 0000000..e203f99
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/topParameterInHierarchy/before/C1.java
@@ -0,0 +1,5 @@
+public class C1 implements I {
+  public void f(int a1, int a2) {
+
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/safeDelete/topParameterInHierarchy/before/I.java b/java/java-tests/testData/refactoring/safeDelete/topParameterInHierarchy/before/I.java
new file mode 100644
index 0000000..0f75b17
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/topParameterInHierarchy/before/I.java
@@ -0,0 +1,3 @@
+public interface I {
+  void f(int a1, int a<caret>2);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/safeDelete/topParameterInHierarchy/before/Super.java b/java/java-tests/testData/refactoring/safeDelete/topParameterInHierarchy/before/Super.java
new file mode 100644
index 0000000..8974f64
--- /dev/null
+++ b/java/java-tests/testData/refactoring/safeDelete/topParameterInHierarchy/before/Super.java
@@ -0,0 +1,5 @@
+public class C2 extends C1 {
+  public void f(int a1, int a2) {
+    super.f(a1, a2);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/suggestedTypes/AssignmentWithConcatenation.java b/java/java-tests/testData/refactoring/suggestedTypes/AssignmentWithConcatenation.java
new file mode 100644
index 0000000..8a61ce4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/suggestedTypes/AssignmentWithConcatenation.java
@@ -0,0 +1,6 @@
+class Test {
+  void foo() {
+    String s = "";
+    <selection>s+="abracadabra";</selection>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/suggestedTypes/AssignmentWithoutConcatenation.java b/java/java-tests/testData/refactoring/suggestedTypes/AssignmentWithoutConcatenation.java
new file mode 100644
index 0000000..b7675fb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/suggestedTypes/AssignmentWithoutConcatenation.java
@@ -0,0 +1,7 @@
+class Test {
+  void foo() {
+    String s = "";
+    <selection>System.out.println(s);
+    s="abracadabra";</selection>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/suggestedTypes/CastInside.java b/java/java-tests/testData/refactoring/suggestedTypes/CastInside.java
new file mode 100644
index 0000000..967fe3c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/suggestedTypes/CastInside.java
@@ -0,0 +1,7 @@
+class Test {
+  void foo(Object o) {
+    <selection>((A)o).doSmth();</selection>
+  }
+}
+
+class A {void doSmth(){}}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/suggestedTypes/CastNoCast.java b/java/java-tests/testData/refactoring/suggestedTypes/CastNoCast.java
new file mode 100644
index 0000000..7e0fc0e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/suggestedTypes/CastNoCast.java
@@ -0,0 +1,14 @@
+class Test {
+  void foo(Object o) {
+    <selection>
+    if (true) {
+      ((A1)o).doSmth();
+    } else {
+      o.toString();
+    }
+    </selection>
+  }
+}
+
+class A {void doSmth(){}}
+class A1 extends A {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/suggestedTypes/LtLtByte.java b/java/java-tests/testData/refactoring/suggestedTypes/LtLtByte.java
new file mode 100644
index 0000000..903a774
--- /dev/null
+++ b/java/java-tests/testData/refactoring/suggestedTypes/LtLtByte.java
@@ -0,0 +1,6 @@
+class Test {
+  void foo() {
+    byte b = 0;
+    <selection>int i = b << 1;</selection>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/suggestedTypes/LtLtInt.java b/java/java-tests/testData/refactoring/suggestedTypes/LtLtInt.java
new file mode 100644
index 0000000..d575495
--- /dev/null
+++ b/java/java-tests/testData/refactoring/suggestedTypes/LtLtInt.java
@@ -0,0 +1,6 @@
+class Test {
+  void foo() {
+    int b = 0;
+    <selection>int i = b << 1;</selection>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/suggestedTypes/MultipleCasts.java b/java/java-tests/testData/refactoring/suggestedTypes/MultipleCasts.java
new file mode 100644
index 0000000..91aeb8a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/suggestedTypes/MultipleCasts.java
@@ -0,0 +1,15 @@
+class Test {
+  void foo(Object o) {
+    <selection>
+    if (true) {
+      ((A1)o).doSmth();
+    } else {
+      ((A2)o).doSmth();
+    }
+    </selection>
+  }
+}
+
+class A {void doSmth(){}}
+class A1 extends A {}
+class A2 extends A {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/suggestedTypes/NoCastWhenWrapped.java b/java/java-tests/testData/refactoring/suggestedTypes/NoCastWhenWrapped.java
new file mode 100644
index 0000000..4bd81856
--- /dev/null
+++ b/java/java-tests/testData/refactoring/suggestedTypes/NoCastWhenWrapped.java
@@ -0,0 +1,11 @@
+class Test {
+  void foo(Object o) {
+    <selection>
+    if (o instanceof A1) {
+      ((A1)o).doSmth();
+    }
+    </selection>
+  }
+}
+
+class A1 {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/suggestedTypes/PostfixExprUnusedAfter.java b/java/java-tests/testData/refactoring/suggestedTypes/PostfixExprUnusedAfter.java
new file mode 100644
index 0000000..66f4fbf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/suggestedTypes/PostfixExprUnusedAfter.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright 2000-2010 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 Test {
+  void foo() {
+    byte b = 0;
+    <selection>b++;</selection>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/suggestedTypes/PostfixExprUsedAsOutput.java b/java/java-tests/testData/refactoring/suggestedTypes/PostfixExprUsedAsOutput.java
new file mode 100644
index 0000000..401b76d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/suggestedTypes/PostfixExprUsedAsOutput.java
@@ -0,0 +1,7 @@
+class Test {
+  void foo() {
+    byte b = 0;
+    <selection>b++;</selection>
+    b--;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/IDEA6505/after/Test.java b/java/java-tests/testData/refactoring/turnRefsToSuper/IDEA6505/after/Test.java
new file mode 100644
index 0000000..0c8c4ff
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/IDEA6505/after/Test.java
@@ -0,0 +1,13 @@
+interface IA {
+}
+
+interface IB {
+}
+
+
+class Impl implements IA, IB {
+    public static IA createInstance() {
+        final Impl instance = new Impl();
+        return instance;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/IDEA6505/before/Test.java b/java/java-tests/testData/refactoring/turnRefsToSuper/IDEA6505/before/Test.java
new file mode 100644
index 0000000..0c8c4ff
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/IDEA6505/before/Test.java
@@ -0,0 +1,13 @@
+interface IA {
+}
+
+interface IB {
+}
+
+
+class Impl implements IA, IB {
+    public static IA createInstance() {
+        final Impl instance = new Impl();
+        return instance;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/IDEADEV23807/after/A.java b/java/java-tests/testData/refactoring/turnRefsToSuper/IDEADEV23807/after/A.java
new file mode 100644
index 0000000..eb4c38a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/IDEADEV23807/after/A.java
@@ -0,0 +1,3 @@
+interface A<T> {
+  T getT();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/IDEADEV23807/after/B.java b/java/java-tests/testData/refactoring/turnRefsToSuper/IDEADEV23807/after/B.java
new file mode 100644
index 0000000..213f930
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/IDEADEV23807/after/B.java
@@ -0,0 +1,9 @@
+import java.util.*;
+class B<V> implements A<V> {
+  public V getT(){return null;}
+  void foo(List<A<V>> list) {
+    for(A<V> b : list){
+      V v = b.getT();
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/IDEADEV23807/before/A.java b/java/java-tests/testData/refactoring/turnRefsToSuper/IDEADEV23807/before/A.java
new file mode 100644
index 0000000..eb4c38a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/IDEADEV23807/before/A.java
@@ -0,0 +1,3 @@
+interface A<T> {
+  T getT();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/IDEADEV23807/before/B.java b/java/java-tests/testData/refactoring/turnRefsToSuper/IDEADEV23807/before/B.java
new file mode 100644
index 0000000..6e7d832
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/IDEADEV23807/before/B.java
@@ -0,0 +1,9 @@
+import java.util.*;
+class B<V> implements A<V> {
+  public V getT(){return null;}
+  void foo(List<B<V>> list) {
+    for(B<V> b : list){
+      V v = b.getT();
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/IDEADEV25669/after/Client.java b/java/java-tests/testData/refactoring/turnRefsToSuper/IDEADEV25669/after/Client.java
new file mode 100644
index 0000000..a3dcb7a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/IDEADEV25669/after/Client.java
@@ -0,0 +1,5 @@
+import p.A;
+
+class Client {
+  A a;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/IDEADEV25669/after/p/A.java b/java/java-tests/testData/refactoring/turnRefsToSuper/IDEADEV25669/after/p/A.java
new file mode 100644
index 0000000..b7863dc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/IDEADEV25669/after/p/A.java
@@ -0,0 +1,9 @@
+package p;
+
+class Base {
+
+}
+
+public class A extends Base {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/IDEADEV25669/before/Client.java b/java/java-tests/testData/refactoring/turnRefsToSuper/IDEADEV25669/before/Client.java
new file mode 100644
index 0000000..a3dcb7a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/IDEADEV25669/before/Client.java
@@ -0,0 +1,5 @@
+import p.A;
+
+class Client {
+  A a;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/IDEADEV25669/before/p/A.java b/java/java-tests/testData/refactoring/turnRefsToSuper/IDEADEV25669/before/p/A.java
new file mode 100644
index 0000000..b7863dc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/IDEADEV25669/before/p/A.java
@@ -0,0 +1,9 @@
+package p;
+
+class Base {
+
+}
+
+public class A extends Base {
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/IDEADEV5517/after/Test.java b/java/java-tests/testData/refactoring/turnRefsToSuper/IDEADEV5517/after/Test.java
new file mode 100644
index 0000000..8519e3c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/IDEADEV5517/after/Test.java
@@ -0,0 +1,21 @@
+interface Int<T> {
+    void method(T x);
+}
+
+class Sub implements Int<XInt> {
+    public void method(XInt x) {
+        x.inInt();
+    }
+}
+
+interface XInt {
+    void inInt();
+}
+
+class Xyz implements XInt {
+    public void inInt() {
+    }
+
+    public void m1() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/IDEADEV5517/before/Test.java b/java/java-tests/testData/refactoring/turnRefsToSuper/IDEADEV5517/before/Test.java
new file mode 100644
index 0000000..673c365
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/IDEADEV5517/before/Test.java
@@ -0,0 +1,21 @@
+interface Int<T> {
+    void method(T x);
+}
+
+class Sub implements Int<Xyz> {
+    public void method(Xyz x) {
+        x.inInt();
+    }
+}
+
+interface XInt {
+    void inInt();
+}
+
+class Xyz implements XInt {
+    public void inInt() {
+    }
+
+    public void m1() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/IDEADEV5517NOOP/after/Test.java b/java/java-tests/testData/refactoring/turnRefsToSuper/IDEADEV5517NOOP/after/Test.java
new file mode 100644
index 0000000..3359088
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/IDEADEV5517NOOP/after/Test.java
@@ -0,0 +1,27 @@
+interface Int<T> {
+    void method(T x);
+    void method1(T x);
+}
+
+class Sub implements Int<Xyz> {
+    public void method(Xyz x) {
+        x.inInt();
+    }
+
+
+    public void method1(final Xyz x) {
+        x.m1();
+    }
+}
+
+interface XInt {
+    void inInt();
+}
+
+class Xyz implements XInt {
+    public void inInt() {
+    }
+
+    public void m1() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/IDEADEV5517NOOP/before/Test.java b/java/java-tests/testData/refactoring/turnRefsToSuper/IDEADEV5517NOOP/before/Test.java
new file mode 100644
index 0000000..3359088
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/IDEADEV5517NOOP/before/Test.java
@@ -0,0 +1,27 @@
+interface Int<T> {
+    void method(T x);
+    void method1(T x);
+}
+
+class Sub implements Int<Xyz> {
+    public void method(Xyz x) {
+        x.inInt();
+    }
+
+
+    public void method1(final Xyz x) {
+        x.m1();
+    }
+}
+
+interface XInt {
+    void inInt();
+}
+
+class Xyz implements XInt {
+    public void inInt() {
+    }
+
+    public void m1() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/IDEADEV6136/after/A.java b/java/java-tests/testData/refactoring/turnRefsToSuper/IDEADEV6136/after/A.java
new file mode 100644
index 0000000..75217d27
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/IDEADEV6136/after/A.java
@@ -0,0 +1,12 @@
+class B {
+    public class Inner {
+    }
+}
+
+class A extends B {}
+
+class Client {
+    public B.Inner getInner() {
+        return null;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/IDEADEV6136/before/A.java b/java/java-tests/testData/refactoring/turnRefsToSuper/IDEADEV6136/before/A.java
new file mode 100644
index 0000000..b9b5752
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/IDEADEV6136/before/A.java
@@ -0,0 +1,12 @@
+class B {
+    public class Inner {
+    }
+}
+
+class A extends B {}
+
+class Client {
+    public A.Inner getInner() {
+        return null;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/anonymousWithTypeArguments/after/Clazz.java b/java/java-tests/testData/refactoring/turnRefsToSuper/anonymousWithTypeArguments/after/Clazz.java
new file mode 100644
index 0000000..ad5dffb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/anonymousWithTypeArguments/after/Clazz.java
@@ -0,0 +1,20 @@
+interface IntF {
+}
+
+interface Factory<E extends IntF> {
+    E create();
+    void save(E obj);
+
+    static class helper {
+        static Factory<IntF> get2() {
+            return (Factory)new Factory<IntF>() {
+                public IntF create() { return null; }
+                public void save(IntF obj) { }
+            };
+        }
+    }
+}
+
+
+public class Clazz implements IntF {
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/anonymousWithTypeArguments/before/Clazz.java b/java/java-tests/testData/refactoring/turnRefsToSuper/anonymousWithTypeArguments/before/Clazz.java
new file mode 100644
index 0000000..9151a82
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/anonymousWithTypeArguments/before/Clazz.java
@@ -0,0 +1,20 @@
+interface IntF {
+}
+
+interface Factory<E extends IntF> {
+    E create();
+    void save(E obj);
+
+    static class helper {
+        static Factory<IntF> get2() {
+            return (Factory)new Factory<Clazz>() {
+                public Clazz create() { return null; }
+                public void save(Clazz obj) { }
+            };
+        }
+    }
+}
+
+
+public class Clazz implements IntF {
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/arrayElementAssignment/after/C.java b/java/java-tests/testData/refactoring/turnRefsToSuper/arrayElementAssignment/after/C.java
new file mode 100644
index 0000000..a9fcfe3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/arrayElementAssignment/after/C.java
@@ -0,0 +1,2 @@
+public class C implements I{
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/arrayElementAssignment/after/Client.java b/java/java-tests/testData/refactoring/turnRefsToSuper/arrayElementAssignment/after/Client.java
new file mode 100644
index 0000000..73f5e1a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/arrayElementAssignment/after/Client.java
@@ -0,0 +1,10 @@
+public class Client {
+    I[] array;
+  
+    {
+        array = new I[0];
+        for(int i = 0; i < array.length; i++){
+          array[i] = new C();
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/arrayElementAssignment/after/I.java b/java/java-tests/testData/refactoring/turnRefsToSuper/arrayElementAssignment/after/I.java
new file mode 100644
index 0000000..288bec1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/arrayElementAssignment/after/I.java
@@ -0,0 +1,2 @@
+public interface I {
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/arrayElementAssignment/before/C.java b/java/java-tests/testData/refactoring/turnRefsToSuper/arrayElementAssignment/before/C.java
new file mode 100644
index 0000000..a9fcfe3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/arrayElementAssignment/before/C.java
@@ -0,0 +1,2 @@
+public class C implements I{
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/arrayElementAssignment/before/Client.java b/java/java-tests/testData/refactoring/turnRefsToSuper/arrayElementAssignment/before/Client.java
new file mode 100644
index 0000000..f27e797
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/arrayElementAssignment/before/Client.java
@@ -0,0 +1,10 @@
+public class Client {
+    C[] array;
+  
+    {
+        array = new C[0];
+        for(int i = 0; i < array.length; i++){
+          array[i] = new C();
+        }
+    }
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/arrayElementAssignment/before/I.java b/java/java-tests/testData/refactoring/turnRefsToSuper/arrayElementAssignment/before/I.java
new file mode 100644
index 0000000..288bec1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/arrayElementAssignment/before/I.java
@@ -0,0 +1,2 @@
+public interface I {
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/cast/after/A.java b/java/java-tests/testData/refactoring/turnRefsToSuper/cast/after/A.java
new file mode 100644
index 0000000..5148345
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/cast/after/A.java
@@ -0,0 +1,5 @@
+class A implements I {
+   int method() {
+       return 0;
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/cast/after/Client.java b/java/java-tests/testData/refactoring/turnRefsToSuper/cast/after/Client.java
new file mode 100644
index 0000000..e58b359
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/cast/after/Client.java
@@ -0,0 +1,11 @@
+class Client {
+   I getI() { return null; };
+
+   void method() {
+        I a = getI();
+   }
+
+   int anotherMethod() {
+       return getI().method();
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/cast/after/I.java b/java/java-tests/testData/refactoring/turnRefsToSuper/cast/after/I.java
new file mode 100644
index 0000000..27f3c66
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/cast/after/I.java
@@ -0,0 +1,3 @@
+interface I {
+    int method();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/cast/before/A.java b/java/java-tests/testData/refactoring/turnRefsToSuper/cast/before/A.java
new file mode 100644
index 0000000..5148345
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/cast/before/A.java
@@ -0,0 +1,5 @@
+class A implements I {
+   int method() {
+       return 0;
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/cast/before/Client.java b/java/java-tests/testData/refactoring/turnRefsToSuper/cast/before/Client.java
new file mode 100644
index 0000000..0fe5cd0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/cast/before/Client.java
@@ -0,0 +1,11 @@
+class Client {
+   I getI() { return null; };
+
+   void method() {
+        A a = (A) getI();
+   }
+
+   int anotherMethod() {
+       return ((A) getI()).method();
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/cast/before/I.java b/java/java-tests/testData/refactoring/turnRefsToSuper/cast/before/I.java
new file mode 100644
index 0000000..27f3c66
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/cast/before/I.java
@@ -0,0 +1,3 @@
+interface I {
+    int method();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/classUsage/after/A.java b/java/java-tests/testData/refactoring/turnRefsToSuper/classUsage/after/A.java
new file mode 100644
index 0000000..92b7623
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/classUsage/after/A.java
@@ -0,0 +1,5 @@
+class A implements I {
+   int method() {
+        return 0;
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/classUsage/after/Client.java b/java/java-tests/testData/refactoring/turnRefsToSuper/classUsage/after/Client.java
new file mode 100644
index 0000000..9b39f01
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/classUsage/after/Client.java
@@ -0,0 +1,9 @@
+public class Client {
+    Class getClass() {
+        return A.class;
+    }
+
+    int m(I a) {
+        return I.method();
+    } 
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/classUsage/after/I.java b/java/java-tests/testData/refactoring/turnRefsToSuper/classUsage/after/I.java
new file mode 100644
index 0000000..27f3c66
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/classUsage/after/I.java
@@ -0,0 +1,3 @@
+interface I {
+    int method();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/classUsage/before/A.java b/java/java-tests/testData/refactoring/turnRefsToSuper/classUsage/before/A.java
new file mode 100644
index 0000000..92b7623
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/classUsage/before/A.java
@@ -0,0 +1,5 @@
+class A implements I {
+   int method() {
+        return 0;
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/classUsage/before/Client.java b/java/java-tests/testData/refactoring/turnRefsToSuper/classUsage/before/Client.java
new file mode 100644
index 0000000..6a2f88e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/classUsage/before/Client.java
@@ -0,0 +1,9 @@
+public class Client {
+    Class getClass() {
+        return A.class;
+    }
+
+    int m(A a) {
+        return A.method();
+    } 
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/classUsage/before/I.java b/java/java-tests/testData/refactoring/turnRefsToSuper/classUsage/before/I.java
new file mode 100644
index 0000000..27f3c66
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/classUsage/before/I.java
@@ -0,0 +1,3 @@
+interface I {
+    int method();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/commonInheritor/after/Client.java b/java/java-tests/testData/refactoring/turnRefsToSuper/commonInheritor/after/Client.java
new file mode 100644
index 0000000..e7ba92b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/commonInheritor/after/Client.java
@@ -0,0 +1,20 @@
+class Client
+{
+
+    interface L { void m (); }
+
+    class V implements L { 
+	void m () { }
+	void q () { }
+    }
+
+    //------------------------------------
+ 
+    class C  {
+	int method(L v) {  return 0; }
+    }
+    
+    interface I { int method(L v); }
+
+    class D extends C implements I { }
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/commonInheritor/before/Client.java b/java/java-tests/testData/refactoring/turnRefsToSuper/commonInheritor/before/Client.java
new file mode 100644
index 0000000..6ae4064
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/commonInheritor/before/Client.java
@@ -0,0 +1,20 @@
+class Client
+{
+
+    interface L { void m (); }
+
+    class V implements L { 
+	void m () { }
+	void q () { }
+    }
+
+    //------------------------------------
+ 
+    class C  {
+	int method(V v) {  return 0; }
+    }
+    
+    interface I { int method(V v); }
+
+    class D extends C implements I { }
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/commonInheritorFail/after/Client.java b/java/java-tests/testData/refactoring/turnRefsToSuper/commonInheritorFail/after/Client.java
new file mode 100644
index 0000000..cfdcd95
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/commonInheritorFail/after/Client.java
@@ -0,0 +1,20 @@
+class Client
+{
+
+    interface L { void m (); }
+
+    class V implements L { 
+	void m () { }
+	void q () { }
+    }
+
+    //------------------------------------
+ 
+    class C  {
+	int method(V v) { v.q(); return 0; }
+    }
+    
+    interface I { int method(V v); }
+
+    class D extends C implements I { }
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/commonInheritorFail/before/Client.java b/java/java-tests/testData/refactoring/turnRefsToSuper/commonInheritorFail/before/Client.java
new file mode 100644
index 0000000..cfdcd95
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/commonInheritorFail/before/Client.java
@@ -0,0 +1,20 @@
+class Client
+{
+
+    interface L { void m (); }
+
+    class V implements L { 
+	void m () { }
+	void q () { }
+    }
+
+    //------------------------------------
+ 
+    class C  {
+	int method(V v) { v.q(); return 0; }
+    }
+    
+    interface I { int method(V v); }
+
+    class D extends C implements I { }
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/commonInheritorResults/after/Client.java b/java/java-tests/testData/refactoring/turnRefsToSuper/commonInheritorResults/after/Client.java
new file mode 100644
index 0000000..3ddf23d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/commonInheritorResults/after/Client.java
@@ -0,0 +1,20 @@
+class Client
+{
+
+    interface L { void m (); }
+
+    class V implements L { 
+	void m () { }
+	void q () { }
+    }
+
+    //------------------------------------
+ 
+    class C  {
+	L method() { L res = new V ();  return res; }
+    }
+    
+    interface I { L method(); }
+
+    class D extends C implements I { }
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/commonInheritorResults/before/Client.java b/java/java-tests/testData/refactoring/turnRefsToSuper/commonInheritorResults/before/Client.java
new file mode 100644
index 0000000..ac42c3c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/commonInheritorResults/before/Client.java
@@ -0,0 +1,20 @@
+class Client
+{
+
+    interface L { void m (); }
+
+    class V implements L { 
+	void m () { }
+	void q () { }
+    }
+
+    //------------------------------------
+ 
+    class C  {
+	V method() { V res = new V ();  return res; }
+    }
+    
+    interface I { V method(); }
+
+    class D extends C implements I { }
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/commonInheritorResultsFail/after/Client.java b/java/java-tests/testData/refactoring/turnRefsToSuper/commonInheritorResultsFail/after/Client.java
new file mode 100644
index 0000000..1791f27
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/commonInheritorResultsFail/after/Client.java
@@ -0,0 +1,20 @@
+class Client
+{
+
+    interface L { void m (); }
+
+    class V implements L { 
+	void m () { }
+	void q () { }
+    }
+
+    //------------------------------------
+ 
+    class C  {
+	L method() { V res = new V ();  res.q(); return res; }
+    }
+    
+    interface I { L method(); }
+
+    class D extends C implements I { }
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/commonInheritorResultsFail/before/Client.java b/java/java-tests/testData/refactoring/turnRefsToSuper/commonInheritorResultsFail/before/Client.java
new file mode 100644
index 0000000..25f7879
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/commonInheritorResultsFail/before/Client.java
@@ -0,0 +1,20 @@
+class Client
+{
+
+    interface L { void m (); }
+
+    class V implements L { 
+	void m () { }
+	void q () { }
+    }
+
+    //------------------------------------
+ 
+    class C  {
+	V method() { V res = new V ();  res.q(); return res; }
+    }
+    
+    interface I { V method(); }
+
+    class D extends C implements I { }
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/commonInheritorResultsFail2/after/Client.java b/java/java-tests/testData/refactoring/turnRefsToSuper/commonInheritorResultsFail2/after/Client.java
new file mode 100644
index 0000000..2d4317e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/commonInheritorResultsFail2/after/Client.java
@@ -0,0 +1,20 @@
+class Client
+{
+
+    interface L { void m (); }
+
+    class V implements L { 
+	void m () { }
+	void q () { }
+    }
+
+    //------------------------------------
+ 
+    class C  {
+	V method() { V res = new V ();  method().q(); return res; }
+    }
+    
+    interface I { V method(); }
+
+    class D extends C implements I { }
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/commonInheritorResultsFail2/before/Client.java b/java/java-tests/testData/refactoring/turnRefsToSuper/commonInheritorResultsFail2/before/Client.java
new file mode 100644
index 0000000..2d4317e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/commonInheritorResultsFail2/before/Client.java
@@ -0,0 +1,20 @@
+class Client
+{
+
+    interface L { void m (); }
+
+    class V implements L { 
+	void m () { }
+	void q () { }
+    }
+
+    //------------------------------------
+ 
+    class C  {
+	V method() { V res = new V ();  method().q(); return res; }
+    }
+    
+    interface I { V method(); }
+
+    class D extends C implements I { }
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/covariantReturnTypes/after/Main.java b/java/java-tests/testData/refactoring/turnRefsToSuper/covariantReturnTypes/after/Main.java
new file mode 100644
index 0000000..87838bd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/covariantReturnTypes/after/Main.java
@@ -0,0 +1,16 @@
+interface Int {
+    Int f();
+}
+class Impl implements Int {
+    void foo(){}
+    Impl f() {return this;}
+}
+
+class Usage {
+    void fk(Impl l, Impl ll){
+      l.f().foo();
+
+      final Impl f = ll.f();
+      f.foo();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/covariantReturnTypes/before/Main.java b/java/java-tests/testData/refactoring/turnRefsToSuper/covariantReturnTypes/before/Main.java
new file mode 100644
index 0000000..87838bd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/covariantReturnTypes/before/Main.java
@@ -0,0 +1,16 @@
+interface Int {
+    Int f();
+}
+class Impl implements Int {
+    void foo(){}
+    Impl f() {return this;}
+}
+
+class Usage {
+    void fk(Impl l, Impl ll){
+      l.f().foo();
+
+      final Impl f = ll.f();
+      f.foo();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/fieldTest/after/Component1.java b/java/java-tests/testData/refactoring/turnRefsToSuper/fieldTest/after/Component1.java
new file mode 100644
index 0000000..86168a5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/fieldTest/after/Component1.java
@@ -0,0 +1,11 @@
+import javax.swing.*;
+ 
+public class Component1 extends JComponent implements IDoSomething {
+    public Component1() {
+    }
+ 
+ 
+    public void doSomething(){
+ 
+    }
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/fieldTest/after/ComponentCaller.java b/java/java-tests/testData/refactoring/turnRefsToSuper/fieldTest/after/ComponentCaller.java
new file mode 100644
index 0000000..c70a8f9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/fieldTest/after/ComponentCaller.java
@@ -0,0 +1,21 @@
+import javax.swing.*;
+import java.awt.*;
+import javax.swing.*;
+ 
+public class ComponentCaller extends JComponent{
+    Component1 component1;
+ 
+    public ComponentCaller() {
+        component1  = new Component1();
+        buildUI();
+    }
+ 
+    private void buildUI() {
+        setLayout(new BorderLayout());
+        add(new JScrollPane(component1));
+    }
+ 
+    public void doSomething(){
+        component1.doSomething();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/fieldTest/after/IDoSomething.java b/java/java-tests/testData/refactoring/turnRefsToSuper/fieldTest/after/IDoSomething.java
new file mode 100644
index 0000000..5607970
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/fieldTest/after/IDoSomething.java
@@ -0,0 +1,3 @@
+public interface IDoSomething {
+    void doSomething();
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/fieldTest/before/Component1.java b/java/java-tests/testData/refactoring/turnRefsToSuper/fieldTest/before/Component1.java
new file mode 100644
index 0000000..86168a5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/fieldTest/before/Component1.java
@@ -0,0 +1,11 @@
+import javax.swing.*;
+ 
+public class Component1 extends JComponent implements IDoSomething {
+    public Component1() {
+    }
+ 
+ 
+    public void doSomething(){
+ 
+    }
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/fieldTest/before/ComponentCaller.java b/java/java-tests/testData/refactoring/turnRefsToSuper/fieldTest/before/ComponentCaller.java
new file mode 100644
index 0000000..c70a8f9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/fieldTest/before/ComponentCaller.java
@@ -0,0 +1,21 @@
+import javax.swing.*;
+import java.awt.*;
+import javax.swing.*;
+ 
+public class ComponentCaller extends JComponent{
+    Component1 component1;
+ 
+    public ComponentCaller() {
+        component1  = new Component1();
+        buildUI();
+    }
+ 
+    private void buildUI() {
+        setLayout(new BorderLayout());
+        add(new JScrollPane(component1));
+    }
+ 
+    public void doSomething(){
+        component1.doSomething();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/fieldTest/before/IDoSomething.java b/java/java-tests/testData/refactoring/turnRefsToSuper/fieldTest/before/IDoSomething.java
new file mode 100644
index 0000000..5607970
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/fieldTest/before/IDoSomething.java
@@ -0,0 +1,3 @@
+public interface IDoSomething {
+    void doSomething();
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/forEach1/after/Test.java b/java/java-tests/testData/refactoring/turnRefsToSuper/forEach1/after/Test.java
new file mode 100644
index 0000000..158c1ad
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/forEach1/after/Test.java
@@ -0,0 +1,15 @@
+class Test {
+  void test() throws Exception {
+    MyIterableImpl r = new MyIterableImpl();
+    for (String s : r) {
+      r.length();
+    }
+  }
+
+  interface MyIterable {
+  }
+
+  static class MyIterableImpl implements MyIterable, Iterable<String> {
+    public Iterator<String> iterator() { return null; }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/forEach1/before/Test.java b/java/java-tests/testData/refactoring/turnRefsToSuper/forEach1/before/Test.java
new file mode 100644
index 0000000..158c1ad
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/forEach1/before/Test.java
@@ -0,0 +1,15 @@
+class Test {
+  void test() throws Exception {
+    MyIterableImpl r = new MyIterableImpl();
+    for (String s : r) {
+      r.length();
+    }
+  }
+
+  interface MyIterable {
+  }
+
+  static class MyIterableImpl implements MyIterable, Iterable<String> {
+    public Iterator<String> iterator() { return null; }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/forEach2/after/Test.java b/java/java-tests/testData/refactoring/turnRefsToSuper/forEach2/after/Test.java
new file mode 100644
index 0000000..1900c40
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/forEach2/after/Test.java
@@ -0,0 +1,15 @@
+class Test {
+  void test() throws Exception {
+    MyIterable r = new MyIterableImpl();
+    for (String s : r) {
+      r.length();
+    }
+  }
+
+  interface MyIterable extends Iterable<String> {
+  }
+
+  static class MyIterableImpl implements MyIterable {
+    public Iterator<String> iterator() { return null; }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/forEach2/before/Test.java b/java/java-tests/testData/refactoring/turnRefsToSuper/forEach2/before/Test.java
new file mode 100644
index 0000000..38a5c49
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/forEach2/before/Test.java
@@ -0,0 +1,15 @@
+class Test {
+  void test() throws Exception {
+    MyIterableImpl r = new MyIterableImpl();
+    for (String s : r) {
+      r.length();
+    }
+  }
+
+  interface MyIterable extends Iterable<String> {
+  }
+
+  static class MyIterableImpl implements MyIterable {
+    public Iterator<String> iterator() { return null; }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/instanceOf/after/A.java b/java/java-tests/testData/refactoring/turnRefsToSuper/instanceOf/after/A.java
new file mode 100644
index 0000000..f4ba629
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/instanceOf/after/A.java
@@ -0,0 +1,2 @@
+class A implements I {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/instanceOf/after/Client.java b/java/java-tests/testData/refactoring/turnRefsToSuper/instanceOf/after/Client.java
new file mode 100644
index 0000000..cf9b78a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/instanceOf/after/Client.java
@@ -0,0 +1,5 @@
+class Client {
+   int method(I a) {
+       return a instanceof A;
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/instanceOf/after/I.java b/java/java-tests/testData/refactoring/turnRefsToSuper/instanceOf/after/I.java
new file mode 100644
index 0000000..f0ff965
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/instanceOf/after/I.java
@@ -0,0 +1,2 @@
+interface I {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/instanceOf/before/A.java b/java/java-tests/testData/refactoring/turnRefsToSuper/instanceOf/before/A.java
new file mode 100644
index 0000000..f4ba629
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/instanceOf/before/A.java
@@ -0,0 +1,2 @@
+class A implements I {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/instanceOf/before/Client.java b/java/java-tests/testData/refactoring/turnRefsToSuper/instanceOf/before/Client.java
new file mode 100644
index 0000000..56c3c42
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/instanceOf/before/Client.java
@@ -0,0 +1,5 @@
+class Client {
+   int method(A a) {
+       return a instanceof A;
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/instanceOf/before/I.java b/java/java-tests/testData/refactoring/turnRefsToSuper/instanceOf/before/I.java
new file mode 100644
index 0000000..f0ff965
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/instanceOf/before/I.java
@@ -0,0 +1,2 @@
+interface I {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/listArgs/after/Main.java b/java/java-tests/testData/refactoring/turnRefsToSuper/listArgs/after/Main.java
new file mode 100644
index 0000000..f5461e3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/listArgs/after/Main.java
@@ -0,0 +1,14 @@
+import java.util.*;
+interface Int {}
+class Impl implements Int {
+    void foo(){}
+}
+
+class Usage {
+    void f(List<Impl> l){
+        for (Impl aImpl : l) {
+            aImpl.foo();
+        }
+        l.get(0).foo();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/listArgs/before/Main.java b/java/java-tests/testData/refactoring/turnRefsToSuper/listArgs/before/Main.java
new file mode 100644
index 0000000..f5461e3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/listArgs/before/Main.java
@@ -0,0 +1,14 @@
+import java.util.*;
+interface Int {}
+class Impl implements Int {
+    void foo(){}
+}
+
+class Usage {
+    void f(List<Impl> l){
+        for (Impl aImpl : l) {
+            aImpl.foo();
+        }
+        l.get(0).foo();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/methodFromSuper/after/AClass.java b/java/java-tests/testData/refactoring/turnRefsToSuper/methodFromSuper/after/AClass.java
new file mode 100644
index 0000000..98f3488
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/methodFromSuper/after/AClass.java
@@ -0,0 +1,5 @@
+
+public class AClass extends ASuper2 {
+    public void foo() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/methodFromSuper/after/ASuper.java b/java/java-tests/testData/refactoring/turnRefsToSuper/methodFromSuper/after/ASuper.java
new file mode 100644
index 0000000..6c8f1e2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/methodFromSuper/after/ASuper.java
@@ -0,0 +1,4 @@
+
+public class ASuper {
+    public void foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/methodFromSuper/after/ASuper2.java b/java/java-tests/testData/refactoring/turnRefsToSuper/methodFromSuper/after/ASuper2.java
new file mode 100644
index 0000000..378333f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/methodFromSuper/after/ASuper2.java
@@ -0,0 +1,3 @@
+
+public class ASuper2 extends ASuper {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/methodFromSuper/after/Client.java b/java/java-tests/testData/refactoring/turnRefsToSuper/methodFromSuper/after/Client.java
new file mode 100644
index 0000000..de447c0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/methodFromSuper/after/Client.java
@@ -0,0 +1,7 @@
+
+public class Client {
+    {
+        ASuper aClass;
+        aClass.foo();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/methodFromSuper/before/AClass.java b/java/java-tests/testData/refactoring/turnRefsToSuper/methodFromSuper/before/AClass.java
new file mode 100644
index 0000000..98f3488
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/methodFromSuper/before/AClass.java
@@ -0,0 +1,5 @@
+
+public class AClass extends ASuper2 {
+    public void foo() {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/methodFromSuper/before/ASuper.java b/java/java-tests/testData/refactoring/turnRefsToSuper/methodFromSuper/before/ASuper.java
new file mode 100644
index 0000000..6c8f1e2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/methodFromSuper/before/ASuper.java
@@ -0,0 +1,4 @@
+
+public class ASuper {
+    public void foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/methodFromSuper/before/ASuper2.java b/java/java-tests/testData/refactoring/turnRefsToSuper/methodFromSuper/before/ASuper2.java
new file mode 100644
index 0000000..378333f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/methodFromSuper/before/ASuper2.java
@@ -0,0 +1,3 @@
+
+public class ASuper2 extends ASuper {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/methodFromSuper/before/Client.java b/java/java-tests/testData/refactoring/turnRefsToSuper/methodFromSuper/before/Client.java
new file mode 100644
index 0000000..f88387f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/methodFromSuper/before/Client.java
@@ -0,0 +1,7 @@
+
+public class Client {
+    {
+        AClass aClass;
+        aClass.foo();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/newExpr/after/Main.java b/java/java-tests/testData/refactoring/turnRefsToSuper/newExpr/after/Main.java
new file mode 100644
index 0000000..53f59ce
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/newExpr/after/Main.java
@@ -0,0 +1,25 @@
+import java.util.*;
+
+interface Int {
+}
+
+class Impl implements Int {
+    void foo() {
+    }
+}
+
+class Usage {
+  void f() {
+      List<Impl> l = new ArrayList<Impl>();
+      l.get(0).foo();
+
+
+      List<Int> l1 = new ArrayList<Int>();
+      Int i = l1.get(0);
+
+
+      List<Impl> l2 = new ArrayList<Impl>();
+      Impl i2 = l2.get(0);
+      i2.foo();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/newExpr/before/Main.java b/java/java-tests/testData/refactoring/turnRefsToSuper/newExpr/before/Main.java
new file mode 100644
index 0000000..50ae4b9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/newExpr/before/Main.java
@@ -0,0 +1,25 @@
+import java.util.*;
+
+interface Int {
+}
+
+class Impl implements Int {
+    void foo() {
+    }
+}
+
+class Usage {
+  void f() {
+      List<Impl> l = new ArrayList<Impl>();
+      l.get(0).foo();
+
+
+      List<Impl> l1 = new ArrayList<Impl>();
+      Impl i = l1.get(0);
+
+
+      List<Impl> l2 = new ArrayList<Impl>();
+      Impl i2 = l2.get(0);
+      i2.foo();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/removeImport/after/pack1/AClass.java b/java/java-tests/testData/refactoring/turnRefsToSuper/removeImport/after/pack1/AClass.java
new file mode 100644
index 0000000..915b5a8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/removeImport/after/pack1/AClass.java
@@ -0,0 +1,5 @@
+
+package pack1;
+
+public class AClass implements AnInterface {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/removeImport/after/pack1/AnInterface.java b/java/java-tests/testData/refactoring/turnRefsToSuper/removeImport/after/pack1/AnInterface.java
new file mode 100644
index 0000000..23669d7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/removeImport/after/pack1/AnInterface.java
@@ -0,0 +1,5 @@
+
+package pack1;
+
+public interface AnInterface {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/removeImport/after/pack2/Client.java b/java/java-tests/testData/refactoring/turnRefsToSuper/removeImport/after/pack2/Client.java
new file mode 100644
index 0000000..ad0901f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/removeImport/after/pack2/Client.java
@@ -0,0 +1,10 @@
+
+package pack2;
+
+import pack1.AnInterface;
+
+public class Client {
+    {
+        AnInterface aClass;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/removeImport/after/pack2/Client2.java b/java/java-tests/testData/refactoring/turnRefsToSuper/removeImport/after/pack2/Client2.java
new file mode 100644
index 0000000..913596c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/removeImport/after/pack2/Client2.java
@@ -0,0 +1,11 @@
+
+package pack2;
+
+import pack1.AClass;
+import pack1.AnInterface;
+
+public class Client {
+    {
+        AnInterface aClass = new AClass();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/removeImport/before/pack1/AClass.java b/java/java-tests/testData/refactoring/turnRefsToSuper/removeImport/before/pack1/AClass.java
new file mode 100644
index 0000000..915b5a8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/removeImport/before/pack1/AClass.java
@@ -0,0 +1,5 @@
+
+package pack1;
+
+public class AClass implements AnInterface {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/removeImport/before/pack1/AnInterface.java b/java/java-tests/testData/refactoring/turnRefsToSuper/removeImport/before/pack1/AnInterface.java
new file mode 100644
index 0000000..23669d7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/removeImport/before/pack1/AnInterface.java
@@ -0,0 +1,5 @@
+
+package pack1;
+
+public interface AnInterface {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/removeImport/before/pack2/Client.java b/java/java-tests/testData/refactoring/turnRefsToSuper/removeImport/before/pack2/Client.java
new file mode 100644
index 0000000..e0af221
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/removeImport/before/pack2/Client.java
@@ -0,0 +1,10 @@
+
+package pack2;
+
+import pack1.AClass;
+
+public class Client {
+    {
+        AClass aClass;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/removeImport/before/pack2/Client2.java b/java/java-tests/testData/refactoring/turnRefsToSuper/removeImport/before/pack2/Client2.java
new file mode 100644
index 0000000..a9dd8db
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/removeImport/before/pack2/Client2.java
@@ -0,0 +1,10 @@
+
+package pack2;
+
+import pack1.AClass;
+
+public class Client {
+    {
+        AClass aClass = new AClass();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/returnValue/after/A.java b/java/java-tests/testData/refactoring/turnRefsToSuper/returnValue/after/A.java
new file mode 100644
index 0000000..73c334c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/returnValue/after/A.java
@@ -0,0 +1,2 @@
+class A implements I {
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/returnValue/after/B.java b/java/java-tests/testData/refactoring/turnRefsToSuper/returnValue/after/B.java
new file mode 100644
index 0000000..d017ab7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/returnValue/after/B.java
@@ -0,0 +1,13 @@
+import java.util.ArrayList;
+
+class B {
+    I[] getA() { return null; };
+
+    int method(ArrayList list) {
+        I[] a = getA();
+
+        for(i = 0; i < a.length; i++) {
+            I item = a[i];
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/returnValue/after/I.java b/java/java-tests/testData/refactoring/turnRefsToSuper/returnValue/after/I.java
new file mode 100644
index 0000000..84885be
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/returnValue/after/I.java
@@ -0,0 +1,4 @@
+import java.util.ArrayList;
+interface I {
+}
+
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/returnValue/before/A.java b/java/java-tests/testData/refactoring/turnRefsToSuper/returnValue/before/A.java
new file mode 100644
index 0000000..73c334c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/returnValue/before/A.java
@@ -0,0 +1,2 @@
+class A implements I {
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/returnValue/before/B.java b/java/java-tests/testData/refactoring/turnRefsToSuper/returnValue/before/B.java
new file mode 100644
index 0000000..7c6d0f0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/returnValue/before/B.java
@@ -0,0 +1,13 @@
+import java.util.ArrayList;
+
+class B {
+    A[] getA() { return null; };
+
+    int method(ArrayList list) {
+        A[] a = getA();
+
+        for(i = 0; i < a.length; i++) {
+            A item = a[i];
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/returnValue/before/I.java b/java/java-tests/testData/refactoring/turnRefsToSuper/returnValue/before/I.java
new file mode 100644
index 0000000..84885be
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/returnValue/before/I.java
@@ -0,0 +1,4 @@
+import java.util.ArrayList;
+interface I {
+}
+
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/returnValue2/after/A.java b/java/java-tests/testData/refactoring/turnRefsToSuper/returnValue2/after/A.java
new file mode 100644
index 0000000..73c334c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/returnValue2/after/A.java
@@ -0,0 +1,2 @@
+class A implements I {
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/returnValue2/after/B.java b/java/java-tests/testData/refactoring/turnRefsToSuper/returnValue2/after/B.java
new file mode 100644
index 0000000..d94b0c8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/returnValue2/after/B.java
@@ -0,0 +1,13 @@
+import java.util.ArrayList;
+
+class B {
+    I getA() { return new A(); };
+    void test(I a) {
+    }
+
+    int method(ArrayList list) {
+        I a = getA();
+
+        test(a);
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/returnValue2/after/I.java b/java/java-tests/testData/refactoring/turnRefsToSuper/returnValue2/after/I.java
new file mode 100644
index 0000000..84885be
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/returnValue2/after/I.java
@@ -0,0 +1,4 @@
+import java.util.ArrayList;
+interface I {
+}
+
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/returnValue2/before/A.java b/java/java-tests/testData/refactoring/turnRefsToSuper/returnValue2/before/A.java
new file mode 100644
index 0000000..73c334c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/returnValue2/before/A.java
@@ -0,0 +1,2 @@
+class A implements I {
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/returnValue2/before/B.java b/java/java-tests/testData/refactoring/turnRefsToSuper/returnValue2/before/B.java
new file mode 100644
index 0000000..7962e14d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/returnValue2/before/B.java
@@ -0,0 +1,13 @@
+import java.util.ArrayList;
+
+class B {
+    A getA() { return new A(); };
+    void test(A a) {
+    }
+
+    int method(ArrayList list) {
+        A a = getA();
+
+        test(a);
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/returnValue2/before/I.java b/java/java-tests/testData/refactoring/turnRefsToSuper/returnValue2/before/I.java
new file mode 100644
index 0000000..84885be
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/returnValue2/before/I.java
@@ -0,0 +1,4 @@
+import java.util.ArrayList;
+interface I {
+}
+
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/scr34000/after/Main.java b/java/java-tests/testData/refactoring/turnRefsToSuper/scr34000/after/Main.java
new file mode 100644
index 0000000..d2944a3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/scr34000/after/Main.java
@@ -0,0 +1,10 @@
+public class Main {
+    private static void install() {
+        Model simpleModel = new SimpleModel();
+        View view = new View(simpleModel);
+    }
+    public void foo() {
+        Model simpleModel = new SimpleModel();
+        simpleModel.doIt();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/scr34000/after/Model.java b/java/java-tests/testData/refactoring/turnRefsToSuper/scr34000/after/Model.java
new file mode 100644
index 0000000..412ea63
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/scr34000/after/Model.java
@@ -0,0 +1,3 @@
+public class Model {
+    public void doIt() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/scr34000/after/SimpleModel.java b/java/java-tests/testData/refactoring/turnRefsToSuper/scr34000/after/SimpleModel.java
new file mode 100644
index 0000000..a36790a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/scr34000/after/SimpleModel.java
@@ -0,0 +1,2 @@
+class SimpleModel extends Model {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/scr34000/after/View.java b/java/java-tests/testData/refactoring/turnRefsToSuper/scr34000/after/View.java
new file mode 100644
index 0000000..f1a23dd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/scr34000/after/View.java
@@ -0,0 +1,3 @@
+public class View {
+    public View(Model model) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/scr34000/before/Main.java b/java/java-tests/testData/refactoring/turnRefsToSuper/scr34000/before/Main.java
new file mode 100644
index 0000000..8a04b25
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/scr34000/before/Main.java
@@ -0,0 +1,10 @@
+public class Main {
+    private static void install() {
+        SimpleModel simpleModel = new SimpleModel();
+        View view = new View(simpleModel);
+    }
+    public void foo() {
+        SimpleModel simpleModel = new SimpleModel();
+        simpleModel.doIt();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/scr34000/before/Model.java b/java/java-tests/testData/refactoring/turnRefsToSuper/scr34000/before/Model.java
new file mode 100644
index 0000000..412ea63
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/scr34000/before/Model.java
@@ -0,0 +1,3 @@
+public class Model {
+    public void doIt() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/scr34000/before/SimpleModel.java b/java/java-tests/testData/refactoring/turnRefsToSuper/scr34000/before/SimpleModel.java
new file mode 100644
index 0000000..a36790a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/scr34000/before/SimpleModel.java
@@ -0,0 +1,2 @@
+class SimpleModel extends Model {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/scr34000/before/View.java b/java/java-tests/testData/refactoring/turnRefsToSuper/scr34000/before/View.java
new file mode 100644
index 0000000..f1a23dd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/scr34000/before/View.java
@@ -0,0 +1,3 @@
+public class View {
+    public View(Model model) {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/scr34020/after/test/C.java b/java/java-tests/testData/refactoring/turnRefsToSuper/scr34020/after/test/C.java
new file mode 100644
index 0000000..6c7526b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/scr34020/after/test/C.java
@@ -0,0 +1,17 @@
+package test;
+
+import java.util.*;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: dsl
+ * Date: Jun 17, 2004
+ * Time: 1:28:14 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public class C {
+    {
+        List l = new ArrayList();
+        Collections.binarySearch(l, null);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/scr34020/before/test/C.java b/java/java-tests/testData/refactoring/turnRefsToSuper/scr34020/before/test/C.java
new file mode 100644
index 0000000..6c7526b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/scr34020/before/test/C.java
@@ -0,0 +1,17 @@
+package test;
+
+import java.util.*;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: dsl
+ * Date: Jun 17, 2004
+ * Time: 1:28:14 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public class C {
+    {
+        List l = new ArrayList();
+        Collections.binarySearch(l, null);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/staticCallArguments/after/Main.java b/java/java-tests/testData/refactoring/turnRefsToSuper/staticCallArguments/after/Main.java
new file mode 100644
index 0000000..6586308
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/staticCallArguments/after/Main.java
@@ -0,0 +1,11 @@
+import java.util.*;
+interface Int {}
+class Impl implements Int {
+}
+
+class Usage {
+    void f(List<Int> l){}
+    void bar() {
+        f(Collections.<Int>emptyList());
+    }
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/staticCallArguments/before/Main.java b/java/java-tests/testData/refactoring/turnRefsToSuper/staticCallArguments/before/Main.java
new file mode 100644
index 0000000..bdbd11b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/staticCallArguments/before/Main.java
@@ -0,0 +1,11 @@
+import java.util.*;
+interface Int {}
+class Impl implements Int {
+}
+
+class Usage {
+    void f(List<Impl> l){}
+    void bar() {
+        f(Collections.<Impl>emptyList());
+    }
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/superClass/after/AClass.java b/java/java-tests/testData/refactoring/turnRefsToSuper/superClass/after/AClass.java
new file mode 100644
index 0000000..2e34979
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/superClass/after/AClass.java
@@ -0,0 +1,7 @@
+public class AClass extends ASuper {
+
+  public void sayBar()
+      {
+          System.out.println("Bar");
+      }
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/superClass/after/ASuper.java b/java/java-tests/testData/refactoring/turnRefsToSuper/superClass/after/ASuper.java
new file mode 100644
index 0000000..bf19e4d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/superClass/after/ASuper.java
@@ -0,0 +1,6 @@
+public class ASuper {
+  public void sayFoo()
+  {
+      System.out.println("Foo");
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/superClass/after/Client.java b/java/java-tests/testData/refactoring/turnRefsToSuper/superClass/after/Client.java
new file mode 100644
index 0000000..bc6b379
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/superClass/after/Client.java
@@ -0,0 +1,6 @@
+public class Client {
+    {
+        ASuper b = new AClass();
+        b.sayFoo();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/superClass/before/AClass.java b/java/java-tests/testData/refactoring/turnRefsToSuper/superClass/before/AClass.java
new file mode 100644
index 0000000..2e34979
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/superClass/before/AClass.java
@@ -0,0 +1,7 @@
+public class AClass extends ASuper {
+
+  public void sayBar()
+      {
+          System.out.println("Bar");
+      }
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/superClass/before/ASuper.java b/java/java-tests/testData/refactoring/turnRefsToSuper/superClass/before/ASuper.java
new file mode 100644
index 0000000..bf19e4d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/superClass/before/ASuper.java
@@ -0,0 +1,6 @@
+public class ASuper {
+  public void sayFoo()
+  {
+      System.out.println("Foo");
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/superClass/before/Client.java b/java/java-tests/testData/refactoring/turnRefsToSuper/superClass/before/Client.java
new file mode 100644
index 0000000..64626ad
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/superClass/before/Client.java
@@ -0,0 +1,6 @@
+public class Client {
+    {
+        AClass b = new AClass();
+        b.sayFoo();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/toArray/after/A.java b/java/java-tests/testData/refactoring/turnRefsToSuper/toArray/after/A.java
new file mode 100644
index 0000000..73c334c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/toArray/after/A.java
@@ -0,0 +1,2 @@
+class A implements I {
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/toArray/after/B.java b/java/java-tests/testData/refactoring/turnRefsToSuper/toArray/after/B.java
new file mode 100644
index 0000000..888afeb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/toArray/after/B.java
@@ -0,0 +1,11 @@
+import java.util.ArrayList;
+
+class B {
+    int method(ArrayList list) {
+        I[] a = (I[])list.toArray(new I[0]);
+
+        for(i = 0; i < a.length; i++) {
+            I member = a[i];
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/toArray/after/I.java b/java/java-tests/testData/refactoring/turnRefsToSuper/toArray/after/I.java
new file mode 100644
index 0000000..84885be
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/toArray/after/I.java
@@ -0,0 +1,4 @@
+import java.util.ArrayList;
+interface I {
+}
+
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/toArray/before/A.java b/java/java-tests/testData/refactoring/turnRefsToSuper/toArray/before/A.java
new file mode 100644
index 0000000..73c334c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/toArray/before/A.java
@@ -0,0 +1,2 @@
+class A implements I {
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/toArray/before/B.java b/java/java-tests/testData/refactoring/turnRefsToSuper/toArray/before/B.java
new file mode 100644
index 0000000..eff75e3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/toArray/before/B.java
@@ -0,0 +1,11 @@
+import java.util.ArrayList;
+
+class B {
+    int method(ArrayList list) {
+        A[] a = (A[])list.toArray(new A[0]);
+
+        for(i = 0; i < a.length; i++) {
+            A member = a[i];
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/toArray/before/I.java b/java/java-tests/testData/refactoring/turnRefsToSuper/toArray/before/I.java
new file mode 100644
index 0000000..84885be
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/toArray/before/I.java
@@ -0,0 +1,4 @@
+import java.util.ArrayList;
+interface I {
+}
+
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/tryWithResources1/after/Test.java b/java/java-tests/testData/refactoring/turnRefsToSuper/tryWithResources1/after/Test.java
new file mode 100644
index 0000000..2f00ea2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/tryWithResources1/after/Test.java
@@ -0,0 +1,16 @@
+class Test {
+  void test() throws Exception {
+    try (MyResourceImpl r = new MyResourceImpl()) {
+      r.getName();
+    }
+  }
+
+  interface MyResource {
+    String getName();
+  }
+
+  static class MyResourceImpl implements MyResource, AutoCloseable {
+    public String getName() { return ""; }
+    public void close() throws Exception { }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/tryWithResources1/before/Test.java b/java/java-tests/testData/refactoring/turnRefsToSuper/tryWithResources1/before/Test.java
new file mode 100644
index 0000000..2f00ea2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/tryWithResources1/before/Test.java
@@ -0,0 +1,16 @@
+class Test {
+  void test() throws Exception {
+    try (MyResourceImpl r = new MyResourceImpl()) {
+      r.getName();
+    }
+  }
+
+  interface MyResource {
+    String getName();
+  }
+
+  static class MyResourceImpl implements MyResource, AutoCloseable {
+    public String getName() { return ""; }
+    public void close() throws Exception { }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/tryWithResources2/after/Test.java b/java/java-tests/testData/refactoring/turnRefsToSuper/tryWithResources2/after/Test.java
new file mode 100644
index 0000000..08236129
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/tryWithResources2/after/Test.java
@@ -0,0 +1,16 @@
+class Test {
+  void test() throws Exception {
+    try (MyResource r = new MyResourceImpl()) {
+      r.getName();
+    }
+  }
+
+  interface MyResource extends AutoCloseable {
+    String getName();
+  }
+
+  static class MyResourceImpl implements MyResource {
+    public String getName() { return ""; }
+    public void close() throws Exception { }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/tryWithResources2/before/Test.java b/java/java-tests/testData/refactoring/turnRefsToSuper/tryWithResources2/before/Test.java
new file mode 100644
index 0000000..0beff38
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/tryWithResources2/before/Test.java
@@ -0,0 +1,16 @@
+class Test {
+  void test() throws Exception {
+    try (MyResourceImpl r = new MyResourceImpl()) {
+      r.getName();
+    }
+  }
+
+  interface MyResource extends AutoCloseable {
+    String getName();
+  }
+
+  static class MyResourceImpl implements MyResource {
+    public String getName() { return ""; }
+    public void close() throws Exception { }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/typeArgumentsParam/after/Clazz.java b/java/java-tests/testData/refactoring/turnRefsToSuper/typeArgumentsParam/after/Clazz.java
new file mode 100644
index 0000000..092b88d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/typeArgumentsParam/after/Clazz.java
@@ -0,0 +1,21 @@
+interface IntF {
+}
+
+interface Factory<E extends IntF> {
+    E create();
+
+    void save(E obj);
+
+    static class helper {
+        static Factory<IntF> get() {
+            return null;
+        }
+    }
+}
+
+public class Clazz implements IntF {
+    void bar() {
+        IntF y = Factory.helper.get().create();
+        Factory.helper.get().save(y);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/typeArgumentsParam/before/Clazz.java b/java/java-tests/testData/refactoring/turnRefsToSuper/typeArgumentsParam/before/Clazz.java
new file mode 100644
index 0000000..2601cb8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/typeArgumentsParam/before/Clazz.java
@@ -0,0 +1,21 @@
+interface IntF {
+}
+
+interface Factory<E extends IntF> {
+    E create();
+
+    void save(E obj);
+
+    static class helper {
+        static Factory<IntF> get() {
+            return null;
+        }
+    }
+}
+
+public class Clazz implements IntF {
+    void bar() {
+        Clazz y = Factory.helper.get().create();
+        Factory.helper.get().save(y);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/typeArgumentsRH/after/I.java b/java/java-tests/testData/refactoring/turnRefsToSuper/typeArgumentsRH/after/I.java
new file mode 100644
index 0000000..3c88294
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/typeArgumentsRH/after/I.java
@@ -0,0 +1 @@
+interface I{}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/typeArgumentsRH/after/IImpl.java b/java/java-tests/testData/refactoring/turnRefsToSuper/typeArgumentsRH/after/IImpl.java
new file mode 100644
index 0000000..6070085
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/typeArgumentsRH/after/IImpl.java
@@ -0,0 +1 @@
+class IImpl implements I{}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/typeArgumentsRH/after/U.java b/java/java-tests/testData/refactoring/turnRefsToSuper/typeArgumentsRH/after/U.java
new file mode 100644
index 0000000..644f7b9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/typeArgumentsRH/after/U.java
@@ -0,0 +1,6 @@
+import java.util.*;
+class U {
+  public static void main(String[] args) {
+    List<List<I>> l = new ArrayLits<List<I>>();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/typeArgumentsRH/before/I.java b/java/java-tests/testData/refactoring/turnRefsToSuper/typeArgumentsRH/before/I.java
new file mode 100644
index 0000000..3c88294
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/typeArgumentsRH/before/I.java
@@ -0,0 +1 @@
+interface I{}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/typeArgumentsRH/before/IImpl.java b/java/java-tests/testData/refactoring/turnRefsToSuper/typeArgumentsRH/before/IImpl.java
new file mode 100644
index 0000000..6070085
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/typeArgumentsRH/before/IImpl.java
@@ -0,0 +1 @@
+class IImpl implements I{}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/typeArgumentsRH/before/U.java b/java/java-tests/testData/refactoring/turnRefsToSuper/typeArgumentsRH/before/U.java
new file mode 100644
index 0000000..2c3002f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/typeArgumentsRH/before/U.java
@@ -0,0 +1,6 @@
+import java.util.*;
+class U {
+  public static void main(String[] args) {
+    List<List<IImpl>> l = new ArrayLits<List<IImpl>>();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/typeArgumentsRH1/after/I.java b/java/java-tests/testData/refactoring/turnRefsToSuper/typeArgumentsRH1/after/I.java
new file mode 100644
index 0000000..3c88294
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/typeArgumentsRH1/after/I.java
@@ -0,0 +1 @@
+interface I{}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/typeArgumentsRH1/after/IImpl.java b/java/java-tests/testData/refactoring/turnRefsToSuper/typeArgumentsRH1/after/IImpl.java
new file mode 100644
index 0000000..6070085
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/typeArgumentsRH1/after/IImpl.java
@@ -0,0 +1 @@
+class IImpl implements I{}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/typeArgumentsRH1/after/U.java b/java/java-tests/testData/refactoring/turnRefsToSuper/typeArgumentsRH1/after/U.java
new file mode 100644
index 0000000..ee8e433e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/typeArgumentsRH1/after/U.java
@@ -0,0 +1,6 @@
+import java.util.*;
+class U {
+  public static void main(String[] args) {
+    List<I> l = new ArrayLits<I>();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/typeArgumentsRH1/before/I.java b/java/java-tests/testData/refactoring/turnRefsToSuper/typeArgumentsRH1/before/I.java
new file mode 100644
index 0000000..3c88294
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/typeArgumentsRH1/before/I.java
@@ -0,0 +1 @@
+interface I{}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/typeArgumentsRH1/before/IImpl.java b/java/java-tests/testData/refactoring/turnRefsToSuper/typeArgumentsRH1/before/IImpl.java
new file mode 100644
index 0000000..6070085
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/typeArgumentsRH1/before/IImpl.java
@@ -0,0 +1 @@
+class IImpl implements I{}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/typeArgumentsRH1/before/U.java b/java/java-tests/testData/refactoring/turnRefsToSuper/typeArgumentsRH1/before/U.java
new file mode 100644
index 0000000..6e203df
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/typeArgumentsRH1/before/U.java
@@ -0,0 +1,6 @@
+import java.util.*;
+class U {
+  public static void main(String[] args) {
+    List<IImpl> l = new ArrayLits<IImpl>();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/useAsArg/after/AClass.java b/java/java-tests/testData/refactoring/turnRefsToSuper/useAsArg/after/AClass.java
new file mode 100644
index 0000000..8e19601
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/useAsArg/after/AClass.java
@@ -0,0 +1,3 @@
+
+public class AClass implements Runnable, I{
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/useAsArg/after/Client.java b/java/java-tests/testData/refactoring/turnRefsToSuper/useAsArg/after/Client.java
new file mode 100644
index 0000000..5613614
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/useAsArg/after/Client.java
@@ -0,0 +1,14 @@
+
+import javax.swing.*;
+
+public class Client {
+  {
+    AClass aClass = new AClass();
+    SwingUtilities.invokeLater(aClass);
+  }
+  
+  void method(void) {
+     Runnable r = new AClass();
+     SwingUtilities.invokeLater(r);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/useAsArg/after/I.java b/java/java-tests/testData/refactoring/turnRefsToSuper/useAsArg/after/I.java
new file mode 100644
index 0000000..e9c4c0d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/useAsArg/after/I.java
@@ -0,0 +1,3 @@
+
+public interface I {
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/useAsArg/before/AClass.java b/java/java-tests/testData/refactoring/turnRefsToSuper/useAsArg/before/AClass.java
new file mode 100644
index 0000000..8e19601
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/useAsArg/before/AClass.java
@@ -0,0 +1,3 @@
+
+public class AClass implements Runnable, I{
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/useAsArg/before/Client.java b/java/java-tests/testData/refactoring/turnRefsToSuper/useAsArg/before/Client.java
new file mode 100644
index 0000000..5613614
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/useAsArg/before/Client.java
@@ -0,0 +1,14 @@
+
+import javax.swing.*;
+
+public class Client {
+  {
+    AClass aClass = new AClass();
+    SwingUtilities.invokeLater(aClass);
+  }
+  
+  void method(void) {
+     Runnable r = new AClass();
+     SwingUtilities.invokeLater(r);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/turnRefsToSuper/useAsArg/before/I.java b/java/java-tests/testData/refactoring/turnRefsToSuper/useAsArg/before/I.java
new file mode 100644
index 0000000..e9c4c0d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/turnRefsToSuper/useAsArg/before/I.java
@@ -0,0 +1,3 @@
+
+public interface I {
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t01/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t01/after/Test.1.items
new file mode 100644
index 0000000..c94a261
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t01/after/Test.1.items
@@ -0,0 +1 @@
+LinkedList\nPsiField:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t01/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t01/after/Test.items
new file mode 100644
index 0000000..c94a261
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t01/after/Test.items
@@ -0,0 +1 @@
+LinkedList\nPsiField:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t01/after/test.java b/java/java-tests/testData/refactoring/typeCook/t01/after/test.java
new file mode 100644
index 0000000..a7af03c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t01/after/test.java
@@ -0,0 +1,20 @@
+class LinkedList<T>{
+    T t;
+    public T get(){return t;}
+    public void set (T t){
+	this.t = t;
+    }    
+}
+
+class Simple {
+}
+
+class Test{
+    LinkedList<Simple> k;
+    LinkedList x;
+    
+    void f(){
+	x=k;
+        x.set(new Integer(3));
+    }   
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t01/before/test.java b/java/java-tests/testData/refactoring/typeCook/t01/before/test.java
new file mode 100644
index 0000000..a7af03c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t01/before/test.java
@@ -0,0 +1,20 @@
+class LinkedList<T>{
+    T t;
+    public T get(){return t;}
+    public void set (T t){
+	this.t = t;
+    }    
+}
+
+class Simple {
+}
+
+class Test{
+    LinkedList<Simple> k;
+    LinkedList x;
+    
+    void f(){
+	x=k;
+        x.set(new Integer(3));
+    }   
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t02/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t02/after/Test.1.items
new file mode 100644
index 0000000..8671b4c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t02/after/Test.1.items
@@ -0,0 +1 @@
+LinkedList<java.lang.Integer>\nPsiField:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t02/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t02/after/Test.items
new file mode 100644
index 0000000..c94a261
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t02/after/Test.items
@@ -0,0 +1 @@
+LinkedList\nPsiField:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t02/after/test.java b/java/java-tests/testData/refactoring/typeCook/t02/after/test.java
new file mode 100644
index 0000000..129dbd3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t02/after/test.java
@@ -0,0 +1,19 @@
+class LinkedList<T>{
+    T t;
+    public T get(){return t;}
+    public void set (T t){
+	this.t = t;
+    }    
+}
+
+class Simple {
+}
+
+class Test{
+    LinkedList<Simple> k;
+    LinkedList x;
+    
+    void f(){
+	x.set(new Integer());
+    }   
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t02/before/test.java b/java/java-tests/testData/refactoring/typeCook/t02/before/test.java
new file mode 100644
index 0000000..129dbd3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t02/before/test.java
@@ -0,0 +1,19 @@
+class LinkedList<T>{
+    T t;
+    public T get(){return t;}
+    public void set (T t){
+	this.t = t;
+    }    
+}
+
+class Simple {
+}
+
+class Test{
+    LinkedList<Simple> k;
+    LinkedList x;
+    
+    void f(){
+	x.set(new Integer());
+    }   
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t03/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t03/after/Test.1.items
new file mode 100644
index 0000000..eb4cfd2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t03/after/Test.1.items
@@ -0,0 +1 @@
+LinkedList<Simple>\nPsiField:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t03/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t03/after/Test.items
new file mode 100644
index 0000000..c94a261
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t03/after/Test.items
@@ -0,0 +1 @@
+LinkedList\nPsiField:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t03/after/test.java b/java/java-tests/testData/refactoring/typeCook/t03/after/test.java
new file mode 100644
index 0000000..e2ed3fc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t03/after/test.java
@@ -0,0 +1,19 @@
+class LinkedList<T>{
+    T t;
+    public T get(){return t;}
+    public void set (T t){
+	this.t = t;
+    }    
+}
+
+class Simple {
+}
+
+class Test{
+    LinkedList<Simple> k;
+    LinkedList x;
+    
+    void f(){
+	x=k;
+    }   
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t03/before/test.java b/java/java-tests/testData/refactoring/typeCook/t03/before/test.java
new file mode 100644
index 0000000..e2ed3fc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t03/before/test.java
@@ -0,0 +1,19 @@
+class LinkedList<T>{
+    T t;
+    public T get(){return t;}
+    public void set (T t){
+	this.t = t;
+    }    
+}
+
+class Simple {
+}
+
+class Test{
+    LinkedList<Simple> k;
+    LinkedList x;
+    
+    void f(){
+	x=k;
+    }   
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t04/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t04/after/Test.1.items
new file mode 100644
index 0000000..eb4cfd2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t04/after/Test.1.items
@@ -0,0 +1 @@
+LinkedList<Simple>\nPsiField:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t04/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t04/after/Test.items
new file mode 100644
index 0000000..c94a261
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t04/after/Test.items
@@ -0,0 +1 @@
+LinkedList\nPsiField:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t04/after/test.java b/java/java-tests/testData/refactoring/typeCook/t04/after/test.java
new file mode 100644
index 0000000..ecb41c6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t04/after/test.java
@@ -0,0 +1,18 @@
+class LinkedList<T>{
+    T t;
+    public T get(){return t;}
+    public void set (T t){
+	this.t = t;
+    }    
+}
+
+class Simple {
+}
+
+class Test{
+    LinkedList x;
+    
+    void f(){
+	Simple s = (Simple) x.get();
+    }   
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t04/before/test.java b/java/java-tests/testData/refactoring/typeCook/t04/before/test.java
new file mode 100644
index 0000000..ecb41c6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t04/before/test.java
@@ -0,0 +1,18 @@
+class LinkedList<T>{
+    T t;
+    public T get(){return t;}
+    public void set (T t){
+	this.t = t;
+    }    
+}
+
+class Simple {
+}
+
+class Test{
+    LinkedList x;
+    
+    void f(){
+	Simple s = (Simple) x.get();
+    }   
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t05/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t05/after/Test.1.items
new file mode 100644
index 0000000..eb4cfd2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t05/after/Test.1.items
@@ -0,0 +1 @@
+LinkedList<Simple>\nPsiField:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t05/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t05/after/Test.items
new file mode 100644
index 0000000..c94a261
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t05/after/Test.items
@@ -0,0 +1 @@
+LinkedList\nPsiField:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t05/after/test.java b/java/java-tests/testData/refactoring/typeCook/t05/after/test.java
new file mode 100644
index 0000000..7051659
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t05/after/test.java
@@ -0,0 +1,19 @@
+class LinkedList<T>{
+    T t;
+    public T get(){return t;}
+    public void set (T t){
+	this.t = t;
+    }    
+}
+
+class Simple {
+}
+
+class Test{
+    LinkedList x;
+    LinkedList<Simple> y;
+    
+    void f(){
+	y.set((Simple) x.get());
+    }   
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t05/before/test.java b/java/java-tests/testData/refactoring/typeCook/t05/before/test.java
new file mode 100644
index 0000000..7051659
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t05/before/test.java
@@ -0,0 +1,19 @@
+class LinkedList<T>{
+    T t;
+    public T get(){return t;}
+    public void set (T t){
+	this.t = t;
+    }    
+}
+
+class Simple {
+}
+
+class Test{
+    LinkedList x;
+    LinkedList<Simple> y;
+    
+    void f(){
+	y.set((Simple) x.get());
+    }   
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t06/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t06/after/Test.1.items
new file mode 100644
index 0000000..3603290
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t06/after/Test.1.items
@@ -0,0 +1,2 @@
+LinkedList\nPsiField:x
+LinkedList\nPsiField:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t06/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t06/after/Test.items
new file mode 100644
index 0000000..3603290
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t06/after/Test.items
@@ -0,0 +1,2 @@
+LinkedList\nPsiField:x
+LinkedList\nPsiField:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t06/after/test.java b/java/java-tests/testData/refactoring/typeCook/t06/after/test.java
new file mode 100644
index 0000000..e64e235
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t06/after/test.java
@@ -0,0 +1,19 @@
+class LinkedList<T>{
+    T t;
+    public T get(){return t;}
+    public void set (T t){
+	this.t = t;
+    }    
+}
+
+class Simple {
+}
+
+class Test{
+    LinkedList x;
+    LinkedList y;
+    
+    void f(){
+	y.set(x.get());
+    }   
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t06/before/test.java b/java/java-tests/testData/refactoring/typeCook/t06/before/test.java
new file mode 100644
index 0000000..e64e235
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t06/before/test.java
@@ -0,0 +1,19 @@
+class LinkedList<T>{
+    T t;
+    public T get(){return t;}
+    public void set (T t){
+	this.t = t;
+    }    
+}
+
+class Simple {
+}
+
+class Test{
+    LinkedList x;
+    LinkedList y;
+    
+    void f(){
+	y.set(x.get());
+    }   
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t07/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t07/after/Test.1.items
new file mode 100644
index 0000000..1fa8eac
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t07/after/Test.1.items
@@ -0,0 +1,2 @@
+LinkedList<Simple>\nPsiField:x
+LinkedList<Simple>\nPsiField:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t07/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t07/after/Test.items
new file mode 100644
index 0000000..3603290
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t07/after/Test.items
@@ -0,0 +1,2 @@
+LinkedList\nPsiField:x
+LinkedList\nPsiField:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t07/after/test.java b/java/java-tests/testData/refactoring/typeCook/t07/after/test.java
new file mode 100644
index 0000000..7835414
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t07/after/test.java
@@ -0,0 +1,20 @@
+class LinkedList<T>{
+    T t;
+    public T get(){return t;}
+    public void set (T t){
+	this.t = t;
+    }    
+}
+
+class Simple {
+}
+
+class Test{
+    LinkedList x;
+    LinkedList y;
+    
+    void f(){
+	y.set(x.get());
+	Simple t = (Simple) x.get();
+    }   
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t07/before/test.java b/java/java-tests/testData/refactoring/typeCook/t07/before/test.java
new file mode 100644
index 0000000..7835414
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t07/before/test.java
@@ -0,0 +1,20 @@
+class LinkedList<T>{
+    T t;
+    public T get(){return t;}
+    public void set (T t){
+	this.t = t;
+    }    
+}
+
+class Simple {
+}
+
+class Test{
+    LinkedList x;
+    LinkedList y;
+    
+    void f(){
+	y.set(x.get());
+	Simple t = (Simple) x.get();
+    }   
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t08/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t08/after/Test.1.items
new file mode 100644
index 0000000..b794981
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t08/after/Test.1.items
@@ -0,0 +1,2 @@
+LinkedList<Simple>\nPsiField:x
+LinkedList<java.lang.Object>\nPsiField:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t08/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t08/after/Test.items
new file mode 100644
index 0000000..3603290
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t08/after/Test.items
@@ -0,0 +1,2 @@
+LinkedList\nPsiField:x
+LinkedList\nPsiField:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t08/after/test.java b/java/java-tests/testData/refactoring/typeCook/t08/after/test.java
new file mode 100644
index 0000000..38be159
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t08/after/test.java
@@ -0,0 +1,21 @@
+class LinkedList<T>{
+    T t;
+    public T get(){return t;}
+    public void set (T t){
+	this.t = t;
+    }    
+}
+
+class Simple {
+}
+
+class Test{
+    LinkedList x;
+    LinkedList y;
+    
+    void f(){
+	y.set(x.get());
+	Simple t = (Simple) x.get();
+	y.set(new Test());
+    }   
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t08/before/test.java b/java/java-tests/testData/refactoring/typeCook/t08/before/test.java
new file mode 100644
index 0000000..38be159
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t08/before/test.java
@@ -0,0 +1,21 @@
+class LinkedList<T>{
+    T t;
+    public T get(){return t;}
+    public void set (T t){
+	this.t = t;
+    }    
+}
+
+class Simple {
+}
+
+class Test{
+    LinkedList x;
+    LinkedList y;
+    
+    void f(){
+	y.set(x.get());
+	Simple t = (Simple) x.get();
+	y.set(new Test());
+    }   
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t09/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t09/after/Test.1.items
new file mode 100644
index 0000000..256a636
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t09/after/Test.1.items
@@ -0,0 +1,2 @@
+LinkedList[]\nPsiField:x
+LinkedList\nPsiField:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t09/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t09/after/Test.items
new file mode 100644
index 0000000..256a636
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t09/after/Test.items
@@ -0,0 +1,2 @@
+LinkedList[]\nPsiField:x
+LinkedList\nPsiField:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t09/after/test.java b/java/java-tests/testData/refactoring/typeCook/t09/after/test.java
new file mode 100644
index 0000000..d83140f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t09/after/test.java
@@ -0,0 +1,19 @@
+class LinkedList<T>{
+    T t;
+    public T get(){return t;}
+    public void set (T t){
+	this.t = t;
+    }    
+}
+
+class Simple {
+}
+
+class Test{
+    LinkedList[] x;
+    LinkedList y;
+    
+    void f(){
+	y.set(x[0].get());
+    }   
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t09/before/test.java b/java/java-tests/testData/refactoring/typeCook/t09/before/test.java
new file mode 100644
index 0000000..d83140f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t09/before/test.java
@@ -0,0 +1,19 @@
+class LinkedList<T>{
+    T t;
+    public T get(){return t;}
+    public void set (T t){
+	this.t = t;
+    }    
+}
+
+class Simple {
+}
+
+class Test{
+    LinkedList[] x;
+    LinkedList y;
+    
+    void f(){
+	y.set(x[0].get());
+    }   
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t10/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t10/after/Test.1.items
new file mode 100644
index 0000000..6e8ac38
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t10/after/Test.1.items
@@ -0,0 +1,2 @@
+LinkedList<java.lang.Object>[]\nPsiField:x
+LinkedList\nPsiField:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t10/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t10/after/Test.items
new file mode 100644
index 0000000..256a636
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t10/after/Test.items
@@ -0,0 +1,2 @@
+LinkedList[]\nPsiField:x
+LinkedList\nPsiField:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t10/after/test.java b/java/java-tests/testData/refactoring/typeCook/t10/after/test.java
new file mode 100644
index 0000000..70c046a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t10/after/test.java
@@ -0,0 +1,20 @@
+class LinkedList<T>{
+    T t;
+    public T get(){return t;}
+    public void set (T t){
+	this.t = t;
+    }    
+}
+
+class Simple {
+}
+
+class Test{
+    LinkedList[] x;
+    LinkedList y;
+    
+    void f(){
+	x[0].set (new Simple());
+	x[1].set (new Test());
+    }   
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t10/before/test.java b/java/java-tests/testData/refactoring/typeCook/t10/before/test.java
new file mode 100644
index 0000000..70c046a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t10/before/test.java
@@ -0,0 +1,20 @@
+class LinkedList<T>{
+    T t;
+    public T get(){return t;}
+    public void set (T t){
+	this.t = t;
+    }    
+}
+
+class Simple {
+}
+
+class Test{
+    LinkedList[] x;
+    LinkedList y;
+    
+    void f(){
+	x[0].set (new Simple());
+	x[1].set (new Test());
+    }   
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t100/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t100/after/Test.1.items
new file mode 100644
index 0000000..a720f7d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t100/after/Test.1.items
@@ -0,0 +1 @@
+List<java.lang.String>\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t100/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t100/after/Test.items
new file mode 100644
index 0000000..2d2088b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t100/after/Test.items
@@ -0,0 +1 @@
+List\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t100/after/test.java b/java/java-tests/testData/refactoring/typeCook/t100/after/test.java
new file mode 100644
index 0000000..5ace483
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t100/after/test.java
@@ -0,0 +1,11 @@
+class List<T> {
+  <A extends T> void f (A a){
+  }
+}
+
+class Test {
+  void foo (){
+    List x = null;
+    x.f("");
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t100/before/test.java b/java/java-tests/testData/refactoring/typeCook/t100/before/test.java
new file mode 100644
index 0000000..5ace483
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t100/before/test.java
@@ -0,0 +1,11 @@
+class List<T> {
+  <A extends T> void f (A a){
+  }
+}
+
+class Test {
+  void foo (){
+    List x = null;
+    x.f("");
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t101/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t101/after/Test.1.items
new file mode 100644
index 0000000..a720f7d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t101/after/Test.1.items
@@ -0,0 +1 @@
+List<java.lang.String>\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t101/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t101/after/Test.items
new file mode 100644
index 0000000..2d2088b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t101/after/Test.items
@@ -0,0 +1 @@
+List\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t101/after/test.java b/java/java-tests/testData/refactoring/typeCook/t101/after/test.java
new file mode 100644
index 0000000..930f33c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t101/after/test.java
@@ -0,0 +1,11 @@
+class List<T> {
+  <A> void f (T a){
+  }
+}
+
+class Test {
+  void foo (){
+    List x = null;
+    x.f("");
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t101/before/test.java b/java/java-tests/testData/refactoring/typeCook/t101/before/test.java
new file mode 100644
index 0000000..930f33c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t101/before/test.java
@@ -0,0 +1,11 @@
+class List<T> {
+  <A> void f (T a){
+  }
+}
+
+class Test {
+  void foo (){
+    List x = null;
+    x.f("");
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t102/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t102/after/Test.1.items
new file mode 100644
index 0000000..2d2088b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t102/after/Test.1.items
@@ -0,0 +1 @@
+List\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t102/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t102/after/Test.items
new file mode 100644
index 0000000..2d2088b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t102/after/Test.items
@@ -0,0 +1 @@
+List\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t102/after/test.java b/java/java-tests/testData/refactoring/typeCook/t102/after/test.java
new file mode 100644
index 0000000..8f1db94
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t102/after/test.java
@@ -0,0 +1,11 @@
+class List<T> {
+  <A> void f (A a){
+  }
+}
+
+class Test {
+  void foo (){
+    List x = null;
+    x.f("");
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t102/before/test.java b/java/java-tests/testData/refactoring/typeCook/t102/before/test.java
new file mode 100644
index 0000000..8f1db94
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t102/before/test.java
@@ -0,0 +1,11 @@
+class List<T> {
+  <A> void f (A a){
+  }
+}
+
+class Test {
+  void foo (){
+    List x = null;
+    x.f("");
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t103/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t103/after/Test.1.items
new file mode 100644
index 0000000..a720f7d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t103/after/Test.1.items
@@ -0,0 +1 @@
+List<java.lang.String>\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t103/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t103/after/Test.items
new file mode 100644
index 0000000..2d2088b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t103/after/Test.items
@@ -0,0 +1 @@
+List\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t103/after/test.java b/java/java-tests/testData/refactoring/typeCook/t103/after/test.java
new file mode 100644
index 0000000..09b1f8a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t103/after/test.java
@@ -0,0 +1,15 @@
+class List<T> {
+  <A extends List<T>> void f (A a){
+  }
+}
+
+class Mist extends List<String>{
+}
+
+class Test {
+  void foo (){
+    Mist y = null;
+    List x = null;
+    x.f(y);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t103/before/test.java b/java/java-tests/testData/refactoring/typeCook/t103/before/test.java
new file mode 100644
index 0000000..09b1f8a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t103/before/test.java
@@ -0,0 +1,15 @@
+class List<T> {
+  <A extends List<T>> void f (A a){
+  }
+}
+
+class Mist extends List<String>{
+}
+
+class Test {
+  void foo (){
+    Mist y = null;
+    List x = null;
+    x.f(y);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t104/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t104/after/Test.1.items
new file mode 100644
index 0000000..8fbf92f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t104/after/Test.1.items
@@ -0,0 +1 @@
+foo<Mist>\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t104/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t104/after/Test.items
new file mode 100644
index 0000000..e77d319
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t104/after/Test.items
@@ -0,0 +1 @@
+foo\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t104/after/test.java b/java/java-tests/testData/refactoring/typeCook/t104/after/test.java
new file mode 100644
index 0000000..82a21f7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t104/after/test.java
@@ -0,0 +1,17 @@
+class List<T> {
+}
+
+class Mist extends List<String>{
+}
+
+class foo<X extends List>{
+  X x;
+}
+
+class Test {
+  void foo (){
+    Mist y = null;
+    foo x = null;
+    x.x = y;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t104/before/test.java b/java/java-tests/testData/refactoring/typeCook/t104/before/test.java
new file mode 100644
index 0000000..82a21f7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t104/before/test.java
@@ -0,0 +1,17 @@
+class List<T> {
+}
+
+class Mist extends List<String>{
+}
+
+class foo<X extends List>{
+  X x;
+}
+
+class Test {
+  void foo (){
+    Mist y = null;
+    foo x = null;
+    x.x = y;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t105/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t105/after/Test.1.items
new file mode 100644
index 0000000..9501590
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t105/after/Test.1.items
@@ -0,0 +1 @@
+Mist<java.lang.String>\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t105/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t105/after/Test.items
new file mode 100644
index 0000000..4731834
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t105/after/Test.items
@@ -0,0 +1 @@
+Mist\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t105/after/test.java b/java/java-tests/testData/refactoring/typeCook/t105/after/test.java
new file mode 100644
index 0000000..827af95
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t105/after/test.java
@@ -0,0 +1,15 @@
+class List<T> {
+  <A extends T> void f (A x){
+  }
+}
+
+class Mist<X> {
+  List<X> x;
+}
+
+class Test {
+  void foo (){
+    Mist x = null;
+    x.x.f("");
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t105/before/test.java b/java/java-tests/testData/refactoring/typeCook/t105/before/test.java
new file mode 100644
index 0000000..827af95
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t105/before/test.java
@@ -0,0 +1,15 @@
+class List<T> {
+  <A extends T> void f (A x){
+  }
+}
+
+class Mist<X> {
+  List<X> x;
+}
+
+class Test {
+  void foo (){
+    Mist x = null;
+    x.x.f("");
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t106/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t106/after/Test.1.items
new file mode 100644
index 0000000..2d2088b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t106/after/Test.1.items
@@ -0,0 +1 @@
+List\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t106/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t106/after/Test.items
new file mode 100644
index 0000000..2d2088b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t106/after/Test.items
@@ -0,0 +1 @@
+List\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t106/after/test.java b/java/java-tests/testData/refactoring/typeCook/t106/after/test.java
new file mode 100644
index 0000000..af95dc1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t106/after/test.java
@@ -0,0 +1,12 @@
+class List<T> {
+  <A> A[] f (A[] x){
+    return x;
+  }
+}
+
+class Test {
+  void foo (){
+    List x = null;
+    String[] y = (String[]) x.f(new String[] {});
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t106/before/test.java b/java/java-tests/testData/refactoring/typeCook/t106/before/test.java
new file mode 100644
index 0000000..af95dc1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t106/before/test.java
@@ -0,0 +1,12 @@
+class List<T> {
+  <A> A[] f (A[] x){
+    return x;
+  }
+}
+
+class Test {
+  void foo (){
+    List x = null;
+    String[] y = (String[]) x.f(new String[] {});
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t107/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t107/after/Test.1.items
new file mode 100644
index 0000000..a720f7d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t107/after/Test.1.items
@@ -0,0 +1 @@
+List<java.lang.String>\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t107/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t107/after/Test.items
new file mode 100644
index 0000000..2d2088b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t107/after/Test.items
@@ -0,0 +1 @@
+List\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t107/after/test.java b/java/java-tests/testData/refactoring/typeCook/t107/after/test.java
new file mode 100644
index 0000000..2505104
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t107/after/test.java
@@ -0,0 +1,12 @@
+class List<T> {
+  <A extends T> A[] f (A[] x){
+    return x;
+  }
+}
+
+class Test {
+  void foo (){
+    List x = null;
+    String[] y = (String[]) x.f(new String[] {});
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t107/before/test.java b/java/java-tests/testData/refactoring/typeCook/t107/before/test.java
new file mode 100644
index 0000000..2505104
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t107/before/test.java
@@ -0,0 +1,12 @@
+class List<T> {
+  <A extends T> A[] f (A[] x){
+    return x;
+  }
+}
+
+class Test {
+  void foo (){
+    List x = null;
+    String[] y = (String[]) x.f(new String[] {});
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t108/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t108/after/Test.1.items
new file mode 100644
index 0000000..a720f7d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t108/after/Test.1.items
@@ -0,0 +1 @@
+List<java.lang.String>\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t108/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t108/after/Test.items
new file mode 100644
index 0000000..2d2088b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t108/after/Test.items
@@ -0,0 +1 @@
+List\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t108/after/test.java b/java/java-tests/testData/refactoring/typeCook/t108/after/test.java
new file mode 100644
index 0000000..d3002ae
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t108/after/test.java
@@ -0,0 +1,14 @@
+class List<T> {
+  <A> List<A> f (List<A> x){
+    return x;
+  }
+}
+
+class Test {
+  void foo (){
+    List x = null;
+    List<String> y = null;
+
+    x = x.f(y);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t108/before/test.java b/java/java-tests/testData/refactoring/typeCook/t108/before/test.java
new file mode 100644
index 0000000..d3002ae
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t108/before/test.java
@@ -0,0 +1,14 @@
+class List<T> {
+  <A> List<A> f (List<A> x){
+    return x;
+  }
+}
+
+class Test {
+  void foo (){
+    List x = null;
+    List<String> y = null;
+
+    x = x.f(y);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t109/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t109/after/Test.1.items
new file mode 100644
index 0000000..a720f7d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t109/after/Test.1.items
@@ -0,0 +1 @@
+List<java.lang.String>\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t109/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t109/after/Test.items
new file mode 100644
index 0000000..2d2088b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t109/after/Test.items
@@ -0,0 +1 @@
+List\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t109/after/test.java b/java/java-tests/testData/refactoring/typeCook/t109/after/test.java
new file mode 100644
index 0000000..f0e93b2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t109/after/test.java
@@ -0,0 +1,12 @@
+class List<T> {
+  <A> List<A> f (A[] x){
+    return x;
+  }
+}
+
+class Test {
+  void foo (){
+    List x = null;
+    x = x.f(new String[] {});
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t109/before/test.java b/java/java-tests/testData/refactoring/typeCook/t109/before/test.java
new file mode 100644
index 0000000..f0e93b2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t109/before/test.java
@@ -0,0 +1,12 @@
+class List<T> {
+  <A> List<A> f (A[] x){
+    return x;
+  }
+}
+
+class Test {
+  void foo (){
+    List x = null;
+    x = x.f(new String[] {});
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t11/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t11/after/Test.1.items
new file mode 100644
index 0000000..3603290
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t11/after/Test.1.items
@@ -0,0 +1,2 @@
+LinkedList\nPsiField:x
+LinkedList\nPsiField:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t11/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t11/after/Test.items
new file mode 100644
index 0000000..3603290
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t11/after/Test.items
@@ -0,0 +1,2 @@
+LinkedList\nPsiField:x
+LinkedList\nPsiField:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t11/after/test.java b/java/java-tests/testData/refactoring/typeCook/t11/after/test.java
new file mode 100644
index 0000000..f4994e3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t11/after/test.java
@@ -0,0 +1,19 @@
+class LinkedList<T>{
+    T t;
+    public T get(){return t;}
+    public void set (T t){
+	this.t = t;
+    }    
+}
+
+class Simple {
+}
+
+class Test{
+    LinkedList y;
+    LinkedList x;
+    
+    void f(){
+       y.set(true ? x.get() : x.get());
+    }   
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t11/before/test.java b/java/java-tests/testData/refactoring/typeCook/t11/before/test.java
new file mode 100644
index 0000000..f4994e3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t11/before/test.java
@@ -0,0 +1,19 @@
+class LinkedList<T>{
+    T t;
+    public T get(){return t;}
+    public void set (T t){
+	this.t = t;
+    }    
+}
+
+class Simple {
+}
+
+class Test{
+    LinkedList y;
+    LinkedList x;
+    
+    void f(){
+       y.set(true ? x.get() : x.get());
+    }   
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t110/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t110/after/Test.1.items
new file mode 100644
index 0000000..5db1d5b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t110/after/Test.1.items
@@ -0,0 +1,3 @@
+List<java.lang.String>\nPsiLocalVariable:y
+List<java.lang.String>\nnew
+List\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t110/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t110/after/Test.items
new file mode 100644
index 0000000..0d84b99
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t110/after/Test.items
@@ -0,0 +1,3 @@
+List\nPsiLocalVariable:x
+List\nPsiLocalVariable:y
+List\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t110/after/test.java b/java/java-tests/testData/refactoring/typeCook/t110/after/test.java
new file mode 100644
index 0000000..b6db3ae
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t110/after/test.java
@@ -0,0 +1,15 @@
+class List<T> {
+  <A> List<A> f (A[] x){
+    return x;
+  }
+
+  <B extends T> List(List<B> y){
+  }
+}
+
+class Test {
+  void foo (){
+    List x = null;
+    List y = new List(x.f(new String[] {}));
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t110/before/test.java b/java/java-tests/testData/refactoring/typeCook/t110/before/test.java
new file mode 100644
index 0000000..b6db3ae
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t110/before/test.java
@@ -0,0 +1,15 @@
+class List<T> {
+  <A> List<A> f (A[] x){
+    return x;
+  }
+
+  <B extends T> List(List<B> y){
+  }
+}
+
+class Test {
+  void foo (){
+    List x = null;
+    List y = new List(x.f(new String[] {}));
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t111/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t111/after/Test.1.items
new file mode 100644
index 0000000..4699519
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t111/after/Test.1.items
@@ -0,0 +1,2 @@
+List<java.lang.String>\nPsiLocalVariable:x
+List<java.lang.String>\nPsiLocalVariable:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t111/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t111/after/Test.items
new file mode 100644
index 0000000..4b700c4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t111/after/Test.items
@@ -0,0 +1,2 @@
+List\nPsiLocalVariable:x
+List\nPsiLocalVariable:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t111/after/test.java b/java/java-tests/testData/refactoring/typeCook/t111/after/test.java
new file mode 100644
index 0000000..4921dd1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t111/after/test.java
@@ -0,0 +1,15 @@
+class List<T> {
+  <A> List<A> f (List<A> x){
+    return x;
+  }
+  T t;
+}
+
+class Test {
+  void foo (){
+    List x = null;
+    List y = x.f(x);
+
+    x.t = "";
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t111/before/test.java b/java/java-tests/testData/refactoring/typeCook/t111/before/test.java
new file mode 100644
index 0000000..4921dd1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t111/before/test.java
@@ -0,0 +1,15 @@
+class List<T> {
+  <A> List<A> f (List<A> x){
+    return x;
+  }
+  T t;
+}
+
+class Test {
+  void foo (){
+    List x = null;
+    List y = x.f(x);
+
+    x.t = "";
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t112/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t112/after/Test.1.items
new file mode 100644
index 0000000..4d35d94
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t112/after/Test.1.items
@@ -0,0 +1,2 @@
+List<java.lang.String>\nPsiLocalVariable:y
+List<java.lang.String>\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t112/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t112/after/Test.items
new file mode 100644
index 0000000..03a7856
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t112/after/Test.items
@@ -0,0 +1,2 @@
+List\nPsiLocalVariable:y
+List\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t112/after/test.java b/java/java-tests/testData/refactoring/typeCook/t112/after/test.java
new file mode 100644
index 0000000..c1b7689
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t112/after/test.java
@@ -0,0 +1,13 @@
+class List<T> {
+  <A extends T> List(A x){
+    t = x;
+  }
+
+  T t;
+}
+
+class Test {
+  void foo (){
+    List y = new List("");
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t112/before/test.java b/java/java-tests/testData/refactoring/typeCook/t112/before/test.java
new file mode 100644
index 0000000..c1b7689
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t112/before/test.java
@@ -0,0 +1,13 @@
+class List<T> {
+  <A extends T> List(A x){
+    t = x;
+  }
+
+  T t;
+}
+
+class Test {
+  void foo (){
+    List y = new List("");
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t113/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t113/after/Test.1.items
new file mode 100644
index 0000000..4d35d94
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t113/after/Test.1.items
@@ -0,0 +1,2 @@
+List<java.lang.String>\nPsiLocalVariable:y
+List<java.lang.String>\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t113/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t113/after/Test.items
new file mode 100644
index 0000000..03a7856
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t113/after/Test.items
@@ -0,0 +1,2 @@
+List\nPsiLocalVariable:y
+List\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t113/after/test.java b/java/java-tests/testData/refactoring/typeCook/t113/after/test.java
new file mode 100644
index 0000000..c1b7689
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t113/after/test.java
@@ -0,0 +1,13 @@
+class List<T> {
+  <A extends T> List(A x){
+    t = x;
+  }
+
+  T t;
+}
+
+class Test {
+  void foo (){
+    List y = new List("");
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t113/before/test.java b/java/java-tests/testData/refactoring/typeCook/t113/before/test.java
new file mode 100644
index 0000000..c1b7689
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t113/before/test.java
@@ -0,0 +1,13 @@
+class List<T> {
+  <A extends T> List(A x){
+    t = x;
+  }
+
+  T t;
+}
+
+class Test {
+  void foo (){
+    List y = new List("");
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t114/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t114/after/Test.1.items
new file mode 100644
index 0000000..8525308
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t114/after/Test.1.items
@@ -0,0 +1 @@
+List<java.lang.String>\nPsiLocalVariable:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t114/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t114/after/Test.items
new file mode 100644
index 0000000..8de11ea
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t114/after/Test.items
@@ -0,0 +1 @@
+List\nPsiLocalVariable:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t114/after/test.java b/java/java-tests/testData/refactoring/typeCook/t114/after/test.java
new file mode 100644
index 0000000..b6463d1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t114/after/test.java
@@ -0,0 +1,12 @@
+class List<T> {
+  void f(T[] x){
+  }
+}
+
+class Test {
+  void foo (){
+    List y = null;
+
+    y.f(new String[] {});
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t114/before/test.java b/java/java-tests/testData/refactoring/typeCook/t114/before/test.java
new file mode 100644
index 0000000..b6463d1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t114/before/test.java
@@ -0,0 +1,12 @@
+class List<T> {
+  void f(T[] x){
+  }
+}
+
+class Test {
+  void foo (){
+    List y = null;
+
+    y.f(new String[] {});
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t115/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t115/after/Test.1.items
new file mode 100644
index 0000000..8525308
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t115/after/Test.1.items
@@ -0,0 +1 @@
+List<java.lang.String>\nPsiLocalVariable:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t115/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t115/after/Test.items
new file mode 100644
index 0000000..8de11ea
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t115/after/Test.items
@@ -0,0 +1 @@
+List\nPsiLocalVariable:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t115/after/test.java b/java/java-tests/testData/refactoring/typeCook/t115/after/test.java
new file mode 100644
index 0000000..1801e96
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t115/after/test.java
@@ -0,0 +1,13 @@
+class List<T> {
+  T[] f(){
+    return null;
+  }
+}
+
+class Test {
+  void foo (){
+    List y = null;
+
+    String[] x = (String[]) y.f();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t115/before/test.java b/java/java-tests/testData/refactoring/typeCook/t115/before/test.java
new file mode 100644
index 0000000..1801e96
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t115/before/test.java
@@ -0,0 +1,13 @@
+class List<T> {
+  T[] f(){
+    return null;
+  }
+}
+
+class Test {
+  void foo (){
+    List y = null;
+
+    String[] x = (String[]) y.f();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t116/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t116/after/Test.1.items
new file mode 100644
index 0000000..8525308
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t116/after/Test.1.items
@@ -0,0 +1 @@
+List<java.lang.String>\nPsiLocalVariable:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t116/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t116/after/Test.items
new file mode 100644
index 0000000..8de11ea
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t116/after/Test.items
@@ -0,0 +1 @@
+List\nPsiLocalVariable:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t116/after/test.java b/java/java-tests/testData/refactoring/typeCook/t116/after/test.java
new file mode 100644
index 0000000..c2383c2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t116/after/test.java
@@ -0,0 +1,13 @@
+class List<T> {
+  T[] f(){
+    return null;
+  }
+}
+
+class Test {
+  void foo (){
+    List y = null;
+
+    String x = (String) (y.f()[0]);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t116/before/test.java b/java/java-tests/testData/refactoring/typeCook/t116/before/test.java
new file mode 100644
index 0000000..c2383c2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t116/before/test.java
@@ -0,0 +1,13 @@
+class List<T> {
+  T[] f(){
+    return null;
+  }
+}
+
+class Test {
+  void foo (){
+    List y = null;
+
+    String x = (String) (y.f()[0]);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t117/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t117/after/Test.1.items
new file mode 100644
index 0000000..8525308
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t117/after/Test.1.items
@@ -0,0 +1 @@
+List<java.lang.String>\nPsiLocalVariable:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t117/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t117/after/Test.items
new file mode 100644
index 0000000..8de11ea
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t117/after/Test.items
@@ -0,0 +1 @@
+List\nPsiLocalVariable:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t117/after/test.java b/java/java-tests/testData/refactoring/typeCook/t117/after/test.java
new file mode 100644
index 0000000..035b308
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t117/after/test.java
@@ -0,0 +1,12 @@
+class List<T> {
+  static <A, B extends List<A>> void f(A x, B y){
+  }
+}
+
+class Test {
+  void foo (){
+    List y = null;
+
+    List.f("", y);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t117/before/test.java b/java/java-tests/testData/refactoring/typeCook/t117/before/test.java
new file mode 100644
index 0000000..035b308
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t117/before/test.java
@@ -0,0 +1,12 @@
+class List<T> {
+  static <A, B extends List<A>> void f(A x, B y){
+  }
+}
+
+class Test {
+  void foo (){
+    List y = null;
+
+    List.f("", y);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t118/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t118/after/Test.1.items
new file mode 100644
index 0000000..84e9026
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t118/after/Test.1.items
@@ -0,0 +1,2 @@
+List<java.lang.String>\nPsiLocalVariable:y
+Mist<java.lang.String>\nPsiLocalVariable:z
diff --git a/java/java-tests/testData/refactoring/typeCook/t118/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t118/after/Test.items
new file mode 100644
index 0000000..4512f01
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t118/after/Test.items
@@ -0,0 +1,2 @@
+List\nPsiLocalVariable:y
+Mist\nPsiLocalVariable:z
diff --git a/java/java-tests/testData/refactoring/typeCook/t118/after/test.java b/java/java-tests/testData/refactoring/typeCook/t118/after/test.java
new file mode 100644
index 0000000..c5cbc6c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t118/after/test.java
@@ -0,0 +1,19 @@
+class List<T> {
+  static <A, B extends List<A>> void f(A x, B y){
+  }
+  T t;
+}
+
+class Mist<T> extends List<T>{
+}
+
+class Test {
+  void foo (){
+    List y = null;
+    Mist z = null;
+
+    List.f(y.t, z);
+
+    z.t = "";
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t118/before/test.java b/java/java-tests/testData/refactoring/typeCook/t118/before/test.java
new file mode 100644
index 0000000..c5cbc6c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t118/before/test.java
@@ -0,0 +1,19 @@
+class List<T> {
+  static <A, B extends List<A>> void f(A x, B y){
+  }
+  T t;
+}
+
+class Mist<T> extends List<T>{
+}
+
+class Test {
+  void foo (){
+    List y = null;
+    Mist z = null;
+
+    List.f(y.t, z);
+
+    z.t = "";
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t119/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t119/after/Test.1.items
new file mode 100644
index 0000000..5ddc5f1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t119/after/Test.1.items
@@ -0,0 +1,3 @@
+List<java.lang.String>\nPsiLocalVariable:x
+List<java.lang.String>\nPsiLocalVariable:y
+List<java.lang.String>\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t119/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t119/after/Test.items
new file mode 100644
index 0000000..0d84b99
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t119/after/Test.items
@@ -0,0 +1,3 @@
+List\nPsiLocalVariable:x
+List\nPsiLocalVariable:y
+List\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t119/after/test.java b/java/java-tests/testData/refactoring/typeCook/t119/after/test.java
new file mode 100644
index 0000000..83f433b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t119/after/test.java
@@ -0,0 +1,15 @@
+class List<T> {
+  <A extends T> List(List<A> x){
+  }
+
+  T t;
+}
+
+class Test {
+  void foo (){
+    List x = null;
+    List y = new List(x);
+
+    x.t = "";
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t119/before/test.java b/java/java-tests/testData/refactoring/typeCook/t119/before/test.java
new file mode 100644
index 0000000..83f433b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t119/before/test.java
@@ -0,0 +1,15 @@
+class List<T> {
+  <A extends T> List(List<A> x){
+  }
+
+  T t;
+}
+
+class Test {
+  void foo (){
+    List x = null;
+    List y = new List(x);
+
+    x.t = "";
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t12/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t12/after/Test.1.items
new file mode 100644
index 0000000..1fa8eac
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t12/after/Test.1.items
@@ -0,0 +1,2 @@
+LinkedList<Simple>\nPsiField:x
+LinkedList<Simple>\nPsiField:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t12/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t12/after/Test.items
new file mode 100644
index 0000000..3603290
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t12/after/Test.items
@@ -0,0 +1,2 @@
+LinkedList\nPsiField:x
+LinkedList\nPsiField:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t12/after/test.java b/java/java-tests/testData/refactoring/typeCook/t12/after/test.java
new file mode 100644
index 0000000..819342b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t12/after/test.java
@@ -0,0 +1,22 @@
+class LinkedList<T>{
+    T t;
+    public T get(){return t;}
+    public void set (T t){
+	this.t = t;
+    }    
+}
+
+class Simple {
+   boolean f(){
+    return false;
+   }
+}
+
+class Test{
+    LinkedList y;
+    LinkedList x;
+    
+    void f(){
+       y.set(((Simple) y.get()).f() ? x.get() : x.get());
+    }   
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t12/before/test.java b/java/java-tests/testData/refactoring/typeCook/t12/before/test.java
new file mode 100644
index 0000000..819342b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t12/before/test.java
@@ -0,0 +1,22 @@
+class LinkedList<T>{
+    T t;
+    public T get(){return t;}
+    public void set (T t){
+	this.t = t;
+    }    
+}
+
+class Simple {
+   boolean f(){
+    return false;
+   }
+}
+
+class Test{
+    LinkedList y;
+    LinkedList x;
+    
+    void f(){
+       y.set(((Simple) y.get()).f() ? x.get() : x.get());
+    }   
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t120/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t120/after/Test.1.items
new file mode 100644
index 0000000..8525308
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t120/after/Test.1.items
@@ -0,0 +1 @@
+List<java.lang.String>\nPsiLocalVariable:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t120/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t120/after/Test.items
new file mode 100644
index 0000000..8de11ea
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t120/after/Test.items
@@ -0,0 +1 @@
+List\nPsiLocalVariable:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t120/after/test.java b/java/java-tests/testData/refactoring/typeCook/t120/after/test.java
new file mode 100644
index 0000000..6bbdc6c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t120/after/test.java
@@ -0,0 +1,15 @@
+class A {}
+
+class List<T> extends A {
+  T t;
+}
+
+
+class Test {
+  void foo (){
+    List y = null;
+    A a = y;
+
+    y.t = "";
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t120/before/test.java b/java/java-tests/testData/refactoring/typeCook/t120/before/test.java
new file mode 100644
index 0000000..6bbdc6c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t120/before/test.java
@@ -0,0 +1,15 @@
+class A {}
+
+class List<T> extends A {
+  T t;
+}
+
+
+class Test {
+  void foo (){
+    List y = null;
+    A a = y;
+
+    y.t = "";
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t121/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t121/after/Test.1.items
new file mode 100644
index 0000000..fbbd7e4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t121/after/Test.1.items
@@ -0,0 +1,2 @@
+A\nPsiLocalVariable:a
+List<java.lang.String>\nPsiLocalVariable:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t121/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t121/after/Test.items
new file mode 100644
index 0000000..52a6f28
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t121/after/Test.items
@@ -0,0 +1,2 @@
+A\nPsiLocalVariable:a
+List\nPsiLocalVariable:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t121/after/test.java b/java/java-tests/testData/refactoring/typeCook/t121/after/test.java
new file mode 100644
index 0000000..03476c7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t121/after/test.java
@@ -0,0 +1,15 @@
+class A<X> {}
+
+class List<T> extends A {
+  T t;
+}
+
+
+class Test {
+  void foo (){
+    List y = null;
+    A a = y;
+
+    y.t = "";
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t121/before/test.java b/java/java-tests/testData/refactoring/typeCook/t121/before/test.java
new file mode 100644
index 0000000..03476c7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t121/before/test.java
@@ -0,0 +1,15 @@
+class A<X> {}
+
+class List<T> extends A {
+  T t;
+}
+
+
+class Test {
+  void foo (){
+    List y = null;
+    A a = y;
+
+    y.t = "";
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t122/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t122/after/Test.1.items
new file mode 100644
index 0000000..8342bdd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t122/after/Test.1.items
@@ -0,0 +1,3 @@
+List<java.lang.String>\nparameter 0 of foo
+Mist\nPsiLocalVariable:z
+Mist\nPsiTypeCastExpression:(Mist) y
diff --git a/java/java-tests/testData/refactoring/typeCook/t122/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t122/after/Test.items
new file mode 100644
index 0000000..264e049
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t122/after/Test.items
@@ -0,0 +1,3 @@
+List\nparameter 0 of foo
+Mist\nPsiLocalVariable:z
+Mist\nPsiTypeCastExpression:(Mist) y
diff --git a/java/java-tests/testData/refactoring/typeCook/t122/after/test.java b/java/java-tests/testData/refactoring/typeCook/t122/after/test.java
new file mode 100644
index 0000000..81c1cbf6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t122/after/test.java
@@ -0,0 +1,13 @@
+class List<T> {
+  T t;
+}
+
+class Mist<Q> extends List {
+}
+
+class Test {
+  void foo (List y){
+    y.t = "";
+    Mist z = (Mist) y;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t122/before/test.java b/java/java-tests/testData/refactoring/typeCook/t122/before/test.java
new file mode 100644
index 0000000..81c1cbf6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t122/before/test.java
@@ -0,0 +1,13 @@
+class List<T> {
+  T t;
+}
+
+class Mist<Q> extends List {
+}
+
+class Test {
+  void foo (List y){
+    y.t = "";
+    Mist z = (Mist) y;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t123/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t123/after/Test.1.items
new file mode 100644
index 0000000..62a5cb1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t123/after/Test.1.items
@@ -0,0 +1 @@
+List<java.lang.String>\nparameter 0 of foo
diff --git a/java/java-tests/testData/refactoring/typeCook/t123/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t123/after/Test.items
new file mode 100644
index 0000000..04d4cc0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t123/after/Test.items
@@ -0,0 +1 @@
+List\nparameter 0 of foo
diff --git a/java/java-tests/testData/refactoring/typeCook/t123/after/test.java b/java/java-tests/testData/refactoring/typeCook/t123/after/test.java
new file mode 100644
index 0000000..9a197a4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t123/after/test.java
@@ -0,0 +1,13 @@
+class List<T> {
+  T t;
+}
+
+class A extends List{
+}
+
+class Test {
+  void foo (List y){
+    y.t = "";
+    A z = (A) y;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t123/before/test.java b/java/java-tests/testData/refactoring/typeCook/t123/before/test.java
new file mode 100644
index 0000000..9a197a4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t123/before/test.java
@@ -0,0 +1,13 @@
+class List<T> {
+  T t;
+}
+
+class A extends List{
+}
+
+class Test {
+  void foo (List y){
+    y.t = "";
+    A z = (A) y;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t124/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t124/after/Test.1.items
new file mode 100644
index 0000000..1a561e91
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t124/after/Test.1.items
@@ -0,0 +1 @@
+Map[]\nPsiLocalVariable:readVariables
diff --git a/java/java-tests/testData/refactoring/typeCook/t124/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t124/after/Test.items
new file mode 100644
index 0000000..1a561e91
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t124/after/Test.items
@@ -0,0 +1 @@
+Map[]\nPsiLocalVariable:readVariables
diff --git a/java/java-tests/testData/refactoring/typeCook/t124/after/test.java b/java/java-tests/testData/refactoring/typeCook/t124/after/test.java
new file mode 100644
index 0000000..c115ddc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t124/after/test.java
@@ -0,0 +1,12 @@
+interface Map<K, V> {
+}
+
+class THashMap implements Map {
+}
+
+class Test {
+  void f() {
+    Map[] readVariables = null;
+    readVariables[0] = new THashMap();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t124/before/test.java b/java/java-tests/testData/refactoring/typeCook/t124/before/test.java
new file mode 100644
index 0000000..c115ddc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t124/before/test.java
@@ -0,0 +1,12 @@
+interface Map<K, V> {
+}
+
+class THashMap implements Map {
+}
+
+class Test {
+  void f() {
+    Map[] readVariables = null;
+    readVariables[0] = new THashMap();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t125/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t125/after/Test.1.items
new file mode 100644
index 0000000..56e816a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t125/after/Test.1.items
@@ -0,0 +1 @@
+Map<java.lang.String,List>\nPsiLocalVariable:z
diff --git a/java/java-tests/testData/refactoring/typeCook/t125/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t125/after/Test.items
new file mode 100644
index 0000000..db4de3c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t125/after/Test.items
@@ -0,0 +1 @@
+Map\nPsiLocalVariable:z
diff --git a/java/java-tests/testData/refactoring/typeCook/t125/after/test.java b/java/java-tests/testData/refactoring/typeCook/t125/after/test.java
new file mode 100644
index 0000000..0b78133
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t125/after/test.java
@@ -0,0 +1,20 @@
+class Map<A, B>{
+  A a;
+  B b;
+}
+
+class List<C>{
+}
+
+class Test {
+  void f() {
+    List<Integer> x = null;
+    List<String> y = null;
+
+    Map z = null;
+
+    z.a = "";
+    z.b = x;
+    z.b = y;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t125/before/test.java b/java/java-tests/testData/refactoring/typeCook/t125/before/test.java
new file mode 100644
index 0000000..0b78133
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t125/before/test.java
@@ -0,0 +1,20 @@
+class Map<A, B>{
+  A a;
+  B b;
+}
+
+class List<C>{
+}
+
+class Test {
+  void f() {
+    List<Integer> x = null;
+    List<String> y = null;
+
+    Map z = null;
+
+    z.a = "";
+    z.b = x;
+    z.b = y;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t126/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t126/after/Test.1.items
new file mode 100644
index 0000000..db4de3c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t126/after/Test.1.items
@@ -0,0 +1 @@
+Map\nPsiLocalVariable:z
diff --git a/java/java-tests/testData/refactoring/typeCook/t126/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t126/after/Test.items
new file mode 100644
index 0000000..db4de3c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t126/after/Test.items
@@ -0,0 +1 @@
+Map\nPsiLocalVariable:z
diff --git a/java/java-tests/testData/refactoring/typeCook/t126/after/test.java b/java/java-tests/testData/refactoring/typeCook/t126/after/test.java
new file mode 100644
index 0000000..f4244b5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t126/after/test.java
@@ -0,0 +1,19 @@
+class Map<A, B>{
+  A a;
+  B b;
+}
+
+class List<C>{
+}
+
+class Test {
+  void f() {
+    Map<String, List<String>> x = null;
+    Map<String, List<Integer>> y = null;
+
+    Map z = null;
+
+    z = x;
+    z = y;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t126/before/test.java b/java/java-tests/testData/refactoring/typeCook/t126/before/test.java
new file mode 100644
index 0000000..f4244b5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t126/before/test.java
@@ -0,0 +1,19 @@
+class Map<A, B>{
+  A a;
+  B b;
+}
+
+class List<C>{
+}
+
+class Test {
+  void f() {
+    Map<String, List<String>> x = null;
+    Map<String, List<Integer>> y = null;
+
+    Map z = null;
+
+    z = x;
+    z = y;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t127/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t127/after/Test.1.items
new file mode 100644
index 0000000..23642c6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t127/after/Test.1.items
@@ -0,0 +1,2 @@
+List<A>\nPsiLocalVariable:b
+List<A>\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t127/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t127/after/Test.items
new file mode 100644
index 0000000..3f9fe17
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t127/after/Test.items
@@ -0,0 +1,2 @@
+List\nPsiLocalVariable:b
+List\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t127/after/test.java b/java/java-tests/testData/refactoring/typeCook/t127/after/test.java
new file mode 100644
index 0000000..3dee6a2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t127/after/test.java
@@ -0,0 +1,32 @@
+class A {
+}
+
+class B extends A {
+}
+
+class Collection<E>{
+}
+
+class List<T> extends Collection<T> {
+  List(Collection<T> a){
+  }
+
+  T t;
+}
+
+class Convertor{
+   static <X> List<X> asList (X[] x){
+    return null;
+   }
+}
+
+class Test {
+
+  void f() {
+    A[] a = null;
+    List b = new List(Convertor.asList(a));
+    B c = null;
+    b.t = c;
+  }
+
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t127/before/test.java b/java/java-tests/testData/refactoring/typeCook/t127/before/test.java
new file mode 100644
index 0000000..3dee6a2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t127/before/test.java
@@ -0,0 +1,32 @@
+class A {
+}
+
+class B extends A {
+}
+
+class Collection<E>{
+}
+
+class List<T> extends Collection<T> {
+  List(Collection<T> a){
+  }
+
+  T t;
+}
+
+class Convertor{
+   static <X> List<X> asList (X[] x){
+    return null;
+   }
+}
+
+class Test {
+
+  void f() {
+    A[] a = null;
+    List b = new List(Convertor.asList(a));
+    B c = null;
+    b.t = c;
+  }
+
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t128/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t128/after/Test.1.items
new file mode 100644
index 0000000..af43963
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t128/after/Test.1.items
@@ -0,0 +1 @@
+Collection<B>\nparameter 0 of g
diff --git a/java/java-tests/testData/refactoring/typeCook/t128/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t128/after/Test.items
new file mode 100644
index 0000000..2c089fa
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t128/after/Test.items
@@ -0,0 +1 @@
+Collection\nparameter 0 of g
diff --git a/java/java-tests/testData/refactoring/typeCook/t128/after/test.java b/java/java-tests/testData/refactoring/typeCook/t128/after/test.java
new file mode 100644
index 0000000..5fefa86
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t128/after/test.java
@@ -0,0 +1,21 @@
+class A {}
+class B extends A {}
+
+class Collection<T>{
+  T t;
+}
+
+class Set<X> extends Collection<X>{
+
+}
+
+class Test {
+  void g(Collection ancestors) {
+    A a = (A) ancestors.t;
+  }
+
+  void f() {
+    Set<B> x = null;
+    g(x);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t128/before/test.java b/java/java-tests/testData/refactoring/typeCook/t128/before/test.java
new file mode 100644
index 0000000..5fefa86
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t128/before/test.java
@@ -0,0 +1,21 @@
+class A {}
+class B extends A {}
+
+class Collection<T>{
+  T t;
+}
+
+class Set<X> extends Collection<X>{
+
+}
+
+class Test {
+  void g(Collection ancestors) {
+    A a = (A) ancestors.t;
+  }
+
+  void f() {
+    Set<B> x = null;
+    g(x);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t129/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t129/after/Test.1.items
new file mode 100644
index 0000000..54d3e75
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t129/after/Test.1.items
@@ -0,0 +1,2 @@
+Collection<B>\nparameter 0 of g
+Set<B>\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t129/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t129/after/Test.items
new file mode 100644
index 0000000..9590afe
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t129/after/Test.items
@@ -0,0 +1,2 @@
+Collection\nparameter 0 of g
+Set\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t129/after/test.java b/java/java-tests/testData/refactoring/typeCook/t129/after/test.java
new file mode 100644
index 0000000..221ea83
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t129/after/test.java
@@ -0,0 +1,22 @@
+class A {}
+class B extends A {}
+
+class Collection<T>{
+  T t;
+}
+
+class Set<X> extends Collection<X>{
+
+}
+
+class Test {
+  void g(Collection ancestors) {
+    A a = (A) ancestors.t;
+  }
+
+  void f() {
+    Set x = null;
+    x.t = new B();
+    g(x);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t129/before/test.java b/java/java-tests/testData/refactoring/typeCook/t129/before/test.java
new file mode 100644
index 0000000..221ea83
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t129/before/test.java
@@ -0,0 +1,22 @@
+class A {}
+class B extends A {}
+
+class Collection<T>{
+  T t;
+}
+
+class Set<X> extends Collection<X>{
+
+}
+
+class Test {
+  void g(Collection ancestors) {
+    A a = (A) ancestors.t;
+  }
+
+  void f() {
+    Set x = null;
+    x.t = new B();
+    g(x);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t13/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t13/after/Test.1.items
new file mode 100644
index 0000000..bd3e4637
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t13/after/Test.1.items
@@ -0,0 +1,3 @@
+LinkedList<LinkedList>\nPsiField:y
+LinkedList\nPsiField:x
+LinkedList\nPsiTypeCastExpression:(LinkedList) y.get()
diff --git a/java/java-tests/testData/refactoring/typeCook/t13/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t13/after/Test.items
new file mode 100644
index 0000000..af68720
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t13/after/Test.items
@@ -0,0 +1,3 @@
+LinkedList\nPsiField:x
+LinkedList\nPsiField:y
+LinkedList\nPsiTypeCastExpression:(LinkedList) y.get()
diff --git a/java/java-tests/testData/refactoring/typeCook/t13/after/test.java b/java/java-tests/testData/refactoring/typeCook/t13/after/test.java
new file mode 100644
index 0000000..2146756
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t13/after/test.java
@@ -0,0 +1,22 @@
+class LinkedList<T>{
+    T t;
+    public T get(){return t;}
+    public void set (T t){
+	this.t = t;
+    }    
+}
+
+class Simple {
+   boolean f(){
+    return false;
+   }
+}
+
+class Test{
+    LinkedList y;
+    LinkedList x;
+    
+    void f(){
+      x = (LinkedList) y.get();
+    }   
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t13/before/test.java b/java/java-tests/testData/refactoring/typeCook/t13/before/test.java
new file mode 100644
index 0000000..2146756
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t13/before/test.java
@@ -0,0 +1,22 @@
+class LinkedList<T>{
+    T t;
+    public T get(){return t;}
+    public void set (T t){
+	this.t = t;
+    }    
+}
+
+class Simple {
+   boolean f(){
+    return false;
+   }
+}
+
+class Test{
+    LinkedList y;
+    LinkedList x;
+    
+    void f(){
+      x = (LinkedList) y.get();
+    }   
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t130/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t130/after/Test.1.items
new file mode 100644
index 0000000..8b90cbc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t130/after/Test.1.items
@@ -0,0 +1,3 @@
+ArrayList\nPsiLocalVariable:requests
+ArrayList\nPsiTypeCastExpression:(ArrayList)requestMap.get(new A())
+Map<A,ArrayList<B>>\nparameter 0 of f
diff --git a/java/java-tests/testData/refactoring/typeCook/t130/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t130/after/Test.items
new file mode 100644
index 0000000..1b798a1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t130/after/Test.items
@@ -0,0 +1,3 @@
+ArrayList\nPsiLocalVariable:requests
+ArrayList\nPsiTypeCastExpression:(ArrayList)requestMap.get(new A())
+Map\nparameter 0 of f
diff --git a/java/java-tests/testData/refactoring/typeCook/t130/after/test.java b/java/java-tests/testData/refactoring/typeCook/t130/after/test.java
new file mode 100644
index 0000000..1a7db4f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t130/after/test.java
@@ -0,0 +1,25 @@
+class A {}
+class B {}
+
+class Map<X, Y>{
+ Y get (X x){
+  return null;
+ }
+}
+
+interface List<T> {
+  void add(T t);
+}
+
+class ArrayList<E> implements List<E>{
+  public void add(E e){
+  }
+}
+
+public class Test {
+  private static void f(Map requestMap) {
+    ArrayList requests = (ArrayList)requestMap.get(new A());
+    requests.add(new Object());
+    f(new Map<A, ArrayList<B>> ());
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t130/before/test.java b/java/java-tests/testData/refactoring/typeCook/t130/before/test.java
new file mode 100644
index 0000000..1a7db4f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t130/before/test.java
@@ -0,0 +1,25 @@
+class A {}
+class B {}
+
+class Map<X, Y>{
+ Y get (X x){
+  return null;
+ }
+}
+
+interface List<T> {
+  void add(T t);
+}
+
+class ArrayList<E> implements List<E>{
+  public void add(E e){
+  }
+}
+
+public class Test {
+  private static void f(Map requestMap) {
+    ArrayList requests = (ArrayList)requestMap.get(new A());
+    requests.add(new Object());
+    f(new Map<A, ArrayList<B>> ());
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t131/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t131/after/Test.1.items
new file mode 100644
index 0000000..bf22b4a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t131/after/Test.1.items
@@ -0,0 +1,2 @@
+List<java.lang.String>[]\nreturn of f
+MyList<java.lang.String>[]\nPsiField:l
diff --git a/java/java-tests/testData/refactoring/typeCook/t131/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t131/after/Test.items
new file mode 100644
index 0000000..d10f8c4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t131/after/Test.items
@@ -0,0 +1,2 @@
+List[]\nreturn of f
+MyList[]\nPsiField:l
diff --git a/java/java-tests/testData/refactoring/typeCook/t131/after/test.java b/java/java-tests/testData/refactoring/typeCook/t131/after/test.java
new file mode 100644
index 0000000..75258bc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t131/after/test.java
@@ -0,0 +1,19 @@
+class List<T> {
+   T t;
+}
+
+class MyList<P> extends List<P>{
+
+}
+
+public class Test {
+  MyList[] l;
+
+  List[] f (){
+    return l;
+  }
+
+  void g(){
+    l[0].t = "";
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t131/before/test.java b/java/java-tests/testData/refactoring/typeCook/t131/before/test.java
new file mode 100644
index 0000000..75258bc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t131/before/test.java
@@ -0,0 +1,19 @@
+class List<T> {
+   T t;
+}
+
+class MyList<P> extends List<P>{
+
+}
+
+public class Test {
+  MyList[] l;
+
+  List[] f (){
+    return l;
+  }
+
+  void g(){
+    l[0].t = "";
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t132/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t132/after/Test.1.items
new file mode 100644
index 0000000..6cb9a7a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t132/after/Test.1.items
@@ -0,0 +1,6 @@
+Test.List<Test.A>\nnew
+Test.List<Test.A>\nnew
+Test.List<Test.A>\nreturn of f
+Test.List<Test.A>\nreturn of f
+Test.List<Test.A>\nreturn of f
+Test.List<Test.A>\nreturn of f
diff --git a/java/java-tests/testData/refactoring/typeCook/t132/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t132/after/Test.items
new file mode 100644
index 0000000..cace174
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t132/after/Test.items
@@ -0,0 +1,6 @@
+Test.List\nnew
+Test.List\nnew
+Test.List\nreturn of f
+Test.List\nreturn of f
+Test.List\nreturn of f
+Test.List\nreturn of f
diff --git a/java/java-tests/testData/refactoring/typeCook/t132/after/test.java b/java/java-tests/testData/refactoring/typeCook/t132/after/test.java
new file mode 100644
index 0000000..508cc5a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t132/after/test.java
@@ -0,0 +1,32 @@
+public class Test {
+  class A{}
+  class B extends A{}
+
+  class List<X> {
+    List(X x){
+
+    }
+  }
+
+  interface I {
+    List f ();
+  }
+
+  I i1 = new I(){
+    public List f(){
+      return i2.f();
+    }
+  };
+
+  I i2 = new I(){
+    public List f(){
+      return new List(new A());
+    }
+  };
+
+  I i3 = new I(){
+    public List f(){
+      return new List(new B());
+    }
+  };
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t132/before/test.java b/java/java-tests/testData/refactoring/typeCook/t132/before/test.java
new file mode 100644
index 0000000..508cc5a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t132/before/test.java
@@ -0,0 +1,32 @@
+public class Test {
+  class A{}
+  class B extends A{}
+
+  class List<X> {
+    List(X x){
+
+    }
+  }
+
+  interface I {
+    List f ();
+  }
+
+  I i1 = new I(){
+    public List f(){
+      return i2.f();
+    }
+  };
+
+  I i2 = new I(){
+    public List f(){
+      return new List(new A());
+    }
+  };
+
+  I i3 = new I(){
+    public List f(){
+      return new List(new B());
+    }
+  };
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t133/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t133/after/Test.1.items
new file mode 100644
index 0000000..2457382
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t133/after/Test.1.items
@@ -0,0 +1 @@
+List<I>\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t133/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t133/after/Test.items
new file mode 100644
index 0000000..2d2088b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t133/after/Test.items
@@ -0,0 +1 @@
+List\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t133/after/test.java b/java/java-tests/testData/refactoring/typeCook/t133/after/test.java
new file mode 100644
index 0000000..b22b411
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t133/after/test.java
@@ -0,0 +1,13 @@
+class List<X>{
+  X x;
+}
+
+interface I {}
+
+public class Test {
+  void foo(){
+    List x = null;
+    x.x = new I(){
+    };
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t133/before/test.java b/java/java-tests/testData/refactoring/typeCook/t133/before/test.java
new file mode 100644
index 0000000..b22b411
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t133/before/test.java
@@ -0,0 +1,13 @@
+class List<X>{
+  X x;
+}
+
+interface I {}
+
+public class Test {
+  void foo(){
+    List x = null;
+    x.x = new I(){
+    };
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t134/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t134/after/Test.1.items
new file mode 100644
index 0000000..8387c41
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t134/after/Test.1.items
@@ -0,0 +1 @@
+ArrayList\nPsiLocalVariable:s
diff --git a/java/java-tests/testData/refactoring/typeCook/t134/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t134/after/Test.items
new file mode 100644
index 0000000..8387c41
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t134/after/Test.items
@@ -0,0 +1 @@
+ArrayList\nPsiLocalVariable:s
diff --git a/java/java-tests/testData/refactoring/typeCook/t134/after/test.java b/java/java-tests/testData/refactoring/typeCook/t134/after/test.java
new file mode 100644
index 0000000..3df2855
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t134/after/test.java
@@ -0,0 +1,20 @@
+interface List<T>{}
+
+class ArrayList<P> implements List<P>{}
+
+class Pair<X, Y>{}
+
+class C {}
+class A {}
+class B extends A{}
+
+class Test {
+  void buildAllMaps(){
+    List<Pair<B, C>> methods = new ArrayList<Pair<B, C>>();
+    ArrayList s = null;
+    g(methods);
+  }
+
+  <T> void g(List<Pair<T, C>> list) {
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t134/before/test.java b/java/java-tests/testData/refactoring/typeCook/t134/before/test.java
new file mode 100644
index 0000000..3df2855
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t134/before/test.java
@@ -0,0 +1,20 @@
+interface List<T>{}
+
+class ArrayList<P> implements List<P>{}
+
+class Pair<X, Y>{}
+
+class C {}
+class A {}
+class B extends A{}
+
+class Test {
+  void buildAllMaps(){
+    List<Pair<B, C>> methods = new ArrayList<Pair<B, C>>();
+    ArrayList s = null;
+    g(methods);
+  }
+
+  <T> void g(List<Pair<T, C>> list) {
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t135/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t135/after/Test.1.items
new file mode 100644
index 0000000..88fbe51
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t135/after/Test.1.items
@@ -0,0 +1 @@
+List<Pair<java.lang.String,java.lang.Integer>>\nPsiLocalVariable:a
diff --git a/java/java-tests/testData/refactoring/typeCook/t135/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t135/after/Test.items
new file mode 100644
index 0000000..0bc2052
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t135/after/Test.items
@@ -0,0 +1 @@
+List<Pair>\nPsiLocalVariable:a
diff --git a/java/java-tests/testData/refactoring/typeCook/t135/after/test.java b/java/java-tests/testData/refactoring/typeCook/t135/after/test.java
new file mode 100644
index 0000000..3a253ed
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t135/after/test.java
@@ -0,0 +1,17 @@
+class List<P> {
+  P p;
+}
+
+class Pair<X, Y>{
+  X x;
+  Y y;
+}
+
+class Test {
+  void f(){
+    List<Pair> a = null;
+
+    a.p.x = "";
+    a.p.y = new Integer(3);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t135/before/test.java b/java/java-tests/testData/refactoring/typeCook/t135/before/test.java
new file mode 100644
index 0000000..3a253ed
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t135/before/test.java
@@ -0,0 +1,17 @@
+class List<P> {
+  P p;
+}
+
+class Pair<X, Y>{
+  X x;
+  Y y;
+}
+
+class Test {
+  void f(){
+    List<Pair> a = null;
+
+    a.p.x = "";
+    a.p.y = new Integer(3);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t136/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t136/after/Test.1.items
new file mode 100644
index 0000000..88fbe51
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t136/after/Test.1.items
@@ -0,0 +1 @@
+List<Pair<java.lang.String,java.lang.Integer>>\nPsiLocalVariable:a
diff --git a/java/java-tests/testData/refactoring/typeCook/t136/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t136/after/Test.items
new file mode 100644
index 0000000..d35a360
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t136/after/Test.items
@@ -0,0 +1 @@
+List\nPsiLocalVariable:a
diff --git a/java/java-tests/testData/refactoring/typeCook/t136/after/test.java b/java/java-tests/testData/refactoring/typeCook/t136/after/test.java
new file mode 100644
index 0000000..9445e25
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t136/after/test.java
@@ -0,0 +1,14 @@
+class List<P> {
+  P p;
+}
+
+class Pair<X, Y>{
+  X x;
+  Y y;
+}
+
+class Test {
+  void f(){
+    List a = new List<Pair<String,Integer>> ();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t136/before/test.java b/java/java-tests/testData/refactoring/typeCook/t136/before/test.java
new file mode 100644
index 0000000..9445e25
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t136/before/test.java
@@ -0,0 +1,14 @@
+class List<P> {
+  P p;
+}
+
+class Pair<X, Y>{
+  X x;
+  Y y;
+}
+
+class Test {
+  void f(){
+    List a = new List<Pair<String,Integer>> ();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t137/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t137/after/Test.1.items
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t137/after/Test.1.items
diff --git a/java/java-tests/testData/refactoring/typeCook/t137/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t137/after/Test.items
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t137/after/Test.items
diff --git a/java/java-tests/testData/refactoring/typeCook/t137/after/test.java b/java/java-tests/testData/refactoring/typeCook/t137/after/test.java
new file mode 100644
index 0000000..cfaad2f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t137/after/test.java
@@ -0,0 +1,19 @@
+interface Comparable<X> {
+    boolean compare (X a, X b);
+}
+
+class Test {
+  <T> void sort(T[] x, Comparable<T> c){
+  }
+
+  void f(){
+    sort(
+      new String[1],
+      new Comparable(){
+        public boolean compare(Object a, Object b) {
+          return true;
+        }
+      }
+    );
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t137/before/test.java b/java/java-tests/testData/refactoring/typeCook/t137/before/test.java
new file mode 100644
index 0000000..cfaad2f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t137/before/test.java
@@ -0,0 +1,19 @@
+interface Comparable<X> {
+    boolean compare (X a, X b);
+}
+
+class Test {
+  <T> void sort(T[] x, Comparable<T> c){
+  }
+
+  void f(){
+    sort(
+      new String[1],
+      new Comparable(){
+        public boolean compare(Object a, Object b) {
+          return true;
+        }
+      }
+    );
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t138/after/test.java b/java/java-tests/testData/refactoring/typeCook/t138/after/test.java
new file mode 100644
index 0000000..d4b1c10
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t138/after/test.java
@@ -0,0 +1,25 @@
+class Map<X,Y>{
+  void put (X x, Y y){
+  }
+
+  Y get(X x){
+    return null;
+  }
+}
+
+class List<Z>{
+  Z z;
+}
+
+class Test{
+  Map<List, Object> y;
+
+  void foo(){
+    List<Integer> li = null;
+    y.put(li, "");
+  }
+
+  <T> void f (List<T> x, T z){
+    y.put(x, z);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t138/before/test.java b/java/java-tests/testData/refactoring/typeCook/t138/before/test.java
new file mode 100644
index 0000000..d4b1c10
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t138/before/test.java
@@ -0,0 +1,25 @@
+class Map<X,Y>{
+  void put (X x, Y y){
+  }
+
+  Y get(X x){
+    return null;
+  }
+}
+
+class List<Z>{
+  Z z;
+}
+
+class Test{
+  Map<List, Object> y;
+
+  void foo(){
+    List<Integer> li = null;
+    y.put(li, "");
+  }
+
+  <T> void f (List<T> x, T z){
+    y.put(x, z);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t139/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t139/after/Test.1.items
new file mode 100644
index 0000000..f41a13c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t139/after/Test.1.items
@@ -0,0 +1 @@
+List<java.lang.Integer>\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t139/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t139/after/Test.items
new file mode 100644
index 0000000..2d2088b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t139/after/Test.items
@@ -0,0 +1 @@
+List\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t139/after/test.java b/java/java-tests/testData/refactoring/typeCook/t139/after/test.java
new file mode 100644
index 0000000..e1fdee4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t139/after/test.java
@@ -0,0 +1,16 @@
+class List<Z>{
+  <T extends Z> void put(T t){
+  }
+
+  void mut(List<? extends Z> t){
+  }
+}
+
+
+class Test{
+  void foo(){
+    List x = null;
+
+    x.mut(new List<Integer>());
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t139/before/test.java b/java/java-tests/testData/refactoring/typeCook/t139/before/test.java
new file mode 100644
index 0000000..e1fdee4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t139/before/test.java
@@ -0,0 +1,16 @@
+class List<Z>{
+  <T extends Z> void put(T t){
+  }
+
+  void mut(List<? extends Z> t){
+  }
+}
+
+
+class Test{
+  void foo(){
+    List x = null;
+
+    x.mut(new List<Integer>());
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t14/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t14/after/Test.1.items
new file mode 100644
index 0000000..64448a9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t14/after/Test.1.items
@@ -0,0 +1,2 @@
+LinkedList<LinkedList<Simple>>\nPsiField:y
+LinkedList<Simple>\nPsiField:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t14/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t14/after/Test.items
new file mode 100644
index 0000000..3603290
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t14/after/Test.items
@@ -0,0 +1,2 @@
+LinkedList\nPsiField:x
+LinkedList\nPsiField:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t14/after/test.java b/java/java-tests/testData/refactoring/typeCook/t14/after/test.java
new file mode 100644
index 0000000..81cb032
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t14/after/test.java
@@ -0,0 +1,23 @@
+class LinkedList<T>{
+    T t;
+    public T get(){return t;}
+    public void set (T t){
+	this.t = t;
+    }    
+}
+
+class Simple {
+   boolean f(){
+    return false;
+   }
+}
+
+class Test{
+    LinkedList y;
+    LinkedList x;
+    
+    void f(){
+      x = y.get();
+      y.set(new LinkedList<Simple> ());
+    }   
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t14/before/test.java b/java/java-tests/testData/refactoring/typeCook/t14/before/test.java
new file mode 100644
index 0000000..81cb032
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t14/before/test.java
@@ -0,0 +1,23 @@
+class LinkedList<T>{
+    T t;
+    public T get(){return t;}
+    public void set (T t){
+	this.t = t;
+    }    
+}
+
+class Simple {
+   boolean f(){
+    return false;
+   }
+}
+
+class Test{
+    LinkedList y;
+    LinkedList x;
+    
+    void f(){
+      x = y.get();
+      y.set(new LinkedList<Simple> ());
+    }   
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t140/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t140/after/Test.1.items
new file mode 100644
index 0000000..6e74cd4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t140/after/Test.1.items
@@ -0,0 +1 @@
+Map<java.lang.String,java.lang.Integer>\nPsiLocalVariable:map
diff --git a/java/java-tests/testData/refactoring/typeCook/t140/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t140/after/Test.items
new file mode 100644
index 0000000..88d8ab1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t140/after/Test.items
@@ -0,0 +1 @@
+Map\nPsiLocalVariable:map
diff --git a/java/java-tests/testData/refactoring/typeCook/t140/after/test.java b/java/java-tests/testData/refactoring/typeCook/t140/after/test.java
new file mode 100644
index 0000000..a1cc4ca
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t140/after/test.java
@@ -0,0 +1,21 @@
+interface Iterator<E> {
+    E next();
+}
+
+interface Collection<E> {
+    Iterator<E> iterator();
+}
+
+interface Map<K,V> {
+    V put(K key, V value);
+    Collection<V> values();
+}
+
+class Test {
+	public void doTest () {
+		Map map;
+		map.put ("key", new Integer (0));
+
+        Integer res = (Integer) map.values ().iterator ().next ();
+	}
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t140/before/test.java b/java/java-tests/testData/refactoring/typeCook/t140/before/test.java
new file mode 100644
index 0000000..a1cc4ca
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t140/before/test.java
@@ -0,0 +1,21 @@
+interface Iterator<E> {
+    E next();
+}
+
+interface Collection<E> {
+    Iterator<E> iterator();
+}
+
+interface Map<K,V> {
+    V put(K key, V value);
+    Collection<V> values();
+}
+
+class Test {
+	public void doTest () {
+		Map map;
+		map.put ("key", new Integer (0));
+
+        Integer res = (Integer) map.values ().iterator ().next ();
+	}
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t141/before/test.java b/java/java-tests/testData/refactoring/typeCook/t141/before/test.java
new file mode 100644
index 0000000..510c708
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t141/before/test.java
@@ -0,0 +1,8 @@
+interface I<T>{}
+
+class Pair<X extends I<Y>, Y extends I<X>> {
+}
+
+public class Test {
+  Pair pair;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t142/before/test.java b/java/java-tests/testData/refactoring/typeCook/t142/before/test.java
new file mode 100644
index 0000000..e4bdf39
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t142/before/test.java
@@ -0,0 +1,8 @@
+interface I<T>{}
+
+class Pair<X extends I<I<? extends Y>>, Y extends I<I<? super X>>> {
+}
+
+public class Test {
+  Pair pair;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t143/before/test.java b/java/java-tests/testData/refactoring/typeCook/t143/before/test.java
new file mode 100644
index 0000000..148ed43
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t143/before/test.java
@@ -0,0 +1,13 @@
+interface I<T> {}
+
+class Pair<X> {
+  void foo (I<? extends X> i){}
+}
+
+public class Test {
+  Pair pair;
+
+  void bar(){
+    pair.foo (new I<I> ());
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t144/before/test.java b/java/java-tests/testData/refactoring/typeCook/t144/before/test.java
new file mode 100644
index 0000000..08e1dbc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t144/before/test.java
@@ -0,0 +1,15 @@
+interface I<T> {}
+
+class Pair<X> implements I<X>{
+  X t;
+}
+
+class Test {
+  Pair pair;
+
+  <X> X foo (I<? extends X> i){return null;}
+
+  void bar(){
+    String u = (String) foo (pair);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t145/before/test.java b/java/java-tests/testData/refactoring/typeCook/t145/before/test.java
new file mode 100644
index 0000000..37c40624
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t145/before/test.java
@@ -0,0 +1,13 @@
+interface I<T> {}
+
+class Pair<X> {
+  void goo (I<? super I<X>> i){}
+}
+
+public class Test {
+  Pair pair;
+
+  void bar(){
+    pair.goo (new I<I> ());
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t146/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t146/after/Test.1.items
new file mode 100644
index 0000000..34d8510
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t146/after/Test.1.items
@@ -0,0 +1,2 @@
+List\nparameter 0 of f
+List\nparameter 0 of f
diff --git a/java/java-tests/testData/refactoring/typeCook/t146/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t146/after/Test.items
new file mode 100644
index 0000000..34d8510
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t146/after/Test.items
@@ -0,0 +1,2 @@
+List\nparameter 0 of f
+List\nparameter 0 of f
diff --git a/java/java-tests/testData/refactoring/typeCook/t146/after/test.java b/java/java-tests/testData/refactoring/typeCook/t146/after/test.java
new file mode 100644
index 0000000..8207808
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t146/after/test.java
@@ -0,0 +1,17 @@
+class List<T> {
+  T t;
+}
+
+class Test{
+  class Super {
+     void f (List x){
+       x = new List<Integer>();
+     }
+  }
+
+  class Middle extends Super {
+    void f (List x){
+       x.t = "";
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t146/before/test.java b/java/java-tests/testData/refactoring/typeCook/t146/before/test.java
new file mode 100644
index 0000000..8207808
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t146/before/test.java
@@ -0,0 +1,17 @@
+class List<T> {
+  T t;
+}
+
+class Test{
+  class Super {
+     void f (List x){
+       x = new List<Integer>();
+     }
+  }
+
+  class Middle extends Super {
+    void f (List x){
+       x.t = "";
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t147/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t147/after/Test.1.items
new file mode 100644
index 0000000..d54b948
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t147/after/Test.1.items
@@ -0,0 +1,2 @@
+List<java.io.Serializable>\nPsiLocalVariable:foo
+List<java.io.Serializable>\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t147/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t147/after/Test.items
new file mode 100644
index 0000000..ce437f7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t147/after/Test.items
@@ -0,0 +1,2 @@
+List\nPsiLocalVariable:foo
+List\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t147/after/test.java b/java/java-tests/testData/refactoring/typeCook/t147/after/test.java
new file mode 100644
index 0000000..18915c5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t147/after/test.java
@@ -0,0 +1,11 @@
+class List<T> {
+  public void add(T t) {}
+}
+
+class Test {
+    void f() {
+        List foo = new List();
+        foo.add(3);
+        foo.add("bar");
+    }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t147/before/test.java b/java/java-tests/testData/refactoring/typeCook/t147/before/test.java
new file mode 100644
index 0000000..18915c5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t147/before/test.java
@@ -0,0 +1,11 @@
+class List<T> {
+  public void add(T t) {}
+}
+
+class Test {
+    void f() {
+        List foo = new List();
+        foo.add(3);
+        foo.add("bar");
+    }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t148/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t148/after/Test.1.items
new file mode 100644
index 0000000..8d7a7ff
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t148/after/Test.1.items
@@ -0,0 +1,3 @@
+Collection\nparameter 0 of test
+List\nPsiTypeCastExpression:(List)collection
+List\nPsiTypeCastExpression:(List)collection
diff --git a/java/java-tests/testData/refactoring/typeCook/t148/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t148/after/Test.items
new file mode 100644
index 0000000..8d7a7ff
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t148/after/Test.items
@@ -0,0 +1,3 @@
+Collection\nparameter 0 of test
+List\nPsiTypeCastExpression:(List)collection
+List\nPsiTypeCastExpression:(List)collection
diff --git a/java/java-tests/testData/refactoring/typeCook/t148/after/test.java b/java/java-tests/testData/refactoring/typeCook/t148/after/test.java
new file mode 100644
index 0000000..4c03cec
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t148/after/test.java
@@ -0,0 +1,17 @@
+interface Comparable<T> {}
+interface Collection<T> {}
+interface List<T> extends Collection<T>{}
+
+class Test
+{
+    void test(Collection collection) {
+
+        Collections.sort((List)collection);
+        if (collection instanceof List) {
+            Collections.sort((List)collection);
+        }
+    }
+
+    public static <T extends Comparable<? super T>> void sort(List<T> list) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t148/before/test.java b/java/java-tests/testData/refactoring/typeCook/t148/before/test.java
new file mode 100644
index 0000000..4c03cec
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t148/before/test.java
@@ -0,0 +1,17 @@
+interface Comparable<T> {}
+interface Collection<T> {}
+interface List<T> extends Collection<T>{}
+
+class Test
+{
+    void test(Collection collection) {
+
+        Collections.sort((List)collection);
+        if (collection instanceof List) {
+            Collections.sort((List)collection);
+        }
+    }
+
+    public static <T extends Comparable<? super T>> void sort(List<T> list) {
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t149/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t149/after/Test.1.items
new file mode 100644
index 0000000..6e5c60f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t149/after/Test.1.items
@@ -0,0 +1,4 @@
+java.lang.Integer\nPsiParameter:value
+java.util.ArrayList<java.lang.Integer>\nnew
+java.util.List<java.lang.Integer>\nPsiLocalVariable:l
+java.util.List<java.lang.Integer>\nparameter 0 of testForEach
diff --git a/java/java-tests/testData/refactoring/typeCook/t149/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t149/after/Test.items
new file mode 100644
index 0000000..4c9ce4d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t149/after/Test.items
@@ -0,0 +1,4 @@
+java.lang.Object\nPsiParameter:value
+java.util.ArrayList\nnew
+java.util.List\nPsiLocalVariable:l
+java.util.List\nparameter 0 of testForEach
diff --git a/java/java-tests/testData/refactoring/typeCook/t149/after/test.java b/java/java-tests/testData/refactoring/typeCook/t149/after/test.java
new file mode 100644
index 0000000..89a111f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t149/after/test.java
@@ -0,0 +1,18 @@
+import java.util.*;
+
+class Test
+{
+    private void testForEach(List values) {
+
+        for (Object value : values) {
+
+        }
+    }
+
+    void foo() {
+        List l = new ArrayList();
+        l.add(0);
+        l.add(1);
+        testForEach(l);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t149/before/test.java b/java/java-tests/testData/refactoring/typeCook/t149/before/test.java
new file mode 100644
index 0000000..89a111f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t149/before/test.java
@@ -0,0 +1,18 @@
+import java.util.*;
+
+class Test
+{
+    private void testForEach(List values) {
+
+        for (Object value : values) {
+
+        }
+    }
+
+    void foo() {
+        List l = new ArrayList();
+        l.add(0);
+        l.add(1);
+        testForEach(l);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t15/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t15/after/Test.1.items
new file mode 100644
index 0000000..3603290
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t15/after/Test.1.items
@@ -0,0 +1,2 @@
+LinkedList\nPsiField:x
+LinkedList\nPsiField:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t15/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t15/after/Test.items
new file mode 100644
index 0000000..3603290
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t15/after/Test.items
@@ -0,0 +1,2 @@
+LinkedList\nPsiField:x
+LinkedList\nPsiField:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t15/after/test.java b/java/java-tests/testData/refactoring/typeCook/t15/after/test.java
new file mode 100644
index 0000000..ea6f07f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t15/after/test.java
@@ -0,0 +1,22 @@
+class LinkedList<T>{
+    T t;
+    public T get(){return t;}
+    public void set (T t){
+	this.t = t;
+    }    
+}
+
+class Simple {
+   boolean f(){
+    return false;
+   }
+}
+
+class Test{
+    LinkedList y;
+    LinkedList x;
+    
+    void f(){
+      y.get();
+    }   
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t15/before/test.java b/java/java-tests/testData/refactoring/typeCook/t15/before/test.java
new file mode 100644
index 0000000..ea6f07f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t15/before/test.java
@@ -0,0 +1,22 @@
+class LinkedList<T>{
+    T t;
+    public T get(){return t;}
+    public void set (T t){
+	this.t = t;
+    }    
+}
+
+class Simple {
+   boolean f(){
+    return false;
+   }
+}
+
+class Test{
+    LinkedList y;
+    LinkedList x;
+    
+    void f(){
+      y.get();
+    }   
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t150/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t150/after/Test.1.items
new file mode 100644
index 0000000..a69be2b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t150/after/Test.1.items
@@ -0,0 +1,5 @@
+java.util.Iterator<java.util.Map.Entry>\nPsiLocalVariable:entryIter
+java.util.List\nPsiLocalVariable:eventList
+java.util.List\nPsiTypeCastExpression:(List) entry.getValue()
+java.util.Map.Entry\nPsiLocalVariable:entry
+java.util.Map\nparameter 0 of test
diff --git a/java/java-tests/testData/refactoring/typeCook/t150/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t150/after/Test.items
new file mode 100644
index 0000000..a69be2b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t150/after/Test.items
@@ -0,0 +1,5 @@
+java.util.Iterator<java.util.Map.Entry>\nPsiLocalVariable:entryIter
+java.util.List\nPsiLocalVariable:eventList
+java.util.List\nPsiTypeCastExpression:(List) entry.getValue()
+java.util.Map.Entry\nPsiLocalVariable:entry
+java.util.Map\nparameter 0 of test
diff --git a/java/java-tests/testData/refactoring/typeCook/t150/after/test.java b/java/java-tests/testData/refactoring/typeCook/t150/after/test.java
new file mode 100644
index 0000000..8779ebe
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t150/after/test.java
@@ -0,0 +1,13 @@
+import java.util.*;
+
+class Test
+{
+    void test(Map map) {
+
+        Iterator<Map.Entry> entryIter = map.entrySet().iterator();
+        while (entryIter.hasNext()) {
+            Map.Entry entry = entryIter.next();
+            List eventList = (List) entry.getValue();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t150/before/test.java b/java/java-tests/testData/refactoring/typeCook/t150/before/test.java
new file mode 100644
index 0000000..8779ebe
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t150/before/test.java
@@ -0,0 +1,13 @@
+import java.util.*;
+
+class Test
+{
+    void test(Map map) {
+
+        Iterator<Map.Entry> entryIter = map.entrySet().iterator();
+        while (entryIter.hasNext()) {
+            Map.Entry entry = entryIter.next();
+            List eventList = (List) entry.getValue();
+        }
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t151/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t151/after/Test.1.items
new file mode 100644
index 0000000..891ef76
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t151/after/Test.1.items
@@ -0,0 +1,4 @@
+java.util.Set<java.lang.Integer>\nPsiLocalVariable:fiveL
+java.util.Set<java.lang.Integer>\nPsiLocalVariable:result
+java.util.Set<java.lang.Integer>\nPsiLocalVariable:tenL
+java.util.Set<java.lang.Integer>\nreturn of getNumberSet4
diff --git a/java/java-tests/testData/refactoring/typeCook/t151/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t151/after/Test.items
new file mode 100644
index 0000000..27a37bce
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t151/after/Test.items
@@ -0,0 +1,4 @@
+java.util.Set\nPsiLocalVariable:fiveL
+java.util.Set\nPsiLocalVariable:result
+java.util.Set\nPsiLocalVariable:tenL
+java.util.Set\nreturn of getNumberSet4
diff --git a/java/java-tests/testData/refactoring/typeCook/t151/after/test.java b/java/java-tests/testData/refactoring/typeCook/t151/after/test.java
new file mode 100644
index 0000000..1592b13
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t151/after/test.java
@@ -0,0 +1,19 @@
+import java.util.*;
+
+class Test
+{
+    public static void testSet4() {
+        Set tenL = getNumberSet4(10);
+        Set fiveL = getNumberSet4(5);
+
+        tenL.removeAll(fiveL);
+    }
+
+    public static Set getNumberSet4(int n) {
+        Set result;
+        for (int i = 0; i < n; i++) {
+            result.add(i);
+        }
+        return result;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t151/before/test.java b/java/java-tests/testData/refactoring/typeCook/t151/before/test.java
new file mode 100644
index 0000000..1592b13
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t151/before/test.java
@@ -0,0 +1,19 @@
+import java.util.*;
+
+class Test
+{
+    public static void testSet4() {
+        Set tenL = getNumberSet4(10);
+        Set fiveL = getNumberSet4(5);
+
+        tenL.removeAll(fiveL);
+    }
+
+    public static Set getNumberSet4(int n) {
+        Set result;
+        for (int i = 0; i < n; i++) {
+            result.add(i);
+        }
+        return result;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t152/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t152/after/Test.1.items
new file mode 100644
index 0000000..a8f3261
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t152/after/Test.1.items
@@ -0,0 +1,2 @@
+java.util.ArrayList\nPsiField:l
+java.util.ArrayList\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t152/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t152/after/Test.items
new file mode 100644
index 0000000..a8f3261
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t152/after/Test.items
@@ -0,0 +1,2 @@
+java.util.ArrayList\nPsiField:l
+java.util.ArrayList\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t152/after/test.java b/java/java-tests/testData/refactoring/typeCook/t152/after/test.java
new file mode 100644
index 0000000..41aa81d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t152/after/test.java
@@ -0,0 +1,6 @@
+import java.util.ArrayList;
+
+class Test
+{
+  ArrayList l = new ArrayList<>(8);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t152/before/test.java b/java/java-tests/testData/refactoring/typeCook/t152/before/test.java
new file mode 100644
index 0000000..41aa81d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t152/before/test.java
@@ -0,0 +1,6 @@
+import java.util.ArrayList;
+
+class Test
+{
+  ArrayList l = new ArrayList<>(8);
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t16/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t16/after/Test.1.items
new file mode 100644
index 0000000..1fa8eac
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t16/after/Test.1.items
@@ -0,0 +1,2 @@
+LinkedList<Simple>\nPsiField:x
+LinkedList<Simple>\nPsiField:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t16/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t16/after/Test.items
new file mode 100644
index 0000000..3603290
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t16/after/Test.items
@@ -0,0 +1,2 @@
+LinkedList\nPsiField:x
+LinkedList\nPsiField:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t16/after/test.java b/java/java-tests/testData/refactoring/typeCook/t16/after/test.java
new file mode 100644
index 0000000..ff6a9b2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t16/after/test.java
@@ -0,0 +1,23 @@
+class LinkedList<T>{
+    T t;
+    public T get(){return t;}
+    public void set (T t){
+	this.t = t;
+    }    
+}
+
+class Simple {
+   boolean f(){
+    return false;
+   }
+}
+
+class Test{
+    LinkedList y;
+    LinkedList x;
+    
+    void f(){
+      x.set(y.get());
+      Simple t = (Simple) y.get();
+    }   
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t16/before/test.java b/java/java-tests/testData/refactoring/typeCook/t16/before/test.java
new file mode 100644
index 0000000..ff6a9b2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t16/before/test.java
@@ -0,0 +1,23 @@
+class LinkedList<T>{
+    T t;
+    public T get(){return t;}
+    public void set (T t){
+	this.t = t;
+    }    
+}
+
+class Simple {
+   boolean f(){
+    return false;
+   }
+}
+
+class Test{
+    LinkedList y;
+    LinkedList x;
+    
+    void f(){
+      x.set(y.get());
+      Simple t = (Simple) y.get();
+    }   
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t17/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t17/after/Test.1.items
new file mode 100644
index 0000000..1fa8eac
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t17/after/Test.1.items
@@ -0,0 +1,2 @@
+LinkedList<Simple>\nPsiField:x
+LinkedList<Simple>\nPsiField:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t17/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t17/after/Test.items
new file mode 100644
index 0000000..3603290
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t17/after/Test.items
@@ -0,0 +1,2 @@
+LinkedList\nPsiField:x
+LinkedList\nPsiField:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t17/after/test.java b/java/java-tests/testData/refactoring/typeCook/t17/after/test.java
new file mode 100644
index 0000000..171673b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t17/after/test.java
@@ -0,0 +1,20 @@
+class LinkedList<T>{
+    T t;
+    public T get(){return t;}
+    public void set (T t){
+	this.t = t;
+    }    
+}
+
+class Simple {
+}
+
+class Test{
+    LinkedList x;
+    LinkedList y;
+    
+    void f(){
+	y.set(x.get());
+	Simple t = (Simple) y.get();
+    }   
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t17/before/test.java b/java/java-tests/testData/refactoring/typeCook/t17/before/test.java
new file mode 100644
index 0000000..171673b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t17/before/test.java
@@ -0,0 +1,20 @@
+class LinkedList<T>{
+    T t;
+    public T get(){return t;}
+    public void set (T t){
+	this.t = t;
+    }    
+}
+
+class Simple {
+}
+
+class Test{
+    LinkedList x;
+    LinkedList y;
+    
+    void f(){
+	y.set(x.get());
+	Simple t = (Simple) y.get();
+    }   
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t18/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t18/after/Test.1.items
new file mode 100644
index 0000000..5216ff1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t18/after/Test.1.items
@@ -0,0 +1,2 @@
+LinkedList<java.lang.Integer>\nPsiField:x
+LinkedList<java.lang.Integer>\nPsiField:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t18/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t18/after/Test.items
new file mode 100644
index 0000000..3603290
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t18/after/Test.items
@@ -0,0 +1,2 @@
+LinkedList\nPsiField:x
+LinkedList\nPsiField:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t18/after/test.java b/java/java-tests/testData/refactoring/typeCook/t18/after/test.java
new file mode 100644
index 0000000..233f559
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t18/after/test.java
@@ -0,0 +1,20 @@
+class LinkedList<T>{
+    T t;
+    public T get(){return t;}
+    public void set (T t){
+	this.t = t;
+    }    
+}
+
+class Simple {
+}
+
+class Test{
+    LinkedList y;
+    LinkedList x;
+    
+    void f(){
+	x=y;
+        x.set(new Integer(3));
+    }   
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t18/before/test.java b/java/java-tests/testData/refactoring/typeCook/t18/before/test.java
new file mode 100644
index 0000000..233f559
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t18/before/test.java
@@ -0,0 +1,20 @@
+class LinkedList<T>{
+    T t;
+    public T get(){return t;}
+    public void set (T t){
+	this.t = t;
+    }    
+}
+
+class Simple {
+}
+
+class Test{
+    LinkedList y;
+    LinkedList x;
+    
+    void f(){
+	x=y;
+        x.set(new Integer(3));
+    }   
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t19/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t19/after/Test.1.items
new file mode 100644
index 0000000..eaa695e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t19/after/Test.1.items
@@ -0,0 +1,3 @@
+LinkedList<LinkedList>\nPsiField:x
+LinkedList<java.lang.Object>\nPsiField:y
+LinkedList\nPsiTypeCastExpression:(LinkedList) x.get()
diff --git a/java/java-tests/testData/refactoring/typeCook/t19/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t19/after/Test.items
new file mode 100644
index 0000000..c6b016c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t19/after/Test.items
@@ -0,0 +1,3 @@
+LinkedList\nPsiField:x
+LinkedList\nPsiField:y
+LinkedList\nPsiTypeCastExpression:(LinkedList) x.get()
diff --git a/java/java-tests/testData/refactoring/typeCook/t19/after/test.java b/java/java-tests/testData/refactoring/typeCook/t19/after/test.java
new file mode 100644
index 0000000..cc24c1b4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t19/after/test.java
@@ -0,0 +1,20 @@
+class LinkedList<T>{
+    T t;
+    public T get(){return t;}
+    public void set (T t){
+	this.t = t;
+    }    
+}
+
+class Simple {
+}
+
+class Test{
+    LinkedList y;
+    LinkedList x;
+    
+    void f(){
+	y.set((LinkedList) x.get());
+        y.set(new Integer(3));
+    }   
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t19/before/test.java b/java/java-tests/testData/refactoring/typeCook/t19/before/test.java
new file mode 100644
index 0000000..cc24c1b4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t19/before/test.java
@@ -0,0 +1,20 @@
+class LinkedList<T>{
+    T t;
+    public T get(){return t;}
+    public void set (T t){
+	this.t = t;
+    }    
+}
+
+class Simple {
+}
+
+class Test{
+    LinkedList y;
+    LinkedList x;
+    
+    void f(){
+	y.set((LinkedList) x.get());
+        y.set(new Integer(3));
+    }   
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t20/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t20/after/Test.1.items
new file mode 100644
index 0000000..b160dbc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t20/after/Test.1.items
@@ -0,0 +1,2 @@
+Iterator<java.lang.Integer>\nPsiLocalVariable:i
+LinkedList<java.lang.Integer>\nPsiLocalVariable:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t20/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t20/after/Test.items
new file mode 100644
index 0000000..e2a45dc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t20/after/Test.items
@@ -0,0 +1,2 @@
+Iterator\nPsiLocalVariable:i
+LinkedList\nPsiLocalVariable:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t20/after/test.java b/java/java-tests/testData/refactoring/typeCook/t20/after/test.java
new file mode 100644
index 0000000..5f0129f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t20/after/test.java
@@ -0,0 +1,26 @@
+class Iterator<T>{
+  public T get(){return null;}
+}
+
+class LinkedList<T>{
+    T t;
+    public T get(){return t;}
+    public void set (T t){
+	this.t = t;
+    }    
+    public Iterator<T> iterator(){
+      return null;
+    }
+}
+
+class Simple {
+}
+
+class Test{
+    void f(){
+	LinkedList y; 
+        y.set(new Integer(3));
+	Iterator i;
+	i = y.iterator();
+    }   
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t20/before/test.java b/java/java-tests/testData/refactoring/typeCook/t20/before/test.java
new file mode 100644
index 0000000..5f0129f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t20/before/test.java
@@ -0,0 +1,26 @@
+class Iterator<T>{
+  public T get(){return null;}
+}
+
+class LinkedList<T>{
+    T t;
+    public T get(){return t;}
+    public void set (T t){
+	this.t = t;
+    }    
+    public Iterator<T> iterator(){
+      return null;
+    }
+}
+
+class Simple {
+}
+
+class Test{
+    void f(){
+	LinkedList y; 
+        y.set(new Integer(3));
+	Iterator i;
+	i = y.iterator();
+    }   
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t21/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t21/after/Test.1.items
new file mode 100644
index 0000000..8671b4c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t21/after/Test.1.items
@@ -0,0 +1 @@
+LinkedList<java.lang.Integer>\nPsiField:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t21/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t21/after/Test.items
new file mode 100644
index 0000000..c94a261
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t21/after/Test.items
@@ -0,0 +1 @@
+LinkedList\nPsiField:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t21/after/test.java b/java/java-tests/testData/refactoring/typeCook/t21/after/test.java
new file mode 100644
index 0000000..46437e3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t21/after/test.java
@@ -0,0 +1,29 @@
+class Iterator<T>{
+  public T get(){return null;}
+}
+
+class LinkedList<T>{
+    T t;
+    public T get(){return t;}
+    public void set (T t){
+	this.t = t;
+    }    
+    public Iterator<T> iterator(){
+      return null;
+    }
+}
+
+class Simple {
+}
+
+class Test{
+   LinkedList x;
+   
+   Test(Test t){
+      x = t.x;
+   }  
+   
+   void f (){
+     x.set(new Integer(3));
+   }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t21/before/test.java b/java/java-tests/testData/refactoring/typeCook/t21/before/test.java
new file mode 100644
index 0000000..46437e3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t21/before/test.java
@@ -0,0 +1,29 @@
+class Iterator<T>{
+  public T get(){return null;}
+}
+
+class LinkedList<T>{
+    T t;
+    public T get(){return t;}
+    public void set (T t){
+	this.t = t;
+    }    
+    public Iterator<T> iterator(){
+      return null;
+    }
+}
+
+class Simple {
+}
+
+class Test{
+   LinkedList x;
+   
+   Test(Test t){
+      x = t.x;
+   }  
+   
+   void f (){
+     x.set(new Integer(3));
+   }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t22/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t22/after/Test.1.items
new file mode 100644
index 0000000..8671b4c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t22/after/Test.1.items
@@ -0,0 +1 @@
+LinkedList<java.lang.Integer>\nPsiField:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t22/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t22/after/Test.items
new file mode 100644
index 0000000..c94a261
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t22/after/Test.items
@@ -0,0 +1 @@
+LinkedList\nPsiField:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t22/after/test.java b/java/java-tests/testData/refactoring/typeCook/t22/after/test.java
new file mode 100644
index 0000000..4cc128c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t22/after/test.java
@@ -0,0 +1,25 @@
+class Iterator<T>{
+  public T get(){return null;}
+}
+
+class LinkedList<T>{
+    T t;
+    public Iterator<T> iterator(){
+      return null;
+    }
+}
+
+class Simple {
+}
+
+class Test{
+   LinkedList x;
+   
+   Test(Test t){
+      x = t.x;
+   }  
+   
+   void f (){
+     x.t = new Integer(3);
+   }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t22/before/test.java b/java/java-tests/testData/refactoring/typeCook/t22/before/test.java
new file mode 100644
index 0000000..4cc128c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t22/before/test.java
@@ -0,0 +1,25 @@
+class Iterator<T>{
+  public T get(){return null;}
+}
+
+class LinkedList<T>{
+    T t;
+    public Iterator<T> iterator(){
+      return null;
+    }
+}
+
+class Simple {
+}
+
+class Test{
+   LinkedList x;
+   
+   Test(Test t){
+      x = t.x;
+   }  
+   
+   void f (){
+     x.t = new Integer(3);
+   }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t23/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t23/after/Test.1.items
new file mode 100644
index 0000000..670b898
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t23/after/Test.1.items
@@ -0,0 +1,2 @@
+LinkedList<java.lang.String>\nPsiField:x
+LinkedList<java.lang.String>\nPsiField:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t23/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t23/after/Test.items
new file mode 100644
index 0000000..3603290
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t23/after/Test.items
@@ -0,0 +1,2 @@
+LinkedList\nPsiField:x
+LinkedList\nPsiField:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t23/after/test.java b/java/java-tests/testData/refactoring/typeCook/t23/after/test.java
new file mode 100644
index 0000000..2780b62
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t23/after/test.java
@@ -0,0 +1,28 @@
+class Iterator<T>{
+  public T get(){return null;}
+}
+
+class LinkedList<T>{
+    T t;
+    public Iterator<T> iterator(){
+      return null;
+    }
+    T get(){return t;}
+}
+
+class Simple {
+}
+
+class Test{
+   LinkedList x;
+   LinkedList y;
+   
+   Test(Test t){
+      x = t.x;
+   }  
+   
+   void f (){
+     x.t = y.get();
+     y.t = new String();
+   }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t23/before/test.java b/java/java-tests/testData/refactoring/typeCook/t23/before/test.java
new file mode 100644
index 0000000..2780b62
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t23/before/test.java
@@ -0,0 +1,28 @@
+class Iterator<T>{
+  public T get(){return null;}
+}
+
+class LinkedList<T>{
+    T t;
+    public Iterator<T> iterator(){
+      return null;
+    }
+    T get(){return t;}
+}
+
+class Simple {
+}
+
+class Test{
+   LinkedList x;
+   LinkedList y;
+   
+   Test(Test t){
+      x = t.x;
+   }  
+   
+   void f (){
+     x.t = y.get();
+     y.t = new String();
+   }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t24/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t24/after/Test.1.items
new file mode 100644
index 0000000..670b898
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t24/after/Test.1.items
@@ -0,0 +1,2 @@
+LinkedList<java.lang.String>\nPsiField:x
+LinkedList<java.lang.String>\nPsiField:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t24/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t24/after/Test.items
new file mode 100644
index 0000000..3603290
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t24/after/Test.items
@@ -0,0 +1,2 @@
+LinkedList\nPsiField:x
+LinkedList\nPsiField:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t24/after/test.java b/java/java-tests/testData/refactoring/typeCook/t24/after/test.java
new file mode 100644
index 0000000..16a838e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t24/after/test.java
@@ -0,0 +1,31 @@
+class Iterator<T>{
+  public T get(){return null;}
+}
+
+class LinkedList<T>{
+    int i;
+    LinkedList<T> z;
+    T t;
+    public Iterator<T> iterator(){
+      return null;
+    }
+    T get(){return t;}
+}
+
+class Simple {
+}
+
+class Test{
+   LinkedList x;
+   LinkedList y;
+   
+   Test(Test t){
+      x = t.x;
+   }  
+   
+   void f (){
+     x.t = y.get();
+     y.z.t = new String();
+     x.i = 3;
+   }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t24/before/test.java b/java/java-tests/testData/refactoring/typeCook/t24/before/test.java
new file mode 100644
index 0000000..16a838e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t24/before/test.java
@@ -0,0 +1,31 @@
+class Iterator<T>{
+  public T get(){return null;}
+}
+
+class LinkedList<T>{
+    int i;
+    LinkedList<T> z;
+    T t;
+    public Iterator<T> iterator(){
+      return null;
+    }
+    T get(){return t;}
+}
+
+class Simple {
+}
+
+class Test{
+   LinkedList x;
+   LinkedList y;
+   
+   Test(Test t){
+      x = t.x;
+   }  
+   
+   void f (){
+     x.t = y.get();
+     y.z.t = new String();
+     x.i = 3;
+   }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t25/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t25/after/Test.1.items
new file mode 100644
index 0000000..ea47150
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t25/after/Test.1.items
@@ -0,0 +1 @@
+LinkedList<java.lang.String>\nPsiField:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t25/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t25/after/Test.items
new file mode 100644
index 0000000..946e26f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t25/after/Test.items
@@ -0,0 +1 @@
+LinkedList\nPsiField:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t25/after/test.java b/java/java-tests/testData/refactoring/typeCook/t25/after/test.java
new file mode 100644
index 0000000..1d74778
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t25/after/test.java
@@ -0,0 +1,28 @@
+class Iterator<T>{
+  public T get(){return null;}
+}
+
+class LinkedList<T>{
+    LinkedList<T> z;
+    T t;
+    public Iterator<T> iterator(){
+      return null;
+    }
+    T get(){return t;}
+    void set(T t){}
+}
+
+class Simple {
+}
+
+class Test{
+   LinkedList y;
+   
+   Test(Test t){
+      x = t.x;
+   }  
+   
+   void f (){
+     y.z.t = new String();
+   }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t25/before/test.java b/java/java-tests/testData/refactoring/typeCook/t25/before/test.java
new file mode 100644
index 0000000..1d74778
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t25/before/test.java
@@ -0,0 +1,28 @@
+class Iterator<T>{
+  public T get(){return null;}
+}
+
+class LinkedList<T>{
+    LinkedList<T> z;
+    T t;
+    public Iterator<T> iterator(){
+      return null;
+    }
+    T get(){return t;}
+    void set(T t){}
+}
+
+class Simple {
+}
+
+class Test{
+   LinkedList y;
+   
+   Test(Test t){
+      x = t.x;
+   }  
+   
+   void f (){
+     y.z.t = new String();
+   }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t26/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t26/after/Test.1.items
new file mode 100644
index 0000000..ea47150
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t26/after/Test.1.items
@@ -0,0 +1 @@
+LinkedList<java.lang.String>\nPsiField:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t26/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t26/after/Test.items
new file mode 100644
index 0000000..946e26f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t26/after/Test.items
@@ -0,0 +1 @@
+LinkedList\nPsiField:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t26/after/test.java b/java/java-tests/testData/refactoring/typeCook/t26/after/test.java
new file mode 100644
index 0000000..b92e0db
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t26/after/test.java
@@ -0,0 +1,18 @@
+class Iterator<T>{
+  public T get(){return null;}
+}
+
+class LinkedList<T>{
+    Iterator<LinkedList<T>> t;
+}
+
+class Simple {
+}
+
+class Test{
+   LinkedList y;
+
+   void f (){
+     y.t = new Iterator<LinkedList<String>>();
+   }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t26/before/test.java b/java/java-tests/testData/refactoring/typeCook/t26/before/test.java
new file mode 100644
index 0000000..b92e0db
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t26/before/test.java
@@ -0,0 +1,18 @@
+class Iterator<T>{
+  public T get(){return null;}
+}
+
+class LinkedList<T>{
+    Iterator<LinkedList<T>> t;
+}
+
+class Simple {
+}
+
+class Test{
+   LinkedList y;
+
+   void f (){
+     y.t = new Iterator<LinkedList<String>>();
+   }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t27/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t27/after/Test.1.items
new file mode 100644
index 0000000..946e26f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t27/after/Test.1.items
@@ -0,0 +1 @@
+LinkedList\nPsiField:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t27/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t27/after/Test.items
new file mode 100644
index 0000000..946e26f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t27/after/Test.items
@@ -0,0 +1 @@
+LinkedList\nPsiField:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t27/after/test.java b/java/java-tests/testData/refactoring/typeCook/t27/after/test.java
new file mode 100644
index 0000000..713ebfc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t27/after/test.java
@@ -0,0 +1,28 @@
+class Iterator<T>{
+  public T get(){return null;}
+}
+
+class LinkedList<T>{
+    LinkedList z;
+    T t;
+    public Iterator<T> iterator(){
+      return null;
+    }
+    T get(){return t;}
+    void set(T t){}
+}
+
+class Simple {
+}
+
+class Test{
+   LinkedList y;
+   
+   Test(Test t){
+      x = t.x;
+   }  
+   
+   void f (){
+     y.z.t = new String();
+   }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t27/before/test.java b/java/java-tests/testData/refactoring/typeCook/t27/before/test.java
new file mode 100644
index 0000000..713ebfc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t27/before/test.java
@@ -0,0 +1,28 @@
+class Iterator<T>{
+  public T get(){return null;}
+}
+
+class LinkedList<T>{
+    LinkedList z;
+    T t;
+    public Iterator<T> iterator(){
+      return null;
+    }
+    T get(){return t;}
+    void set(T t){}
+}
+
+class Simple {
+}
+
+class Test{
+   LinkedList y;
+   
+   Test(Test t){
+      x = t.x;
+   }  
+   
+   void f (){
+     y.z.t = new String();
+   }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t28/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t28/after/Test.1.items
new file mode 100644
index 0000000..512754c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t28/after/Test.1.items
@@ -0,0 +1 @@
+LinkedList<Simple>\nPsiField:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t28/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t28/after/Test.items
new file mode 100644
index 0000000..946e26f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t28/after/Test.items
@@ -0,0 +1 @@
+LinkedList\nPsiField:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t28/after/test.java b/java/java-tests/testData/refactoring/typeCook/t28/after/test.java
new file mode 100644
index 0000000..7fab6bd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t28/after/test.java
@@ -0,0 +1,13 @@
+class LinkedList<T>{
+    T t;
+    T get(){return t;}
+    void set(T t){}
+}
+
+class Simple {
+}
+
+class Test{
+   LinkedList<Simple> x;
+   LinkedList y = x;
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t28/before/test.java b/java/java-tests/testData/refactoring/typeCook/t28/before/test.java
new file mode 100644
index 0000000..7fab6bd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t28/before/test.java
@@ -0,0 +1,13 @@
+class LinkedList<T>{
+    T t;
+    T get(){return t;}
+    void set(T t){}
+}
+
+class Simple {
+}
+
+class Test{
+   LinkedList<Simple> x;
+   LinkedList y = x;
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t29/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t29/after/Test.1.items
new file mode 100644
index 0000000..dd72acb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t29/after/Test.1.items
@@ -0,0 +1 @@
+LinkedList<Simple>\nPsiLocalVariable:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t29/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t29/after/Test.items
new file mode 100644
index 0000000..cec4bbf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t29/after/Test.items
@@ -0,0 +1 @@
+LinkedList\nPsiLocalVariable:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t29/after/test.java b/java/java-tests/testData/refactoring/typeCook/t29/after/test.java
new file mode 100644
index 0000000..04390c72
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t29/after/test.java
@@ -0,0 +1,15 @@
+class LinkedList<T>{
+    T t;
+    T get(){return t;}
+    void set(T t){}
+}
+
+class Simple {
+}
+
+class Test{
+   void f (){
+   LinkedList<Simple> x;
+   LinkedList y = x;
+   }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t29/before/test.java b/java/java-tests/testData/refactoring/typeCook/t29/before/test.java
new file mode 100644
index 0000000..04390c72
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t29/before/test.java
@@ -0,0 +1,15 @@
+class LinkedList<T>{
+    T t;
+    T get(){return t;}
+    void set(T t){}
+}
+
+class Simple {
+}
+
+class Test{
+   void f (){
+   LinkedList<Simple> x;
+   LinkedList y = x;
+   }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t30/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t30/after/Test.1.items
new file mode 100644
index 0000000..8dd9e53
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t30/after/Test.1.items
@@ -0,0 +1,2 @@
+LinkedList<java.lang.Integer>\nPsiLocalVariable:y
+LinkedList<java.lang.Integer>\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t30/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t30/after/Test.items
new file mode 100644
index 0000000..e6ec2d2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t30/after/Test.items
@@ -0,0 +1,2 @@
+LinkedList\nPsiLocalVariable:y
+LinkedList\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t30/after/test.java b/java/java-tests/testData/refactoring/typeCook/t30/after/test.java
new file mode 100644
index 0000000..0b2e273
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t30/after/test.java
@@ -0,0 +1,15 @@
+class LinkedList<T>{
+    T t;
+    T get(){return t;}
+    void set(T t){}
+}
+
+class Simple {
+}
+
+class Test{
+   void f (){
+      LinkedList y = new LinkedList();
+      y.set(new Integer(3));
+   }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t30/before/test.java b/java/java-tests/testData/refactoring/typeCook/t30/before/test.java
new file mode 100644
index 0000000..0b2e273
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t30/before/test.java
@@ -0,0 +1,15 @@
+class LinkedList<T>{
+    T t;
+    T get(){return t;}
+    void set(T t){}
+}
+
+class Simple {
+}
+
+class Test{
+   void f (){
+      LinkedList y = new LinkedList();
+      y.set(new Integer(3));
+   }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t31/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t31/after/Test.1.items
new file mode 100644
index 0000000..8dd9e53
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t31/after/Test.1.items
@@ -0,0 +1,2 @@
+LinkedList<java.lang.Integer>\nPsiLocalVariable:y
+LinkedList<java.lang.Integer>\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t31/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t31/after/Test.items
new file mode 100644
index 0000000..e6ec2d2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t31/after/Test.items
@@ -0,0 +1,2 @@
+LinkedList\nPsiLocalVariable:y
+LinkedList\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t31/after/test.java b/java/java-tests/testData/refactoring/typeCook/t31/after/test.java
new file mode 100644
index 0000000..e2026fb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t31/after/test.java
@@ -0,0 +1,16 @@
+class LinkedList<T>{
+    T t;
+    T get(){return t;}
+    void set(T t){}
+}
+
+class Simple {
+}
+
+class Test{
+   void f (){
+      LinkedList y;
+      y = new LinkedList();
+      y.set(new Integer(3));
+   }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t31/before/test.java b/java/java-tests/testData/refactoring/typeCook/t31/before/test.java
new file mode 100644
index 0000000..e2026fb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t31/before/test.java
@@ -0,0 +1,16 @@
+class LinkedList<T>{
+    T t;
+    T get(){return t;}
+    void set(T t){}
+}
+
+class Simple {
+}
+
+class Test{
+   void f (){
+      LinkedList y;
+      y = new LinkedList();
+      y.set(new Integer(3));
+   }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t32/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t32/after/Test.1.items
new file mode 100644
index 0000000..efccbd7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t32/after/Test.1.items
@@ -0,0 +1,2 @@
+LinkedList<<:B>\nnew
+LinkedList<java.lang.Object>\nPsiLocalVariable:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t32/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t32/after/Test.items
new file mode 100644
index 0000000..e6ec2d2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t32/after/Test.items
@@ -0,0 +1,2 @@
+LinkedList\nPsiLocalVariable:y
+LinkedList\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t32/after/test.java b/java/java-tests/testData/refactoring/typeCook/t32/after/test.java
new file mode 100644
index 0000000..2811159dc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t32/after/test.java
@@ -0,0 +1,22 @@
+class LinkedList<T>{
+    T t;
+    T get(){return t;}
+    void set(T t){}
+}
+
+class A {
+}
+
+class B extends A {
+}
+
+class C extends A {
+}
+
+class Test{
+   void f (){
+      LinkedList y = new LinkedList();
+      B b = (B) y.get();
+      C c = (C) y.get();
+   }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t32/before/test.java b/java/java-tests/testData/refactoring/typeCook/t32/before/test.java
new file mode 100644
index 0000000..2811159dc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t32/before/test.java
@@ -0,0 +1,22 @@
+class LinkedList<T>{
+    T t;
+    T get(){return t;}
+    void set(T t){}
+}
+
+class A {
+}
+
+class B extends A {
+}
+
+class C extends A {
+}
+
+class Test{
+   void f (){
+      LinkedList y = new LinkedList();
+      B b = (B) y.get();
+      C c = (C) y.get();
+   }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t33/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t33/after/Test.1.items
new file mode 100644
index 0000000..0b20ec7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t33/after/Test.1.items
@@ -0,0 +1 @@
+LinkedList<java.lang.Integer>\nPsiLocalVariable:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t33/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t33/after/Test.items
new file mode 100644
index 0000000..cec4bbf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t33/after/Test.items
@@ -0,0 +1 @@
+LinkedList\nPsiLocalVariable:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t33/after/test.java b/java/java-tests/testData/refactoring/typeCook/t33/after/test.java
new file mode 100644
index 0000000..d3b88f9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t33/after/test.java
@@ -0,0 +1,14 @@
+class LinkedList<T>{
+    T t;
+    T get(){return t;}
+    void set(T t){}
+}
+
+class List extends LinkedList<Integer>{
+}
+
+class Test{
+   void f (){
+      LinkedList y = new List();      
+   }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t33/before/test.java b/java/java-tests/testData/refactoring/typeCook/t33/before/test.java
new file mode 100644
index 0000000..d3b88f9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t33/before/test.java
@@ -0,0 +1,14 @@
+class LinkedList<T>{
+    T t;
+    T get(){return t;}
+    void set(T t){}
+}
+
+class List extends LinkedList<Integer>{
+}
+
+class Test{
+   void f (){
+      LinkedList y = new List();      
+   }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t34/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t34/after/Test.1.items
new file mode 100644
index 0000000..0b20ec7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t34/after/Test.1.items
@@ -0,0 +1 @@
+LinkedList<java.lang.Integer>\nPsiLocalVariable:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t34/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t34/after/Test.items
new file mode 100644
index 0000000..cec4bbf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t34/after/Test.items
@@ -0,0 +1 @@
+LinkedList\nPsiLocalVariable:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t34/after/test.java b/java/java-tests/testData/refactoring/typeCook/t34/after/test.java
new file mode 100644
index 0000000..efcf239
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t34/after/test.java
@@ -0,0 +1,17 @@
+class LinkedList<T>{
+    T t;
+    T get(){return t;}
+    void set(T t){}
+}
+
+class List extends LinkedList<Integer>{
+}
+
+class Mist extends List{
+}
+
+class Test{
+   void f (){
+      LinkedList y = new Mist();
+   }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t34/before/test.java b/java/java-tests/testData/refactoring/typeCook/t34/before/test.java
new file mode 100644
index 0000000..efcf239
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t34/before/test.java
@@ -0,0 +1,17 @@
+class LinkedList<T>{
+    T t;
+    T get(){return t;}
+    void set(T t){}
+}
+
+class List extends LinkedList<Integer>{
+}
+
+class Mist extends List{
+}
+
+class Test{
+   void f (){
+      LinkedList y = new Mist();
+   }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t35/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t35/after/Test.1.items
new file mode 100644
index 0000000..64c0106
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t35/after/Test.1.items
@@ -0,0 +1,3 @@
+LinkedList<java.lang.Integer,java.lang.String>\nPsiLocalVariable:y
+ListLinked<java.lang.String,java.lang.Integer>\nPsiLocalVariable:x
+ListLinked<java.lang.String,java.lang.Integer>\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t35/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t35/after/Test.items
new file mode 100644
index 0000000..a714d05
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t35/after/Test.items
@@ -0,0 +1,3 @@
+LinkedList\nPsiLocalVariable:y
+ListLinked\nPsiLocalVariable:x
+ListLinked\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t35/after/test.java b/java/java-tests/testData/refactoring/typeCook/t35/after/test.java
new file mode 100644
index 0000000..7849ee2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t35/after/test.java
@@ -0,0 +1,20 @@
+class LinkedList<T, E>{
+    T t;
+    E e;
+    T get(){return t;}
+    void set(E t){}
+}
+
+class ListLinked<T, E> extends LinkedList<E, T>{
+}
+
+class Test{
+
+   void f (){
+      ListLinked x = new ListLinked();
+      LinkedList y = x;
+
+      Integer i = (Integer) x.get();
+      x.set("");
+   }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t35/before/test.java b/java/java-tests/testData/refactoring/typeCook/t35/before/test.java
new file mode 100644
index 0000000..7849ee2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t35/before/test.java
@@ -0,0 +1,20 @@
+class LinkedList<T, E>{
+    T t;
+    E e;
+    T get(){return t;}
+    void set(E t){}
+}
+
+class ListLinked<T, E> extends LinkedList<E, T>{
+}
+
+class Test{
+
+   void f (){
+      ListLinked x = new ListLinked();
+      LinkedList y = x;
+
+      Integer i = (Integer) x.get();
+      x.set("");
+   }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t36/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t36/after/Test.1.items
new file mode 100644
index 0000000..f0ed89b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t36/after/Test.1.items
@@ -0,0 +1,3 @@
+LinkedList<java.lang.Integer,java.io.Serializable>\nPsiLocalVariable:y
+ListLinked<java.io.Serializable,java.lang.Integer>\nPsiLocalVariable:x
+ListLinked<java.io.Serializable,java.lang.Integer>\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t36/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t36/after/Test.items
new file mode 100644
index 0000000..a714d05
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t36/after/Test.items
@@ -0,0 +1,3 @@
+LinkedList\nPsiLocalVariable:y
+ListLinked\nPsiLocalVariable:x
+ListLinked\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t36/after/test.java b/java/java-tests/testData/refactoring/typeCook/t36/after/test.java
new file mode 100644
index 0000000..afa7453
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t36/after/test.java
@@ -0,0 +1,21 @@
+class LinkedList<T, E>{
+    T t;
+    E e;
+    T get(){return t;}
+    void set(E t){}
+}
+
+class ListLinked<T, E> extends LinkedList<E, T>{
+}
+
+class Test{
+
+   void f (){
+      ListLinked x = new ListLinked();
+      LinkedList y = x;
+
+      Integer i = (Integer) x.get();
+      x.set("");
+      y.set(new Integer(2));
+   }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t36/before/test.java b/java/java-tests/testData/refactoring/typeCook/t36/before/test.java
new file mode 100644
index 0000000..afa7453
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t36/before/test.java
@@ -0,0 +1,21 @@
+class LinkedList<T, E>{
+    T t;
+    E e;
+    T get(){return t;}
+    void set(E t){}
+}
+
+class ListLinked<T, E> extends LinkedList<E, T>{
+}
+
+class Test{
+
+   void f (){
+      ListLinked x = new ListLinked();
+      LinkedList y = x;
+
+      Integer i = (Integer) x.get();
+      x.set("");
+      y.set(new Integer(2));
+   }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t37/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t37/after/Test.1.items
new file mode 100644
index 0000000..64c0106
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t37/after/Test.1.items
@@ -0,0 +1,3 @@
+LinkedList<java.lang.Integer,java.lang.String>\nPsiLocalVariable:y
+ListLinked<java.lang.String,java.lang.Integer>\nPsiLocalVariable:x
+ListLinked<java.lang.String,java.lang.Integer>\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t37/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t37/after/Test.items
new file mode 100644
index 0000000..a714d05
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t37/after/Test.items
@@ -0,0 +1,3 @@
+LinkedList\nPsiLocalVariable:y
+ListLinked\nPsiLocalVariable:x
+ListLinked\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t37/after/test.java b/java/java-tests/testData/refactoring/typeCook/t37/after/test.java
new file mode 100644
index 0000000..c0bc9cc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t37/after/test.java
@@ -0,0 +1,25 @@
+class LinkedList <T, E> {
+    T t;
+    E e;
+
+    T get() {
+        return t;
+    }
+
+    void set(E t) {
+    }
+}
+
+class ListLinked <T, E> extends LinkedList<E, T> {
+}
+
+class Test {
+
+    void f() {
+        ListLinked x = new ListLinked();
+        LinkedList y = x;
+
+        y.t = new Integer(3);
+        y.e = "";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t37/before/test.java b/java/java-tests/testData/refactoring/typeCook/t37/before/test.java
new file mode 100644
index 0000000..c0bc9cc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t37/before/test.java
@@ -0,0 +1,25 @@
+class LinkedList <T, E> {
+    T t;
+    E e;
+
+    T get() {
+        return t;
+    }
+
+    void set(E t) {
+    }
+}
+
+class ListLinked <T, E> extends LinkedList<E, T> {
+}
+
+class Test {
+
+    void f() {
+        ListLinked x = new ListLinked();
+        LinkedList y = x;
+
+        y.t = new Integer(3);
+        y.e = "";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t38/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t38/after/Test.1.items
new file mode 100644
index 0000000..64c0106
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t38/after/Test.1.items
@@ -0,0 +1,3 @@
+LinkedList<java.lang.Integer,java.lang.String>\nPsiLocalVariable:y
+ListLinked<java.lang.String,java.lang.Integer>\nPsiLocalVariable:x
+ListLinked<java.lang.String,java.lang.Integer>\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t38/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t38/after/Test.items
new file mode 100644
index 0000000..a714d05
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t38/after/Test.items
@@ -0,0 +1,3 @@
+LinkedList\nPsiLocalVariable:y
+ListLinked\nPsiLocalVariable:x
+ListLinked\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t38/after/test.java b/java/java-tests/testData/refactoring/typeCook/t38/after/test.java
new file mode 100644
index 0000000..8837a7b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t38/after/test.java
@@ -0,0 +1,25 @@
+class LinkedList <T, E> {
+    T t;
+    E e;
+
+    T get() {
+        return t;
+    }
+
+    void set(E t) {
+    }
+}
+
+class ListLinked <T, E> extends LinkedList<E, T> {
+}
+
+class Test {
+
+    void f() {
+        ListLinked x = new ListLinked();
+        LinkedList y = x;
+
+        x.t = new Integer(3);
+        x.e = "";
+    }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t38/before/test.java b/java/java-tests/testData/refactoring/typeCook/t38/before/test.java
new file mode 100644
index 0000000..8837a7b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t38/before/test.java
@@ -0,0 +1,25 @@
+class LinkedList <T, E> {
+    T t;
+    E e;
+
+    T get() {
+        return t;
+    }
+
+    void set(E t) {
+    }
+}
+
+class ListLinked <T, E> extends LinkedList<E, T> {
+}
+
+class Test {
+
+    void f() {
+        ListLinked x = new ListLinked();
+        LinkedList y = x;
+
+        x.t = new Integer(3);
+        x.e = "";
+    }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t39/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t39/after/Test.1.items
new file mode 100644
index 0000000..a251b3f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t39/after/Test.1.items
@@ -0,0 +1,5 @@
+LinkedList<java.lang.Integer,java.lang.Integer>\nPsiLocalVariable:y
+LinkedList<java.lang.Integer,java.lang.Integer>\nparameter 0 of f
+LinkedList<java.lang.Integer,java.lang.Integer>\nreturn of f
+ListLinked<java.lang.Integer>\nPsiLocalVariable:x
+ListLinked<java.lang.Integer>\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t39/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t39/after/Test.items
new file mode 100644
index 0000000..9fb1766
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t39/after/Test.items
@@ -0,0 +1,5 @@
+LinkedList\nPsiLocalVariable:y
+LinkedList\nparameter 0 of f
+LinkedList\nreturn of f
+ListLinked\nPsiLocalVariable:x
+ListLinked\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t39/after/test.java b/java/java-tests/testData/refactoring/typeCook/t39/after/test.java
new file mode 100644
index 0000000..bc8535d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t39/after/test.java
@@ -0,0 +1,29 @@
+class LinkedList <T, E> {
+    T t;
+    E e;
+
+    T get() {
+        return t;
+    }
+
+    void set(E t) {
+    }
+}
+
+class ListLinked <E> extends LinkedList<E, Integer> {
+}
+
+class Test {
+
+    LinkedList f (LinkedList x){
+        return x;
+    }
+
+    void f() {
+        ListLinked x = new ListLinked();
+        LinkedList y = x;
+
+        y.t = new Integer(3);
+        y = f (y);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t39/before/test.java b/java/java-tests/testData/refactoring/typeCook/t39/before/test.java
new file mode 100644
index 0000000..bc8535d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t39/before/test.java
@@ -0,0 +1,29 @@
+class LinkedList <T, E> {
+    T t;
+    E e;
+
+    T get() {
+        return t;
+    }
+
+    void set(E t) {
+    }
+}
+
+class ListLinked <E> extends LinkedList<E, Integer> {
+}
+
+class Test {
+
+    LinkedList f (LinkedList x){
+        return x;
+    }
+
+    void f() {
+        ListLinked x = new ListLinked();
+        LinkedList y = x;
+
+        y.t = new Integer(3);
+        y = f (y);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t40/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t40/after/Test.1.items
new file mode 100644
index 0000000..7090e4f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t40/after/Test.1.items
@@ -0,0 +1,2 @@
+LinkedList<java.lang.String,java.lang.Integer>\nPsiLocalVariable:y
+LinkedList<java.lang.String,java.lang.Integer>\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t40/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t40/after/Test.items
new file mode 100644
index 0000000..e6ec2d2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t40/after/Test.items
@@ -0,0 +1,2 @@
+LinkedList\nPsiLocalVariable:y
+LinkedList\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t40/after/test.java b/java/java-tests/testData/refactoring/typeCook/t40/after/test.java
new file mode 100644
index 0000000..25d1839
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t40/after/test.java
@@ -0,0 +1,26 @@
+class LinkedList <T, E> {
+    T t;
+    E e;
+
+    LinkedList<E, T> u;
+
+    T get() {
+        return t;
+    }
+
+    void set(E t) {
+    }
+}
+
+class ListLinked <E> extends LinkedList<E, Integer> {
+}
+
+class Test {
+
+    void f() {
+        LinkedList y = new LinkedList();
+
+        y.u.t = new Integer(3);
+        y.u.e = "";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t40/before/test.java b/java/java-tests/testData/refactoring/typeCook/t40/before/test.java
new file mode 100644
index 0000000..25d1839
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t40/before/test.java
@@ -0,0 +1,26 @@
+class LinkedList <T, E> {
+    T t;
+    E e;
+
+    LinkedList<E, T> u;
+
+    T get() {
+        return t;
+    }
+
+    void set(E t) {
+    }
+}
+
+class ListLinked <E> extends LinkedList<E, Integer> {
+}
+
+class Test {
+
+    void f() {
+        LinkedList y = new LinkedList();
+
+        y.u.t = new Integer(3);
+        y.u.e = "";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t41/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t41/after/Test.1.items
new file mode 100644
index 0000000..3aa2297
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t41/after/Test.1.items
@@ -0,0 +1,3 @@
+LinkedList<java.lang.String>\nPsiLocalVariable:x
+LinkedList<java.lang.String>\nnew
+LinkedList<java.lang.String>\nparameter 0 of f
diff --git a/java/java-tests/testData/refactoring/typeCook/t41/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t41/after/Test.items
new file mode 100644
index 0000000..0f5111b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t41/after/Test.items
@@ -0,0 +1,3 @@
+LinkedList\nPsiLocalVariable:x
+LinkedList\nnew
+LinkedList\nparameter 0 of f
diff --git a/java/java-tests/testData/refactoring/typeCook/t41/after/test.java b/java/java-tests/testData/refactoring/typeCook/t41/after/test.java
new file mode 100644
index 0000000..7e18f1d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t41/after/test.java
@@ -0,0 +1,21 @@
+class LinkedList <T> {
+    T t;
+
+    T get() {
+        return t;
+    }
+}
+
+
+class Test {
+
+    void f (LinkedList x){
+        x.t = "";
+    }
+
+    void f() {
+       LinkedList x = new LinkedList();
+
+       f (x);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t41/before/test.java b/java/java-tests/testData/refactoring/typeCook/t41/before/test.java
new file mode 100644
index 0000000..7e18f1d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t41/before/test.java
@@ -0,0 +1,21 @@
+class LinkedList <T> {
+    T t;
+
+    T get() {
+        return t;
+    }
+}
+
+
+class Test {
+
+    void f (LinkedList x){
+        x.t = "";
+    }
+
+    void f() {
+       LinkedList x = new LinkedList();
+
+       f (x);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t42/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t42/after/Test.1.items
new file mode 100644
index 0000000..3aa2297
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t42/after/Test.1.items
@@ -0,0 +1,3 @@
+LinkedList<java.lang.String>\nPsiLocalVariable:x
+LinkedList<java.lang.String>\nnew
+LinkedList<java.lang.String>\nparameter 0 of f
diff --git a/java/java-tests/testData/refactoring/typeCook/t42/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t42/after/Test.items
new file mode 100644
index 0000000..0f5111b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t42/after/Test.items
@@ -0,0 +1,3 @@
+LinkedList\nPsiLocalVariable:x
+LinkedList\nnew
+LinkedList\nparameter 0 of f
diff --git a/java/java-tests/testData/refactoring/typeCook/t42/after/test.java b/java/java-tests/testData/refactoring/typeCook/t42/after/test.java
new file mode 100644
index 0000000..1e279a4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t42/after/test.java
@@ -0,0 +1,21 @@
+class LinkedList <T> {
+    T t;
+
+    T get() {
+        return t;
+    }
+}
+
+
+class Test {
+
+    void f (LinkedList x){
+        x.t = "";
+    }
+
+    void f() {
+       LinkedList x = new LinkedList();
+
+       f (x);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t42/before/test.java b/java/java-tests/testData/refactoring/typeCook/t42/before/test.java
new file mode 100644
index 0000000..1e279a4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t42/before/test.java
@@ -0,0 +1,21 @@
+class LinkedList <T> {
+    T t;
+
+    T get() {
+        return t;
+    }
+}
+
+
+class Test {
+
+    void f (LinkedList x){
+        x.t = "";
+    }
+
+    void f() {
+       LinkedList x = new LinkedList();
+
+       f (x);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t43/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t43/after/Test.1.items
new file mode 100644
index 0000000..8dd9e53
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t43/after/Test.1.items
@@ -0,0 +1,2 @@
+LinkedList<java.lang.Integer>\nPsiLocalVariable:y
+LinkedList<java.lang.Integer>\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t43/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t43/after/Test.items
new file mode 100644
index 0000000..e6ec2d2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t43/after/Test.items
@@ -0,0 +1,2 @@
+LinkedList\nPsiLocalVariable:y
+LinkedList\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t43/after/test.java b/java/java-tests/testData/refactoring/typeCook/t43/after/test.java
new file mode 100644
index 0000000..5d4e0d8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t43/after/test.java
@@ -0,0 +1,17 @@
+class LinkedList <T> {
+    T e;
+
+    void set(LinkedList<T> t) {
+        e=t.e;
+    }
+}
+
+class Test {
+
+    void f() {
+        LinkedList y = new LinkedList();
+        LinkedList<Integer> z=null;
+
+        y.set(z);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t43/before/test.java b/java/java-tests/testData/refactoring/typeCook/t43/before/test.java
new file mode 100644
index 0000000..5d4e0d8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t43/before/test.java
@@ -0,0 +1,17 @@
+class LinkedList <T> {
+    T e;
+
+    void set(LinkedList<T> t) {
+        e=t.e;
+    }
+}
+
+class Test {
+
+    void f() {
+        LinkedList y = new LinkedList();
+        LinkedList<Integer> z=null;
+
+        y.set(z);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t44/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t44/after/Test.1.items
new file mode 100644
index 0000000..8dd9e53
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t44/after/Test.1.items
@@ -0,0 +1,2 @@
+LinkedList<java.lang.Integer>\nPsiLocalVariable:y
+LinkedList<java.lang.Integer>\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t44/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t44/after/Test.items
new file mode 100644
index 0000000..e6ec2d2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t44/after/Test.items
@@ -0,0 +1,2 @@
+LinkedList\nPsiLocalVariable:y
+LinkedList\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t44/after/test.java b/java/java-tests/testData/refactoring/typeCook/t44/after/test.java
new file mode 100644
index 0000000..bc50cfe
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t44/after/test.java
@@ -0,0 +1,19 @@
+class LinkedList <T> {
+    T e;
+
+    void set(LinkedList<T> t) {
+        e=t.e;
+    }
+}
+
+class ListInt extends LinkedList<Integer>{}
+
+class Test {
+
+    void f() {
+        LinkedList y = new LinkedList();
+        ListInt z=null;
+
+        y.set(z);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t44/before/test.java b/java/java-tests/testData/refactoring/typeCook/t44/before/test.java
new file mode 100644
index 0000000..bc50cfe
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t44/before/test.java
@@ -0,0 +1,19 @@
+class LinkedList <T> {
+    T e;
+
+    void set(LinkedList<T> t) {
+        e=t.e;
+    }
+}
+
+class ListInt extends LinkedList<Integer>{}
+
+class Test {
+
+    void f() {
+        LinkedList y = new LinkedList();
+        ListInt z=null;
+
+        y.set(z);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t45/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t45/after/Test.1.items
new file mode 100644
index 0000000..8dd9e53
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t45/after/Test.1.items
@@ -0,0 +1,2 @@
+LinkedList<java.lang.Integer>\nPsiLocalVariable:y
+LinkedList<java.lang.Integer>\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t45/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t45/after/Test.items
new file mode 100644
index 0000000..e6ec2d2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t45/after/Test.items
@@ -0,0 +1,2 @@
+LinkedList\nPsiLocalVariable:y
+LinkedList\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t45/after/test.java b/java/java-tests/testData/refactoring/typeCook/t45/after/test.java
new file mode 100644
index 0000000..3020754
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t45/after/test.java
@@ -0,0 +1,16 @@
+class LinkedList <T> {
+    T e;
+
+    LinkedList<T> get() {
+        return this;
+    }
+}
+
+class Test {
+
+    void f() {
+        LinkedList y = new LinkedList();
+
+        (y.get()).e = new Integer(3);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t45/before/test.java b/java/java-tests/testData/refactoring/typeCook/t45/before/test.java
new file mode 100644
index 0000000..3020754
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t45/before/test.java
@@ -0,0 +1,16 @@
+class LinkedList <T> {
+    T e;
+
+    LinkedList<T> get() {
+        return this;
+    }
+}
+
+class Test {
+
+    void f() {
+        LinkedList y = new LinkedList();
+
+        (y.get()).e = new Integer(3);
+    }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t46/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t46/after/Test.1.items
new file mode 100644
index 0000000..de79ff5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t46/after/Test.1.items
@@ -0,0 +1 @@
+LinkedList<java.lang.String>\nreturn of f
diff --git a/java/java-tests/testData/refactoring/typeCook/t46/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t46/after/Test.items
new file mode 100644
index 0000000..159c368
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t46/after/Test.items
@@ -0,0 +1 @@
+LinkedList\nreturn of f
diff --git a/java/java-tests/testData/refactoring/typeCook/t46/after/test.java b/java/java-tests/testData/refactoring/typeCook/t46/after/test.java
new file mode 100644
index 0000000..84f4c48
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t46/after/test.java
@@ -0,0 +1,18 @@
+class LinkedList <T> {
+    T e;
+
+    LinkedList<T> get() {
+        return this;
+    }
+}
+
+class Test {
+
+    LinkedList f() {
+        return null;
+    }
+
+    void foo(){
+        f().e = "";
+    }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t46/before/test.java b/java/java-tests/testData/refactoring/typeCook/t46/before/test.java
new file mode 100644
index 0000000..84f4c48
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t46/before/test.java
@@ -0,0 +1,18 @@
+class LinkedList <T> {
+    T e;
+
+    LinkedList<T> get() {
+        return this;
+    }
+}
+
+class Test {
+
+    LinkedList f() {
+        return null;
+    }
+
+    void foo(){
+        f().e = "";
+    }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t47/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t47/after/Test.1.items
new file mode 100644
index 0000000..0bfb826
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t47/after/Test.1.items
@@ -0,0 +1 @@
+LinkedList<java.lang.Integer>\nreturn of f
diff --git a/java/java-tests/testData/refactoring/typeCook/t47/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t47/after/Test.items
new file mode 100644
index 0000000..159c368
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t47/after/Test.items
@@ -0,0 +1 @@
+LinkedList\nreturn of f
diff --git a/java/java-tests/testData/refactoring/typeCook/t47/after/test.java b/java/java-tests/testData/refactoring/typeCook/t47/after/test.java
new file mode 100644
index 0000000..5b2738f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t47/after/test.java
@@ -0,0 +1,18 @@
+class LinkedList <T> {
+    T e;
+
+    LinkedList<T> get() {
+        return this;
+    }
+}
+
+class Test {
+
+    LinkedList f() {
+        return null;
+    }
+
+    void foo(){
+        LinkedList<Integer> x = (LinkedList<Integer>) f();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t47/before/test.java b/java/java-tests/testData/refactoring/typeCook/t47/before/test.java
new file mode 100644
index 0000000..5b2738f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t47/before/test.java
@@ -0,0 +1,18 @@
+class LinkedList <T> {
+    T e;
+
+    LinkedList<T> get() {
+        return this;
+    }
+}
+
+class Test {
+
+    LinkedList f() {
+        return null;
+    }
+
+    void foo(){
+        LinkedList<Integer> x = (LinkedList<Integer>) f();
+    }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t48/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t48/after/Test.1.items
new file mode 100644
index 0000000..4525541
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t48/after/Test.1.items
@@ -0,0 +1,3 @@
+LinkedList<java.io.Serializable>\nPsiLocalVariable:y
+LinkedList<java.io.Serializable>\nnew
+LinkedList<java.io.Serializable>\nparameter 0 of f
diff --git a/java/java-tests/testData/refactoring/typeCook/t48/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t48/after/Test.items
new file mode 100644
index 0000000..e580625
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t48/after/Test.items
@@ -0,0 +1,3 @@
+LinkedList\nPsiLocalVariable:y
+LinkedList\nnew
+LinkedList\nparameter 0 of f
diff --git a/java/java-tests/testData/refactoring/typeCook/t48/after/test.java b/java/java-tests/testData/refactoring/typeCook/t48/after/test.java
new file mode 100644
index 0000000..e9e9df6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t48/after/test.java
@@ -0,0 +1,20 @@
+class LinkedList <T> {
+    T e;
+
+    LinkedList<T> get() {
+        return this;
+    }
+}
+
+class Test {
+
+    void f(LinkedList x) {
+        x.e = "";
+    }
+
+    void foo(){
+        LinkedList y = new LinkedList();
+        y.e = new Integer(3);
+        f(y);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t48/before/test.java b/java/java-tests/testData/refactoring/typeCook/t48/before/test.java
new file mode 100644
index 0000000..e9e9df6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t48/before/test.java
@@ -0,0 +1,20 @@
+class LinkedList <T> {
+    T e;
+
+    LinkedList<T> get() {
+        return this;
+    }
+}
+
+class Test {
+
+    void f(LinkedList x) {
+        x.e = "";
+    }
+
+    void foo(){
+        LinkedList y = new LinkedList();
+        y.e = new Integer(3);
+        f(y);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t49/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t49/after/Test.1.items
new file mode 100644
index 0000000..7fd0e18
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t49/after/Test.1.items
@@ -0,0 +1 @@
+LinkedList<java.lang.Integer>\nparameter 0 of Test
diff --git a/java/java-tests/testData/refactoring/typeCook/t49/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t49/after/Test.items
new file mode 100644
index 0000000..5c2ea19
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t49/after/Test.items
@@ -0,0 +1 @@
+LinkedList\nparameter 0 of Test
diff --git a/java/java-tests/testData/refactoring/typeCook/t49/after/test.java b/java/java-tests/testData/refactoring/typeCook/t49/after/test.java
new file mode 100644
index 0000000..5303a92
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t49/after/test.java
@@ -0,0 +1,17 @@
+class LinkedList <T> {
+    T e;
+
+    LinkedList<T> get() {
+        return this;
+    }
+}
+
+class Test {
+
+    Test(LinkedList x){
+    }
+
+    void foo(){
+      Test x = new Test(new LinkedList<Integer>());
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t49/before/test.java b/java/java-tests/testData/refactoring/typeCook/t49/before/test.java
new file mode 100644
index 0000000..5303a92
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t49/before/test.java
@@ -0,0 +1,17 @@
+class LinkedList <T> {
+    T e;
+
+    LinkedList<T> get() {
+        return this;
+    }
+}
+
+class Test {
+
+    Test(LinkedList x){
+    }
+
+    void foo(){
+      Test x = new Test(new LinkedList<Integer>());
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t50/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t50/after/Test.1.items
new file mode 100644
index 0000000..8fafd97
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t50/after/Test.1.items
@@ -0,0 +1,3 @@
+LinkedList<java.lang.Integer>\nPsiLocalVariable:y
+LinkedList<java.lang.Integer>\nnew
+LinkedList<java.lang.Integer>\nparameter 0 of Test
diff --git a/java/java-tests/testData/refactoring/typeCook/t50/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t50/after/Test.items
new file mode 100644
index 0000000..3727cc7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t50/after/Test.items
@@ -0,0 +1,3 @@
+LinkedList\nPsiLocalVariable:y
+LinkedList\nnew
+LinkedList\nparameter 0 of Test
diff --git a/java/java-tests/testData/refactoring/typeCook/t50/after/test.java b/java/java-tests/testData/refactoring/typeCook/t50/after/test.java
new file mode 100644
index 0000000..29e9a4f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t50/after/test.java
@@ -0,0 +1,21 @@
+class LinkedList <T> {
+    T e;
+
+    LinkedList<T> get() {
+        return this;
+    }
+}
+
+class Test {
+
+    Test(LinkedList x){
+    }
+
+    void foo(){
+      LinkedList y = new LinkedList();
+
+      Test x = new Test(y);
+
+      y.e = new Integer(3);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t50/before/test.java b/java/java-tests/testData/refactoring/typeCook/t50/before/test.java
new file mode 100644
index 0000000..29e9a4f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t50/before/test.java
@@ -0,0 +1,21 @@
+class LinkedList <T> {
+    T e;
+
+    LinkedList<T> get() {
+        return this;
+    }
+}
+
+class Test {
+
+    Test(LinkedList x){
+    }
+
+    void foo(){
+      LinkedList y = new LinkedList();
+
+      Test x = new Test(y);
+
+      y.e = new Integer(3);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t51/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t51/after/Test.1.items
new file mode 100644
index 0000000..0242347
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t51/after/Test.1.items
@@ -0,0 +1,2 @@
+LinkedList\nPsiLocalVariable:y
+LinkedList\nparameter 0 of Test
diff --git a/java/java-tests/testData/refactoring/typeCook/t51/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t51/after/Test.items
new file mode 100644
index 0000000..0242347
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t51/after/Test.items
@@ -0,0 +1,2 @@
+LinkedList\nPsiLocalVariable:y
+LinkedList\nparameter 0 of Test
diff --git a/java/java-tests/testData/refactoring/typeCook/t51/after/test.java b/java/java-tests/testData/refactoring/typeCook/t51/after/test.java
new file mode 100644
index 0000000..dbd7d24
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t51/after/test.java
@@ -0,0 +1,19 @@
+class LinkedList <T> {
+    T e;
+
+    LinkedList<T> get() {
+        return this;
+    }
+}
+
+class Test {
+
+    Test(LinkedList x){
+    }
+
+    void foo(){
+      LinkedList y = null;
+
+      Test x = new Test(null);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t51/before/test.java b/java/java-tests/testData/refactoring/typeCook/t51/before/test.java
new file mode 100644
index 0000000..dbd7d24
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t51/before/test.java
@@ -0,0 +1,19 @@
+class LinkedList <T> {
+    T e;
+
+    LinkedList<T> get() {
+        return this;
+    }
+}
+
+class Test {
+
+    Test(LinkedList x){
+    }
+
+    void foo(){
+      LinkedList y = null;
+
+      Test x = new Test(null);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t52/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t52/after/Test.1.items
new file mode 100644
index 0000000..cec4bbf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t52/after/Test.1.items
@@ -0,0 +1 @@
+LinkedList\nPsiLocalVariable:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t52/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t52/after/Test.items
new file mode 100644
index 0000000..cec4bbf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t52/after/Test.items
@@ -0,0 +1 @@
+LinkedList\nPsiLocalVariable:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t52/after/test.java b/java/java-tests/testData/refactoring/typeCook/t52/after/test.java
new file mode 100644
index 0000000..da93dab
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t52/after/test.java
@@ -0,0 +1,21 @@
+class LinkedList <T> {
+    T e;
+
+    LinkedList<T> get() {
+        return this;
+    }
+}
+
+class Aux{
+  LinkedList x;
+}
+
+class Test {
+    Aux a = null;
+
+    void foo(){
+      LinkedList y = a.x;
+
+      y.e = "";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t52/before/test.java b/java/java-tests/testData/refactoring/typeCook/t52/before/test.java
new file mode 100644
index 0000000..da93dab
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t52/before/test.java
@@ -0,0 +1,21 @@
+class LinkedList <T> {
+    T e;
+
+    LinkedList<T> get() {
+        return this;
+    }
+}
+
+class Aux{
+  LinkedList x;
+}
+
+class Test {
+    Aux a = null;
+
+    void foo(){
+      LinkedList y = a.x;
+
+      y.e = "";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t53/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t53/after/Test.1.items
new file mode 100644
index 0000000..2f69ec1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t53/after/Test.1.items
@@ -0,0 +1 @@
+LinkedList<java.lang.Object>\nPsiLocalVariable:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t53/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t53/after/Test.items
new file mode 100644
index 0000000..cec4bbf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t53/after/Test.items
@@ -0,0 +1 @@
+LinkedList\nPsiLocalVariable:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t53/after/test.java b/java/java-tests/testData/refactoring/typeCook/t53/after/test.java
new file mode 100644
index 0000000..d4a5f4a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t53/after/test.java
@@ -0,0 +1,21 @@
+class LinkedList <T> {
+    T e;
+
+    LinkedList<T> get() {
+        return this;
+    }
+}
+
+class Aux{
+  LinkedList<Object> x;
+}
+
+class Test {
+    Aux a = null;
+
+    void foo(){
+      LinkedList y = a.x;
+
+      y.e = "";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t53/before/test.java b/java/java-tests/testData/refactoring/typeCook/t53/before/test.java
new file mode 100644
index 0000000..d4a5f4a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t53/before/test.java
@@ -0,0 +1,21 @@
+class LinkedList <T> {
+    T e;
+
+    LinkedList<T> get() {
+        return this;
+    }
+}
+
+class Aux{
+  LinkedList<Object> x;
+}
+
+class Test {
+    Aux a = null;
+
+    void foo(){
+      LinkedList y = a.x;
+
+      y.e = "";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t54/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t54/after/Test.1.items
new file mode 100644
index 0000000..c94a261
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t54/after/Test.1.items
@@ -0,0 +1 @@
+LinkedList\nPsiField:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t54/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t54/after/Test.items
new file mode 100644
index 0000000..c94a261
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t54/after/Test.items
@@ -0,0 +1 @@
+LinkedList\nPsiField:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t54/after/test.java b/java/java-tests/testData/refactoring/typeCook/t54/after/test.java
new file mode 100644
index 0000000..aead3a8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t54/after/test.java
@@ -0,0 +1,15 @@
+class LinkedList <T> {
+    T e;
+
+    LinkedList<T> get() {
+        return this;
+    }
+}
+
+class Test {
+  LinkedList x;
+
+  Test(Test y){
+     x = y.x;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t54/before/test.java b/java/java-tests/testData/refactoring/typeCook/t54/before/test.java
new file mode 100644
index 0000000..aead3a8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t54/before/test.java
@@ -0,0 +1,15 @@
+class LinkedList <T> {
+    T e;
+
+    LinkedList<T> get() {
+        return this;
+    }
+}
+
+class Test {
+  LinkedList x;
+
+  Test(Test y){
+     x = y.x;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t55/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t55/after/Test.1.items
new file mode 100644
index 0000000..27f46a2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t55/after/Test.1.items
@@ -0,0 +1 @@
+LinkedList<java.lang.Integer,java.lang.String>\nPsiField:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t55/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t55/after/Test.items
new file mode 100644
index 0000000..c94a261
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t55/after/Test.items
@@ -0,0 +1 @@
+LinkedList\nPsiField:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t55/after/test.java b/java/java-tests/testData/refactoring/typeCook/t55/after/test.java
new file mode 100644
index 0000000..0e9814e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t55/after/test.java
@@ -0,0 +1,17 @@
+class LinkedList <T, E> {
+    T t;
+    E e;
+
+    LinkedList<E, T> get() {
+        return this;
+    }
+}
+
+class Test {
+  LinkedList x;
+
+  void foo(){
+    x.get().t = "";
+    x.get().e = new Integer(3);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t55/before/test.java b/java/java-tests/testData/refactoring/typeCook/t55/before/test.java
new file mode 100644
index 0000000..0e9814e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t55/before/test.java
@@ -0,0 +1,17 @@
+class LinkedList <T, E> {
+    T t;
+    E e;
+
+    LinkedList<E, T> get() {
+        return this;
+    }
+}
+
+class Test {
+  LinkedList x;
+
+  void foo(){
+    x.get().t = "";
+    x.get().e = new Integer(3);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t56/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t56/after/Test.1.items
new file mode 100644
index 0000000..c43e1e0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t56/after/Test.1.items
@@ -0,0 +1,3 @@
+LinkedList<LinkedList<java.io.Serializable>>\nPsiLocalVariable:x
+LinkedList<java.io.Serializable>\nPsiLocalVariable:y
+LinkedList<java.io.Serializable>\nPsiLocalVariable:z
diff --git a/java/java-tests/testData/refactoring/typeCook/t56/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t56/after/Test.items
new file mode 100644
index 0000000..dc687b8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t56/after/Test.items
@@ -0,0 +1,3 @@
+LinkedList<LinkedList>\nPsiLocalVariable:x
+LinkedList\nPsiLocalVariable:y
+LinkedList\nPsiLocalVariable:z
diff --git a/java/java-tests/testData/refactoring/typeCook/t56/after/test.java b/java/java-tests/testData/refactoring/typeCook/t56/after/test.java
new file mode 100644
index 0000000..bf38b67
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t56/after/test.java
@@ -0,0 +1,28 @@
+class LinkedList <T> {
+    T e;
+
+    T get() {
+        return e;
+    }
+
+    void set(T t) {
+
+    }
+}
+
+
+
+class Test {
+
+    void foo() {
+        LinkedList<LinkedList> x = null;
+        LinkedList y = null;
+        LinkedList z = null;
+
+        y = x.get();
+        z = x.get();
+
+        y.set(new Integer(3));
+        z.set("");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t56/before/test.java b/java/java-tests/testData/refactoring/typeCook/t56/before/test.java
new file mode 100644
index 0000000..bf38b67
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t56/before/test.java
@@ -0,0 +1,28 @@
+class LinkedList <T> {
+    T e;
+
+    T get() {
+        return e;
+    }
+
+    void set(T t) {
+
+    }
+}
+
+
+
+class Test {
+
+    void foo() {
+        LinkedList<LinkedList> x = null;
+        LinkedList y = null;
+        LinkedList z = null;
+
+        y = x.get();
+        z = x.get();
+
+        y.set(new Integer(3));
+        z.set("");
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t57/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t57/after/Test.1.items
new file mode 100644
index 0000000..b88cd62
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t57/after/Test.1.items
@@ -0,0 +1 @@
+Coll<java.lang.String,java.lang.Integer>\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t57/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t57/after/Test.items
new file mode 100644
index 0000000..b4d6692
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t57/after/Test.items
@@ -0,0 +1 @@
+Coll\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t57/after/test.java b/java/java-tests/testData/refactoring/typeCook/t57/after/test.java
new file mode 100644
index 0000000..5b2da96
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t57/after/test.java
@@ -0,0 +1,16 @@
+class Coll <X, Y> {
+  X f;
+  Y s;
+  Coll<Y, X> a;
+}
+
+
+
+class Test {
+
+    void foo() {
+        Coll x;
+        x.f = "";
+        x.s = new Integer(3);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t57/before/test.java b/java/java-tests/testData/refactoring/typeCook/t57/before/test.java
new file mode 100644
index 0000000..5b2da96
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t57/before/test.java
@@ -0,0 +1,16 @@
+class Coll <X, Y> {
+  X f;
+  Y s;
+  Coll<Y, X> a;
+}
+
+
+
+class Test {
+
+    void foo() {
+        Coll x;
+        x.f = "";
+        x.s = new Integer(3);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t58/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t58/after/Test.1.items
new file mode 100644
index 0000000..273b0d8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t58/after/Test.1.items
@@ -0,0 +1 @@
+Coll<java.lang.Integer,java.lang.String>\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t58/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t58/after/Test.items
new file mode 100644
index 0000000..b4d6692
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t58/after/Test.items
@@ -0,0 +1 @@
+Coll\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t58/after/test.java b/java/java-tests/testData/refactoring/typeCook/t58/after/test.java
new file mode 100644
index 0000000..a5ef4f5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t58/after/test.java
@@ -0,0 +1,14 @@
+class Coll <X, Y> {
+  X f;
+  Y s;
+  Coll<Y, X> a;
+}
+
+class Test {
+
+    void foo() {
+        Coll x;
+        x.a.f = "";
+        x.a.s = new Integer(3);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t58/before/test.java b/java/java-tests/testData/refactoring/typeCook/t58/before/test.java
new file mode 100644
index 0000000..a5ef4f5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t58/before/test.java
@@ -0,0 +1,14 @@
+class Coll <X, Y> {
+  X f;
+  Y s;
+  Coll<Y, X> a;
+}
+
+class Test {
+
+    void foo() {
+        Coll x;
+        x.a.f = "";
+        x.a.s = new Integer(3);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t59/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t59/after/Test.1.items
new file mode 100644
index 0000000..b88cd62
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t59/after/Test.1.items
@@ -0,0 +1 @@
+Coll<java.lang.String,java.lang.Integer>\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t59/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t59/after/Test.items
new file mode 100644
index 0000000..b4d6692
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t59/after/Test.items
@@ -0,0 +1 @@
+Coll\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t59/after/test.java b/java/java-tests/testData/refactoring/typeCook/t59/after/test.java
new file mode 100644
index 0000000..40f9ff2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t59/after/test.java
@@ -0,0 +1,16 @@
+class Coll <X, Y> {
+  X f;
+  Y s;
+  Coll<Y, X> a;
+}
+
+
+
+class Test {
+
+    void foo() {
+        Coll x;
+        x.a.a.f = "";
+        x.a.a.s = new Integer(3);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t59/before/test.java b/java/java-tests/testData/refactoring/typeCook/t59/before/test.java
new file mode 100644
index 0000000..40f9ff2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t59/before/test.java
@@ -0,0 +1,16 @@
+class Coll <X, Y> {
+  X f;
+  Y s;
+  Coll<Y, X> a;
+}
+
+
+
+class Test {
+
+    void foo() {
+        Coll x;
+        x.a.a.f = "";
+        x.a.a.s = new Integer(3);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t60/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t60/after/Test.1.items
new file mode 100644
index 0000000..b88cd62
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t60/after/Test.1.items
@@ -0,0 +1 @@
+Coll<java.lang.String,java.lang.Integer>\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t60/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t60/after/Test.items
new file mode 100644
index 0000000..b4d6692
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t60/after/Test.items
@@ -0,0 +1 @@
+Coll\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t60/after/test.java b/java/java-tests/testData/refactoring/typeCook/t60/after/test.java
new file mode 100644
index 0000000..3fc1ee3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t60/after/test.java
@@ -0,0 +1,20 @@
+class OhYeah<T,Q>{
+  T t;
+}
+
+class Coll <X, Y> {
+  X f;
+  Y s;
+  OhYeah<Y,Coll<X,X>> a;
+}
+
+
+
+class Test {
+
+    void foo() {
+        Coll x;
+        x.f = "";
+        x.a.t = new Integer(3);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t60/before/test.java b/java/java-tests/testData/refactoring/typeCook/t60/before/test.java
new file mode 100644
index 0000000..3fc1ee3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t60/before/test.java
@@ -0,0 +1,20 @@
+class OhYeah<T,Q>{
+  T t;
+}
+
+class Coll <X, Y> {
+  X f;
+  Y s;
+  OhYeah<Y,Coll<X,X>> a;
+}
+
+
+
+class Test {
+
+    void foo() {
+        Coll x;
+        x.f = "";
+        x.a.t = new Integer(3);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t61/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t61/after/Test.1.items
new file mode 100644
index 0000000..b4d6692
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t61/after/Test.1.items
@@ -0,0 +1 @@
+Coll\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t61/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t61/after/Test.items
new file mode 100644
index 0000000..b4d6692
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t61/after/Test.items
@@ -0,0 +1 @@
+Coll\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t61/after/test.java b/java/java-tests/testData/refactoring/typeCook/t61/after/test.java
new file mode 100644
index 0000000..e804cb3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t61/after/test.java
@@ -0,0 +1,14 @@
+class OhYeah<Z> {
+  Z t;
+}
+
+class Coll <T, X extends OhYeah<T>> {
+  X f;
+}
+
+class Test {
+    void foo() {
+      Coll x;
+      x.f.t = new Integer(2);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t61/before/test.java b/java/java-tests/testData/refactoring/typeCook/t61/before/test.java
new file mode 100644
index 0000000..e804cb3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t61/before/test.java
@@ -0,0 +1,14 @@
+class OhYeah<Z> {
+  Z t;
+}
+
+class Coll <T, X extends OhYeah<T>> {
+  X f;
+}
+
+class Test {
+    void foo() {
+      Coll x;
+      x.f.t = new Integer(2);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t62/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t62/after/Test.1.items
new file mode 100644
index 0000000..b4d6692
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t62/after/Test.1.items
@@ -0,0 +1 @@
+Coll\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t62/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t62/after/Test.items
new file mode 100644
index 0000000..b4d6692
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t62/after/Test.items
@@ -0,0 +1 @@
+Coll\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t62/after/test.java b/java/java-tests/testData/refactoring/typeCook/t62/after/test.java
new file mode 100644
index 0000000..07b753a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t62/after/test.java
@@ -0,0 +1,11 @@
+class Coll <T> {
+  T t;
+  Coll x;
+}
+
+class Test {
+    void foo() {
+      Coll x;
+      x.x.t = "";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t62/before/test.java b/java/java-tests/testData/refactoring/typeCook/t62/before/test.java
new file mode 100644
index 0000000..07b753a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t62/before/test.java
@@ -0,0 +1,11 @@
+class Coll <T> {
+  T t;
+  Coll x;
+}
+
+class Test {
+    void foo() {
+      Coll x;
+      x.x.t = "";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t63/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t63/after/Test.1.items
new file mode 100644
index 0000000..273b0d8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t63/after/Test.1.items
@@ -0,0 +1 @@
+Coll<java.lang.Integer,java.lang.String>\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t63/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t63/after/Test.items
new file mode 100644
index 0000000..b4d6692
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t63/after/Test.items
@@ -0,0 +1 @@
+Coll\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t63/after/test.java b/java/java-tests/testData/refactoring/typeCook/t63/after/test.java
new file mode 100644
index 0000000..874a002
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t63/after/test.java
@@ -0,0 +1,14 @@
+class Coll <T, X> {
+  T t;
+  X x;
+  Coll<X, T> f() {return null;};
+}
+
+class Test {
+    void foo() {
+      Coll x;
+
+      x.f().t = "";
+      x.t = new Integer(4);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t63/before/test.java b/java/java-tests/testData/refactoring/typeCook/t63/before/test.java
new file mode 100644
index 0000000..874a002
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t63/before/test.java
@@ -0,0 +1,14 @@
+class Coll <T, X> {
+  T t;
+  X x;
+  Coll<X, T> f() {return null;};
+}
+
+class Test {
+    void foo() {
+      Coll x;
+
+      x.f().t = "";
+      x.t = new Integer(4);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t64/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t64/after/Test.1.items
new file mode 100644
index 0000000..b4d6692
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t64/after/Test.1.items
@@ -0,0 +1 @@
+Coll\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t64/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t64/after/Test.items
new file mode 100644
index 0000000..b4d6692
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t64/after/Test.items
@@ -0,0 +1 @@
+Coll\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t64/after/test.java b/java/java-tests/testData/refactoring/typeCook/t64/after/test.java
new file mode 100644
index 0000000..cf0f96d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t64/after/test.java
@@ -0,0 +1,17 @@
+class OhYeah<Z>{
+  Z z;
+}
+
+class Coll <T, X extends OhYeah<T>> {
+  T t;
+  X x;
+  X f() {return null;};
+}
+
+class Test {
+    void foo() {
+      Coll x;
+
+      x.f().z = "";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t64/before/test.java b/java/java-tests/testData/refactoring/typeCook/t64/before/test.java
new file mode 100644
index 0000000..cf0f96d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t64/before/test.java
@@ -0,0 +1,17 @@
+class OhYeah<Z>{
+  Z z;
+}
+
+class Coll <T, X extends OhYeah<T>> {
+  T t;
+  X x;
+  X f() {return null;};
+}
+
+class Test {
+    void foo() {
+      Coll x;
+
+      x.f().z = "";
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t65/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t65/after/Test.1.items
new file mode 100644
index 0000000..c2c9c7c6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t65/after/Test.1.items
@@ -0,0 +1,2 @@
+Map<java.lang.String,java.lang.Integer>\nPsiLocalVariable:x
+Map<java.lang.String,java.lang.Integer>\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t65/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t65/after/Test.items
new file mode 100644
index 0000000..3d5bf8b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t65/after/Test.items
@@ -0,0 +1,2 @@
+Map\nPsiLocalVariable:x
+Map\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t65/after/test.java b/java/java-tests/testData/refactoring/typeCook/t65/after/test.java
new file mode 100644
index 0000000..8a4534c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t65/after/test.java
@@ -0,0 +1,13 @@
+class Map<T, X> {
+  T t;
+  X x;
+}
+
+class Test {
+    void foo() {
+      Map x = new Map();
+
+      x.t = "";
+      x.x = new Integer(3);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t65/before/test.java b/java/java-tests/testData/refactoring/typeCook/t65/before/test.java
new file mode 100644
index 0000000..8a4534c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t65/before/test.java
@@ -0,0 +1,13 @@
+class Map<T, X> {
+  T t;
+  X x;
+}
+
+class Test {
+    void foo() {
+      Map x = new Map();
+
+      x.t = "";
+      x.x = new Integer(3);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t66/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t66/after/Test.1.items
new file mode 100644
index 0000000..5dc1a76
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t66/after/Test.1.items
@@ -0,0 +1,3 @@
+Map<java.lang.String,java.lang.Integer>\nPsiLocalVariable:x
+Map<java.lang.String,java.lang.Integer>\nPsiLocalVariable:y
+Map<java.lang.String,java.lang.Integer>\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t66/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t66/after/Test.items
new file mode 100644
index 0000000..28735cd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t66/after/Test.items
@@ -0,0 +1,3 @@
+Map\nPsiLocalVariable:x
+Map\nPsiLocalVariable:y
+Map\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t66/after/test.java b/java/java-tests/testData/refactoring/typeCook/t66/after/test.java
new file mode 100644
index 0000000..0c9b668
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t66/after/test.java
@@ -0,0 +1,14 @@
+class Map<T, X> {
+  T t;
+  X x;
+}
+
+class Test {
+    void foo() {
+      Map x = new Map();
+      Map y = x;
+
+      x.t = "";
+      x.x = new Integer(3);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t66/before/test.java b/java/java-tests/testData/refactoring/typeCook/t66/before/test.java
new file mode 100644
index 0000000..0c9b668
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t66/before/test.java
@@ -0,0 +1,14 @@
+class Map<T, X> {
+  T t;
+  X x;
+}
+
+class Test {
+    void foo() {
+      Map x = new Map();
+      Map y = x;
+
+      x.t = "";
+      x.x = new Integer(3);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t67/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t67/after/Test.1.items
new file mode 100644
index 0000000..83e1dc4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t67/after/Test.1.items
@@ -0,0 +1,5 @@
+Map<java.lang.Integer,java.lang.String>\nPsiLocalVariable:y
+Map<java.lang.Integer,java.lang.String>\nreturn of f
+Pam<java.lang.String>\nPsiLocalVariable:x
+Pam<java.lang.String>\nnew
+Pam<java.lang.String>\nparameter 0 of f
diff --git a/java/java-tests/testData/refactoring/typeCook/t67/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t67/after/Test.items
new file mode 100644
index 0000000..533a650
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t67/after/Test.items
@@ -0,0 +1,5 @@
+Map\nPsiLocalVariable:y
+Map\nreturn of f
+Pam\nPsiLocalVariable:x
+Pam\nnew
+Pam\nparameter 0 of f
diff --git a/java/java-tests/testData/refactoring/typeCook/t67/after/test.java b/java/java-tests/testData/refactoring/typeCook/t67/after/test.java
new file mode 100644
index 0000000..517e52c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t67/after/test.java
@@ -0,0 +1,22 @@
+class Map<T, X> {
+  T t;
+  X x;
+}
+
+class Pam<Y> extends Map<Integer, Y> {
+}
+
+class Test {
+
+    Map f (Pam x){
+      return x;
+    }
+
+    void foo() {
+      Pam x = new Pam ();
+
+      x.x = "";
+
+      Map y = f (x);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t67/before/test.java b/java/java-tests/testData/refactoring/typeCook/t67/before/test.java
new file mode 100644
index 0000000..517e52c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t67/before/test.java
@@ -0,0 +1,22 @@
+class Map<T, X> {
+  T t;
+  X x;
+}
+
+class Pam<Y> extends Map<Integer, Y> {
+}
+
+class Test {
+
+    Map f (Pam x){
+      return x;
+    }
+
+    void foo() {
+      Pam x = new Pam ();
+
+      x.x = "";
+
+      Map y = f (x);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t68/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t68/after/Test.1.items
new file mode 100644
index 0000000..5dc1a76
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t68/after/Test.1.items
@@ -0,0 +1,3 @@
+Map<java.lang.String,java.lang.Integer>\nPsiLocalVariable:x
+Map<java.lang.String,java.lang.Integer>\nPsiLocalVariable:y
+Map<java.lang.String,java.lang.Integer>\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t68/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t68/after/Test.items
new file mode 100644
index 0000000..28735cd
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t68/after/Test.items
@@ -0,0 +1,3 @@
+Map\nPsiLocalVariable:x
+Map\nPsiLocalVariable:y
+Map\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t68/after/test.java b/java/java-tests/testData/refactoring/typeCook/t68/after/test.java
new file mode 100644
index 0000000..ed298c0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t68/after/test.java
@@ -0,0 +1,20 @@
+class Map<T, X> {
+  T t;
+  X x;
+
+  int size(){
+    return 0;
+  }
+}
+
+class Test {
+    void foo() {
+      Map x = new Map();
+      Map y = x;
+
+      x.t = "";
+      x.x = new Integer(3);
+
+      Test[] t = new Test[x.size()];
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t68/before/test.java b/java/java-tests/testData/refactoring/typeCook/t68/before/test.java
new file mode 100644
index 0000000..ed298c0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t68/before/test.java
@@ -0,0 +1,20 @@
+class Map<T, X> {
+  T t;
+  X x;
+
+  int size(){
+    return 0;
+  }
+}
+
+class Test {
+    void foo() {
+      Map x = new Map();
+      Map y = x;
+
+      x.t = "";
+      x.x = new Integer(3);
+
+      Test[] t = new Test[x.size()];
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t69/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t69/after/Test.1.items
new file mode 100644
index 0000000..a7d3fd1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t69/after/Test.1.items
@@ -0,0 +1,4 @@
+Map<java.lang.String,java.lang.Integer>\nPsiLocalVariable:x
+Map<java.lang.String,java.lang.Integer>\nPsiLocalVariable:y
+Map<java.lang.String,java.lang.Integer>\nnew
+Map<java.lang.String,java.lang.Integer>\nparameter 0 of f
diff --git a/java/java-tests/testData/refactoring/typeCook/t69/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t69/after/Test.items
new file mode 100644
index 0000000..574a1e6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t69/after/Test.items
@@ -0,0 +1,4 @@
+Map\nPsiLocalVariable:x
+Map\nPsiLocalVariable:y
+Map\nnew
+Map\nparameter 0 of f
diff --git a/java/java-tests/testData/refactoring/typeCook/t69/after/test.java b/java/java-tests/testData/refactoring/typeCook/t69/after/test.java
new file mode 100644
index 0000000..dae5a2d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t69/after/test.java
@@ -0,0 +1,29 @@
+class Map<T, X> {
+  T t;
+  X x;
+
+  T get(){
+    return null;
+  }
+
+  int size(){
+    return 0;
+  }
+}
+
+class Test {
+
+    void f (Map x){
+      String i = (String) x.get();
+    }
+
+    void foo() {
+      Map x = new Map();
+      Map y = x;
+
+      x.t = "";
+      x.x = new Integer(3);
+
+      f(x);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t69/before/test.java b/java/java-tests/testData/refactoring/typeCook/t69/before/test.java
new file mode 100644
index 0000000..dae5a2d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t69/before/test.java
@@ -0,0 +1,29 @@
+class Map<T, X> {
+  T t;
+  X x;
+
+  T get(){
+    return null;
+  }
+
+  int size(){
+    return 0;
+  }
+}
+
+class Test {
+
+    void f (Map x){
+      String i = (String) x.get();
+    }
+
+    void foo() {
+      Map x = new Map();
+      Map y = x;
+
+      x.t = "";
+      x.x = new Integer(3);
+
+      f(x);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t70/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t70/after/Test.1.items
new file mode 100644
index 0000000..078ff3a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t70/after/Test.1.items
@@ -0,0 +1,2 @@
+List<java.lang.String,java.lang.String>\nPsiLocalVariable:x
+List<java.lang.String,java.lang.String>\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t70/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t70/after/Test.items
new file mode 100644
index 0000000..7856e9f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t70/after/Test.items
@@ -0,0 +1,2 @@
+List\nPsiLocalVariable:x
+List\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t70/after/test.java b/java/java-tests/testData/refactoring/typeCook/t70/after/test.java
new file mode 100644
index 0000000..312eb23
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t70/after/test.java
@@ -0,0 +1,21 @@
+class External{
+  static void f (List x){
+  }
+}
+
+class List<T, E> {
+  T t;
+
+  void set(T t, E e){
+    this.t = t;
+  }
+}
+
+class Test {
+
+    void f (){
+      List x = new List();
+      x.set("", "");
+      External.f(x);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t70/before/test.java b/java/java-tests/testData/refactoring/typeCook/t70/before/test.java
new file mode 100644
index 0000000..312eb23
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t70/before/test.java
@@ -0,0 +1,21 @@
+class External{
+  static void f (List x){
+  }
+}
+
+class List<T, E> {
+  T t;
+
+  void set(T t, E e){
+    this.t = t;
+  }
+}
+
+class Test {
+
+    void f (){
+      List x = new List();
+      x.set("", "");
+      External.f(x);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t71/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t71/after/Test.1.items
new file mode 100644
index 0000000..fd83360
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t71/after/Test.1.items
@@ -0,0 +1,2 @@
+List<java.lang.String>\nPsiField:x
+List<java.lang.String>\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t71/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t71/after/Test.items
new file mode 100644
index 0000000..dc48def
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t71/after/Test.items
@@ -0,0 +1,2 @@
+List\nPsiField:x
+List\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t71/after/test.java b/java/java-tests/testData/refactoring/typeCook/t71/after/test.java
new file mode 100644
index 0000000..6777feb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t71/after/test.java
@@ -0,0 +1,22 @@
+class List<T> {
+  T t;
+
+  void set(T t){
+    this.t = t;
+  }
+}
+
+class Test {
+
+  static List x = new List();
+
+  static void f (){
+    x.set("");
+  }
+}
+
+class External{
+  static List f (){
+    return Test.x;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t71/before/test.java b/java/java-tests/testData/refactoring/typeCook/t71/before/test.java
new file mode 100644
index 0000000..6777feb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t71/before/test.java
@@ -0,0 +1,22 @@
+class List<T> {
+  T t;
+
+  void set(T t){
+    this.t = t;
+  }
+}
+
+class Test {
+
+  static List x = new List();
+
+  static void f (){
+    x.set("");
+  }
+}
+
+class External{
+  static List f (){
+    return Test.x;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t72/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t72/after/Test.1.items
new file mode 100644
index 0000000..219106a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t72/after/Test.1.items
@@ -0,0 +1,4 @@
+List<java.lang.String>[]\nPsiLocalVariable:x
+List<java.lang.String>[]\nnew
+List<java.lang.String>\nPsiLocalVariable:y
+List<java.lang.String>\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t72/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t72/after/Test.items
new file mode 100644
index 0000000..0d99bbaf
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t72/after/Test.items
@@ -0,0 +1,4 @@
+List[]\nPsiLocalVariable:x
+List[]\nnew
+List\nPsiLocalVariable:y
+List\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t72/after/test.java b/java/java-tests/testData/refactoring/typeCook/t72/after/test.java
new file mode 100644
index 0000000..593141f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t72/after/test.java
@@ -0,0 +1,17 @@
+class List<T> {
+  T t;
+
+  void set(T t){
+    this.t = t;
+  }
+}
+
+class Test {
+  void foo (){
+     List y = new List();
+
+     y.set("");
+
+     List[] x = new List[] {y};
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t72/before/test.java b/java/java-tests/testData/refactoring/typeCook/t72/before/test.java
new file mode 100644
index 0000000..593141f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t72/before/test.java
@@ -0,0 +1,17 @@
+class List<T> {
+  T t;
+
+  void set(T t){
+    this.t = t;
+  }
+}
+
+class Test {
+  void foo (){
+     List y = new List();
+
+     y.set("");
+
+     List[] x = new List[] {y};
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t73/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t73/after/Test.1.items
new file mode 100644
index 0000000..87606f1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t73/after/Test.1.items
@@ -0,0 +1,4 @@
+List<java.io.Serializable>\nPsiLocalVariable:x
+List<java.io.Serializable>\nPsiLocalVariable:y
+List<java.io.Serializable>\nnew
+List<java.io.Serializable>\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t73/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t73/after/Test.items
new file mode 100644
index 0000000..5d55058
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t73/after/Test.items
@@ -0,0 +1,4 @@
+List\nPsiLocalVariable:x
+List\nPsiLocalVariable:y
+List\nnew
+List\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t73/after/test.java b/java/java-tests/testData/refactoring/typeCook/t73/after/test.java
new file mode 100644
index 0000000..b9352ab
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t73/after/test.java
@@ -0,0 +1,16 @@
+class List<T> {
+  T t;
+}
+
+class Test {
+  void foo (){
+     List y = new List();
+     List x = new List();
+
+     x.t = y.t;
+     y.t = x.t;
+
+     x.t = "";
+     y.t = new Integer(3);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t73/before/test.java b/java/java-tests/testData/refactoring/typeCook/t73/before/test.java
new file mode 100644
index 0000000..b9352ab
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t73/before/test.java
@@ -0,0 +1,16 @@
+class List<T> {
+  T t;
+}
+
+class Test {
+  void foo (){
+     List y = new List();
+     List x = new List();
+
+     x.t = y.t;
+     y.t = x.t;
+
+     x.t = "";
+     y.t = new Integer(3);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t74/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t74/after/Test.1.items
new file mode 100644
index 0000000..45858e6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t74/after/Test.1.items
@@ -0,0 +1,2 @@
+List<List<java.lang.String>>\nPsiLocalVariable:x
+List<List<java.lang.String>>\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t74/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t74/after/Test.items
new file mode 100644
index 0000000..961cd56
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t74/after/Test.items
@@ -0,0 +1,2 @@
+List<List>\nPsiLocalVariable:x
+List<List>\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t74/after/test.java b/java/java-tests/testData/refactoring/typeCook/t74/after/test.java
new file mode 100644
index 0000000..b6672d7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t74/after/test.java
@@ -0,0 +1,16 @@
+class List<T> {
+  T t;
+}
+
+class Test {
+  void foo (){
+     //List<List> y = new List<List>();
+     List<List> x = new List<List>();
+
+     //x.t = y.t;
+    // y.t = x.t;
+
+     x.t.t = "";
+     //y.t.t = new Integer(3);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t74/before/test.java b/java/java-tests/testData/refactoring/typeCook/t74/before/test.java
new file mode 100644
index 0000000..b6672d7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t74/before/test.java
@@ -0,0 +1,16 @@
+class List<T> {
+  T t;
+}
+
+class Test {
+  void foo (){
+     //List<List> y = new List<List>();
+     List<List> x = new List<List>();
+
+     //x.t = y.t;
+    // y.t = x.t;
+
+     x.t.t = "";
+     //y.t.t = new Integer(3);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t75/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t75/after/Test.1.items
new file mode 100644
index 0000000..9b1bc4a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t75/after/Test.1.items
@@ -0,0 +1,3 @@
+Iterator<java.lang.String>\nPsiLocalVariable:i
+OfList<java.lang.String>\nPsiLocalVariable:x
+OfList<java.lang.String>\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t75/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t75/after/Test.items
new file mode 100644
index 0000000..e57dfd0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t75/after/Test.items
@@ -0,0 +1,3 @@
+Iterator\nPsiLocalVariable:i
+OfList\nPsiLocalVariable:x
+OfList\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t75/after/test.java b/java/java-tests/testData/refactoring/typeCook/t75/after/test.java
new file mode 100644
index 0000000..2f6c35c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t75/after/test.java
@@ -0,0 +1,31 @@
+class List<A> {
+  A t;
+
+  Set<A> set(){
+    return null;
+  }
+}
+
+class OfList<B> extends List<B> {
+
+}
+
+class Iterator<C> {
+  C get (){
+    return null;
+  }
+}
+
+class Set<D> {
+  Iterator<D> iterator(){
+    return null;
+  }
+}
+
+class Test {
+  void foo (){
+    OfList x = new OfList();
+    x.t = "";
+    Iterator i = x.set().iterator();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t75/before/test.java b/java/java-tests/testData/refactoring/typeCook/t75/before/test.java
new file mode 100644
index 0000000..2f6c35c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t75/before/test.java
@@ -0,0 +1,31 @@
+class List<A> {
+  A t;
+
+  Set<A> set(){
+    return null;
+  }
+}
+
+class OfList<B> extends List<B> {
+
+}
+
+class Iterator<C> {
+  C get (){
+    return null;
+  }
+}
+
+class Set<D> {
+  Iterator<D> iterator(){
+    return null;
+  }
+}
+
+class Test {
+  void foo (){
+    OfList x = new OfList();
+    x.t = "";
+    Iterator i = x.set().iterator();
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t76/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t76/after/Test.1.items
new file mode 100644
index 0000000..0df8fa5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t76/after/Test.1.items
@@ -0,0 +1,5 @@
+Iterator<Set<java.lang.String>>\nPsiLocalVariable:i
+OfList<Set<java.lang.String>>\nPsiLocalVariable:x
+OfList<Set<java.lang.String>>\nnew
+Set<java.lang.String>\nPsiLocalVariable:u
+Set<java.lang.String>\nPsiTypeCastExpression:(Set) i.get()
diff --git a/java/java-tests/testData/refactoring/typeCook/t76/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t76/after/Test.items
new file mode 100644
index 0000000..1dc71b6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t76/after/Test.items
@@ -0,0 +1,5 @@
+Iterator\nPsiLocalVariable:i
+OfList\nPsiLocalVariable:x
+OfList\nnew
+Set\nPsiLocalVariable:u
+Set\nPsiTypeCastExpression:(Set) i.get()
diff --git a/java/java-tests/testData/refactoring/typeCook/t76/after/test.java b/java/java-tests/testData/refactoring/typeCook/t76/after/test.java
new file mode 100644
index 0000000..5bb0134
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t76/after/test.java
@@ -0,0 +1,33 @@
+class List<A> {
+  A t;
+
+  Set<A> set(){
+    return null;
+  }
+}
+
+class OfList<B> extends List<B> {
+
+}
+
+class Iterator<C> {
+  C get (){
+    return null;
+  }
+}
+
+class Set<D> {
+  D d;
+  Iterator<D> iterator(){
+    return null;
+  }
+}
+
+class Test {
+  void foo (){
+    OfList x = new OfList();
+    Iterator i = x.set().iterator();
+    Set u = (Set) i.get();
+    u.d = "";
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t76/before/test.java b/java/java-tests/testData/refactoring/typeCook/t76/before/test.java
new file mode 100644
index 0000000..5bb0134
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t76/before/test.java
@@ -0,0 +1,33 @@
+class List<A> {
+  A t;
+
+  Set<A> set(){
+    return null;
+  }
+}
+
+class OfList<B> extends List<B> {
+
+}
+
+class Iterator<C> {
+  C get (){
+    return null;
+  }
+}
+
+class Set<D> {
+  D d;
+  Iterator<D> iterator(){
+    return null;
+  }
+}
+
+class Test {
+  void foo (){
+    OfList x = new OfList();
+    Iterator i = x.set().iterator();
+    Set u = (Set) i.get();
+    u.d = "";
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t77/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t77/after/Test.1.items
new file mode 100644
index 0000000..0df8fa5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t77/after/Test.1.items
@@ -0,0 +1,5 @@
+Iterator<Set<java.lang.String>>\nPsiLocalVariable:i
+OfList<Set<java.lang.String>>\nPsiLocalVariable:x
+OfList<Set<java.lang.String>>\nnew
+Set<java.lang.String>\nPsiLocalVariable:u
+Set<java.lang.String>\nPsiTypeCastExpression:(Set) i.get()
diff --git a/java/java-tests/testData/refactoring/typeCook/t77/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t77/after/Test.items
new file mode 100644
index 0000000..1dc71b6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t77/after/Test.items
@@ -0,0 +1,5 @@
+Iterator\nPsiLocalVariable:i
+OfList\nPsiLocalVariable:x
+OfList\nnew
+Set\nPsiLocalVariable:u
+Set\nPsiTypeCastExpression:(Set) i.get()
diff --git a/java/java-tests/testData/refactoring/typeCook/t77/after/test.java b/java/java-tests/testData/refactoring/typeCook/t77/after/test.java
new file mode 100644
index 0000000..2834bfa
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t77/after/test.java
@@ -0,0 +1,33 @@
+class List<A> {
+  A t;
+
+  Set<A> set(){
+    return null;
+  }
+}
+
+class OfList<B> extends List<B> {
+
+}
+
+class Iterator<C> {
+  C get (){
+    return null;
+  }
+}
+
+class Set<D> {
+  D d;
+  Iterator<D> iterator(){
+    return null;
+  }
+}
+
+class Test {
+  void foo (){
+    OfList x = new OfList();
+    Iterator i = x.set().iterator();
+    Set u = (Set) i.get();
+    String s = (String) u.d;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t77/before/test.java b/java/java-tests/testData/refactoring/typeCook/t77/before/test.java
new file mode 100644
index 0000000..2834bfa
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t77/before/test.java
@@ -0,0 +1,33 @@
+class List<A> {
+  A t;
+
+  Set<A> set(){
+    return null;
+  }
+}
+
+class OfList<B> extends List<B> {
+
+}
+
+class Iterator<C> {
+  C get (){
+    return null;
+  }
+}
+
+class Set<D> {
+  D d;
+  Iterator<D> iterator(){
+    return null;
+  }
+}
+
+class Test {
+  void foo (){
+    OfList x = new OfList();
+    Iterator i = x.set().iterator();
+    Set u = (Set) i.get();
+    String s = (String) u.d;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t78/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t78/after/Test.1.items
new file mode 100644
index 0000000..9b1bc4a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t78/after/Test.1.items
@@ -0,0 +1,3 @@
+Iterator<java.lang.String>\nPsiLocalVariable:i
+OfList<java.lang.String>\nPsiLocalVariable:x
+OfList<java.lang.String>\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t78/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t78/after/Test.items
new file mode 100644
index 0000000..e57dfd0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t78/after/Test.items
@@ -0,0 +1,3 @@
+Iterator\nPsiLocalVariable:i
+OfList\nPsiLocalVariable:x
+OfList\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t78/after/test.java b/java/java-tests/testData/refactoring/typeCook/t78/after/test.java
new file mode 100644
index 0000000..72e499a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t78/after/test.java
@@ -0,0 +1,25 @@
+class List<A> {
+  A t;
+
+  Set<A> set;
+}
+
+class OfList<B> extends List<B> {
+
+}
+
+class Iterator<C> {
+  C get;
+}
+
+class Set<D> {
+  Iterator<D> iterator;
+}
+
+class Test {
+  void foo (){
+    OfList x = new OfList();
+    x.t = "";
+    Iterator i = x.set.iterator;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t78/before/test.java b/java/java-tests/testData/refactoring/typeCook/t78/before/test.java
new file mode 100644
index 0000000..72e499a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t78/before/test.java
@@ -0,0 +1,25 @@
+class List<A> {
+  A t;
+
+  Set<A> set;
+}
+
+class OfList<B> extends List<B> {
+
+}
+
+class Iterator<C> {
+  C get;
+}
+
+class Set<D> {
+  Iterator<D> iterator;
+}
+
+class Test {
+  void foo (){
+    OfList x = new OfList();
+    x.t = "";
+    Iterator i = x.set.iterator;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t79/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t79/after/Test.1.items
new file mode 100644
index 0000000..9b1bc4a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t79/after/Test.1.items
@@ -0,0 +1,3 @@
+Iterator<java.lang.String>\nPsiLocalVariable:i
+OfList<java.lang.String>\nPsiLocalVariable:x
+OfList<java.lang.String>\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t79/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t79/after/Test.items
new file mode 100644
index 0000000..e57dfd0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t79/after/Test.items
@@ -0,0 +1,3 @@
+Iterator\nPsiLocalVariable:i
+OfList\nPsiLocalVariable:x
+OfList\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t79/after/test.java b/java/java-tests/testData/refactoring/typeCook/t79/after/test.java
new file mode 100644
index 0000000..7766bbe
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t79/after/test.java
@@ -0,0 +1,21 @@
+class OfList<B> {
+  B t;
+
+  Set<B> set;
+}
+
+class Iterator<C> {
+  C get;
+}
+
+class Set<D> {
+  Iterator<D> iterator;
+}
+
+class Test {
+  void foo (){
+    OfList x = new OfList();
+    x.t = "";
+    Iterator i = x.set.iterator;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t79/before/test.java b/java/java-tests/testData/refactoring/typeCook/t79/before/test.java
new file mode 100644
index 0000000..7766bbe
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t79/before/test.java
@@ -0,0 +1,21 @@
+class OfList<B> {
+  B t;
+
+  Set<B> set;
+}
+
+class Iterator<C> {
+  C get;
+}
+
+class Set<D> {
+  Iterator<D> iterator;
+}
+
+class Test {
+  void foo (){
+    OfList x = new OfList();
+    x.t = "";
+    Iterator i = x.set.iterator;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t80/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t80/after/Test.1.items
new file mode 100644
index 0000000..0df8fa5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t80/after/Test.1.items
@@ -0,0 +1,5 @@
+Iterator<Set<java.lang.String>>\nPsiLocalVariable:i
+OfList<Set<java.lang.String>>\nPsiLocalVariable:x
+OfList<Set<java.lang.String>>\nnew
+Set<java.lang.String>\nPsiLocalVariable:u
+Set<java.lang.String>\nPsiTypeCastExpression:(Set) i.get()
diff --git a/java/java-tests/testData/refactoring/typeCook/t80/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t80/after/Test.items
new file mode 100644
index 0000000..1dc71b6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t80/after/Test.items
@@ -0,0 +1,5 @@
+Iterator\nPsiLocalVariable:i
+OfList\nPsiLocalVariable:x
+OfList\nnew
+Set\nPsiLocalVariable:u
+Set\nPsiTypeCastExpression:(Set) i.get()
diff --git a/java/java-tests/testData/refactoring/typeCook/t80/after/test.java b/java/java-tests/testData/refactoring/typeCook/t80/after/test.java
new file mode 100644
index 0000000..ad6dbb9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t80/after/test.java
@@ -0,0 +1,29 @@
+class OfList<B> {
+  B t;
+
+  Set<B> set(){
+    return null;
+  }
+}
+
+class Iterator<C> {
+  C get (){
+    return null;
+  }
+}
+
+class Set<D> {
+  D d;
+  Iterator<D> iterator(){
+    return null;
+  }
+}
+
+class Test {
+  void foo (){
+    OfList x = new OfList();
+    Iterator i = x.set().iterator();
+    Set u = (Set) i.get();
+    u.d = "";
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t80/before/test.java b/java/java-tests/testData/refactoring/typeCook/t80/before/test.java
new file mode 100644
index 0000000..ad6dbb9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t80/before/test.java
@@ -0,0 +1,29 @@
+class OfList<B> {
+  B t;
+
+  Set<B> set(){
+    return null;
+  }
+}
+
+class Iterator<C> {
+  C get (){
+    return null;
+  }
+}
+
+class Set<D> {
+  D d;
+  Iterator<D> iterator(){
+    return null;
+  }
+}
+
+class Test {
+  void foo (){
+    OfList x = new OfList();
+    Iterator i = x.set().iterator();
+    Set u = (Set) i.get();
+    u.d = "";
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t81/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t81/after/Test.1.items
new file mode 100644
index 0000000..f360c1d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t81/after/Test.1.items
@@ -0,0 +1,3 @@
+List<_>\nPsiLocalVariable:x
+List<java.lang.String>[]\nPsiLocalVariable:y
+List<java.lang.String>[]\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t81/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t81/after/Test.items
new file mode 100644
index 0000000..bcb423c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t81/after/Test.items
@@ -0,0 +1,3 @@
+List[]\nPsiLocalVariable:y
+List[]\nnew
+List\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t81/after/test.java b/java/java-tests/testData/refactoring/typeCook/t81/after/test.java
new file mode 100644
index 0000000..76e2016
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t81/after/test.java
@@ -0,0 +1,13 @@
+class List<T> {
+  T t;
+}
+
+class Test {
+  void foo (){
+    List[] y = new List [10];
+    List x = y[0];
+
+    y[1].t = "";
+    x.t = new Integer(2);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t81/before/test.java b/java/java-tests/testData/refactoring/typeCook/t81/before/test.java
new file mode 100644
index 0000000..76e2016
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t81/before/test.java
@@ -0,0 +1,13 @@
+class List<T> {
+  T t;
+}
+
+class Test {
+  void foo (){
+    List[] y = new List [10];
+    List x = y[0];
+
+    y[1].t = "";
+    x.t = new Integer(2);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t82/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t82/after/Test.1.items
new file mode 100644
index 0000000..99e5b92
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t82/after/Test.1.items
@@ -0,0 +1,6 @@
+List<java.io.Serializable>[]\nPsiLocalVariable:x
+List<java.io.Serializable>[]\nnew
+List<java.io.Serializable>\nPsiLocalVariable:y
+List<java.io.Serializable>\nPsiLocalVariable:z
+List<java.io.Serializable>\nnew
+List<java.io.Serializable>\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t82/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t82/after/Test.items
new file mode 100644
index 0000000..d738537
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t82/after/Test.items
@@ -0,0 +1,6 @@
+List[]\nPsiLocalVariable:x
+List[]\nnew
+List\nPsiLocalVariable:y
+List\nPsiLocalVariable:z
+List\nnew
+List\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t82/after/test.java b/java/java-tests/testData/refactoring/typeCook/t82/after/test.java
new file mode 100644
index 0000000..2802a5a3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t82/after/test.java
@@ -0,0 +1,19 @@
+class List<T> {
+  T t;
+
+  void set(T t){
+    this.t = t;
+  }
+}
+
+class Test {
+  void foo (){
+     List y = new List();
+     List z = new List();
+
+     y.set("");
+     z.set(new Integer(3));
+
+     List[] x = new List[] {y, z};
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t82/before/test.java b/java/java-tests/testData/refactoring/typeCook/t82/before/test.java
new file mode 100644
index 0000000..2802a5a3
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t82/before/test.java
@@ -0,0 +1,19 @@
+class List<T> {
+  T t;
+
+  void set(T t){
+    this.t = t;
+  }
+}
+
+class Test {
+  void foo (){
+     List y = new List();
+     List z = new List();
+
+     y.set("");
+     z.set(new Integer(3));
+
+     List[] x = new List[] {y, z};
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t83/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t83/after/Test.1.items
new file mode 100644
index 0000000..0ad5736
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t83/after/Test.1.items
@@ -0,0 +1,6 @@
+List<java.lang.String>[]\nPsiLocalVariable:x
+List<java.lang.String>[]\nnew
+List<java.lang.String>\nPsiLocalVariable:y
+List<java.lang.String>\nPsiLocalVariable:z
+List<java.lang.String>\nnew
+List<java.lang.String>\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t83/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t83/after/Test.items
new file mode 100644
index 0000000..d738537
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t83/after/Test.items
@@ -0,0 +1,6 @@
+List[]\nPsiLocalVariable:x
+List[]\nnew
+List\nPsiLocalVariable:y
+List\nPsiLocalVariable:z
+List\nnew
+List\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t83/after/test.java b/java/java-tests/testData/refactoring/typeCook/t83/after/test.java
new file mode 100644
index 0000000..9eae2a5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t83/after/test.java
@@ -0,0 +1,18 @@
+class List<T> {
+  T t;
+
+  void set(T t){
+    this.t = t;
+  }
+}
+
+class Test {
+  void foo (){
+     List y = new List();
+     List z = new List();
+
+     y.set("");
+
+     List[] x = new List[] {y, z};
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t83/before/test.java b/java/java-tests/testData/refactoring/typeCook/t83/before/test.java
new file mode 100644
index 0000000..9eae2a5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t83/before/test.java
@@ -0,0 +1,18 @@
+class List<T> {
+  T t;
+
+  void set(T t){
+    this.t = t;
+  }
+}
+
+class Test {
+  void foo (){
+     List y = new List();
+     List z = new List();
+
+     y.set("");
+
+     List[] x = new List[] {y, z};
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t84/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t84/after/Test.1.items
new file mode 100644
index 0000000..a69bf98
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t84/after/Test.1.items
@@ -0,0 +1,3 @@
+List<java.lang.String>[]\nnew
+List<java.lang.String>[]\nreturn of foo
+List<java.lang.String>\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t84/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t84/after/Test.items
new file mode 100644
index 0000000..da62e41
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t84/after/Test.items
@@ -0,0 +1,3 @@
+List[]\nnew
+List[]\nreturn of foo
+List\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t84/after/test.java b/java/java-tests/testData/refactoring/typeCook/t84/after/test.java
new file mode 100644
index 0000000..92fdf0e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t84/after/test.java
@@ -0,0 +1,12 @@
+class List<T> {
+  T t;
+}
+
+class Test {
+  List[] foo (){
+    List x = null;
+    x.t = "";
+
+    return new List[]{x};
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t84/before/test.java b/java/java-tests/testData/refactoring/typeCook/t84/before/test.java
new file mode 100644
index 0000000..92fdf0e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t84/before/test.java
@@ -0,0 +1,12 @@
+class List<T> {
+  T t;
+}
+
+class Test {
+  List[] foo (){
+    List x = null;
+    x.t = "";
+
+    return new List[]{x};
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t85/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t85/after/Test.1.items
new file mode 100644
index 0000000..a720f7d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t85/after/Test.1.items
@@ -0,0 +1 @@
+List<java.lang.String>\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t85/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t85/after/Test.items
new file mode 100644
index 0000000..2d2088b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t85/after/Test.items
@@ -0,0 +1 @@
+List\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t85/after/test.java b/java/java-tests/testData/refactoring/typeCook/t85/after/test.java
new file mode 100644
index 0000000..987c8fb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t85/after/test.java
@@ -0,0 +1,12 @@
+class List<T> {
+  <A extends List<T>> void f (A a){
+  }
+}
+
+class Test {
+  void foo (){
+    List x = null;
+    List<String> y = null;
+    x.f(y);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t85/before/test.java b/java/java-tests/testData/refactoring/typeCook/t85/before/test.java
new file mode 100644
index 0000000..987c8fb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t85/before/test.java
@@ -0,0 +1,12 @@
+class List<T> {
+  <A extends List<T>> void f (A a){
+  }
+}
+
+class Test {
+  void foo (){
+    List x = null;
+    List<String> y = null;
+    x.f(y);
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t86/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t86/after/Test.1.items
new file mode 100644
index 0000000..2d2088b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t86/after/Test.1.items
@@ -0,0 +1 @@
+List\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t86/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t86/after/Test.items
new file mode 100644
index 0000000..2d2088b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t86/after/Test.items
@@ -0,0 +1 @@
+List\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t86/after/test.java b/java/java-tests/testData/refactoring/typeCook/t86/after/test.java
new file mode 100644
index 0000000..b8be5c7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t86/after/test.java
@@ -0,0 +1,15 @@
+class List<T> {
+  T t;
+}
+
+class Mist extends List{
+
+}
+
+class Test {
+  void foo (){
+    List x = new Mist();
+
+    x.t = "";
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t86/before/test.java b/java/java-tests/testData/refactoring/typeCook/t86/before/test.java
new file mode 100644
index 0000000..b8be5c7
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t86/before/test.java
@@ -0,0 +1,15 @@
+class List<T> {
+  T t;
+}
+
+class Mist extends List{
+
+}
+
+class Test {
+  void foo (){
+    List x = new Mist();
+
+    x.t = "";
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t87/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t87/after/Test.1.items
new file mode 100644
index 0000000..9a1632c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t87/after/Test.1.items
@@ -0,0 +1,2 @@
+List<int[]>\nPsiLocalVariable:x
+List<int[]>\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t87/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t87/after/Test.items
new file mode 100644
index 0000000..7856e9f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t87/after/Test.items
@@ -0,0 +1,2 @@
+List\nPsiLocalVariable:x
+List\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t87/after/test.java b/java/java-tests/testData/refactoring/typeCook/t87/after/test.java
new file mode 100644
index 0000000..8a7206f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t87/after/test.java
@@ -0,0 +1,11 @@
+class List<T> {
+  T t;
+}
+
+class Test {
+  void foo (){
+    List x = new List();
+
+    int [] y = (int[]) x.t;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t87/before/test.java b/java/java-tests/testData/refactoring/typeCook/t87/before/test.java
new file mode 100644
index 0000000..8a7206f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t87/before/test.java
@@ -0,0 +1,11 @@
+class List<T> {
+  T t;
+}
+
+class Test {
+  void foo (){
+    List x = new List();
+
+    int [] y = (int[]) x.t;
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t88/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t88/after/Test.1.items
new file mode 100644
index 0000000..9a1632c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t88/after/Test.1.items
@@ -0,0 +1,2 @@
+List<int[]>\nPsiLocalVariable:x
+List<int[]>\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t88/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t88/after/Test.items
new file mode 100644
index 0000000..7856e9f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t88/after/Test.items
@@ -0,0 +1,2 @@
+List\nPsiLocalVariable:x
+List\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t88/after/test.java b/java/java-tests/testData/refactoring/typeCook/t88/after/test.java
new file mode 100644
index 0000000..9bf39b6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t88/after/test.java
@@ -0,0 +1,11 @@
+class List<T> {
+  T t;
+}
+
+class Test {
+  void foo (){
+    List x = new List();
+
+    x.t = new int[3];
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t88/before/test.java b/java/java-tests/testData/refactoring/typeCook/t88/before/test.java
new file mode 100644
index 0000000..9bf39b6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t88/before/test.java
@@ -0,0 +1,11 @@
+class List<T> {
+  T t;
+}
+
+class Test {
+  void foo (){
+    List x = new List();
+
+    x.t = new int[3];
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t89/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t89/after/Test.1.items
new file mode 100644
index 0000000..d3de242
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t89/after/Test.1.items
@@ -0,0 +1,2 @@
+List<java.lang.String>\nPsiLocalVariable:x
+List<java.lang.String>\nparameter 0 of Test
diff --git a/java/java-tests/testData/refactoring/typeCook/t89/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t89/after/Test.items
new file mode 100644
index 0000000..a91edd5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t89/after/Test.items
@@ -0,0 +1,2 @@
+List\nPsiLocalVariable:x
+List\nparameter 0 of Test
diff --git a/java/java-tests/testData/refactoring/typeCook/t89/after/test.java b/java/java-tests/testData/refactoring/typeCook/t89/after/test.java
new file mode 100644
index 0000000..c84f2a5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t89/after/test.java
@@ -0,0 +1,14 @@
+class List<T> {
+  T t;
+}
+
+class Test {
+  Test(List x){
+  }
+
+  void foo (){
+    List x = null;
+    x.t = "";
+    Test y = new Test(x) {};
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t89/before/test.java b/java/java-tests/testData/refactoring/typeCook/t89/before/test.java
new file mode 100644
index 0000000..c84f2a5
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t89/before/test.java
@@ -0,0 +1,14 @@
+class List<T> {
+  T t;
+}
+
+class Test {
+  Test(List x){
+  }
+
+  void foo (){
+    List x = null;
+    x.t = "";
+    Test y = new Test(x) {};
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t90/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t90/after/Test.1.items
new file mode 100644
index 0000000..d375ef9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t90/after/Test.1.items
@@ -0,0 +1,2 @@
+List\nparameter 0 of f
+List\nparameter 0 of g
diff --git a/java/java-tests/testData/refactoring/typeCook/t90/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t90/after/Test.items
new file mode 100644
index 0000000..d375ef9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t90/after/Test.items
@@ -0,0 +1,2 @@
+List\nparameter 0 of f
+List\nparameter 0 of g
diff --git a/java/java-tests/testData/refactoring/typeCook/t90/after/test.java b/java/java-tests/testData/refactoring/typeCook/t90/after/test.java
new file mode 100644
index 0000000..6dfd2b0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t90/after/test.java
@@ -0,0 +1,23 @@
+class List<T> {
+  T t;
+}
+
+class Super {
+   void f (List x){
+   }
+}
+
+class Test extends Super {
+  void f (List x){
+     x.t = "";
+  }
+
+  void g (List x){
+     x.t = "";
+  }
+}
+
+class Sub extends Test{
+  void g (List x){
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t90/before/test.java b/java/java-tests/testData/refactoring/typeCook/t90/before/test.java
new file mode 100644
index 0000000..6dfd2b0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t90/before/test.java
@@ -0,0 +1,23 @@
+class List<T> {
+  T t;
+}
+
+class Super {
+   void f (List x){
+   }
+}
+
+class Test extends Super {
+  void f (List x){
+     x.t = "";
+  }
+
+  void g (List x){
+     x.t = "";
+  }
+}
+
+class Sub extends Test{
+  void g (List x){
+  }
+}
diff --git a/java/java-tests/testData/refactoring/typeCook/t91/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t91/after/Test.1.items
new file mode 100644
index 0000000..a17165b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t91/after/Test.1.items
@@ -0,0 +1,4 @@
+List<java.lang.String>\nparameter 0 of f
+List<java.lang.String>\nparameter 0 of f
+List<java.lang.String>\nparameter 0 of g
+List<java.lang.String>\nparameter 0 of g
diff --git a/java/java-tests/testData/refactoring/typeCook/t91/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t91/after/Test.items
new file mode 100644
index 0000000..b6fd620
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t91/after/Test.items
@@ -0,0 +1,4 @@
+List\nparameter 0 of f
+List\nparameter 0 of f
+List\nparameter 0 of g
+List\nparameter 0 of g
diff --git a/java/java-tests/testData/refactoring/typeCook/t91/after/test.java b/java/java-tests/testData/refactoring/typeCook/t91/after/test.java
new file mode 100644
index 0000000..2fecd3b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t91/after/test.java
@@ -0,0 +1,26 @@
+class List<T> {
+  T t;
+}
+
+class Test{
+  class Super {
+     void f (List x){
+     }
+  }
+
+  class Middle extends Super {
+    void f (List x){
+       g(x);
+       x.t = "";
+    }
+
+    void g (List x){
+     x.t = "";
+   }
+  }
+
+  class Sub extends Middle{
+     void g (List x){
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t91/before/test.java b/java/java-tests/testData/refactoring/typeCook/t91/before/test.java
new file mode 100644
index 0000000..2fecd3b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t91/before/test.java
@@ -0,0 +1,26 @@
+class List<T> {
+  T t;
+}
+
+class Test{
+  class Super {
+     void f (List x){
+     }
+  }
+
+  class Middle extends Super {
+    void f (List x){
+       g(x);
+       x.t = "";
+    }
+
+    void g (List x){
+     x.t = "";
+   }
+  }
+
+  class Sub extends Middle{
+     void g (List x){
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t92/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t92/after/Test.1.items
new file mode 100644
index 0000000..8b6e72e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t92/after/Test.1.items
@@ -0,0 +1,2 @@
+List<java.lang.Integer>\nreturn of g
+List<java.lang.Integer>\nreturn of g
diff --git a/java/java-tests/testData/refactoring/typeCook/t92/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t92/after/Test.items
new file mode 100644
index 0000000..278ae73
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t92/after/Test.items
@@ -0,0 +1,2 @@
+List\nreturn of g
+List\nreturn of g
diff --git a/java/java-tests/testData/refactoring/typeCook/t92/after/test.java b/java/java-tests/testData/refactoring/typeCook/t92/after/test.java
new file mode 100644
index 0000000..a204b24
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t92/after/test.java
@@ -0,0 +1,16 @@
+class List<T> {
+  T t;
+}
+
+class Test{
+  class Middle extends Super {
+    List g (){
+     return new List<Integer>();
+   }
+  }
+
+  class Sub extends Middle{
+     List g (){
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t92/before/test.java b/java/java-tests/testData/refactoring/typeCook/t92/before/test.java
new file mode 100644
index 0000000..a204b24
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t92/before/test.java
@@ -0,0 +1,16 @@
+class List<T> {
+  T t;
+}
+
+class Test{
+  class Middle extends Super {
+    List g (){
+     return new List<Integer>();
+   }
+  }
+
+  class Sub extends Middle{
+     List g (){
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t93/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t93/after/Test.1.items
new file mode 100644
index 0000000..f4a2749
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t93/after/Test.1.items
@@ -0,0 +1 @@
+List<java.lang.Integer>\nreturn of g
diff --git a/java/java-tests/testData/refactoring/typeCook/t93/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t93/after/Test.items
new file mode 100644
index 0000000..6c73383
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t93/after/Test.items
@@ -0,0 +1 @@
+List\nreturn of g
diff --git a/java/java-tests/testData/refactoring/typeCook/t93/after/test.java b/java/java-tests/testData/refactoring/typeCook/t93/after/test.java
new file mode 100644
index 0000000..6c2a1ba
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t93/after/test.java
@@ -0,0 +1,9 @@
+class List<T> {
+  T t;
+}
+
+class Test{
+  List g (){
+    return new List<Integer>();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t93/before/test.java b/java/java-tests/testData/refactoring/typeCook/t93/before/test.java
new file mode 100644
index 0000000..6c2a1ba
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t93/before/test.java
@@ -0,0 +1,9 @@
+class List<T> {
+  T t;
+}
+
+class Test{
+  List g (){
+    return new List<Integer>();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t94/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t94/after/Test.1.items
new file mode 100644
index 0000000..6ab80b6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t94/after/Test.1.items
@@ -0,0 +1,4 @@
+List<java.lang.String>\nPsiLocalVariable:x
+List<java.lang.String>\nPsiLocalVariable:y
+List<java.lang.String>\nnew
+List<java.lang.String>\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t94/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t94/after/Test.items
new file mode 100644
index 0000000..5d55058
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t94/after/Test.items
@@ -0,0 +1,4 @@
+List\nPsiLocalVariable:x
+List\nPsiLocalVariable:y
+List\nnew
+List\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t94/after/test.java b/java/java-tests/testData/refactoring/typeCook/t94/after/test.java
new file mode 100644
index 0000000..d675205
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t94/after/test.java
@@ -0,0 +1,12 @@
+class List<T> {
+  T t;
+}
+
+class Test{
+  void foo(){
+     List x = new List();
+     List y = new List();
+
+     (true ? x : y).t = "";
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t94/before/test.java b/java/java-tests/testData/refactoring/typeCook/t94/before/test.java
new file mode 100644
index 0000000..d675205
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t94/before/test.java
@@ -0,0 +1,12 @@
+class List<T> {
+  T t;
+}
+
+class Test{
+  void foo(){
+     List x = new List();
+     List y = new List();
+
+     (true ? x : y).t = "";
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t95/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t95/after/Test.1.items
new file mode 100644
index 0000000..478d566
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t95/after/Test.1.items
@@ -0,0 +1,2 @@
+List<B>\nPsiLocalVariable:y
+List\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t95/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t95/after/Test.items
new file mode 100644
index 0000000..4b700c4
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t95/after/Test.items
@@ -0,0 +1,2 @@
+List\nPsiLocalVariable:x
+List\nPsiLocalVariable:y
diff --git a/java/java-tests/testData/refactoring/typeCook/t95/after/test.java b/java/java-tests/testData/refactoring/typeCook/t95/after/test.java
new file mode 100644
index 0000000..41fbd4a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t95/after/test.java
@@ -0,0 +1,15 @@
+class List<T> {
+  T t;
+}
+
+class A {}
+class B extends A {}
+
+class Test{
+  void foo(){
+     List x = new List<A>();
+     List y = new List<B>();
+
+     x = y;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t95/before/test.java b/java/java-tests/testData/refactoring/typeCook/t95/before/test.java
new file mode 100644
index 0000000..41fbd4a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t95/before/test.java
@@ -0,0 +1,15 @@
+class List<T> {
+  T t;
+}
+
+class A {}
+class B extends A {}
+
+class Test{
+  void foo(){
+     List x = new List<A>();
+     List y = new List<B>();
+
+     x = y;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t96/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t96/after/Test.1.items
new file mode 100644
index 0000000..854311c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t96/after/Test.1.items
@@ -0,0 +1,4 @@
+List<List<java.io.Serializable>>\nPsiLocalVariable:x
+List<List<java.io.Serializable>>\nPsiLocalVariable:y
+List<List<java.io.Serializable>>\nnew
+List<List<java.io.Serializable>>\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t96/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t96/after/Test.items
new file mode 100644
index 0000000..6c76dad
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t96/after/Test.items
@@ -0,0 +1,4 @@
+List<List>\nPsiLocalVariable:x
+List<List>\nPsiLocalVariable:y
+List<List>\nnew
+List<List>\nnew
diff --git a/java/java-tests/testData/refactoring/typeCook/t96/after/test.java b/java/java-tests/testData/refactoring/typeCook/t96/after/test.java
new file mode 100644
index 0000000..615d538
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t96/after/test.java
@@ -0,0 +1,17 @@
+class List<T> {
+  T t;
+}
+
+class A {}
+class B extends A {}
+
+class Test{
+  void foo(){
+     List<List> x = new List<List>();
+     List<List> y = new List<List>();
+
+     x.t.t = "";
+     y.t = x.t;
+     y.t.t = new Integer(3);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t96/before/test.java b/java/java-tests/testData/refactoring/typeCook/t96/before/test.java
new file mode 100644
index 0000000..615d538
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t96/before/test.java
@@ -0,0 +1,17 @@
+class List<T> {
+  T t;
+}
+
+class A {}
+class B extends A {}
+
+class Test{
+  void foo(){
+     List<List> x = new List<List>();
+     List<List> y = new List<List>();
+
+     x.t.t = "";
+     y.t = x.t;
+     y.t.t = new Integer(3);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t97/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t97/after/Test.1.items
new file mode 100644
index 0000000..a720f7d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t97/after/Test.1.items
@@ -0,0 +1 @@
+List<java.lang.String>\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t97/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t97/after/Test.items
new file mode 100644
index 0000000..2d2088b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t97/after/Test.items
@@ -0,0 +1 @@
+List\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t97/after/test.java b/java/java-tests/testData/refactoring/typeCook/t97/after/test.java
new file mode 100644
index 0000000..a524a26
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t97/after/test.java
@@ -0,0 +1,14 @@
+class List<T> {
+  T t;
+}
+
+interface A {}
+
+class Test{
+  A foo(){
+    List x = null;
+    x.t = "";
+
+    return (A) x;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t97/before/test.java b/java/java-tests/testData/refactoring/typeCook/t97/before/test.java
new file mode 100644
index 0000000..a524a26
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t97/before/test.java
@@ -0,0 +1,14 @@
+class List<T> {
+  T t;
+}
+
+interface A {}
+
+class Test{
+  A foo(){
+    List x = null;
+    x.t = "";
+
+    return (A) x;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t98/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t98/after/Test.1.items
new file mode 100644
index 0000000..2d2088b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t98/after/Test.1.items
@@ -0,0 +1 @@
+List\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t98/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t98/after/Test.items
new file mode 100644
index 0000000..2d2088b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t98/after/Test.items
@@ -0,0 +1 @@
+List\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t98/after/test.java b/java/java-tests/testData/refactoring/typeCook/t98/after/test.java
new file mode 100644
index 0000000..d911705
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t98/after/test.java
@@ -0,0 +1,15 @@
+class List<T> {
+  class Mist<A extends T>{
+    A a;
+  }
+
+  T t;
+  Mist m;
+}
+
+class Test{
+  void foo(){
+    List x = null;
+    x.m.a = "";
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t98/before/test.java b/java/java-tests/testData/refactoring/typeCook/t98/before/test.java
new file mode 100644
index 0000000..d911705
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t98/before/test.java
@@ -0,0 +1,15 @@
+class List<T> {
+  class Mist<A extends T>{
+    A a;
+  }
+
+  T t;
+  Mist m;
+}
+
+class Test{
+  void foo(){
+    List x = null;
+    x.m.a = "";
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t99/after/Test.1.items b/java/java-tests/testData/refactoring/typeCook/t99/after/Test.1.items
new file mode 100644
index 0000000..097048e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t99/after/Test.1.items
@@ -0,0 +1 @@
+List<java.lang.Object>\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t99/after/Test.items b/java/java-tests/testData/refactoring/typeCook/t99/after/Test.items
new file mode 100644
index 0000000..2d2088b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t99/after/Test.items
@@ -0,0 +1 @@
+List\nPsiLocalVariable:x
diff --git a/java/java-tests/testData/refactoring/typeCook/t99/after/test.java b/java/java-tests/testData/refactoring/typeCook/t99/after/test.java
new file mode 100644
index 0000000..1f34151
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t99/after/test.java
@@ -0,0 +1,18 @@
+class List<T> {
+  T t;
+}
+
+interface A {
+     List get();
+}
+
+class Test{
+
+  void foo(){
+    List x = new A() {
+      public List get(){
+        return new List<String>();
+      }
+    }.get();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/typeCook/t99/before/test.java b/java/java-tests/testData/refactoring/typeCook/t99/before/test.java
new file mode 100644
index 0000000..1f34151
--- /dev/null
+++ b/java/java-tests/testData/refactoring/typeCook/t99/before/test.java
@@ -0,0 +1,18 @@
+class List<T> {
+  T t;
+}
+
+interface A {
+     List get();
+}
+
+class Test{
+
+  void foo(){
+    List x = new A() {
+      public List get(){
+        return new List<String>();
+      }
+    }.get();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/anonymous/after/Test.java b/java/java-tests/testData/refactoring/wrapReturnValue/anonymous/after/Test.java
new file mode 100644
index 0000000..0e9d97f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/anonymous/after/Test.java
@@ -0,0 +1,18 @@
+class Test {
+   public Wrapper foo(int p) {
+   		Object o = new Object() {
+   			private String myIntFull = "";
+   			public String getIntFull() {
+   				return myIntFull;
+   			}
+   		};
+
+   		if (p > 0) {
+   			return new Wrapper("");
+   		} else {
+   			return new Wrapper("");
+   		}
+   	}
+
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/anonymous/after/Wrapper.java b/java/java-tests/testData/refactoring/wrapReturnValue/anonymous/after/Wrapper.java
new file mode 100644
index 0000000..deca723
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/anonymous/after/Wrapper.java
@@ -0,0 +1,10 @@
+class Wrapper {
+  String myField;
+  Wrapper(String s) {
+    myField = s;
+  }
+
+  String getMyField() {
+    return myField;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/anonymous/before/Test.java b/java/java-tests/testData/refactoring/wrapReturnValue/anonymous/before/Test.java
new file mode 100644
index 0000000..9e48eeb
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/anonymous/before/Test.java
@@ -0,0 +1,18 @@
+class Test {
+   public String foo(int p) {
+   		Object o = new Object() {
+   			private String myIntFull = "";
+   			public String getIntFull() {
+   				return myIntFull;
+   			}
+   		};
+
+   		if (p > 0) {
+   			return "";
+   		} else {
+   			return "";
+   		}
+   	}
+
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/anonymous/before/Wrapper.java b/java/java-tests/testData/refactoring/wrapReturnValue/anonymous/before/Wrapper.java
new file mode 100644
index 0000000..deca723
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/anonymous/before/Wrapper.java
@@ -0,0 +1,10 @@
+class Wrapper {
+  String myField;
+  Wrapper(String s) {
+    myField = s;
+  }
+
+  String getMyField() {
+    return myField;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/generics/after/Test.java b/java/java-tests/testData/refactoring/wrapReturnValue/generics/after/Test.java
new file mode 100644
index 0000000..12f365e
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/generics/after/Test.java
@@ -0,0 +1,7 @@
+class Test<T> {
+  T myT;
+
+    Wrapper<T> foo() {
+    return new Wrapper<T>(myT);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/generics/after/Wrapper.java b/java/java-tests/testData/refactoring/wrapReturnValue/generics/after/Wrapper.java
new file mode 100644
index 0000000..0b351ee
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/generics/after/Wrapper.java
@@ -0,0 +1,13 @@
+public class Wrapper<T> {
+    private final T value;
+
+    public Wrapper(T value) {
+        this.value = value;
+    }
+
+
+    public T getValue() {
+        return value;
+    }
+
+}
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/generics/before/Test.java b/java/java-tests/testData/refactoring/wrapReturnValue/generics/before/Test.java
new file mode 100644
index 0000000..e68dff6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/generics/before/Test.java
@@ -0,0 +1,6 @@
+class Test<T> {
+  T myT;
+  T foo() {
+    return myT;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/hierarchy/after/Inheritor.java b/java/java-tests/testData/refactoring/wrapReturnValue/hierarchy/after/Inheritor.java
new file mode 100644
index 0000000..906e5d8
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/hierarchy/after/Inheritor.java
@@ -0,0 +1,9 @@
+class Inheritor extends Test {
+    Wrapper foo() {
+    return new Wrapper("");
+  }
+
+  void bar(Test t) {
+    String s = t.foo().getValue();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/hierarchy/after/Test.java b/java/java-tests/testData/refactoring/wrapReturnValue/hierarchy/after/Test.java
new file mode 100644
index 0000000..a7c2a2d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/hierarchy/after/Test.java
@@ -0,0 +1,17 @@
+abstract class Test {
+  abstract Wrapper foo();
+
+    public class Wrapper {
+        private final String value;
+
+        public Wrapper(String value) {
+            this.value = value;
+        }
+
+
+        public String getValue() {
+            return value;
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/hierarchy/before/Inheritor.java b/java/java-tests/testData/refactoring/wrapReturnValue/hierarchy/before/Inheritor.java
new file mode 100644
index 0000000..ba8394b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/hierarchy/before/Inheritor.java
@@ -0,0 +1,9 @@
+class Inheritor extends Test {
+  String foo() {
+    return "";
+  }
+
+  void bar(Test t) {
+    String s = t.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/hierarchy/before/Test.java b/java/java-tests/testData/refactoring/wrapReturnValue/hierarchy/before/Test.java
new file mode 100644
index 0000000..5b11736b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/hierarchy/before/Test.java
@@ -0,0 +1,3 @@
+abstract class Test {
+  abstract String foo();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/inconsistentWrapper/after/Test.java b/java/java-tests/testData/refactoring/wrapReturnValue/inconsistentWrapper/after/Test.java
new file mode 100644
index 0000000..49e3483
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/inconsistentWrapper/after/Test.java
@@ -0,0 +1,5 @@
+class Test {
+    Wrapper foo() {
+    return new Wrapper("");
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/inconsistentWrapper/after/Wrapper.java b/java/java-tests/testData/refactoring/wrapReturnValue/inconsistentWrapper/after/Wrapper.java
new file mode 100644
index 0000000..f74405a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/inconsistentWrapper/after/Wrapper.java
@@ -0,0 +1,6 @@
+class Wrapper {
+  String myField;
+  Wrapper(String s) {
+    myField = s;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/inconsistentWrapper/before/Test.java b/java/java-tests/testData/refactoring/wrapReturnValue/inconsistentWrapper/before/Test.java
new file mode 100644
index 0000000..bab0193
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/inconsistentWrapper/before/Test.java
@@ -0,0 +1,5 @@
+class Test {
+  String foo() {
+    return "";
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/inconsistentWrapper/before/Wrapper.java b/java/java-tests/testData/refactoring/wrapReturnValue/inconsistentWrapper/before/Wrapper.java
new file mode 100644
index 0000000..f74405a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/inconsistentWrapper/before/Wrapper.java
@@ -0,0 +1,6 @@
+class Wrapper {
+  String myField;
+  Wrapper(String s) {
+    myField = s;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/innerClass/after/Test.java b/java/java-tests/testData/refactoring/wrapReturnValue/innerClass/after/Test.java
new file mode 100644
index 0000000..59509c2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/innerClass/after/Test.java
@@ -0,0 +1,23 @@
+class Test {
+    Wrapper foo() {
+    return new Wrapper("");
+  }
+
+  void bar() {
+    String s = foo().getValue();
+  }
+
+    public class Wrapper {
+        private final String value;
+
+        public Wrapper(String value) {
+            this.value = value;
+        }
+
+
+        public String getValue() {
+            return value;
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/innerClass/before/Test.java b/java/java-tests/testData/refactoring/wrapReturnValue/innerClass/before/Test.java
new file mode 100644
index 0000000..029bda9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/innerClass/before/Test.java
@@ -0,0 +1,9 @@
+class Test {
+  String foo() {
+    return "";
+  }
+
+  void bar() {
+    String s = foo(); 
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/noConstructor/after/Test.java b/java/java-tests/testData/refactoring/wrapReturnValue/noConstructor/after/Test.java
new file mode 100644
index 0000000..49e3483
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/noConstructor/after/Test.java
@@ -0,0 +1,5 @@
+class Test {
+    Wrapper foo() {
+    return new Wrapper("");
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/noConstructor/after/Wrapper.java b/java/java-tests/testData/refactoring/wrapReturnValue/noConstructor/after/Wrapper.java
new file mode 100644
index 0000000..ae05d58
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/noConstructor/after/Wrapper.java
@@ -0,0 +1,4 @@
+class Wrapper {
+  String myField;
+  String getMyField(){return myField;}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/noConstructor/before/Test.java b/java/java-tests/testData/refactoring/wrapReturnValue/noConstructor/before/Test.java
new file mode 100644
index 0000000..bab0193
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/noConstructor/before/Test.java
@@ -0,0 +1,5 @@
+class Test {
+  String foo() {
+    return "";
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/noConstructor/before/Wrapper.java b/java/java-tests/testData/refactoring/wrapReturnValue/noConstructor/before/Wrapper.java
new file mode 100644
index 0000000..ae05d58
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/noConstructor/before/Wrapper.java
@@ -0,0 +1,4 @@
+class Wrapper {
+  String myField;
+  String getMyField(){return myField;}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/rawReturnType/after/Test.java b/java/java-tests/testData/refactoring/wrapReturnValue/rawReturnType/after/Test.java
new file mode 100644
index 0000000..a1fe164
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/rawReturnType/after/Test.java
@@ -0,0 +1,6 @@
+import java.util.*;
+class Test {
+    Wrapper foo() {
+      return new Wrapper(new ArrayList<String>());
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/rawReturnType/after/Wrapper.java b/java/java-tests/testData/refactoring/wrapReturnValue/rawReturnType/after/Wrapper.java
new file mode 100644
index 0000000..42eda4d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/rawReturnType/after/Wrapper.java
@@ -0,0 +1,11 @@
+import java.util.*;
+class Wrapper {
+  List<CharSequence> myField;
+  Wrapper(List<CharSequence> s) {
+    myField = s;
+  }
+
+  List<CharSequence> getMyField() {
+    return myField;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/rawReturnType/before/Test.java b/java/java-tests/testData/refactoring/wrapReturnValue/rawReturnType/before/Test.java
new file mode 100644
index 0000000..6cbaf52
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/rawReturnType/before/Test.java
@@ -0,0 +1,6 @@
+import java.util.*;
+class Test {
+   List foo() {
+      return new ArrayList<String>();
+   }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/rawReturnType/before/Wrapper.java b/java/java-tests/testData/refactoring/wrapReturnValue/rawReturnType/before/Wrapper.java
new file mode 100644
index 0000000..42eda4d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/rawReturnType/before/Wrapper.java
@@ -0,0 +1,11 @@
+import java.util.*;
+class Wrapper {
+  List<CharSequence> myField;
+  Wrapper(List<CharSequence> s) {
+    myField = s;
+  }
+
+  List<CharSequence> getMyField() {
+    return myField;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/returnInsideLambda/after/Test.java b/java/java-tests/testData/refactoring/wrapReturnValue/returnInsideLambda/after/Test.java
new file mode 100644
index 0000000..f74dbb9
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/returnInsideLambda/after/Test.java
@@ -0,0 +1,21 @@
+class Test {
+    Wrapper foo() {
+    return new Wrapper((o) -> {
+        return 0;
+    });
+  }
+
+    public class Wrapper {
+        private final Comparable<String> value;
+
+        public Wrapper(Comparable<String> value) {
+            this.value = value;
+        }
+
+
+        public Comparable<String> getValue() {
+            return value;
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/returnInsideLambda/before/Test.java b/java/java-tests/testData/refactoring/wrapReturnValue/returnInsideLambda/before/Test.java
new file mode 100644
index 0000000..bbc57c1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/returnInsideLambda/before/Test.java
@@ -0,0 +1,7 @@
+class Test {
+  Comparable<String> foo() {
+    return (o) -> {
+      return 0;
+    };
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/simple/after/Test.java b/java/java-tests/testData/refactoring/wrapReturnValue/simple/after/Test.java
new file mode 100644
index 0000000..49e3483
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/simple/after/Test.java
@@ -0,0 +1,5 @@
+class Test {
+    Wrapper foo() {
+    return new Wrapper("");
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/simple/after/Wrapper.java b/java/java-tests/testData/refactoring/wrapReturnValue/simple/after/Wrapper.java
new file mode 100644
index 0000000..35fba31
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/simple/after/Wrapper.java
@@ -0,0 +1,13 @@
+public class Wrapper {
+    private final String value;
+
+    public Wrapper(String value) {
+        this.value = value;
+    }
+
+
+    public String getValue() {
+        return value;
+    }
+
+}
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/simple/before/Test.java b/java/java-tests/testData/refactoring/wrapReturnValue/simple/before/Test.java
new file mode 100644
index 0000000..bab0193
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/simple/before/Test.java
@@ -0,0 +1,5 @@
+class Test {
+  String foo() {
+    return "";
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/staticMethodInnerClass/after/Test.java b/java/java-tests/testData/refactoring/wrapReturnValue/staticMethodInnerClass/after/Test.java
new file mode 100644
index 0000000..035212c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/staticMethodInnerClass/after/Test.java
@@ -0,0 +1,23 @@
+class Test {
+  static Wrapper foo() {
+    return new Wrapper("");
+  }
+
+  void bar() {
+    String s = foo().getValue();
+  }
+
+    public static class Wrapper {
+        private final String value;
+
+        public Wrapper(String value) {
+            this.value = value;
+        }
+
+
+        public String getValue() {
+            return value;
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/staticMethodInnerClass/before/Test.java b/java/java-tests/testData/refactoring/wrapReturnValue/staticMethodInnerClass/before/Test.java
new file mode 100644
index 0000000..d406379
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/staticMethodInnerClass/before/Test.java
@@ -0,0 +1,9 @@
+class Test {
+  static String foo() {
+    return "";
+  }
+
+  void bar() {
+    String s = foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/strip/after/Test.java b/java/java-tests/testData/refactoring/wrapReturnValue/strip/after/Test.java
new file mode 100644
index 0000000..99b6f3b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/strip/after/Test.java
@@ -0,0 +1,10 @@
+class Test {
+    Wrapper foo() {
+    return new Wrapper("");
+  }
+
+  void bar() {
+    String s = foo().getMyField();
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/strip/after/Wrapper.java b/java/java-tests/testData/refactoring/wrapReturnValue/strip/after/Wrapper.java
new file mode 100644
index 0000000..deca723
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/strip/after/Wrapper.java
@@ -0,0 +1,10 @@
+class Wrapper {
+  String myField;
+  Wrapper(String s) {
+    myField = s;
+  }
+
+  String getMyField() {
+    return myField;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/strip/before/Test.java b/java/java-tests/testData/refactoring/wrapReturnValue/strip/before/Test.java
new file mode 100644
index 0000000..fcd53d6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/strip/before/Test.java
@@ -0,0 +1,10 @@
+class Test {
+  String foo() {
+    return new Wrapper("").getMyField();
+  }
+
+  void bar() {
+    String s = foo();
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/strip/before/Wrapper.java b/java/java-tests/testData/refactoring/wrapReturnValue/strip/before/Wrapper.java
new file mode 100644
index 0000000..deca723
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/strip/before/Wrapper.java
@@ -0,0 +1,10 @@
+class Wrapper {
+  String myField;
+  Wrapper(String s) {
+    myField = s;
+  }
+
+  String getMyField() {
+    return myField;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/wrapper/after/Test.java b/java/java-tests/testData/refactoring/wrapReturnValue/wrapper/after/Test.java
new file mode 100644
index 0000000..99b6f3b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/wrapper/after/Test.java
@@ -0,0 +1,10 @@
+class Test {
+    Wrapper foo() {
+    return new Wrapper("");
+  }
+
+  void bar() {
+    String s = foo().getMyField();
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/wrapper/after/Wrapper.java b/java/java-tests/testData/refactoring/wrapReturnValue/wrapper/after/Wrapper.java
new file mode 100644
index 0000000..deca723
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/wrapper/after/Wrapper.java
@@ -0,0 +1,10 @@
+class Wrapper {
+  String myField;
+  Wrapper(String s) {
+    myField = s;
+  }
+
+  String getMyField() {
+    return myField;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/wrapper/before/Test.java b/java/java-tests/testData/refactoring/wrapReturnValue/wrapper/before/Test.java
new file mode 100644
index 0000000..df1a8df
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/wrapper/before/Test.java
@@ -0,0 +1,10 @@
+class Test {
+  String foo() {
+    return "";
+  }
+
+  void bar() {
+    String s = foo();
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/wrapper/before/Wrapper.java b/java/java-tests/testData/refactoring/wrapReturnValue/wrapper/before/Wrapper.java
new file mode 100644
index 0000000..deca723
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/wrapper/before/Wrapper.java
@@ -0,0 +1,10 @@
+class Wrapper {
+  String myField;
+  Wrapper(String s) {
+    myField = s;
+  }
+
+  String getMyField() {
+    return myField;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/wrongFieldAssignment/after/Test.java b/java/java-tests/testData/refactoring/wrapReturnValue/wrongFieldAssignment/after/Test.java
new file mode 100644
index 0000000..99b6f3b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/wrongFieldAssignment/after/Test.java
@@ -0,0 +1,10 @@
+class Test {
+    Wrapper foo() {
+    return new Wrapper("");
+  }
+
+  void bar() {
+    String s = foo().getMyField();
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/wrongFieldAssignment/after/Wrapper.java b/java/java-tests/testData/refactoring/wrapReturnValue/wrongFieldAssignment/after/Wrapper.java
new file mode 100644
index 0000000..deca723
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/wrongFieldAssignment/after/Wrapper.java
@@ -0,0 +1,10 @@
+class Wrapper {
+  String myField;
+  Wrapper(String s) {
+    myField = s;
+  }
+
+  String getMyField() {
+    return myField;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/wrongFieldAssignment/before/Test.java b/java/java-tests/testData/refactoring/wrapReturnValue/wrongFieldAssignment/before/Test.java
new file mode 100644
index 0000000..df1a8df
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/wrongFieldAssignment/before/Test.java
@@ -0,0 +1,10 @@
+class Test {
+  String foo() {
+    return "";
+  }
+
+  void bar() {
+    String s = foo();
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/wrongFieldAssignment/before/Wrapper.java b/java/java-tests/testData/refactoring/wrapReturnValue/wrongFieldAssignment/before/Wrapper.java
new file mode 100644
index 0000000..b353178
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/wrongFieldAssignment/before/Wrapper.java
@@ -0,0 +1,11 @@
+class Wrapper {
+  String myField;
+  String myField1;
+  Wrapper(String s) {
+    myField1 = s;
+  }
+
+  String getMyField() {
+    return myField;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/wrongFieldType/after/Test.java b/java/java-tests/testData/refactoring/wrapReturnValue/wrongFieldType/after/Test.java
new file mode 100644
index 0000000..4e6480d
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/wrongFieldType/after/Test.java
@@ -0,0 +1,11 @@
+class Test {
+   public Wrapper foo(int p) {
+   		if (p > 0) {
+   			return new Wrapper(1);
+   		} else {
+   			return new Wrapper(2);
+   		}
+   	}
+
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/wrongFieldType/after/Wrapper.java b/java/java-tests/testData/refactoring/wrapReturnValue/wrongFieldType/after/Wrapper.java
new file mode 100644
index 0000000..fed5f3f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/wrongFieldType/after/Wrapper.java
@@ -0,0 +1,10 @@
+class Wrapper {
+  int myField;
+  Wrapper(int s) {
+    myField = s;
+  }
+
+  int getMyField() {
+    return myField;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/wrongFieldType/before/Test.java b/java/java-tests/testData/refactoring/wrapReturnValue/wrongFieldType/before/Test.java
new file mode 100644
index 0000000..c3234dc
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/wrongFieldType/before/Test.java
@@ -0,0 +1,11 @@
+class Test {
+   public double foo(int p) {
+   		if (p > 0) {
+   			return 1;
+   		} else {
+   			return 2;
+   		}
+   	}
+
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/wrongFieldType/before/Wrapper.java b/java/java-tests/testData/refactoring/wrapReturnValue/wrongFieldType/before/Wrapper.java
new file mode 100644
index 0000000..fed5f3f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/wrapReturnValue/wrongFieldType/before/Wrapper.java
@@ -0,0 +1,10 @@
+class Wrapper {
+  int myField;
+  Wrapper(int s) {
+    myField = s;
+  }
+
+  int getMyField() {
+    return myField;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/structureView/expandElementWithExitingName/test.xml b/java/java-tests/testData/structureView/expandElementWithExitingName/test.xml
new file mode 100644
index 0000000..7428882
--- /dev/null
+++ b/java/java-tests/testData/structureView/expandElementWithExitingName/test.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0"?>
+
+<test>
+	<level1>
+		<level2>
+			<level3></level3>
+		</level2>
+	</level1>
+	<level1>
+		<level2>
+			<level3></level3>
+		</level2>
+	</level1>
+	<level1>
+		<level2>
+			<level3></level3>
+		</level2>
+	</level1>
+	<level1>
+		<level2>
+			<level3></level3>
+		</level2>
+	</level1>
+</test>
diff --git a/java/java-tests/testData/structureView/javaClassStructure/src/com/package1/Class1.java b/java/java-tests/testData/structureView/javaClassStructure/src/com/package1/Class1.java
new file mode 100644
index 0000000..8376a92
--- /dev/null
+++ b/java/java-tests/testData/structureView/javaClassStructure/src/com/package1/Class1.java
@@ -0,0 +1,10 @@
+package com.package1;
+
+public class Class1 {
+  public boolean myField1;
+  public boolean myField2;
+  
+  public int getValue(){
+   return 0;
+  }  
+}
diff --git a/java/java-tests/testData/structureView/membersOrder/src/com/package1/Class2.java b/java/java-tests/testData/structureView/membersOrder/src/com/package1/Class2.java
new file mode 100644
index 0000000..3ecb098
--- /dev/null
+++ b/java/java-tests/testData/structureView/membersOrder/src/com/package1/Class2.java
@@ -0,0 +1,7 @@
+public class Class2 {
+  private int ab;
+  protected int z;
+  public void af(){}
+  public void zf(){}
+  public Class2(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/structureView/showClassMembers/src/com/package1/Class2.java b/java/java-tests/testData/structureView/showClassMembers/src/com/package1/Class2.java
new file mode 100644
index 0000000..c9d2aab
--- /dev/null
+++ b/java/java-tests/testData/structureView/showClassMembers/src/com/package1/Class2.java
@@ -0,0 +1,53 @@
+package com.package1;
+
+public class Class2 {
+  private boolean myField1;
+  public boolean myField2;
+  public boolean myField3;
+  public boolean myField4;
+
+  public int getValue() {
+    return 0;
+  }
+
+  public class InnerClass1 {
+    public int myInnerClassField;
+
+    public class InnerClass12 {
+      public int myInnerClassField;
+
+      public class InnerClass13 {
+        public int myInnerClassField;
+
+        public class InnerClass14 {
+          public int myInnerClassField;
+
+          public class InnerClass15 {
+            public int myInnerClassField;
+          }
+        }
+      }
+    }
+  }
+
+  public class InnerClass2 {
+    public int myInnerClassField;
+
+    public class InnerClass22 {
+      public int myInnerClassField;
+
+      public class InnerClass23 {
+        public int myInnerClassField;
+
+        public class InnerClass24 {
+          public int myFieldToSelect;
+
+          public class InnerClass25 {
+            public int myInnerClassField;
+          }
+        }
+      }
+    }
+  }
+
+}
diff --git a/java/java-tests/testData/structureView/visibilitySorter/src/com/package1/Class2.java b/java/java-tests/testData/structureView/visibilitySorter/src/com/package1/Class2.java
new file mode 100644
index 0000000..8031464
--- /dev/null
+++ b/java/java-tests/testData/structureView/visibilitySorter/src/com/package1/Class2.java
@@ -0,0 +1,5 @@
+public class Class2 {
+  private int __myPrivateFiield;
+  protected int _myProtectedField;
+  public int myPublicField;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/unscramble/deadlock.txt b/java/java-tests/testData/unscramble/deadlock.txt
new file mode 100644
index 0000000..98e83fc
--- /dev/null
+++ b/java/java-tests/testData/unscramble/deadlock.txt
@@ -0,0 +1,773 @@
+2011-11-25 20:12:30
+Full thread dump Java HotSpot(TM) 64-Bit Server VM (17.1-b03-307 mixed mode):
+
+"Attach Listener" daemon prio=9 tid=103588000 nid=0x113fb6000 waiting on condition [00000000]
+   java.lang.Thread.State: RUNNABLE
+
+   Locked ownable synchronizers:
+	- None
+
+"process reaper" daemon prio=4 tid=11d190800 nid=0x116755000 runnable [116754000]
+   java.lang.Thread.State: RUNNABLE
+	at java.lang.UNIXProcess.waitForProcessExit(Native Method)
+	at java.lang.UNIXProcess.access$900(UNIXProcess.java:17)
+	at java.lang.UNIXProcess$2$1.run(UNIXProcess.java:86)
+
+   Locked ownable synchronizers:
+	- None
+
+"Alarm pool(own)" daemon prio=3 tid=114486000 nid=0x11b102000 waiting on condition [11b101000]
+   java.lang.Thread.State: WAITING (parking)
+	at sun.misc.Unsafe.park(Native Method)
+	- parking to wait for  <7caf15c60> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
+	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
+	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
+	at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
+	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
+	at java.lang.Thread.run(Thread.java:680)
+
+   Locked ownable synchronizers:
+	- None
+
+"JobScheduler pool 0/1" prio=5 tid=115659000 nid=0x11ac6c000 waiting for monitor entry [11ac6a000]
+   java.lang.Thread.State: BLOCKED (on object monitor)
+	at com.intellij.util.io.PersistentHashMap.get(PersistentHashMap.java:339)
+	- waiting to lock <7c9734008> (a com.intellij.util.io.PersistentBTreeEnumerator)
+	at com.intellij.util.indexing.MapIndexStorage$1$1.compute(MapIndexStorage.java:77)
+	at com.intellij.util.indexing.MapIndexStorage$1$1.compute(MapIndexStorage.java:67)
+	at com.intellij.util.indexing.ChangeTrackingValueContainer.getMergedData(ChangeTrackingValueContainer.java:134)
+	- locked <7c9733fa0> (a com.intellij.util.indexing.ValueContainerMap)
+	at com.intellij.util.indexing.ChangeTrackingValueContainer.getValueIterator(ChangeTrackingValueContainer.java:98)
+	at com.intellij.util.indexing.FileBasedIndex.processValuesImpl(FileBasedIndex.java:900)
+	at com.intellij.util.indexing.FileBasedIndex.getValues(FileBasedIndex.java:822)
+	at com.intellij.javascript.flex.css.FlexCssElementDescriptorProvider.getPropertyDescriptor(FlexCssElementDescriptorProvider.java:180)
+	at com.intellij.psi.css.impl.util.table.CssDescriptorsUtil.getPropertyDescriptor(CssDescriptorsUtil.java:50)
+	at com.intellij.psi.css.impl.util.table.CssDescriptorsUtil.getCannonicalPropertyName(CssDescriptorsUtil.java:98)
+	at com.intellij.psi.css.impl.util.table.CssDescriptorsUtil.getCannonicalPropertyName(CssDescriptorsUtil.java:104)
+	at com.intellij.psi.css.browse.CssColorAnnotator.annotate(CssColorAnnotator.java:105)
+	at com.intellij.codeInsight.daemon.impl.DefaultHighlightVisitor.runAnnotators(DefaultHighlightVisitor.java:157)
+	at com.intellij.codeInsight.daemon.impl.DefaultHighlightVisitor.visit(DefaultHighlightVisitor.java:100)
+	at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass$8.run(GeneralHighlightingPass.java:593)
+	at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.analyzeByVisitors(GeneralHighlightingPass.java:771)
+	at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.access$3600(GeneralHighlightingPass.java:80)
+	at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass$10.run(GeneralHighlightingPass.java:777)
+	at com.intellij.codeInsight.daemon.impl.DefaultHighlightVisitor.analyze(DefaultHighlightVisitor.java:84)
+	at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.analyzeByVisitors(GeneralHighlightingPass.java:774)
+	at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.access$3600(GeneralHighlightingPass.java:80)
+	at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass$10.run(GeneralHighlightingPass.java:777)
+	at com.intellij.codeInsight.daemon.impl.DefaultHighlightVisitor.analyze(DefaultHighlightVisitor.java:84)
+	at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.analyzeByVisitors(GeneralHighlightingPass.java:774)
+	at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.collectHighlights(GeneralHighlightingPass.java:639)
+	at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.collectInformationWithProgress(GeneralHighlightingPass.java:204)
+	at com.intellij.codeInsight.daemon.impl.ProgressableTextEditorHighlightingPass.doCollectInformation(ProgressableTextEditorHighlightingPass.java:58)
+	at com.intellij.codeHighlighting.TextEditorHighlightingPass.collectInformation(TextEditorHighlightingPass.java:61)
+	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass$1$1.run(PassExecutorService.java:350)
+	at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1034)
+	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass$1.run(PassExecutorService.java:342)
+	at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:206)
+	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.doRun(PassExecutorService.java:340)
+	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.run(PassExecutorService.java:316)
+	at com.intellij.concurrency.JobLauncher$3.call(JobUtil.java:134)
+	at com.intellij.concurrency.JobLauncher$3.call(JobUtil.java:131)
+	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
+	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
+	at com.intellij.concurrency.PrioritizedFutureTask.access$101(PrioritizedFutureTask.java:31)
+	at com.intellij.concurrency.PrioritizedFutureTask$1.run(PrioritizedFutureTask.java:70)
+	at com.intellij.concurrency.PrioritizedFutureTask.run(PrioritizedFutureTask.java:113)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
+	at java.lang.Thread.run(Thread.java:680)
+
+   Locked ownable synchronizers:
+	- <7ca6bf518> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
+
+"RefCountingStorage write content helper" prio=4 tid=11570f000 nid=0x11a434000 waiting on condition [11a433000]
+   java.lang.Thread.State: WAITING (parking)
+	at sun.misc.Unsafe.park(Native Method)
+	- parking to wait for  <7c8fdddc0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
+	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
+	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
+	at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
+	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
+	at java.lang.Thread.run(Thread.java:680)
+
+   Locked ownable synchronizers:
+	- None
+
+"ApplicationImpl pooled thread 8" prio=4 tid=10367e800 nid=0x118b45000 waiting on condition [118b44000]
+   java.lang.Thread.State: TIMED_WAITING (sleeping)
+	at java.lang.Thread.sleep(Native Method)
+	at com.intellij.util.io.OutputReader.doRun(OutputReader.java:65)
+	at com.intellij.util.io.OutputReader.access$000(OutputReader.java:27)
+	at com.intellij.util.io.OutputReader$1.run(OutputReader.java:44)
+	at com.intellij.openapi.application.impl.ApplicationImpl$6.run(ApplicationImpl.java:421)
+	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
+	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
+	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
+	at java.lang.Thread.run(Thread.java:680)
+	at com.intellij.openapi.application.impl.ApplicationImpl$1$1.run(ApplicationImpl.java:137)
+
+   Locked ownable synchronizers:
+	- <7c9b5c150> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
+
+"ApplicationImpl pooled thread 7" prio=4 tid=1145bb800 nid=0x118a42000 waiting on condition [118a41000]
+   java.lang.Thread.State: TIMED_WAITING (parking)
+	at sun.misc.Unsafe.park(Native Method)
+	- parking to wait for  <7c94dc7d0> (a java.util.concurrent.SynchronousQueue$TransferStack)
+	at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198)
+	at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:424)
+	at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:323)
+	at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:874)
+	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:945)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
+	at java.lang.Thread.run(Thread.java:680)
+	at com.intellij.openapi.application.impl.ApplicationImpl$1$1.run(ApplicationImpl.java:137)
+
+   Locked ownable synchronizers:
+	- None
+
+"ApplicationImpl pooled thread 6" prio=4 tid=114112800 nid=0x11893f000 waiting on condition [11893e000]
+   java.lang.Thread.State: TIMED_WAITING (sleeping)
+	at java.lang.Thread.sleep(Native Method)
+	at com.intellij.util.io.OutputReader.doRun(OutputReader.java:65)
+	at com.intellij.util.io.OutputReader.access$000(OutputReader.java:27)
+	at com.intellij.util.io.OutputReader$1.run(OutputReader.java:44)
+	at com.intellij.openapi.application.impl.ApplicationImpl$6.run(ApplicationImpl.java:421)
+	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
+	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
+	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
+	at java.lang.Thread.run(Thread.java:680)
+	at com.intellij.openapi.application.impl.ApplicationImpl$1$1.run(ApplicationImpl.java:137)
+
+   Locked ownable synchronizers:
+	- <7c9b5bbf8> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
+
+"ApplicationImpl pooled thread 5" prio=4 tid=103346000 nid=0x117689000 waiting on condition [117688000]
+   java.lang.Thread.State: TIMED_WAITING (parking)
+	at sun.misc.Unsafe.park(Native Method)
+	- parking to wait for  <7c94dc7d0> (a java.util.concurrent.SynchronousQueue$TransferStack)
+	at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198)
+	at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:424)
+	at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:323)
+	at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:874)
+	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:945)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
+	at java.lang.Thread.run(Thread.java:680)
+	at com.intellij.openapi.application.impl.ApplicationImpl$1$1.run(ApplicationImpl.java:137)
+
+   Locked ownable synchronizers:
+	- None
+
+"ApplicationImpl pooled thread 4" prio=4 tid=114698800 nid=0x117586000 in Object.wait() [117585000]
+   java.lang.Thread.State: WAITING (on object monitor)
+	at java.lang.Object.wait(Native Method)
+	- waiting on <7ce02f4b0> (a java.lang.UNIXProcess)
+	at java.lang.Object.wait(Object.java:485)
+	at java.lang.UNIXProcess.waitFor(UNIXProcess.java:115)
+	- locked <7ce02f4b0> (a java.lang.UNIXProcess)
+	at com.intellij.execution.process.BaseOSProcessHandler$ProcessWaitFor$1.run(BaseOSProcessHandler.java:221)
+	at com.intellij.openapi.application.impl.ApplicationImpl$6.run(ApplicationImpl.java:421)
+	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
+	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
+	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
+	at java.lang.Thread.run(Thread.java:680)
+	at com.intellij.openapi.application.impl.ApplicationImpl$1$1.run(ApplicationImpl.java:137)
+
+   Locked ownable synchronizers:
+	- <7c9b5b7d8> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
+
+"ApplicationImpl pooled thread 3" prio=4 tid=1032bb000 nid=0x117483000 in Object.wait() [117482000]
+   java.lang.Thread.State: WAITING (on object monitor)
+	at java.lang.Object.wait(Native Method)
+	- waiting on <7c94992c0> (a com.intellij.util.concurrency.WriterPreferenceReadWriteLock$ReaderLock)
+	at java.lang.Object.wait(Object.java:485)
+	at com.intellij.util.concurrency.WriterPreferenceReadWriteLock$ReaderLock.acquire(WriterPreferenceReadWriteLock.java:162)
+	- locked <7c94992c0> (a com.intellij.util.concurrency.WriterPreferenceReadWriteLock$ReaderLock)
+	at com.intellij.openapi.application.impl.ApplicationImpl$ReadAccessToken.<init>(ApplicationImpl.java:1161)
+	at com.intellij.openapi.application.impl.ApplicationImpl.acquireReadActionLockImpl(ApplicationImpl.java:1087)
+	at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:870)
+	at com.intellij.openapi.components.impl.ServiceManagerImpl$MyComponentAdapter.getComponentInstance(ServiceManagerImpl.java:139)
+	at com.intellij.util.pico.DefaultPicoContainer.getLocalInstance(DefaultPicoContainer.java:242)
+	at com.intellij.util.pico.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:229)
+	at com.intellij.util.pico.DefaultPicoContainer.getComponentInstance(DefaultPicoContainer.java:211)
+	at com.intellij.flex.uiDesigner.DesignerApplicationManager.getService(DesignerApplicationManager.java:56)
+	at com.intellij.flex.uiDesigner.Client.getInstance(Client.java:40)
+	at com.intellij.flex.uiDesigner.io.MessageSocketManager.setOut(MessageSocketManager.java:23)
+	at com.intellij.flex.uiDesigner.io.SocketManager.run(SocketManager.java:32)
+	at com.intellij.flex.uiDesigner.io.MessageSocketManager.run(MessageSocketManager.java:12)
+	at com.intellij.openapi.application.impl.ApplicationImpl$6.run(ApplicationImpl.java:421)
+	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
+	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
+	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
+	at java.lang.Thread.run(Thread.java:680)
+	at com.intellij.openapi.application.impl.ApplicationImpl$1$1.run(ApplicationImpl.java:137)
+
+   Locked ownable synchronizers:
+	- <7c9b5b5c8> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
+
+"FS Synchronizer" daemon prio=5 tid=1032b4000 nid=0x117380000 waiting on condition [11737f000]
+   java.lang.Thread.State: WAITING (parking)
+	at sun.misc.Unsafe.park(Native Method)
+	- parking to wait for  <7c8ff7788> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
+	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
+	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
+	at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
+	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
+	at java.lang.Thread.run(Thread.java:680)
+
+   Locked ownable synchronizers:
+	- None
+
+"Animations" daemon prio=5 tid=114626000 nid=0x116aa0000 runnable [116a9f000]
+   java.lang.Thread.State: TIMED_WAITING (parking)
+	at sun.misc.Unsafe.park(Native Method)
+	- parking to wait for  <7c9796698> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
+	at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198)
+	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2025)
+	at java.util.concurrent.DelayQueue.take(DelayQueue.java:164)
+	at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:609)
+	at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:602)
+	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
+	at java.lang.Thread.run(Thread.java:680)
+
+   Locked ownable synchronizers:
+	- None
+
+"TimerQueue" daemon prio=5 tid=1145b3000 nid=0x11699d000 in Object.wait() [11699c000]
+   java.lang.Thread.State: TIMED_WAITING (on object monitor)
+	at java.lang.Object.wait(Native Method)
+	- waiting on <7c98b8fd0> (a javax.swing.TimerQueue)
+	at javax.swing.TimerQueue.run(TimerQueue.java:232)
+	- locked <7c98b8fd0> (a javax.swing.TimerQueue)
+	at java.lang.Thread.run(Thread.java:680)
+
+   Locked ownable synchronizers:
+	- None
+
+"Alarm pool(shared)" daemon prio=3 tid=11426d800 nid=0x11689a000 in Object.wait() [116899000]
+   java.lang.Thread.State: WAITING (on object monitor)
+	at java.lang.Object.wait(Native Method)
+	- waiting on <7b85d56d8> (a java.awt.EventQueue$1AWTInvocationLock)
+	at java.lang.Object.wait(Object.java:485)
+	at java.awt.EventQueue.invokeAndWait(EventQueue.java:1029)
+	- locked <7b85d56d8> (a java.awt.EventQueue$1AWTInvocationLock)
+	at javax.swing.SwingUtilities.invokeAndWait(SwingUtilities.java:1320)
+	at com.intellij.util.Alarm$Request$1.run(Alarm.java:222)
+	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
+	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
+	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
+	at java.lang.Thread.run(Thread.java:680)
+
+   Locked ownable synchronizers:
+	- <7c97aaec0> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
+
+"LowMemoryWatcher" daemon prio=4 tid=1037c8800 nid=0x11628b000 in Object.wait() [11628a000]
+   java.lang.Thread.State: WAITING (on object monitor)
+	at java.lang.Object.wait(Native Method)
+	- waiting on <7c96c9d28> (a java.lang.ref.ReferenceQueue$Lock)
+	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118)
+	- locked <7c96c9d28> (a java.lang.ref.ReferenceQueue$Lock)
+	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134)
+	at com.intellij.openapi.util.LowMemoryWatcher$1.run(LowMemoryWatcher.java:60)
+
+   Locked ownable synchronizers:
+	- None
+
+"FocusManager timer" daemon prio=2 tid=114152800 nid=0x115fe6000 in Object.wait() [115fe5000]
+   java.lang.Thread.State: WAITING (on object monitor)
+	at java.lang.Object.wait(Native Method)
+	- waiting on <7c96b4228> (a java.util.TaskQueue)
+	at java.lang.Object.wait(Object.java:485)
+	at java.util.TimerThread.mainLoop(Timer.java:483)
+	- locked <7c96b4228> (a java.util.TaskQueue)
+	at java.util.TimerThread.run(Timer.java:462)
+
+   Locked ownable synchronizers:
+	- None
+
+"Shared SimpleTimer" daemon prio=2 tid=103694800 nid=0x115ee3000 in Object.wait() [115ee2000]
+   java.lang.Thread.State: WAITING (on object monitor)
+	at java.lang.Object.wait(Native Method)
+	- waiting on <7c96b3d48> (a java.util.TaskQueue)
+	at java.lang.Object.wait(Object.java:485)
+	at java.util.TimerThread.mainLoop(Timer.java:483)
+	- locked <7c96b3d48> (a java.util.TaskQueue)
+	at java.util.TimerThread.run(Timer.java:462)
+
+   Locked ownable synchronizers:
+	- None
+
+"XML-RPC Weblistener" prio=3 tid=103784800 nid=0x115de0000 runnable [115ddf000]
+   java.lang.Thread.State: RUNNABLE
+	at java.net.PlainSocketImpl.socketAccept(Native Method)
+	at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:390)
+	- locked <7c96a0fa8> (a java.net.SocksSocketImpl)
+	at java.net.ServerSocket.implAccept(ServerSocket.java:453)
+	at java.net.ServerSocket.accept(ServerSocket.java:421)
+	at org.apache.xmlrpc.WebServer.run(WebServer.java:453)
+	at java.lang.Thread.run(Thread.java:680)
+
+   Locked ownable synchronizers:
+	- None
+
+"Performance watcher" prio=1 tid=10370b000 nid=0x115cdd000 waiting on condition [115cdc000]
+   java.lang.Thread.State: TIMED_WAITING (parking)
+	at sun.misc.Unsafe.park(Native Method)
+	- parking to wait for  <7c969e910> (a java.util.concurrent.Semaphore$NonfairSync)
+	at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198)
+	at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedNanos(AbstractQueuedSynchronizer.java:1011)
+	at java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireSharedNanos(AbstractQueuedSynchronizer.java:1303)
+	at java.util.concurrent.Semaphore.tryAcquire(Semaphore.java:383)
+	at com.intellij.diagnostic.PerformanceWatcher.checkEDTResponsiveness(PerformanceWatcher.java:156)
+	at com.intellij.diagnostic.PerformanceWatcher.access$100(PerformanceWatcher.java:40)
+	at com.intellij.diagnostic.PerformanceWatcher$2.run(PerformanceWatcher.java:111)
+	at java.lang.Thread.run(Thread.java:680)
+
+   Locked ownable synchronizers:
+	- None
+
+"Document commit thread" prio=6 tid=1140a8800 nid=0x115901000 in Object.wait() [115900000]
+   java.lang.Thread.State: WAITING (on object monitor)
+	at java.lang.Object.wait(Native Method)
+	- waiting on <7c90bc598> (a com.intellij.util.containers.Queue)
+	at java.lang.Object.wait(Object.java:485)
+	at com.intellij.psi.impl.DocumentCommitThread.run(DocumentCommitThread.java:275)
+	- locked <7c90bc598> (a com.intellij.util.containers.Queue)
+	at java.lang.Thread.run(Thread.java:680)
+
+   Locked ownable synchronizers:
+	- None
+
+"ApplicationImpl pooled thread 0 [ReadAccessToken]" prio=4 tid=103693800 nid=0x114901000 waiting for monitor entry [1148ff000]
+   java.lang.Thread.State: BLOCKED (on object monitor)
+	at com.intellij.util.indexing.ChangeTrackingValueContainer.getMergedData(ChangeTrackingValueContainer.java:127)
+	- waiting to lock <7c9733fa0> (a com.intellij.util.indexing.ValueContainerMap)
+	at com.intellij.util.indexing.ChangeTrackingValueContainer.getValueIterator(ChangeTrackingValueContainer.java:98)
+	at com.intellij.util.indexing.FileBasedIndex.processValuesImpl(FileBasedIndex.java:887)
+	at com.intellij.util.indexing.FileBasedIndex.processValues(FileBasedIndex.java:860)
+	at com.intellij.flex.uiDesigner.libraries.LibraryStyleInfoCollector$1.process(LibraryStyleInfoCollector.java:42)
+	at com.intellij.flex.uiDesigner.libraries.LibraryStyleInfoCollector$1.process(LibraryStyleInfoCollector.java:39)
+	at com.intellij.util.indexing.MemoryIndexStorage$1.process(MemoryIndexStorage.java:118)
+	at com.intellij.util.io.PersistentEnumeratorBase.iterateData(PersistentEnumeratorBase.java:373)
+	- locked <7c8fd4558> (a com.intellij.util.io.PagedFileStorage$StorageLock)
+	at com.intellij.util.io.PersistentHashMap.processKeys(PersistentHashMap.java:318)
+	- locked <7c9734008> (a com.intellij.util.io.PersistentBTreeEnumerator)
+	at com.intellij.util.indexing.MapIndexStorage.processKeys(MapIndexStorage.java:173)
+	at com.intellij.util.indexing.MemoryIndexStorage.processKeys(MemoryIndexStorage.java:126)
+	at com.intellij.util.indexing.MapReduceIndex.processAllKeys(MapReduceIndex.java:164)
+	at com.intellij.util.indexing.FileBasedIndex.processAllKeys(FileBasedIndex.java:688)
+	at com.intellij.flex.uiDesigner.libraries.LibraryStyleInfoCollector.collectInherited(LibraryStyleInfoCollector.java:39)
+	at com.intellij.flex.uiDesigner.libraries.LibraryStyleInfoCollector.consume(LibraryStyleInfoCollector.java:73)
+	at com.intellij.flex.uiDesigner.libraries.LibraryStyleInfoCollector.consume(LibraryStyleInfoCollector.java:19)
+	at com.intellij.flex.uiDesigner.libraries.LibraryManager.createOriginalLibrary(LibraryManager.java:268)
+	at com.intellij.flex.uiDesigner.libraries.LibraryCollector.addLibrary(LibraryCollector.java:243)
+	at com.intellij.flex.uiDesigner.libraries.LibraryCollector.collectFromSdkOrderEntry(LibraryCollector.java:223)
+	at com.intellij.flex.uiDesigner.libraries.LibraryCollector.collect(LibraryCollector.java:138)
+	at com.intellij.flex.uiDesigner.libraries.LibraryManager.initLibrarySets(LibraryManager.java:95)
+	at com.intellij.flex.uiDesigner.DesignerApplicationLauncher$7.call(DesignerApplicationLauncher.java:376)
+	at com.intellij.flex.uiDesigner.DesignerApplicationLauncher$7.call(DesignerApplicationLauncher.java:364)
+	at com.intellij.openapi.application.impl.ApplicationImpl$7.call(ApplicationImpl.java:441)
+	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
+	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
+	at java.lang.Thread.run(Thread.java:680)
+	at com.intellij.openapi.application.impl.ApplicationImpl$1$1.run(ApplicationImpl.java:137)
+
+   Locked ownable synchronizers:
+	- <7c9054a10> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
+	- <7c9733f80> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
+
+"Progress Cancel Checker" prio=9 tid=1035c0800 nid=0x114f46000 waiting on condition [114f45000]
+   java.lang.Thread.State: TIMED_WAITING (sleeping)
+	at java.lang.Thread.sleep(Native Method)
+	at com.intellij.openapi.progress.impl.ProgressManagerImpl$1.run(ProgressManagerImpl.java:60)
+
+   Locked ownable synchronizers:
+	- None
+
+"StoreRefreshStatusThread" daemon prio=1 tid=1035b8000 nid=0x114e43000 waiting on condition [114e42000]
+   java.lang.Thread.State: TIMED_WAITING (sleeping)
+	at java.lang.Thread.sleep(Native Method)
+	at com.intellij.openapi.vfs.impl.local.LocalFileSystemImpl$StoreRefreshStatusThread.run(LocalFileSystemImpl.java:325)
+
+   Locked ownable synchronizers:
+	- None
+
+"WatchForChangesThread" prio=6 tid=1030a5000 nid=0x114d40000 runnable [114d3f000]
+   java.lang.Thread.State: RUNNABLE
+	at java.io.FileInputStream.readBytes(Native Method)
+	at java.io.FileInputStream.read(FileInputStream.java:199)
+	at java.lang.UNIXProcess$DeferredCloseInputStream.read(UNIXProcess.java:227)
+	at java.io.BufferedInputStream.read1(BufferedInputStream.java:256)
+	at java.io.BufferedInputStream.read(BufferedInputStream.java:317)
+	- locked <7c8fe2010> (a java.io.BufferedInputStream)
+	at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
+	at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
+	at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
+	- locked <7c8fe4248> (a java.io.InputStreamReader)
+	at java.io.InputStreamReader.read(InputStreamReader.java:167)
+	at java.io.BufferedReader.fill(BufferedReader.java:136)
+	at java.io.BufferedReader.readLine(BufferedReader.java:299)
+	- locked <7c8fe4248> (a java.io.InputStreamReader)
+	at java.io.BufferedReader.readLine(BufferedReader.java:362)
+	at com.intellij.openapi.vfs.impl.local.FileWatcher.readLine(FileWatcher.java:481)
+	at com.intellij.openapi.vfs.impl.local.FileWatcher.access$300(FileWatcher.java:48)
+	at com.intellij.openapi.vfs.impl.local.FileWatcher$WatchForChangesThread.run(FileWatcher.java:354)
+
+   Locked ownable synchronizers:
+	- None
+
+"process reaper" daemon prio=6 tid=1030a4000 nid=0x114c3d000 runnable [114c3c000]
+   java.lang.Thread.State: RUNNABLE
+	at java.lang.UNIXProcess.waitForProcessExit(Native Method)
+	at java.lang.UNIXProcess.access$900(UNIXProcess.java:17)
+	at java.lang.UNIXProcess$2$1.run(UNIXProcess.java:86)
+
+   Locked ownable synchronizers:
+	- None
+
+"Flushing thread" daemon prio=5 tid=1030a3800 nid=0x114add000 waiting on condition [114adc000]
+   java.lang.Thread.State: WAITING (parking)
+	at sun.misc.Unsafe.park(Native Method)
+	- parking to wait for  <7c9733f80> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
+	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
+	at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:811)
+	at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:842)
+	at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1178)
+	at java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:186)
+	at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:262)
+	at com.intellij.util.indexing.MapIndexStorage.flush(MapIndexStorage.java:108)
+	at com.intellij.util.indexing.MemoryIndexStorage.flush(MemoryIndexStorage.java:97)
+	at com.intellij.util.indexing.MapReduceIndex.flush(MapReduceIndex.java:96)
+	at com.intellij.util.indexing.FileBasedIndex.flushAllIndices(FileBasedIndex.java:652)
+	at com.intellij.util.indexing.FileBasedIndex.access$1200(FileBasedIndex.java:95)
+	at com.intellij.util.indexing.FileBasedIndex$7.run(FileBasedIndex.java:332)
+	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
+	at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317)
+	at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
+	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98)
+	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:180)
+	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:204)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
+	at java.lang.Thread.run(Thread.java:680)
+
+   Locked ownable synchronizers:
+	- <7c8fdead0> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
+
+"Poller SunPKCS11-Darwin" daemon prio=1 tid=1147c0000 nid=0x113cab000 waiting on condition [113caa000]
+   java.lang.Thread.State: TIMED_WAITING (sleeping)
+	at java.lang.Thread.sleep(Native Method)
+	at sun.security.pkcs11.SunPKCS11$TokenPoller.run(SunPKCS11.java:692)
+	at java.lang.Thread.run(Thread.java:680)
+
+   Locked ownable synchronizers:
+	- None
+
+"timed reference disposer" daemon prio=2 tid=115421000 nid=0x113eb3000 waiting on condition [113eb2000]
+   java.lang.Thread.State: TIMED_WAITING (parking)
+	at sun.misc.Unsafe.park(Native Method)
+	- parking to wait for  <7c90cff28> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
+	at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198)
+	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2025)
+	at java.util.concurrent.DelayQueue.take(DelayQueue.java:164)
+	at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:609)
+	at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:602)
+	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
+	at java.lang.Thread.run(Thread.java:680)
+
+   Locked ownable synchronizers:
+	- None
+
+"AWT-EventQueue-1 1.0#112.11, eap:true" prio=6 tid=103291000 nid=0x11224c000 in Object.wait() [11224a000]
+   java.lang.Thread.State: WAITING (on object monitor)
+	at java.lang.Object.wait(Native Method)
+	- waiting on <7c94992d0> (a com.intellij.util.concurrency.WriterPreferenceReadWriteLock$WriterLock)
+	at java.lang.Object.wait(Object.java:485)
+	at com.intellij.util.concurrency.WriterPreferenceReadWriteLock$WriterLock.acquire(WriterPreferenceReadWriteLock.java:241)
+	- locked <7c94992d0> (a com.intellij.util.concurrency.WriterPreferenceReadWriteLock$WriterLock)
+	at com.intellij.openapi.application.impl.ApplicationImpl$WriteAccessToken.<init>(ApplicationImpl.java:1127)
+	at com.intellij.openapi.application.impl.ApplicationImpl.acquireWriteActionLock(ApplicationImpl.java:1092)
+	at com.intellij.openapi.application.impl.ApplicationImpl.runWriteAction(ApplicationImpl.java:881)
+	at com.intellij.openapi.components.impl.stores.StorageUtil.save(StorageUtil.java:107)
+	at com.intellij.openapi.components.impl.stores.FileBasedStorage$FileSaveSession.doSave(FileBasedStorage.java:169)
+	at com.intellij.openapi.components.impl.stores.XmlElementStorage$MySaveSession.saveLocally(XmlElementStorage.java:426)
+	at com.intellij.openapi.components.impl.stores.XmlElementStorage$MySaveSession.save(XmlElementStorage.java:418)
+	at com.intellij.openapi.components.impl.stores.CompoundSaveSession.save(CompoundSaveSession.java:52)
+	at com.intellij.openapi.components.impl.stores.StateStorageManagerImpl$MySaveSession.save(StateStorageManagerImpl.java:511)
+	at com.intellij.openapi.components.impl.stores.ComponentStoreImpl$SaveSessionImpl.save(ComponentStoreImpl.java:436)
+	at com.intellij.openapi.components.impl.stores.ProjectStoreImpl$ProjectSaveSession.save(ProjectStoreImpl.java:508)
+	at com.intellij.openapi.components.impl.stores.StoreUtil.doSave(StoreUtil.java:31)
+	at com.intellij.openapi.project.impl.ProjectImpl.save(ProjectImpl.java:323)
+	at com.intellij.ide.SaveAndSyncHandler.saveProjectsAndDocuments(SaveAndSyncHandler.java:134)
+	at com.intellij.ide.SaveAndSyncHandler$3.onFrameDeactivated(SaveAndSyncHandler.java:91)
+	at com.intellij.ide.FrameStateManagerImpl.fireDeactivationEvent(FrameStateManagerImpl.java:100)
+	at com.intellij.ide.FrameStateManagerImpl.access$500(FrameStateManagerImpl.java:31)
+	at com.intellij.ide.FrameStateManagerImpl$2$1.run(FrameStateManagerImpl.java:72)
+	at com.intellij.util.Alarm$Request$1.run(Alarm.java:230)
+	at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.run(LaterInvocator.java:333)
+	- locked <7c9051c70> (a java.lang.Object)
+	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
+	at java.awt.EventQueue.dispatchEvent(EventQueue.java:633)
+	at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:686)
+	at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:534)
+	at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:416)
+	at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:374)
+	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296)
+	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211)
+	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188)
+	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
+
+   Locked ownable synchronizers:
+	- None
+
+"Periodic tasks thread" daemon prio=5 tid=10319c800 nid=0x108bb0000 runnable [108baf000]
+   java.lang.Thread.State: TIMED_WAITING (parking)
+	at sun.misc.Unsafe.park(Native Method)
+	- parking to wait for  <7c8d17468> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
+	at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198)
+	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2025)
+	at java.util.concurrent.DelayQueue.take(DelayQueue.java:164)
+	at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:609)
+	at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:602)
+	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
+	at java.lang.Thread.run(Thread.java:680)
+
+   Locked ownable synchronizers:
+	- None
+
+"AWT-Shutdown" prio=5 tid=103378000 nid=0x110f48000 in Object.wait() [110f47000]
+   java.lang.Thread.State: WAITING (on object monitor)
+	at java.lang.Object.wait(Native Method)
+	- waiting on <7c8d175a0> (a java.lang.Object)
+	at java.lang.Object.wait(Object.java:485)
+	at sun.awt.AWTAutoShutdown.run(AWTAutoShutdown.java:265)
+	- locked <7c8d175a0> (a java.lang.Object)
+	at java.lang.Thread.run(Thread.java:680)
+
+   Locked ownable synchronizers:
+	- None
+
+"Lock thread" prio=1 tid=10324b800 nid=0x1118ee000 runnable [1118ed000]
+   java.lang.Thread.State: RUNNABLE
+	at java.net.PlainSocketImpl.socketAccept(Native Method)
+	at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:390)
+	- locked <7c8d17658> (a java.net.SocksSocketImpl)
+	at java.net.ServerSocket.implAccept(ServerSocket.java:453)
+	at java.net.ServerSocket.accept(ServerSocket.java:421)
+	at com.intellij.idea.SocketLock$MyRunnable.run(SocketLock.java:216)
+	at java.lang.Thread.run(Thread.java:680)
+
+   Locked ownable synchronizers:
+	- None
+
+"Java2D Disposer" daemon prio=10 tid=103245800 nid=0x1116e8000 in Object.wait() [1116e7000]
+   java.lang.Thread.State: WAITING (on object monitor)
+	at java.lang.Object.wait(Native Method)
+	- waiting on <7c8d17840> (a java.lang.ref.ReferenceQueue$Lock)
+	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118)
+	- locked <7c8d17840> (a java.lang.ref.ReferenceQueue$Lock)
+	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134)
+	at sun.java2d.Disposer.run(Disposer.java:127)
+	at java.lang.Thread.run(Thread.java:680)
+
+   Locked ownable synchronizers:
+	- None
+
+"AWT-AppKit" daemon prio=5 tid=103377000 nid=0x7fff70d5fca0 runnable [00000000]
+   java.lang.Thread.State: RUNNABLE
+
+   Locked ownable synchronizers:
+	- None
+
+"DestroyJavaVM" prio=5 tid=103001800 nid=0x10255b000 waiting on condition [00000000]
+   java.lang.Thread.State: RUNNABLE
+
+   Locked ownable synchronizers:
+	- None
+
+"timed reference disposer" daemon prio=2 tid=103157800 nid=0x10850d000 waiting on condition [10850c000]
+   java.lang.Thread.State: TIMED_WAITING (parking)
+	at sun.misc.Unsafe.park(Native Method)
+	- parking to wait for  <7c8d17a18> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
+	at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198)
+	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2025)
+	at java.util.concurrent.DelayQueue.take(DelayQueue.java:164)
+	at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:609)
+	at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:602)
+	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
+	at java.lang.Thread.run(Thread.java:680)
+
+   Locked ownable synchronizers:
+	- None
+
+"Low Memory Detector" daemon prio=5 tid=103060000 nid=0x1081b4000 runnable [00000000]
+   java.lang.Thread.State: RUNNABLE
+
+   Locked ownable synchronizers:
+	- None
+
+"CompilerThread1" daemon prio=9 tid=10305f800 nid=0x1080b1000 waiting on condition [00000000]
+   java.lang.Thread.State: RUNNABLE
+
+   Locked ownable synchronizers:
+	- None
+
+"CompilerThread0" daemon prio=9 tid=10305e800 nid=0x107fae000 waiting on condition [00000000]
+   java.lang.Thread.State: RUNNABLE
+
+   Locked ownable synchronizers:
+	- None
+
+"Signal Dispatcher" daemon prio=9 tid=10305e000 nid=0x107eab000 runnable [00000000]
+   java.lang.Thread.State: RUNNABLE
+
+   Locked ownable synchronizers:
+	- None
+
+"Finalizer" daemon prio=8 tid=103044000 nid=0x107da8000 in Object.wait() [107da7000]
+   java.lang.Thread.State: WAITING (on object monitor)
+	at java.lang.Object.wait(Native Method)
+	- waiting on <7c8d17d40> (a java.lang.ref.ReferenceQueue$Lock)
+	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118)
+	- locked <7c8d17d40> (a java.lang.ref.ReferenceQueue$Lock)
+	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134)
+	at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)
+
+   Locked ownable synchronizers:
+	- None
+
+"Reference Handler" daemon prio=10 tid=103043800 nid=0x107ca5000 in Object.wait() [107ca4000]
+   java.lang.Thread.State: WAITING (on object monitor)
+	at java.lang.Object.wait(Native Method)
+	- waiting on <7c8d17170> (a java.lang.ref.Reference$Lock)
+	at java.lang.Object.wait(Object.java:485)
+	at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)
+	- locked <7c8d17170> (a java.lang.ref.Reference$Lock)
+
+   Locked ownable synchronizers:
+	- None
+
+"VM Thread" prio=9 tid=103041000 nid=0x107ba2000 runnable 
+
+"VM Periodic Task Thread" prio=10 tid=10306a000 nid=0x1082b7000 waiting on condition 
+
+"Exception Catcher Thread" prio=10 tid=103002000 nid=0x102c98000 runnable 
+JNI global references: 6703
+
+
+Found one Java-level deadlock:
+=============================
+"JobScheduler pool 0/1":
+  waiting to lock monitor 100d58420 (object 7c9734008, a com.intellij.util.io.PersistentBTreeEnumerator),
+  which is held by "ApplicationImpl pooled thread 0 [ReadAccessToken]"
+"ApplicationImpl pooled thread 0 [ReadAccessToken]":
+  waiting to lock monitor 1008a8768 (object 7c9733fa0, a com.intellij.util.indexing.ValueContainerMap),
+  which is held by "JobScheduler pool 0/1"
+
+Java stack information for the threads listed above:
+===================================================
+"JobScheduler pool 0/1":
+	at com.intellij.util.io.PersistentHashMap.get(PersistentHashMap.java:339)
+	- waiting to lock <7c9734008> (a com.intellij.util.io.PersistentBTreeEnumerator)
+	at com.intellij.util.indexing.MapIndexStorage$1$1.compute(MapIndexStorage.java:77)
+	at com.intellij.util.indexing.MapIndexStorage$1$1.compute(MapIndexStorage.java:67)
+	at com.intellij.util.indexing.ChangeTrackingValueContainer.getMergedData(ChangeTrackingValueContainer.java:134)
+	- locked <7c9733fa0> (a com.intellij.util.indexing.ValueContainerMap)
+	at com.intellij.util.indexing.ChangeTrackingValueContainer.getValueIterator(ChangeTrackingValueContainer.java:98)
+	at com.intellij.util.indexing.FileBasedIndex.processValuesImpl(FileBasedIndex.java:900)
+	at com.intellij.util.indexing.FileBasedIndex.getValues(FileBasedIndex.java:822)
+	at com.intellij.javascript.flex.css.FlexCssElementDescriptorProvider.getPropertyDescriptor(FlexCssElementDescriptorProvider.java:180)
+	at com.intellij.psi.css.impl.util.table.CssDescriptorsUtil.getPropertyDescriptor(CssDescriptorsUtil.java:50)
+	at com.intellij.psi.css.impl.util.table.CssDescriptorsUtil.getCannonicalPropertyName(CssDescriptorsUtil.java:98)
+	at com.intellij.psi.css.impl.util.table.CssDescriptorsUtil.getCannonicalPropertyName(CssDescriptorsUtil.java:104)
+	at com.intellij.psi.css.browse.CssColorAnnotator.annotate(CssColorAnnotator.java:105)
+	at com.intellij.codeInsight.daemon.impl.DefaultHighlightVisitor.runAnnotators(DefaultHighlightVisitor.java:157)
+	at com.intellij.codeInsight.daemon.impl.DefaultHighlightVisitor.visit(DefaultHighlightVisitor.java:100)
+	at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass$8.run(GeneralHighlightingPass.java:593)
+	at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.analyzeByVisitors(GeneralHighlightingPass.java:771)
+	at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.access$3600(GeneralHighlightingPass.java:80)
+	at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass$10.run(GeneralHighlightingPass.java:777)
+	at com.intellij.codeInsight.daemon.impl.DefaultHighlightVisitor.analyze(DefaultHighlightVisitor.java:84)
+	at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.analyzeByVisitors(GeneralHighlightingPass.java:774)
+	at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.access$3600(GeneralHighlightingPass.java:80)
+	at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass$10.run(GeneralHighlightingPass.java:777)
+	at com.intellij.codeInsight.daemon.impl.DefaultHighlightVisitor.analyze(DefaultHighlightVisitor.java:84)
+	at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.analyzeByVisitors(GeneralHighlightingPass.java:774)
+	at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.collectHighlights(GeneralHighlightingPass.java:639)
+	at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.collectInformationWithProgress(GeneralHighlightingPass.java:204)
+	at com.intellij.codeInsight.daemon.impl.ProgressableTextEditorHighlightingPass.doCollectInformation(ProgressableTextEditorHighlightingPass.java:58)
+	at com.intellij.codeHighlighting.TextEditorHighlightingPass.collectInformation(TextEditorHighlightingPass.java:61)
+	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass$1$1.run(PassExecutorService.java:350)
+	at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1034)
+	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass$1.run(PassExecutorService.java:342)
+	at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:206)
+	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.doRun(PassExecutorService.java:340)
+	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.run(PassExecutorService.java:316)
+	at com.intellij.concurrency.JobLauncher$3.call(JobUtil.java:134)
+	at com.intellij.concurrency.JobLauncher$3.call(JobUtil.java:131)
+	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
+	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
+	at com.intellij.concurrency.PrioritizedFutureTask.access$101(PrioritizedFutureTask.java:31)
+	at com.intellij.concurrency.PrioritizedFutureTask$1.run(PrioritizedFutureTask.java:70)
+	at com.intellij.concurrency.PrioritizedFutureTask.run(PrioritizedFutureTask.java:113)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
+	at java.lang.Thread.run(Thread.java:680)
+"ApplicationImpl pooled thread 0 [ReadAccessToken]":
+	at com.intellij.util.indexing.ChangeTrackingValueContainer.getMergedData(ChangeTrackingValueContainer.java:127)
+	- waiting to lock <7c9733fa0> (a com.intellij.util.indexing.ValueContainerMap)
+	at com.intellij.util.indexing.ChangeTrackingValueContainer.getValueIterator(ChangeTrackingValueContainer.java:98)
+	at com.intellij.util.indexing.FileBasedIndex.processValuesImpl(FileBasedIndex.java:887)
+	at com.intellij.util.indexing.FileBasedIndex.processValues(FileBasedIndex.java:860)
+	at com.intellij.flex.uiDesigner.libraries.LibraryStyleInfoCollector$1.process(LibraryStyleInfoCollector.java:42)
+	at com.intellij.flex.uiDesigner.libraries.LibraryStyleInfoCollector$1.process(LibraryStyleInfoCollector.java:39)
+	at com.intellij.util.indexing.MemoryIndexStorage$1.process(MemoryIndexStorage.java:118)
+	at com.intellij.util.io.PersistentEnumeratorBase.iterateData(PersistentEnumeratorBase.java:373)
+	- locked <7c8fd4558> (a com.intellij.util.io.PagedFileStorage$StorageLock)
+	at com.intellij.util.io.PersistentHashMap.processKeys(PersistentHashMap.java:318)
+	- locked <7c9734008> (a com.intellij.util.io.PersistentBTreeEnumerator)
+	at com.intellij.util.indexing.MapIndexStorage.processKeys(MapIndexStorage.java:173)
+	at com.intellij.util.indexing.MemoryIndexStorage.processKeys(MemoryIndexStorage.java:126)
+	at com.intellij.util.indexing.MapReduceIndex.processAllKeys(MapReduceIndex.java:164)
+	at com.intellij.util.indexing.FileBasedIndex.processAllKeys(FileBasedIndex.java:688)
+	at com.intellij.flex.uiDesigner.libraries.LibraryStyleInfoCollector.collectInherited(LibraryStyleInfoCollector.java:39)
+	at com.intellij.flex.uiDesigner.libraries.LibraryStyleInfoCollector.consume(LibraryStyleInfoCollector.java:73)
+	at com.intellij.flex.uiDesigner.libraries.LibraryStyleInfoCollector.consume(LibraryStyleInfoCollector.java:19)
+	at com.intellij.flex.uiDesigner.libraries.LibraryManager.createOriginalLibrary(LibraryManager.java:268)
+	at com.intellij.flex.uiDesigner.libraries.LibraryCollector.addLibrary(LibraryCollector.java:243)
+	at com.intellij.flex.uiDesigner.libraries.LibraryCollector.collectFromSdkOrderEntry(LibraryCollector.java:223)
+	at com.intellij.flex.uiDesigner.libraries.LibraryCollector.collect(LibraryCollector.java:138)
+	at com.intellij.flex.uiDesigner.libraries.LibraryManager.initLibrarySets(LibraryManager.java:95)
+	at com.intellij.flex.uiDesigner.DesignerApplicationLauncher$7.call(DesignerApplicationLauncher.java:376)
+	at com.intellij.flex.uiDesigner.DesignerApplicationLauncher$7.call(DesignerApplicationLauncher.java:364)
+	at com.intellij.openapi.application.impl.ApplicationImpl$7.call(ApplicationImpl.java:441)
+	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
+	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
+	at java.lang.Thread.run(Thread.java:680)
+	at com.intellij.openapi.application.impl.ApplicationImpl$1$1.run(ApplicationImpl.java:137)
+
+Found 1 deadlock.
+
diff --git a/java/java-tests/testData/unscramble/threaddump.txt b/java/java-tests/testData/unscramble/threaddump.txt
new file mode 100644
index 0000000..38b2f6c
--- /dev/null
+++ b/java/java-tests/testData/unscramble/threaddump.txt
@@ -0,0 +1,485 @@
+2010-08-06 14:12:30
+Full thread dump Java HotSpot(TM) Client VM (14.3-b01 mixed mode):
+
+"Alarm pool(own)" prio=4 tid=0x366df000 nid=0x118 waiting on condition [0x357ef000]
+   java.lang.Thread.State: WAITING (parking)
+        at sun.misc.Unsafe.park(Native Method)
+        - parking to wait for  <0x0f307a88> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
+        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
+        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1925)
+        at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:358)
+        at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
+        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
+        at java.lang.Thread.run(Thread.java:619)
+
+"Alarm pool(own)" prio=4 tid=0x36659800 nid=0xd90 waiting on condition [0x3597f000]
+   java.lang.Thread.State: WAITING (parking)
+        at sun.misc.Unsafe.park(Native Method)
+        - parking to wait for  <0x0eacca98> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
+        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
+        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1925)
+        at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:358)
+        at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
+        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
+        at java.lang.Thread.run(Thread.java:619)
+
+"Alarm pool(own)" prio=4 tid=0x36493400 nid=0x968 waiting on condition [0x36eff000]
+   java.lang.Thread.State: WAITING (parking)
+        at sun.misc.Unsafe.park(Native Method)
+        - parking to wait for  <0x05a52698> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
+        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
+        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1925)
+        at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:358)
+        at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
+        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
+        at java.lang.Thread.run(Thread.java:619)
+
+"Alarm pool(own)" prio=4 tid=0x361b2400 nid=0x5cc waiting on condition [0x35cbf000]
+   java.lang.Thread.State: WAITING (parking)
+        at sun.misc.Unsafe.park(Native Method)
+        - parking to wait for  <0x05a52ab0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
+        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
+        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1925)
+        at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:358)
+        at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
+        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
+        at java.lang.Thread.run(Thread.java:619)
+
+"SimpleTimer" daemon prio=2 tid=0x34bf6400 nid=0x928 in Object.wait() [0x3579f000]
+   java.lang.Thread.State: WAITING (on object monitor)
+        at java.lang.Object.wait(Native Method)
+        at java.lang.Object.wait(Object.java:485)
+        at java.util.TimerThread.mainLoop(Timer.java:483)
+        - locked <0x07c96db0> (a java.util.TaskQueue)
+        at java.util.TimerThread.run(Timer.java:462)
+
+"Swing-Shell" daemon prio=6 tid=0x36377400 nid=0xbe8 waiting on condition [0x384cf000]
+   java.lang.Thread.State: WAITING (parking)
+        at sun.misc.Unsafe.park(Native Method)
+        - parking to wait for  <0x06fda8c0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
+        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
+        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1925)
+        at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:358)
+        at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
+        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
+        at sun.awt.shell.Win32ShellFolderManager2$ComInvoker$3.run(Win32ShellFolderManager2.java:458)
+        at java.lang.Thread.run(Thread.java:619)
+
+"JobScheduler pool 0/1" prio=6 tid=0x34abe000 nid=0xb2c waiting on condition [0x3847f000]
+   java.lang.Thread.State: WAITING (parking)
+        at sun.misc.Unsafe.park(Native Method)
+        - parking to wait for  <0x06f32b38> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
+        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
+        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1925)
+        at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:220)
+        at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
+        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
+        at java.lang.Thread.run(Thread.java:619)
+
+"ApplicationImpl pooled thread" prio=4 tid=0x34b3ac00 nid=0x8a8 waiting on condition [0x3842f000]
+   java.lang.Thread.State: TIMED_WAITING (parking)
+        at sun.misc.Unsafe.park(Native Method)
+        - parking to wait for  <0x05337e08> (a java.util.concurrent.SynchronousQueue$TransferStack)
+        at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198)
+        at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:424)
+        at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:323)
+        at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:874)
+        at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:945)
+        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
+        at java.lang.Thread.run(Thread.java:619)
+        at com.intellij.openapi.application.impl.ApplicationImpl$1$1.run(ApplicationImpl.java:125)
+
+"ApplicationImpl pooled thread" prio=4 tid=0x36481000 nid=0x8a0 waiting on condition [0x383df000]
+   java.lang.Thread.State: TIMED_WAITING (parking)
+        at sun.misc.Unsafe.park(Native Method)
+        - parking to wait for  <0x05337e08> (a java.util.concurrent.SynchronousQueue$TransferStack)
+        at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198)
+        at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:424)
+        at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:323)
+        at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:874)
+        at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:945)
+        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
+        at java.lang.Thread.run(Thread.java:619)
+        at com.intellij.openapi.application.impl.ApplicationImpl$1$1.run(ApplicationImpl.java:125)
+
+"Change List Updater" prio=2 tid=0x34447c00 nid=0x900 waiting on condition [0x36fff000]
+   java.lang.Thread.State: WAITING (parking)
+        at sun.misc.Unsafe.park(Native Method)
+        - parking to wait for  <0x06381570> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
+        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
+        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1925)
+        at java.util.concurrent.DelayQueue.take(DelayQueue.java:160)
+        at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:583)
+        at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:576)
+        at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
+        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
+        at java.lang.Thread.run(Thread.java:619)
+
+"Timer-0" daemon prio=6 tid=0x34be7400 nid=0x8fc in Object.wait() [0x36faf000]
+   java.lang.Thread.State: WAITING (on object monitor)
+        at java.lang.Object.wait(Native Method)
+        - waiting on <0x06eb0558> (a java.util.TaskQueue)
+        at java.lang.Object.wait(Object.java:485)
+        at java.util.TimerThread.mainLoop(Timer.java:483)
+        - locked <0x06eb0558> (a java.util.TaskQueue)
+        at java.util.TimerThread.run(Timer.java:462)
+
+"ApplicationImpl pooled thread" prio=4 tid=0x361b5c00 nid=0x878 waiting on condition [0x35c6f000]
+   java.lang.Thread.State: TIMED_WAITING (parking)
+        at sun.misc.Unsafe.park(Native Method)
+        - parking to wait for  <0x05337e08> (a java.util.concurrent.SynchronousQueue$TransferStack)
+        at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198)
+        at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:424)
+        at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:323)
+        at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:874)
+        at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:945)
+        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
+        at java.lang.Thread.run(Thread.java:619)
+        at com.intellij.openapi.application.impl.ApplicationImpl$1$1.run(ApplicationImpl.java:125)
+
+"Alarm pool(own)" prio=4 tid=0x3600cc00 nid=0x89c waiting on condition [0x36eaf000]
+   java.lang.Thread.State: WAITING (parking)
+        at sun.misc.Unsafe.park(Native Method)
+        - parking to wait for  <0x05a52dd8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
+        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
+        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1925)
+        at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:358)
+        at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
+        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
+        at java.lang.Thread.run(Thread.java:619)
+
+"ApplicationImpl pooled thread" prio=4 tid=0x34e45000 nid=0x8ac waiting on condition [0x36e5f000]
+   java.lang.Thread.State: TIMED_WAITING (parking)
+        at sun.misc.Unsafe.park(Native Method)
+        - parking to wait for  <0x05337e08> (a java.util.concurrent.SynchronousQueue$TransferStack)
+        at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198)
+        at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:424)
+        at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:323)
+        at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:874)
+        at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:945)
+        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
+        at java.lang.Thread.run(Thread.java:619)
+        at com.intellij.openapi.application.impl.ApplicationImpl$1$1.run(ApplicationImpl.java:125)
+
+"Progress Cancel Checker" prio=10 tid=0x34e55400 nid=0xa1c waiting on condition [0x35e2f000]
+   java.lang.Thread.State: TIMED_WAITING (sleeping)
+        at java.lang.Thread.sleep(Native Method)
+        at com.intellij.openapi.progress.impl.ProgressManagerImpl$1.run(ProgressManagerImpl.java:62)
+
+"ApplicationImpl pooled thread" prio=4 tid=0x34ce1400 nid=0x9dc waiting on condition [0x35ddf000]
+   java.lang.Thread.State: TIMED_WAITING (parking)
+        at sun.misc.Unsafe.park(Native Method)
+        - parking to wait for  <0x05337e08> (a java.util.concurrent.SynchronousQueue$TransferStack)
+        at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198)
+        at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:424)
+        at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:323)
+        at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:874)
+        at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:945)
+        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
+        at java.lang.Thread.run(Thread.java:619)
+        at com.intellij.openapi.application.impl.ApplicationImpl$1$1.run(ApplicationImpl.java:125)
+
+"Alarm pool(shared)" prio=4 tid=0x34e52800 nid=0x8e8 waiting on condition [0x35d0f000]
+   java.lang.Thread.State: WAITING (parking)
+        at sun.misc.Unsafe.park(Native Method)
+        - parking to wait for  <0x05332d60> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
+        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
+        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1925)
+        at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:358)
+        at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
+        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
+        at java.lang.Thread.run(Thread.java:619)
+
+"TimerQueue" daemon prio=6 tid=0x34e3f800 nid=0x948 in Object.wait() [0x3574f000]
+   java.lang.Thread.State: TIMED_WAITING (on object monitor)
+        at java.lang.Object.wait(Native Method)
+        at javax.swing.TimerQueue.run(TimerQueue.java:232)
+        - locked <0x05e08120> (a javax.swing.TimerQueue)
+        at java.lang.Thread.run(Thread.java:619)
+
+"Exe4JStartupThread" daemon prio=6 tid=0x34ab9800 nid=0x4f0 waiting on condition [0x356ef000]
+   java.lang.Thread.State: TIMED_WAITING (sleeping)
+        at java.lang.Thread.sleep(Native Method)
+        at com.exe4j.Controller$StartupThread.run(Unknown Source)
+
+"FS Synchronizer" prio=6 tid=0x34e48400 nid=0xf64 waiting for monitor entry [0x3569f000]
+   java.lang.Thread.State: BLOCKED (on object monitor)
+        at com.intellij.openapi.vfs.impl.local.FileWatcher.getDirtyPaths(FileWatcher.java:114)
+        - waiting to lock <0x0595ae40> (a java.lang.Object)
+        at com.intellij.openapi.vfs.impl.local.LocalFileSystemImpl.b(LocalFileSystemImpl.java:189)
+        at com.intellij.openapi.vfs.impl.local.LocalFileSystemImpl.markSuspicousFilesDirty(LocalFileSystemImpl.java:230)
+        at com.intellij.openapi.vfs.newvfs.RefreshSessionImpl.scan(RefreshSessionImpl.java:86)
+        at com.intellij.openapi.vfs.newvfs.RefreshQueueImpl$1.run(RefreshQueueImpl.java:74)
+        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
+        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
+        at java.util.concurrent.FutureTask.run(FutureTask.java:138)
+        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
+        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
+        at java.lang.Thread.run(Thread.java:619)
+
+"XML-RPC Weblistener" prio=4 tid=0x34c0e400 nid=0x8dc runnable [0x35fdf000]
+   java.lang.Thread.State: RUNNABLE
+        at java.net.PlainSocketImpl.socketAccept(Native Method)
+        at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:390)
+        - locked <0x05a73d90> (a java.net.SocksSocketImpl)
+        at java.net.ServerSocket.implAccept(ServerSocket.java:453)
+        at java.net.ServerSocket.accept(ServerSocket.java:421)
+        at org.apache.xmlrpc.WebServer.run(WebServer.java:453)
+        at java.lang.Thread.run(Thread.java:619)
+
+"Performance watcher" prio=2 tid=0x34d0c400 nid=0x8cc waiting on condition [0x35f8f000]
+   java.lang.Thread.State: TIMED_WAITING (parking)
+        at sun.misc.Unsafe.park(Native Method)
+        - parking to wait for  <0x05a73eb8> (a java.util.concurrent.Semaphore$NonfairSync)
+        at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198)
+        at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedNanos(AbstractQueuedSynchronizer.java:947)
+        at java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireSharedNanos(AbstractQueuedSynchronizer.java:1239)
+        at java.util.concurrent.Semaphore.tryAcquire(Semaphore.java:383)
+        at com.intellij.diagnostic.PerformanceWatcher.c(PerformanceWatcher.java:158)
+        at com.intellij.diagnostic.PerformanceWatcher.access$100(PerformanceWatcher.java:42)
+        at com.intellij.diagnostic.PerformanceWatcher$2.run(PerformanceWatcher.java:116)
+        at java.lang.Thread.run(Thread.java:619)
+
+"ApplicationImpl pooled thread" prio=4 tid=0x34434400 nid=0x898 waiting on condition [0x35f3f000]
+   java.lang.Thread.State: TIMED_WAITING (parking)
+        at sun.misc.Unsafe.park(Native Method)
+        - parking to wait for  <0x05337e08> (a java.util.concurrent.SynchronousQueue$TransferStack)
+        at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198)
+        at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:424)
+        at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:323)
+        at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:874)
+        at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:945)
+        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
+        at java.lang.Thread.run(Thread.java:619)
+        at com.intellij.openapi.application.impl.ApplicationImpl$1$1.run(ApplicationImpl.java:125)
+
+"StoreRefreshStatusThread" daemon prio=2 tid=0x34c1e400 nid=0x1dc waiting for monitor entry [0x353df000]
+   java.lang.Thread.State: BLOCKED (on object monitor)
+        at com.intellij.openapi.vfs.impl.local.FileWatcher.getDirtyPaths(FileWatcher.java:114)
+        - waiting to lock <0x0595ae40> (a java.lang.Object)
+        at com.intellij.openapi.vfs.impl.local.LocalFileSystemImpl.b(LocalFileSystemImpl.java:189)
+        at com.intellij.openapi.vfs.impl.local.LocalFileSystemImpl.access$200(LocalFileSystemImpl.java:43)
+        at com.intellij.openapi.vfs.impl.local.LocalFileSystemImpl$StoreRefreshStatusThread.run(LocalFileSystemImpl.java:297)
+
+"WatchForChangesThread" prio=6 tid=0x34a84800 nid=0x1c8 waiting for monitor entry [0x352bf000]
+   java.lang.Thread.State: BLOCKED (on object monitor)
+        at com.intellij.openapi.vfs.impl.local.FileWatcher.a(FileWatcher.java:185)
+        - waiting to lock <0x0595ae40> (a java.lang.Object)
+        at com.intellij.openapi.vfs.impl.local.FileWatcher.access$700(FileWatcher.java:49)
+        at com.intellij.openapi.vfs.impl.local.FileWatcher$WatchForChangesThread.run(FileWatcher.java:271)
+
+"AWT-EventQueue-1 9.0.3#IU-95.474, eap:false" prio=6 tid=0x34d52000 nid=0xc1c runnable [0x3547e000]
+   java.lang.Thread.State: RUNNABLE
+        at java.io.FileOutputStream.writeBytes(Native Method)
+        at java.io.FileOutputStream.write(FileOutputStream.java:260)
+        at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
+        at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)
+        - locked <0x059661a8> (a java.io.BufferedOutputStream)
+        at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:278)
+        at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:122)
+        - locked <0x059661d0> (a java.io.OutputStreamWriter)
+        at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:212)
+        at java.io.BufferedWriter.flush(BufferedWriter.java:236)
+        - locked <0x059661d0> (a java.io.OutputStreamWriter)
+        at com.intellij.openapi.vfs.impl.local.FileWatcher.b(FileWatcher.java:344)
+        at com.intellij.openapi.vfs.impl.local.FileWatcher.setWatchRoots(FileWatcher.java:159)
+        - locked <0x0595ae40> (a java.lang.Object)
+        at com.intellij.openapi.vfs.impl.local.LocalFileSystemImpl$2.run(LocalFileSystemImpl.java:272)
+        at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:697)
+        at com.intellij.openapi.vfs.impl.local.LocalFileSystemImpl.c(LocalFileSystemImpl.java:255)
+        at com.intellij.openapi.vfs.impl.local.LocalFileSystemImpl.removeWatchedRoots(LocalFileSystemImpl.java:402)
+        at com.intellij.openapi.roots.impl.ProjectRootManagerImpl.d(ProjectRootManagerImpl.java:669)
+        at com.intellij.openapi.roots.impl.ProjectRootManagerImpl.c(ProjectRootManagerImpl.java:542)
+        at com.intellij.openapi.roots.impl.ProjectRootManagerImpl.access$100(ProjectRootManagerImpl.java:70)
+        at com.intellij.openapi.roots.impl.ProjectRootManagerImpl$BatchSession.fireChange(ProjectRootManagerImpl.java:135)
+        at com.intellij.openapi.roots.impl.ProjectRootManagerImpl$BatchSession.rootsChanged(ProjectRootManagerImpl.java:148)
+        at com.intellij.openapi.roots.impl.ProjectRootManagerImpl.makeRootsChange(ProjectRootManagerImpl.java:469)
+        at com.intellij.openapi.module.impl.ModuleManagerImpl.a(ModuleManagerImpl.java:894)
+        at com.intellij.openapi.module.impl.ModuleManagerImpl.access$2000(ModuleManagerImpl.java:73)
+        at com.intellij.openapi.module.impl.ModuleManagerImpl$ModuleModelImpl.commitWithRunnable(ModuleManagerImpl.java:800)
+        at com.intellij.openapi.module.impl.ModuleManagerImpl.commitModelWithRunnable(ModuleManagerImpl.java:567)
+        at com.intellij.openapi.roots.impl.ModuleRootManagerImpl.multiCommit(ModuleRootManagerImpl.java:304)
+        at com.intellij.openapi.roots.impl.ProjectRootManagerImpl.multiCommit(ProjectRootManagerImpl.java:242)
+        at com.intellij.openapi.module.impl.ModuleManagerImpl$ModuleModelImpl.commit(ModuleManagerImpl.java:796)
+        at com.intellij.ide.util.projectWizard.ModuleBuilder.createAndCommitIfNeeded(ModuleBuilder.java:152)
+        at com.intellij.ide.util.projectWizard.ModuleBuilder$2.compute(ModuleBuilder.java:202)
+        at com.intellij.ide.util.projectWizard.ModuleBuilder$2.compute(ModuleBuilder.java:199)
+        at com.intellij.openapi.application.impl.ApplicationImpl$11.run(ApplicationImpl.java:774)
+        at com.intellij.openapi.application.impl.ApplicationImpl.runWriteAction(ApplicationImpl.java:754)
+        at com.intellij.openapi.application.impl.ApplicationImpl.runWriteAction(ApplicationImpl.java:772)
+        at com.intellij.ide.util.projectWizard.ModuleBuilder.commitModule(ModuleBuilder.java:199)
+        at com.intellij.ide.util.projectWizard.ModuleBuilder.commit(ModuleBuilder.java:186)
+        at com.intellij.ide.impl.NewProjectUtil.createNewProject(NewProjectUtil.java:135)
+        at com.intellij.ide.actions.NewProjectAction.actionPerformed(NewProjectAction.java:29)
+        at com.intellij.openapi.wm.impl.welcomeScreen.WelcomeScreen$ActionGroupDescriptor$3.onPress(WelcomeScreen.java:215)
+        at com.intellij.openapi.wm.impl.welcomeScreen.WelcomeScreen$ButtonWithExtension.onPress(WelcomeScreen.java:829)
+        at com.intellij.openapi.wm.impl.welcomeScreen.WelcomeScreen$ActionGroupDescriptor$2.mouseClicked(WelcomeScreen.java:151)
+        at java.awt.Component.processMouseEvent(Component.java:6266)
+        at javax.swing.JComponent.processMouseEvent(JComponent.java:3255)
+        at java.awt.Component.processEvent(Component.java:6028)
+        at java.awt.Container.processEvent(Container.java:2041)
+        at java.awt.Component.dispatchEventImpl(Component.java:4630)
+        at java.awt.Container.dispatchEventImpl(Container.java:2099)
+        at java.awt.Component.dispatchEvent(Component.java:4460)
+        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
+        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4247)
+        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
+        at java.awt.Container.dispatchEventImpl(Container.java:2085)
+        at java.awt.Window.dispatchEventImpl(Window.java:2475)
+        at java.awt.Component.dispatchEvent(Component.java:4460)
+        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
+        at com.intellij.ide.IdeEventQueue.f(IdeEventQueue.java:627)
+        at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:504)
+        at com.intellij.ide.IdeEventQueue.b(IdeEventQueue.java:405)
+        at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:369)
+        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
+        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
+        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
+        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
+        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
+        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
+
+"timed reference disposer" prio=2 tid=0x34447400 nid=0xe18 waiting on condition [0x3538f000]
+   java.lang.Thread.State: TIMED_WAITING (parking)
+        at sun.misc.Unsafe.park(Native Method)
+        - parking to wait for  <0x05605ef0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
+        at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198)
+        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1963)
+        at java.util.concurrent.DelayQueue.take(DelayQueue.java:164)
+        at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:583)
+        at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:576)
+        at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
+        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
+        at java.lang.Thread.run(Thread.java:619)
+
+"Periodic tasks thread" prio=6 tid=0x34438400 nid=0x95c waiting on condition [0x349cf000]
+   java.lang.Thread.State: TIMED_WAITING (parking)
+        at sun.misc.Unsafe.park(Native Method)
+        - parking to wait for  <0x05327fc0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
+        at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198)
+        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1963)
+        at java.util.concurrent.DelayQueue.take(DelayQueue.java:164)
+        at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:583)
+        at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:576)
+        at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
+        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
+        at java.lang.Thread.run(Thread.java:619)
+
+"AWT-Shutdown" prio=6 tid=0x343e0c00 nid=0xce8 in Object.wait() [0x3526f000]
+   java.lang.Thread.State: WAITING (on object monitor)
+        at java.lang.Object.wait(Native Method)
+        at java.lang.Object.wait(Object.java:485)
+        at sun.awt.AWTAutoShutdown.run(AWTAutoShutdown.java:259)
+        - locked <0x052c79c0> (a java.lang.Object)
+        at java.lang.Thread.run(Thread.java:619)
+
+"SocketListenerThread" prio=2 tid=0x348df400 nid=0xcdc runnable [0x3521f000]
+   java.lang.Thread.State: RUNNABLE
+        at java.net.PlainDatagramSocketImpl.receive0(Native Method)
+        - locked <0x052ca190> (a java.net.PlainDatagramSocketImpl)
+        at java.net.PlainDatagramSocketImpl.receive(PlainDatagramSocketImpl.java:136)
+        - locked <0x052ca190> (a java.net.PlainDatagramSocketImpl)
+        at java.net.DatagramSocket.receive(DatagramSocket.java:712)
+        - locked <0x052ca1d0> (a java.net.DatagramPacket)
+        - locked <0x052ca1f0> (a java.net.MulticastSocket)
+        at com.intellij.a.e.a.e.a(e.java:57)
+        at com.intellij.a.e.a.f.run(f.java:25)
+
+"SocketListenerThread" prio=2 tid=0x34783800 nid=0xcd8 runnable [0x351cf000]
+   java.lang.Thread.State: RUNNABLE
+        at java.net.PlainDatagramSocketImpl.receive0(Native Method)
+        - locked <0x052cc9e0> (a java.net.PlainDatagramSocketImpl)
+        at java.net.PlainDatagramSocketImpl.receive(PlainDatagramSocketImpl.java:136)
+        - locked <0x052cc9e0> (a java.net.PlainDatagramSocketImpl)
+        at java.net.DatagramSocket.receive(DatagramSocket.java:712)
+        - locked <0x052cca20> (a java.net.DatagramPacket)
+        - locked <0x052cca40> (a java.net.DatagramSocket)
+        at com.intellij.a.e.a.e.a(e.java:57)
+        at com.intellij.a.e.a.f.run(f.java:25)
+
+"MessageDeliveryThread" prio=6 tid=0x34793400 nid=0xcd4 in Object.wait() [0x3517f000]
+   java.lang.Thread.State: WAITING (on object monitor)
+        at java.lang.Object.wait(Native Method)
+        - waiting on <0x052ccaf0> (a java.lang.Object)
+        at java.lang.Object.wait(Object.java:485)
+        at com.intellij.a.e.i.run(i.java:26)
+        - locked <0x052ccaf0> (a java.lang.Object)
+
+"AWT-Windows" daemon prio=6 tid=0x34424800 nid=0xb88 runnable [0x34f9f000]
+   java.lang.Thread.State: RUNNABLE
+        at sun.awt.windows.WToolkit.eventLoop(Native Method)
+        at sun.awt.windows.WToolkit.run(WToolkit.java:291)
+        at java.lang.Thread.run(Thread.java:619)
+
+"Java2D Disposer" daemon prio=10 tid=0x348e4400 nid=0xb68 in Object.wait() [0x34eff000]
+   java.lang.Thread.State: WAITING (on object monitor)
+        at java.lang.Object.wait(Native Method)
+        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118)
+        - locked <0x052ccbc8> (a java.lang.ref.ReferenceQueue$Lock)
+        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134)
+        at sun.java2d.Disposer.run(Disposer.java:125)
+        at java.lang.Thread.run(Thread.java:619)
+
+"Lock thread" prio=2 tid=0x34875400 nid=0x780 runnable [0x34a1f000]
+   java.lang.Thread.State: RUNNABLE
+        at java.net.PlainSocketImpl.socketAccept(Native Method)
+        at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:390)
+        - locked <0x0523cc30> (a java.net.SocksSocketImpl)
+        at java.net.ServerSocket.implAccept(ServerSocket.java:453)
+        at java.net.ServerSocket.accept(ServerSocket.java:421)
+        at com.intellij.idea.SocketLock$MyRunnable.run(SocketLock.java:191)
+        at java.lang.Thread.run(Thread.java:619)
+
+"timed reference disposer" prio=2 tid=0x3476e400 nid=0xac4 waiting on condition [0x3497f000]
+   java.lang.Thread.State: TIMED_WAITING (parking)
+        at sun.misc.Unsafe.park(Native Method)
+        - parking to wait for  <0x051e5ee8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
+        at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198)
+        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1963)
+        at java.util.concurrent.DelayQueue.take(DelayQueue.java:164)
+        at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:583)
+        at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:576)
+        at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
+        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
+        at java.lang.Thread.run(Thread.java:619)
+
+"Exe4JStartupThread" daemon prio=6 tid=0x34420800 nid=0xac0 waiting on condition [0x3472f000]
+   java.lang.Thread.State: TIMED_WAITING (sleeping)
+        at java.lang.Thread.sleep(Native Method)
+        at com.exe4j.Controller$StartupThread.run(Unknown Source)
+
+"Low Memory Detector" daemon prio=6 tid=0x343f2400 nid=0xa9c runnable [0x00000000]
+   java.lang.Thread.State: RUNNABLE
+
+"CompilerThread0" daemon prio=10 tid=0x343ec000 nid=0xa98 waiting on condition [0x00000000]
+   java.lang.Thread.State: RUNNABLE
+
+"Attach Listener" daemon prio=10 tid=0x343ea800 nid=0xa94 waiting on condition [0x00000000]
+   java.lang.Thread.State: RUNNABLE
+
+"Signal Dispatcher" daemon prio=10 tid=0x343e9400 nid=0xa90 runnable [0x00000000]
+   java.lang.Thread.State: RUNNABLE
+
+"Finalizer" daemon prio=8 tid=0x343da000 nid=0xa78 in Object.wait() [0x3454f000]
+   java.lang.Thread.State: WAITING (on object monitor)
+        at java.lang.Object.wait(Native Method)
+        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118)
+        - locked <0x051c0478> (a java.lang.ref.ReferenceQueue$Lock)
+        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134)
+        at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)
+
+"Reference Handler" daemon prio=10 tid=0x343d5400 nid=0xa74 in Object.wait() [0x344ff000]
+   java.lang.Thread.State: WAITING (on object monitor)
+        at java.lang.Object.wait(Native Method)
+        at java.lang.Object.wait(Object.java:485)
+        at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)
+        - locked <0x051c00a8> (a java.lang.ref.Reference$Lock)
+
+"main" prio=6 tid=0x003c7c00 nid=0x944 waiting on condition [0x00000000]
+   java.lang.Thread.State: RUNNABLE
+
+"VM Thread" prio=10 tid=0x343d1400 nid=0xa70 runnable
+
+"VM Periodic Task Thread" prio=10 tid=0x3440dc00 nid=0xabc waiting on condition
+
+JNI global references: 2764
\ No newline at end of file
diff --git a/java/java-tests/testData/vfs/changes/PsiChangesTest.java b/java/java-tests/testData/vfs/changes/PsiChangesTest.java
new file mode 100644
index 0000000..9eed5b3
--- /dev/null
+++ b/java/java-tests/testData/vfs/changes/PsiChangesTest.java
@@ -0,0 +1,13 @@
+public class PsiChangesTest {
+  private int a;
+  private int b;
+
+  PsiChangesTest() {
+  }
+
+  void foo() {
+  }
+
+  void bar() {
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/vfs/changes/PsiChangesTest_changed.java b/java/java-tests/testData/vfs/changes/PsiChangesTest_changed.java
new file mode 100644
index 0000000..d1b6324
--- /dev/null
+++ b/java/java-tests/testData/vfs/changes/PsiChangesTest_changed.java
@@ -0,0 +1,15 @@
+public class PsiChangesTest {
+  protected int a;
+  private int c;
+
+  PsiChangesTest() {
+    int i = 0;
+  }
+
+  void foo() {
+    int i = 0;
+  }
+
+  void bar2() {
+  }  
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/vfs/changes/results/fields.txt b/java/java-tests/testData/vfs/changes/results/fields.txt
new file mode 100644
index 0000000..db4ece4
--- /dev/null
+++ b/java/java-tests/testData/vfs/changes/results/fields.txt
@@ -0,0 +1,3 @@
+a : Modified
+b : Deleted
+c : Added
\ No newline at end of file
diff --git a/java/java-tests/testData/vfs/changes/results/methods.txt b/java/java-tests/testData/vfs/changes/results/methods.txt
new file mode 100644
index 0000000..ce93573
--- /dev/null
+++ b/java/java-tests/testData/vfs/changes/results/methods.txt
@@ -0,0 +1,4 @@
+PsiChangesTest : Modified
+foo : Modified
+bar : Deleted
+bar2 : Added
diff --git a/java/java-tests/testData/vfs/findFileByUrl/1.txt b/java/java-tests/testData/vfs/findFileByUrl/1.txt
new file mode 100644
index 0000000..276e789
--- /dev/null
+++ b/java/java-tests/testData/vfs/findFileByUrl/1.txt
@@ -0,0 +1 @@
+test text
\ No newline at end of file
diff --git a/java/java-tests/testData/vfs/findFileByUrl/test.zip b/java/java-tests/testData/vfs/findFileByUrl/test.zip
new file mode 100644
index 0000000..16021fb
--- /dev/null
+++ b/java/java-tests/testData/vfs/findFileByUrl/test.zip
Binary files differ
diff --git a/java/java-tests/testData/vfs/relativePath/subDir/subSubDir/empty.txt b/java/java-tests/testData/vfs/relativePath/subDir/subSubDir/empty.txt
new file mode 100644
index 0000000..013ed0d
--- /dev/null
+++ b/java/java-tests/testData/vfs/relativePath/subDir/subSubDir/empty.txt
@@ -0,0 +1 @@
+Empty file
\ No newline at end of file